@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,180 @@
|
|
|
1
|
+
import { AuthTokenError } from "../Errors.mjs";
|
|
2
|
+
import { OAuthAuthorization, OAuthCallbackParams, OAuthConnection, OAuthState, OAuthTokens } from "./schema.mjs";
|
|
3
|
+
import { InvalidOAuthState, OAuthAccessDenied, OAuthConnectionNotFound, OAuthProviderError, OAuthReauthorizationRequired } from "./errors.mjs";
|
|
4
|
+
import { OAuthStateStore } from "./OAuthStateStore.mjs";
|
|
5
|
+
import { AuthTokenCodec } from "../AuthTokenCodec.mjs";
|
|
6
|
+
import { OAuthConnectionStore } from "./OAuthConnectionStore.mjs";
|
|
7
|
+
import { OAuthProviders } from "./OAuthProviders.mjs";
|
|
8
|
+
import { OAuthPolicy } from "./policy.mjs";
|
|
9
|
+
import { Context, Crypto, DateTime, Duration, Effect, Encoding, Layer, Option, Redacted, Schema } from "effect";
|
|
10
|
+
import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http";
|
|
11
|
+
//#region src/oauth/OAuth.ts
|
|
12
|
+
const stateTokenScope = "effect-auth/oauth-state-token";
|
|
13
|
+
const decodeCallbackParams = Schema.decodeUnknownEffect(OAuthCallbackParams);
|
|
14
|
+
/**
|
|
15
|
+
* Provider-independent OAuth 2.0 authorization-code workflow for linking
|
|
16
|
+
* provider accounts to application subjects. Providers contribute endpoints
|
|
17
|
+
* and response mappings through `OAuthProviders`; every security-relevant
|
|
18
|
+
* step — state issuance and single-use validation, subject and redirect-URI
|
|
19
|
+
* binding, code exchange, token refresh, revocation — lives here so it cannot
|
|
20
|
+
* vary per provider.
|
|
21
|
+
*/
|
|
22
|
+
var OAuth = class OAuth extends Context.Service()("effect-auth/OAuth") {
|
|
23
|
+
static layer = Layer.effect(OAuth)(Effect.gen(function* () {
|
|
24
|
+
const policy = yield* OAuthPolicy;
|
|
25
|
+
const providers = yield* OAuthProviders;
|
|
26
|
+
const states = yield* OAuthStateStore;
|
|
27
|
+
const connections = yield* OAuthConnectionStore;
|
|
28
|
+
const codec = yield* AuthTokenCodec;
|
|
29
|
+
const crypto = yield* Crypto.Crypto;
|
|
30
|
+
const client = yield* HttpClient.HttpClient;
|
|
31
|
+
const randomStateToken = crypto.randomBytes(32).pipe(Effect.map(Encoding.encodeBase64Url), Effect.mapError(() => AuthTokenError.make({ message: "Secure randomness unavailable" })));
|
|
32
|
+
const unavailable = (provider, endpoint) => OAuthProviderError.make({
|
|
33
|
+
provider,
|
|
34
|
+
message: `The provider's ${endpoint} could not be reached`
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* One token-endpoint call. Providers such as GitHub answer errors with
|
|
38
|
+
* status 200 and RFC-compliant providers answer them with status 400,
|
|
39
|
+
* so the payload — not the status — decides the outcome.
|
|
40
|
+
*/
|
|
41
|
+
const requestTokenGrant = Effect.fn("OAuth.requestTokenGrant")(function* (provider, grantParams) {
|
|
42
|
+
const request = HttpClientRequest.post(provider.endpoints.token).pipe(HttpClientRequest.acceptJson, HttpClientRequest.bodyUrlParams({
|
|
43
|
+
...grantParams,
|
|
44
|
+
client_id: provider.clientId,
|
|
45
|
+
client_secret: Redacted.value(provider.clientSecret)
|
|
46
|
+
}));
|
|
47
|
+
const payload = yield* (yield* client.execute(request).pipe(Effect.mapError(() => unavailable(provider.key, "token endpoint")))).json.pipe(Effect.mapError(() => OAuthProviderError.make({
|
|
48
|
+
provider: provider.key,
|
|
49
|
+
message: "The token endpoint returned a non-JSON response"
|
|
50
|
+
})));
|
|
51
|
+
return yield* provider.decodeTokenGrant(payload);
|
|
52
|
+
});
|
|
53
|
+
const fetchIdentity = Effect.fn("OAuth.fetchIdentity")(function* (provider, accessToken) {
|
|
54
|
+
const request = HttpClientRequest.get(provider.identity.url).pipe(HttpClientRequest.acceptJson, HttpClientRequest.setHeaders(provider.identity.headers), HttpClientRequest.bearerToken(accessToken));
|
|
55
|
+
const payload = yield* (yield* client.execute(request).pipe(Effect.flatMap(HttpClientResponse.filterStatusOk), Effect.mapError(() => unavailable(provider.key, "identity endpoint")))).json.pipe(Effect.mapError(() => OAuthProviderError.make({
|
|
56
|
+
provider: provider.key,
|
|
57
|
+
message: "The identity endpoint returned a non-JSON response"
|
|
58
|
+
})));
|
|
59
|
+
return yield* provider.identity.decode(payload);
|
|
60
|
+
});
|
|
61
|
+
const tokensFromGrant = (grant, now) => OAuthTokens.make({
|
|
62
|
+
accessToken: grant.accessToken,
|
|
63
|
+
tokenType: grant.tokenType,
|
|
64
|
+
accessTokenExpiresAt: Option.map(grant.expiresIn, (lifetime) => DateTime.addDuration(now, lifetime)),
|
|
65
|
+
refreshToken: grant.refreshToken,
|
|
66
|
+
refreshTokenExpiresAt: Option.map(grant.refreshTokenExpiresIn, (lifetime) => DateTime.addDuration(now, lifetime)),
|
|
67
|
+
scope: grant.scope
|
|
68
|
+
});
|
|
69
|
+
return OAuth.of({
|
|
70
|
+
begin: Effect.fn("OAuth.begin")(function* (input) {
|
|
71
|
+
const provider = yield* providers.lookup(input.provider);
|
|
72
|
+
const stateToken = yield* randomStateToken;
|
|
73
|
+
const stateDigest = yield* codec.digestToken(Redacted.make(stateToken), stateTokenScope);
|
|
74
|
+
const now = yield* DateTime.now;
|
|
75
|
+
const expiresAt = DateTime.addDuration(now, policy.stateLifetime);
|
|
76
|
+
yield* states.issue(OAuthState.make({
|
|
77
|
+
stateDigest,
|
|
78
|
+
provider: provider.key,
|
|
79
|
+
subjectId: input.subjectId,
|
|
80
|
+
redirectUri: input.redirectUri,
|
|
81
|
+
issuedAt: now,
|
|
82
|
+
expiresAt
|
|
83
|
+
}));
|
|
84
|
+
const url = yield* Effect.try(() => new URL(provider.endpoints.authorization)).pipe(Effect.orDie);
|
|
85
|
+
url.searchParams.set("client_id", provider.clientId);
|
|
86
|
+
url.searchParams.set("redirect_uri", input.redirectUri);
|
|
87
|
+
url.searchParams.set("response_type", "code");
|
|
88
|
+
url.searchParams.set("state", stateToken);
|
|
89
|
+
if (provider.scopes.length > 0) url.searchParams.set("scope", provider.scopes.join(" "));
|
|
90
|
+
for (const [name, value] of Object.entries(provider.authorizationParams)) url.searchParams.set(name, value);
|
|
91
|
+
return OAuthAuthorization.make({
|
|
92
|
+
url: url.toString(),
|
|
93
|
+
expiresAt
|
|
94
|
+
});
|
|
95
|
+
}),
|
|
96
|
+
complete: Effect.fn("OAuth.complete")(function* (input) {
|
|
97
|
+
const provider = yield* providers.lookup(input.provider);
|
|
98
|
+
const params = yield* decodeCallbackParams(input.params).pipe(Effect.mapError(() => InvalidOAuthState.make()));
|
|
99
|
+
if (params.state === void 0 || params.state === "") return yield* InvalidOAuthState.make();
|
|
100
|
+
const stateDigest = yield* codec.digestToken(Redacted.make(params.state), stateTokenScope);
|
|
101
|
+
const state = yield* states.consume(stateDigest);
|
|
102
|
+
if (state.provider !== provider.key || state.subjectId !== input.subjectId || state.redirectUri !== input.redirectUri) return yield* InvalidOAuthState.make();
|
|
103
|
+
if (params.error === "access_denied") return yield* OAuthAccessDenied.make();
|
|
104
|
+
if (params.error !== void 0) return yield* OAuthProviderError.make({
|
|
105
|
+
provider: provider.key,
|
|
106
|
+
message: "The provider rejected the authorization request"
|
|
107
|
+
});
|
|
108
|
+
if (params.code === void 0 || params.code === "") return yield* InvalidOAuthState.make();
|
|
109
|
+
const grant = yield* requestTokenGrant(provider, {
|
|
110
|
+
grant_type: "authorization_code",
|
|
111
|
+
code: params.code,
|
|
112
|
+
redirect_uri: input.redirectUri
|
|
113
|
+
}).pipe(Effect.catchTag("OAuthGrantRejected", (rejection) => rejection.code === "access_denied" ? OAuthAccessDenied.make() : OAuthProviderError.make({
|
|
114
|
+
provider: provider.key,
|
|
115
|
+
message: `The provider rejected the code exchange (${rejection.code})`
|
|
116
|
+
})));
|
|
117
|
+
const identity = yield* fetchIdentity(provider, grant.accessToken);
|
|
118
|
+
const now = yield* DateTime.now;
|
|
119
|
+
const connection = OAuthConnection.make({
|
|
120
|
+
provider: provider.key,
|
|
121
|
+
subjectId: input.subjectId,
|
|
122
|
+
identity,
|
|
123
|
+
tokens: tokensFromGrant(grant, now),
|
|
124
|
+
connectedAt: now,
|
|
125
|
+
updatedAt: now
|
|
126
|
+
});
|
|
127
|
+
yield* connections.put(connection);
|
|
128
|
+
return connection;
|
|
129
|
+
}),
|
|
130
|
+
connection: (provider, subjectId) => connections.get(provider, subjectId),
|
|
131
|
+
accessToken: Effect.fn("OAuth.accessToken")(function* (providerKey, subjectId) {
|
|
132
|
+
const existing = yield* connections.get(providerKey, subjectId);
|
|
133
|
+
if (Option.isNone(existing)) return yield* OAuthConnectionNotFound.make();
|
|
134
|
+
const current = existing.value;
|
|
135
|
+
const now = yield* DateTime.now;
|
|
136
|
+
const nowMillis = DateTime.toEpochMillis(now);
|
|
137
|
+
const marginMillis = Duration.toMillis(policy.accessTokenRefreshMargin);
|
|
138
|
+
if (Option.isNone(current.tokens.accessTokenExpiresAt) || nowMillis + marginMillis < DateTime.toEpochMillis(current.tokens.accessTokenExpiresAt.value)) return current.tokens.accessToken;
|
|
139
|
+
const refreshToken = current.tokens.refreshToken;
|
|
140
|
+
const refreshTokenDead = Option.isNone(refreshToken) || Option.isSome(current.tokens.refreshTokenExpiresAt) && nowMillis >= DateTime.toEpochMillis(current.tokens.refreshTokenExpiresAt.value);
|
|
141
|
+
if (Option.isNone(refreshToken) || refreshTokenDead) return yield* OAuthReauthorizationRequired.make();
|
|
142
|
+
const provider = yield* providers.lookup(providerKey);
|
|
143
|
+
const grant = yield* requestTokenGrant(provider, {
|
|
144
|
+
grant_type: "refresh_token",
|
|
145
|
+
refresh_token: Redacted.value(refreshToken.value)
|
|
146
|
+
}).pipe(Effect.catchTag("OAuthGrantRejected", () => OAuthReauthorizationRequired.make()));
|
|
147
|
+
const rotated = tokensFromGrant(grant, now);
|
|
148
|
+
const tokens = Option.isSome(rotated.refreshToken) ? rotated : OAuthTokens.make({
|
|
149
|
+
...rotated,
|
|
150
|
+
refreshToken: current.tokens.refreshToken,
|
|
151
|
+
refreshTokenExpiresAt: current.tokens.refreshTokenExpiresAt
|
|
152
|
+
});
|
|
153
|
+
yield* connections.put(OAuthConnection.make({
|
|
154
|
+
...current,
|
|
155
|
+
tokens,
|
|
156
|
+
updatedAt: now
|
|
157
|
+
}));
|
|
158
|
+
return tokens.accessToken;
|
|
159
|
+
}),
|
|
160
|
+
disconnect: Effect.fn("OAuth.disconnect")(function* (providerKey, subjectId) {
|
|
161
|
+
const existing = yield* connections.get(providerKey, subjectId);
|
|
162
|
+
if (Option.isNone(existing)) return;
|
|
163
|
+
const provider = yield* providers.lookup(providerKey);
|
|
164
|
+
if (Option.isSome(provider.revocation)) {
|
|
165
|
+
const response = yield* client.execute(provider.revocation.value(existing.value.tokens.accessToken)).pipe(Effect.mapError(() => unavailable(provider.key, "revocation endpoint")));
|
|
166
|
+
const alreadyGone = response.status === 404 || response.status === 422;
|
|
167
|
+
if (!(response.status >= 200 && response.status < 300) && !alreadyGone) return yield* OAuthProviderError.make({
|
|
168
|
+
provider: provider.key,
|
|
169
|
+
message: "The provider refused the token revocation"
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
yield* connections.remove(providerKey, subjectId);
|
|
173
|
+
})
|
|
174
|
+
});
|
|
175
|
+
}));
|
|
176
|
+
};
|
|
177
|
+
//#endregion
|
|
178
|
+
export { OAuth };
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=OAuth.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuth.mjs","names":[],"sources":["../../src/oauth/OAuth.ts"],"sourcesContent":["import {\n Context,\n Crypto,\n DateTime,\n Duration,\n Effect,\n Encoding,\n Layer,\n Option,\n Redacted,\n Schema,\n} from \"effect\";\nimport { HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\";\n\nimport { AuthTokenCodec } from \"../AuthTokenCodec\";\nimport { type AuthStoreError, AuthTokenError } from \"../Errors\";\nimport type { SubjectId } from \"../Schema\";\nimport {\n type OAuthGrantRejected,\n type UnknownOAuthProvider,\n InvalidOAuthState,\n OAuthAccessDenied,\n OAuthConnectionNotFound,\n OAuthProviderError,\n OAuthReauthorizationRequired,\n} from \"./errors\";\nimport { OAuthConnectionStore } from \"./OAuthConnectionStore\";\nimport type { OAuthProvider, OAuthTokenGrant } from \"./OAuthProvider\";\nimport { OAuthProviders } from \"./OAuthProviders\";\nimport { OAuthStateStore } from \"./OAuthStateStore\";\nimport { OAuthPolicy } from \"./policy\";\nimport {\n type OAuthProviderKey,\n OAuthAuthorization,\n OAuthCallbackParams,\n OAuthConnection,\n OAuthState,\n OAuthTokens,\n} from \"./schema\";\n\nconst stateTokenScope = \"effect-auth/oauth-state-token\";\n\n// oxlint-disable-next-line no-restricted-properties -- Callback query parameters are untrusted input.\nconst decodeCallbackParams = Schema.decodeUnknownEffect(OAuthCallbackParams);\n\nexport interface BeginOAuthInput {\n readonly provider: OAuthProviderKey;\n /** The application subject initiating the link; the state is bound to it. */\n readonly subjectId: SubjectId;\n /** The callback URL registered with the provider for this application. */\n readonly redirectUri: string;\n}\n\nexport interface CompleteOAuthInput {\n readonly provider: OAuthProviderKey;\n /** The subject of the *current* session; must match the one that began the flow. */\n readonly subjectId: SubjectId;\n /** Must equal the redirect URI the flow began with. */\n readonly redirectUri: string;\n /** The raw callback query parameters, validated internally. */\n readonly params: unknown;\n}\n\nexport type CompleteOAuthError =\n | UnknownOAuthProvider\n | InvalidOAuthState\n | OAuthAccessDenied\n | OAuthProviderError\n | AuthStoreError\n | AuthTokenError;\n\n/**\n * Provider-independent OAuth 2.0 authorization-code workflow for linking\n * provider accounts to application subjects. Providers contribute endpoints\n * and response mappings through `OAuthProviders`; every security-relevant\n * step — state issuance and single-use validation, subject and redirect-URI\n * binding, code exchange, token refresh, revocation — lives here so it cannot\n * vary per provider.\n */\nexport class OAuth extends Context.Service<\n OAuth,\n {\n /**\n * Issues a single-use, expiring `state` bound to the subject and redirect\n * URI, and returns the provider authorization URL to redirect the actor\n * to.\n */\n readonly begin: (\n input: BeginOAuthInput,\n ) => Effect.Effect<OAuthAuthorization, UnknownOAuthProvider | AuthStoreError | AuthTokenError>;\n /**\n * Validates the callback, consumes the state (single use, whatever the\n * outcome), exchanges the code, fetches and validates the provider\n * identity, and persists the connection — replacing any previous\n * connection for the same subject and provider.\n */\n readonly complete: (\n input: CompleteOAuthInput,\n ) => Effect.Effect<OAuthConnection, CompleteOAuthError>;\n /** The subject's current connection, if any. Token fields stay `Redacted`. */\n readonly connection: (\n provider: OAuthProviderKey,\n subjectId: SubjectId,\n ) => Effect.Effect<Option.Option<OAuthConnection>, AuthStoreError>;\n /**\n * A currently valid access token for the subject, refreshing (and\n * persisting) it first when it is at or past the refresh margin. Fails\n * with `OAuthReauthorizationRequired` when no live refresh path exists or\n * the provider rejects the refresh grant.\n */\n readonly accessToken: (\n provider: OAuthProviderKey,\n subjectId: SubjectId,\n ) => Effect.Effect<\n Redacted.Redacted<string>,\n | UnknownOAuthProvider\n | OAuthConnectionNotFound\n | OAuthReauthorizationRequired\n | OAuthProviderError\n | AuthStoreError\n >;\n /**\n * Revokes the provider grant (when the provider supports revocation) and\n * removes the stored connection. Idempotent: succeeds when no connection\n * exists. A failed revocation keeps the connection so the caller can\n * retry.\n */\n readonly disconnect: (\n provider: OAuthProviderKey,\n subjectId: SubjectId,\n ) => Effect.Effect<void, UnknownOAuthProvider | OAuthProviderError | AuthStoreError>;\n }\n>()(\"effect-auth/OAuth\") {\n static readonly layer: Layer.Layer<\n OAuth,\n never,\n | OAuthProviders\n | OAuthStateStore\n | OAuthConnectionStore\n | AuthTokenCodec\n | Crypto.Crypto\n | HttpClient.HttpClient\n > = Layer.effect(OAuth)(\n Effect.gen(function* () {\n const policy = yield* OAuthPolicy;\n const providers = yield* OAuthProviders;\n const states = yield* OAuthStateStore;\n const connections = yield* OAuthConnectionStore;\n const codec = yield* AuthTokenCodec;\n const crypto = yield* Crypto.Crypto;\n const client = yield* HttpClient.HttpClient;\n\n const randomStateToken = crypto.randomBytes(32).pipe(\n Effect.map(Encoding.encodeBase64Url),\n Effect.mapError(() => AuthTokenError.make({ message: \"Secure randomness unavailable\" })),\n );\n\n const unavailable = (provider: OAuthProviderKey, endpoint: string) =>\n OAuthProviderError.make({\n provider,\n message: `The provider's ${endpoint} could not be reached`,\n });\n\n /**\n * One token-endpoint call. Providers such as GitHub answer errors with\n * status 200 and RFC-compliant providers answer them with status 400,\n * so the payload — not the status — decides the outcome.\n */\n const requestTokenGrant = Effect.fn(\"OAuth.requestTokenGrant\")(function* (\n provider: OAuthProvider,\n grantParams: Readonly<Record<string, string>>,\n ): Effect.fn.Return<OAuthTokenGrant, OAuthGrantRejected | OAuthProviderError> {\n const request = HttpClientRequest.post(provider.endpoints.token).pipe(\n HttpClientRequest.acceptJson,\n HttpClientRequest.bodyUrlParams({\n ...grantParams,\n client_id: provider.clientId,\n client_secret: Redacted.value(provider.clientSecret),\n }),\n );\n\n const response = yield* client\n .execute(request)\n .pipe(Effect.mapError(() => unavailable(provider.key, \"token endpoint\")));\n\n const payload = yield* response.json.pipe(\n Effect.mapError(() =>\n OAuthProviderError.make({\n provider: provider.key,\n message: \"The token endpoint returned a non-JSON response\",\n }),\n ),\n );\n\n return yield* provider.decodeTokenGrant(payload);\n });\n\n const fetchIdentity = Effect.fn(\"OAuth.fetchIdentity\")(function* (\n provider: OAuthProvider,\n accessToken: Redacted.Redacted<string>,\n ) {\n const request = HttpClientRequest.get(provider.identity.url).pipe(\n HttpClientRequest.acceptJson,\n HttpClientRequest.setHeaders(provider.identity.headers),\n HttpClientRequest.bearerToken(accessToken),\n );\n\n const response = yield* client.execute(request).pipe(\n Effect.flatMap(HttpClientResponse.filterStatusOk),\n Effect.mapError(() => unavailable(provider.key, \"identity endpoint\")),\n );\n\n const payload = yield* response.json.pipe(\n Effect.mapError(() =>\n OAuthProviderError.make({\n provider: provider.key,\n message: \"The identity endpoint returned a non-JSON response\",\n }),\n ),\n );\n\n return yield* provider.identity.decode(payload);\n });\n\n const tokensFromGrant = (grant: OAuthTokenGrant, now: DateTime.Utc) =>\n OAuthTokens.make({\n accessToken: grant.accessToken,\n tokenType: grant.tokenType,\n accessTokenExpiresAt: Option.map(grant.expiresIn, (lifetime) =>\n DateTime.addDuration(now, lifetime),\n ),\n refreshToken: grant.refreshToken,\n refreshTokenExpiresAt: Option.map(grant.refreshTokenExpiresIn, (lifetime) =>\n DateTime.addDuration(now, lifetime),\n ),\n scope: grant.scope,\n });\n\n return OAuth.of({\n begin: Effect.fn(\"OAuth.begin\")(function* (input) {\n const provider = yield* providers.lookup(input.provider);\n const stateToken = yield* randomStateToken;\n const stateDigest = yield* codec.digestToken(Redacted.make(stateToken), stateTokenScope);\n const now = yield* DateTime.now;\n const expiresAt = DateTime.addDuration(now, policy.stateLifetime);\n\n yield* states.issue(\n OAuthState.make({\n stateDigest,\n provider: provider.key,\n subjectId: input.subjectId,\n redirectUri: input.redirectUri,\n issuedAt: now,\n expiresAt,\n }),\n );\n\n // An unparseable authorization endpoint is a provider-configuration\n // defect, not a request failure.\n const url = yield* Effect.try(() => new URL(provider.endpoints.authorization)).pipe(\n Effect.orDie,\n );\n\n url.searchParams.set(\"client_id\", provider.clientId);\n url.searchParams.set(\"redirect_uri\", input.redirectUri);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"state\", stateToken);\n if (provider.scopes.length > 0) {\n url.searchParams.set(\"scope\", provider.scopes.join(\" \"));\n }\n for (const [name, value] of Object.entries(provider.authorizationParams)) {\n url.searchParams.set(name, value);\n }\n\n return OAuthAuthorization.make({ url: url.toString(), expiresAt });\n }),\n\n complete: Effect.fn(\"OAuth.complete\")(function* (input) {\n const provider = yield* providers.lookup(input.provider);\n\n const params = yield* decodeCallbackParams(input.params).pipe(\n Effect.mapError(() => InvalidOAuthState.make()),\n );\n\n if (params.state === undefined || params.state === \"\") {\n return yield* InvalidOAuthState.make();\n }\n\n // The state is consumed before anything else is inspected, so every\n // callback — including a denied or malformed one — burns it.\n const stateDigest = yield* codec.digestToken(\n Redacted.make(params.state),\n stateTokenScope,\n );\n\n const state = yield* states.consume(stateDigest);\n\n if (\n state.provider !== provider.key ||\n state.subjectId !== input.subjectId ||\n state.redirectUri !== input.redirectUri\n ) {\n return yield* InvalidOAuthState.make();\n }\n if (params.error === \"access_denied\") {\n return yield* OAuthAccessDenied.make();\n }\n if (params.error !== undefined) {\n return yield* OAuthProviderError.make({\n provider: provider.key,\n message: \"The provider rejected the authorization request\",\n });\n }\n if (params.code === undefined || params.code === \"\") {\n return yield* InvalidOAuthState.make();\n }\n\n const grant = yield* requestTokenGrant(provider, {\n grant_type: \"authorization_code\",\n code: params.code,\n redirect_uri: input.redirectUri,\n }).pipe(\n Effect.catchTag(\n \"OAuthGrantRejected\",\n (rejection): Effect.Effect<never, OAuthAccessDenied | OAuthProviderError> =>\n rejection.code === \"access_denied\"\n ? OAuthAccessDenied.make()\n : OAuthProviderError.make({\n provider: provider.key,\n message: `The provider rejected the code exchange (${rejection.code})`,\n }),\n ),\n );\n\n const identity = yield* fetchIdentity(provider, grant.accessToken);\n const now = yield* DateTime.now;\n\n const connection = OAuthConnection.make({\n provider: provider.key,\n subjectId: input.subjectId,\n identity,\n tokens: tokensFromGrant(grant, now),\n connectedAt: now,\n updatedAt: now,\n });\n\n yield* connections.put(connection);\n\n return connection;\n }),\n\n connection: (provider, subjectId) => connections.get(provider, subjectId),\n\n accessToken: Effect.fn(\"OAuth.accessToken\")(function* (providerKey, subjectId) {\n const existing = yield* connections.get(providerKey, subjectId);\n\n if (Option.isNone(existing)) {\n return yield* OAuthConnectionNotFound.make();\n }\n const current = existing.value;\n const now = yield* DateTime.now;\n const nowMillis = DateTime.toEpochMillis(now);\n const marginMillis = Duration.toMillis(policy.accessTokenRefreshMargin);\n\n const usable =\n Option.isNone(current.tokens.accessTokenExpiresAt) ||\n nowMillis + marginMillis <\n DateTime.toEpochMillis(current.tokens.accessTokenExpiresAt.value);\n\n if (usable) {\n return current.tokens.accessToken;\n }\n const refreshToken = current.tokens.refreshToken;\n\n const refreshTokenDead =\n Option.isNone(refreshToken) ||\n (Option.isSome(current.tokens.refreshTokenExpiresAt) &&\n nowMillis >= DateTime.toEpochMillis(current.tokens.refreshTokenExpiresAt.value));\n\n if (Option.isNone(refreshToken) || refreshTokenDead) {\n return yield* OAuthReauthorizationRequired.make();\n }\n const provider = yield* providers.lookup(providerKey);\n\n // A rejected refresh grant means the provider-side authorization is\n // gone; only a fresh authorization can repair it.\n const grant = yield* requestTokenGrant(provider, {\n grant_type: \"refresh_token\",\n refresh_token: Redacted.value(refreshToken.value),\n }).pipe(Effect.catchTag(\"OAuthGrantRejected\", () => OAuthReauthorizationRequired.make()));\n\n const rotated = tokensFromGrant(grant, now);\n\n // Providers that do not rotate refresh tokens omit them from the\n // refresh response; the previous one then stays valid.\n const tokens = Option.isSome(rotated.refreshToken)\n ? rotated\n : OAuthTokens.make({\n ...rotated,\n refreshToken: current.tokens.refreshToken,\n refreshTokenExpiresAt: current.tokens.refreshTokenExpiresAt,\n });\n\n yield* connections.put(OAuthConnection.make({ ...current, tokens, updatedAt: now }));\n\n return tokens.accessToken;\n }),\n\n disconnect: Effect.fn(\"OAuth.disconnect\")(function* (providerKey, subjectId) {\n const existing = yield* connections.get(providerKey, subjectId);\n\n if (Option.isNone(existing)) {\n return;\n }\n const provider = yield* providers.lookup(providerKey);\n\n if (Option.isSome(provider.revocation)) {\n const response = yield* client\n .execute(provider.revocation.value(existing.value.tokens.accessToken))\n .pipe(Effect.mapError(() => unavailable(provider.key, \"revocation endpoint\")));\n\n const alreadyGone = response.status === 404 || response.status === 422;\n\n if (!(response.status >= 200 && response.status < 300) && !alreadyGone) {\n return yield* OAuthProviderError.make({\n provider: provider.key,\n message: \"The provider refused the token revocation\",\n });\n }\n }\n yield* connections.remove(providerKey, subjectId);\n }),\n });\n }),\n );\n}\n"],"mappings":";;;;;;;;;;;AAwCA,MAAM,kBAAkB;AAGxB,MAAM,uBAAuB,OAAO,oBAAoB,mBAAmB;;;;;;;;;AAoC3E,IAAa,QAAb,MAAa,cAAc,QAAQ,QAqDjC,CAAC,CAAC,mBAAmB,CAAC,CAAC;CACvB,OAAgB,QASZ,MAAM,OAAO,KAAK,CAAC,CACrB,OAAO,IAAI,aAAa;EACtB,MAAM,SAAS,OAAO;EACtB,MAAM,YAAY,OAAO;EACzB,MAAM,SAAS,OAAO;EACtB,MAAM,cAAc,OAAO;EAC3B,MAAM,QAAQ,OAAO;EACrB,MAAM,SAAS,OAAO,OAAO;EAC7B,MAAM,SAAS,OAAO,WAAW;EAEjC,MAAM,mBAAmB,OAAO,YAAY,EAAE,CAAC,CAAC,KAC9C,OAAO,IAAI,SAAS,eAAe,GACnC,OAAO,eAAe,eAAe,KAAK,EAAE,SAAS,gCAAgC,CAAC,CAAC,CACzF;EAEA,MAAM,eAAe,UAA4B,aAC/C,mBAAmB,KAAK;GACtB;GACA,SAAS,kBAAkB,SAAS;EACtC,CAAC;;;;;;EAOH,MAAM,oBAAoB,OAAO,GAAG,yBAAyB,CAAC,CAAC,WAC7D,UACA,aAC4E;GAC5E,MAAM,UAAU,kBAAkB,KAAK,SAAS,UAAU,KAAK,CAAC,CAAC,KAC/D,kBAAkB,YAClB,kBAAkB,cAAc;IAC9B,GAAG;IACH,WAAW,SAAS;IACpB,eAAe,SAAS,MAAM,SAAS,YAAY;GACrD,CAAC,CACH;GAMA,MAAM,UAAU,QAAO,OAJC,OACrB,QAAQ,OAAO,CAAC,CAChB,KAAK,OAAO,eAAe,YAAY,SAAS,KAAK,gBAAgB,CAAC,CAAC,EAAA,CAE1C,KAAK,KACnC,OAAO,eACL,mBAAmB,KAAK;IACtB,UAAU,SAAS;IACnB,SAAS;GACX,CAAC,CACH,CACF;GAEA,OAAO,OAAO,SAAS,iBAAiB,OAAO;EACjD,CAAC;EAED,MAAM,gBAAgB,OAAO,GAAG,qBAAqB,CAAC,CAAC,WACrD,UACA,aACA;GACA,MAAM,UAAU,kBAAkB,IAAI,SAAS,SAAS,GAAG,CAAC,CAAC,KAC3D,kBAAkB,YAClB,kBAAkB,WAAW,SAAS,SAAS,OAAO,GACtD,kBAAkB,YAAY,WAAW,CAC3C;GAOA,MAAM,UAAU,QAAO,OALC,OAAO,QAAQ,OAAO,CAAC,CAAC,KAC9C,OAAO,QAAQ,mBAAmB,cAAc,GAChD,OAAO,eAAe,YAAY,SAAS,KAAK,mBAAmB,CAAC,CACtE,EAAA,CAEgC,KAAK,KACnC,OAAO,eACL,mBAAmB,KAAK;IACtB,UAAU,SAAS;IACnB,SAAS;GACX,CAAC,CACH,CACF;GAEA,OAAO,OAAO,SAAS,SAAS,OAAO,OAAO;EAChD,CAAC;EAED,MAAM,mBAAmB,OAAwB,QAC/C,YAAY,KAAK;GACf,aAAa,MAAM;GACnB,WAAW,MAAM;GACjB,sBAAsB,OAAO,IAAI,MAAM,YAAY,aACjD,SAAS,YAAY,KAAK,QAAQ,CACpC;GACA,cAAc,MAAM;GACpB,uBAAuB,OAAO,IAAI,MAAM,wBAAwB,aAC9D,SAAS,YAAY,KAAK,QAAQ,CACpC;GACA,OAAO,MAAM;EACf,CAAC;EAEH,OAAO,MAAM,GAAG;GACd,OAAO,OAAO,GAAG,aAAa,CAAC,CAAC,WAAW,OAAO;IAChD,MAAM,WAAW,OAAO,UAAU,OAAO,MAAM,QAAQ;IACvD,MAAM,aAAa,OAAO;IAC1B,MAAM,cAAc,OAAO,MAAM,YAAY,SAAS,KAAK,UAAU,GAAG,eAAe;IACvF,MAAM,MAAM,OAAO,SAAS;IAC5B,MAAM,YAAY,SAAS,YAAY,KAAK,OAAO,aAAa;IAEhE,OAAO,OAAO,MACZ,WAAW,KAAK;KACd;KACA,UAAU,SAAS;KACnB,WAAW,MAAM;KACjB,aAAa,MAAM;KACnB,UAAU;KACV;IACF,CAAC,CACH;IAIA,MAAM,MAAM,OAAO,OAAO,UAAU,IAAI,IAAI,SAAS,UAAU,aAAa,CAAC,CAAC,CAAC,KAC7E,OAAO,KACT;IAEA,IAAI,aAAa,IAAI,aAAa,SAAS,QAAQ;IACnD,IAAI,aAAa,IAAI,gBAAgB,MAAM,WAAW;IACtD,IAAI,aAAa,IAAI,iBAAiB,MAAM;IAC5C,IAAI,aAAa,IAAI,SAAS,UAAU;IACxC,IAAI,SAAS,OAAO,SAAS,GAC3B,IAAI,aAAa,IAAI,SAAS,SAAS,OAAO,KAAK,GAAG,CAAC;IAEzD,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,SAAS,mBAAmB,GACrE,IAAI,aAAa,IAAI,MAAM,KAAK;IAGlC,OAAO,mBAAmB,KAAK;KAAE,KAAK,IAAI,SAAS;KAAG;IAAU,CAAC;GACnE,CAAC;GAED,UAAU,OAAO,GAAG,gBAAgB,CAAC,CAAC,WAAW,OAAO;IACtD,MAAM,WAAW,OAAO,UAAU,OAAO,MAAM,QAAQ;IAEvD,MAAM,SAAS,OAAO,qBAAqB,MAAM,MAAM,CAAC,CAAC,KACvD,OAAO,eAAe,kBAAkB,KAAK,CAAC,CAChD;IAEA,IAAI,OAAO,UAAU,KAAA,KAAa,OAAO,UAAU,IACjD,OAAO,OAAO,kBAAkB,KAAK;IAKvC,MAAM,cAAc,OAAO,MAAM,YAC/B,SAAS,KAAK,OAAO,KAAK,GAC1B,eACF;IAEA,MAAM,QAAQ,OAAO,OAAO,QAAQ,WAAW;IAE/C,IACE,MAAM,aAAa,SAAS,OAC5B,MAAM,cAAc,MAAM,aAC1B,MAAM,gBAAgB,MAAM,aAE5B,OAAO,OAAO,kBAAkB,KAAK;IAEvC,IAAI,OAAO,UAAU,iBACnB,OAAO,OAAO,kBAAkB,KAAK;IAEvC,IAAI,OAAO,UAAU,KAAA,GACnB,OAAO,OAAO,mBAAmB,KAAK;KACpC,UAAU,SAAS;KACnB,SAAS;IACX,CAAC;IAEH,IAAI,OAAO,SAAS,KAAA,KAAa,OAAO,SAAS,IAC/C,OAAO,OAAO,kBAAkB,KAAK;IAGvC,MAAM,QAAQ,OAAO,kBAAkB,UAAU;KAC/C,YAAY;KACZ,MAAM,OAAO;KACb,cAAc,MAAM;IACtB,CAAC,CAAC,CAAC,KACD,OAAO,SACL,uBACC,cACC,UAAU,SAAS,kBACf,kBAAkB,KAAK,IACvB,mBAAmB,KAAK;KACtB,UAAU,SAAS;KACnB,SAAS,4CAA4C,UAAU,KAAK;IACtE,CAAC,CACT,CACF;IAEA,MAAM,WAAW,OAAO,cAAc,UAAU,MAAM,WAAW;IACjE,MAAM,MAAM,OAAO,SAAS;IAE5B,MAAM,aAAa,gBAAgB,KAAK;KACtC,UAAU,SAAS;KACnB,WAAW,MAAM;KACjB;KACA,QAAQ,gBAAgB,OAAO,GAAG;KAClC,aAAa;KACb,WAAW;IACb,CAAC;IAED,OAAO,YAAY,IAAI,UAAU;IAEjC,OAAO;GACT,CAAC;GAED,aAAa,UAAU,cAAc,YAAY,IAAI,UAAU,SAAS;GAExE,aAAa,OAAO,GAAG,mBAAmB,CAAC,CAAC,WAAW,aAAa,WAAW;IAC7E,MAAM,WAAW,OAAO,YAAY,IAAI,aAAa,SAAS;IAE9D,IAAI,OAAO,OAAO,QAAQ,GACxB,OAAO,OAAO,wBAAwB,KAAK;IAE7C,MAAM,UAAU,SAAS;IACzB,MAAM,MAAM,OAAO,SAAS;IAC5B,MAAM,YAAY,SAAS,cAAc,GAAG;IAC5C,MAAM,eAAe,SAAS,SAAS,OAAO,wBAAwB;IAOtE,IAJE,OAAO,OAAO,QAAQ,OAAO,oBAAoB,KACjD,YAAY,eACV,SAAS,cAAc,QAAQ,OAAO,qBAAqB,KAAK,GAGlE,OAAO,QAAQ,OAAO;IAExB,MAAM,eAAe,QAAQ,OAAO;IAEpC,MAAM,mBACJ,OAAO,OAAO,YAAY,KACzB,OAAO,OAAO,QAAQ,OAAO,qBAAqB,KACjD,aAAa,SAAS,cAAc,QAAQ,OAAO,sBAAsB,KAAK;IAElF,IAAI,OAAO,OAAO,YAAY,KAAK,kBACjC,OAAO,OAAO,6BAA6B,KAAK;IAElD,MAAM,WAAW,OAAO,UAAU,OAAO,WAAW;IAIpD,MAAM,QAAQ,OAAO,kBAAkB,UAAU;KAC/C,YAAY;KACZ,eAAe,SAAS,MAAM,aAAa,KAAK;IAClD,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,4BAA4B,6BAA6B,KAAK,CAAC,CAAC;IAExF,MAAM,UAAU,gBAAgB,OAAO,GAAG;IAI1C,MAAM,SAAS,OAAO,OAAO,QAAQ,YAAY,IAC7C,UACA,YAAY,KAAK;KACf,GAAG;KACH,cAAc,QAAQ,OAAO;KAC7B,uBAAuB,QAAQ,OAAO;IACxC,CAAC;IAEL,OAAO,YAAY,IAAI,gBAAgB,KAAK;KAAE,GAAG;KAAS;KAAQ,WAAW;IAAI,CAAC,CAAC;IAEnF,OAAO,OAAO;GAChB,CAAC;GAED,YAAY,OAAO,GAAG,kBAAkB,CAAC,CAAC,WAAW,aAAa,WAAW;IAC3E,MAAM,WAAW,OAAO,YAAY,IAAI,aAAa,SAAS;IAE9D,IAAI,OAAO,OAAO,QAAQ,GACxB;IAEF,MAAM,WAAW,OAAO,UAAU,OAAO,WAAW;IAEpD,IAAI,OAAO,OAAO,SAAS,UAAU,GAAG;KACtC,MAAM,WAAW,OAAO,OACrB,QAAQ,SAAS,WAAW,MAAM,SAAS,MAAM,OAAO,WAAW,CAAC,CAAC,CACrE,KAAK,OAAO,eAAe,YAAY,SAAS,KAAK,qBAAqB,CAAC,CAAC;KAE/E,MAAM,cAAc,SAAS,WAAW,OAAO,SAAS,WAAW;KAEnE,IAAI,EAAE,SAAS,UAAU,OAAO,SAAS,SAAS,QAAQ,CAAC,aACzD,OAAO,OAAO,mBAAmB,KAAK;MACpC,UAAU,SAAS;MACnB,SAAS;KACX,CAAC;IAEL;IACA,OAAO,YAAY,OAAO,aAAa,SAAS;GAClD,CAAC;EACH,CAAC;CACH,CAAC,CACH;AACF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { SubjectId } from "../Schema.mjs";
|
|
2
|
+
import { PreparedCommit } from "../hooks/commit.mjs";
|
|
3
|
+
import { SessionInvalidationWindow } from "../sessions/invalidation.mjs";
|
|
4
|
+
import { OAuthUnavailable } from "./signInErrors.mjs";
|
|
5
|
+
import { OAuthCleanupInput, OAuthCommandId, OAuthCredentialSnapshot, OAuthModuleId } from "./signInModels.mjs";
|
|
6
|
+
import { PrepareOAuthCommit } from "./OAuthSignInPersistence.mjs";
|
|
7
|
+
import { OAuthAccountRevision, OAuthActionAuthorization, OAuthLinkAccess, OAuthLinkClaim, OAuthLinkClaimDecision, OAuthLinkDecision, OAuthLinkIssueDecision, OAuthLinkOutcome, OAuthLinkPendingFlow, OAuthUnlinkDecision, OAuthUnlinkInspection } from "./accountsModels.mjs";
|
|
8
|
+
import { Context, Effect } from "effect";
|
|
9
|
+
//#region src/oauth/OAuthAccountsPersistence.d.ts
|
|
10
|
+
declare const OAuthAccountsPersistence_base: Context.ServiceClass<OAuthAccountsPersistence, "effect-auth/OAuthAccountsPersistence", {
|
|
11
|
+
/** Active original subject and authoritative credential revisions. Every policy,
|
|
12
|
+
* binding or credential-set change that affects authority advances securityRevision. */
|
|
13
|
+
readonly capture: (input: {
|
|
14
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
15
|
+
readonly subjectId: SubjectId;
|
|
16
|
+
}) => Effect.Effect<OAuthAccountRevision | undefined, OAuthUnavailable>;
|
|
17
|
+
/** Enforce unique module/flow and module/command, exact immutable context/sealed/
|
|
18
|
+
* retention data, active subject, original revisions, independent begin evidence,
|
|
19
|
+
* current enabled factor policy and authority-clock freshness in this same owner. */
|
|
20
|
+
readonly issue: <A>(input: {
|
|
21
|
+
readonly flow: OAuthLinkPendingFlow;
|
|
22
|
+
readonly authorization: OAuthActionAuthorization;
|
|
23
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthLinkIssueDecision.Type, A>) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
24
|
+
/** Before action-factor consumption: check Pending, exact binder/flow/generation/
|
|
25
|
+
* provider/callback/response issuer, original active subject/revisions and expiry.
|
|
26
|
+
* Wrong credentials/subject never consume or terminalize the flow. */
|
|
27
|
+
readonly preflight: (input: OAuthLinkAccess) => Effect.Effect<OAuthLinkPendingFlow | undefined, OAuthUnavailable>;
|
|
28
|
+
/** Repeat every preflight predicate and exact inspected flow, then current fresh
|
|
29
|
+
* complete-action evidence/policy. Single CAS; authority sets fixed claim deadline
|
|
30
|
+
* = claimedAt + captured lifetime. Never reset Pending or renew the lease. */
|
|
31
|
+
readonly claim: <A>(input: {
|
|
32
|
+
readonly access: OAuthLinkAccess;
|
|
33
|
+
readonly flow: OAuthLinkPendingFlow;
|
|
34
|
+
readonly claimId: OAuthLinkClaim["claimId"];
|
|
35
|
+
readonly authorization: OAuthActionAuthorization;
|
|
36
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthLinkClaimDecision.Type, A>) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
37
|
+
/** Exact claim CAS before deadline. Every outcome erases sealed material and
|
|
38
|
+
* terminalizes. Verified repeats active original subject/revisions, current action
|
|
39
|
+
* evidence/policy/freshness, and full provider+canonical issuer+stable subject
|
|
40
|
+
* uniqueness INCLUDING unresolved registration reservations. Never adopt by email.
|
|
41
|
+
* Same-subject connected-only ownership may add a login; another subject conflicts.
|
|
42
|
+
* Existing usable same-subject login may return unchanged. Changed joins credential,
|
|
43
|
+
* shared factor, revision advancement, pending/session/proof invalidation, terminal
|
|
44
|
+
* result and journal. No mutation/event for unchanged. No session is minted.
|
|
45
|
+
*/
|
|
46
|
+
readonly settle: <A>(input: {
|
|
47
|
+
readonly claim: OAuthLinkClaim;
|
|
48
|
+
readonly outcome: OAuthLinkOutcome;
|
|
49
|
+
readonly authorization: OAuthActionAuthorization;
|
|
50
|
+
readonly invalidation: SessionInvalidationWindow;
|
|
51
|
+
readonly nowMillis: number;
|
|
52
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthLinkDecision.Type, A>) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
53
|
+
/** Look up durable command first. Exact replay is authenticated safe metadata only
|
|
54
|
+
* for its original currently active subject under current metadata-access policy;
|
|
55
|
+
* no fresh factor is consumed. Compare module/command/subject/requested credential
|
|
56
|
+
* against durable original full intent. Cross-target/subject reuse conflicts.
|
|
57
|
+
* A missing credential/marker proves neither previous ownership nor rollback.
|
|
58
|
+
* New targets must be currently owned OAuth LOGIN credentials, not connected grants.
|
|
59
|
+
*/
|
|
60
|
+
readonly inspectUnlink: (input: {
|
|
61
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
62
|
+
readonly subjectId: SubjectId;
|
|
63
|
+
readonly commandId: typeof OAuthCommandId.Type;
|
|
64
|
+
readonly credentialId: string;
|
|
65
|
+
}) => Effect.Effect<typeof OAuthUnlinkInspection.Type, OAuthUnavailable>;
|
|
66
|
+
/** Recheck exact original target/revisions and fresh independent action evidence,
|
|
67
|
+
* current enabled factor policy at authority time. Atomically evaluate POST-delete
|
|
68
|
+
* usable PRIMARY login paths using mapped method eligibility (active/verified/etc),
|
|
69
|
+
* not shared credential status alone. Factor-only TOTP, recovery, pending registration
|
|
70
|
+
* and connected grants do not count. Also retain ability to satisfy enabled factor
|
|
71
|
+
* policy; never silently disable MFA. Concurrent removals leave a viable method.
|
|
72
|
+
* Join login/shared-factor/proof removal, revision advancement, invalidation, immutable
|
|
73
|
+
* command result and journal. Retain full-tuple ownership while a connected reference
|
|
74
|
+
* exists, using an authoritative same-owner reference check when that capability is
|
|
75
|
+
* installed. No generic password store, async canUnlink boolean or read-count-delete.
|
|
76
|
+
* Exact durable replay returns original metadata with replayed=true; no writes,
|
|
77
|
+
* private commands/events/factor consumption. Command identity includes immutable
|
|
78
|
+
* original target tuple/revisions, not a new proof's bytes. Retain unresolved command
|
|
79
|
+
* outcomes; absent markers never justify automatic mutation retry.
|
|
80
|
+
*/
|
|
81
|
+
readonly unlink: <A>(input: {
|
|
82
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
83
|
+
readonly commandId: typeof OAuthCommandId.Type;
|
|
84
|
+
readonly credential: OAuthCredentialSnapshot;
|
|
85
|
+
readonly authorization: OAuthActionAuthorization;
|
|
86
|
+
readonly invalidation: SessionInvalidationWindow;
|
|
87
|
+
readonly nowMillis: number;
|
|
88
|
+
readonly retentionUntilMillis: number;
|
|
89
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthUnlinkDecision.Type, A>) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
90
|
+
/** Decode integer limit1..1000. Expire Pending->Rejected and Claimed->Ambiguous;
|
|
91
|
+
* erase sealed material, never reset. Conditional writes recheck authority clock and
|
|
92
|
+
* exact status. Terminal tombstones/commands retained through original retention and
|
|
93
|
+
* claim horizons; unresolved effects/reservations are never released by this cleanup.
|
|
94
|
+
*/
|
|
95
|
+
readonly cleanup: <A>(input: OAuthCleanupInput, prepare: PrepareOAuthCommit<{
|
|
96
|
+
readonly terminalized: number;
|
|
97
|
+
readonly removed: number;
|
|
98
|
+
readonly hasMore: boolean;
|
|
99
|
+
}, A>) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
100
|
+
}>;
|
|
101
|
+
/** Same-owner semantic authority. Prepare is synchronous before physical commit;
|
|
102
|
+
* unknown outcomes discard receipts/events and never replay prepare. Standalone
|
|
103
|
+
* adapters reject ambient owners. No network, raw secrets, provider tokens, Claims
|
|
104
|
+
* or Registration data is accepted. Reads are nonconsuming and confer no CAS right.
|
|
105
|
+
*/
|
|
106
|
+
declare class OAuthAccountsPersistence extends OAuthAccountsPersistence_base {}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { OAuthAccountsPersistence };
|
|
109
|
+
//# sourceMappingURL=OAuthAccountsPersistence.d.mts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/oauth/OAuthAccountsPersistence.ts
|
|
3
|
+
/** Same-owner semantic authority. Prepare is synchronous before physical commit;
|
|
4
|
+
* unknown outcomes discard receipts/events and never replay prepare. Standalone
|
|
5
|
+
* adapters reject ambient owners. No network, raw secrets, provider tokens, Claims
|
|
6
|
+
* or Registration data is accepted. Reads are nonconsuming and confer no CAS right.
|
|
7
|
+
*/
|
|
8
|
+
var OAuthAccountsPersistence = class extends Context.Service()("effect-auth/OAuthAccountsPersistence") {};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { OAuthAccountsPersistence };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=OAuthAccountsPersistence.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthAccountsPersistence.mjs","names":[],"sources":["../../src/oauth/OAuthAccountsPersistence.ts"],"sourcesContent":["import { Context, type Effect } from \"effect\";\n\nimport type { PreparedCommit } from \"../hooks/commit\";\nimport type { SubjectId } from \"../Schema\";\nimport type { SessionInvalidationWindow } from \"../sessions/invalidation\";\nimport type {\n OAuthAccountRevision,\n OAuthActionAuthorization,\n OAuthLinkAccess,\n OAuthLinkClaim,\n OAuthLinkClaimDecision,\n OAuthLinkDecision,\n OAuthLinkIssueDecision,\n OAuthLinkOutcome,\n OAuthLinkPendingFlow,\n OAuthUnlinkDecision,\n OAuthUnlinkInspection,\n} from \"./accountsModels\";\nimport type { PrepareOAuthCommit } from \"./OAuthSignInPersistence\";\nimport type { OAuthUnavailable } from \"./signInErrors\";\nimport type {\n OAuthCleanupInput,\n OAuthCommandId,\n OAuthCredentialSnapshot,\n OAuthModuleId,\n} from \"./signInModels\";\n\n/** Same-owner semantic authority. Prepare is synchronous before physical commit;\n * unknown outcomes discard receipts/events and never replay prepare. Standalone\n * adapters reject ambient owners. No network, raw secrets, provider tokens, Claims\n * or Registration data is accepted. Reads are nonconsuming and confer no CAS right.\n */\nexport class OAuthAccountsPersistence extends Context.Service<\n OAuthAccountsPersistence,\n {\n /** Active original subject and authoritative credential revisions. Every policy,\n * binding or credential-set change that affects authority advances securityRevision. */\n readonly capture: (input: {\n readonly moduleId: typeof OAuthModuleId.Type;\n readonly subjectId: SubjectId;\n }) => Effect.Effect<OAuthAccountRevision | undefined, OAuthUnavailable>;\n /** Enforce unique module/flow and module/command, exact immutable context/sealed/\n * retention data, active subject, original revisions, independent begin evidence,\n * current enabled factor policy and authority-clock freshness in this same owner. */\n readonly issue: <A>(\n input: {\n readonly flow: OAuthLinkPendingFlow;\n readonly authorization: OAuthActionAuthorization;\n },\n prepare: PrepareOAuthCommit<typeof OAuthLinkIssueDecision.Type, A>,\n ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;\n /** Before action-factor consumption: check Pending, exact binder/flow/generation/\n * provider/callback/response issuer, original active subject/revisions and expiry.\n * Wrong credentials/subject never consume or terminalize the flow. */\n readonly preflight: (\n input: OAuthLinkAccess,\n ) => Effect.Effect<OAuthLinkPendingFlow | undefined, OAuthUnavailable>;\n /** Repeat every preflight predicate and exact inspected flow, then current fresh\n * complete-action evidence/policy. Single CAS; authority sets fixed claim deadline\n * = claimedAt + captured lifetime. Never reset Pending or renew the lease. */\n readonly claim: <A>(\n input: {\n readonly access: OAuthLinkAccess;\n readonly flow: OAuthLinkPendingFlow;\n readonly claimId: OAuthLinkClaim[\"claimId\"];\n readonly authorization: OAuthActionAuthorization;\n },\n prepare: PrepareOAuthCommit<typeof OAuthLinkClaimDecision.Type, A>,\n ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;\n /** Exact claim CAS before deadline. Every outcome erases sealed material and\n * terminalizes. Verified repeats active original subject/revisions, current action\n * evidence/policy/freshness, and full provider+canonical issuer+stable subject\n * uniqueness INCLUDING unresolved registration reservations. Never adopt by email.\n * Same-subject connected-only ownership may add a login; another subject conflicts.\n * Existing usable same-subject login may return unchanged. Changed joins credential,\n * shared factor, revision advancement, pending/session/proof invalidation, terminal\n * result and journal. No mutation/event for unchanged. No session is minted.\n */\n readonly settle: <A>(\n input: {\n readonly claim: OAuthLinkClaim;\n readonly outcome: OAuthLinkOutcome;\n readonly authorization: OAuthActionAuthorization;\n readonly invalidation: SessionInvalidationWindow;\n readonly nowMillis: number;\n },\n prepare: PrepareOAuthCommit<typeof OAuthLinkDecision.Type, A>,\n ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;\n /** Look up durable command first. Exact replay is authenticated safe metadata only\n * for its original currently active subject under current metadata-access policy;\n * no fresh factor is consumed. Compare module/command/subject/requested credential\n * against durable original full intent. Cross-target/subject reuse conflicts.\n * A missing credential/marker proves neither previous ownership nor rollback.\n * New targets must be currently owned OAuth LOGIN credentials, not connected grants.\n */\n readonly inspectUnlink: (input: {\n readonly moduleId: typeof OAuthModuleId.Type;\n readonly subjectId: SubjectId;\n readonly commandId: typeof OAuthCommandId.Type;\n readonly credentialId: string;\n }) => Effect.Effect<typeof OAuthUnlinkInspection.Type, OAuthUnavailable>;\n /** Recheck exact original target/revisions and fresh independent action evidence,\n * current enabled factor policy at authority time. Atomically evaluate POST-delete\n * usable PRIMARY login paths using mapped method eligibility (active/verified/etc),\n * not shared credential status alone. Factor-only TOTP, recovery, pending registration\n * and connected grants do not count. Also retain ability to satisfy enabled factor\n * policy; never silently disable MFA. Concurrent removals leave a viable method.\n * Join login/shared-factor/proof removal, revision advancement, invalidation, immutable\n * command result and journal. Retain full-tuple ownership while a connected reference\n * exists, using an authoritative same-owner reference check when that capability is\n * installed. No generic password store, async canUnlink boolean or read-count-delete.\n * Exact durable replay returns original metadata with replayed=true; no writes,\n * private commands/events/factor consumption. Command identity includes immutable\n * original target tuple/revisions, not a new proof's bytes. Retain unresolved command\n * outcomes; absent markers never justify automatic mutation retry.\n */\n readonly unlink: <A>(\n input: {\n readonly moduleId: typeof OAuthModuleId.Type;\n readonly commandId: typeof OAuthCommandId.Type;\n readonly credential: OAuthCredentialSnapshot;\n readonly authorization: OAuthActionAuthorization;\n readonly invalidation: SessionInvalidationWindow;\n readonly nowMillis: number;\n readonly retentionUntilMillis: number;\n },\n prepare: PrepareOAuthCommit<typeof OAuthUnlinkDecision.Type, A>,\n ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;\n /** Decode integer limit1..1000. Expire Pending->Rejected and Claimed->Ambiguous;\n * erase sealed material, never reset. Conditional writes recheck authority clock and\n * exact status. Terminal tombstones/commands retained through original retention and\n * claim horizons; unresolved effects/reservations are never released by this cleanup.\n */\n readonly cleanup: <A>(\n input: OAuthCleanupInput,\n prepare: PrepareOAuthCommit<\n { readonly terminalized: number; readonly removed: number; readonly hasMore: boolean },\n A\n >,\n ) => Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;\n }\n>()(\"effect-auth/OAuthAccountsPersistence\") {}\n"],"mappings":";;;;;;;AAgCA,IAAa,2BAAb,cAA8C,QAAQ,QA6GpD,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AuthInvocation } from "../operations/context.mjs";
|
|
2
|
+
import { AuthenticationEvidence, AuthenticationRequirement } from "../sessions/models.mjs";
|
|
3
|
+
import { OAuthUnavailable } from "./signInErrors.mjs";
|
|
4
|
+
import { OAuthActionChallenge, OAuthActionRequired } from "./accountsModels.mjs";
|
|
5
|
+
import { Context, Effect, Redacted } from "effect";
|
|
6
|
+
//#region src/oauth/OAuthActionEvidence.d.ts
|
|
7
|
+
declare const OAuthActionEvidence_base: Context.ServiceClass<OAuthActionEvidence, "effect-auth/OAuthActionEvidence", {
|
|
8
|
+
readonly verify: (input: {
|
|
9
|
+
readonly invocation: AuthInvocation;
|
|
10
|
+
readonly challenge: OAuthActionChallenge;
|
|
11
|
+
readonly proof?: Redacted.Redacted<string>;
|
|
12
|
+
}) => Effect.Effect<{
|
|
13
|
+
readonly evidence: AuthenticationEvidence;
|
|
14
|
+
readonly requirement: AuthenticationRequirement;
|
|
15
|
+
}, OAuthActionRequired | OAuthUnavailable>;
|
|
16
|
+
}>;
|
|
17
|
+
/** Independent current action authority; no default grants access. Verify exact
|
|
18
|
+
* challenge/subject/revisions and consume one-time factors in their own authority
|
|
19
|
+
* before returning. Public session assurance, pending-login and registration
|
|
20
|
+
* credentials are not action proof. Begin and Complete require separate evidence.
|
|
21
|
+
* Counter consumption need not replace semantic credential revision; replacement,
|
|
22
|
+
* revocation and policy/binding changes must advance the corresponding revisions.
|
|
23
|
+
* A later OAuth CAS rejection does not refund a factor or imply an atomic join.
|
|
24
|
+
*/
|
|
25
|
+
declare class OAuthActionEvidence extends OAuthActionEvidence_base {}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { OAuthActionEvidence };
|
|
28
|
+
//# sourceMappingURL=OAuthActionEvidence.d.mts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/oauth/OAuthActionEvidence.ts
|
|
3
|
+
/** Independent current action authority; no default grants access. Verify exact
|
|
4
|
+
* challenge/subject/revisions and consume one-time factors in their own authority
|
|
5
|
+
* before returning. Public session assurance, pending-login and registration
|
|
6
|
+
* credentials are not action proof. Begin and Complete require separate evidence.
|
|
7
|
+
* Counter consumption need not replace semantic credential revision; replacement,
|
|
8
|
+
* revocation and policy/binding changes must advance the corresponding revisions.
|
|
9
|
+
* A later OAuth CAS rejection does not refund a factor or imply an atomic join.
|
|
10
|
+
*/
|
|
11
|
+
var OAuthActionEvidence = class extends Context.Service()("effect-auth/OAuthActionEvidence") {};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { OAuthActionEvidence };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=OAuthActionEvidence.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthActionEvidence.mjs","names":[],"sources":["../../src/oauth/OAuthActionEvidence.ts"],"sourcesContent":["import { Context, type Effect, type Redacted } from \"effect\";\n\nimport type { AuthInvocation } from \"../operations/context\";\nimport type { AuthenticationEvidence, AuthenticationRequirement } from \"../sessions/models\";\nimport type { OAuthActionChallenge, OAuthActionRequired } from \"./accountsModels\";\nimport type { OAuthUnavailable } from \"./signInErrors\";\n\n/** Independent current action authority; no default grants access. Verify exact\n * challenge/subject/revisions and consume one-time factors in their own authority\n * before returning. Public session assurance, pending-login and registration\n * credentials are not action proof. Begin and Complete require separate evidence.\n * Counter consumption need not replace semantic credential revision; replacement,\n * revocation and policy/binding changes must advance the corresponding revisions.\n * A later OAuth CAS rejection does not refund a factor or imply an atomic join.\n */\nexport class OAuthActionEvidence extends Context.Service<\n OAuthActionEvidence,\n {\n readonly verify: (input: {\n readonly invocation: AuthInvocation;\n readonly challenge: OAuthActionChallenge;\n readonly proof?: Redacted.Redacted<string>;\n }) => Effect.Effect<\n {\n readonly evidence: AuthenticationEvidence;\n readonly requirement: AuthenticationRequirement;\n },\n OAuthActionRequired | OAuthUnavailable\n >;\n }\n>()(\"effect-auth/OAuthActionEvidence\") {}\n"],"mappings":";;;;;;;;;;AAeA,IAAa,sBAAb,cAAyC,QAAQ,QAe/C,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AuthInvocation } from "../operations/context.mjs";
|
|
2
|
+
import { AuthenticationEvidence, AuthenticationRequirement } from "../sessions/models.mjs";
|
|
3
|
+
import { OAuthUnavailable } from "./signInErrors.mjs";
|
|
4
|
+
import { OAuthConnectedActionChallenge, OAuthConnectedActionRequired } from "./connectedModels.mjs";
|
|
5
|
+
import { Context, Effect, Redacted } from "effect";
|
|
6
|
+
//#region src/oauth/OAuthConnectedActionEvidence.d.ts
|
|
7
|
+
declare const OAuthConnectedActionEvidence_base: Context.ServiceClass<OAuthConnectedActionEvidence, "effect-auth/OAuthConnectedActionEvidence", {
|
|
8
|
+
readonly verify: (input: {
|
|
9
|
+
readonly invocation: AuthInvocation;
|
|
10
|
+
readonly challenge: OAuthConnectedActionChallenge;
|
|
11
|
+
readonly proof?: Redacted.Redacted<string>;
|
|
12
|
+
}) => Effect.Effect<{
|
|
13
|
+
readonly evidence: AuthenticationEvidence;
|
|
14
|
+
readonly requirement: AuthenticationRequirement;
|
|
15
|
+
}, OAuthConnectedActionRequired | OAuthUnavailable>;
|
|
16
|
+
}>;
|
|
17
|
+
/** Independent exact-action authority. Consume one-time evidence before returning;
|
|
18
|
+
* later connected CAS loss does not refund it. No session-summary default. */
|
|
19
|
+
declare class OAuthConnectedActionEvidence extends OAuthConnectedActionEvidence_base {}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { OAuthConnectedActionEvidence };
|
|
22
|
+
//# sourceMappingURL=OAuthConnectedActionEvidence.d.mts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/oauth/OAuthConnectedActionEvidence.ts
|
|
3
|
+
/** Independent exact-action authority. Consume one-time evidence before returning;
|
|
4
|
+
* later connected CAS loss does not refund it. No session-summary default. */
|
|
5
|
+
var OAuthConnectedActionEvidence = class extends Context.Service()("effect-auth/OAuthConnectedActionEvidence") {};
|
|
6
|
+
//#endregion
|
|
7
|
+
export { OAuthConnectedActionEvidence };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=OAuthConnectedActionEvidence.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OAuthConnectedActionEvidence.mjs","names":[],"sources":["../../src/oauth/OAuthConnectedActionEvidence.ts"],"sourcesContent":["import { Context, type Effect, type Redacted } from \"effect\";\n\nimport type { AuthInvocation } from \"../operations/context\";\nimport type { AuthenticationEvidence, AuthenticationRequirement } from \"../sessions/models\";\nimport type {\n OAuthConnectedActionChallenge,\n OAuthConnectedActionRequired,\n} from \"./connectedModels\";\nimport type { OAuthUnavailable } from \"./signInErrors\";\n\n/** Independent exact-action authority. Consume one-time evidence before returning;\n * later connected CAS loss does not refund it. No session-summary default. */\nexport class OAuthConnectedActionEvidence extends Context.Service<\n OAuthConnectedActionEvidence,\n {\n readonly verify: (input: {\n readonly invocation: AuthInvocation;\n readonly challenge: OAuthConnectedActionChallenge;\n readonly proof?: Redacted.Redacted<string>;\n }) => Effect.Effect<\n {\n readonly evidence: AuthenticationEvidence;\n readonly requirement: AuthenticationRequirement;\n },\n OAuthConnectedActionRequired | OAuthUnavailable\n >;\n }\n>()(\"effect-auth/OAuthConnectedActionEvidence\") {}\n"],"mappings":";;;;AAYA,IAAa,+BAAb,cAAkD,QAAQ,QAexD,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { SubjectId } from "../Schema.mjs";
|
|
2
|
+
import { PreparedCommit } from "../hooks/commit.mjs";
|
|
3
|
+
import { OAuthUnavailable } from "./signInErrors.mjs";
|
|
4
|
+
import { OAuthClaimId, OAuthCleanupInput, OAuthCommandId, OAuthExternalIdentity, OAuthModuleId } from "./signInModels.mjs";
|
|
5
|
+
import { PrepareOAuthCommit } from "./OAuthSignInPersistence.mjs";
|
|
6
|
+
import { OAuthAccountRevision } from "./accountsModels.mjs";
|
|
7
|
+
import { OAuthConnectedAccess, OAuthConnectedAccessInspection, OAuthConnectedActionAuthorization, OAuthConnectedClaim, OAuthConnectedClaimDecision, OAuthConnectedCleanupResult, OAuthConnectedDisconnectDecision, OAuthConnectedDisconnectGrant, OAuthConnectedDisconnectInspection, OAuthConnectedGrantInspection, OAuthConnectedIssueDecision, OAuthConnectedListResult, OAuthConnectedOutcome, OAuthConnectedPendingFlow, OAuthConnectedRefreshClaim, OAuthConnectedRefreshDecision, OAuthConnectedRefreshOutcome, OAuthConnectedRefreshSettlement, OAuthConnectedRevocationJob, OAuthConnectedSettlementDecision, OAuthConnectedStoredGrant, OAuthConnectedTarget, OAuthConnectedUseAdmission, OAuthConnectedUseAuthorization, OAuthGrantId, OAuthPermissionProfileKey } from "./connectedModels.mjs";
|
|
8
|
+
import { Context, Effect } from "effect";
|
|
9
|
+
//#region src/oauth/OAuthConnectedPersistence.d.ts
|
|
10
|
+
type Mutation<A> = Effect.Effect<PreparedCommit<A>, OAuthUnavailable>;
|
|
11
|
+
declare const OAuthConnectedPersistence_base: Context.ServiceClass<OAuthConnectedPersistence, "effect-auth/OAuthConnectedPersistence", {
|
|
12
|
+
readonly capture: (input: {
|
|
13
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
14
|
+
readonly subjectId: SubjectId;
|
|
15
|
+
readonly grantId?: typeof OAuthGrantId.Type;
|
|
16
|
+
}) => Effect.Effect<{
|
|
17
|
+
readonly revision: OAuthAccountRevision;
|
|
18
|
+
readonly target?: OAuthConnectedTarget;
|
|
19
|
+
} | undefined, OAuthUnavailable>;
|
|
20
|
+
readonly issue: <A>(input: {
|
|
21
|
+
readonly flow: OAuthConnectedPendingFlow;
|
|
22
|
+
readonly authorization: OAuthConnectedActionAuthorization;
|
|
23
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedIssueDecision.Type, A>) => Mutation<A>;
|
|
24
|
+
readonly preflight: (input: OAuthConnectedAccess) => Effect.Effect<OAuthConnectedPendingFlow | undefined, OAuthUnavailable>;
|
|
25
|
+
/** Single Pending->Claimed CAS with fixed engine deadline. Assign durable total
|
|
26
|
+
* order comparable with later-resolved cohort cutoff; never use caller clock. */
|
|
27
|
+
readonly claim: <A>(input: {
|
|
28
|
+
readonly access: OAuthConnectedAccess;
|
|
29
|
+
readonly flow: OAuthConnectedPendingFlow;
|
|
30
|
+
readonly claimId: typeof OAuthClaimId.Type;
|
|
31
|
+
readonly authorization: OAuthConnectedActionAuthorization;
|
|
32
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedClaimDecision.Type, A>) => Mutation<A>;
|
|
33
|
+
/** Nonconsuming current cohort/ownership inspection after identity is known.
|
|
34
|
+
* Neither this read nor its generation confers a final mutation right.
|
|
35
|
+
* A recognized cutoff/barrier rejection returns Quarantine with its actual
|
|
36
|
+
* generation so late tokens can be sealed into exact cohort custody. Foreign
|
|
37
|
+
* ownership conflicts do not authorize compensating remote revocation. */
|
|
38
|
+
readonly inspectGrant: (input: {
|
|
39
|
+
readonly claim: OAuthConnectedClaim;
|
|
40
|
+
readonly identity: typeof OAuthExternalIdentity.Type;
|
|
41
|
+
}) => Effect.Effect<typeof OAuthConnectedGrantInspection.Type, OAuthUnavailable>;
|
|
42
|
+
/** Recheck complete action, original revisions/deadline, global tuple INCLUDING
|
|
43
|
+
* unresolved registration reservations, exact profile/target/cohort and claim
|
|
44
|
+
* order after revocation cutoff. Connect cannot overwrite; Reconnect keeps tuple.
|
|
45
|
+
* Join token ciphertext, ownership, flow erasure, result and journal. Verified
|
|
46
|
+
* includes sealed cleanup for a cutoff advanced since inspectGrant; route it into
|
|
47
|
+
* original cohort custody instead of activating. Quarantined can ONLY join sealed
|
|
48
|
+
* cleanup custody, never Active. No login
|
|
49
|
+
* credential/factor/session mutation. Unknown outcome MUST NOT trigger revoke. */
|
|
50
|
+
readonly settle: <A>(input: {
|
|
51
|
+
readonly claim: OAuthConnectedClaim;
|
|
52
|
+
readonly outcome: OAuthConnectedOutcome;
|
|
53
|
+
readonly authorization: OAuthConnectedActionAuthorization;
|
|
54
|
+
readonly nowMillis: number;
|
|
55
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedSettlementDecision.Type, A>) => Mutation<A>;
|
|
56
|
+
readonly list: (input: {
|
|
57
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
58
|
+
readonly limit: number;
|
|
59
|
+
readonly cursor?: string;
|
|
60
|
+
}) => Effect.Effect<typeof OAuthConnectedListResult.Type, OAuthUnavailable>;
|
|
61
|
+
/** Durable command first, current metadata policy on replay; no new factor.
|
|
62
|
+
* Missing marker/target proves neither prior ownership nor rollback. */
|
|
63
|
+
readonly inspectDisconnect: (input: {
|
|
64
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
65
|
+
readonly subjectId: SubjectId;
|
|
66
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
67
|
+
readonly commandId: typeof OAuthCommandId.Type;
|
|
68
|
+
readonly grantId: typeof OAuthGrantId.Type;
|
|
69
|
+
}) => Effect.Effect<typeof OAuthConnectedDisconnectInspection.Type, OAuthUnavailable>;
|
|
70
|
+
/** Local-first: atomic disable + generation/cohort barrier + immutable command +
|
|
71
|
+
* optional sealed revocation jobs. Conservative cohort-wide sibling invalidation.
|
|
72
|
+
* Pending refresh counts as unresolved. Retain global ownership while any login,
|
|
73
|
+
* grant, reservation, admission or unresolved cohort work needs it. No remote I/O. */
|
|
74
|
+
readonly disconnect: <A>(input: {
|
|
75
|
+
readonly moduleId: typeof OAuthModuleId.Type;
|
|
76
|
+
readonly commandId: typeof OAuthCommandId.Type;
|
|
77
|
+
readonly grant: OAuthConnectedDisconnectGrant;
|
|
78
|
+
readonly authorization: OAuthConnectedActionAuthorization;
|
|
79
|
+
readonly revocation?: OAuthConnectedRevocationJob;
|
|
80
|
+
readonly retentionUntilMillis: number;
|
|
81
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedDisconnectDecision.Type, A>) => Mutation<A>;
|
|
82
|
+
readonly inspectAccess: (input: {
|
|
83
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
84
|
+
readonly grantId: typeof OAuthGrantId.Type;
|
|
85
|
+
readonly profileKey: typeof OAuthPermissionProfileKey.Type;
|
|
86
|
+
}) => Effect.Effect<typeof OAuthConnectedAccessInspection.Type, OAuthUnavailable>;
|
|
87
|
+
/** One fixed claim only when due, exact grant/token/cohort/use authority. Busy
|
|
88
|
+
* losers, no expired takeover/reset/renewal. Claimed work blocks cohort clearing. */
|
|
89
|
+
readonly claimRefresh: <A>(input: {
|
|
90
|
+
readonly grant: OAuthConnectedStoredGrant;
|
|
91
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
92
|
+
readonly claimId: typeof OAuthClaimId.Type;
|
|
93
|
+
readonly nextTokenVersion: OAuthConnectedRefreshClaim["nextTokenVersion"];
|
|
94
|
+
readonly lifetimeMillis: number;
|
|
95
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedRefreshDecision.Type, A>) => Mutation<A>;
|
|
96
|
+
/** Exact CAS plus final policy/time. Late success never resurrects: route its
|
|
97
|
+
* sealed cleanup to original unresolved cohort; old-token revoke alone cannot
|
|
98
|
+
* clear pending work. Ambiguous/expired claim invalidates both token uses and
|
|
99
|
+
* retains unresolved state; no future reuse of possibly spent refresh material. */
|
|
100
|
+
readonly settleRefresh: <A>(input: {
|
|
101
|
+
readonly claim: OAuthConnectedRefreshClaim;
|
|
102
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
103
|
+
readonly outcome: OAuthConnectedRefreshOutcome;
|
|
104
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedRefreshSettlement.Type, A>) => Mutation<A>;
|
|
105
|
+
/** AFTER decrypt, exact ciphertext/context+grant/token/cohort, active subject,
|
|
106
|
+
* current policy/revisions/profile/permissions and engine expiry. One confirmed
|
|
107
|
+
* admission receipt authorizes at most one callback; it does not prove I/O ran. */
|
|
108
|
+
readonly admitUse: <A>(input: {
|
|
109
|
+
readonly grant: OAuthConnectedStoredGrant;
|
|
110
|
+
readonly authorization: OAuthConnectedUseAuthorization;
|
|
111
|
+
readonly admissionId: typeof OAuthClaimId.Type;
|
|
112
|
+
readonly lifetimeMillis: number;
|
|
113
|
+
}, prepare: PrepareOAuthCommit<typeof OAuthConnectedUseAdmission.Type, A>) => Mutation<A>;
|
|
114
|
+
/** Bounded conditional cleanup; never remove unresolved initial exchanges,
|
|
115
|
+
* refresh/revocation, ownership or cohort cutoffs, or turn expired work into new
|
|
116
|
+
* authority. Unknown external tuples retain a conservative client-registration
|
|
117
|
+
* dependency until exact cohort reconciliation or proven provider quiescence;
|
|
118
|
+
* ordinary flow retention expiry cannot release that ordering dependency. */
|
|
119
|
+
readonly cleanup: <A>(input: OAuthCleanupInput, prepare: PrepareOAuthCommit<typeof OAuthConnectedCleanupResult.Type, A>) => Mutation<A>;
|
|
120
|
+
}>;
|
|
121
|
+
/** All joins use ONE physical authority. Synchronous prepare before commit; unknown
|
|
122
|
+
* outcomes discard receipts/events, never retry prepare/owner/network. No plaintext.
|
|
123
|
+
* Every relevant policy/binding change advances its authority revision. Final guards
|
|
124
|
+
* recheck exact input, subject, credential/policy/profile/cohort versions and engine
|
|
125
|
+
* time after all writes. Standalone operations reject ambient owners. */
|
|
126
|
+
declare class OAuthConnectedPersistence extends OAuthConnectedPersistence_base {}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { OAuthConnectedPersistence };
|
|
129
|
+
//# sourceMappingURL=OAuthConnectedPersistence.d.mts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Context } from "effect";
|
|
2
|
+
//#region src/oauth/OAuthConnectedPersistence.ts
|
|
3
|
+
/** All joins use ONE physical authority. Synchronous prepare before commit; unknown
|
|
4
|
+
* outcomes discard receipts/events, never retry prepare/owner/network. No plaintext.
|
|
5
|
+
* Every relevant policy/binding change advances its authority revision. Final guards
|
|
6
|
+
* recheck exact input, subject, credential/policy/profile/cohort versions and engine
|
|
7
|
+
* time after all writes. Standalone operations reject ambient owners. */
|
|
8
|
+
var OAuthConnectedPersistence = class extends Context.Service()("effect-auth/OAuthConnectedPersistence") {};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { OAuthConnectedPersistence };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=OAuthConnectedPersistence.mjs.map
|