@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,275 @@
|
|
|
1
|
+
import { SubjectId } from "../Schema.mjs";
|
|
2
|
+
import { DrizzleMappingError } from "./model.mjs";
|
|
3
|
+
import { PasskeyCeremony, PasskeyCredential } from "../passkey/models.mjs";
|
|
4
|
+
import { PasskeyCredentials } from "../passkey/PasskeyCredentials.mjs";
|
|
5
|
+
import { PasskeyEnrollmentContext } from "../passkey/PasskeyEnrollmentContext.mjs";
|
|
6
|
+
import { PasskeyMethodPolicy } from "../passkey/policy.mjs";
|
|
7
|
+
import { PasskeyPersistence } from "../passkey/PasskeyPersistence.mjs";
|
|
8
|
+
import { Effect, Layer } from "effect";
|
|
9
|
+
import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
|
|
10
|
+
//#region src/drizzle/passkey-model.d.ts
|
|
11
|
+
type PasskeyColumn<T extends Table> = Extract<keyof T["_"]["columns"], string>;
|
|
12
|
+
type PasskeyMappingSource<M, RSetup = never> = M | Effect.Effect<M, DrizzleMappingError, RSetup>;
|
|
13
|
+
interface PasskeyCredentialServices {
|
|
14
|
+
readonly passkeyCredentials: PasskeyCredentials["Service"];
|
|
15
|
+
}
|
|
16
|
+
interface PasskeyPersistenceServices {
|
|
17
|
+
readonly passkeyPersistence: PasskeyPersistence["Service"];
|
|
18
|
+
}
|
|
19
|
+
interface PasskeyEnrollmentContextServices {
|
|
20
|
+
readonly passkeyEnrollmentContext: PasskeyEnrollmentContext["Service"];
|
|
21
|
+
}
|
|
22
|
+
declare const passkeyCredentialsLayer: <E, R>(services: Effect.Effect<PasskeyCredentialServices, E, R>) => Layer.Layer<PasskeyCredentials, E, R>;
|
|
23
|
+
declare const passkeyPersistenceLayer: <E, R>(services: Effect.Effect<PasskeyPersistenceServices, E, R>) => Layer.Layer<PasskeyPersistence, E, R>;
|
|
24
|
+
declare const passkeyEnrollmentContextLayer: <E, R>(services: Effect.Effect<PasskeyEnrollmentContextServices, E, R>) => Layer.Layer<PasskeyEnrollmentContext, E, R>;
|
|
25
|
+
/** Native IDs roundtrip exactly; protocol IDs and authentication references are
|
|
26
|
+
* different identities. These callbacks never suspend inside an owner. */
|
|
27
|
+
interface PasskeySubjectIdCodec<N> {
|
|
28
|
+
readonly toNative: (id: SubjectId) => N;
|
|
29
|
+
readonly toSubject: (id: N) => SubjectId;
|
|
30
|
+
readonly equals: (left: N, right: N) => boolean;
|
|
31
|
+
}
|
|
32
|
+
interface PasskeyClock {
|
|
33
|
+
readonly encodeInstant: (millis: number) => unknown;
|
|
34
|
+
readonly decodeInstant: (value: unknown) => number;
|
|
35
|
+
readonly engineNowMillis: SQL;
|
|
36
|
+
readonly toMillis: (expression: SQL) => SQL;
|
|
37
|
+
readonly fromMillis: (expression: SQL) => SQL;
|
|
38
|
+
}
|
|
39
|
+
interface PasskeySubjectReadTable<T extends Table, N> {
|
|
40
|
+
readonly table: T;
|
|
41
|
+
readonly id: PasskeyColumn<T>;
|
|
42
|
+
readonly status: PasskeyColumn<T>;
|
|
43
|
+
readonly securityRevision: PasskeyColumn<T>;
|
|
44
|
+
readonly decodeId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;
|
|
45
|
+
readonly isActiveStatus: (value: unknown) => boolean;
|
|
46
|
+
readonly activeCondition: SQL;
|
|
47
|
+
}
|
|
48
|
+
interface PasskeyFactorReadTable<T extends Table> {
|
|
49
|
+
readonly table: T;
|
|
50
|
+
readonly subjectId: PasskeyColumn<T>;
|
|
51
|
+
readonly credentialId: PasskeyColumn<T>;
|
|
52
|
+
readonly revision: PasskeyColumn<T>;
|
|
53
|
+
readonly status: PasskeyColumn<T>;
|
|
54
|
+
readonly isActiveStatus: (value: unknown) => boolean;
|
|
55
|
+
readonly activeCondition: SQL;
|
|
56
|
+
}
|
|
57
|
+
/** decode uses only these declared columns. Counter columns are native integral
|
|
58
|
+
* numbers; BS may use a consumer enum. Name/creation metadata is not required. */
|
|
59
|
+
interface PasskeyCredentialReadTable<T extends Table, N> {
|
|
60
|
+
readonly table: T;
|
|
61
|
+
readonly credentialId: PasskeyColumn<T>;
|
|
62
|
+
readonly subjectId: PasskeyColumn<T>;
|
|
63
|
+
readonly rpId: PasskeyColumn<T>;
|
|
64
|
+
readonly protocolCredentialId: PasskeyColumn<T>;
|
|
65
|
+
readonly credentialKey: PasskeyColumn<T>;
|
|
66
|
+
readonly handleKey: PasskeyColumn<T>;
|
|
67
|
+
readonly userHandle: PasskeyColumn<T>;
|
|
68
|
+
readonly publicKey: PasskeyColumn<T>;
|
|
69
|
+
readonly algorithm: PasskeyColumn<T>;
|
|
70
|
+
readonly profile: PasskeyColumn<T>;
|
|
71
|
+
readonly credentialRevision: PasskeyColumn<T>;
|
|
72
|
+
readonly status: PasskeyColumn<T>;
|
|
73
|
+
readonly primarySignIn: PasskeyColumn<T>;
|
|
74
|
+
readonly enrollmentUserVerified: PasskeyColumn<T>;
|
|
75
|
+
readonly backupEligible: PasskeyColumn<T>;
|
|
76
|
+
readonly backupState: PasskeyColumn<T>;
|
|
77
|
+
readonly counter: PasskeyColumn<T>;
|
|
78
|
+
readonly maximumCounter: PasskeyColumn<T>;
|
|
79
|
+
readonly decode: (row: Readonly<Partial<InferSelectModel<T>>>) => Omit<PasskeyCredential, "revision" | "active">;
|
|
80
|
+
readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;
|
|
81
|
+
readonly isActiveStatus: (value: unknown) => boolean;
|
|
82
|
+
readonly activeCondition: SQL;
|
|
83
|
+
}
|
|
84
|
+
interface PasskeyCredentialOwnershipTable<T extends Table, N> {
|
|
85
|
+
readonly table: T;
|
|
86
|
+
readonly credentialKey: PasskeyColumn<T>;
|
|
87
|
+
readonly rpId: PasskeyColumn<T>;
|
|
88
|
+
readonly protocolCredentialId: PasskeyColumn<T>;
|
|
89
|
+
readonly subjectId: PasskeyColumn<T>;
|
|
90
|
+
readonly credentialId: PasskeyColumn<T>;
|
|
91
|
+
readonly state: PasskeyColumn<T>;
|
|
92
|
+
readonly version: PasskeyColumn<T>;
|
|
93
|
+
readonly reservationId: PasskeyColumn<T>;
|
|
94
|
+
readonly ownedCondition: SQL;
|
|
95
|
+
readonly isOwnedState: (value: unknown) => boolean;
|
|
96
|
+
readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;
|
|
97
|
+
}
|
|
98
|
+
/** Reservations do not manufacture a subject; bound handles are RP-global. */
|
|
99
|
+
interface PasskeyHandleReadTable<T extends Table> {
|
|
100
|
+
readonly table: T;
|
|
101
|
+
readonly handleKey: PasskeyColumn<T>;
|
|
102
|
+
readonly rpId: PasskeyColumn<T>;
|
|
103
|
+
readonly userHandle: PasskeyColumn<T>;
|
|
104
|
+
readonly state: PasskeyColumn<T>;
|
|
105
|
+
readonly version: PasskeyColumn<T>;
|
|
106
|
+
readonly reservationId: PasskeyColumn<T>;
|
|
107
|
+
}
|
|
108
|
+
interface PasskeyHandleReservationTable<T extends Table> extends PasskeyHandleReadTable<T> {
|
|
109
|
+
readonly reservedCondition: SQL;
|
|
110
|
+
readonly isReservedState: (value: unknown) => boolean;
|
|
111
|
+
}
|
|
112
|
+
interface PasskeyHandleOwnershipTable<T extends Table, N> extends PasskeyHandleReadTable<T> {
|
|
113
|
+
readonly subjectId: PasskeyColumn<T>;
|
|
114
|
+
readonly ownedCondition: SQL;
|
|
115
|
+
readonly isOwnedState: (value: unknown) => boolean;
|
|
116
|
+
readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;
|
|
117
|
+
}
|
|
118
|
+
declare const requiredPasskeyCredentialConstraints: {
|
|
119
|
+
readonly credentialId: readonly ["credentialId"];
|
|
120
|
+
readonly factor: readonly ["subjectId", "credentialId"];
|
|
121
|
+
readonly credentialOwnership: readonly ["credentialKey"];
|
|
122
|
+
readonly handleOwnership: readonly ["handleKey"];
|
|
123
|
+
readonly boundSubjectHandle: readonly ["rpId", "subjectId"];
|
|
124
|
+
};
|
|
125
|
+
interface PasskeyCredentialMapping<S extends Table, C extends Table, F extends Table, Ownership extends Table, Handle extends Table, N> {
|
|
126
|
+
readonly subject: PasskeySubjectReadTable<S, N>;
|
|
127
|
+
readonly credential: PasskeyCredentialReadTable<C, N>;
|
|
128
|
+
readonly authority: PasskeyFactorReadTable<F>;
|
|
129
|
+
readonly credentialOwnership: PasskeyCredentialOwnershipTable<Ownership, N>;
|
|
130
|
+
readonly handleOwnership: PasskeyHandleOwnershipTable<Handle, N>;
|
|
131
|
+
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
132
|
+
readonly constraints: typeof requiredPasskeyCredentialConstraints;
|
|
133
|
+
}
|
|
134
|
+
/** A stable additional policy row, acquired before RP/credential locks. The
|
|
135
|
+
* factory checks column names without erasing the consumer table at its input. */
|
|
136
|
+
declare const PasskeyPolicyGuardTypeId: unique symbol;
|
|
137
|
+
interface PasskeyPolicyGuard {
|
|
138
|
+
readonly [PasskeyPolicyGuardTypeId]: true;
|
|
139
|
+
readonly scope: string;
|
|
140
|
+
readonly table: Table;
|
|
141
|
+
readonly columns: ReadonlyArray<string>;
|
|
142
|
+
readonly where: (moduleId: string) => SQL;
|
|
143
|
+
readonly condition: (moduleId: string) => SQL;
|
|
144
|
+
}
|
|
145
|
+
declare const passkeyPolicyGuard: <T extends Table>(input: {
|
|
146
|
+
readonly scope: string;
|
|
147
|
+
readonly table: T;
|
|
148
|
+
readonly columns: ReadonlyArray<PasskeyColumn<T>>;
|
|
149
|
+
readonly where: (moduleId: string) => SQL;
|
|
150
|
+
readonly condition: (moduleId: string) => SQL;
|
|
151
|
+
}) => PasskeyPolicyGuard;
|
|
152
|
+
interface PasskeyModuleTable<T extends Table> {
|
|
153
|
+
readonly table: T;
|
|
154
|
+
readonly moduleId: PasskeyColumn<T>;
|
|
155
|
+
readonly status: PasskeyColumn<T>;
|
|
156
|
+
readonly policyRevision: PasskeyColumn<T>;
|
|
157
|
+
/** All physical fields used by decodeMethodPolicy, including policyRevision. */
|
|
158
|
+
readonly policyColumns: ReadonlyArray<PasskeyColumn<T>>;
|
|
159
|
+
readonly isActiveStatus: (value: unknown) => boolean;
|
|
160
|
+
readonly activeCondition: SQL;
|
|
161
|
+
readonly decodeMethodPolicy: (row: Readonly<Partial<InferSelectModel<T>>>) => PasskeyMethodPolicy;
|
|
162
|
+
readonly guards?: ReadonlyArray<PasskeyPolicyGuard>;
|
|
163
|
+
}
|
|
164
|
+
type PasskeyFlowState = "Pending" | "Claimed" | "Verified" | "Rejected" | "Ambiguous" | "RegistrationAccepted" | "ProvisioningPending";
|
|
165
|
+
interface PasskeyFlowInsert {
|
|
166
|
+
readonly ceremony: PasskeyCeremony;
|
|
167
|
+
readonly policy: PasskeyMethodPolicy;
|
|
168
|
+
readonly marker: string;
|
|
169
|
+
}
|
|
170
|
+
interface PasskeyFlowTable<T extends Table> {
|
|
171
|
+
readonly table: T;
|
|
172
|
+
readonly moduleId: PasskeyColumn<T>;
|
|
173
|
+
readonly flowId: PasskeyColumn<T>;
|
|
174
|
+
readonly commandId: PasskeyColumn<T>;
|
|
175
|
+
readonly purpose: PasskeyColumn<T>;
|
|
176
|
+
readonly state: PasskeyColumn<T>;
|
|
177
|
+
readonly version: PasskeyColumn<T>;
|
|
178
|
+
readonly generation: PasskeyColumn<T>;
|
|
179
|
+
readonly snapshot: PasskeyColumn<T>;
|
|
180
|
+
readonly policySnapshot: PasskeyColumn<T>;
|
|
181
|
+
readonly requestBindingVerifier: PasskeyColumn<T>;
|
|
182
|
+
readonly requestBindingExpiresAt: PasskeyColumn<T>;
|
|
183
|
+
readonly issuedAt: PasskeyColumn<T>;
|
|
184
|
+
readonly expiresAt: PasskeyColumn<T>;
|
|
185
|
+
readonly retentionUntil: PasskeyColumn<T>;
|
|
186
|
+
readonly claimId: PasskeyColumn<T>;
|
|
187
|
+
readonly claimedAt: PasskeyColumn<T>;
|
|
188
|
+
readonly claimExpiresAt: PasskeyColumn<T>;
|
|
189
|
+
readonly credentialSnapshot: PasskeyColumn<T>;
|
|
190
|
+
/** Core SubjectId scope text, not a consumer's native subject ID. */
|
|
191
|
+
readonly subjectScope: PasskeyColumn<T>;
|
|
192
|
+
readonly targetScope: PasskeyColumn<T>;
|
|
193
|
+
readonly states: Readonly<Record<PasskeyFlowState, unknown>>;
|
|
194
|
+
readonly encodeInsert: (input: PasskeyFlowInsert) => InferInsertModel<T>;
|
|
195
|
+
}
|
|
196
|
+
interface PasskeyAdmissionTable<T extends Table> {
|
|
197
|
+
readonly table: T;
|
|
198
|
+
readonly authorityScope: PasskeyColumn<T>;
|
|
199
|
+
readonly moduleId: PasskeyColumn<T>;
|
|
200
|
+
readonly version: PasskeyColumn<T>;
|
|
201
|
+
readonly ownerMarker: PasskeyColumn<T>;
|
|
202
|
+
/** One physical clock sample, reused by every charge of this decision. */
|
|
203
|
+
readonly admittedAt: PasskeyColumn<T>;
|
|
204
|
+
}
|
|
205
|
+
type PasskeyChargeKind = "global" | "subject" | "target";
|
|
206
|
+
interface PasskeyChargeInsert {
|
|
207
|
+
readonly moduleId: string;
|
|
208
|
+
readonly flowId: string;
|
|
209
|
+
readonly purpose: PasskeyCeremony["purpose"];
|
|
210
|
+
readonly kind: PasskeyChargeKind;
|
|
211
|
+
readonly scope: string;
|
|
212
|
+
readonly originalWindowMillis: number;
|
|
213
|
+
readonly marker: string;
|
|
214
|
+
}
|
|
215
|
+
/** Charge scope is canonical core identity text; this subject-free descriptor
|
|
216
|
+
* can count all purposes without decoding any unrelated native subject. */
|
|
217
|
+
interface PasskeyChargeTable<T extends Table> {
|
|
218
|
+
readonly table: T;
|
|
219
|
+
readonly moduleId: PasskeyColumn<T>;
|
|
220
|
+
readonly flowId: PasskeyColumn<T>;
|
|
221
|
+
readonly purpose: PasskeyColumn<T>;
|
|
222
|
+
readonly kind: PasskeyColumn<T>;
|
|
223
|
+
readonly scope: PasskeyColumn<T>;
|
|
224
|
+
readonly originalWindowMillis: PasskeyColumn<T>;
|
|
225
|
+
readonly admittedAt: PasskeyColumn<T>;
|
|
226
|
+
readonly retainUntil: PasskeyColumn<T>;
|
|
227
|
+
readonly version: PasskeyColumn<T>;
|
|
228
|
+
readonly ownerMarker: PasskeyColumn<T>;
|
|
229
|
+
readonly encodeInsert: (input: PasskeyChargeInsert) => InferInsertModel<T>;
|
|
230
|
+
}
|
|
231
|
+
declare const requiredPasskeyPersistenceConstraints: {
|
|
232
|
+
readonly flow: readonly ["moduleId", "flowId"];
|
|
233
|
+
readonly command: readonly ["moduleId", "commandId"];
|
|
234
|
+
readonly admission: readonly ["authorityScope", "moduleId"];
|
|
235
|
+
readonly charge: readonly ["moduleId", "flowId", "kind"];
|
|
236
|
+
};
|
|
237
|
+
interface PasskeyCeremonyMapping<Module extends Table, Flow extends Table, Admission extends Table, Charge extends Table> {
|
|
238
|
+
readonly moduleId: string;
|
|
239
|
+
readonly authorityScope: string;
|
|
240
|
+
readonly module: PasskeyModuleTable<Module>;
|
|
241
|
+
readonly flow: PasskeyFlowTable<Flow>;
|
|
242
|
+
readonly admission: PasskeyAdmissionTable<Admission>;
|
|
243
|
+
readonly charge: PasskeyChargeTable<Charge>;
|
|
244
|
+
readonly clock: PasskeyClock;
|
|
245
|
+
readonly constraints: typeof requiredPasskeyPersistenceConstraints;
|
|
246
|
+
}
|
|
247
|
+
type CredentialTable<Read> = Read extends {
|
|
248
|
+
readonly credential: {
|
|
249
|
+
readonly table: infer T extends Table;
|
|
250
|
+
};
|
|
251
|
+
} ? T : never;
|
|
252
|
+
interface PasskeyPersistenceMapping<Read, Module extends Table, Flow extends Table, Admission extends Table, Charge extends Table, N> extends PasskeyCeremonyMapping<Module, Flow, Admission, Charge> {
|
|
253
|
+
readonly read: Read & {
|
|
254
|
+
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
255
|
+
};
|
|
256
|
+
readonly telemetry: {
|
|
257
|
+
readonly lastUsedAt: PasskeyColumn<CredentialTable<Read>>;
|
|
258
|
+
readonly encodeBackupState: (value: boolean) => unknown;
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
interface PasskeyEnrollmentContextMapping<Read, Module extends Table, N> {
|
|
262
|
+
readonly moduleId: string;
|
|
263
|
+
readonly read: Read & {
|
|
264
|
+
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
265
|
+
};
|
|
266
|
+
readonly module: PasskeyModuleTable<Module>;
|
|
267
|
+
}
|
|
268
|
+
interface D1PasskeyMapping {
|
|
269
|
+
readonly d1: {
|
|
270
|
+
readonly primary: true;
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
//#endregion
|
|
274
|
+
export { D1PasskeyMapping, PasskeyAdmissionTable, PasskeyCeremonyMapping, PasskeyChargeInsert, PasskeyChargeKind, PasskeyChargeTable, PasskeyClock, PasskeyColumn, PasskeyCredentialMapping, PasskeyCredentialOwnershipTable, PasskeyCredentialReadTable, PasskeyCredentialServices, PasskeyEnrollmentContextMapping, PasskeyEnrollmentContextServices, PasskeyFactorReadTable, PasskeyFlowInsert, PasskeyFlowState, PasskeyFlowTable, PasskeyHandleOwnershipTable, PasskeyHandleReadTable, PasskeyHandleReservationTable, PasskeyMappingSource, PasskeyModuleTable, PasskeyPersistenceMapping, PasskeyPersistenceServices, PasskeyPolicyGuard, PasskeySubjectIdCodec, PasskeySubjectReadTable, passkeyCredentialsLayer, passkeyEnrollmentContextLayer, passkeyPersistenceLayer, passkeyPolicyGuard, requiredPasskeyCredentialConstraints, requiredPasskeyPersistenceConstraints };
|
|
275
|
+
//# sourceMappingURL=passkey-model.d.mts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { PasskeyCredentials } from "../passkey/PasskeyCredentials.mjs";
|
|
2
|
+
import { PasskeyEnrollmentContext } from "../passkey/PasskeyEnrollmentContext.mjs";
|
|
3
|
+
import { PasskeyPersistence } from "../passkey/PasskeyPersistence.mjs";
|
|
4
|
+
import { Effect, Layer } from "effect";
|
|
5
|
+
//#region src/drizzle/passkey-model.ts
|
|
6
|
+
const passkeyCredentialsLayer = (services) => Layer.effect(PasskeyCredentials, Effect.map(services, (value) => value.passkeyCredentials));
|
|
7
|
+
const passkeyPersistenceLayer = (services) => Layer.effect(PasskeyPersistence, Effect.map(services, (value) => value.passkeyPersistence));
|
|
8
|
+
const passkeyEnrollmentContextLayer = (services) => Layer.effect(PasskeyEnrollmentContext, Effect.map(services, (value) => value.passkeyEnrollmentContext));
|
|
9
|
+
const requiredPasskeyCredentialConstraints = {
|
|
10
|
+
credentialId: ["credentialId"],
|
|
11
|
+
factor: ["subjectId", "credentialId"],
|
|
12
|
+
credentialOwnership: ["credentialKey"],
|
|
13
|
+
handleOwnership: ["handleKey"],
|
|
14
|
+
boundSubjectHandle: ["rpId", "subjectId"]
|
|
15
|
+
};
|
|
16
|
+
/** A stable additional policy row, acquired before RP/credential locks. The
|
|
17
|
+
* factory checks column names without erasing the consumer table at its input. */
|
|
18
|
+
const PasskeyPolicyGuardTypeId = Symbol("effect-auth/drizzle/PasskeyPolicyGuard");
|
|
19
|
+
const passkeyPolicyGuard = (input) => ({
|
|
20
|
+
...input,
|
|
21
|
+
[PasskeyPolicyGuardTypeId]: true
|
|
22
|
+
});
|
|
23
|
+
const requiredPasskeyPersistenceConstraints = {
|
|
24
|
+
flow: ["moduleId", "flowId"],
|
|
25
|
+
command: ["moduleId", "commandId"],
|
|
26
|
+
admission: ["authorityScope", "moduleId"],
|
|
27
|
+
charge: [
|
|
28
|
+
"moduleId",
|
|
29
|
+
"flowId",
|
|
30
|
+
"kind"
|
|
31
|
+
]
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
export { passkeyCredentialsLayer, passkeyEnrollmentContextLayer, passkeyPersistenceLayer, passkeyPolicyGuard, requiredPasskeyCredentialConstraints, requiredPasskeyPersistenceConstraints };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=passkey-model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-model.mjs","names":[],"sources":["../../src/drizzle/passkey-model.ts"],"sourcesContent":["import type { InferInsertModel, InferSelectModel, SQL, Table } from \"drizzle-orm\";\nimport { Effect, Layer } from \"effect\";\n\nimport type { PasskeyCeremony, PasskeyCredential } from \"../passkey/models\";\nimport { PasskeyCredentials } from \"../passkey/PasskeyCredentials\";\nimport { PasskeyEnrollmentContext } from \"../passkey/PasskeyEnrollmentContext\";\nimport { PasskeyPersistence } from \"../passkey/PasskeyPersistence\";\nimport type { PasskeyMethodPolicy } from \"../passkey/policy\";\nimport type { SubjectId } from \"../Schema\";\nimport type { DrizzleMappingError } from \"./model\";\n\nexport type PasskeyColumn<T extends Table> = Extract<keyof T[\"_\"][\"columns\"], string>;\n\nexport type PasskeyMappingSource<M, RSetup = never> =\n | M\n | Effect.Effect<M, DrizzleMappingError, RSetup>;\n\nexport interface PasskeyCredentialServices {\n readonly passkeyCredentials: PasskeyCredentials[\"Service\"];\n}\n\nexport interface PasskeyPersistenceServices {\n readonly passkeyPersistence: PasskeyPersistence[\"Service\"];\n}\n\nexport interface PasskeyEnrollmentContextServices {\n readonly passkeyEnrollmentContext: PasskeyEnrollmentContext[\"Service\"];\n}\n\nexport const passkeyCredentialsLayer = <E, R>(\n services: Effect.Effect<PasskeyCredentialServices, E, R>,\n): Layer.Layer<PasskeyCredentials, E, R> =>\n Layer.effect(\n PasskeyCredentials,\n Effect.map(services, (value) => value.passkeyCredentials),\n );\n\nexport const passkeyPersistenceLayer = <E, R>(\n services: Effect.Effect<PasskeyPersistenceServices, E, R>,\n): Layer.Layer<PasskeyPersistence, E, R> =>\n Layer.effect(\n PasskeyPersistence,\n Effect.map(services, (value) => value.passkeyPersistence),\n );\n\nexport const passkeyEnrollmentContextLayer = <E, R>(\n services: Effect.Effect<PasskeyEnrollmentContextServices, E, R>,\n): Layer.Layer<PasskeyEnrollmentContext, E, R> =>\n Layer.effect(\n PasskeyEnrollmentContext,\n Effect.map(services, (value) => value.passkeyEnrollmentContext),\n );\n\n/** Native IDs roundtrip exactly; protocol IDs and authentication references are\n * different identities. These callbacks never suspend inside an owner. */\nexport interface PasskeySubjectIdCodec<N> {\n readonly toNative: (id: SubjectId) => N;\n readonly toSubject: (id: N) => SubjectId;\n readonly equals: (left: N, right: N) => boolean;\n}\n\nexport interface PasskeyClock {\n readonly encodeInstant: (millis: number) => unknown;\n readonly decodeInstant: (value: unknown) => number;\n readonly engineNowMillis: SQL;\n readonly toMillis: (expression: SQL) => SQL;\n readonly fromMillis: (expression: SQL) => SQL;\n}\n\nexport interface PasskeySubjectReadTable<T extends Table, N> {\n readonly table: T;\n readonly id: PasskeyColumn<T>;\n readonly status: PasskeyColumn<T>;\n readonly securityRevision: PasskeyColumn<T>;\n readonly decodeId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;\n readonly isActiveStatus: (value: unknown) => boolean;\n readonly activeCondition: SQL;\n}\n\nexport interface PasskeyFactorReadTable<T extends Table> {\n readonly table: T;\n readonly subjectId: PasskeyColumn<T>;\n readonly credentialId: PasskeyColumn<T>;\n readonly revision: PasskeyColumn<T>;\n readonly status: PasskeyColumn<T>;\n readonly isActiveStatus: (value: unknown) => boolean;\n readonly activeCondition: SQL;\n}\n\n/** decode uses only these declared columns. Counter columns are native integral\n * numbers; BS may use a consumer enum. Name/creation metadata is not required. */\nexport interface PasskeyCredentialReadTable<T extends Table, N> {\n readonly table: T;\n readonly credentialId: PasskeyColumn<T>;\n readonly subjectId: PasskeyColumn<T>;\n readonly rpId: PasskeyColumn<T>;\n readonly protocolCredentialId: PasskeyColumn<T>;\n readonly credentialKey: PasskeyColumn<T>;\n readonly handleKey: PasskeyColumn<T>;\n readonly userHandle: PasskeyColumn<T>;\n readonly publicKey: PasskeyColumn<T>;\n readonly algorithm: PasskeyColumn<T>;\n readonly profile: PasskeyColumn<T>;\n readonly credentialRevision: PasskeyColumn<T>;\n readonly status: PasskeyColumn<T>;\n readonly primarySignIn: PasskeyColumn<T>;\n readonly enrollmentUserVerified: PasskeyColumn<T>;\n readonly backupEligible: PasskeyColumn<T>;\n readonly backupState: PasskeyColumn<T>;\n readonly counter: PasskeyColumn<T>;\n readonly maximumCounter: PasskeyColumn<T>;\n readonly decode: (\n row: Readonly<Partial<InferSelectModel<T>>>,\n ) => Omit<PasskeyCredential, \"revision\" | \"active\">;\n readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;\n readonly isActiveStatus: (value: unknown) => boolean;\n readonly activeCondition: SQL;\n}\n\nexport interface PasskeyCredentialOwnershipTable<T extends Table, N> {\n readonly table: T;\n readonly credentialKey: PasskeyColumn<T>;\n readonly rpId: PasskeyColumn<T>;\n readonly protocolCredentialId: PasskeyColumn<T>;\n readonly subjectId: PasskeyColumn<T>;\n readonly credentialId: PasskeyColumn<T>;\n readonly state: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly reservationId: PasskeyColumn<T>;\n readonly ownedCondition: SQL;\n readonly isOwnedState: (value: unknown) => boolean;\n readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;\n}\n\n/** Reservations do not manufacture a subject; bound handles are RP-global. */\nexport interface PasskeyHandleReadTable<T extends Table> {\n readonly table: T;\n readonly handleKey: PasskeyColumn<T>;\n readonly rpId: PasskeyColumn<T>;\n readonly userHandle: PasskeyColumn<T>;\n readonly state: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly reservationId: PasskeyColumn<T>;\n}\n\nexport interface PasskeyHandleReservationTable<T extends Table> extends PasskeyHandleReadTable<T> {\n readonly reservedCondition: SQL;\n readonly isReservedState: (value: unknown) => boolean;\n}\n\nexport interface PasskeyHandleOwnershipTable<T extends Table, N> extends PasskeyHandleReadTable<T> {\n readonly subjectId: PasskeyColumn<T>;\n readonly ownedCondition: SQL;\n readonly isOwnedState: (value: unknown) => boolean;\n readonly decodeSubjectId: (row: Readonly<Partial<InferSelectModel<T>>>) => N;\n}\n\nexport const requiredPasskeyCredentialConstraints = {\n credentialId: [\"credentialId\"],\n factor: [\"subjectId\", \"credentialId\"],\n credentialOwnership: [\"credentialKey\"],\n handleOwnership: [\"handleKey\"],\n boundSubjectHandle: [\"rpId\", \"subjectId\"],\n} as const;\n\nexport interface PasskeyCredentialMapping<\n S extends Table,\n C extends Table,\n F extends Table,\n Ownership extends Table,\n Handle extends Table,\n N,\n> {\n readonly subject: PasskeySubjectReadTable<S, N>;\n readonly credential: PasskeyCredentialReadTable<C, N>;\n readonly authority: PasskeyFactorReadTable<F>;\n readonly credentialOwnership: PasskeyCredentialOwnershipTable<Ownership, N>;\n readonly handleOwnership: PasskeyHandleOwnershipTable<Handle, N>;\n readonly subjectIds: PasskeySubjectIdCodec<N>;\n readonly constraints: typeof requiredPasskeyCredentialConstraints;\n}\n\n/** A stable additional policy row, acquired before RP/credential locks. The\n * factory checks column names without erasing the consumer table at its input. */\nconst PasskeyPolicyGuardTypeId: unique symbol = Symbol(\"effect-auth/drizzle/PasskeyPolicyGuard\");\n\nexport interface PasskeyPolicyGuard {\n readonly [PasskeyPolicyGuardTypeId]: true;\n readonly scope: string;\n readonly table: Table;\n readonly columns: ReadonlyArray<string>;\n readonly where: (moduleId: string) => SQL;\n readonly condition: (moduleId: string) => SQL;\n}\n\nexport const passkeyPolicyGuard = <T extends Table>(input: {\n readonly scope: string;\n readonly table: T;\n readonly columns: ReadonlyArray<PasskeyColumn<T>>;\n readonly where: (moduleId: string) => SQL;\n readonly condition: (moduleId: string) => SQL;\n}): PasskeyPolicyGuard => ({ ...input, [PasskeyPolicyGuardTypeId]: true });\n\nexport interface PasskeyModuleTable<T extends Table> {\n readonly table: T;\n readonly moduleId: PasskeyColumn<T>;\n readonly status: PasskeyColumn<T>;\n readonly policyRevision: PasskeyColumn<T>;\n /** All physical fields used by decodeMethodPolicy, including policyRevision. */\n readonly policyColumns: ReadonlyArray<PasskeyColumn<T>>;\n readonly isActiveStatus: (value: unknown) => boolean;\n readonly activeCondition: SQL;\n readonly decodeMethodPolicy: (row: Readonly<Partial<InferSelectModel<T>>>) => PasskeyMethodPolicy;\n readonly guards?: ReadonlyArray<PasskeyPolicyGuard>;\n}\n\nexport type PasskeyFlowState =\n | \"Pending\"\n | \"Claimed\"\n | \"Verified\"\n | \"Rejected\"\n | \"Ambiguous\"\n | \"RegistrationAccepted\"\n | \"ProvisioningPending\";\n\nexport interface PasskeyFlowInsert {\n readonly ceremony: PasskeyCeremony;\n readonly policy: PasskeyMethodPolicy;\n readonly marker: string;\n}\n\nexport interface PasskeyFlowTable<T extends Table> {\n readonly table: T;\n readonly moduleId: PasskeyColumn<T>;\n readonly flowId: PasskeyColumn<T>;\n readonly commandId: PasskeyColumn<T>;\n readonly purpose: PasskeyColumn<T>;\n readonly state: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly generation: PasskeyColumn<T>;\n readonly snapshot: PasskeyColumn<T>;\n readonly policySnapshot: PasskeyColumn<T>;\n readonly requestBindingVerifier: PasskeyColumn<T>;\n readonly requestBindingExpiresAt: PasskeyColumn<T>;\n readonly issuedAt: PasskeyColumn<T>;\n readonly expiresAt: PasskeyColumn<T>;\n readonly retentionUntil: PasskeyColumn<T>;\n readonly claimId: PasskeyColumn<T>;\n readonly claimedAt: PasskeyColumn<T>;\n readonly claimExpiresAt: PasskeyColumn<T>;\n readonly credentialSnapshot: PasskeyColumn<T>;\n /** Core SubjectId scope text, not a consumer's native subject ID. */\n readonly subjectScope: PasskeyColumn<T>;\n readonly targetScope: PasskeyColumn<T>;\n readonly states: Readonly<Record<PasskeyFlowState, unknown>>;\n readonly encodeInsert: (input: PasskeyFlowInsert) => InferInsertModel<T>;\n}\n\nexport interface PasskeyAdmissionTable<T extends Table> {\n readonly table: T;\n readonly authorityScope: PasskeyColumn<T>;\n readonly moduleId: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly ownerMarker: PasskeyColumn<T>;\n /** One physical clock sample, reused by every charge of this decision. */\n readonly admittedAt: PasskeyColumn<T>;\n}\n\nexport type PasskeyChargeKind = \"global\" | \"subject\" | \"target\";\n\nexport interface PasskeyChargeInsert {\n readonly moduleId: string;\n readonly flowId: string;\n readonly purpose: PasskeyCeremony[\"purpose\"];\n readonly kind: PasskeyChargeKind;\n readonly scope: string;\n readonly originalWindowMillis: number;\n readonly marker: string;\n}\n\n/** Charge scope is canonical core identity text; this subject-free descriptor\n * can count all purposes without decoding any unrelated native subject. */\nexport interface PasskeyChargeTable<T extends Table> {\n readonly table: T;\n readonly moduleId: PasskeyColumn<T>;\n readonly flowId: PasskeyColumn<T>;\n readonly purpose: PasskeyColumn<T>;\n readonly kind: PasskeyColumn<T>;\n readonly scope: PasskeyColumn<T>;\n readonly originalWindowMillis: PasskeyColumn<T>;\n readonly admittedAt: PasskeyColumn<T>;\n readonly retainUntil: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly ownerMarker: PasskeyColumn<T>;\n readonly encodeInsert: (input: PasskeyChargeInsert) => InferInsertModel<T>;\n}\n\nexport const requiredPasskeyPersistenceConstraints = {\n flow: [\"moduleId\", \"flowId\"],\n command: [\"moduleId\", \"commandId\"],\n admission: [\"authorityScope\", \"moduleId\"],\n charge: [\"moduleId\", \"flowId\", \"kind\"],\n} as const;\n\nexport interface PasskeyCeremonyMapping<\n Module extends Table,\n Flow extends Table,\n Admission extends Table,\n Charge extends Table,\n> {\n readonly moduleId: string;\n readonly authorityScope: string;\n readonly module: PasskeyModuleTable<Module>;\n readonly flow: PasskeyFlowTable<Flow>;\n readonly admission: PasskeyAdmissionTable<Admission>;\n readonly charge: PasskeyChargeTable<Charge>;\n readonly clock: PasskeyClock;\n readonly constraints: typeof requiredPasskeyPersistenceConstraints;\n}\n\ntype CredentialTable<Read> = Read extends {\n readonly credential: { readonly table: infer T extends Table };\n}\n ? T\n : never;\n\nexport interface PasskeyPersistenceMapping<\n Read,\n Module extends Table,\n Flow extends Table,\n Admission extends Table,\n Charge extends Table,\n N,\n> extends PasskeyCeremonyMapping<Module, Flow, Admission, Charge> {\n readonly read: Read & { readonly subjectIds: PasskeySubjectIdCodec<N> };\n readonly telemetry: {\n readonly lastUsedAt: PasskeyColumn<CredentialTable<Read>>;\n readonly encodeBackupState: (value: boolean) => unknown;\n };\n}\n\nexport interface PasskeyEnrollmentContextMapping<Read, Module extends Table, N> {\n readonly moduleId: string;\n readonly read: Read & { readonly subjectIds: PasskeySubjectIdCodec<N> };\n readonly module: PasskeyModuleTable<Module>;\n}\n\nexport interface D1PasskeyMapping {\n readonly d1: { readonly primary: true };\n}\n"],"mappings":";;;;;AA6BA,MAAa,2BACX,aAEA,MAAM,OACJ,oBACA,OAAO,IAAI,WAAW,UAAU,MAAM,kBAAkB,CAC1D;AAEF,MAAa,2BACX,aAEA,MAAM,OACJ,oBACA,OAAO,IAAI,WAAW,UAAU,MAAM,kBAAkB,CAC1D;AAEF,MAAa,iCACX,aAEA,MAAM,OACJ,0BACA,OAAO,IAAI,WAAW,UAAU,MAAM,wBAAwB,CAChE;AA0GF,MAAa,uCAAuC;CAClD,cAAc,CAAC,cAAc;CAC7B,QAAQ,CAAC,aAAa,cAAc;CACpC,qBAAqB,CAAC,eAAe;CACrC,iBAAiB,CAAC,WAAW;CAC7B,oBAAoB,CAAC,QAAQ,WAAW;AAC1C;;;AAqBA,MAAM,2BAA0C,OAAO,wCAAwC;AAW/F,MAAa,sBAAuC,WAMzB;CAAE,GAAG;EAAQ,2BAA2B;AAAK;AAgGxE,MAAa,wCAAwC;CACnD,MAAM,CAAC,YAAY,QAAQ;CAC3B,SAAS,CAAC,YAAY,WAAW;CACjC,WAAW,CAAC,kBAAkB,UAAU;CACxC,QAAQ;EAAC;EAAY;EAAU;CAAM;AACvC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PasskeyCeremonyMapping, PasskeyChargeTable, PasskeyColumn, PasskeyFlowTable, PasskeyHandleReservationTable, PasskeyPersistenceServices } from "./passkey-model.mjs";
|
|
2
|
+
import { SQL, Table } from "drizzle-orm";
|
|
3
|
+
//#region src/drizzle/passkey-registration-ceremony-model.d.ts
|
|
4
|
+
interface PasskeyRegistrationCeremonyCapabilities {
|
|
5
|
+
readonly purposes: readonly ["registration"];
|
|
6
|
+
readonly issue: "registration-authority";
|
|
7
|
+
readonly assertionSettlement: false;
|
|
8
|
+
}
|
|
9
|
+
interface PasskeyRegistrationCeremonyServices extends PasskeyPersistenceServices {
|
|
10
|
+
readonly capabilities: PasskeyRegistrationCeremonyCapabilities;
|
|
11
|
+
}
|
|
12
|
+
/** Read-only custody supplied by a separate registration issuance authority.
|
|
13
|
+
* No application payload codec, subject codec or provisioning callback runs here. */
|
|
14
|
+
interface PasskeyRegistrationIntentReadTable<T extends Table> {
|
|
15
|
+
readonly table: T;
|
|
16
|
+
readonly moduleId: PasskeyColumn<T>;
|
|
17
|
+
readonly flowId: PasskeyColumn<T>;
|
|
18
|
+
readonly commandId: PasskeyColumn<T>;
|
|
19
|
+
readonly state: PasskeyColumn<T>;
|
|
20
|
+
readonly version: PasskeyColumn<T>;
|
|
21
|
+
readonly fingerprint: PasskeyColumn<T>;
|
|
22
|
+
readonly handleKey: PasskeyColumn<T>;
|
|
23
|
+
readonly reservationId: PasskeyColumn<T>;
|
|
24
|
+
readonly ceremonySnapshot: PasskeyColumn<T>;
|
|
25
|
+
/** Already validated by the issuing authority; compare opaque bytes only. */
|
|
26
|
+
readonly applicationSnapshot: PasskeyColumn<T>;
|
|
27
|
+
readonly pendingCondition: SQL;
|
|
28
|
+
readonly isPendingState: (value: unknown) => boolean;
|
|
29
|
+
/** Any unresolved initial intent or provisioning job; cleanup never releases it. */
|
|
30
|
+
readonly custodyCondition: SQL;
|
|
31
|
+
}
|
|
32
|
+
declare const requiredPasskeyRegistrationCeremonyConstraints: {
|
|
33
|
+
readonly flow: readonly ["moduleId", "flowId"];
|
|
34
|
+
readonly command: readonly ["moduleId", "commandId"];
|
|
35
|
+
readonly admission: readonly ["authorityScope", "moduleId"];
|
|
36
|
+
readonly charge: readonly ["moduleId", "flowId", "kind"];
|
|
37
|
+
readonly intentFlow: readonly ["moduleId", "flowId"];
|
|
38
|
+
readonly intentCommand: readonly ["moduleId", "commandId"];
|
|
39
|
+
readonly handle: readonly ["handleKey"];
|
|
40
|
+
};
|
|
41
|
+
interface PasskeyRegistrationCeremonyMapping<Module extends Table, Flow extends Table, Admission extends Table, Charge extends Table, Intent extends Table, Handle extends Table> extends Omit<PasskeyCeremonyMapping<Module, Flow, Admission, Charge>, "constraints" | "flow" | "charge"> {
|
|
42
|
+
readonly flow: Omit<PasskeyFlowTable<Flow>, "encodeInsert">;
|
|
43
|
+
readonly charge: Omit<PasskeyChargeTable<Charge>, "encodeInsert">;
|
|
44
|
+
readonly intent: PasskeyRegistrationIntentReadTable<Intent>;
|
|
45
|
+
readonly handle: PasskeyHandleReservationTable<Handle>;
|
|
46
|
+
readonly constraints: typeof requiredPasskeyRegistrationCeremonyConstraints;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { PasskeyRegistrationCeremonyCapabilities, PasskeyRegistrationCeremonyMapping, PasskeyRegistrationCeremonyServices, PasskeyRegistrationIntentReadTable, requiredPasskeyRegistrationCeremonyConstraints };
|
|
50
|
+
//# sourceMappingURL=passkey-registration-ceremony-model.d.mts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/drizzle/passkey-registration-ceremony-model.ts
|
|
2
|
+
const requiredPasskeyRegistrationCeremonyConstraints = {
|
|
3
|
+
flow: ["moduleId", "flowId"],
|
|
4
|
+
command: ["moduleId", "commandId"],
|
|
5
|
+
admission: ["authorityScope", "moduleId"],
|
|
6
|
+
charge: [
|
|
7
|
+
"moduleId",
|
|
8
|
+
"flowId",
|
|
9
|
+
"kind"
|
|
10
|
+
],
|
|
11
|
+
intentFlow: ["moduleId", "flowId"],
|
|
12
|
+
intentCommand: ["moduleId", "commandId"],
|
|
13
|
+
handle: ["handleKey"]
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { requiredPasskeyRegistrationCeremonyConstraints };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=passkey-registration-ceremony-model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-registration-ceremony-model.mjs","names":[],"sources":["../../src/drizzle/passkey-registration-ceremony-model.ts"],"sourcesContent":["import type { SQL, Table } from \"drizzle-orm\";\n\nimport type {\n PasskeyCeremonyMapping,\n PasskeyChargeTable,\n PasskeyColumn,\n PasskeyFlowTable,\n PasskeyHandleReservationTable,\n PasskeyPersistenceServices,\n} from \"./passkey-model\";\n\nexport interface PasskeyRegistrationCeremonyCapabilities {\n readonly purposes: readonly [\"registration\"];\n readonly issue: \"registration-authority\";\n readonly assertionSettlement: false;\n}\n\nexport interface PasskeyRegistrationCeremonyServices extends PasskeyPersistenceServices {\n readonly capabilities: PasskeyRegistrationCeremonyCapabilities;\n}\n\n/** Read-only custody supplied by a separate registration issuance authority.\n * No application payload codec, subject codec or provisioning callback runs here. */\nexport interface PasskeyRegistrationIntentReadTable<T extends Table> {\n readonly table: T;\n readonly moduleId: PasskeyColumn<T>;\n readonly flowId: PasskeyColumn<T>;\n readonly commandId: PasskeyColumn<T>;\n readonly state: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly fingerprint: PasskeyColumn<T>;\n readonly handleKey: PasskeyColumn<T>;\n readonly reservationId: PasskeyColumn<T>;\n readonly ceremonySnapshot: PasskeyColumn<T>;\n /** Already validated by the issuing authority; compare opaque bytes only. */\n readonly applicationSnapshot: PasskeyColumn<T>;\n readonly pendingCondition: SQL;\n readonly isPendingState: (value: unknown) => boolean;\n /** Any unresolved initial intent or provisioning job; cleanup never releases it. */\n readonly custodyCondition: SQL;\n}\n\nexport const requiredPasskeyRegistrationCeremonyConstraints = {\n flow: [\"moduleId\", \"flowId\"],\n command: [\"moduleId\", \"commandId\"],\n admission: [\"authorityScope\", \"moduleId\"],\n charge: [\"moduleId\", \"flowId\", \"kind\"],\n intentFlow: [\"moduleId\", \"flowId\"],\n intentCommand: [\"moduleId\", \"commandId\"],\n handle: [\"handleKey\"],\n} as const;\n\nexport interface PasskeyRegistrationCeremonyMapping<\n Module extends Table,\n Flow extends Table,\n Admission extends Table,\n Charge extends Table,\n Intent extends Table,\n Handle extends Table,\n> extends Omit<\n PasskeyCeremonyMapping<Module, Flow, Admission, Charge>,\n \"constraints\" | \"flow\" | \"charge\"\n> {\n readonly flow: Omit<PasskeyFlowTable<Flow>, \"encodeInsert\">;\n readonly charge: Omit<PasskeyChargeTable<Charge>, \"encodeInsert\">;\n readonly intent: PasskeyRegistrationIntentReadTable<Intent>;\n readonly handle: PasskeyHandleReservationTable<Handle>;\n readonly constraints: typeof requiredPasskeyRegistrationCeremonyConstraints;\n}\n"],"mappings":";AA0CA,MAAa,iDAAiD;CAC5D,MAAM,CAAC,YAAY,QAAQ;CAC3B,SAAS,CAAC,YAAY,WAAW;CACjC,WAAW,CAAC,kBAAkB,UAAU;CACxC,QAAQ;EAAC;EAAY;EAAU;CAAM;CACrC,YAAY,CAAC,YAAY,QAAQ;CACjC,eAAe,CAAC,YAAY,WAAW;CACvC,QAAQ,CAAC,WAAW;AACtB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { both } from "./transaction-owner.mjs";
|
|
2
|
+
import { PasskeyClaim } from "../passkey/models.mjs";
|
|
3
|
+
import { snapshotPasskeySync } from "../passkey/snapshot.mjs";
|
|
4
|
+
import { CurrentPasskeyTransaction, ceremonyStorage, equal, handleKey, invariant, mappedColumns, policyStorage } from "./passkey-state.mjs";
|
|
5
|
+
import { admissionCondition, guardAdmission, guardChargeSet, lockAdmission, readCharges } from "./passkey-admission.mjs";
|
|
6
|
+
import { readModule, readPolicyGuards } from "./passkey-credentials.mjs";
|
|
7
|
+
import { releaseRegistrationCustody } from "./passkey-registration-custody.mjs";
|
|
8
|
+
import { compatiblePolicy, liveCondition, matchesAccess, readFlow, terminalFlow } from "./passkey-flow.mjs";
|
|
9
|
+
import { Effect } from "effect";
|
|
10
|
+
import { sql } from "drizzle-orm";
|
|
11
|
+
//#region src/drizzle/passkey-registration-ceremony.ts
|
|
12
|
+
/** The issuing registration authority owns the application value and reservation.
|
|
13
|
+
* This facet only compares its opaque custody and cannot issue or provision. */
|
|
14
|
+
const custody = Effect.fn("passkey.registrationCustody")(function* (mapping, ceremony, pending) {
|
|
15
|
+
const owner = yield* CurrentPasskeyTransaction;
|
|
16
|
+
invariant(ceremony.context._tag === "Registration");
|
|
17
|
+
const context = ceremony.context, intent = mapping.intent, handle = mapping.handle;
|
|
18
|
+
const identity = {
|
|
19
|
+
[intent.moduleId]: mapping.moduleId,
|
|
20
|
+
[intent.flowId]: ceremony.flowId
|
|
21
|
+
};
|
|
22
|
+
const advisory = (yield* owner.read(intent.table, equal(intent.table, identity), {
|
|
23
|
+
limit: 1,
|
|
24
|
+
lock: false,
|
|
25
|
+
observe: false
|
|
26
|
+
})).rows[0];
|
|
27
|
+
if (advisory === void 0) return false;
|
|
28
|
+
const hashedHandle = handleKey(ceremony.profile.rpId, context.userHandle);
|
|
29
|
+
const held = (yield* owner.read(handle.table, equal(handle.table, { [handle.handleKey]: hashedHandle }), {
|
|
30
|
+
limit: 1,
|
|
31
|
+
columns: mappedColumns(handle)
|
|
32
|
+
})).rows[0];
|
|
33
|
+
if (held === void 0 || !handle.isReservedState(held[handle.state]) || held[handle.handleKey] !== hashedHandle || held[handle.rpId] !== ceremony.profile.rpId || held[handle.userHandle] !== context.userHandle || held[handle.reservationId] !== advisory[intent.reservationId]) return false;
|
|
34
|
+
const heldCondition = sql`exists (select 1 from ${handle.table} where ${both(owner.exact(handle.table, held), handle.reservedCondition)})`;
|
|
35
|
+
if (!(yield* owner.check(heldCondition))) return false;
|
|
36
|
+
const row = (yield* owner.read(intent.table, equal(intent.table, identity), {
|
|
37
|
+
limit: 1,
|
|
38
|
+
columns: mappedColumns(intent)
|
|
39
|
+
})).rows[0];
|
|
40
|
+
if (row === void 0 || row[intent.commandId] !== ceremony.commandId || row[intent.fingerprint] !== context.fingerprint || row[intent.handleKey] !== hashedHandle || row[intent.reservationId] !== held[handle.reservationId] || row[intent.ceremonySnapshot] !== ceremonyStorage.encode(ceremony) || typeof row[intent.applicationSnapshot] !== "string" || new TextEncoder().encode(row[intent.applicationSnapshot]).length > 1048576 || pending && !intent.isPendingState(row[intent.state])) return false;
|
|
41
|
+
const condition = pending ? intent.pendingCondition : intent.custodyCondition;
|
|
42
|
+
if (!(yield* owner.check(sql`exists (select 1 from ${intent.table} where ${both(owner.exact(intent.table, row), condition)})`))) return false;
|
|
43
|
+
return [heldCondition, sql`exists (select 1 from ${intent.table} where ${both(owner.exact(intent.table, row), condition)})`];
|
|
44
|
+
});
|
|
45
|
+
const contextRegistration = Effect.fn("passkey.contextRegistration")(function* (mapping, access) {
|
|
46
|
+
const owner = yield* CurrentPasskeyTransaction;
|
|
47
|
+
if (access.moduleId !== mapping.moduleId) return void 0;
|
|
48
|
+
const current = yield* readModule(mapping);
|
|
49
|
+
if (current === void 0) return void 0;
|
|
50
|
+
yield* readPolicyGuards(mapping);
|
|
51
|
+
const table = mapping.flow;
|
|
52
|
+
const advisory = (yield* owner.read(table.table, equal(table.table, {
|
|
53
|
+
[table.moduleId]: mapping.moduleId,
|
|
54
|
+
[table.flowId]: access.flowId
|
|
55
|
+
}), {
|
|
56
|
+
limit: 1,
|
|
57
|
+
lock: false,
|
|
58
|
+
observe: false
|
|
59
|
+
})).rows[0];
|
|
60
|
+
if (advisory === void 0) return void 0;
|
|
61
|
+
const ceremony = ceremonyStorage.decode(advisory[table.snapshot]);
|
|
62
|
+
if (ceremony.purpose !== "registration" || !matchesAccess(ceremony, access)) return void 0;
|
|
63
|
+
const held = yield* custody(mapping, ceremony, true);
|
|
64
|
+
if (!held) return void 0;
|
|
65
|
+
const read = yield* readFlow(mapping, access.flowId);
|
|
66
|
+
if (read === void 0 || read.state !== "Pending" || ceremonyStorage.encode(read.ceremony) !== ceremonyStorage.encode(ceremony) || !compatiblePolicy(read.ceremony, read.policy, current) || !(yield* owner.check(liveCondition(mapping, ceremony)))) return void 0;
|
|
67
|
+
owner.postconditions.push(...held, liveCondition(mapping, ceremony));
|
|
68
|
+
return read.ceremony;
|
|
69
|
+
});
|
|
70
|
+
const claimRegistration = Effect.fn("passkey.claimRegistration")(function* (mapping, input) {
|
|
71
|
+
const owner = yield* CurrentPasskeyTransaction;
|
|
72
|
+
const current = yield* readModule(mapping);
|
|
73
|
+
if (current === void 0 || input.access.moduleId !== mapping.moduleId) return { _tag: "Rejected" };
|
|
74
|
+
yield* lockAdmission(mapping);
|
|
75
|
+
yield* readPolicyGuards(mapping);
|
|
76
|
+
const held = yield* custody(mapping, input.ceremony, true);
|
|
77
|
+
const read = yield* readFlow(mapping, input.access.flowId);
|
|
78
|
+
if (read === void 0 || read.state !== "Pending" || !matchesAccess(read.ceremony, input.access)) return { _tag: "Rejected" };
|
|
79
|
+
invariant(ceremonyStorage.encode(read.ceremony) === ceremonyStorage.encode(input.ceremony));
|
|
80
|
+
if (!held || !compatiblePolicy(read.ceremony, read.policy, current) || policyStorage.encode(current) !== policyStorage.encode(input.policy) || !(yield* owner.check(liveCondition(mapping, read.ceremony))) || !(yield* owner.check(admissionCondition(mapping, [read.policy, current], read.ceremony, void 0, [], false, false)))) {
|
|
81
|
+
if (held) yield* releaseRegistrationCustody(mapping, read.ceremony);
|
|
82
|
+
yield* terminalFlow(mapping, read, "Rejected");
|
|
83
|
+
return { _tag: "Rejected" };
|
|
84
|
+
}
|
|
85
|
+
yield* readCharges(mapping, read.ceremony, read.policy, void 0);
|
|
86
|
+
const claimedAtMillis = yield* owner.now(mapping.clock);
|
|
87
|
+
const claim = snapshotPasskeySync(PasskeyClaim, {
|
|
88
|
+
ceremony: read.ceremony,
|
|
89
|
+
claimId: input.claimId,
|
|
90
|
+
claimedAtMillis,
|
|
91
|
+
claimExpiresAtMillis: Math.min(claimedAtMillis + read.ceremony.claimLifetimeMillis, read.ceremony.expiresAtMillis)
|
|
92
|
+
});
|
|
93
|
+
const table = mapping.flow;
|
|
94
|
+
yield* owner.update(table.table, {
|
|
95
|
+
[table.moduleId]: mapping.moduleId,
|
|
96
|
+
[table.flowId]: read.ceremony.flowId
|
|
97
|
+
}, {
|
|
98
|
+
[table.state]: table.states.Claimed,
|
|
99
|
+
[table.version]: owner.marker,
|
|
100
|
+
[table.claimId]: claim.claimId,
|
|
101
|
+
[table.claimedAt]: mapping.clock.encodeInstant(claim.claimedAtMillis),
|
|
102
|
+
[table.claimExpiresAt]: mapping.clock.encodeInstant(claim.claimExpiresAtMillis)
|
|
103
|
+
});
|
|
104
|
+
yield* guardChargeSet(mapping, read.ceremony, void 0);
|
|
105
|
+
yield* guardAdmission(mapping, [read.policy, current], read.ceremony, void 0);
|
|
106
|
+
owner.postconditions.push(...held, liveCondition(mapping, read.ceremony, claim));
|
|
107
|
+
return {
|
|
108
|
+
_tag: "Claimed",
|
|
109
|
+
claim
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
const settleRegistration = Effect.fn("passkey.settleRegistration")(function* (mapping, claim, outcome) {
|
|
113
|
+
yield* readModule(mapping);
|
|
114
|
+
yield* lockAdmission(mapping);
|
|
115
|
+
yield* readPolicyGuards(mapping);
|
|
116
|
+
const read = yield* readFlow(mapping, claim.ceremony.flowId);
|
|
117
|
+
if (read === void 0 || read.state !== "Claimed" || read.claim === void 0 || read.claim.claimId !== claim.claimId || read.claim.claimedAtMillis !== claim.claimedAtMillis || read.claim.claimExpiresAtMillis !== claim.claimExpiresAtMillis || ceremonyStorage.encode(read.ceremony) !== ceremonyStorage.encode(claim.ceremony)) return "Rejected";
|
|
118
|
+
if (outcome === "Rejected") yield* releaseRegistrationCustody(mapping, claim.ceremony);
|
|
119
|
+
return yield* terminalFlow(mapping, read, outcome);
|
|
120
|
+
});
|
|
121
|
+
//#endregion
|
|
122
|
+
export { claimRegistration, contextRegistration, settleRegistration };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=passkey-registration-ceremony.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-registration-ceremony.mjs","names":[],"sources":["../../src/drizzle/passkey-registration-ceremony.ts"],"sourcesContent":["/* oxlint-disable no-explicit-any -- private mapped-row kernel; public descriptors retain concrete tables. */\nimport { sql } from \"drizzle-orm\";\nimport { Effect } from \"effect\";\n\nimport { PasskeyClaim, type PasskeyAccess, type PasskeyCeremony } from \"../passkey/models\";\nimport type { PasskeyMethodPolicy } from \"../passkey/policy\";\nimport { snapshotPasskeySync } from \"../passkey/snapshot\";\nimport {\n admissionCondition,\n guardAdmission,\n guardChargeSet,\n lockAdmission,\n readCharges,\n} from \"./passkey-admission\";\nimport { readModule, readPolicyGuards } from \"./passkey-credentials\";\nimport {\n compatiblePolicy,\n liveCondition,\n matchesAccess,\n readFlow,\n terminalFlow,\n} from \"./passkey-flow\";\nimport { releaseRegistrationCustody } from \"./passkey-registration-custody\";\nimport {\n ceremonyStorage,\n equal,\n handleKey,\n invariant,\n mappedColumns,\n policyStorage,\n CurrentPasskeyTransaction,\n} from \"./passkey-state\";\nimport { both } from \"./transaction-owner\";\n\n/** The issuing registration authority owns the application value and reservation.\n * This facet only compares its opaque custody and cannot issue or provision. */\nconst custody = Effect.fn(\"passkey.registrationCustody\")(function* (\n mapping: any,\n ceremony: PasskeyCeremony,\n pending: boolean,\n) {\n const owner = yield* CurrentPasskeyTransaction;\n\n invariant(ceremony.context._tag === \"Registration\");\n\n const context = ceremony.context,\n intent = mapping.intent,\n handle = mapping.handle;\n\n const identity = { [intent.moduleId]: mapping.moduleId, [intent.flowId]: ceremony.flowId };\n\n const advisory = (yield* owner.read(intent.table, equal(intent.table, identity), {\n limit: 1,\n lock: false,\n observe: false,\n })).rows[0];\n\n if (advisory === undefined) return false;\n const hashedHandle = handleKey(ceremony.profile.rpId, context.userHandle);\n\n const held = (yield* owner.read(\n handle.table,\n equal(handle.table, { [handle.handleKey]: hashedHandle }),\n { limit: 1, columns: mappedColumns(handle) },\n )).rows[0];\n\n if (\n held === undefined ||\n !handle.isReservedState(held[handle.state]) ||\n held[handle.handleKey] !== hashedHandle ||\n held[handle.rpId] !== ceremony.profile.rpId ||\n held[handle.userHandle] !== context.userHandle ||\n held[handle.reservationId] !== advisory[intent.reservationId]\n )\n return false;\n const heldCondition = sql`exists (select 1 from ${handle.table} where ${both(owner.exact(handle.table, held), handle.reservedCondition)})`;\n\n if (!(yield* owner.check(heldCondition))) return false;\n\n const row = (yield* owner.read(intent.table, equal(intent.table, identity), {\n limit: 1,\n columns: mappedColumns(intent),\n })).rows[0];\n\n if (\n row === undefined ||\n row[intent.commandId] !== ceremony.commandId ||\n row[intent.fingerprint] !== context.fingerprint ||\n row[intent.handleKey] !== hashedHandle ||\n row[intent.reservationId] !== held[handle.reservationId] ||\n row[intent.ceremonySnapshot] !== ceremonyStorage.encode(ceremony) ||\n typeof row[intent.applicationSnapshot] !== \"string\" ||\n new TextEncoder().encode(row[intent.applicationSnapshot]).length > 1048576 ||\n (pending && !intent.isPendingState(row[intent.state]))\n )\n return false;\n const condition = pending ? intent.pendingCondition : intent.custodyCondition;\n\n if (\n !(yield* owner.check(\n sql`exists (select 1 from ${intent.table} where ${both(owner.exact(intent.table, row), condition)})`,\n ))\n )\n return false;\n\n return [\n heldCondition,\n sql`exists (select 1 from ${intent.table} where ${both(owner.exact(intent.table, row), condition)})`,\n ];\n});\n\nexport const contextRegistration = Effect.fn(\"passkey.contextRegistration\")(function* (\n mapping: any,\n access: PasskeyAccess,\n) {\n const owner = yield* CurrentPasskeyTransaction;\n\n if (access.moduleId !== mapping.moduleId) return undefined;\n const current = yield* readModule(mapping);\n\n if (current === undefined) return undefined;\n yield* readPolicyGuards(mapping);\n const table = mapping.flow;\n\n const advisory = (yield* owner.read(\n table.table,\n equal(table.table, { [table.moduleId]: mapping.moduleId, [table.flowId]: access.flowId }),\n { limit: 1, lock: false, observe: false },\n )).rows[0];\n\n if (advisory === undefined) return undefined;\n const ceremony = ceremonyStorage.decode(advisory[table.snapshot]);\n\n if (ceremony.purpose !== \"registration\" || !matchesAccess(ceremony, access)) return undefined;\n const held = yield* custody(mapping, ceremony, true);\n\n if (!held) return undefined;\n const read = yield* readFlow(mapping, access.flowId);\n\n if (\n read === undefined ||\n read.state !== \"Pending\" ||\n ceremonyStorage.encode(read.ceremony) !== ceremonyStorage.encode(ceremony) ||\n !compatiblePolicy(read.ceremony, read.policy, current) ||\n !(yield* owner.check(liveCondition(mapping, ceremony)))\n )\n return undefined;\n owner.postconditions.push(...held, liveCondition(mapping, ceremony));\n\n return read.ceremony;\n});\n\nexport const claimRegistration = Effect.fn(\"passkey.claimRegistration\")(function* (\n mapping: any,\n input: {\n readonly access: PasskeyAccess;\n readonly policy: PasskeyMethodPolicy;\n readonly ceremony: PasskeyCeremony;\n readonly claimId: string;\n },\n) {\n const owner = yield* CurrentPasskeyTransaction;\n const current = yield* readModule(mapping);\n\n if (current === undefined || input.access.moduleId !== mapping.moduleId)\n return { _tag: \"Rejected\" } as const;\n yield* lockAdmission(mapping);\n yield* readPolicyGuards(mapping);\n const held = yield* custody(mapping, input.ceremony, true);\n const read = yield* readFlow(mapping, input.access.flowId);\n\n if (read === undefined || read.state !== \"Pending\" || !matchesAccess(read.ceremony, input.access))\n return { _tag: \"Rejected\" } as const;\n invariant(ceremonyStorage.encode(read.ceremony) === ceremonyStorage.encode(input.ceremony));\n if (\n !held ||\n !compatiblePolicy(read.ceremony, read.policy, current) ||\n policyStorage.encode(current) !== policyStorage.encode(input.policy) ||\n !(yield* owner.check(liveCondition(mapping, read.ceremony))) ||\n !(yield* owner.check(\n admissionCondition(\n mapping,\n [read.policy, current],\n read.ceremony,\n undefined,\n [],\n false,\n false,\n ),\n ))\n ) {\n if (held) yield* releaseRegistrationCustody(mapping, read.ceremony);\n yield* terminalFlow(mapping, read, \"Rejected\");\n\n return { _tag: \"Rejected\" } as const;\n }\n yield* readCharges(mapping, read.ceremony, read.policy, undefined);\n const claimedAtMillis = yield* owner.now(mapping.clock);\n\n const claim = snapshotPasskeySync(PasskeyClaim, {\n ceremony: read.ceremony,\n claimId: input.claimId,\n claimedAtMillis,\n claimExpiresAtMillis: Math.min(\n claimedAtMillis + read.ceremony.claimLifetimeMillis,\n read.ceremony.expiresAtMillis,\n ),\n });\n\n const table = mapping.flow;\n\n yield* owner.update(\n table.table,\n { [table.moduleId]: mapping.moduleId, [table.flowId]: read.ceremony.flowId },\n {\n [table.state]: table.states.Claimed,\n [table.version]: owner.marker,\n [table.claimId]: claim.claimId,\n [table.claimedAt]: mapping.clock.encodeInstant(claim.claimedAtMillis),\n [table.claimExpiresAt]: mapping.clock.encodeInstant(claim.claimExpiresAtMillis),\n },\n );\n yield* guardChargeSet(mapping, read.ceremony, undefined);\n yield* guardAdmission(mapping, [read.policy, current], read.ceremony, undefined);\n owner.postconditions.push(...held, liveCondition(mapping, read.ceremony, claim));\n\n return { _tag: \"Claimed\", claim } as const;\n});\n\nexport const settleRegistration = Effect.fn(\"passkey.settleRegistration\")(function* (\n mapping: any,\n claim: PasskeyClaim,\n outcome: \"Rejected\" | \"Ambiguous\",\n) {\n yield* readModule(mapping);\n yield* lockAdmission(mapping);\n yield* readPolicyGuards(mapping);\n const read = yield* readFlow(mapping, claim.ceremony.flowId);\n\n if (\n read === undefined ||\n read.state !== \"Claimed\" ||\n read.claim === undefined ||\n read.claim.claimId !== claim.claimId ||\n read.claim.claimedAtMillis !== claim.claimedAtMillis ||\n read.claim.claimExpiresAtMillis !== claim.claimExpiresAtMillis ||\n ceremonyStorage.encode(read.ceremony) !== ceremonyStorage.encode(claim.ceremony)\n )\n return \"Rejected\" as const;\n\n if (outcome === \"Rejected\") yield* releaseRegistrationCustody(mapping, claim.ceremony);\n\n return yield* terminalFlow(mapping, read, outcome);\n});\n"],"mappings":";;;;;;;;;;;;;AAoCA,MAAM,UAAU,OAAO,GAAG,6BAA6B,CAAC,CAAC,WACvD,SACA,UACA,SACA;CACA,MAAM,QAAQ,OAAO;CAErB,UAAU,SAAS,QAAQ,SAAS,cAAc;CAElD,MAAM,UAAU,SAAS,SACvB,SAAS,QAAQ,QACjB,SAAS,QAAQ;CAEnB,MAAM,WAAW;GAAG,OAAO,WAAW,QAAQ;GAAW,OAAO,SAAS,SAAS;CAAO;CAEzF,MAAM,YAAY,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,OAAO,OAAO,QAAQ,GAAG;EAC/E,OAAO;EACP,MAAM;EACN,SAAS;CACX,CAAC,EAAA,CAAG,KAAK;CAET,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,MAAM,eAAe,UAAU,SAAS,QAAQ,MAAM,QAAQ,UAAU;CAExE,MAAM,QAAQ,OAAO,MAAM,KACzB,OAAO,OACP,MAAM,OAAO,OAAO,GAAG,OAAO,YAAY,aAAa,CAAC,GACxD;EAAE,OAAO;EAAG,SAAS,cAAc,MAAM;CAAE,CAC7C,EAAA,CAAG,KAAK;CAER,IACE,SAAS,KAAA,KACT,CAAC,OAAO,gBAAgB,KAAK,OAAO,MAAM,KAC1C,KAAK,OAAO,eAAe,gBAC3B,KAAK,OAAO,UAAU,SAAS,QAAQ,QACvC,KAAK,OAAO,gBAAgB,QAAQ,cACpC,KAAK,OAAO,mBAAmB,SAAS,OAAO,gBAE/C,OAAO;CACT,MAAM,gBAAgB,GAAG,yBAAyB,OAAO,MAAM,SAAS,KAAK,MAAM,MAAM,OAAO,OAAO,IAAI,GAAG,OAAO,iBAAiB,EAAE;CAExI,IAAI,EAAE,OAAO,MAAM,MAAM,aAAa,IAAI,OAAO;CAEjD,MAAM,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,OAAO,OAAO,QAAQ,GAAG;EAC1E,OAAO;EACP,SAAS,cAAc,MAAM;CAC/B,CAAC,EAAA,CAAG,KAAK;CAET,IACE,QAAQ,KAAA,KACR,IAAI,OAAO,eAAe,SAAS,aACnC,IAAI,OAAO,iBAAiB,QAAQ,eACpC,IAAI,OAAO,eAAe,gBAC1B,IAAI,OAAO,mBAAmB,KAAK,OAAO,kBAC1C,IAAI,OAAO,sBAAsB,gBAAgB,OAAO,QAAQ,KAChE,OAAO,IAAI,OAAO,yBAAyB,YAC3C,IAAI,YAAY,CAAC,CAAC,OAAO,IAAI,OAAO,oBAAoB,CAAC,CAAC,SAAS,WAClE,WAAW,CAAC,OAAO,eAAe,IAAI,OAAO,MAAM,GAEpD,OAAO;CACT,MAAM,YAAY,UAAU,OAAO,mBAAmB,OAAO;CAE7D,IACE,EAAE,OAAO,MAAM,MACb,GAAG,yBAAyB,OAAO,MAAM,SAAS,KAAK,MAAM,MAAM,OAAO,OAAO,GAAG,GAAG,SAAS,EAAE,EACpG,IAEA,OAAO;CAET,OAAO,CACL,eACA,GAAG,yBAAyB,OAAO,MAAM,SAAS,KAAK,MAAM,MAAM,OAAO,OAAO,GAAG,GAAG,SAAS,EAAE,EACpG;AACF,CAAC;AAED,MAAa,sBAAsB,OAAO,GAAG,6BAA6B,CAAC,CAAC,WAC1E,SACA,QACA;CACA,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,aAAa,QAAQ,UAAU,OAAO,KAAA;CACjD,MAAM,UAAU,OAAO,WAAW,OAAO;CAEzC,IAAI,YAAY,KAAA,GAAW,OAAO,KAAA;CAClC,OAAO,iBAAiB,OAAO;CAC/B,MAAM,QAAQ,QAAQ;CAEtB,MAAM,YAAY,OAAO,MAAM,KAC7B,MAAM,OACN,MAAM,MAAM,OAAO;GAAG,MAAM,WAAW,QAAQ;GAAW,MAAM,SAAS,OAAO;CAAO,CAAC,GACxF;EAAE,OAAO;EAAG,MAAM;EAAO,SAAS;CAAM,CAC1C,EAAA,CAAG,KAAK;CAER,IAAI,aAAa,KAAA,GAAW,OAAO,KAAA;CACnC,MAAM,WAAW,gBAAgB,OAAO,SAAS,MAAM,SAAS;CAEhE,IAAI,SAAS,YAAY,kBAAkB,CAAC,cAAc,UAAU,MAAM,GAAG,OAAO,KAAA;CACpF,MAAM,OAAO,OAAO,QAAQ,SAAS,UAAU,IAAI;CAEnD,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,MAAM,OAAO,OAAO,SAAS,SAAS,OAAO,MAAM;CAEnD,IACE,SAAS,KAAA,KACT,KAAK,UAAU,aACf,gBAAgB,OAAO,KAAK,QAAQ,MAAM,gBAAgB,OAAO,QAAQ,KACzE,CAAC,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAO,KACrD,EAAE,OAAO,MAAM,MAAM,cAAc,SAAS,QAAQ,CAAC,IAErD,OAAO,KAAA;CACT,MAAM,eAAe,KAAK,GAAG,MAAM,cAAc,SAAS,QAAQ,CAAC;CAEnE,OAAO,KAAK;AACd,CAAC;AAED,MAAa,oBAAoB,OAAO,GAAG,2BAA2B,CAAC,CAAC,WACtE,SACA,OAMA;CACA,MAAM,QAAQ,OAAO;CACrB,MAAM,UAAU,OAAO,WAAW,OAAO;CAEzC,IAAI,YAAY,KAAA,KAAa,MAAM,OAAO,aAAa,QAAQ,UAC7D,OAAO,EAAE,MAAM,WAAW;CAC5B,OAAO,cAAc,OAAO;CAC5B,OAAO,iBAAiB,OAAO;CAC/B,MAAM,OAAO,OAAO,QAAQ,SAAS,MAAM,UAAU,IAAI;CACzD,MAAM,OAAO,OAAO,SAAS,SAAS,MAAM,OAAO,MAAM;CAEzD,IAAI,SAAS,KAAA,KAAa,KAAK,UAAU,aAAa,CAAC,cAAc,KAAK,UAAU,MAAM,MAAM,GAC9F,OAAO,EAAE,MAAM,WAAW;CAC5B,UAAU,gBAAgB,OAAO,KAAK,QAAQ,MAAM,gBAAgB,OAAO,MAAM,QAAQ,CAAC;CAC1F,IACE,CAAC,QACD,CAAC,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAO,KACrD,cAAc,OAAO,OAAO,MAAM,cAAc,OAAO,MAAM,MAAM,KACnE,EAAE,OAAO,MAAM,MAAM,cAAc,SAAS,KAAK,QAAQ,CAAC,MAC1D,EAAE,OAAO,MAAM,MACb,mBACE,SACA,CAAC,KAAK,QAAQ,OAAO,GACrB,KAAK,UACL,KAAA,GACA,CAAC,GACD,OACA,KACF,CACF,IACA;EACA,IAAI,MAAM,OAAO,2BAA2B,SAAS,KAAK,QAAQ;EAClE,OAAO,aAAa,SAAS,MAAM,UAAU;EAE7C,OAAO,EAAE,MAAM,WAAW;CAC5B;CACA,OAAO,YAAY,SAAS,KAAK,UAAU,KAAK,QAAQ,KAAA,CAAS;CACjE,MAAM,kBAAkB,OAAO,MAAM,IAAI,QAAQ,KAAK;CAEtD,MAAM,QAAQ,oBAAoB,cAAc;EAC9C,UAAU,KAAK;EACf,SAAS,MAAM;EACf;EACA,sBAAsB,KAAK,IACzB,kBAAkB,KAAK,SAAS,qBAChC,KAAK,SAAS,eAChB;CACF,CAAC;CAED,MAAM,QAAQ,QAAQ;CAEtB,OAAO,MAAM,OACX,MAAM,OACN;GAAG,MAAM,WAAW,QAAQ;GAAW,MAAM,SAAS,KAAK,SAAS;CAAO,GAC3E;GACG,MAAM,QAAQ,MAAM,OAAO;GAC3B,MAAM,UAAU,MAAM;GACtB,MAAM,UAAU,MAAM;GACtB,MAAM,YAAY,QAAQ,MAAM,cAAc,MAAM,eAAe;GACnE,MAAM,iBAAiB,QAAQ,MAAM,cAAc,MAAM,oBAAoB;CAChF,CACF;CACA,OAAO,eAAe,SAAS,KAAK,UAAU,KAAA,CAAS;CACvD,OAAO,eAAe,SAAS,CAAC,KAAK,QAAQ,OAAO,GAAG,KAAK,UAAU,KAAA,CAAS;CAC/E,MAAM,eAAe,KAAK,GAAG,MAAM,cAAc,SAAS,KAAK,UAAU,KAAK,CAAC;CAE/E,OAAO;EAAE,MAAM;EAAW;CAAM;AAClC,CAAC;AAED,MAAa,qBAAqB,OAAO,GAAG,4BAA4B,CAAC,CAAC,WACxE,SACA,OACA,SACA;CACA,OAAO,WAAW,OAAO;CACzB,OAAO,cAAc,OAAO;CAC5B,OAAO,iBAAiB,OAAO;CAC/B,MAAM,OAAO,OAAO,SAAS,SAAS,MAAM,SAAS,MAAM;CAE3D,IACE,SAAS,KAAA,KACT,KAAK,UAAU,aACf,KAAK,UAAU,KAAA,KACf,KAAK,MAAM,YAAY,MAAM,WAC7B,KAAK,MAAM,oBAAoB,MAAM,mBACrC,KAAK,MAAM,yBAAyB,MAAM,wBAC1C,gBAAgB,OAAO,KAAK,QAAQ,MAAM,gBAAgB,OAAO,MAAM,QAAQ,GAE/E,OAAO;CAET,IAAI,YAAY,YAAY,OAAO,2BAA2B,SAAS,MAAM,QAAQ;CAErF,OAAO,OAAO,aAAa,SAAS,MAAM,OAAO;AACnD,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { CurrentPasskeyTransaction, ceremonyStorage, equal, handleKey, invariant } from "./passkey-state.mjs";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
//#region src/drizzle/passkey-registration-custody.ts
|
|
4
|
+
/** SQL-local writers have no external provisioning work. A definite terminal
|
|
5
|
+
* rejection can release only its exact still-reserved handle; ambiguous owners
|
|
6
|
+
* retain custody, and an accepted transaction no longer matches this reservation. */
|
|
7
|
+
const releaseRegistrationCustody = Effect.fn("passkey.releaseRegistrationCustody")(function* (mapping, ceremony) {
|
|
8
|
+
if (mapping.registration === void 0 || ceremony.context._tag !== "Registration") return;
|
|
9
|
+
const owner = yield* CurrentPasskeyTransaction;
|
|
10
|
+
const handle = mapping.handle;
|
|
11
|
+
const intent = mapping.intent;
|
|
12
|
+
const hashed = handleKey(ceremony.profile.rpId, ceremony.context.userHandle);
|
|
13
|
+
const held = (yield* owner.read(handle.table, equal(handle.table, { [handle.handleKey]: hashed }), { limit: 1 })).rows[0];
|
|
14
|
+
const row = (yield* owner.read(intent.table, equal(intent.table, {
|
|
15
|
+
[intent.moduleId]: mapping.moduleId,
|
|
16
|
+
[intent.flowId]: ceremony.flowId
|
|
17
|
+
}), { limit: 1 })).rows[0];
|
|
18
|
+
if (row === void 0 || !intent.isPendingState(row[intent.state])) return;
|
|
19
|
+
invariant(held !== void 0 && handle.isReservedState(held[handle.state]) && held[handle.reservationId] === row[intent.reservationId] && row[intent.handleKey] === hashed && row[intent.commandId] === ceremony.commandId && row[intent.ceremonySnapshot] === ceremonyStorage.encode(ceremony));
|
|
20
|
+
yield* owner.update(intent.table, {
|
|
21
|
+
[intent.moduleId]: mapping.moduleId,
|
|
22
|
+
[intent.flowId]: ceremony.flowId
|
|
23
|
+
}, {
|
|
24
|
+
[intent.state]: intent.rejectedState,
|
|
25
|
+
[intent.version]: owner.marker
|
|
26
|
+
});
|
|
27
|
+
yield* owner.remove(handle.table, { [handle.handleKey]: hashed });
|
|
28
|
+
});
|
|
29
|
+
/** Keep the command/flow tombstone after retention, without retaining the
|
|
30
|
+
* application registration payload or ceremony. Ambiguous custody is never scrubbed. */
|
|
31
|
+
const scrubRegistrationIntent = Effect.fn("passkey.scrubRegistrationIntent")(function* (mapping, ceremony) {
|
|
32
|
+
if (mapping.registration === void 0 || ceremony.context._tag !== "Registration") return;
|
|
33
|
+
const owner = yield* CurrentPasskeyTransaction;
|
|
34
|
+
const intent = mapping.intent;
|
|
35
|
+
const identity = {
|
|
36
|
+
[intent.moduleId]: mapping.moduleId,
|
|
37
|
+
[intent.flowId]: ceremony.flowId
|
|
38
|
+
};
|
|
39
|
+
const row = (yield* owner.read(intent.table, equal(intent.table, identity), { limit: 1 })).rows[0];
|
|
40
|
+
if (row === void 0) return;
|
|
41
|
+
invariant((row[intent.state] === intent.acceptedState || row[intent.state] === intent.rejectedState) && row[intent.commandId] === ceremony.commandId && row[intent.ceremonySnapshot] === ceremonyStorage.encode(ceremony));
|
|
42
|
+
yield* owner.update(intent.table, identity, {
|
|
43
|
+
[intent.applicationSnapshot]: "",
|
|
44
|
+
[intent.ceremonySnapshot]: "",
|
|
45
|
+
[intent.version]: owner.marker
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//#endregion
|
|
49
|
+
export { releaseRegistrationCustody, scrubRegistrationIntent };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=passkey-registration-custody.mjs.map
|