@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,124 @@
|
|
|
1
|
+
import { AssuranceRequired, AuthenticationRequired, InvalidOperationInput, OperationBoundaryError, OperationForbidden, OperationPrivateOutputUnsupported } from "./errors.mjs";
|
|
2
|
+
import { AuthInvocation } from "./context.mjs";
|
|
3
|
+
import { AuthRevealCommandCollector, AuthRevealKind } from "./reveals.mjs";
|
|
4
|
+
import { AuthCredentialCommandCollector, AuthCredentialCommandSink, AuthOperationResult, AuthRevealCommandCollectorService } from "./credentials.mjs";
|
|
5
|
+
import { Effect, Layer, Schema, Types } from "effect";
|
|
6
|
+
import { Rpc, RpcGroup } from "effect/unstable/rpc";
|
|
7
|
+
//#region src/operations/operation.d.ts
|
|
8
|
+
/** Equal operation names only satisfy handlers with the same decoded contract. */
|
|
9
|
+
interface OperationHandler<Tag extends string, Payload, Success, Error> {
|
|
10
|
+
readonly _tag: "effect-auth/OperationHandler";
|
|
11
|
+
readonly operation: Tag;
|
|
12
|
+
readonly contract: Types.Invariant<readonly [Payload, Success, Error]>;
|
|
13
|
+
}
|
|
14
|
+
type OperationAccess = "any" | "authenticated" | "system";
|
|
15
|
+
type OperationExposure = "public" | "internal";
|
|
16
|
+
/** Metadata documents the handler's durable guarantee; it does not implement deduplication. */
|
|
17
|
+
type OperationReplay = "read-only" | "idempotent" | "single-use" | "non-idempotent";
|
|
18
|
+
interface OperationOptions<Payload extends Schema.Top, Success extends Schema.Top, Error extends Schema.Top, PolicyServices> {
|
|
19
|
+
readonly payload: Payload;
|
|
20
|
+
readonly success: Success;
|
|
21
|
+
readonly error: Error;
|
|
22
|
+
readonly access: OperationAccess;
|
|
23
|
+
readonly exposure?: OperationExposure;
|
|
24
|
+
readonly replay: OperationReplay;
|
|
25
|
+
readonly authorize?: (payload: Payload["Type"], context: AuthInvocation) => Effect.Effect<void, Error["Type"] | OperationBoundaryError, PolicyServices>;
|
|
26
|
+
}
|
|
27
|
+
type OptionProperty<Options, Key extends PropertyKey> = Key extends keyof Options ? Options[Key] : never;
|
|
28
|
+
type CredentialRequirement<Credentials> = true extends Credentials ? AuthCredentialCommandCollector : never;
|
|
29
|
+
type RevealValue<Reveals> = Exclude<Reveals, undefined>;
|
|
30
|
+
type RevealRequirement<Reveals> = [RevealValue<Reveals>] extends [never] ? never : RevealValue<Reveals> extends ReadonlyArray<AuthRevealKind> ? AuthRevealCommandCollectorService : never;
|
|
31
|
+
declare const credentialCollectorProvenance: unique symbol;
|
|
32
|
+
declare const revealCollectorProvenance: unique symbol;
|
|
33
|
+
interface CredentialCollectorProvenance {
|
|
34
|
+
readonly [credentialCollectorProvenance]: never;
|
|
35
|
+
}
|
|
36
|
+
interface RevealCollectorProvenance {
|
|
37
|
+
readonly [revealCollectorProvenance]: never;
|
|
38
|
+
}
|
|
39
|
+
type PrivateCollectorProvenance = CredentialCollectorProvenance | RevealCollectorProvenance;
|
|
40
|
+
type PrivateRequirements<Credentials, Reveals> = CredentialRequirement<Credentials> | RevealRequirement<Reveals>;
|
|
41
|
+
type ResolvedCollectorServices<Credentials, Reveals> = ([Credentials] extends [true] ? CredentialRequirement<Credentials> : never) | ([Reveals] extends [ReadonlyArray<AuthRevealKind>] ? RevealRequirement<Reveals> : never);
|
|
42
|
+
type PrivateResolvedCall<Credentials, Reveals> = {
|
|
43
|
+
readonly invocation: AuthInvocation;
|
|
44
|
+
} & ([CredentialRequirement<Credentials>] extends [never] ? {} : {
|
|
45
|
+
readonly credentialCommandSink: AuthCredentialCommandSink;
|
|
46
|
+
}) & ([RevealRequirement<Reveals>] extends [never] ? {} : {
|
|
47
|
+
readonly revealCommandCollector: AuthRevealCommandCollector;
|
|
48
|
+
});
|
|
49
|
+
type ResolverResult<Credentials, Reveals> = [PrivateRequirements<Credentials, Reveals>] extends [never] ? AuthInvocation : PrivateResolvedCall<Credentials, Reveals>;
|
|
50
|
+
type WithPrivateRequirements<Method, Credentials, Reveals> = Method extends ((...args: infer Args) => Effect.Effect<infer A, infer E, infer R>) ? (...args: Args) => Effect.Effect<A, E, Exclude<R, PrivateCollectorProvenance> | PrivateRequirements<Credentials, Reveals>> : never;
|
|
51
|
+
/**
|
|
52
|
+
* Define a unary auth operation once. `authorize` runs after validation and access
|
|
53
|
+
* checks, before the logical handler, on all supported invocation paths.
|
|
54
|
+
*/
|
|
55
|
+
declare const buildOperation: <const Tag extends string, Payload extends Schema.Top, Success extends Schema.Top, Error extends Schema.Top, PolicyServices = never, const Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {
|
|
56
|
+
/** Require private credential acceptance before the logical handler can mutate. */
|
|
57
|
+
readonly credentials?: true;
|
|
58
|
+
/** Required even when an exact-command replay returns only metadata. */
|
|
59
|
+
readonly reveals?: ReadonlyArray<AuthRevealKind>;
|
|
60
|
+
} = OperationOptions<Payload, Success, Error, PolicyServices>>(tag: Tag, options: OperationOptions<Payload, Success, Error, PolicyServices> & Options) => Omit<Readonly<{
|
|
61
|
+
rpc: Rpc.Rpc<Tag, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Schema.Union<readonly [Error, Schema.Union<readonly [typeof InvalidOperationInput, typeof AuthenticationRequired, typeof OperationForbidden, typeof AssuranceRequired, typeof OperationPrivateOutputUnsupported]>]>, never, never>;
|
|
62
|
+
access: OperationAccess;
|
|
63
|
+
exposure: OperationExposure;
|
|
64
|
+
replay: OperationReplay;
|
|
65
|
+
credentials: boolean;
|
|
66
|
+
reveals: readonly ("recovery-codes" | "totp-enrollment")[];
|
|
67
|
+
handlerLayer: <R>(handler: (payload: Payload["Type"], context: AuthInvocation) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], R>) => Layer.Layer<OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]>, never, Exclude<R, import("effect/Scope").Scope>>;
|
|
68
|
+
credentialHandlerLayer: <R>(handler: (payload: Payload["Type"], context: AuthInvocation) => Effect.Effect<AuthOperationResult<Success["Type"]>, AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], R>) => Layer.Layer<OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]>, never, Exclude<R, import("effect/Scope").Scope>>;
|
|
69
|
+
privateHandlerLayer: <R>(handler: (payload: Payload["Type"], context: AuthInvocation) => Effect.Effect<AuthOperationResult<Success["Type"]>, AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], R>) => Layer.Layer<OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]>, never, Exclude<R, import("effect/Scope").Scope>>;
|
|
70
|
+
invoke: (context: AuthInvocation, input: Payload["Encoded"]) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance | Payload["DecodingServices"]>;
|
|
71
|
+
invokeUnknown: (context: AuthInvocation, input: unknown) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance | Payload["DecodingServices"]>;
|
|
72
|
+
invokeDecoded: (context: AuthInvocation, input: Payload["Type"]) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance>;
|
|
73
|
+
rpcHandler: <R>(resolveContext: (options: Parameters<Rpc.ToHandlerFn<Rpc.Rpc<Tag, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Schema.Union<readonly [Error, Schema.Union<readonly [typeof InvalidOperationInput, typeof AuthenticationRequired, typeof OperationForbidden, typeof AssuranceRequired, typeof OperationPrivateOutputUnsupported]>]>, never, never>, any>>[1]) => Effect.Effect<ResolverResult<OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>, AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], R>) => (input: Payload["Type"], transport: Parameters<Rpc.ToHandlerFn<Rpc.Rpc<Tag, Payload extends Schema.Struct.Fields ? Schema.Struct<Payload> : Payload, Success, Schema.Union<readonly [Error, Schema.Union<readonly [typeof InvalidOperationInput, typeof AuthenticationRequired, typeof OperationForbidden, typeof AssuranceRequired, typeof OperationPrivateOutputUnsupported]>]>, never, never>, any>>[1]) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], R | Exclude<PolicyServices, PrivateCollectorProvenance | ResolvedCollectorServices<OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>> | Exclude<OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]>, PrivateCollectorProvenance | ResolvedCollectorServices<OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>>>;
|
|
74
|
+
}>, "invoke" | "invokeUnknown" | "invokeDecoded"> & {
|
|
75
|
+
readonly invoke: WithPrivateRequirements<(context: AuthInvocation, input: Payload["Encoded"]) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance | Payload["DecodingServices"]>, OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>;
|
|
76
|
+
readonly invokeUnknown: WithPrivateRequirements<(context: AuthInvocation, input: unknown) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance | Payload["DecodingServices"]>, OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>;
|
|
77
|
+
readonly invokeDecoded: WithPrivateRequirements<(context: AuthInvocation, input: Payload["Type"]) => Effect.Effect<Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"], PolicyServices | CredentialCollectorProvenance | OperationHandler<Tag, Payload["Type"], Success["Type"], AssuranceRequired | AuthenticationRequired | InvalidOperationInput | OperationForbidden | OperationPrivateOutputUnsupported | Error["Type"]> | RevealCollectorProvenance>, OptionProperty<Options, "credentials">, OptionProperty<Options, "reveals">>;
|
|
78
|
+
};
|
|
79
|
+
/** Named operation contract keeps inferred consumer declarations portable and compact. */
|
|
80
|
+
type OperationImplementation<Tag extends string, Payload extends Schema.Top, Success extends Schema.Top, Error extends Schema.Top, PolicyServices = never, Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {
|
|
81
|
+
/** Require private credential acceptance before the logical handler can mutate. */
|
|
82
|
+
readonly credentials?: true;
|
|
83
|
+
/** Required even when an exact-command replay returns only metadata. */
|
|
84
|
+
readonly reveals?: ReadonlyArray<AuthRevealKind>;
|
|
85
|
+
} = OperationOptions<Payload, Success, Error, PolicyServices>> = ReturnType<typeof buildOperation<Tag, Payload, Success, Error, PolicyServices, Options>>;
|
|
86
|
+
interface AuthOperation<Tag extends string, Payload extends Schema.Top, Success extends Schema.Top, Error extends Schema.Top, PolicyServices = never, Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {
|
|
87
|
+
/** Require private credential acceptance before the logical handler can mutate. */
|
|
88
|
+
readonly credentials?: true;
|
|
89
|
+
/** Required even when an exact-command replay returns only metadata. */
|
|
90
|
+
readonly reveals?: ReadonlyArray<AuthRevealKind>;
|
|
91
|
+
} = OperationOptions<Payload, Success, Error, PolicyServices>> {
|
|
92
|
+
readonly rpc: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["rpc"];
|
|
93
|
+
readonly access: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["access"];
|
|
94
|
+
readonly exposure: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["exposure"];
|
|
95
|
+
readonly replay: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["replay"];
|
|
96
|
+
readonly credentials: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["credentials"];
|
|
97
|
+
readonly reveals: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["reveals"];
|
|
98
|
+
readonly handlerLayer: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["handlerLayer"];
|
|
99
|
+
readonly credentialHandlerLayer: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["credentialHandlerLayer"];
|
|
100
|
+
readonly privateHandlerLayer: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["privateHandlerLayer"];
|
|
101
|
+
readonly invoke: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["invoke"];
|
|
102
|
+
readonly invokeUnknown: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["invokeUnknown"];
|
|
103
|
+
readonly invokeDecoded: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["invokeDecoded"];
|
|
104
|
+
readonly rpcHandler: OperationImplementation<Tag, Payload, Success, Error, PolicyServices, Options>["rpcHandler"];
|
|
105
|
+
}
|
|
106
|
+
declare const makeOperation: <const Tag extends string, Payload extends Schema.Top, Success extends Schema.Top, Error extends Schema.Top, PolicyServices = never, const Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {
|
|
107
|
+
/** Require private credential acceptance before the logical handler can mutate. */
|
|
108
|
+
readonly credentials?: true;
|
|
109
|
+
/** Required even when an exact-command replay returns only metadata. */
|
|
110
|
+
readonly reveals?: ReadonlyArray<AuthRevealKind>;
|
|
111
|
+
} = OperationOptions<Payload, Success, Error, PolicyServices>>(tag: Tag, options: OperationOptions<Payload, Success, Error, PolicyServices> & Options) => AuthOperation<Tag, Payload, Success, Error, PolicyServices, Options>;
|
|
112
|
+
interface AnyOperation {
|
|
113
|
+
readonly rpc: Rpc.Any;
|
|
114
|
+
readonly exposure: OperationExposure;
|
|
115
|
+
}
|
|
116
|
+
/** Compose available contracts independently of their network exposure. */
|
|
117
|
+
declare const operationGroup: <const Operations extends ReadonlyArray<AnyOperation>>(...operations: Operations) => RpcGroup.RpcGroup<Operations[number]["rpc"]>;
|
|
118
|
+
/** Explicitly select network operations; internal operations require an additional opt-in. */
|
|
119
|
+
declare const remoteGroup: <const Operations extends ReadonlyArray<AnyOperation>>(operations: Operations, options?: {
|
|
120
|
+
readonly allowInternal?: true;
|
|
121
|
+
}) => RpcGroup.RpcGroup<Operations[number]["rpc"]>;
|
|
122
|
+
//#endregion
|
|
123
|
+
export { AnyOperation, AuthOperation, CredentialCollectorProvenance, OperationAccess, OperationExposure, OperationHandler, OperationReplay, RevealCollectorProvenance, makeOperation, operationGroup, remoteGroup };
|
|
124
|
+
//# sourceMappingURL=operation.d.mts.map
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { reportAuthFailure } from "../internal/diagnostics.mjs";
|
|
2
|
+
import { AuthCredentialCommandCollector, AuthRevealCommandCollectorService, snapshotCredentialCommands, validateCredentialCommands } from "./credentials.mjs";
|
|
3
|
+
import { AuthenticationRequired, InvalidOperationInput, OperationBoundaryError, OperationConfigurationError, OperationForbidden, OperationPrivateOutputUnsupported } from "./errors.mjs";
|
|
4
|
+
import { snapshotRevealCommands, snapshotRevealKinds } from "./reveals.mjs";
|
|
5
|
+
import { Cause, Context, DateTime, Effect, Layer, Predicate, Schema, SchemaGetter } from "effect";
|
|
6
|
+
import { Rpc, RpcGroup } from "effect/unstable/rpc";
|
|
7
|
+
//#region src/operations/operation.ts
|
|
8
|
+
const operationDefect = Schema.Json.pipe(Schema.decodeTo(Schema.Unknown, {
|
|
9
|
+
decode: SchemaGetter.transform(() => new globalThis.Error("Auth operation failed")),
|
|
10
|
+
encode: SchemaGetter.transform(() => ({ message: "Auth operation failed" }))
|
|
11
|
+
}));
|
|
12
|
+
/** Identifies an already reported defect without retaining its private cause. */
|
|
13
|
+
var ReportedOperationDefect = class extends globalThis.Error {
|
|
14
|
+
constructor() {
|
|
15
|
+
super("Auth operation failed");
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const operationFailure = Effect.fn("AuthOperation.failure")(function* (stage, cause) {
|
|
19
|
+
if (Cause.hasInterruptsOnly(cause)) return yield* Effect.failCause(Cause.fromReasons(cause.reasons.filter(Cause.isInterruptReason)));
|
|
20
|
+
const unreported = Cause.fromReasons(cause.reasons.filter((reason) => !(Cause.isDieReason(reason) && reason.defect instanceof ReportedOperationDefect)));
|
|
21
|
+
yield* reportAuthFailure(stage, unreported);
|
|
22
|
+
return yield* Effect.die(new ReportedOperationDefect());
|
|
23
|
+
});
|
|
24
|
+
const sanitizeOperationDefects = (stage) => (effect) => effect.pipe(Effect.catchCause((cause) => Cause.hasDies(cause) ? operationFailure(stage, cause) : Effect.failCause(cause)));
|
|
25
|
+
/** Reconstruct declared fields and class instances without replaying wire transformations. */
|
|
26
|
+
const projectType = (schema, stage) => {
|
|
27
|
+
const codec = Schema.toCodecIso(schema);
|
|
28
|
+
const encode = Schema.encodeEffect(codec);
|
|
29
|
+
const decode = Schema.decodeEffect(codec);
|
|
30
|
+
return (value) => encode(value).pipe(Effect.flatMap(decode), Effect.catchCause((cause) => operationFailure(stage, cause)));
|
|
31
|
+
};
|
|
32
|
+
const credentialCollector = AuthCredentialCommandCollector;
|
|
33
|
+
const revealCollector = AuthRevealCommandCollectorService;
|
|
34
|
+
/**
|
|
35
|
+
* Define a unary auth operation once. `authorize` runs after validation and access
|
|
36
|
+
* checks, before the logical handler, on all supported invocation paths.
|
|
37
|
+
*/
|
|
38
|
+
const buildOperation = (tag, options) => {
|
|
39
|
+
options = Object.freeze({ ...options });
|
|
40
|
+
const reveals = (() => {
|
|
41
|
+
try {
|
|
42
|
+
if (options.reveals === void 0) return Object.freeze([]);
|
|
43
|
+
const captured = snapshotRevealKinds(options.reveals);
|
|
44
|
+
if (captured.length === 0) throw new globalThis.Error();
|
|
45
|
+
return captured;
|
|
46
|
+
} catch {
|
|
47
|
+
throw OperationConfigurationError.make({
|
|
48
|
+
reason: "reveal-configuration",
|
|
49
|
+
operation: tag
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
})();
|
|
53
|
+
const hasReveals = reveals.length > 0;
|
|
54
|
+
const rpc = Rpc.make(tag, {
|
|
55
|
+
payload: options.payload,
|
|
56
|
+
success: options.success,
|
|
57
|
+
error: Schema.Union([options.error, OperationBoundaryError]),
|
|
58
|
+
defect: operationDefect
|
|
59
|
+
});
|
|
60
|
+
const HandlerService = Context.Service(`effect-auth/operations/${tag}`);
|
|
61
|
+
const decode = Schema.decodeEffect(options.payload);
|
|
62
|
+
const decodeUnknown = Schema.decodeUnknownEffect(options.payload);
|
|
63
|
+
const validate = Schema.decodeEffect(Schema.toType(options.payload));
|
|
64
|
+
const projectSuccess = projectType(options.success, "success-projection");
|
|
65
|
+
const projectFailure = projectType(rpc.errorSchema, "error-projection");
|
|
66
|
+
const fail = (error) => projectFailure(error).pipe(Effect.flatMap(Effect.fail));
|
|
67
|
+
const execute = Effect.fn(`AuthOperation.${tag}`)(function* (context, payload) {
|
|
68
|
+
if (options.access === "authenticated" && context._tag !== "Authenticated") return yield* AuthenticationRequired.make({});
|
|
69
|
+
if (options.access === "system" && context._tag !== "System") return yield* OperationForbidden.make({});
|
|
70
|
+
let sink;
|
|
71
|
+
const reveal = hasReveals ? yield* revealCollector : void 0;
|
|
72
|
+
if (hasReveals && options.credentials === true) sink = yield* credentialCollector;
|
|
73
|
+
const collectors = hasReveals ? yield* Effect.try({
|
|
74
|
+
try: () => {
|
|
75
|
+
const collector = reveal;
|
|
76
|
+
const accept = collector?.accept;
|
|
77
|
+
if (collector === void 0 || !Predicate.isFunction(accept) || options.credentials === true && !Predicate.isFunction(sink)) throw new globalThis.Error();
|
|
78
|
+
const supported = snapshotRevealKinds(collector.supportedKinds);
|
|
79
|
+
if (!reveals.every((kind) => supported.includes(kind))) throw new globalThis.Error();
|
|
80
|
+
return {
|
|
81
|
+
sink,
|
|
82
|
+
accept
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
catch: () => OperationPrivateOutputUnsupported.make({})
|
|
86
|
+
}) : void 0;
|
|
87
|
+
if (options.authorize !== void 0) yield* options.authorize(payload, context);
|
|
88
|
+
if (!hasReveals && options.credentials === true) sink = yield* credentialCollector;
|
|
89
|
+
if (options.credentials === true && !Predicate.isFunction(sink)) return yield* Effect.die(new globalThis.Error("Auth credential collector required"));
|
|
90
|
+
const result = yield* (yield* HandlerService).run(payload, context);
|
|
91
|
+
if (collectors !== void 0) {
|
|
92
|
+
const staged = yield* Effect.sync(() => {
|
|
93
|
+
const value = result.value;
|
|
94
|
+
const commands = snapshotCredentialCommands(result.credentialCommands);
|
|
95
|
+
const privateCommands = snapshotRevealCommands(result.revealCommands, reveals);
|
|
96
|
+
if (commands.length > 0 && options.credentials !== true) throw new globalThis.Error("Auth operation failed");
|
|
97
|
+
return {
|
|
98
|
+
value,
|
|
99
|
+
commands,
|
|
100
|
+
privateCommands
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
const value = yield* projectSuccess(staged.value);
|
|
104
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
105
|
+
if (staged.privateCommands.some((command) => command.expiresAtMillis <= now || command.expiresAtMillis > now + 3e5)) return yield* Effect.die(new globalThis.Error("Auth operation failed"));
|
|
106
|
+
if (staged.commands.length > 0) {
|
|
107
|
+
if (!Predicate.isFunction(sink)) return yield* Effect.die(new globalThis.Error("Auth operation failed"));
|
|
108
|
+
yield* sink(staged.commands);
|
|
109
|
+
}
|
|
110
|
+
if (staged.privateCommands.length > 0) {
|
|
111
|
+
const accept = collectors.accept;
|
|
112
|
+
yield* accept(staged.privateCommands);
|
|
113
|
+
}
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
const value = yield* projectSuccess(result.value);
|
|
117
|
+
const commands = yield* validateCredentialCommands(result.credentialCommands);
|
|
118
|
+
yield* Effect.sync(() => snapshotRevealCommands(result.revealCommands, reveals));
|
|
119
|
+
if (commands.length > 0) {
|
|
120
|
+
if (!Predicate.isFunction(sink)) return yield* Effect.die(new globalThis.Error("Auth credential collector required"));
|
|
121
|
+
yield* sink(commands);
|
|
122
|
+
}
|
|
123
|
+
return value;
|
|
124
|
+
}, Effect.catch(fail), (effect) => hasReveals ? effect.pipe(sanitizeOperationDefects("private-output")) : effect);
|
|
125
|
+
const invoke = Effect.fn(`AuthOperation.${tag}.invoke`)(function* (context, input) {
|
|
126
|
+
const payload = yield* decode(input).pipe(Effect.mapError(() => InvalidOperationInput.make({})));
|
|
127
|
+
return yield* execute(context, payload);
|
|
128
|
+
}, sanitizeOperationDefects("local"));
|
|
129
|
+
const invokeUnknown = Effect.fn(`AuthOperation.${tag}.invokeUnknown`)(function* (context, input) {
|
|
130
|
+
const payload = yield* decodeUnknown(input).pipe(Effect.mapError(() => InvalidOperationInput.make({})));
|
|
131
|
+
return yield* execute(context, payload);
|
|
132
|
+
}, sanitizeOperationDefects("local"));
|
|
133
|
+
/** Validate decoded input without replaying its wire transformations. */
|
|
134
|
+
const invokeDecoded = Effect.fn(`AuthOperation.${tag}.invokeDecoded`)(function* (context, input) {
|
|
135
|
+
const payload = yield* validate(input).pipe(Effect.mapError(() => InvalidOperationInput.make({})));
|
|
136
|
+
return yield* execute(context, payload);
|
|
137
|
+
}, sanitizeOperationDefects("local"));
|
|
138
|
+
/** Capture capabilities at Layer construction, with the caller still an explicit argument. */
|
|
139
|
+
const installHandler = (handler) => Layer.effect(HandlerService, Effect.gen(function* () {
|
|
140
|
+
const services = yield* Effect.context();
|
|
141
|
+
return { run: (payload, context) => handler(payload, context).pipe(Effect.provide(services)) };
|
|
142
|
+
}));
|
|
143
|
+
const credentialHandlerLayer = (handler) => {
|
|
144
|
+
if (options.credentials !== true) throw OperationConfigurationError.make({
|
|
145
|
+
reason: "credential-handler",
|
|
146
|
+
operation: tag
|
|
147
|
+
});
|
|
148
|
+
return installHandler(handler);
|
|
149
|
+
};
|
|
150
|
+
const privateHandlerLayer = (handler) => {
|
|
151
|
+
if (options.credentials !== true && !hasReveals) throw OperationConfigurationError.make({
|
|
152
|
+
reason: "private-handler",
|
|
153
|
+
operation: tag
|
|
154
|
+
});
|
|
155
|
+
return installHandler(handler);
|
|
156
|
+
};
|
|
157
|
+
const handlerLayer = (handler) => installHandler((payload, context) => handler(payload, context).pipe(Effect.map((value) => ({
|
|
158
|
+
value,
|
|
159
|
+
credentialCommands: []
|
|
160
|
+
}))));
|
|
161
|
+
function provideResolvedCollectors(effect, call) {
|
|
162
|
+
if (hasReveals) {
|
|
163
|
+
const withReveal = effect.pipe(Effect.provideService(AuthRevealCommandCollectorService, call?.revealCommandCollector));
|
|
164
|
+
if (options.credentials === true) return withReveal.pipe(Effect.provideService(AuthCredentialCommandCollector, call?.credentialCommandSink));
|
|
165
|
+
return withReveal;
|
|
166
|
+
}
|
|
167
|
+
if (options.credentials === true) return effect.pipe(Effect.provideService(AuthCredentialCommandCollector, call?.credentialCommandSink));
|
|
168
|
+
return effect;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* RPC has decoded the payload already. Validate its Type without replaying its
|
|
172
|
+
* transformations. The resolver runs once for each call, outside the wire payload.
|
|
173
|
+
*/
|
|
174
|
+
const rpcHandler = (resolveContext) => Effect.fn(`AuthOperation.${tag}.rpc`)(function* (input, transport) {
|
|
175
|
+
const resolved = yield* resolveContext(transport).pipe(Effect.catch(fail));
|
|
176
|
+
const call = "invocation" in resolved ? resolved : void 0;
|
|
177
|
+
const context = call === void 0 ? resolved : call.invocation;
|
|
178
|
+
return yield* provideResolvedCollectors(invokeDecoded(context, input), call);
|
|
179
|
+
}, sanitizeOperationDefects("rpc"));
|
|
180
|
+
return Object.freeze({
|
|
181
|
+
rpc,
|
|
182
|
+
access: options.access,
|
|
183
|
+
exposure: options.exposure ?? "internal",
|
|
184
|
+
replay: options.replay,
|
|
185
|
+
credentials: options.credentials === true,
|
|
186
|
+
reveals,
|
|
187
|
+
handlerLayer,
|
|
188
|
+
credentialHandlerLayer,
|
|
189
|
+
privateHandlerLayer,
|
|
190
|
+
invoke,
|
|
191
|
+
invokeUnknown,
|
|
192
|
+
invokeDecoded,
|
|
193
|
+
rpcHandler
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
const makeOperation = buildOperation;
|
|
197
|
+
/** Compose available contracts independently of their network exposure. */
|
|
198
|
+
const operationGroup = (...operations) => {
|
|
199
|
+
const tags = /* @__PURE__ */ new Set();
|
|
200
|
+
for (const operation of operations) {
|
|
201
|
+
if (tags.has(operation.rpc._tag)) throw OperationConfigurationError.make({
|
|
202
|
+
reason: "duplicate-operation",
|
|
203
|
+
operation: operation.rpc._tag
|
|
204
|
+
});
|
|
205
|
+
tags.add(operation.rpc._tag);
|
|
206
|
+
}
|
|
207
|
+
return RpcGroup.make(...operations.map((operation) => operation.rpc));
|
|
208
|
+
};
|
|
209
|
+
/** Explicitly select network operations; internal operations require an additional opt-in. */
|
|
210
|
+
const remoteGroup = (operations, options) => {
|
|
211
|
+
for (const operation of operations) if (operation.exposure === "internal" && options?.allowInternal !== true) throw OperationConfigurationError.make({
|
|
212
|
+
reason: "internal-exposure",
|
|
213
|
+
operation: operation.rpc._tag
|
|
214
|
+
});
|
|
215
|
+
return operationGroup(...operations);
|
|
216
|
+
};
|
|
217
|
+
//#endregion
|
|
218
|
+
export { makeOperation, operationGroup, remoteGroup };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=operation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.mjs","names":[],"sources":["../../src/operations/operation.ts"],"sourcesContent":["import {\n Cause,\n Context,\n DateTime,\n Effect,\n Layer,\n Predicate,\n Schema,\n SchemaGetter,\n type Types,\n} from \"effect\";\nimport { Rpc, RpcGroup } from \"effect/unstable/rpc\";\n\nimport { reportAuthFailure } from \"../internal/diagnostics\";\nimport type { AuthInvocation } from \"./context\";\nimport {\n AuthCredentialCommandCollector,\n type AuthCredentialCommandSink,\n type AuthOperationResult,\n AuthRevealCommandCollectorService,\n snapshotCredentialCommands,\n validateCredentialCommands,\n} from \"./credentials\";\nimport {\n InvalidOperationInput,\n OperationBoundaryError,\n OperationForbidden,\n AuthenticationRequired,\n OperationConfigurationError,\n OperationPrivateOutputUnsupported,\n} from \"./errors\";\nimport {\n type AuthRevealCommandCollector,\n type AuthRevealKind,\n snapshotRevealCommands,\n snapshotRevealKinds,\n} from \"./reveals\";\n\nconst operationDefect = Schema.Json.pipe(\n Schema.decodeTo(Schema.Unknown, {\n decode: SchemaGetter.transform(() => new globalThis.Error(\"Auth operation failed\")),\n encode: SchemaGetter.transform(() => ({ message: \"Auth operation failed\" })),\n }),\n);\n\n/** Identifies an already reported defect without retaining its private cause. */\nclass ReportedOperationDefect extends globalThis.Error {\n constructor() {\n super(\"Auth operation failed\");\n }\n}\n\nconst operationFailure = Effect.fn(\"AuthOperation.failure\")(function* <E>(\n stage: \"local\" | \"rpc\" | \"success-projection\" | \"error-projection\" | \"private-output\",\n cause: Cause.Cause<E>,\n): Effect.fn.Return<never> {\n if (Cause.hasInterruptsOnly(cause)) {\n return yield* Effect.failCause(\n Cause.fromReasons<never>(cause.reasons.filter(Cause.isInterruptReason)),\n );\n }\n\n const unreported = Cause.fromReasons(\n cause.reasons.filter(\n (reason) => !(Cause.isDieReason(reason) && reason.defect instanceof ReportedOperationDefect),\n ),\n );\n\n yield* reportAuthFailure(stage, unreported);\n\n return yield* Effect.die(new ReportedOperationDefect());\n});\n\nconst sanitizeOperationDefects =\n (stage: \"local\" | \"rpc\" | \"private-output\") =>\n <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n effect.pipe(\n Effect.catchCause((cause) =>\n Cause.hasDies(cause) ? operationFailure(stage, cause) : Effect.failCause(cause),\n ),\n );\n\n/** Reconstruct declared fields and class instances without replaying wire transformations. */\nconst projectType = <S extends Schema.Top>(\n schema: S,\n stage: \"success-projection\" | \"error-projection\",\n) => {\n const codec = Schema.toCodecIso(schema);\n const encode = Schema.encodeEffect(codec);\n const decode = Schema.decodeEffect(codec);\n\n return (value: S[\"Type\"]) =>\n encode(value).pipe(\n Effect.flatMap(decode),\n Effect.catchCause((cause) => operationFailure(stage, cause)),\n );\n};\n\n/** Equal operation names only satisfy handlers with the same decoded contract. */\nexport interface OperationHandler<Tag extends string, Payload, Success, Error> {\n readonly _tag: \"effect-auth/OperationHandler\";\n readonly operation: Tag;\n readonly contract: Types.Invariant<readonly [Payload, Success, Error]>;\n}\n\nexport type OperationAccess = \"any\" | \"authenticated\" | \"system\";\nexport type OperationExposure = \"public\" | \"internal\";\n/** Metadata documents the handler's durable guarantee; it does not implement deduplication. */\nexport type OperationReplay = \"read-only\" | \"idempotent\" | \"single-use\" | \"non-idempotent\";\n\ninterface OperationOptions<\n Payload extends Schema.Top,\n Success extends Schema.Top,\n Error extends Schema.Top,\n PolicyServices,\n> {\n readonly payload: Payload;\n readonly success: Success;\n readonly error: Error;\n readonly access: OperationAccess;\n readonly exposure?: OperationExposure;\n readonly replay: OperationReplay;\n readonly authorize?: (\n payload: Payload[\"Type\"],\n context: AuthInvocation,\n ) => Effect.Effect<void, Error[\"Type\"] | OperationBoundaryError, PolicyServices>;\n}\n\ntype OptionProperty<Options, Key extends PropertyKey> = Key extends keyof Options\n ? Options[Key]\n : never;\n\ntype CredentialRequirement<Credentials> = true extends Credentials\n ? AuthCredentialCommandCollector\n : never;\ntype RevealValue<Reveals> = Exclude<Reveals, undefined>;\ntype RevealRequirement<Reveals> = [RevealValue<Reveals>] extends [never]\n ? never\n : RevealValue<Reveals> extends ReadonlyArray<AuthRevealKind>\n ? AuthRevealCommandCollectorService\n : never;\ndeclare const credentialCollectorProvenance: unique symbol;\ndeclare const revealCollectorProvenance: unique symbol;\n\nexport interface CredentialCollectorProvenance {\n readonly [credentialCollectorProvenance]: never;\n}\n\nexport interface RevealCollectorProvenance {\n readonly [revealCollectorProvenance]: never;\n}\n\ntype PrivateCollectorProvenance = CredentialCollectorProvenance | RevealCollectorProvenance;\n\n// These casts retain the public service identities at runtime while distinguishing\n// their operation-owned requirements from identical requirements in policy/schema code.\nconst credentialCollector = AuthCredentialCommandCollector as unknown as Effect.Effect<\n AuthCredentialCommandSink,\n never,\n CredentialCollectorProvenance\n>;\n\nconst revealCollector = AuthRevealCommandCollectorService as unknown as Effect.Effect<\n AuthRevealCommandCollector,\n never,\n RevealCollectorProvenance\n>;\n\ntype PrivateRequirements<Credentials, Reveals> =\n | CredentialRequirement<Credentials>\n | RevealRequirement<Reveals>;\ntype ResolvedCollectorServices<Credentials, Reveals> =\n | ([Credentials] extends [true] ? CredentialRequirement<Credentials> : never)\n | ([Reveals] extends [ReadonlyArray<AuthRevealKind>] ? RevealRequirement<Reveals> : never);\ntype PrivateResolvedCall<Credentials, Reveals> = {\n readonly invocation: AuthInvocation;\n} & ([CredentialRequirement<Credentials>] extends [never]\n ? {}\n : { readonly credentialCommandSink: AuthCredentialCommandSink }) &\n ([RevealRequirement<Reveals>] extends [never]\n ? {}\n : { readonly revealCommandCollector: AuthRevealCommandCollector });\ntype ResolverResult<Credentials, Reveals> = [PrivateRequirements<Credentials, Reveals>] extends [\n never,\n]\n ? AuthInvocation\n : PrivateResolvedCall<Credentials, Reveals>;\ntype WithPrivateRequirements<Method, Credentials, Reveals> = Method extends (\n ...args: infer Args\n) => Effect.Effect<infer A, infer E, infer R>\n ? (\n ...args: Args\n ) => Effect.Effect<\n A,\n E,\n Exclude<R, PrivateCollectorProvenance> | PrivateRequirements<Credentials, Reveals>\n >\n : never;\n\n/**\n * Define a unary auth operation once. `authorize` runs after validation and access\n * checks, before the logical handler, on all supported invocation paths.\n */\nconst buildOperation = <\n const Tag extends string,\n Payload extends Schema.Top,\n Success extends Schema.Top,\n Error extends Schema.Top,\n PolicyServices = never,\n const Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {\n /** Require private credential acceptance before the logical handler can mutate. */\n readonly credentials?: true;\n /** Required even when an exact-command replay returns only metadata. */\n readonly reveals?: ReadonlyArray<AuthRevealKind>;\n } = OperationOptions<Payload, Success, Error, PolicyServices>,\n>(\n tag: Tag,\n options: OperationOptions<Payload, Success, Error, PolicyServices> & Options,\n) => {\n type Credentials = OptionProperty<Options, \"credentials\">;\n type Reveals = OptionProperty<Options, \"reveals\">;\n options = Object.freeze({ ...options });\n\n const reveals = (() => {\n try {\n if (options.reveals === undefined) return Object.freeze([] as AuthRevealKind[]);\n const captured = snapshotRevealKinds(options.reveals);\n\n if (captured.length === 0) throw new globalThis.Error();\n\n return captured;\n } catch {\n throw OperationConfigurationError.make({ reason: \"reveal-configuration\", operation: tag });\n }\n })();\n\n const hasReveals = reveals.length > 0;\n\n const rpc = Rpc.make(tag, {\n payload: options.payload,\n success: options.success,\n error: Schema.Union([options.error, OperationBoundaryError]),\n defect: operationDefect,\n });\n\n type Failure = Error[\"Type\"] | OperationBoundaryError;\n type Handler<R = never> = (\n payload: Payload[\"Type\"],\n context: AuthInvocation,\n ) => Effect.Effect<Success[\"Type\"], Failure, R>;\n type CredentialHandler<R = never> = (\n payload: Payload[\"Type\"],\n context: AuthInvocation,\n ) => Effect.Effect<AuthOperationResult<Success[\"Type\"]>, Failure, R>;\n\n const HandlerService = Context.Service<\n OperationHandler<Tag, Payload[\"Type\"], Success[\"Type\"], Failure>,\n { readonly run: CredentialHandler }\n >(`effect-auth/operations/${tag}`);\n\n const decode = Schema.decodeEffect(options.payload);\n // oxlint-disable-next-line no-restricted-properties -- invokeUnknown is the explicit boundary for untyped local callers.\n const decodeUnknown = Schema.decodeUnknownEffect(options.payload);\n const validate = Schema.decodeEffect(Schema.toType(options.payload));\n const projectSuccess = projectType(options.success, \"success-projection\");\n const projectFailure = projectType(rpc.errorSchema, \"error-projection\");\n const fail = (error: Failure) => projectFailure(error).pipe(Effect.flatMap(Effect.fail));\n\n const execute = Effect.fn(`AuthOperation.${tag}`)(\n function* (context: AuthInvocation, payload: Payload[\"Type\"]) {\n if (options.access === \"authenticated\" && context._tag !== \"Authenticated\") {\n return yield* AuthenticationRequired.make({});\n }\n if (options.access === \"system\" && context._tag !== \"System\") {\n return yield* OperationForbidden.make({});\n }\n let sink: AuthCredentialCommandSink | undefined;\n const reveal = hasReveals ? yield* revealCollector : undefined;\n\n if (hasReveals && options.credentials === true) {\n sink = yield* credentialCollector;\n }\n\n const collectors = hasReveals\n ? yield* Effect.try({\n try: () => {\n const collector = reveal;\n const accept = collector?.accept;\n\n if (\n collector === undefined ||\n !Predicate.isFunction(accept) ||\n (options.credentials === true && !Predicate.isFunction(sink))\n )\n throw new globalThis.Error();\n const supported = snapshotRevealKinds(collector.supportedKinds);\n\n if (!reveals.every((kind) => supported.includes(kind))) throw new globalThis.Error();\n\n return { sink, accept };\n },\n catch: () => OperationPrivateOutputUnsupported.make({}),\n })\n : undefined;\n\n if (options.authorize !== undefined) {\n yield* options.authorize(payload, context);\n }\n // The no-reveal branch deliberately retains its historical authorize-before-sink order.\n if (!hasReveals && options.credentials === true) {\n sink = yield* credentialCollector;\n }\n\n if (options.credentials === true && !Predicate.isFunction(sink)) {\n return yield* Effect.die(new globalThis.Error(\"Auth credential collector required\"));\n }\n const handler = yield* HandlerService;\n const result = yield* handler.run(payload, context);\n\n if (collectors !== undefined) {\n const staged = yield* Effect.sync(() => {\n const value = result.value;\n const commands = snapshotCredentialCommands(result.credentialCommands);\n const privateCommands = snapshotRevealCommands(result.revealCommands, reveals);\n\n if (commands.length > 0 && options.credentials !== true)\n throw new globalThis.Error(\"Auth operation failed\");\n\n return { value, commands, privateCommands };\n });\n\n const value = yield* projectSuccess(staged.value);\n const now = DateTime.toEpochMillis(yield* DateTime.now);\n\n if (\n staged.privateCommands.some(\n (command) => command.expiresAtMillis <= now || command.expiresAtMillis > now + 300_000,\n )\n )\n return yield* Effect.die(new globalThis.Error(\"Auth operation failed\"));\n // These are two memory acceptances, not an atomic physical delivery.\n if (staged.commands.length > 0) {\n if (!Predicate.isFunction(sink))\n return yield* Effect.die(new globalThis.Error(\"Auth operation failed\"));\n yield* sink(staged.commands);\n }\n if (staged.privateCommands.length > 0) {\n const accept = collectors.accept;\n\n yield* accept(staged.privateCommands);\n }\n\n return value;\n }\n\n // Projection excludes undeclared properties even on existing Schema.Class instances.\n const value = yield* projectSuccess(result.value);\n const commands = yield* validateCredentialCommands(result.credentialCommands);\n\n yield* Effect.sync(() => snapshotRevealCommands(result.revealCommands, reveals));\n\n if (commands.length > 0) {\n if (!Predicate.isFunction(sink))\n return yield* Effect.die(new globalThis.Error(\"Auth credential collector required\"));\n yield* sink(commands);\n }\n\n return value;\n },\n Effect.catch(fail),\n (effect) => (hasReveals ? effect.pipe(sanitizeOperationDefects(\"private-output\")) : effect),\n );\n\n const invoke = Effect.fn(`AuthOperation.${tag}.invoke`)(function* (\n context: AuthInvocation,\n input: Payload[\"Encoded\"],\n ) {\n const payload = yield* decode(input).pipe(\n Effect.mapError(() => InvalidOperationInput.make({})),\n );\n\n return yield* execute(context, payload);\n }, sanitizeOperationDefects(\"local\"));\n\n const invokeUnknown = Effect.fn(`AuthOperation.${tag}.invokeUnknown`)(function* (\n context: AuthInvocation,\n input: unknown,\n ) {\n const payload = yield* decodeUnknown(input).pipe(\n Effect.mapError(() => InvalidOperationInput.make({})),\n );\n\n return yield* execute(context, payload);\n }, sanitizeOperationDefects(\"local\"));\n\n /** Validate decoded input without replaying its wire transformations. */\n const invokeDecoded = Effect.fn(`AuthOperation.${tag}.invokeDecoded`)(function* (\n context: AuthInvocation,\n input: Payload[\"Type\"],\n ) {\n const payload = yield* validate(input).pipe(\n Effect.mapError(() => InvalidOperationInput.make({})),\n );\n\n return yield* execute(context, payload);\n }, sanitizeOperationDefects(\"local\"));\n\n /** Capture capabilities at Layer construction, with the caller still an explicit argument. */\n const installHandler = <R>(handler: CredentialHandler<R>) =>\n Layer.effect(\n HandlerService,\n Effect.gen(function* () {\n const services = yield* Effect.context<R>();\n\n return {\n run: (payload: Payload[\"Type\"], context: AuthInvocation) =>\n handler(payload, context).pipe(Effect.provide(services)),\n };\n }),\n );\n\n const credentialHandlerLayer = <R>(handler: CredentialHandler<R>) => {\n if (options.credentials !== true)\n throw OperationConfigurationError.make({ reason: \"credential-handler\", operation: tag });\n\n return installHandler(handler);\n };\n\n const privateHandlerLayer = <R>(handler: CredentialHandler<R>) => {\n if (options.credentials !== true && !hasReveals)\n throw OperationConfigurationError.make({ reason: \"private-handler\", operation: tag });\n\n return installHandler(handler);\n };\n\n const handlerLayer = <R>(handler: Handler<R>) =>\n installHandler((payload, context) =>\n handler(payload, context).pipe(Effect.map((value) => ({ value, credentialCommands: [] }))),\n );\n\n type RpcOptions = Parameters<Rpc.ToHandlerFn<typeof rpc>>[1];\n\n function provideResolvedCollectors<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n call:\n | {\n readonly credentialCommandSink?: AuthCredentialCommandSink;\n readonly revealCommandCollector?: AuthRevealCommandCollector;\n }\n | undefined,\n ): Effect.Effect<\n A,\n E,\n Exclude<R, PrivateCollectorProvenance | ResolvedCollectorServices<Credentials, Reveals>>\n >;\n function provideResolvedCollectors<A, E, R>(\n effect: Effect.Effect<A, E, R>,\n call:\n | {\n readonly credentialCommandSink?: AuthCredentialCommandSink;\n readonly revealCommandCollector?: AuthRevealCommandCollector;\n }\n | undefined,\n ) {\n if (hasReveals) {\n const withReveal = effect.pipe(\n Effect.provideService(\n AuthRevealCommandCollectorService,\n call?.revealCommandCollector as AuthRevealCommandCollector,\n ),\n );\n\n if (options.credentials === true) {\n return withReveal.pipe(\n Effect.provideService(\n AuthCredentialCommandCollector,\n call?.credentialCommandSink as AuthCredentialCommandSink,\n ),\n );\n }\n\n return withReveal;\n }\n if (options.credentials === true) {\n return effect.pipe(\n Effect.provideService(\n AuthCredentialCommandCollector,\n call?.credentialCommandSink as AuthCredentialCommandSink,\n ),\n );\n }\n\n return effect;\n }\n\n /**\n * RPC has decoded the payload already. Validate its Type without replaying its\n * transformations. The resolver runs once for each call, outside the wire payload.\n */\n const rpcHandler = <R>(\n resolveContext: (\n options: RpcOptions,\n ) => Effect.Effect<ResolverResult<Credentials, Reveals>, Failure, R>,\n ) =>\n Effect.fn(`AuthOperation.${tag}.rpc`)(\n function* (input: Payload[\"Type\"], transport: RpcOptions) {\n const resolved = yield* resolveContext(transport).pipe(Effect.catch(fail));\n\n const call =\n \"invocation\" in resolved\n ? (resolved as {\n readonly invocation: AuthInvocation;\n readonly credentialCommandSink?: AuthCredentialCommandSink;\n readonly revealCommandCollector?: AuthRevealCommandCollector;\n })\n : undefined;\n\n const context = call === undefined ? (resolved as AuthInvocation) : call.invocation;\n\n return yield* provideResolvedCollectors(invokeDecoded(context, input), call);\n },\n // Fatal RPC defects bypass the operation's defect codec in the default server mode.\n sanitizeOperationDefects(\"rpc\"),\n );\n\n const operation = Object.freeze({\n rpc,\n access: options.access,\n exposure: options.exposure ?? \"internal\",\n replay: options.replay,\n credentials: options.credentials === true,\n reveals,\n handlerLayer,\n credentialHandlerLayer,\n privateHandlerLayer,\n invoke,\n invokeUnknown,\n invokeDecoded,\n rpcHandler,\n });\n\n // Runtime configuration selects the matching request-local requirements above.\n return operation as Omit<typeof operation, \"invoke\" | \"invokeUnknown\" | \"invokeDecoded\"> & {\n readonly invoke: WithPrivateRequirements<typeof invoke, Credentials, Reveals>;\n readonly invokeUnknown: WithPrivateRequirements<typeof invokeUnknown, Credentials, Reveals>;\n readonly invokeDecoded: WithPrivateRequirements<typeof invokeDecoded, Credentials, Reveals>;\n };\n};\n\n/** Named operation contract keeps inferred consumer declarations portable and compact. */\ntype OperationImplementation<\n Tag extends string,\n Payload extends Schema.Top,\n Success extends Schema.Top,\n Error extends Schema.Top,\n PolicyServices = never,\n Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {\n /** Require private credential acceptance before the logical handler can mutate. */\n readonly credentials?: true;\n /** Required even when an exact-command replay returns only metadata. */\n readonly reveals?: ReadonlyArray<AuthRevealKind>;\n } = OperationOptions<Payload, Success, Error, PolicyServices>,\n> = ReturnType<typeof buildOperation<Tag, Payload, Success, Error, PolicyServices, Options>>;\n\nexport interface AuthOperation<\n Tag extends string,\n Payload extends Schema.Top,\n Success extends Schema.Top,\n Error extends Schema.Top,\n PolicyServices = never,\n Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {\n /** Require private credential acceptance before the logical handler can mutate. */\n readonly credentials?: true;\n /** Required even when an exact-command replay returns only metadata. */\n readonly reveals?: ReadonlyArray<AuthRevealKind>;\n } = OperationOptions<Payload, Success, Error, PolicyServices>,\n> {\n readonly rpc: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"rpc\"];\n readonly access: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"access\"];\n readonly exposure: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"exposure\"];\n readonly replay: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"replay\"];\n readonly credentials: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"credentials\"];\n readonly reveals: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"reveals\"];\n readonly handlerLayer: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"handlerLayer\"];\n readonly credentialHandlerLayer: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"credentialHandlerLayer\"];\n readonly privateHandlerLayer: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"privateHandlerLayer\"];\n readonly invoke: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"invoke\"];\n readonly invokeUnknown: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"invokeUnknown\"];\n readonly invokeDecoded: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"invokeDecoded\"];\n readonly rpcHandler: OperationImplementation<\n Tag,\n Payload,\n Success,\n Error,\n PolicyServices,\n Options\n >[\"rpcHandler\"];\n}\n\nexport const makeOperation: <\n const Tag extends string,\n Payload extends Schema.Top,\n Success extends Schema.Top,\n Error extends Schema.Top,\n PolicyServices = never,\n const Options extends OperationOptions<Payload, Success, Error, PolicyServices> & {\n /** Require private credential acceptance before the logical handler can mutate. */\n readonly credentials?: true;\n /** Required even when an exact-command replay returns only metadata. */\n readonly reveals?: ReadonlyArray<AuthRevealKind>;\n } = OperationOptions<Payload, Success, Error, PolicyServices>,\n>(\n tag: Tag,\n options: OperationOptions<Payload, Success, Error, PolicyServices> & Options,\n) => AuthOperation<Tag, Payload, Success, Error, PolicyServices, Options> = buildOperation;\n\nexport interface AnyOperation {\n readonly rpc: Rpc.Any;\n readonly exposure: OperationExposure;\n}\n\n/** Compose available contracts independently of their network exposure. */\nexport const operationGroup = <const Operations extends ReadonlyArray<AnyOperation>>(\n ...operations: Operations\n): RpcGroup.RpcGroup<Operations[number][\"rpc\"]> => {\n const tags = new Set<string>();\n\n for (const operation of operations) {\n if (tags.has(operation.rpc._tag)) {\n throw OperationConfigurationError.make({\n reason: \"duplicate-operation\",\n operation: operation.rpc._tag,\n });\n }\n tags.add(operation.rpc._tag);\n }\n\n return RpcGroup.make(...operations.map((operation) => operation.rpc));\n};\n\n/** Explicitly select network operations; internal operations require an additional opt-in. */\nexport const remoteGroup = <const Operations extends ReadonlyArray<AnyOperation>>(\n operations: Operations,\n options?: { readonly allowInternal?: true },\n): RpcGroup.RpcGroup<Operations[number][\"rpc\"]> => {\n for (const operation of operations) {\n if (operation.exposure === \"internal\" && options?.allowInternal !== true) {\n throw OperationConfigurationError.make({\n reason: \"internal-exposure\",\n operation: operation.rpc._tag,\n });\n }\n }\n\n return operationGroup(...operations);\n};\n"],"mappings":";;;;;;;AAsCA,MAAM,kBAAkB,OAAO,KAAK,KAClC,OAAO,SAAS,OAAO,SAAS;CAC9B,QAAQ,aAAa,gBAAgB,IAAI,WAAW,MAAM,uBAAuB,CAAC;CAClF,QAAQ,aAAa,iBAAiB,EAAE,SAAS,wBAAwB,EAAE;AAC7E,CAAC,CACH;;AAGA,IAAM,0BAAN,cAAsC,WAAW,MAAM;CACrD,cAAc;EACZ,MAAM,uBAAuB;CAC/B;AACF;AAEA,MAAM,mBAAmB,OAAO,GAAG,uBAAuB,CAAC,CAAC,WAC1D,OACA,OACyB;CACzB,IAAI,MAAM,kBAAkB,KAAK,GAC/B,OAAO,OAAO,OAAO,UACnB,MAAM,YAAmB,MAAM,QAAQ,OAAO,MAAM,iBAAiB,CAAC,CACxE;CAGF,MAAM,aAAa,MAAM,YACvB,MAAM,QAAQ,QACX,WAAW,EAAE,MAAM,YAAY,MAAM,KAAK,OAAO,kBAAkB,wBACtE,CACF;CAEA,OAAO,kBAAkB,OAAO,UAAU;CAE1C,OAAO,OAAO,OAAO,IAAI,IAAI,wBAAwB,CAAC;AACxD,CAAC;AAED,MAAM,4BACH,WACS,WACR,OAAO,KACL,OAAO,YAAY,UACjB,MAAM,QAAQ,KAAK,IAAI,iBAAiB,OAAO,KAAK,IAAI,OAAO,UAAU,KAAK,CAChF,CACF;;AAGJ,MAAM,eACJ,QACA,UACG;CACH,MAAM,QAAQ,OAAO,WAAW,MAAM;CACtC,MAAM,SAAS,OAAO,aAAa,KAAK;CACxC,MAAM,SAAS,OAAO,aAAa,KAAK;CAExC,QAAQ,UACN,OAAO,KAAK,CAAC,CAAC,KACZ,OAAO,QAAQ,MAAM,GACrB,OAAO,YAAY,UAAU,iBAAiB,OAAO,KAAK,CAAC,CAC7D;AACJ;AA4DA,MAAM,sBAAsB;AAM5B,MAAM,kBAAkB;;;;;AAyCxB,MAAM,kBAaJ,KACA,YACG;CAGH,UAAU,OAAO,OAAO,EAAE,GAAG,QAAQ,CAAC;CAEtC,MAAM,iBAAiB;EACrB,IAAI;GACF,IAAI,QAAQ,YAAY,KAAA,GAAW,OAAO,OAAO,OAAO,CAAC,CAAqB;GAC9E,MAAM,WAAW,oBAAoB,QAAQ,OAAO;GAEpD,IAAI,SAAS,WAAW,GAAG,MAAM,IAAI,WAAW,MAAM;GAEtD,OAAO;EACT,QAAQ;GACN,MAAM,4BAA4B,KAAK;IAAE,QAAQ;IAAwB,WAAW;GAAI,CAAC;EAC3F;CACF,EAAA,CAAG;CAEH,MAAM,aAAa,QAAQ,SAAS;CAEpC,MAAM,MAAM,IAAI,KAAK,KAAK;EACxB,SAAS,QAAQ;EACjB,SAAS,QAAQ;EACjB,OAAO,OAAO,MAAM,CAAC,QAAQ,OAAO,sBAAsB,CAAC;EAC3D,QAAQ;CACV,CAAC;CAYD,MAAM,iBAAiB,QAAQ,QAG7B,0BAA0B,KAAK;CAEjC,MAAM,SAAS,OAAO,aAAa,QAAQ,OAAO;CAElD,MAAM,gBAAgB,OAAO,oBAAoB,QAAQ,OAAO;CAChE,MAAM,WAAW,OAAO,aAAa,OAAO,OAAO,QAAQ,OAAO,CAAC;CACnE,MAAM,iBAAiB,YAAY,QAAQ,SAAS,oBAAoB;CACxE,MAAM,iBAAiB,YAAY,IAAI,aAAa,kBAAkB;CACtE,MAAM,QAAQ,UAAmB,eAAe,KAAK,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,IAAI,CAAC;CAEvF,MAAM,UAAU,OAAO,GAAG,iBAAiB,KAAK,CAAC,CAC/C,WAAW,SAAyB,SAA0B;EAC5D,IAAI,QAAQ,WAAW,mBAAmB,QAAQ,SAAS,iBACzD,OAAO,OAAO,uBAAuB,KAAK,CAAC,CAAC;EAE9C,IAAI,QAAQ,WAAW,YAAY,QAAQ,SAAS,UAClD,OAAO,OAAO,mBAAmB,KAAK,CAAC,CAAC;EAE1C,IAAI;EACJ,MAAM,SAAS,aAAa,OAAO,kBAAkB,KAAA;EAErD,IAAI,cAAc,QAAQ,gBAAgB,MACxC,OAAO,OAAO;EAGhB,MAAM,aAAa,aACf,OAAO,OAAO,IAAI;GAChB,WAAW;IACT,MAAM,YAAY;IAClB,MAAM,SAAS,WAAW;IAE1B,IACE,cAAc,KAAA,KACd,CAAC,UAAU,WAAW,MAAM,KAC3B,QAAQ,gBAAgB,QAAQ,CAAC,UAAU,WAAW,IAAI,GAE3D,MAAM,IAAI,WAAW,MAAM;IAC7B,MAAM,YAAY,oBAAoB,UAAU,cAAc;IAE9D,IAAI,CAAC,QAAQ,OAAO,SAAS,UAAU,SAAS,IAAI,CAAC,GAAG,MAAM,IAAI,WAAW,MAAM;IAEnF,OAAO;KAAE;KAAM;IAAO;GACxB;GACA,aAAa,kCAAkC,KAAK,CAAC,CAAC;EACxD,CAAC,IACD,KAAA;EAEJ,IAAI,QAAQ,cAAc,KAAA,GACxB,OAAO,QAAQ,UAAU,SAAS,OAAO;EAG3C,IAAI,CAAC,cAAc,QAAQ,gBAAgB,MACzC,OAAO,OAAO;EAGhB,IAAI,QAAQ,gBAAgB,QAAQ,CAAC,UAAU,WAAW,IAAI,GAC5D,OAAO,OAAO,OAAO,IAAI,IAAI,WAAW,MAAM,oCAAoC,CAAC;EAGrF,MAAM,SAAS,QAAO,OADC,eAAA,CACO,IAAI,SAAS,OAAO;EAElD,IAAI,eAAe,KAAA,GAAW;GAC5B,MAAM,SAAS,OAAO,OAAO,WAAW;IACtC,MAAM,QAAQ,OAAO;IACrB,MAAM,WAAW,2BAA2B,OAAO,kBAAkB;IACrE,MAAM,kBAAkB,uBAAuB,OAAO,gBAAgB,OAAO;IAE7E,IAAI,SAAS,SAAS,KAAK,QAAQ,gBAAgB,MACjD,MAAM,IAAI,WAAW,MAAM,uBAAuB;IAEpD,OAAO;KAAE;KAAO;KAAU;IAAgB;GAC5C,CAAC;GAED,MAAM,QAAQ,OAAO,eAAe,OAAO,KAAK;GAChD,MAAM,MAAM,SAAS,cAAc,OAAO,SAAS,GAAG;GAEtD,IACE,OAAO,gBAAgB,MACpB,YAAY,QAAQ,mBAAmB,OAAO,QAAQ,kBAAkB,MAAM,GACjF,GAEA,OAAO,OAAO,OAAO,IAAI,IAAI,WAAW,MAAM,uBAAuB,CAAC;GAExE,IAAI,OAAO,SAAS,SAAS,GAAG;IAC9B,IAAI,CAAC,UAAU,WAAW,IAAI,GAC5B,OAAO,OAAO,OAAO,IAAI,IAAI,WAAW,MAAM,uBAAuB,CAAC;IACxE,OAAO,KAAK,OAAO,QAAQ;GAC7B;GACA,IAAI,OAAO,gBAAgB,SAAS,GAAG;IACrC,MAAM,SAAS,WAAW;IAE1B,OAAO,OAAO,OAAO,eAAe;GACtC;GAEA,OAAO;EACT;EAGA,MAAM,QAAQ,OAAO,eAAe,OAAO,KAAK;EAChD,MAAM,WAAW,OAAO,2BAA2B,OAAO,kBAAkB;EAE5E,OAAO,OAAO,WAAW,uBAAuB,OAAO,gBAAgB,OAAO,CAAC;EAE/E,IAAI,SAAS,SAAS,GAAG;GACvB,IAAI,CAAC,UAAU,WAAW,IAAI,GAC5B,OAAO,OAAO,OAAO,IAAI,IAAI,WAAW,MAAM,oCAAoC,CAAC;GACrF,OAAO,KAAK,QAAQ;EACtB;EAEA,OAAO;CACT,GACA,OAAO,MAAM,IAAI,IAChB,WAAY,aAAa,OAAO,KAAK,yBAAyB,gBAAgB,CAAC,IAAI,MACtF;CAEA,MAAM,SAAS,OAAO,GAAG,iBAAiB,IAAI,QAAQ,CAAC,CAAC,WACtD,SACA,OACA;EACA,MAAM,UAAU,OAAO,OAAO,KAAK,CAAC,CAAC,KACnC,OAAO,eAAe,sBAAsB,KAAK,CAAC,CAAC,CAAC,CACtD;EAEA,OAAO,OAAO,QAAQ,SAAS,OAAO;CACxC,GAAG,yBAAyB,OAAO,CAAC;CAEpC,MAAM,gBAAgB,OAAO,GAAG,iBAAiB,IAAI,eAAe,CAAC,CAAC,WACpE,SACA,OACA;EACA,MAAM,UAAU,OAAO,cAAc,KAAK,CAAC,CAAC,KAC1C,OAAO,eAAe,sBAAsB,KAAK,CAAC,CAAC,CAAC,CACtD;EAEA,OAAO,OAAO,QAAQ,SAAS,OAAO;CACxC,GAAG,yBAAyB,OAAO,CAAC;;CAGpC,MAAM,gBAAgB,OAAO,GAAG,iBAAiB,IAAI,eAAe,CAAC,CAAC,WACpE,SACA,OACA;EACA,MAAM,UAAU,OAAO,SAAS,KAAK,CAAC,CAAC,KACrC,OAAO,eAAe,sBAAsB,KAAK,CAAC,CAAC,CAAC,CACtD;EAEA,OAAO,OAAO,QAAQ,SAAS,OAAO;CACxC,GAAG,yBAAyB,OAAO,CAAC;;CAGpC,MAAM,kBAAqB,YACzB,MAAM,OACJ,gBACA,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,OAAO,OAAO,QAAW;EAE1C,OAAO,EACL,MAAM,SAA0B,YAC9B,QAAQ,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO,QAAQ,QAAQ,CAAC,EAC3D;CACF,CAAC,CACH;CAEF,MAAM,0BAA6B,YAAkC;EACnE,IAAI,QAAQ,gBAAgB,MAC1B,MAAM,4BAA4B,KAAK;GAAE,QAAQ;GAAsB,WAAW;EAAI,CAAC;EAEzF,OAAO,eAAe,OAAO;CAC/B;CAEA,MAAM,uBAA0B,YAAkC;EAChE,IAAI,QAAQ,gBAAgB,QAAQ,CAAC,YACnC,MAAM,4BAA4B,KAAK;GAAE,QAAQ;GAAmB,WAAW;EAAI,CAAC;EAEtF,OAAO,eAAe,OAAO;CAC/B;CAEA,MAAM,gBAAmB,YACvB,gBAAgB,SAAS,YACvB,QAAQ,SAAS,OAAO,CAAC,CAAC,KAAK,OAAO,KAAK,WAAW;EAAE;EAAO,oBAAoB,CAAC;CAAE,EAAE,CAAC,CAC3F;CAiBF,SAAS,0BACP,QACA,MAMA;EACA,IAAI,YAAY;GACd,MAAM,aAAa,OAAO,KACxB,OAAO,eACL,mCACA,MAAM,sBACR,CACF;GAEA,IAAI,QAAQ,gBAAgB,MAC1B,OAAO,WAAW,KAChB,OAAO,eACL,gCACA,MAAM,qBACR,CACF;GAGF,OAAO;EACT;EACA,IAAI,QAAQ,gBAAgB,MAC1B,OAAO,OAAO,KACZ,OAAO,eACL,gCACA,MAAM,qBACR,CACF;EAGF,OAAO;CACT;;;;;CAMA,MAAM,cACJ,mBAIA,OAAO,GAAG,iBAAiB,IAAI,KAAK,CAAC,CACnC,WAAW,OAAwB,WAAuB;EACxD,MAAM,WAAW,OAAO,eAAe,SAAS,CAAC,CAAC,KAAK,OAAO,MAAM,IAAI,CAAC;EAEzE,MAAM,OACJ,gBAAgB,WACX,WAKD,KAAA;EAEN,MAAM,UAAU,SAAS,KAAA,IAAa,WAA8B,KAAK;EAEzE,OAAO,OAAO,0BAA0B,cAAc,SAAS,KAAK,GAAG,IAAI;CAC7E,GAEA,yBAAyB,KAAK,CAChC;CAmBF,OAjBkB,OAAO,OAAO;EAC9B;EACA,QAAQ,QAAQ;EAChB,UAAU,QAAQ,YAAY;EAC9B,QAAQ,QAAQ;EAChB,aAAa,QAAQ,gBAAgB;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAGe;AAKjB;AAwIA,MAAa,gBAe+D;;AAQ5E,MAAa,kBACX,GAAG,eAC8C;CACjD,MAAM,uBAAO,IAAI,IAAY;CAE7B,KAAK,MAAM,aAAa,YAAY;EAClC,IAAI,KAAK,IAAI,UAAU,IAAI,IAAI,GAC7B,MAAM,4BAA4B,KAAK;GACrC,QAAQ;GACR,WAAW,UAAU,IAAI;EAC3B,CAAC;EAEH,KAAK,IAAI,UAAU,IAAI,IAAI;CAC7B;CAEA,OAAO,SAAS,KAAK,GAAG,WAAW,KAAK,cAAc,UAAU,GAAG,CAAC;AACtE;;AAGA,MAAa,eACX,YACA,YACiD;CACjD,KAAK,MAAM,aAAa,YACtB,IAAI,UAAU,aAAa,cAAc,SAAS,kBAAkB,MAClE,MAAM,4BAA4B,KAAK;EACrC,QAAQ;EACR,WAAW,UAAU,IAAI;CAC3B,CAAC;CAIL,OAAO,eAAe,GAAG,UAAU;AACrC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { TokenDigest } from "../Schema.mjs";
|
|
2
|
+
import { AuthOperationResult } from "./credentials.mjs";
|
|
3
|
+
import { SubtleCrypto } from "../WebCrypto.mjs";
|
|
4
|
+
import { SessionSigningKeyring } from "../sessions/crypto.mjs";
|
|
5
|
+
import { RequestBindingConfig } from "./RequestBindingConfig.mjs";
|
|
6
|
+
import { RequestBindingCredential, RequestBindingFlowId, RequestBindingPublic } from "./requestBindingModels.mjs";
|
|
7
|
+
import { Context, Crypto, Effect, Layer, Redacted, Schema } from "effect";
|
|
8
|
+
//#region src/operations/requestBinding.d.ts
|
|
9
|
+
declare const RequestBindingInvalid_base: Schema.Class<RequestBindingInvalid, Schema.TaggedStruct<"RequestBindingInvalid", {}>, import("effect/Cause").YieldableError>;
|
|
10
|
+
declare class RequestBindingInvalid extends RequestBindingInvalid_base {}
|
|
11
|
+
declare const RequestBindingUnavailable_base: Schema.Class<RequestBindingUnavailable, Schema.TaggedStruct<"RequestBindingUnavailable", {}>, import("effect/Cause").YieldableError>;
|
|
12
|
+
declare class RequestBindingUnavailable extends RequestBindingUnavailable_base {}
|
|
13
|
+
declare const RequestBindingConfigurationError_base: Schema.Class<RequestBindingConfigurationError, Schema.TaggedStruct<"RequestBindingConfigurationError", {}>, import("effect/Cause").YieldableError>;
|
|
14
|
+
declare class RequestBindingConfigurationError extends RequestBindingConfigurationError_base {}
|
|
15
|
+
interface VerifiedRequestBinding {
|
|
16
|
+
/** Internal correlation only; never an accepted substitute for the credential. */
|
|
17
|
+
readonly verifier: TokenDigest;
|
|
18
|
+
readonly expiresAtMillis: number;
|
|
19
|
+
}
|
|
20
|
+
interface RequestBindingConfiguration {
|
|
21
|
+
readonly lifetimeMillis: number;
|
|
22
|
+
readonly generation: number;
|
|
23
|
+
/** Dedicated binding keys; no implicit reuse of session signing keys. */
|
|
24
|
+
readonly keyring: SessionSigningKeyring;
|
|
25
|
+
}
|
|
26
|
+
interface BindingModule<Id extends string, Purpose extends string> {
|
|
27
|
+
readonly moduleId: Id;
|
|
28
|
+
readonly purpose: Purpose;
|
|
29
|
+
}
|
|
30
|
+
/** The scalar private slot supports one standard browser flow at a time. Native
|
|
31
|
+
* consumers may explicitly retain credentials by flow in their own secure store.
|
|
32
|
+
* Browser adapters inject this credential from private storage and reject URL/body
|
|
33
|
+
* overrides. Every binding-bearing mutation, including issuance, requires CSRF
|
|
34
|
+
* protection. GET/preview routes neither begin nor consume an authentication flow.
|
|
35
|
+
*/
|
|
36
|
+
declare const makeRequestBinding: <const Id extends string, const Purpose extends string>(moduleId: Id, purpose: Purpose) => Readonly<{
|
|
37
|
+
RequestBinding: Context.Service<BindingModule<Id, Purpose>, {
|
|
38
|
+
readonly issue: (flowId: RequestBindingFlowId) => Effect.Effect<AuthOperationResult<RequestBindingPublic>, RequestBindingUnavailable | RequestBindingInvalid>;
|
|
39
|
+
readonly verify: (flowId: RequestBindingFlowId, credential: Redacted.Redacted<string>) => Effect.Effect<VerifiedRequestBinding, RequestBindingInvalid | RequestBindingUnavailable>;
|
|
40
|
+
}>;
|
|
41
|
+
signedLayer: (configuration: RequestBindingConfiguration) => Layer.Layer<BindingModule<Id, Purpose>, RequestBindingConfigurationError, Crypto.Crypto | SubtleCrypto>;
|
|
42
|
+
layer: Layer.Layer<BindingModule<Id, Purpose>, RequestBindingConfigurationError, Crypto.Crypto | RequestBindingConfig | SubtleCrypto>;
|
|
43
|
+
}>;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { BindingModule, RequestBindingConfiguration, RequestBindingConfigurationError, RequestBindingCredential, RequestBindingFlowId, RequestBindingInvalid, RequestBindingPublic, RequestBindingUnavailable, VerifiedRequestBinding, makeRequestBinding };
|
|
46
|
+
//# sourceMappingURL=requestBinding.d.mts.map
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { TokenDigest } from "../Schema.mjs";
|
|
2
|
+
import { makeSessionSigningCodec } from "../sessions/crypto.mjs";
|
|
3
|
+
import { RequestBindingConfig } from "./RequestBindingConfig.mjs";
|
|
4
|
+
import { RequestBindingCredential, RequestBindingFlowId, RequestBindingPublic } from "./requestBindingModels.mjs";
|
|
5
|
+
import { Context, Crypto, DateTime, Effect, Encoding, Layer, Redacted, Schema } from "effect";
|
|
6
|
+
//#region src/operations/requestBinding.ts
|
|
7
|
+
var RequestBindingInvalid = class extends Schema.TaggedError()("RequestBindingInvalid", {}) {};
|
|
8
|
+
var RequestBindingUnavailable = class extends Schema.TaggedError()("RequestBindingUnavailable", {}) {};
|
|
9
|
+
var RequestBindingConfigurationError = class extends Schema.TaggedError()("RequestBindingConfigurationError", {}) {};
|
|
10
|
+
const configurationSchema = Schema.Struct({
|
|
11
|
+
lifetimeMillis: Schema.Int.check(Schema.isBetween({
|
|
12
|
+
minimum: 1e3,
|
|
13
|
+
maximum: 18e5
|
|
14
|
+
})),
|
|
15
|
+
generation: Schema.Int.check(Schema.isBetween({
|
|
16
|
+
minimum: 1,
|
|
17
|
+
maximum: Number.MAX_SAFE_INTEGER
|
|
18
|
+
})),
|
|
19
|
+
keyring: Schema.Struct({
|
|
20
|
+
activeKeyId: Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{1,64}$/)),
|
|
21
|
+
keys: Schema.Array(Schema.Struct({
|
|
22
|
+
id: Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{1,64}$/)),
|
|
23
|
+
material: Schema.Redacted(Schema.String.check(Schema.isMaxLength(172)))
|
|
24
|
+
})).check(Schema.isMinLength(1), Schema.isMaxLength(8))
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
const label = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9._:/-]{1,128}$/));
|
|
28
|
+
const envelope = Schema.Struct({
|
|
29
|
+
namespace: Schema.Literal("effect-auth/request-binding/v1"),
|
|
30
|
+
moduleId: label,
|
|
31
|
+
purpose: label,
|
|
32
|
+
flowId: RequestBindingFlowId,
|
|
33
|
+
generation: Schema.Int,
|
|
34
|
+
nonce: Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{43}$/)),
|
|
35
|
+
issuedAtMillis: Schema.Int,
|
|
36
|
+
expiresAtMillis: Schema.Int
|
|
37
|
+
});
|
|
38
|
+
const verifierMessage = Schema.fromJsonString(Schema.Tuple([
|
|
39
|
+
Schema.Literal("effect-auth/request-binding-verifier/v1"),
|
|
40
|
+
label,
|
|
41
|
+
label,
|
|
42
|
+
Schema.String
|
|
43
|
+
]));
|
|
44
|
+
/** The scalar private slot supports one standard browser flow at a time. Native
|
|
45
|
+
* consumers may explicitly retain credentials by flow in their own secure store.
|
|
46
|
+
* Browser adapters inject this credential from private storage and reject URL/body
|
|
47
|
+
* overrides. Every binding-bearing mutation, including issuance, requires CSRF
|
|
48
|
+
* protection. GET/preview routes neither begin nor consume an authentication flow.
|
|
49
|
+
*/
|
|
50
|
+
const makeRequestBinding = (moduleId, purpose) => {
|
|
51
|
+
const RequestBinding = Context.Service(`effect-auth/operations/RequestBinding/${moduleId.length}:${moduleId}/${purpose.length}:${purpose}`);
|
|
52
|
+
const signedLayer = (configuration) => {
|
|
53
|
+
if (!Schema.is(configurationSchema)(configuration)) return Layer.effect(RequestBinding, Effect.fail(RequestBindingConfigurationError.make({})));
|
|
54
|
+
const input = Object.freeze({
|
|
55
|
+
lifetimeMillis: configuration.lifetimeMillis,
|
|
56
|
+
generation: configuration.generation,
|
|
57
|
+
keyring: Object.freeze({
|
|
58
|
+
activeKeyId: configuration.keyring.activeKeyId,
|
|
59
|
+
keys: Object.freeze(configuration.keyring.keys.map((entry) => Object.freeze({
|
|
60
|
+
id: entry.id,
|
|
61
|
+
material: entry.material
|
|
62
|
+
})))
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
return Layer.effect(RequestBinding, Effect.gen(function* () {
|
|
66
|
+
yield* Schema.decodeEffect(label)(moduleId).pipe(Effect.mapError(() => RequestBindingConfigurationError.make({})));
|
|
67
|
+
yield* Schema.decodeEffect(label)(purpose).pipe(Effect.mapError(() => RequestBindingConfigurationError.make({})));
|
|
68
|
+
const policy = yield* Schema.decodeEffect(configurationSchema)(input).pipe(Effect.mapError(() => RequestBindingConfigurationError.make({})));
|
|
69
|
+
const signer = yield* makeSessionSigningCodec(envelope, policy.keyring, 2048).pipe(Effect.mapError(() => RequestBindingConfigurationError.make({})));
|
|
70
|
+
const crypto = yield* Crypto.Crypto;
|
|
71
|
+
return RequestBinding.of({
|
|
72
|
+
issue: Effect.fn("RequestBinding.issue")(function* (flowId) {
|
|
73
|
+
yield* Schema.decodeEffect(RequestBindingFlowId)(flowId).pipe(Effect.mapError(() => RequestBindingInvalid.make({})));
|
|
74
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
75
|
+
const nonce = yield* crypto.randomBytes(32).pipe(Effect.mapError(() => RequestBindingUnavailable.make({})));
|
|
76
|
+
const expiresAtMillis = now + policy.lifetimeMillis;
|
|
77
|
+
const credential = yield* signer.encode({
|
|
78
|
+
namespace: "effect-auth/request-binding/v1",
|
|
79
|
+
moduleId,
|
|
80
|
+
purpose,
|
|
81
|
+
flowId,
|
|
82
|
+
generation: policy.generation,
|
|
83
|
+
nonce: Encoding.encodeBase64Url(nonce),
|
|
84
|
+
issuedAtMillis: now,
|
|
85
|
+
expiresAtMillis
|
|
86
|
+
}).pipe(Effect.mapError(() => RequestBindingUnavailable.make({})));
|
|
87
|
+
return {
|
|
88
|
+
value: {
|
|
89
|
+
flowId,
|
|
90
|
+
expiresAtMillis
|
|
91
|
+
},
|
|
92
|
+
credentialCommands: [{
|
|
93
|
+
_tag: "Issue",
|
|
94
|
+
slot: "request-binding",
|
|
95
|
+
credential,
|
|
96
|
+
expiresAtMillis
|
|
97
|
+
}]
|
|
98
|
+
};
|
|
99
|
+
}),
|
|
100
|
+
verify: Effect.fn("RequestBinding.verify")(function* (flowId, credential) {
|
|
101
|
+
yield* Schema.decodeEffect(RequestBindingFlowId)(flowId).pipe(Effect.mapError(() => RequestBindingInvalid.make({})));
|
|
102
|
+
const value = yield* signer.decode(credential).pipe(Effect.mapError((error) => error._tag === "SessionUnavailable" ? RequestBindingUnavailable.make({}) : RequestBindingInvalid.make({})));
|
|
103
|
+
const now = DateTime.toEpochMillis(yield* DateTime.now);
|
|
104
|
+
if (value.moduleId !== moduleId || value.purpose !== purpose || value.flowId !== flowId || value.generation !== policy.generation || value.issuedAtMillis > now || value.expiresAtMillis <= now || value.expiresAtMillis <= value.issuedAtMillis || value.expiresAtMillis - value.issuedAtMillis > policy.lifetimeMillis) return yield* RequestBindingInvalid.make({});
|
|
105
|
+
const message = yield* Schema.encodeEffect(verifierMessage)([
|
|
106
|
+
"effect-auth/request-binding-verifier/v1",
|
|
107
|
+
moduleId,
|
|
108
|
+
purpose,
|
|
109
|
+
Redacted.value(credential)
|
|
110
|
+
]).pipe(Effect.mapError(() => RequestBindingInvalid.make({})));
|
|
111
|
+
const digest = yield* crypto.digest("SHA-256", new TextEncoder().encode(message)).pipe(Effect.mapError(() => RequestBindingUnavailable.make({})));
|
|
112
|
+
return Object.freeze({
|
|
113
|
+
verifier: TokenDigest.make(Encoding.encodeBase64Url(digest)),
|
|
114
|
+
expiresAtMillis: value.expiresAtMillis
|
|
115
|
+
});
|
|
116
|
+
})
|
|
117
|
+
});
|
|
118
|
+
}));
|
|
119
|
+
};
|
|
120
|
+
const layer = Layer.unwrap(Effect.map(RequestBindingConfig, signedLayer));
|
|
121
|
+
return Object.freeze({
|
|
122
|
+
RequestBinding,
|
|
123
|
+
signedLayer,
|
|
124
|
+
layer
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
//#endregion
|
|
128
|
+
export { RequestBindingConfigurationError, RequestBindingCredential, RequestBindingFlowId, RequestBindingInvalid, RequestBindingPublic, RequestBindingUnavailable, makeRequestBinding };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=requestBinding.mjs.map
|