@yielded/auth-persistence 0.1.0-beta.7
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/README.md +21 -0
- package/dist/Drizzle.d.mts +28 -0
- package/dist/Drizzle.mjs +28 -0
- package/dist/DrizzleD1.d.mts +963 -0
- package/dist/DrizzleD1.mjs +29 -0
- package/dist/DrizzleD1.mjs.map +1 -0
- package/dist/DrizzleLibsql.d.mts +2284 -0
- package/dist/DrizzleLibsql.mjs +92 -0
- package/dist/DrizzleLibsql.mjs.map +1 -0
- package/dist/DrizzleMysql2.d.mts +1820 -0
- package/dist/DrizzleMysql2.mjs +55 -0
- package/dist/DrizzleMysql2.mjs.map +1 -0
- package/dist/DrizzlePglite.d.mts +1826 -0
- package/dist/DrizzlePglite.mjs +53 -0
- package/dist/DrizzlePglite.mjs.map +1 -0
- package/dist/DrizzlePostgres.d.mts +1826 -0
- package/dist/DrizzlePostgres.mjs +53 -0
- package/dist/DrizzlePostgres.mjs.map +1 -0
- package/dist/DrizzleSqliteBun.d.mts +2279 -0
- package/dist/DrizzleSqliteBun.mjs +70 -0
- package/dist/DrizzleSqliteBun.mjs.map +1 -0
- package/dist/DrizzleSqliteDo.d.mts +2329 -0
- package/dist/DrizzleSqliteDo.mjs +105 -0
- package/dist/DrizzleSqliteDo.mjs.map +1 -0
- package/dist/DrizzleSqliteNode.d.mts +2279 -0
- package/dist/DrizzleSqliteNode.mjs +70 -0
- package/dist/DrizzleSqliteNode.mjs.map +1 -0
- package/dist/DrizzleSqliteWasm.d.mts +2282 -0
- package/dist/DrizzleSqliteWasm.mjs +70 -0
- package/dist/DrizzleSqliteWasm.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 +62 -0
- package/dist/drizzle/d1-emails.mjs +580 -0
- package/dist/drizzle/d1-emails.mjs.map +1 -0
- package/dist/drizzle/d1-generated-statement.d.mts +2 -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 +31 -0
- package/dist/drizzle/d1-identity.mjs +119 -0
- package/dist/drizzle/d1-identity.mjs.map +1 -0
- package/dist/drizzle/d1-oauth.d.mts +301 -0
- package/dist/drizzle/d1-oauth.mjs +76 -0
- package/dist/drizzle/d1-oauth.mjs.map +1 -0
- package/dist/drizzle/d1-passkey.d.mts +51 -0
- package/dist/drizzle/d1-passkey.mjs +95 -0
- package/dist/drizzle/d1-passkey.mjs.map +1 -0
- package/dist/drizzle/d1-password-prepared.d.mts +25 -0
- package/dist/drizzle/d1-password-prepared.mjs +461 -0
- package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
- package/dist/drizzle/d1-passwords.d.mts +87 -0
- package/dist/drizzle/d1-passwords.mjs +1004 -0
- package/dist/drizzle/d1-passwords.mjs.map +1 -0
- package/dist/drizzle/d1-phone.d.mts +26 -0
- package/dist/drizzle/d1-phone.mjs +30 -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 +80 -0
- package/dist/drizzle/d1-proofs.mjs +830 -0
- package/dist/drizzle/d1-proofs.mjs.map +1 -0
- package/dist/drizzle/d1-sessions.d.mts +67 -0
- package/dist/drizzle/d1-sessions.mjs +966 -0
- package/dist/drizzle/d1-sessions.mjs.map +1 -0
- package/dist/drizzle/d1-totp.d.mts +26 -0
- package/dist/drizzle/d1-totp.mjs +27 -0
- package/dist/drizzle/d1-totp.mjs.map +1 -0
- package/dist/drizzle/email-model.d.mts +354 -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 +30 -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 +4 -0
- package/dist/drizzle/email-sql.mjs +9 -0
- package/dist/drizzle/email-sql.mjs.map +1 -0
- package/dist/drizzle/email-target.d.mts +20 -0
- package/dist/drizzle/email-target.mjs +72 -0
- package/dist/drizzle/email-target.mjs.map +1 -0
- package/dist/drizzle/model.d.mts +250 -0
- package/dist/drizzle/model.mjs +58 -0
- package/dist/drizzle/model.mjs.map +1 -0
- package/dist/drizzle/mysql-emails.d.mts +71 -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 +22 -0
- package/dist/drizzle/mysql-identity.mjs +94 -0
- package/dist/drizzle/mysql-identity.mjs.map +1 -0
- package/dist/drizzle/mysql-password-prepared.d.mts +30 -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 +86 -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 +75 -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 +237 -0
- package/dist/drizzle/mysql-sessions.mjs +53 -0
- package/dist/drizzle/mysql-sessions.mjs.map +1 -0
- package/dist/drizzle/mysql.d.mts +70 -0
- package/dist/drizzle/mysql.mjs +218 -0
- package/dist/drizzle/mysql.mjs.map +1 -0
- package/dist/drizzle/oauth-accounts.mjs +358 -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 +76 -0
- package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-flow.mjs +247 -0
- package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-input.mjs +103 -0
- package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-maintenance.mjs +214 -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 +14 -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 +753 -0
- package/dist/drizzle/oauth-connected-target.mjs +91 -0
- package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
- package/dist/drizzle/oauth-drivers.mjs +51 -0
- package/dist/drizzle/oauth-drivers.mjs.map +1 -0
- package/dist/drizzle/oauth-flow.d.mts +5 -0
- package/dist/drizzle/oauth-flow.mjs +253 -0
- package/dist/drizzle/oauth-flow.mjs.map +1 -0
- package/dist/drizzle/oauth-input.mjs +127 -0
- package/dist/drizzle/oauth-input.mjs.map +1 -0
- package/dist/drizzle/oauth-model.d.mts +463 -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 +6 -0
- package/dist/drizzle/oauth-registration.mjs +374 -0
- package/dist/drizzle/oauth-registration.mjs.map +1 -0
- package/dist/drizzle/oauth-state.mjs +107 -0
- package/dist/drizzle/oauth-state.mjs.map +1 -0
- package/dist/drizzle/oauth-target.d.mts +111 -0
- package/dist/drizzle/oauth-target.mjs +246 -0
- package/dist/drizzle/oauth-target.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-kernel.mjs +8 -0
- package/dist/drizzle/passkey-kernel.mjs.map +1 -0
- package/dist/drizzle/passkey-model.d.mts +272 -0
- package/dist/drizzle/passkey-model.mjs +34 -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-state.mjs +7 -0
- package/dist/drizzle/passkey-state.mjs.map +1 -0
- package/dist/drizzle/passkey-target.d.mts +9 -0
- package/dist/drizzle/passkey-target.mjs +7 -0
- package/dist/drizzle/passkey-target.mjs.map +1 -0
- package/dist/drizzle/passkey-write-drivers.mjs +32 -0
- package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
- package/dist/drizzle/passkey-write-model.d.mts +190 -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-target.d.mts +11 -0
- package/dist/drizzle/passkey-write-target.mjs +7 -0
- package/dist/drizzle/passkey-write-target.mjs.map +1 -0
- package/dist/drizzle/password-model.d.mts +329 -0
- package/dist/drizzle/password-model.mjs +23 -0
- package/dist/drizzle/password-model.mjs.map +1 -0
- package/dist/drizzle/password-prepared-model.d.mts +94 -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 +390 -0
- package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
- package/dist/drizzle/password-prepared-state.mjs +104 -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 +56 -0
- package/dist/drizzle/password-prepared-target.mjs.map +1 -0
- package/dist/drizzle/password-registration.d.mts +19 -0
- package/dist/drizzle/password-registration.mjs +135 -0
- package/dist/drizzle/password-registration.mjs.map +1 -0
- package/dist/drizzle/password-sql.d.mts +5 -0
- package/dist/drizzle/password-sql.mjs +9 -0
- package/dist/drizzle/password-sql.mjs.map +1 -0
- package/dist/drizzle/password-target.d.mts +17 -0
- package/dist/drizzle/password-target.mjs +61 -0
- package/dist/drizzle/password-target.mjs.map +1 -0
- package/dist/drizzle/pg-emails.d.mts +72 -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 +31 -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 +87 -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 +76 -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 +238 -0
- package/dist/drizzle/pg-sessions.mjs +53 -0
- package/dist/drizzle/pg-sessions.mjs.map +1 -0
- package/dist/drizzle/pg.d.mts +81 -0
- package/dist/drizzle/pg.mjs +290 -0
- package/dist/drizzle/pg.mjs.map +1 -0
- package/dist/drizzle/phone-model.d.mts +115 -0
- package/dist/drizzle/phone-model.mjs +39 -0
- package/dist/drizzle/phone-model.mjs.map +1 -0
- package/dist/drizzle/phone-state.mjs +16 -0
- package/dist/drizzle/phone-state.mjs.map +1 -0
- package/dist/drizzle/phone-target.d.mts +17 -0
- package/dist/drizzle/phone-target.mjs +170 -0
- package/dist/drizzle/phone-target.mjs.map +1 -0
- package/dist/drizzle/proof-model.d.mts +286 -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 +4 -0
- package/dist/drizzle/proof-sql.mjs +8 -0
- package/dist/drizzle/proof-sql.mjs.map +1 -0
- package/dist/drizzle/proof-target.d.mts +12 -0
- package/dist/drizzle/proof-target.mjs +36 -0
- package/dist/drizzle/proof-target.mjs.map +1 -0
- package/dist/drizzle/query-operations.mjs +26 -0
- package/dist/drizzle/query-operations.mjs.map +1 -0
- package/dist/drizzle/session-model.d.mts +200 -0
- package/dist/drizzle/session-model.mjs +20 -0
- package/dist/drizzle/session-model.mjs.map +1 -0
- package/dist/drizzle/session-sql.mjs +8 -0
- package/dist/drizzle/session-sql.mjs.map +1 -0
- package/dist/drizzle/session-target.d.mts +28 -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 +91 -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 +78 -0
- package/dist/drizzle/sqlite.mjs +217 -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 +32 -0
- package/dist/drizzle/step-up-state.mjs.map +1 -0
- package/dist/drizzle/totp-model.d.mts +84 -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 +38 -0
- package/dist/drizzle/totp-state.mjs +287 -0
- package/dist/drizzle/totp-state.mjs.map +1 -0
- package/dist/drizzle/totp-target.d.mts +17 -0
- package/dist/drizzle/totp-target.mjs +81 -0
- package/dist/drizzle/totp-target.mjs.map +1 -0
- package/dist/drizzle/transaction-execution.d.mts +4 -0
- package/dist/drizzle/transaction-execution.mjs +11 -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 +2 -0
- package/dist/drizzle/transaction-owner.mjs +8 -0
- package/dist/drizzle/transaction-owner.mjs.map +1 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +5 -0
- package/dist/internal/configuration.d.mts +174 -0
- package/dist/internal/configuration.mjs +7 -0
- package/dist/internal/configuration.mjs.map +1 -0
- package/dist/internal/drizzle-migrations.mjs +19 -0
- package/dist/internal/drizzle-migrations.mjs.map +1 -0
- package/dist/internal/drizzle-postgres.mjs +39 -0
- package/dist/internal/drizzle-postgres.mjs.map +1 -0
- package/dist/internal/drizzle-sqlite.mjs +37 -0
- package/dist/internal/drizzle-sqlite.mjs.map +1 -0
- package/dist/internal/email-kernel.d.mts +13 -0
- package/dist/internal/email-kernel.mjs +487 -0
- package/dist/internal/email-kernel.mjs.map +1 -0
- package/dist/internal/mapping-error.d.mts +11 -0
- package/dist/internal/mapping-error.mjs +30 -0
- package/dist/internal/mapping-error.mjs.map +1 -0
- package/dist/internal/passkey/admission.d.mts +7 -0
- package/dist/internal/passkey/admission.mjs +216 -0
- package/dist/internal/passkey/admission.mjs.map +1 -0
- package/dist/internal/passkey/credentials.d.mts +6 -0
- package/dist/internal/passkey/credentials.mjs +249 -0
- package/dist/internal/passkey/credentials.mjs.map +1 -0
- package/dist/internal/passkey/enrollment.mjs +138 -0
- package/dist/internal/passkey/enrollment.mjs.map +1 -0
- package/dist/internal/passkey/flow.d.mts +10 -0
- package/dist/internal/passkey/flow.mjs +452 -0
- package/dist/internal/passkey/flow.mjs.map +1 -0
- package/dist/internal/passkey/management.mjs +231 -0
- package/dist/internal/passkey/management.mjs.map +1 -0
- package/dist/internal/passkey/registration-ceremony.d.mts +9 -0
- package/dist/internal/passkey/registration-ceremony.mjs +129 -0
- package/dist/internal/passkey/registration-ceremony.mjs.map +1 -0
- package/dist/internal/passkey/registration-custody.d.mts +2 -0
- package/dist/internal/passkey/registration-custody.mjs +52 -0
- package/dist/internal/passkey/registration-custody.mjs.map +1 -0
- package/dist/internal/passkey/registration-write.mjs +211 -0
- package/dist/internal/passkey/registration-write.mjs.map +1 -0
- package/dist/internal/passkey/state.d.mts +5 -0
- package/dist/internal/passkey/state.mjs +234 -0
- package/dist/internal/passkey/state.mjs.map +1 -0
- package/dist/internal/passkey/target.d.mts +19 -0
- package/dist/internal/passkey/target.mjs +190 -0
- package/dist/internal/passkey/target.mjs.map +1 -0
- package/dist/internal/passkey/write-state.mjs +345 -0
- package/dist/internal/passkey/write-state.mjs.map +1 -0
- package/dist/internal/passkey/write-target.mjs +192 -0
- package/dist/internal/passkey/write-target.mjs.map +1 -0
- package/dist/internal/passkey-kernel.mjs +49 -0
- package/dist/internal/passkey-kernel.mjs.map +1 -0
- package/dist/internal/passkeys.mjs +367 -0
- package/dist/internal/passkeys.mjs.map +1 -0
- package/dist/internal/password-kernel.d.mts +13 -0
- package/dist/internal/password-kernel.mjs +704 -0
- package/dist/internal/password-kernel.mjs.map +1 -0
- package/dist/internal/persistence.mjs +289 -0
- package/dist/internal/persistence.mjs.map +1 -0
- package/dist/internal/phone-kernel.mjs +434 -0
- package/dist/internal/phone-kernel.mjs.map +1 -0
- package/dist/internal/proof-kernel.d.mts +9 -0
- package/dist/internal/proof-kernel.mjs +619 -0
- package/dist/internal/proof-kernel.mjs.map +1 -0
- package/dist/internal/query-operations.d.mts +3 -0
- package/dist/internal/registration.mjs +65 -0
- package/dist/internal/registration.mjs.map +1 -0
- package/dist/internal/session-kernel.mjs +737 -0
- package/dist/internal/session-kernel.mjs.map +1 -0
- package/dist/internal/sql-persistence.d.mts +11 -0
- package/dist/internal/sql-persistence.mjs +37 -0
- package/dist/internal/sql-persistence.mjs.map +1 -0
- package/dist/internal/sql-query.mjs +207 -0
- package/dist/internal/sql-query.mjs.map +1 -0
- package/dist/internal/sql-table.d.mts +37 -0
- package/dist/internal/sql-table.mjs +71 -0
- package/dist/internal/sql-table.mjs.map +1 -0
- package/dist/internal/storage-mapping.mjs +687 -0
- package/dist/internal/storage-mapping.mjs.map +1 -0
- package/dist/internal/storage-tables.d.mts +914 -0
- package/dist/internal/storage-tables.mjs +387 -0
- package/dist/internal/storage-tables.mjs.map +1 -0
- package/dist/internal/storage-validation.mjs +58 -0
- package/dist/internal/storage-validation.mjs.map +1 -0
- package/dist/internal/transaction-execution-kernel.d.mts +18 -0
- package/dist/internal/transaction-execution-kernel.mjs +118 -0
- package/dist/internal/transaction-execution-kernel.mjs.map +1 -0
- package/dist/internal/transaction-kernel.d.mts +7 -0
- package/dist/internal/transaction-kernel.mjs +260 -0
- package/dist/internal/transaction-kernel.mjs.map +1 -0
- package/package.json +1 -0
- package/src/Drizzle.ts +378 -0
- package/src/DrizzleD1.ts +136 -0
- package/src/DrizzleLibsql.ts +301 -0
- package/src/DrizzleMysql2.ts +184 -0
- package/src/DrizzlePglite.ts +174 -0
- package/src/DrizzlePostgres.ts +174 -0
- package/src/DrizzleSqliteBun.ts +258 -0
- package/src/DrizzleSqliteDo.ts +473 -0
- package/src/DrizzleSqliteNode.ts +259 -0
- package/src/DrizzleSqliteWasm.ts +263 -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 +1829 -0
- package/src/drizzle/d1-generated-statement.ts +129 -0
- package/src/drizzle/d1-identity.ts +375 -0
- package/src/drizzle/d1-oauth.ts +340 -0
- package/src/drizzle/d1-passkey.ts +373 -0
- package/src/drizzle/d1-password-prepared.ts +1270 -0
- package/src/drizzle/d1-passwords.ts +2656 -0
- package/src/drizzle/d1-phone.ts +96 -0
- package/src/drizzle/d1-planning.ts +104 -0
- package/src/drizzle/d1-proofs.ts +2305 -0
- package/src/drizzle/d1-sessions.ts +2857 -0
- package/src/drizzle/d1-totp.ts +78 -0
- package/src/drizzle/email-model.ts +516 -0
- package/src/drizzle/email-registration.ts +698 -0
- package/src/drizzle/email-sql.ts +24 -0
- package/src/drizzle/email-target.ts +243 -0
- package/src/drizzle/model.ts +463 -0
- package/src/drizzle/mysql-emails.ts +321 -0
- package/src/drizzle/mysql-identity.ts +324 -0
- package/src/drizzle/mysql-password-prepared.ts +204 -0
- package/src/drizzle/mysql-passwords.ts +339 -0
- package/src/drizzle/mysql-proofs.ts +181 -0
- package/src/drizzle/mysql-sessions.ts +741 -0
- package/src/drizzle/mysql.ts +687 -0
- package/src/drizzle/oauth-accounts.ts +804 -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 +465 -0
- package/src/drizzle/oauth-connected-flow.ts +441 -0
- package/src/drizzle/oauth-connected-input.ts +127 -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 +845 -0
- package/src/drizzle/oauth-connected-target.ts +264 -0
- package/src/drizzle/oauth-drivers.ts +569 -0
- package/src/drizzle/oauth-flow.ts +462 -0
- package/src/drizzle/oauth-input.ts +201 -0
- package/src/drizzle/oauth-model.ts +617 -0
- package/src/drizzle/oauth-mysql.ts +10 -0
- package/src/drizzle/oauth-owner.ts +29 -0
- package/src/drizzle/oauth-registration.ts +640 -0
- package/src/drizzle/oauth-state.ts +215 -0
- package/src/drizzle/oauth-target.ts +750 -0
- package/src/drizzle/passkey-drivers.ts +385 -0
- package/src/drizzle/passkey-kernel.ts +3 -0
- package/src/drizzle/passkey-model.ts +353 -0
- package/src/drizzle/passkey-registration-ceremony-model.ts +69 -0
- package/src/drizzle/passkey-state.ts +3 -0
- package/src/drizzle/passkey-target.ts +23 -0
- package/src/drizzle/passkey-write-drivers.ts +395 -0
- package/src/drizzle/passkey-write-model.ts +271 -0
- package/src/drizzle/passkey-write-target.ts +9 -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 +1191 -0
- package/src/drizzle/password-prepared-state.ts +231 -0
- package/src/drizzle/password-prepared-target.ts +160 -0
- package/src/drizzle/password-registration.ts +374 -0
- package/src/drizzle/password-sql.ts +12 -0
- package/src/drizzle/password-target.ts +224 -0
- package/src/drizzle/pg-emails.ts +321 -0
- package/src/drizzle/pg-password-prepared.ts +205 -0
- package/src/drizzle/pg-passwords.ts +338 -0
- package/src/drizzle/pg-proofs.ts +191 -0
- package/src/drizzle/pg-sessions.ts +750 -0
- package/src/drizzle/pg.ts +984 -0
- package/src/drizzle/phone-model.ts +190 -0
- package/src/drizzle/phone-state.ts +21 -0
- package/src/drizzle/phone-target.ts +472 -0
- package/src/drizzle/proof-model.ts +398 -0
- package/src/drizzle/proof-sql.ts +9 -0
- package/src/drizzle/proof-target.ts +122 -0
- package/src/drizzle/query-operations.ts +37 -0
- package/src/drizzle/session-model.ts +370 -0
- package/src/drizzle/session-sql.ts +13 -0
- package/src/drizzle/session-target.ts +338 -0
- package/src/drizzle/sqlite-emails.ts +366 -0
- package/src/drizzle/sqlite-identity.ts +344 -0
- package/src/drizzle/sqlite-password-prepared.ts +260 -0
- package/src/drizzle/sqlite-passwords.ts +497 -0
- package/src/drizzle/sqlite-proofs.ts +202 -0
- package/src/drizzle/sqlite-sessions.ts +971 -0
- package/src/drizzle/sqlite.ts +705 -0
- package/src/drizzle/standalone-guard.ts +38 -0
- package/src/drizzle/step-up-model.ts +128 -0
- package/src/drizzle/step-up-state.ts +139 -0
- package/src/drizzle/totp-model.ts +92 -0
- package/src/drizzle/totp-state.ts +525 -0
- package/src/drizzle/totp-target.ts +308 -0
- package/src/drizzle/transaction-execution.ts +12 -0
- package/src/drizzle/transaction-mysql.ts +104 -0
- package/src/drizzle/transaction-owner.ts +10 -0
- package/src/index.ts +4 -0
- package/src/internal/configuration.ts +282 -0
- package/src/internal/drizzle-migrations.ts +30 -0
- package/src/internal/drizzle-postgres.ts +81 -0
- package/src/internal/drizzle-sqlite.ts +79 -0
- package/src/internal/email-kernel.ts +1532 -0
- package/src/internal/mapping-error.ts +36 -0
- package/src/internal/passkey/admission.ts +362 -0
- package/src/internal/passkey/credentials.ts +511 -0
- package/src/internal/passkey/enrollment.ts +326 -0
- package/src/internal/passkey/flow.ts +1062 -0
- package/src/internal/passkey/management.ts +422 -0
- package/src/internal/passkey/registration-ceremony.ts +283 -0
- package/src/internal/passkey/registration-custody.ts +91 -0
- package/src/internal/passkey/registration-write.ts +426 -0
- package/src/internal/passkey/state.ts +354 -0
- package/src/internal/passkey/target.ts +586 -0
- package/src/internal/passkey/write-state.ts +681 -0
- package/src/internal/passkey/write-target.ts +452 -0
- package/src/internal/passkey-kernel.ts +102 -0
- package/src/internal/passkeys.ts +597 -0
- package/src/internal/password-kernel.ts +2122 -0
- package/src/internal/persistence.ts +590 -0
- package/src/internal/phone-kernel.ts +843 -0
- package/src/internal/proof-kernel.ts +1949 -0
- package/src/internal/query-operations.ts +26 -0
- package/src/internal/registration.ts +160 -0
- package/src/internal/session-kernel.ts +2210 -0
- package/src/internal/sql-persistence.ts +45 -0
- package/src/internal/sql-query.ts +298 -0
- package/src/internal/sql-table.ts +89 -0
- package/src/internal/storage-mapping.ts +706 -0
- package/src/internal/storage-tables.ts +408 -0
- package/src/internal/storage-validation.ts +117 -0
- package/src/internal/transaction-execution-kernel.ts +317 -0
- package/src/internal/transaction-kernel.ts +582 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import {
|
|
2
|
+
coordinateCommit,
|
|
3
|
+
hasCommitScope,
|
|
4
|
+
type LifecycleHooks,
|
|
5
|
+
type HookConfigurationError,
|
|
6
|
+
} from "@yielded/auth/Hooks";
|
|
7
|
+
import {
|
|
8
|
+
AuthenticationAuthority,
|
|
9
|
+
SessionUnavailable,
|
|
10
|
+
type PendingAuthentication,
|
|
11
|
+
type SessionRepository,
|
|
12
|
+
type SignedSessionValidity,
|
|
13
|
+
type StatefulSessionPersistence,
|
|
14
|
+
type SessionStepUpPersistence,
|
|
15
|
+
} from "@yielded/auth/Sessions";
|
|
16
|
+
/* oxlint-disable no-explicit-any -- target entrypoints restore each concrete Drizzle database/table type. */
|
|
17
|
+
import { type Context, Effect, Layer } from "effect";
|
|
18
|
+
import type * as SqlError from "effect/unstable/sql/SqlError";
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
makeSqlAuthenticationAuthority,
|
|
22
|
+
makeSqlPendingAuthentication,
|
|
23
|
+
makeSqlSignedValidity,
|
|
24
|
+
makeSqlStatefulSessions,
|
|
25
|
+
makeSqlSessionStepUp,
|
|
26
|
+
CurrentSessionSql,
|
|
27
|
+
type SessionSqlDatabase,
|
|
28
|
+
type SessionSqlOptions,
|
|
29
|
+
} from "./session-sql";
|
|
30
|
+
import { sqlClientStandaloneGuard } from "./standalone-guard";
|
|
31
|
+
|
|
32
|
+
export interface SessionTargetConfiguration {
|
|
33
|
+
readonly mode: "interactive" | "synchronous";
|
|
34
|
+
readonly locking: boolean;
|
|
35
|
+
readonly standaloneGuard: Effect.Effect<void, SessionUnavailable>;
|
|
36
|
+
readonly coordinatorGuard?: Effect.Effect<void, SessionUnavailable>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface TransactionOwner<Transaction> {
|
|
40
|
+
readonly transaction: <A, E, R>(
|
|
41
|
+
body: (transaction: Transaction) => Effect.Effect<A, E, R>,
|
|
42
|
+
) => Effect.Effect<A, E | SqlError.SqlError, R>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
type CoordinatorError<E> = E | SessionUnavailable | HookConfigurationError | SqlError.SqlError;
|
|
46
|
+
|
|
47
|
+
export const sqlClientSessionStandaloneGuard = (
|
|
48
|
+
database: unknown,
|
|
49
|
+
): Effect.Effect<void, SessionUnavailable> =>
|
|
50
|
+
sqlClientStandaloneGuard(database, () => SessionUnavailable.make({}));
|
|
51
|
+
|
|
52
|
+
const options = (
|
|
53
|
+
configuration: SessionTargetConfiguration,
|
|
54
|
+
transactionBound = false,
|
|
55
|
+
): SessionSqlOptions => ({
|
|
56
|
+
mode: configuration.mode,
|
|
57
|
+
locking: configuration.locking,
|
|
58
|
+
standaloneGuard: transactionBound ? Effect.void : configuration.standaloneGuard,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export const makeTargetAuthenticationAuthorityServices = <Claims>(
|
|
62
|
+
database: any,
|
|
63
|
+
mapping: any,
|
|
64
|
+
configuration: SessionTargetConfiguration,
|
|
65
|
+
) =>
|
|
66
|
+
Effect.map(
|
|
67
|
+
makeSqlAuthenticationAuthority<Claims>(database, mapping, options(configuration)),
|
|
68
|
+
(authenticationAuthority) => ({ authenticationAuthority }),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
export const makeTargetPendingAuthenticationServices = <Claims>(
|
|
72
|
+
database: any,
|
|
73
|
+
mapping: any,
|
|
74
|
+
configuration: SessionTargetConfiguration,
|
|
75
|
+
) =>
|
|
76
|
+
Effect.map(
|
|
77
|
+
makeSqlPendingAuthentication<Claims>(database, mapping, options(configuration)),
|
|
78
|
+
(pendingAuthentication) => ({ pendingAuthentication }),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
export const makeTargetStatefulSessionServices = <Claims>(
|
|
82
|
+
database: any,
|
|
83
|
+
mapping: any,
|
|
84
|
+
configuration: SessionTargetConfiguration,
|
|
85
|
+
) => makeSqlStatefulSessions<Claims>(database, mapping, options(configuration));
|
|
86
|
+
|
|
87
|
+
export const makeTargetSignedSessionValidityServices = (
|
|
88
|
+
database: any,
|
|
89
|
+
mapping: any,
|
|
90
|
+
configuration: SessionTargetConfiguration,
|
|
91
|
+
) =>
|
|
92
|
+
Effect.map(
|
|
93
|
+
makeSqlSignedValidity(database, mapping, options(configuration)),
|
|
94
|
+
(signedSessionValidity) => ({
|
|
95
|
+
signedSessionValidity,
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The native transaction is the root commit owner. Interruption or owner
|
|
101
|
+
* failure rolls it back and discards the child journal; this adapter performs
|
|
102
|
+
* no hidden retry. A caller that can safely retry must rerun the complete owner
|
|
103
|
+
* operation and prepare fresh bearer material. The low-level coordinator keeps
|
|
104
|
+
* caller failures intact, including Drizzle query wrappers, and exposes a
|
|
105
|
+
* native `SqlError` when transaction acquisition fails. Captured service
|
|
106
|
+
* operations normalize their own driver failures to `SessionUnavailable`.
|
|
107
|
+
*/
|
|
108
|
+
const coordinate = <Transaction, Services, A, E, R>(
|
|
109
|
+
database: TransactionOwner<Transaction>,
|
|
110
|
+
configuration: SessionTargetConfiguration,
|
|
111
|
+
make: (transaction: Transaction) => Effect.Effect<Services, never, LifecycleHooks>,
|
|
112
|
+
owner: (transaction: Transaction, services: Services) => Effect.Effect<A, E, R>,
|
|
113
|
+
): Effect.Effect<A, CoordinatorError<E>, R | LifecycleHooks> =>
|
|
114
|
+
Effect.gen(function* (): Effect.fn.Return<A, CoordinatorError<E>, R | LifecycleHooks> {
|
|
115
|
+
if (yield* hasCommitScope) return yield* SessionUnavailable.make({});
|
|
116
|
+
yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;
|
|
117
|
+
|
|
118
|
+
const result = yield* coordinateCommit(
|
|
119
|
+
() =>
|
|
120
|
+
database.transaction((transaction) =>
|
|
121
|
+
Effect.gen(function* () {
|
|
122
|
+
const services = yield* make(transaction);
|
|
123
|
+
|
|
124
|
+
return yield* owner(transaction, services);
|
|
125
|
+
}).pipe(
|
|
126
|
+
Effect.provideService(CurrentSessionSql, transaction as unknown as SessionSqlDatabase),
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
{ mode: configuration.mode },
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
return result.value;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
export const coordinateTargetAuthenticationAuthority = <Claims, Transaction, A, E, R>(
|
|
136
|
+
database: TransactionOwner<Transaction>,
|
|
137
|
+
mapping: any,
|
|
138
|
+
configuration: SessionTargetConfiguration,
|
|
139
|
+
owner: (
|
|
140
|
+
transaction: Transaction,
|
|
141
|
+
services: { readonly authenticationAuthority: AuthenticationAuthority["Service"] },
|
|
142
|
+
) => Effect.Effect<A, E, R>,
|
|
143
|
+
) =>
|
|
144
|
+
coordinate(
|
|
145
|
+
database,
|
|
146
|
+
configuration,
|
|
147
|
+
(transaction) =>
|
|
148
|
+
Effect.map(
|
|
149
|
+
makeSqlAuthenticationAuthority<Claims>(
|
|
150
|
+
transaction as unknown as SessionSqlDatabase,
|
|
151
|
+
mapping,
|
|
152
|
+
options(configuration, true),
|
|
153
|
+
),
|
|
154
|
+
(authenticationAuthority) => ({ authenticationAuthority }),
|
|
155
|
+
),
|
|
156
|
+
owner,
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
export const coordinateTargetPendingAuthentication = <Claims, Transaction, A, E, R>(
|
|
160
|
+
database: TransactionOwner<Transaction>,
|
|
161
|
+
mapping: any,
|
|
162
|
+
configuration: SessionTargetConfiguration,
|
|
163
|
+
owner: (
|
|
164
|
+
transaction: Transaction,
|
|
165
|
+
services: { readonly pendingAuthentication: PendingAuthentication<Claims> },
|
|
166
|
+
) => Effect.Effect<A, E, R>,
|
|
167
|
+
) =>
|
|
168
|
+
coordinate(
|
|
169
|
+
database,
|
|
170
|
+
configuration,
|
|
171
|
+
(transaction) =>
|
|
172
|
+
Effect.map(
|
|
173
|
+
makeSqlPendingAuthentication<Claims>(
|
|
174
|
+
transaction as unknown as SessionSqlDatabase,
|
|
175
|
+
mapping,
|
|
176
|
+
options(configuration, true),
|
|
177
|
+
),
|
|
178
|
+
(pendingAuthentication) => ({ pendingAuthentication }),
|
|
179
|
+
),
|
|
180
|
+
owner,
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
export const coordinateTargetStatefulSessions = <Claims, Transaction, A, E, R>(
|
|
184
|
+
database: TransactionOwner<Transaction>,
|
|
185
|
+
mapping: any,
|
|
186
|
+
configuration: SessionTargetConfiguration,
|
|
187
|
+
owner: (
|
|
188
|
+
transaction: Transaction,
|
|
189
|
+
services: {
|
|
190
|
+
readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;
|
|
191
|
+
readonly sessionRepository: SessionRepository;
|
|
192
|
+
},
|
|
193
|
+
) => Effect.Effect<A, E, R>,
|
|
194
|
+
) =>
|
|
195
|
+
coordinate(
|
|
196
|
+
database,
|
|
197
|
+
configuration,
|
|
198
|
+
(transaction) =>
|
|
199
|
+
makeSqlStatefulSessions<Claims>(
|
|
200
|
+
transaction as unknown as SessionSqlDatabase,
|
|
201
|
+
mapping,
|
|
202
|
+
options(configuration, true),
|
|
203
|
+
),
|
|
204
|
+
owner,
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
export const coordinateTargetSignedSessionValidity = <Transaction, A, E, R>(
|
|
208
|
+
database: TransactionOwner<Transaction>,
|
|
209
|
+
mapping: any,
|
|
210
|
+
configuration: SessionTargetConfiguration,
|
|
211
|
+
owner: (
|
|
212
|
+
transaction: Transaction,
|
|
213
|
+
services: { readonly signedSessionValidity: SignedSessionValidity },
|
|
214
|
+
) => Effect.Effect<A, E, R>,
|
|
215
|
+
) =>
|
|
216
|
+
coordinate(
|
|
217
|
+
database,
|
|
218
|
+
configuration,
|
|
219
|
+
(transaction) =>
|
|
220
|
+
Effect.map(
|
|
221
|
+
makeSqlSignedValidity(
|
|
222
|
+
transaction as unknown as SessionSqlDatabase,
|
|
223
|
+
mapping,
|
|
224
|
+
options(configuration, true),
|
|
225
|
+
),
|
|
226
|
+
(signedSessionValidity) => ({ signedSessionValidity }),
|
|
227
|
+
),
|
|
228
|
+
owner,
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
export const authenticationAuthorityLayer = (
|
|
232
|
+
services: Effect.Effect<
|
|
233
|
+
{
|
|
234
|
+
readonly authenticationAuthority: AuthenticationAuthority["Service"];
|
|
235
|
+
},
|
|
236
|
+
never,
|
|
237
|
+
LifecycleHooks
|
|
238
|
+
>,
|
|
239
|
+
) =>
|
|
240
|
+
Layer.effect(
|
|
241
|
+
AuthenticationAuthority,
|
|
242
|
+
Effect.map(services, (value) => value.authenticationAuthority),
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
export const statefulSessionLayers = <Claims>(
|
|
246
|
+
module: {
|
|
247
|
+
readonly StatefulSessionPersistence: any;
|
|
248
|
+
readonly SessionRepository: any;
|
|
249
|
+
},
|
|
250
|
+
services: Effect.Effect<
|
|
251
|
+
{
|
|
252
|
+
readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;
|
|
253
|
+
readonly sessionRepository: SessionRepository;
|
|
254
|
+
},
|
|
255
|
+
never,
|
|
256
|
+
LifecycleHooks
|
|
257
|
+
>,
|
|
258
|
+
) =>
|
|
259
|
+
Layer.merge(
|
|
260
|
+
Layer.effect(
|
|
261
|
+
module.StatefulSessionPersistence,
|
|
262
|
+
Effect.map(services, (value) => value.statefulSessionPersistence),
|
|
263
|
+
),
|
|
264
|
+
Layer.effect(
|
|
265
|
+
module.SessionRepository,
|
|
266
|
+
Effect.map(services, (value) => value.sessionRepository),
|
|
267
|
+
),
|
|
268
|
+
);
|
|
269
|
+
|
|
270
|
+
export const pendingAuthenticationLayer = <Claims>(
|
|
271
|
+
module: { readonly PendingAuthentication: any },
|
|
272
|
+
services: Effect.Effect<
|
|
273
|
+
{
|
|
274
|
+
readonly pendingAuthentication: PendingAuthentication<Claims>;
|
|
275
|
+
},
|
|
276
|
+
never,
|
|
277
|
+
LifecycleHooks
|
|
278
|
+
>,
|
|
279
|
+
) =>
|
|
280
|
+
Layer.effect(
|
|
281
|
+
module.PendingAuthentication,
|
|
282
|
+
Effect.map(services, (value) => value.pendingAuthentication),
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
export const signedSessionValidityLayer = (
|
|
286
|
+
module: { readonly SignedSessionValidity: any },
|
|
287
|
+
services: Effect.Effect<
|
|
288
|
+
{
|
|
289
|
+
readonly signedSessionValidity: SignedSessionValidity;
|
|
290
|
+
},
|
|
291
|
+
never,
|
|
292
|
+
LifecycleHooks
|
|
293
|
+
>,
|
|
294
|
+
) =>
|
|
295
|
+
Layer.effect(
|
|
296
|
+
module.SignedSessionValidity,
|
|
297
|
+
Effect.map(services, (value) => value.signedSessionValidity),
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
export const makeTargetSessionStepUpServices = <Claims, Id>(
|
|
301
|
+
database: any,
|
|
302
|
+
mapping: any,
|
|
303
|
+
target: Context.Service<Id, SessionStepUpPersistence<Claims>>,
|
|
304
|
+
configuration: SessionTargetConfiguration,
|
|
305
|
+
) =>
|
|
306
|
+
Effect.map(
|
|
307
|
+
makeSqlSessionStepUp<Claims>(database, mapping, options(configuration)),
|
|
308
|
+
(sessionStepUpPersistence) => ({
|
|
309
|
+
sessionStepUpPersistence: target.of(sessionStepUpPersistence),
|
|
310
|
+
}),
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
export const coordinateTargetSessionStepUp = <Claims, Id, Transaction, A, E, R>(
|
|
314
|
+
database: TransactionOwner<Transaction>,
|
|
315
|
+
mapping: any,
|
|
316
|
+
target: Context.Service<Id, SessionStepUpPersistence<Claims>>,
|
|
317
|
+
configuration: SessionTargetConfiguration,
|
|
318
|
+
owner: (
|
|
319
|
+
transaction: Transaction,
|
|
320
|
+
services: { readonly sessionStepUpPersistence: SessionStepUpPersistence<Claims> },
|
|
321
|
+
) => Effect.Effect<A, E, R>,
|
|
322
|
+
) =>
|
|
323
|
+
coordinate(
|
|
324
|
+
database,
|
|
325
|
+
configuration,
|
|
326
|
+
(transaction) =>
|
|
327
|
+
Effect.map(
|
|
328
|
+
makeSqlSessionStepUp<Claims>(
|
|
329
|
+
transaction as unknown as SessionSqlDatabase,
|
|
330
|
+
mapping,
|
|
331
|
+
options(configuration, true),
|
|
332
|
+
),
|
|
333
|
+
(sessionStepUpPersistence) => ({
|
|
334
|
+
sessionStepUpPersistence: target.of(sessionStepUpPersistence),
|
|
335
|
+
}),
|
|
336
|
+
),
|
|
337
|
+
owner,
|
|
338
|
+
);
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { EmailAddressPersistence, type EmailUnavailable } from "@yielded/auth/Email";
|
|
2
|
+
import type { LifecycleHooks, HookConfigurationError } from "@yielded/auth/Hooks";
|
|
3
|
+
/* oxlint-disable no-explicit-any -- proof mapping tables are independently typed by the proof owner; this driver forwards them unchanged to the shared target. */
|
|
4
|
+
import type { AnyRelations } from "drizzle-orm";
|
|
5
|
+
import type { EffectLibsqlDatabase } from "drizzle-orm/effect-libsql";
|
|
6
|
+
import type { EffectSQLiteBunDatabase } from "drizzle-orm/effect-sqlite-bun";
|
|
7
|
+
import type { EffectSQLiteDoDatabase as DODatabase } from "drizzle-orm/effect-sqlite-do";
|
|
8
|
+
import type { EffectSQLiteNodeDatabase as NodeDatabase } from "drizzle-orm/effect-sqlite-node";
|
|
9
|
+
import type { EffectSQLiteWasmDatabase as WasmDatabase } from "drizzle-orm/effect-sqlite-wasm";
|
|
10
|
+
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
11
|
+
import { Effect, Context } from "effect";
|
|
12
|
+
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
13
|
+
|
|
14
|
+
import type {
|
|
15
|
+
EmailAddressMapping,
|
|
16
|
+
EmailRegistrationMapping,
|
|
17
|
+
EmailSignInMapping,
|
|
18
|
+
} from "./email-model";
|
|
19
|
+
import type { EmailRegistrationAuthority } from "./email-registration";
|
|
20
|
+
import type { EmailSqlQuery } from "./email-sql";
|
|
21
|
+
import {
|
|
22
|
+
coordinateTargetEmailAddress,
|
|
23
|
+
coordinateTargetEmailRegistration,
|
|
24
|
+
makeTargetEmailAddressServices,
|
|
25
|
+
makeTargetEmailRegistrationServices,
|
|
26
|
+
makeTargetEmailSignInServices,
|
|
27
|
+
type EmailTargetConfiguration,
|
|
28
|
+
} from "./email-target";
|
|
29
|
+
import type { ProofPersistenceMapping } from "./proof-model";
|
|
30
|
+
import type { ProofSqlQuery } from "./proof-sql";
|
|
31
|
+
import type { SuppliedService } from "./SuppliedService";
|
|
32
|
+
|
|
33
|
+
export type SqliteEmailDatabase =
|
|
34
|
+
| NodeDatabase<AnyRelations>
|
|
35
|
+
| EffectSQLiteBunDatabase<AnyRelations>
|
|
36
|
+
| EffectLibsqlDatabase<AnyRelations>
|
|
37
|
+
| WasmDatabase<AnyRelations>
|
|
38
|
+
| DODatabase<AnyRelations>;
|
|
39
|
+
|
|
40
|
+
type TransactionOf<D extends SqliteEmailDatabase> = Parameters<Parameters<D["transaction"]>[0]>[0];
|
|
41
|
+
type ProofMapping = ProofPersistenceMapping<
|
|
42
|
+
any,
|
|
43
|
+
any,
|
|
44
|
+
any,
|
|
45
|
+
any,
|
|
46
|
+
any,
|
|
47
|
+
any,
|
|
48
|
+
any,
|
|
49
|
+
any,
|
|
50
|
+
any,
|
|
51
|
+
any,
|
|
52
|
+
any,
|
|
53
|
+
any
|
|
54
|
+
>;
|
|
55
|
+
|
|
56
|
+
export const sqliteEmailConfiguration = (
|
|
57
|
+
mode: "interactive" | "synchronous",
|
|
58
|
+
standaloneGuard: EmailTargetConfiguration["standaloneGuard"],
|
|
59
|
+
proofStandaloneGuard: EmailTargetConfiguration["proof"]["standaloneGuard"],
|
|
60
|
+
coordinatorGuard?: EmailTargetConfiguration["coordinatorGuard"],
|
|
61
|
+
): EmailTargetConfiguration => ({
|
|
62
|
+
mode,
|
|
63
|
+
locking: false,
|
|
64
|
+
standaloneGuard,
|
|
65
|
+
...(coordinatorGuard === undefined ? {} : { coordinatorGuard }),
|
|
66
|
+
generatedSubjectRows: (query: EmailSqlQuery) => query.returning(),
|
|
67
|
+
proof: {
|
|
68
|
+
mode,
|
|
69
|
+
locking: false,
|
|
70
|
+
standaloneGuard: proofStandaloneGuard,
|
|
71
|
+
insertIfAbsent: (query: ProofSqlQuery) => query.onConflictDoNothing(),
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export const makeSqliteEmailTarget = <
|
|
76
|
+
D extends SqliteEmailDatabase,
|
|
77
|
+
Synchronous extends boolean = false,
|
|
78
|
+
>(
|
|
79
|
+
configuration: EmailTargetConfiguration | ((database: D) => EmailTargetConfiguration),
|
|
80
|
+
) => {
|
|
81
|
+
const configurationFor = (database: D) =>
|
|
82
|
+
typeof configuration === "function" ? configuration(database) : configuration;
|
|
83
|
+
|
|
84
|
+
function coordinateEmailAddress<
|
|
85
|
+
Database extends D,
|
|
86
|
+
S extends AnySQLiteTable,
|
|
87
|
+
I extends AnySQLiteTable,
|
|
88
|
+
C extends AnySQLiteTable,
|
|
89
|
+
AC extends AnySQLiteTable,
|
|
90
|
+
M extends AnySQLiteTable,
|
|
91
|
+
NativeId,
|
|
92
|
+
Out,
|
|
93
|
+
E,
|
|
94
|
+
R,
|
|
95
|
+
DatabaseError,
|
|
96
|
+
DatabaseRequirements,
|
|
97
|
+
>(
|
|
98
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
99
|
+
options: {
|
|
100
|
+
readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;
|
|
101
|
+
readonly proofMapping: ProofMapping;
|
|
102
|
+
readonly transaction?: never;
|
|
103
|
+
},
|
|
104
|
+
body: Effect.Effect<Out, E, Synchronous extends true ? NoInfer<EmailAddressPersistence> : R>,
|
|
105
|
+
): Effect.Effect<
|
|
106
|
+
Out,
|
|
107
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
108
|
+
| (Synchronous extends true ? never : Exclude<R, EmailAddressPersistence>)
|
|
109
|
+
| LifecycleHooks
|
|
110
|
+
| DatabaseRequirements
|
|
111
|
+
>;
|
|
112
|
+
function coordinateEmailAddress<
|
|
113
|
+
Database extends D,
|
|
114
|
+
S extends AnySQLiteTable,
|
|
115
|
+
I extends AnySQLiteTable,
|
|
116
|
+
C extends AnySQLiteTable,
|
|
117
|
+
AC extends AnySQLiteTable,
|
|
118
|
+
M extends AnySQLiteTable,
|
|
119
|
+
NativeId,
|
|
120
|
+
Out,
|
|
121
|
+
E,
|
|
122
|
+
R,
|
|
123
|
+
DatabaseError,
|
|
124
|
+
DatabaseRequirements,
|
|
125
|
+
TxId,
|
|
126
|
+
TxShape,
|
|
127
|
+
>(
|
|
128
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
129
|
+
options: {
|
|
130
|
+
readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;
|
|
131
|
+
readonly proofMapping: ProofMapping;
|
|
132
|
+
readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
|
|
133
|
+
},
|
|
134
|
+
body: Effect.Effect<
|
|
135
|
+
Out,
|
|
136
|
+
E,
|
|
137
|
+
Synchronous extends true ? NoInfer<EmailAddressPersistence | TxId> : R
|
|
138
|
+
>,
|
|
139
|
+
): Effect.Effect<
|
|
140
|
+
Out,
|
|
141
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
142
|
+
| (Synchronous extends true ? never : Exclude<R, EmailAddressPersistence | TxId>)
|
|
143
|
+
| LifecycleHooks
|
|
144
|
+
| DatabaseRequirements
|
|
145
|
+
>;
|
|
146
|
+
function coordinateEmailAddress<
|
|
147
|
+
Database extends D,
|
|
148
|
+
S extends AnySQLiteTable,
|
|
149
|
+
I extends AnySQLiteTable,
|
|
150
|
+
C extends AnySQLiteTable,
|
|
151
|
+
AC extends AnySQLiteTable,
|
|
152
|
+
M extends AnySQLiteTable,
|
|
153
|
+
NativeId,
|
|
154
|
+
Out,
|
|
155
|
+
E,
|
|
156
|
+
R,
|
|
157
|
+
DatabaseError,
|
|
158
|
+
DatabaseRequirements,
|
|
159
|
+
TxId,
|
|
160
|
+
TxShape,
|
|
161
|
+
>(
|
|
162
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
163
|
+
options: {
|
|
164
|
+
readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;
|
|
165
|
+
readonly proofMapping: ProofMapping;
|
|
166
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
|
|
167
|
+
},
|
|
168
|
+
body: Effect.Effect<Out, E, R>,
|
|
169
|
+
): Effect.Effect<
|
|
170
|
+
Out,
|
|
171
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
172
|
+
Exclude<R, EmailAddressPersistence> | LifecycleHooks | DatabaseRequirements
|
|
173
|
+
> {
|
|
174
|
+
return Effect.flatMap(acquire, (database) =>
|
|
175
|
+
coordinateTargetEmailAddress<
|
|
176
|
+
TransactionOf<Database>,
|
|
177
|
+
Out,
|
|
178
|
+
E,
|
|
179
|
+
Exclude<R, EmailAddressPersistence>
|
|
180
|
+
>(
|
|
181
|
+
database,
|
|
182
|
+
options.mapping,
|
|
183
|
+
options.proofMapping,
|
|
184
|
+
configurationFor(database),
|
|
185
|
+
(
|
|
186
|
+
transaction: TransactionOf<Database>,
|
|
187
|
+
services: { readonly emailAddressPersistence: EmailAddressPersistence["Service"] },
|
|
188
|
+
) => {
|
|
189
|
+
const provided = Context.make(EmailAddressPersistence, services.emailAddressPersistence);
|
|
190
|
+
const work = Effect.provideContext(body, provided);
|
|
191
|
+
|
|
192
|
+
return options.transaction === undefined
|
|
193
|
+
? work
|
|
194
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
195
|
+
},
|
|
196
|
+
),
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
function coordinateEmailRegistration<
|
|
200
|
+
Database extends D,
|
|
201
|
+
TargetId,
|
|
202
|
+
Registration,
|
|
203
|
+
S extends AnySQLiteTable,
|
|
204
|
+
I extends AnySQLiteTable,
|
|
205
|
+
C extends AnySQLiteTable,
|
|
206
|
+
AC extends AnySQLiteTable,
|
|
207
|
+
Rq extends AnySQLiteTable,
|
|
208
|
+
NativeId,
|
|
209
|
+
Out,
|
|
210
|
+
E,
|
|
211
|
+
R,
|
|
212
|
+
DatabaseError,
|
|
213
|
+
DatabaseRequirements,
|
|
214
|
+
>(
|
|
215
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
216
|
+
options: {
|
|
217
|
+
readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;
|
|
218
|
+
readonly proofMapping: ProofMapping;
|
|
219
|
+
readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;
|
|
220
|
+
readonly transaction?: never;
|
|
221
|
+
},
|
|
222
|
+
body: Effect.Effect<Out, E, Synchronous extends true ? NoInfer<TargetId> : R>,
|
|
223
|
+
): Effect.Effect<
|
|
224
|
+
Out,
|
|
225
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
226
|
+
| (Synchronous extends true ? never : Exclude<R, TargetId>)
|
|
227
|
+
| LifecycleHooks
|
|
228
|
+
| DatabaseRequirements
|
|
229
|
+
>;
|
|
230
|
+
function coordinateEmailRegistration<
|
|
231
|
+
Database extends D,
|
|
232
|
+
TargetId,
|
|
233
|
+
Registration,
|
|
234
|
+
S extends AnySQLiteTable,
|
|
235
|
+
I extends AnySQLiteTable,
|
|
236
|
+
C extends AnySQLiteTable,
|
|
237
|
+
AC extends AnySQLiteTable,
|
|
238
|
+
Rq extends AnySQLiteTable,
|
|
239
|
+
NativeId,
|
|
240
|
+
Out,
|
|
241
|
+
E,
|
|
242
|
+
R,
|
|
243
|
+
DatabaseError,
|
|
244
|
+
DatabaseRequirements,
|
|
245
|
+
TxId,
|
|
246
|
+
TxShape,
|
|
247
|
+
>(
|
|
248
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
249
|
+
options: {
|
|
250
|
+
readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;
|
|
251
|
+
readonly proofMapping: ProofMapping;
|
|
252
|
+
readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;
|
|
253
|
+
readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
|
|
254
|
+
},
|
|
255
|
+
body: Effect.Effect<Out, E, Synchronous extends true ? NoInfer<TargetId | TxId> : R>,
|
|
256
|
+
): Effect.Effect<
|
|
257
|
+
Out,
|
|
258
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
259
|
+
| (Synchronous extends true ? never : Exclude<R, TargetId | TxId>)
|
|
260
|
+
| LifecycleHooks
|
|
261
|
+
| DatabaseRequirements
|
|
262
|
+
>;
|
|
263
|
+
function coordinateEmailRegistration<
|
|
264
|
+
Database extends D,
|
|
265
|
+
TargetId,
|
|
266
|
+
Registration,
|
|
267
|
+
S extends AnySQLiteTable,
|
|
268
|
+
I extends AnySQLiteTable,
|
|
269
|
+
C extends AnySQLiteTable,
|
|
270
|
+
AC extends AnySQLiteTable,
|
|
271
|
+
Rq extends AnySQLiteTable,
|
|
272
|
+
NativeId,
|
|
273
|
+
Out,
|
|
274
|
+
E,
|
|
275
|
+
R,
|
|
276
|
+
DatabaseError,
|
|
277
|
+
DatabaseRequirements,
|
|
278
|
+
TxId,
|
|
279
|
+
TxShape,
|
|
280
|
+
>(
|
|
281
|
+
acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
|
|
282
|
+
options: {
|
|
283
|
+
readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;
|
|
284
|
+
readonly proofMapping: ProofMapping;
|
|
285
|
+
readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;
|
|
286
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
|
|
287
|
+
},
|
|
288
|
+
body: Effect.Effect<Out, E, R>,
|
|
289
|
+
): Effect.Effect<
|
|
290
|
+
Out,
|
|
291
|
+
E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,
|
|
292
|
+
Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements
|
|
293
|
+
> {
|
|
294
|
+
return Effect.flatMap(acquire, (database) =>
|
|
295
|
+
coordinateTargetEmailRegistration<
|
|
296
|
+
Registration,
|
|
297
|
+
TransactionOf<Database>,
|
|
298
|
+
Out,
|
|
299
|
+
E,
|
|
300
|
+
Exclude<R, TargetId>
|
|
301
|
+
>(
|
|
302
|
+
database,
|
|
303
|
+
options.mapping,
|
|
304
|
+
options.proofMapping,
|
|
305
|
+
configurationFor(database),
|
|
306
|
+
(
|
|
307
|
+
transaction: TransactionOf<Database>,
|
|
308
|
+
services: { readonly registrationAuthority: EmailRegistrationAuthority<Registration> },
|
|
309
|
+
) => {
|
|
310
|
+
const provided = Context.make(options.target, services.registrationAuthority);
|
|
311
|
+
const work = Effect.provideContext(body, provided);
|
|
312
|
+
|
|
313
|
+
return options.transaction === undefined
|
|
314
|
+
? work
|
|
315
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
316
|
+
},
|
|
317
|
+
),
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return {
|
|
322
|
+
makeEmailSignInServices: <
|
|
323
|
+
S extends AnySQLiteTable,
|
|
324
|
+
I extends AnySQLiteTable,
|
|
325
|
+
C extends AnySQLiteTable,
|
|
326
|
+
NativeId,
|
|
327
|
+
>(
|
|
328
|
+
database: D,
|
|
329
|
+
mapping: EmailSignInMapping<S, I, C, NativeId>,
|
|
330
|
+
) => makeTargetEmailSignInServices(database, mapping, configurationFor(database)),
|
|
331
|
+
makeEmailAddressServices: <
|
|
332
|
+
S extends AnySQLiteTable,
|
|
333
|
+
I extends AnySQLiteTable,
|
|
334
|
+
C extends AnySQLiteTable,
|
|
335
|
+
AC extends AnySQLiteTable,
|
|
336
|
+
M extends AnySQLiteTable,
|
|
337
|
+
NativeId,
|
|
338
|
+
>(
|
|
339
|
+
database: D,
|
|
340
|
+
mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>,
|
|
341
|
+
proofMapping: ProofMapping,
|
|
342
|
+
) =>
|
|
343
|
+
makeTargetEmailAddressServices(database, mapping, proofMapping, configurationFor(database)),
|
|
344
|
+
coordinateEmailAddress,
|
|
345
|
+
makeEmailRegistrationServices: <
|
|
346
|
+
Registration,
|
|
347
|
+
S extends AnySQLiteTable,
|
|
348
|
+
I extends AnySQLiteTable,
|
|
349
|
+
C extends AnySQLiteTable,
|
|
350
|
+
AC extends AnySQLiteTable,
|
|
351
|
+
Rq extends AnySQLiteTable,
|
|
352
|
+
NativeId,
|
|
353
|
+
>(
|
|
354
|
+
database: D,
|
|
355
|
+
mapping: EmailRegistrationMapping<Registration, S, I, C, AC, Rq, NativeId>,
|
|
356
|
+
proofMapping: ProofMapping,
|
|
357
|
+
) =>
|
|
358
|
+
makeTargetEmailRegistrationServices<Registration>(
|
|
359
|
+
database,
|
|
360
|
+
mapping,
|
|
361
|
+
proofMapping,
|
|
362
|
+
configurationFor(database),
|
|
363
|
+
),
|
|
364
|
+
coordinateEmailRegistration,
|
|
365
|
+
};
|
|
366
|
+
};
|