@yielded/auth-persistence-drizzle 0.1.0-beta.24 → 0.1.0-beta.26
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 +4 -2
- package/dist/D1.d.mts +495 -1151
- package/dist/D1.mjs +41 -19
- package/dist/D1.mjs.map +1 -1
- package/dist/Libsql.d.mts +385 -1996
- package/dist/Libsql.mjs +43 -47
- package/dist/Libsql.mjs.map +1 -1
- package/dist/Mysql2.d.mts +397 -1743
- package/dist/Mysql2.mjs +35 -41
- package/dist/Mysql2.mjs.map +1 -1
- package/dist/Pglite.d.mts +397 -1743
- package/dist/Pglite.mjs +42 -31
- package/dist/Pglite.mjs.map +1 -1
- package/dist/Postgres.d.mts +397 -1743
- package/dist/Postgres.mjs +42 -31
- package/dist/Postgres.mjs.map +1 -1
- package/dist/SqliteBun.d.mts +385 -1992
- package/dist/SqliteBun.mjs +43 -43
- package/dist/SqliteBun.mjs.map +1 -1
- package/dist/SqliteDo.d.mts +385 -1991
- package/dist/SqliteDo.mjs +42 -41
- package/dist/SqliteDo.mjs.map +1 -1
- package/dist/SqliteNode.d.mts +385 -1992
- package/dist/SqliteNode.mjs +43 -43
- package/dist/SqliteNode.mjs.map +1 -1
- package/dist/SqliteWasm.d.mts +385 -1992
- package/dist/SqliteWasm.mjs +43 -43
- package/dist/SqliteWasm.mjs.map +1 -1
- package/dist/drizzle/d1-identity.mjs +2 -2
- package/dist/drizzle/d1-identity.mjs.map +1 -1
- package/dist/drizzle/driver-types.d.mts +15 -0
- package/dist/drizzle/email-drivers.mjs +32 -0
- package/dist/drizzle/email-drivers.mjs.map +1 -0
- package/dist/drizzle/email-model.d.mts +9 -13
- package/dist/drizzle/email-target.d.mts +10 -11
- package/dist/drizzle/email-target.mjs +33 -70
- package/dist/drizzle/email-target.mjs.map +1 -1
- package/dist/drizzle/model.d.mts +1 -10
- package/dist/drizzle/model.mjs +1 -2
- package/dist/drizzle/model.mjs.map +1 -1
- package/dist/drizzle/mysql-identity.mjs +3 -6
- package/dist/drizzle/mysql-identity.mjs.map +1 -1
- package/dist/drizzle/native-clock.d.mts +9 -0
- package/dist/drizzle/native-clock.mjs +18 -0
- package/dist/drizzle/native-clock.mjs.map +1 -0
- package/dist/drizzle/native-database.d.mts +46 -0
- package/dist/drizzle/native-database.mjs +6 -5
- package/dist/drizzle/native-database.mjs.map +1 -1
- package/dist/drizzle/native-sql-table.mjs +13 -5
- package/dist/drizzle/native-sql-table.mjs.map +1 -1
- package/dist/drizzle/native-target.d.mts +6 -0
- package/dist/drizzle/native-target.mjs +44 -0
- package/dist/drizzle/native-target.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-drivers.mjs +4 -56
- package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
- package/dist/drizzle/oauth-connected-model.d.mts +5 -22
- package/dist/drizzle/oauth-connected-model.mjs +1 -7
- package/dist/drizzle/oauth-connected-reference.d.mts +5 -7
- package/dist/drizzle/oauth-connected-reference.mjs +11 -3
- package/dist/drizzle/oauth-connected-reference.mjs.map +1 -1
- package/dist/drizzle/oauth-drivers.mjs +1 -2
- package/dist/drizzle/oauth-drivers.mjs.map +1 -1
- package/dist/drizzle/oauth-model.d.mts +11 -37
- package/dist/drizzle/oauth-model.mjs +3 -4
- package/dist/drizzle/oauth-model.mjs.map +1 -1
- package/dist/drizzle/oauth-proxy.d.mts +1 -1
- package/dist/drizzle/oauth-proxy.mjs +1 -1
- package/dist/drizzle/oauth-target.d.mts +9 -6
- package/dist/drizzle/oauth-target.mjs +47 -15
- package/dist/drizzle/oauth-target.mjs.map +1 -1
- package/dist/drizzle/passkey/target.d.mts +14 -0
- package/dist/drizzle/passkey/target.mjs +52 -0
- package/dist/drizzle/passkey/target.mjs.map +1 -0
- package/dist/drizzle/passkey/write-target.d.mts +11 -0
- package/dist/drizzle/passkey/write-target.mjs +28 -0
- package/dist/drizzle/passkey/write-target.mjs.map +1 -0
- package/dist/drizzle/passkey-drivers.mjs +2 -4
- package/dist/drizzle/passkey-drivers.mjs.map +1 -1
- package/dist/drizzle/passkey-model.d.mts +5 -26
- package/dist/drizzle/passkey-model.mjs +2 -8
- package/dist/drizzle/passkey-registration-ceremony-model.d.mts +3 -6
- package/dist/drizzle/passkey-write-drivers.mjs +2 -3
- package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
- package/dist/drizzle/passkey-write-model.d.mts +7 -9
- package/dist/drizzle/passkey-write-model.mjs +1 -3
- package/dist/drizzle/passkey-write-model.mjs.map +1 -1
- package/dist/drizzle/password-drivers.mjs +31 -0
- package/dist/drizzle/password-drivers.mjs.map +1 -0
- package/dist/drizzle/password-model.d.mts +7 -10
- package/dist/drizzle/password-target.d.mts +7 -8
- package/dist/drizzle/password-target.mjs +23 -68
- package/dist/drizzle/password-target.mjs.map +1 -1
- package/dist/drizzle/pg-identity.mjs +3 -6
- package/dist/drizzle/pg-identity.mjs.map +1 -1
- package/dist/drizzle/phone-drivers.mjs +24 -0
- package/dist/drizzle/phone-drivers.mjs.map +1 -0
- package/dist/drizzle/phone-model.d.mts +13 -104
- package/dist/drizzle/phone-model.mjs +5 -33
- package/dist/drizzle/phone-model.mjs.map +1 -1
- package/dist/drizzle/phone-target.mjs +22 -171
- package/dist/drizzle/phone-target.mjs.map +1 -1
- package/dist/drizzle/proof-drivers.mjs +24 -0
- package/dist/drizzle/proof-drivers.mjs.map +1 -0
- package/dist/drizzle/proof-model.d.mts +7 -15
- package/dist/drizzle/proof-target.d.mts +5 -5
- package/dist/drizzle/proof-target.mjs +14 -28
- package/dist/drizzle/proof-target.mjs.map +1 -1
- package/dist/drizzle/session-drivers.mjs +97 -0
- package/dist/drizzle/session-drivers.mjs.map +1 -0
- package/dist/drizzle/session-model.d.mts +11 -22
- package/dist/drizzle/sqlite-do-database.d.mts +3 -3
- package/dist/drizzle/sqlite-do-database.mjs +6 -1
- package/dist/drizzle/sqlite-do-database.mjs.map +1 -1
- package/dist/drizzle/sqlite-identity.mjs +3 -5
- package/dist/drizzle/sqlite-identity.mjs.map +1 -1
- package/dist/drizzle/step-up-model.d.mts +2 -5
- package/dist/drizzle/storage-validation.mjs +2 -1
- package/dist/drizzle/storage-validation.mjs.map +1 -1
- package/dist/drizzle/totp-model.d.mts +7 -74
- package/dist/drizzle/totp-model.mjs +1 -5
- package/dist/drizzle/totp-model.mjs.map +1 -1
- package/dist/drizzle/totp-target.mjs +39 -75
- package/dist/drizzle/totp-target.mjs.map +1 -1
- package/dist/drizzle/transaction-handle.mjs +13 -0
- package/dist/drizzle/transaction-handle.mjs.map +1 -0
- package/dist/drizzle/transaction-mysql.mjs +43 -12
- package/dist/drizzle/transaction-mysql.mjs.map +1 -1
- package/dist/index.d.mts +17 -22
- package/dist/index.mjs +10 -16
- package/dist/internal/drizzle-postgres.mjs +4 -6
- package/dist/internal/drizzle-postgres.mjs.map +1 -1
- package/dist/internal/drizzle-sqlite.mjs +4 -6
- package/dist/internal/drizzle-sqlite.mjs.map +1 -1
- package/package.json +1 -1
- package/src/D1.ts +77 -74
- package/src/Libsql.ts +65 -105
- package/src/Mysql2.ts +52 -87
- package/src/Pglite.ts +74 -81
- package/src/Postgres.ts +74 -81
- package/src/SqliteBun.ts +65 -113
- package/src/SqliteDo.ts +58 -106
- package/src/SqliteNode.ts +65 -113
- package/src/SqliteWasm.ts +65 -113
- package/src/drizzle/d1-identity.ts +2 -2
- package/src/drizzle/driver-types.ts +26 -0
- package/src/drizzle/email-drivers.ts +320 -0
- package/src/drizzle/email-model.ts +24 -78
- package/src/drizzle/email-target.ts +118 -211
- package/src/drizzle/model.ts +0 -2
- package/src/drizzle/mysql-identity.ts +4 -24
- package/src/drizzle/native-clock.ts +21 -0
- package/src/drizzle/native-database.ts +59 -18
- package/src/drizzle/native-sql-table.ts +104 -87
- package/src/drizzle/native-target.ts +120 -0
- package/src/drizzle/oauth-connected-drivers.ts +24 -233
- package/src/drizzle/oauth-connected-model.ts +3 -93
- package/src/drizzle/oauth-connected-reference.ts +16 -25
- package/src/drizzle/oauth-drivers.ts +58 -99
- package/src/drizzle/oauth-model.ts +27 -132
- package/src/drizzle/oauth-target.ts +250 -33
- package/src/drizzle/passkey/target.ts +205 -0
- package/src/drizzle/passkey/write-target.ts +91 -0
- package/src/drizzle/passkey-drivers.ts +35 -133
- package/src/drizzle/passkey-model.ts +3 -81
- package/src/drizzle/passkey-registration-ceremony-model.ts +5 -25
- package/src/drizzle/passkey-write-drivers.ts +32 -102
- package/src/drizzle/passkey-write-model.ts +10 -44
- package/src/drizzle/password-drivers.ts +286 -0
- package/src/drizzle/password-model.ts +10 -44
- package/src/drizzle/password-target.ts +85 -239
- package/src/drizzle/pg-identity.ts +4 -19
- package/src/drizzle/phone-drivers.ts +142 -0
- package/src/drizzle/phone-model.ts +22 -162
- package/src/drizzle/phone-target.ts +51 -493
- package/src/drizzle/proof-drivers.ts +123 -0
- package/src/drizzle/proof-model.ts +12 -123
- package/src/drizzle/proof-target.ts +38 -102
- package/src/drizzle/session-drivers.ts +696 -0
- package/src/drizzle/session-model.ts +54 -118
- package/src/drizzle/sqlite-do-database.ts +8 -0
- package/src/drizzle/sqlite-identity.ts +4 -22
- package/src/drizzle/step-up-model.ts +13 -37
- package/src/drizzle/storage-validation.ts +2 -1
- package/src/drizzle/totp-model.ts +20 -77
- package/src/drizzle/totp-target.ts +121 -261
- package/src/drizzle/transaction-handle.ts +41 -0
- package/src/drizzle/transaction-mysql.ts +90 -25
- package/src/index.ts +7 -122
- package/src/internal/drizzle-postgres.ts +4 -7
- package/src/internal/drizzle-sqlite.ts +4 -7
- package/dist/drizzle/crypto.mjs +0 -11
- package/dist/drizzle/crypto.mjs.map +0 -1
- package/dist/drizzle/d1-emails.d.mts +0 -62
- package/dist/drizzle/d1-emails.mjs +0 -626
- package/dist/drizzle/d1-emails.mjs.map +0 -1
- package/dist/drizzle/d1-generated-statement.mjs +0 -79
- package/dist/drizzle/d1-generated-statement.mjs.map +0 -1
- package/dist/drizzle/d1-oauth.d.mts +0 -331
- package/dist/drizzle/d1-oauth.mjs +0 -79
- package/dist/drizzle/d1-oauth.mjs.map +0 -1
- package/dist/drizzle/d1-passkey.d.mts +0 -37
- package/dist/drizzle/d1-passkey.mjs +0 -98
- package/dist/drizzle/d1-passkey.mjs.map +0 -1
- package/dist/drizzle/d1-password-prepared.d.mts +0 -25
- package/dist/drizzle/d1-password-prepared.mjs +0 -473
- package/dist/drizzle/d1-password-prepared.mjs.map +0 -1
- package/dist/drizzle/d1-passwords.d.mts +0 -70
- package/dist/drizzle/d1-passwords.mjs +0 -808
- package/dist/drizzle/d1-passwords.mjs.map +0 -1
- package/dist/drizzle/d1-phone.d.mts +0 -23
- package/dist/drizzle/d1-phone.mjs +0 -33
- package/dist/drizzle/d1-phone.mjs.map +0 -1
- package/dist/drizzle/d1-planning.d.mts +0 -11
- package/dist/drizzle/d1-planning.mjs +0 -43
- package/dist/drizzle/d1-planning.mjs.map +0 -1
- package/dist/drizzle/d1-proofs.d.mts +0 -80
- package/dist/drizzle/d1-proofs.mjs +0 -842
- package/dist/drizzle/d1-proofs.mjs.map +0 -1
- package/dist/drizzle/d1-sessions.d.mts +0 -68
- package/dist/drizzle/d1-sessions.mjs +0 -987
- package/dist/drizzle/d1-sessions.mjs.map +0 -1
- package/dist/drizzle/d1-totp.d.mts +0 -23
- package/dist/drizzle/d1-totp.mjs +0 -30
- package/dist/drizzle/d1-totp.mjs.map +0 -1
- package/dist/drizzle/email-registration.d.mts +0 -33
- package/dist/drizzle/email-registration.mjs +0 -281
- package/dist/drizzle/email-registration.mjs.map +0 -1
- package/dist/drizzle/email-sql.d.mts +0 -1
- package/dist/drizzle/email-sql.mjs +0 -9
- package/dist/drizzle/email-sql.mjs.map +0 -1
- package/dist/drizzle/mysql-emails.d.mts +0 -71
- package/dist/drizzle/mysql-emails.mjs +0 -43
- package/dist/drizzle/mysql-emails.mjs.map +0 -1
- package/dist/drizzle/mysql-password-prepared.d.mts +0 -30
- package/dist/drizzle/mysql-password-prepared.mjs +0 -21
- package/dist/drizzle/mysql-password-prepared.mjs.map +0 -1
- package/dist/drizzle/mysql-passwords.d.mts +0 -71
- package/dist/drizzle/mysql-passwords.mjs +0 -43
- package/dist/drizzle/mysql-passwords.mjs.map +0 -1
- package/dist/drizzle/mysql-proofs.d.mts +0 -75
- package/dist/drizzle/mysql-proofs.mjs +0 -28
- package/dist/drizzle/mysql-proofs.mjs.map +0 -1
- package/dist/drizzle/mysql-sessions.d.mts +0 -92
- package/dist/drizzle/mysql-sessions.mjs +0 -58
- package/dist/drizzle/mysql-sessions.mjs.map +0 -1
- package/dist/drizzle/oauth-connected-model.mjs.map +0 -1
- package/dist/drizzle/oauth-connected-target.d.mts +0 -6
- package/dist/drizzle/oauth-connected-target.mjs +0 -12
- package/dist/drizzle/oauth-connected-target.mjs.map +0 -1
- package/dist/drizzle/oauth-kernel.mjs +0 -11
- package/dist/drizzle/oauth-kernel.mjs.map +0 -1
- package/dist/drizzle/oauth-mysql.mjs +0 -8
- package/dist/drizzle/oauth-mysql.mjs.map +0 -1
- package/dist/drizzle/passkey-kernel.mjs +0 -8
- package/dist/drizzle/passkey-kernel.mjs.map +0 -1
- package/dist/drizzle/passkey-model.mjs.map +0 -1
- package/dist/drizzle/passkey-registration-ceremony-model.mjs +0 -2
- package/dist/drizzle/passkey-state.mjs +0 -7
- package/dist/drizzle/passkey-state.mjs.map +0 -1
- package/dist/drizzle/passkey-target.d.mts +0 -2
- package/dist/drizzle/passkey-target.mjs +0 -7
- package/dist/drizzle/passkey-target.mjs.map +0 -1
- package/dist/drizzle/passkey-write-target.d.mts +0 -5
- package/dist/drizzle/passkey-write-target.mjs +0 -7
- package/dist/drizzle/passkey-write-target.mjs.map +0 -1
- package/dist/drizzle/password-prepared-model.d.mts +0 -92
- package/dist/drizzle/password-prepared-model.mjs +0 -11
- package/dist/drizzle/password-prepared-model.mjs.map +0 -1
- package/dist/drizzle/password-prepared-sql.mjs +0 -395
- package/dist/drizzle/password-prepared-sql.mjs.map +0 -1
- package/dist/drizzle/password-prepared-state.mjs +0 -104
- package/dist/drizzle/password-prepared-state.mjs.map +0 -1
- package/dist/drizzle/password-prepared-target.d.mts +0 -13
- package/dist/drizzle/password-prepared-target.mjs +0 -62
- package/dist/drizzle/password-prepared-target.mjs.map +0 -1
- package/dist/drizzle/password-registration.d.mts +0 -7
- package/dist/drizzle/password-registration.mjs +0 -137
- package/dist/drizzle/password-registration.mjs.map +0 -1
- package/dist/drizzle/password-sql.d.mts +0 -1
- package/dist/drizzle/password-sql.mjs +0 -10
- package/dist/drizzle/password-sql.mjs.map +0 -1
- package/dist/drizzle/pg-emails.d.mts +0 -72
- package/dist/drizzle/pg-emails.mjs +0 -43
- package/dist/drizzle/pg-emails.mjs.map +0 -1
- package/dist/drizzle/pg-password-prepared.d.mts +0 -31
- package/dist/drizzle/pg-password-prepared.mjs +0 -21
- package/dist/drizzle/pg-password-prepared.mjs.map +0 -1
- package/dist/drizzle/pg-passwords.d.mts +0 -72
- package/dist/drizzle/pg-passwords.mjs +0 -43
- package/dist/drizzle/pg-passwords.mjs.map +0 -1
- package/dist/drizzle/pg-proofs.d.mts +0 -76
- package/dist/drizzle/pg-proofs.mjs +0 -27
- package/dist/drizzle/pg-proofs.mjs.map +0 -1
- package/dist/drizzle/pg-sessions.d.mts +0 -93
- package/dist/drizzle/pg-sessions.mjs +0 -58
- package/dist/drizzle/pg-sessions.mjs.map +0 -1
- package/dist/drizzle/phone-state.mjs +0 -14
- package/dist/drizzle/phone-state.mjs.map +0 -1
- package/dist/drizzle/phone-target.d.mts +0 -15
- package/dist/drizzle/proof-sql.d.mts +0 -1
- package/dist/drizzle/proof-sql.mjs +0 -8
- package/dist/drizzle/proof-sql.mjs.map +0 -1
- package/dist/drizzle/query-operations.mjs +0 -31
- package/dist/drizzle/query-operations.mjs.map +0 -1
- package/dist/drizzle/session-sql.d.mts +0 -1
- package/dist/drizzle/session-sql.mjs +0 -9
- package/dist/drizzle/session-sql.mjs.map +0 -1
- package/dist/drizzle/session-target.d.mts +0 -30
- package/dist/drizzle/session-target.mjs +0 -49
- package/dist/drizzle/session-target.mjs.map +0 -1
- package/dist/drizzle/sqlite-emails.mjs +0 -50
- package/dist/drizzle/sqlite-emails.mjs.map +0 -1
- package/dist/drizzle/sqlite-password-prepared.mjs +0 -26
- package/dist/drizzle/sqlite-password-prepared.mjs.map +0 -1
- package/dist/drizzle/sqlite-passwords.mjs +0 -54
- package/dist/drizzle/sqlite-passwords.mjs.map +0 -1
- package/dist/drizzle/sqlite-proofs.mjs +0 -34
- package/dist/drizzle/sqlite-proofs.mjs.map +0 -1
- package/dist/drizzle/sqlite-sessions.mjs +0 -79
- package/dist/drizzle/sqlite-sessions.mjs.map +0 -1
- package/dist/drizzle/standalone-guard.d.mts +0 -2
- package/dist/drizzle/standalone-guard.mjs +0 -21
- package/dist/drizzle/standalone-guard.mjs.map +0 -1
- package/dist/drizzle/totp-state.d.mts +0 -37
- package/dist/drizzle/totp-state.mjs +0 -287
- package/dist/drizzle/totp-state.mjs.map +0 -1
- package/dist/drizzle/totp-target.d.mts +0 -15
- package/dist/drizzle/transaction-execution.d.mts +0 -2
- package/dist/drizzle/transaction-execution.mjs +0 -11
- package/dist/drizzle/transaction-execution.mjs.map +0 -1
- package/dist/drizzle/transaction-owner.d.mts +0 -1
- package/dist/drizzle/transaction-owner.mjs +0 -8
- package/dist/drizzle/transaction-owner.mjs.map +0 -1
- package/src/drizzle/crypto.ts +0 -14
- package/src/drizzle/d1-emails.ts +0 -1945
- package/src/drizzle/d1-generated-statement.ts +0 -129
- package/src/drizzle/d1-oauth.ts +0 -360
- package/src/drizzle/d1-passkey.ts +0 -383
- package/src/drizzle/d1-password-prepared.ts +0 -1265
- package/src/drizzle/d1-passwords.ts +0 -2060
- package/src/drizzle/d1-phone.ts +0 -103
- package/src/drizzle/d1-planning.ts +0 -104
- package/src/drizzle/d1-proofs.ts +0 -2354
- package/src/drizzle/d1-sessions.ts +0 -2940
- package/src/drizzle/d1-totp.ts +0 -88
- package/src/drizzle/email-registration.ts +0 -850
- package/src/drizzle/email-sql.ts +0 -25
- package/src/drizzle/mysql-emails.ts +0 -343
- package/src/drizzle/mysql-password-prepared.ts +0 -198
- package/src/drizzle/mysql-passwords.ts +0 -343
- package/src/drizzle/mysql-proofs.ts +0 -196
- package/src/drizzle/mysql-sessions.ts +0 -780
- package/src/drizzle/oauth-connected-target.ts +0 -21
- package/src/drizzle/oauth-kernel.ts +0 -10
- package/src/drizzle/oauth-mysql.ts +0 -10
- package/src/drizzle/passkey-kernel.ts +0 -4
- package/src/drizzle/passkey-state.ts +0 -3
- package/src/drizzle/passkey-target.ts +0 -23
- package/src/drizzle/passkey-write-target.ts +0 -9
- package/src/drizzle/password-prepared-model.ts +0 -241
- package/src/drizzle/password-prepared-sql.ts +0 -1201
- package/src/drizzle/password-prepared-state.ts +0 -231
- package/src/drizzle/password-prepared-target.ts +0 -169
- package/src/drizzle/password-registration.ts +0 -369
- package/src/drizzle/password-sql.ts +0 -16
- package/src/drizzle/pg-emails.ts +0 -343
- package/src/drizzle/pg-password-prepared.ts +0 -199
- package/src/drizzle/pg-passwords.ts +0 -342
- package/src/drizzle/pg-proofs.ts +0 -206
- package/src/drizzle/pg-sessions.ts +0 -789
- package/src/drizzle/phone-state.ts +0 -21
- package/src/drizzle/proof-sql.ts +0 -10
- package/src/drizzle/query-operations.ts +0 -49
- package/src/drizzle/session-sql.ts +0 -15
- package/src/drizzle/session-target.ts +0 -337
- package/src/drizzle/sqlite-emails.ts +0 -393
- package/src/drizzle/sqlite-password-prepared.ts +0 -230
- package/src/drizzle/sqlite-passwords.ts +0 -497
- package/src/drizzle/sqlite-proofs.ts +0 -229
- package/src/drizzle/sqlite-sessions.ts +0 -1013
- package/src/drizzle/totp-state.ts +0 -525
- package/src/drizzle/transaction-execution.ts +0 -13
- package/src/drizzle/transaction-owner.ts +0 -11
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
import {
|
|
2
|
+
makeNativeAuthenticationAuthorityServices,
|
|
3
|
+
type NativeAuthenticationAuthorityMapping,
|
|
4
|
+
makeNativePendingAuthenticationServices,
|
|
5
|
+
type NativePendingAuthenticationMapping,
|
|
6
|
+
makeNativeStatefulSessionServices,
|
|
7
|
+
type NativeStatefulSessionMapping,
|
|
8
|
+
makeNativeSignedSessionValidityServices,
|
|
9
|
+
type NativeSignedSessionValidityMapping,
|
|
10
|
+
makeNativeSessionStepUpServices,
|
|
11
|
+
type NativeSessionStepUpMapping,
|
|
12
|
+
makeNativeSessionCleanupServices,
|
|
13
|
+
} from "@yielded/auth-persistence/Adapter";
|
|
14
|
+
import type { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
15
|
+
import {
|
|
16
|
+
AuthenticationAuthority,
|
|
17
|
+
SessionUnavailable,
|
|
18
|
+
type PendingAuthentication,
|
|
19
|
+
type StatefulSessionPersistence,
|
|
20
|
+
type SessionRepository,
|
|
21
|
+
type SignedSessionValidity,
|
|
22
|
+
type SessionStepUpPersistence,
|
|
23
|
+
} from "@yielded/auth/Sessions";
|
|
24
|
+
import type { Table } from "drizzle-orm";
|
|
25
|
+
import { Effect, type Context } from "effect";
|
|
26
|
+
|
|
27
|
+
import type { NativeDriverDatabase, NativeDriverTransaction } from "./driver-types";
|
|
28
|
+
import { nativeClock, type MappedClock } from "./native-clock";
|
|
29
|
+
import { NativeDatabase, nativeDatabase } from "./native-database";
|
|
30
|
+
import {
|
|
31
|
+
nativeTarget,
|
|
32
|
+
coordinateNativeTarget,
|
|
33
|
+
type NativeTargetConfiguration,
|
|
34
|
+
} from "./native-target";
|
|
35
|
+
import type {
|
|
36
|
+
AuthenticationAuthorityMapping,
|
|
37
|
+
PendingAuthenticationMapping,
|
|
38
|
+
StatefulSessionMapping,
|
|
39
|
+
SignedSessionValidityMapping,
|
|
40
|
+
SessionCleanupMapping,
|
|
41
|
+
} from "./session-model";
|
|
42
|
+
import type { SessionStepUpMapping } from "./step-up-model";
|
|
43
|
+
import { validateDrizzleStorage } from "./storage-validation";
|
|
44
|
+
import type { SuppliedService } from "./SuppliedService";
|
|
45
|
+
|
|
46
|
+
const unavailable = () => SessionUnavailable.make({});
|
|
47
|
+
|
|
48
|
+
const clockMapping = <T extends { readonly clock: MappedClock }>(mapping: T) => ({
|
|
49
|
+
...mapping,
|
|
50
|
+
clock: nativeClock(mapping.clock),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
/** Foreign table/ID callback variance is erased only at this physical mapping
|
|
54
|
+
* boundary. All subjects, sessions, pending payloads and policy use their codecs. */
|
|
55
|
+
export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
56
|
+
databaseService: Context.Service<DatabaseId, D>,
|
|
57
|
+
configuration: NativeTargetConfiguration,
|
|
58
|
+
) => {
|
|
59
|
+
const authenticationAuthority = <Claims>(mapping: NativeAuthenticationAuthorityMapping<Claims>) =>
|
|
60
|
+
Effect.gen(function* () {
|
|
61
|
+
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
62
|
+
if (
|
|
63
|
+
configuration.mode === "batch" &&
|
|
64
|
+
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
65
|
+
)
|
|
66
|
+
return yield* unavailable();
|
|
67
|
+
const target = yield* nativeTarget(configuration);
|
|
68
|
+
|
|
69
|
+
return yield* target.provide(
|
|
70
|
+
makeNativeAuthenticationAuthorityServices(target.tables, mapping),
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
function coordinateAuthenticationAuthority<
|
|
75
|
+
DB extends D,
|
|
76
|
+
Claims,
|
|
77
|
+
S extends Table,
|
|
78
|
+
C extends Table,
|
|
79
|
+
P extends Table,
|
|
80
|
+
N,
|
|
81
|
+
A,
|
|
82
|
+
E,
|
|
83
|
+
R,
|
|
84
|
+
DE,
|
|
85
|
+
DR,
|
|
86
|
+
>(
|
|
87
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
88
|
+
options: {
|
|
89
|
+
readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;
|
|
90
|
+
readonly transaction?: never;
|
|
91
|
+
},
|
|
92
|
+
body: Effect.Effect<A, E, R>,
|
|
93
|
+
): Effect.Effect<
|
|
94
|
+
A,
|
|
95
|
+
E | DE | SessionUnavailable,
|
|
96
|
+
Exclude<R, AuthenticationAuthority> | DR | LifecycleHooks
|
|
97
|
+
>;
|
|
98
|
+
function coordinateAuthenticationAuthority<
|
|
99
|
+
DB extends D,
|
|
100
|
+
Claims,
|
|
101
|
+
S extends Table,
|
|
102
|
+
C extends Table,
|
|
103
|
+
P extends Table,
|
|
104
|
+
N,
|
|
105
|
+
A,
|
|
106
|
+
E,
|
|
107
|
+
R,
|
|
108
|
+
DE,
|
|
109
|
+
DR,
|
|
110
|
+
TxId,
|
|
111
|
+
TxShape,
|
|
112
|
+
>(
|
|
113
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
114
|
+
options: {
|
|
115
|
+
readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;
|
|
116
|
+
readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
117
|
+
},
|
|
118
|
+
body: Effect.Effect<A, E, R>,
|
|
119
|
+
): Effect.Effect<
|
|
120
|
+
A,
|
|
121
|
+
E | DE | SessionUnavailable,
|
|
122
|
+
Exclude<R, AuthenticationAuthority | TxId> | DR | LifecycleHooks
|
|
123
|
+
>;
|
|
124
|
+
function coordinateAuthenticationAuthority<
|
|
125
|
+
DB extends D,
|
|
126
|
+
Claims,
|
|
127
|
+
S extends Table,
|
|
128
|
+
C extends Table,
|
|
129
|
+
P extends Table,
|
|
130
|
+
N,
|
|
131
|
+
A,
|
|
132
|
+
E,
|
|
133
|
+
R,
|
|
134
|
+
DE,
|
|
135
|
+
DR,
|
|
136
|
+
TxId,
|
|
137
|
+
TxShape,
|
|
138
|
+
>(
|
|
139
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
140
|
+
options: {
|
|
141
|
+
readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;
|
|
142
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
143
|
+
},
|
|
144
|
+
body: Effect.Effect<A, E, R>,
|
|
145
|
+
) {
|
|
146
|
+
return Effect.flatMap(nativeDatabase(acquire), (database) =>
|
|
147
|
+
coordinateNativeTarget(
|
|
148
|
+
unavailable,
|
|
149
|
+
database,
|
|
150
|
+
configuration,
|
|
151
|
+
authenticationAuthority(
|
|
152
|
+
clockMapping(options.mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,
|
|
153
|
+
),
|
|
154
|
+
(transaction: NativeDriverTransaction<DB>, services) => {
|
|
155
|
+
const work = body.pipe(
|
|
156
|
+
Effect.provideService(AuthenticationAuthority, services.authenticationAuthority),
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
return options.transaction === undefined
|
|
160
|
+
? work
|
|
161
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
162
|
+
},
|
|
163
|
+
),
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const pendingAuthentication = <Claims>(mapping: NativePendingAuthenticationMapping<Claims>) =>
|
|
168
|
+
Effect.gen(function* () {
|
|
169
|
+
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
170
|
+
if (
|
|
171
|
+
configuration.mode === "batch" &&
|
|
172
|
+
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
173
|
+
)
|
|
174
|
+
return yield* unavailable();
|
|
175
|
+
const target = yield* nativeTarget(configuration);
|
|
176
|
+
|
|
177
|
+
return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
function coordinatePendingAuthentication<
|
|
181
|
+
DB extends D,
|
|
182
|
+
Id,
|
|
183
|
+
Claims,
|
|
184
|
+
S extends Table,
|
|
185
|
+
C extends Table,
|
|
186
|
+
P extends Table,
|
|
187
|
+
N,
|
|
188
|
+
A,
|
|
189
|
+
E,
|
|
190
|
+
R,
|
|
191
|
+
DE,
|
|
192
|
+
DR,
|
|
193
|
+
>(
|
|
194
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
195
|
+
options: {
|
|
196
|
+
readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;
|
|
197
|
+
readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;
|
|
198
|
+
readonly transaction?: never;
|
|
199
|
+
},
|
|
200
|
+
body: Effect.Effect<A, E, R>,
|
|
201
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;
|
|
202
|
+
function coordinatePendingAuthentication<
|
|
203
|
+
DB extends D,
|
|
204
|
+
Id,
|
|
205
|
+
Claims,
|
|
206
|
+
S extends Table,
|
|
207
|
+
C extends Table,
|
|
208
|
+
P extends Table,
|
|
209
|
+
N,
|
|
210
|
+
A,
|
|
211
|
+
E,
|
|
212
|
+
R,
|
|
213
|
+
DE,
|
|
214
|
+
DR,
|
|
215
|
+
TxId,
|
|
216
|
+
TxShape,
|
|
217
|
+
>(
|
|
218
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
219
|
+
options: {
|
|
220
|
+
readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;
|
|
221
|
+
readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;
|
|
222
|
+
readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
223
|
+
},
|
|
224
|
+
body: Effect.Effect<A, E, R>,
|
|
225
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;
|
|
226
|
+
function coordinatePendingAuthentication<
|
|
227
|
+
DB extends D,
|
|
228
|
+
Id,
|
|
229
|
+
Claims,
|
|
230
|
+
S extends Table,
|
|
231
|
+
C extends Table,
|
|
232
|
+
P extends Table,
|
|
233
|
+
N,
|
|
234
|
+
A,
|
|
235
|
+
E,
|
|
236
|
+
R,
|
|
237
|
+
DE,
|
|
238
|
+
DR,
|
|
239
|
+
TxId,
|
|
240
|
+
TxShape,
|
|
241
|
+
>(
|
|
242
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
243
|
+
options: {
|
|
244
|
+
readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;
|
|
245
|
+
readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;
|
|
246
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
247
|
+
},
|
|
248
|
+
body: Effect.Effect<A, E, R>,
|
|
249
|
+
) {
|
|
250
|
+
return Effect.flatMap(nativeDatabase(acquire), (database) =>
|
|
251
|
+
coordinateNativeTarget(
|
|
252
|
+
unavailable,
|
|
253
|
+
database,
|
|
254
|
+
configuration,
|
|
255
|
+
pendingAuthentication(
|
|
256
|
+
clockMapping(options.mapping) as unknown as NativePendingAuthenticationMapping<Claims>,
|
|
257
|
+
),
|
|
258
|
+
(transaction: NativeDriverTransaction<DB>, services) => {
|
|
259
|
+
const work = body.pipe(
|
|
260
|
+
Effect.provideService(options.target, services.pendingAuthentication),
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
return options.transaction === undefined
|
|
264
|
+
? work
|
|
265
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
266
|
+
},
|
|
267
|
+
),
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const statefulSessionPersistence = <Claims>(mapping: NativeStatefulSessionMapping<Claims>) =>
|
|
272
|
+
Effect.gen(function* () {
|
|
273
|
+
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
274
|
+
if (
|
|
275
|
+
configuration.mode === "batch" &&
|
|
276
|
+
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
277
|
+
)
|
|
278
|
+
return yield* unavailable();
|
|
279
|
+
const target = yield* nativeTarget(configuration);
|
|
280
|
+
|
|
281
|
+
return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
function coordinateStatefulSessions<
|
|
285
|
+
DB extends D,
|
|
286
|
+
Id,
|
|
287
|
+
RepositoryId,
|
|
288
|
+
Claims,
|
|
289
|
+
S extends Table,
|
|
290
|
+
C extends Table,
|
|
291
|
+
Session extends Table,
|
|
292
|
+
P extends Table,
|
|
293
|
+
N,
|
|
294
|
+
NS,
|
|
295
|
+
A,
|
|
296
|
+
E,
|
|
297
|
+
R,
|
|
298
|
+
DE,
|
|
299
|
+
DR,
|
|
300
|
+
>(
|
|
301
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
302
|
+
options: {
|
|
303
|
+
readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;
|
|
304
|
+
readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;
|
|
305
|
+
readonly repository: SuppliedService<RepositoryId, SessionRepository>;
|
|
306
|
+
readonly transaction?: never;
|
|
307
|
+
},
|
|
308
|
+
body: Effect.Effect<A, E, R>,
|
|
309
|
+
): Effect.Effect<
|
|
310
|
+
A,
|
|
311
|
+
E | DE | SessionUnavailable,
|
|
312
|
+
Exclude<R, Id | RepositoryId> | DR | LifecycleHooks
|
|
313
|
+
>;
|
|
314
|
+
function coordinateStatefulSessions<
|
|
315
|
+
DB extends D,
|
|
316
|
+
Id,
|
|
317
|
+
RepositoryId,
|
|
318
|
+
Claims,
|
|
319
|
+
S extends Table,
|
|
320
|
+
C extends Table,
|
|
321
|
+
Session extends Table,
|
|
322
|
+
P extends Table,
|
|
323
|
+
N,
|
|
324
|
+
NS,
|
|
325
|
+
A,
|
|
326
|
+
E,
|
|
327
|
+
R,
|
|
328
|
+
DE,
|
|
329
|
+
DR,
|
|
330
|
+
TxId,
|
|
331
|
+
TxShape,
|
|
332
|
+
>(
|
|
333
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
334
|
+
options: {
|
|
335
|
+
readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;
|
|
336
|
+
readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;
|
|
337
|
+
readonly repository: SuppliedService<RepositoryId, SessionRepository>;
|
|
338
|
+
readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
339
|
+
},
|
|
340
|
+
body: Effect.Effect<A, E, R>,
|
|
341
|
+
): Effect.Effect<
|
|
342
|
+
A,
|
|
343
|
+
E | DE | SessionUnavailable,
|
|
344
|
+
Exclude<R, Id | RepositoryId | TxId> | DR | LifecycleHooks
|
|
345
|
+
>;
|
|
346
|
+
function coordinateStatefulSessions<
|
|
347
|
+
DB extends D,
|
|
348
|
+
Id,
|
|
349
|
+
RepositoryId,
|
|
350
|
+
Claims,
|
|
351
|
+
S extends Table,
|
|
352
|
+
C extends Table,
|
|
353
|
+
Session extends Table,
|
|
354
|
+
P extends Table,
|
|
355
|
+
N,
|
|
356
|
+
NS,
|
|
357
|
+
A,
|
|
358
|
+
E,
|
|
359
|
+
R,
|
|
360
|
+
DE,
|
|
361
|
+
DR,
|
|
362
|
+
TxId,
|
|
363
|
+
TxShape,
|
|
364
|
+
>(
|
|
365
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
366
|
+
options: {
|
|
367
|
+
readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;
|
|
368
|
+
readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;
|
|
369
|
+
readonly repository: SuppliedService<RepositoryId, SessionRepository>;
|
|
370
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
371
|
+
},
|
|
372
|
+
body: Effect.Effect<A, E, R>,
|
|
373
|
+
) {
|
|
374
|
+
return Effect.flatMap(nativeDatabase(acquire), (database) =>
|
|
375
|
+
coordinateNativeTarget(
|
|
376
|
+
unavailable,
|
|
377
|
+
database,
|
|
378
|
+
configuration,
|
|
379
|
+
statefulSessionPersistence(
|
|
380
|
+
clockMapping(options.mapping) as unknown as NativeStatefulSessionMapping<Claims>,
|
|
381
|
+
),
|
|
382
|
+
(transaction: NativeDriverTransaction<DB>, services) => {
|
|
383
|
+
const work = body.pipe(
|
|
384
|
+
Effect.provideService(options.persistence, services.statefulSessionPersistence),
|
|
385
|
+
Effect.provideService(options.repository, services.sessionRepository),
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
return options.transaction === undefined
|
|
389
|
+
? work
|
|
390
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
391
|
+
},
|
|
392
|
+
),
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
const signedSessionValidity = (mapping: NativeSignedSessionValidityMapping) =>
|
|
397
|
+
Effect.gen(function* () {
|
|
398
|
+
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
399
|
+
if (configuration.mode === "batch" && mapping.d1?.primary !== true)
|
|
400
|
+
return yield* unavailable();
|
|
401
|
+
const target = yield* nativeTarget(configuration);
|
|
402
|
+
|
|
403
|
+
return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
function coordinateSignedSessionValidity<
|
|
407
|
+
DB extends D,
|
|
408
|
+
Id,
|
|
409
|
+
S extends Table,
|
|
410
|
+
T extends Table,
|
|
411
|
+
N,
|
|
412
|
+
NS,
|
|
413
|
+
A,
|
|
414
|
+
E,
|
|
415
|
+
R,
|
|
416
|
+
DE,
|
|
417
|
+
DR,
|
|
418
|
+
>(
|
|
419
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
420
|
+
options: {
|
|
421
|
+
readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;
|
|
422
|
+
readonly target: SuppliedService<Id, SignedSessionValidity>;
|
|
423
|
+
readonly transaction?: never;
|
|
424
|
+
},
|
|
425
|
+
body: Effect.Effect<A, E, R>,
|
|
426
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;
|
|
427
|
+
function coordinateSignedSessionValidity<
|
|
428
|
+
DB extends D,
|
|
429
|
+
Id,
|
|
430
|
+
S extends Table,
|
|
431
|
+
T extends Table,
|
|
432
|
+
N,
|
|
433
|
+
NS,
|
|
434
|
+
A,
|
|
435
|
+
E,
|
|
436
|
+
R,
|
|
437
|
+
DE,
|
|
438
|
+
DR,
|
|
439
|
+
TxId,
|
|
440
|
+
TxShape,
|
|
441
|
+
>(
|
|
442
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
443
|
+
options: {
|
|
444
|
+
readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;
|
|
445
|
+
readonly target: SuppliedService<Id, SignedSessionValidity>;
|
|
446
|
+
readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
447
|
+
},
|
|
448
|
+
body: Effect.Effect<A, E, R>,
|
|
449
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;
|
|
450
|
+
function coordinateSignedSessionValidity<
|
|
451
|
+
DB extends D,
|
|
452
|
+
Id,
|
|
453
|
+
S extends Table,
|
|
454
|
+
T extends Table,
|
|
455
|
+
N,
|
|
456
|
+
NS,
|
|
457
|
+
A,
|
|
458
|
+
E,
|
|
459
|
+
R,
|
|
460
|
+
DE,
|
|
461
|
+
DR,
|
|
462
|
+
TxId,
|
|
463
|
+
TxShape,
|
|
464
|
+
>(
|
|
465
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
466
|
+
options: {
|
|
467
|
+
readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;
|
|
468
|
+
readonly target: SuppliedService<Id, SignedSessionValidity>;
|
|
469
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
470
|
+
},
|
|
471
|
+
body: Effect.Effect<A, E, R>,
|
|
472
|
+
) {
|
|
473
|
+
return Effect.flatMap(nativeDatabase(acquire), (database) =>
|
|
474
|
+
coordinateNativeTarget(
|
|
475
|
+
unavailable,
|
|
476
|
+
database,
|
|
477
|
+
configuration,
|
|
478
|
+
signedSessionValidity(
|
|
479
|
+
clockMapping(options.mapping) as unknown as NativeSignedSessionValidityMapping,
|
|
480
|
+
),
|
|
481
|
+
(transaction: NativeDriverTransaction<DB>, services) => {
|
|
482
|
+
const work = body.pipe(
|
|
483
|
+
Effect.provideService(options.target, services.signedSessionValidity),
|
|
484
|
+
);
|
|
485
|
+
|
|
486
|
+
return options.transaction === undefined
|
|
487
|
+
? work
|
|
488
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
489
|
+
},
|
|
490
|
+
),
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
const sessionStepUpPersistence = <Claims>(mapping: NativeSessionStepUpMapping<Claims>) =>
|
|
495
|
+
Effect.gen(function* () {
|
|
496
|
+
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
497
|
+
if (
|
|
498
|
+
configuration.mode === "batch" &&
|
|
499
|
+
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
500
|
+
)
|
|
501
|
+
return yield* unavailable();
|
|
502
|
+
const target = yield* nativeTarget(configuration);
|
|
503
|
+
|
|
504
|
+
return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
function coordinateSessionStepUp<
|
|
508
|
+
DB extends D,
|
|
509
|
+
Id,
|
|
510
|
+
Claims,
|
|
511
|
+
S extends Table,
|
|
512
|
+
C extends Table,
|
|
513
|
+
P extends Table,
|
|
514
|
+
Session extends Table,
|
|
515
|
+
T extends Table,
|
|
516
|
+
N,
|
|
517
|
+
NS,
|
|
518
|
+
A,
|
|
519
|
+
E,
|
|
520
|
+
R,
|
|
521
|
+
DE,
|
|
522
|
+
DR,
|
|
523
|
+
>(
|
|
524
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
525
|
+
options: {
|
|
526
|
+
readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;
|
|
527
|
+
readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;
|
|
528
|
+
readonly transaction?: never;
|
|
529
|
+
},
|
|
530
|
+
body: Effect.Effect<A, E, R>,
|
|
531
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;
|
|
532
|
+
function coordinateSessionStepUp<
|
|
533
|
+
DB extends D,
|
|
534
|
+
Id,
|
|
535
|
+
Claims,
|
|
536
|
+
S extends Table,
|
|
537
|
+
C extends Table,
|
|
538
|
+
P extends Table,
|
|
539
|
+
Session extends Table,
|
|
540
|
+
T extends Table,
|
|
541
|
+
N,
|
|
542
|
+
NS,
|
|
543
|
+
A,
|
|
544
|
+
E,
|
|
545
|
+
R,
|
|
546
|
+
DE,
|
|
547
|
+
DR,
|
|
548
|
+
TxId,
|
|
549
|
+
TxShape,
|
|
550
|
+
>(
|
|
551
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
552
|
+
options: {
|
|
553
|
+
readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;
|
|
554
|
+
readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;
|
|
555
|
+
readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
556
|
+
},
|
|
557
|
+
body: Effect.Effect<A, E, R>,
|
|
558
|
+
): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;
|
|
559
|
+
function coordinateSessionStepUp<
|
|
560
|
+
DB extends D,
|
|
561
|
+
Id,
|
|
562
|
+
Claims,
|
|
563
|
+
S extends Table,
|
|
564
|
+
C extends Table,
|
|
565
|
+
P extends Table,
|
|
566
|
+
Session extends Table,
|
|
567
|
+
T extends Table,
|
|
568
|
+
N,
|
|
569
|
+
NS,
|
|
570
|
+
A,
|
|
571
|
+
E,
|
|
572
|
+
R,
|
|
573
|
+
DE,
|
|
574
|
+
DR,
|
|
575
|
+
TxId,
|
|
576
|
+
TxShape,
|
|
577
|
+
>(
|
|
578
|
+
acquire: Effect.Effect<DB, DE, DR>,
|
|
579
|
+
options: {
|
|
580
|
+
readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;
|
|
581
|
+
readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;
|
|
582
|
+
readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;
|
|
583
|
+
},
|
|
584
|
+
body: Effect.Effect<A, E, R>,
|
|
585
|
+
) {
|
|
586
|
+
return Effect.flatMap(nativeDatabase(acquire), (database) =>
|
|
587
|
+
coordinateNativeTarget(
|
|
588
|
+
unavailable,
|
|
589
|
+
database,
|
|
590
|
+
configuration,
|
|
591
|
+
sessionStepUpPersistence(
|
|
592
|
+
clockMapping(options.mapping) as unknown as NativeSessionStepUpMapping<Claims>,
|
|
593
|
+
),
|
|
594
|
+
(transaction: NativeDriverTransaction<DB>, services) => {
|
|
595
|
+
const work = body.pipe(
|
|
596
|
+
Effect.provideService(options.target, services.sessionStepUpPersistence),
|
|
597
|
+
);
|
|
598
|
+
|
|
599
|
+
return options.transaction === undefined
|
|
600
|
+
? work
|
|
601
|
+
: Effect.provideService(work, options.transaction, options.transaction.of(transaction));
|
|
602
|
+
},
|
|
603
|
+
),
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
return {
|
|
608
|
+
coordinateAuthenticationAuthority,
|
|
609
|
+
makeAuthenticationAuthorityServices: <
|
|
610
|
+
Claims,
|
|
611
|
+
S extends Table,
|
|
612
|
+
C extends Table,
|
|
613
|
+
P extends Table,
|
|
614
|
+
N,
|
|
615
|
+
>(
|
|
616
|
+
mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>,
|
|
617
|
+
) =>
|
|
618
|
+
authenticationAuthority(
|
|
619
|
+
clockMapping(mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,
|
|
620
|
+
).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
621
|
+
coordinatePendingAuthentication,
|
|
622
|
+
makePendingAuthenticationServices: <
|
|
623
|
+
Claims,
|
|
624
|
+
S extends Table,
|
|
625
|
+
C extends Table,
|
|
626
|
+
P extends Table,
|
|
627
|
+
N,
|
|
628
|
+
>(
|
|
629
|
+
mapping: PendingAuthenticationMapping<Claims, S, C, P, N>,
|
|
630
|
+
) =>
|
|
631
|
+
pendingAuthentication(
|
|
632
|
+
clockMapping(mapping) as unknown as NativePendingAuthenticationMapping<Claims>,
|
|
633
|
+
).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
634
|
+
coordinateStatefulSessions,
|
|
635
|
+
makeStatefulSessionServices: <
|
|
636
|
+
Claims,
|
|
637
|
+
S extends Table,
|
|
638
|
+
C extends Table,
|
|
639
|
+
Session extends Table,
|
|
640
|
+
P extends Table,
|
|
641
|
+
N,
|
|
642
|
+
NS,
|
|
643
|
+
>(
|
|
644
|
+
mapping: StatefulSessionMapping<Claims, S, C, Session, P, N, NS>,
|
|
645
|
+
) =>
|
|
646
|
+
statefulSessionPersistence(
|
|
647
|
+
clockMapping(mapping) as unknown as NativeStatefulSessionMapping<Claims>,
|
|
648
|
+
).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
649
|
+
coordinateSignedSessionValidity,
|
|
650
|
+
makeSignedSessionValidityServices: <S extends Table, T extends Table, N, NS>(
|
|
651
|
+
mapping: SignedSessionValidityMapping<S, T, N, NS>,
|
|
652
|
+
) =>
|
|
653
|
+
signedSessionValidity(
|
|
654
|
+
clockMapping(mapping) as unknown as NativeSignedSessionValidityMapping,
|
|
655
|
+
).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
656
|
+
coordinateSessionStepUp,
|
|
657
|
+
makeSessionStepUpServices: <
|
|
658
|
+
Claims,
|
|
659
|
+
S extends Table,
|
|
660
|
+
C extends Table,
|
|
661
|
+
P extends Table,
|
|
662
|
+
Session extends Table,
|
|
663
|
+
T extends Table,
|
|
664
|
+
N,
|
|
665
|
+
NS,
|
|
666
|
+
Id,
|
|
667
|
+
>(
|
|
668
|
+
mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>,
|
|
669
|
+
target: Context.Service<Id, SessionStepUpPersistence<Claims>>,
|
|
670
|
+
) =>
|
|
671
|
+
sessionStepUpPersistence(
|
|
672
|
+
clockMapping(mapping) as unknown as NativeSessionStepUpMapping<Claims>,
|
|
673
|
+
)
|
|
674
|
+
.pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)))
|
|
675
|
+
.pipe(
|
|
676
|
+
Effect.map((services) => ({
|
|
677
|
+
sessionStepUpPersistence: target.of(services.sessionStepUpPersistence),
|
|
678
|
+
})),
|
|
679
|
+
),
|
|
680
|
+
makeSessionCleanupServices: <P extends Table, T extends Table, N, NS>(
|
|
681
|
+
mapping: SessionCleanupMapping<P, T, N, NS>,
|
|
682
|
+
) =>
|
|
683
|
+
Effect.gen(function* () {
|
|
684
|
+
const target = yield* nativeTarget(configuration);
|
|
685
|
+
|
|
686
|
+
return yield* target.provide(
|
|
687
|
+
makeNativeSessionCleanupServices(
|
|
688
|
+
target.tables,
|
|
689
|
+
clockMapping(mapping) as unknown as Parameters<
|
|
690
|
+
typeof makeNativeSessionCleanupServices
|
|
691
|
+
>[1],
|
|
692
|
+
),
|
|
693
|
+
);
|
|
694
|
+
}).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
695
|
+
};
|
|
696
|
+
};
|