@yielded/auth-persistence 0.1.0-beta.25 → 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 +6 -8
- package/dist/Adapter.d.mts +47 -33
- package/dist/Adapter.mjs +36 -23
- package/dist/OAuthPersistence.d.mts +35 -51
- package/dist/OAuthPersistence.mjs +60 -68
- package/dist/OAuthPersistence.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/internal/browser-login.d.mts +1 -1
- package/dist/internal/browser-login.mjs +29 -9
- package/dist/internal/browser-login.mjs.map +1 -1
- package/dist/internal/configuration.d.mts +13 -8
- package/dist/internal/configuration.mjs.map +1 -1
- package/dist/internal/crypto.d.mts +1 -0
- package/dist/internal/crypto.mjs +1 -1
- package/dist/internal/d1-planning.mjs +8 -0
- package/dist/internal/d1-planning.mjs.map +1 -0
- package/dist/internal/email-native-state.mjs +135 -0
- package/dist/internal/email-native-state.mjs.map +1 -0
- package/dist/internal/email-native.d.mts +17 -0
- package/dist/internal/email-native.mjs +245 -0
- package/dist/internal/email-native.mjs.map +1 -0
- package/dist/internal/email-policy.mjs +92 -0
- package/dist/internal/email-policy.mjs.map +1 -0
- package/dist/internal/email-registration-native.d.mts +38 -0
- package/dist/internal/email-registration-native.mjs +171 -0
- package/dist/internal/email-registration-native.mjs.map +1 -0
- package/dist/internal/models/email-model.d.mts +40 -104
- package/dist/internal/models/email-model.mjs +3 -5
- package/dist/internal/models/email-model.mjs.map +1 -1
- package/dist/internal/models/oauth-connected-model.d.mts +44 -213
- package/dist/internal/models/oauth-connected-model.mjs +6 -14
- package/dist/internal/models/oauth-connected-model.mjs.map +1 -1
- package/dist/internal/models/oauth-model.d.mts +95 -244
- package/dist/internal/models/oauth-model.mjs +28 -22
- package/dist/internal/models/oauth-model.mjs.map +1 -1
- package/dist/internal/models/passkey-model.d.mts +11 -147
- package/dist/internal/models/passkey-model.mjs +5 -24
- package/dist/internal/models/passkey-model.mjs.map +1 -1
- package/dist/internal/models/passkey-registration-ceremony-model.d.mts +5 -39
- package/dist/internal/models/passkey-write-model.d.mts +17 -75
- package/dist/internal/models/passkey-write-model.mjs +1 -7
- package/dist/internal/models/passkey-write-model.mjs.map +1 -1
- package/dist/internal/models/password-model.d.mts +14 -81
- package/dist/internal/models/password-model.mjs +1 -4
- package/dist/internal/models/password-model.mjs.map +1 -1
- package/dist/internal/models/phone-model.d.mts +86 -0
- package/dist/internal/models/phone-model.mjs +10 -0
- package/dist/internal/models/phone-model.mjs.map +1 -0
- package/dist/internal/models/proof-model.d.mts +43 -272
- package/dist/internal/models/proof-model.mjs +2 -10
- package/dist/internal/models/proof-model.mjs.map +1 -1
- package/dist/internal/models/session-model.d.mts +74 -93
- package/dist/internal/models/session-model.mjs +3 -11
- package/dist/internal/models/session-model.mjs.map +1 -1
- package/dist/internal/models/step-up-model.d.mts +12 -50
- package/dist/internal/models/step-up-model.mjs +2 -4
- package/dist/internal/models/step-up-model.mjs.map +1 -1
- package/dist/internal/models/totp-model.d.mts +76 -0
- package/dist/internal/models/totp-model.mjs +10 -0
- package/dist/internal/models/totp-model.mjs.map +1 -0
- package/dist/internal/native-sql-table.d.mts +21 -4
- package/dist/internal/native-sql-table.mjs +9 -5
- package/dist/internal/native-sql-table.mjs.map +1 -1
- package/dist/internal/oauth/native-accounts.d.mts +17 -0
- package/dist/internal/oauth/native-accounts.mjs +290 -0
- package/dist/internal/oauth/native-accounts.mjs.map +1 -0
- package/dist/internal/oauth/native-connected-state.d.mts +11 -0
- package/dist/internal/oauth/native-connected-state.mjs +146 -0
- package/dist/internal/oauth/native-connected-state.mjs.map +1 -0
- package/dist/internal/oauth/native-connected.d.mts +15 -0
- package/dist/internal/oauth/native-connected.mjs +462 -0
- package/dist/internal/oauth/native-connected.mjs.map +1 -0
- package/dist/internal/oauth/native-flow.mjs +138 -0
- package/dist/internal/oauth/native-flow.mjs.map +1 -0
- package/dist/internal/oauth/native-layers.d.mts +24 -0
- package/dist/internal/oauth/native-layers.mjs +13 -0
- package/dist/internal/oauth/native-layers.mjs.map +1 -0
- package/dist/internal/oauth/native-mutation.mjs +122 -0
- package/dist/internal/oauth/native-mutation.mjs.map +1 -0
- package/dist/internal/oauth/native-registration.d.mts +24 -0
- package/dist/internal/oauth/native-registration.mjs +328 -0
- package/dist/internal/oauth/native-registration.mjs.map +1 -0
- package/dist/internal/oauth/native-revocations.d.mts +17 -0
- package/dist/internal/oauth/native-revocations.mjs +106 -0
- package/dist/internal/oauth/native-revocations.mjs.map +1 -0
- package/dist/internal/oauth/native-sign-in.d.mts +17 -0
- package/dist/internal/oauth/native-sign-in.mjs +50 -0
- package/dist/internal/oauth/native-sign-in.mjs.map +1 -0
- package/dist/internal/oauth/native-state.d.mts +10 -0
- package/dist/internal/oauth/native-state.mjs +214 -0
- package/dist/internal/oauth/native-state.mjs.map +1 -0
- package/dist/internal/oauth/state.d.mts +10 -0
- package/dist/internal/oauth/state.mjs +3 -27
- package/dist/internal/oauth/state.mjs.map +1 -1
- package/dist/internal/passkey-actions.mjs +55 -0
- package/dist/internal/passkey-actions.mjs.map +1 -0
- package/dist/internal/passkey-inputs.mjs +73 -0
- package/dist/internal/passkey-inputs.mjs.map +1 -0
- package/dist/internal/passkey-managed.mjs +224 -0
- package/dist/internal/passkey-managed.mjs.map +1 -0
- package/dist/internal/passkey-native-ceremony.d.mts +35 -0
- package/dist/internal/passkey-native-ceremony.mjs +38 -0
- package/dist/internal/passkey-native-ceremony.mjs.map +1 -0
- package/dist/internal/passkey-native-flow.mjs +91 -0
- package/dist/internal/passkey-native-flow.mjs.map +1 -0
- package/dist/internal/passkey-native-registration.d.mts +10 -0
- package/dist/internal/passkey-native-registration.mjs +114 -0
- package/dist/internal/passkey-native-registration.mjs.map +1 -0
- package/dist/internal/passkey-native-state.d.mts +15 -0
- package/dist/internal/passkey-native-state.mjs +186 -0
- package/dist/internal/passkey-native-state.mjs.map +1 -0
- package/dist/internal/passkey-native-write.d.mts +82 -0
- package/dist/internal/passkey-native-write.mjs +330 -0
- package/dist/internal/passkey-native-write.mjs.map +1 -0
- package/dist/internal/passkey-native.d.mts +835 -0
- package/dist/internal/passkey-native.mjs +175 -0
- package/dist/internal/passkey-native.mjs.map +1 -0
- package/dist/internal/passkey-policy.mjs +115 -0
- package/dist/internal/passkey-policy.mjs.map +1 -0
- package/dist/internal/password-credentials.mjs +38 -9
- package/dist/internal/password-credentials.mjs.map +1 -1
- package/dist/internal/password-native.d.mts +14 -0
- package/dist/internal/password-native.mjs +292 -0
- package/dist/internal/password-native.mjs.map +1 -0
- package/dist/internal/password-policy.mjs +93 -0
- package/dist/internal/password-policy.mjs.map +1 -0
- package/dist/internal/password-registration-native.d.mts +22 -0
- package/dist/internal/password-registration-native.mjs +142 -0
- package/dist/internal/password-registration-native.mjs.map +1 -0
- package/dist/internal/persistence.d.mts +6 -19
- package/dist/internal/persistence.mjs +199 -166
- package/dist/internal/persistence.mjs.map +1 -1
- package/dist/internal/phone-composed.mjs +79 -0
- package/dist/internal/phone-composed.mjs.map +1 -0
- package/dist/internal/phone-native.d.mts +15 -0
- package/dist/internal/phone-native.mjs +354 -0
- package/dist/internal/phone-native.mjs.map +1 -0
- package/dist/internal/proof-native.d.mts +15 -0
- package/dist/internal/proof-native.mjs +289 -0
- package/dist/internal/proof-native.mjs.map +1 -0
- package/dist/internal/registration.mjs +50 -60
- package/dist/internal/registration.mjs.map +1 -1
- package/dist/internal/session-native-authority.d.mts +15 -0
- package/dist/internal/session-native-authority.mjs +91 -0
- package/dist/internal/session-native-authority.mjs.map +1 -0
- package/dist/internal/session-native-cleanup.d.mts +14 -0
- package/dist/internal/session-native-cleanup.mjs +48 -0
- package/dist/internal/session-native-cleanup.mjs.map +1 -0
- package/dist/internal/session-native-login.d.mts +15 -0
- package/dist/internal/session-native-login.mjs +87 -0
- package/dist/internal/session-native-login.mjs.map +1 -0
- package/dist/internal/session-native-pending-read.mjs +42 -0
- package/dist/internal/session-native-pending-read.mjs.map +1 -0
- package/dist/internal/session-native-pending.mjs +134 -0
- package/dist/internal/session-native-pending.mjs.map +1 -0
- package/dist/internal/session-native-record.mjs +79 -0
- package/dist/internal/session-native-record.mjs.map +1 -0
- package/dist/internal/session-native-state.mjs +130 -0
- package/dist/internal/session-native-state.mjs.map +1 -0
- package/dist/internal/session-native-stateful.d.mts +16 -0
- package/dist/internal/session-native-stateful.mjs +225 -0
- package/dist/internal/session-native-stateful.mjs.map +1 -0
- package/dist/internal/session-native-step-up.d.mts +15 -0
- package/dist/internal/session-native-step-up.mjs +212 -0
- package/dist/internal/session-native-step-up.mjs.map +1 -0
- package/dist/internal/session-native-validity.d.mts +15 -0
- package/dist/internal/session-native-validity.mjs +97 -0
- package/dist/internal/session-native-validity.mjs.map +1 -0
- package/dist/internal/session-policy.mjs +29 -0
- package/dist/internal/session-policy.mjs.map +1 -0
- package/dist/internal/sql-authority.d.mts +16 -0
- package/dist/internal/sql-authority.mjs +32 -0
- package/dist/internal/sql-authority.mjs.map +1 -0
- package/dist/internal/sql-change.mjs +21 -0
- package/dist/internal/sql-change.mjs.map +1 -0
- package/dist/internal/sql-cleanup.mjs +35 -0
- package/dist/internal/sql-cleanup.mjs.map +1 -0
- package/dist/internal/sql-commit.d.mts +72 -0
- package/dist/internal/sql-commit.mjs +176 -0
- package/dist/internal/sql-commit.mjs.map +1 -0
- package/dist/internal/sql-expression.d.mts +17 -0
- package/dist/internal/sql-expression.mjs +49 -0
- package/dist/internal/sql-expression.mjs.map +1 -0
- package/dist/internal/sql-oauth-connected-model.d.mts +7 -23
- package/dist/internal/sql-oauth-model.d.mts +27 -52
- package/dist/internal/sql-oauth-model.mjs +3 -4
- package/dist/internal/sql-oauth-model.mjs.map +1 -1
- package/dist/internal/sql-persistence.mjs +5 -9
- package/dist/internal/sql-persistence.mjs.map +1 -1
- package/dist/internal/sql-storage-validation.mjs +1 -2
- package/dist/internal/sql-storage-validation.mjs.map +1 -1
- package/dist/internal/sql-table.d.mts +3 -16
- package/dist/internal/sql-table.mjs +21 -42
- package/dist/internal/sql-table.mjs.map +1 -1
- package/dist/internal/standalone.mjs +2 -3
- package/dist/internal/standalone.mjs.map +1 -1
- package/dist/internal/step-up-state.mjs +5 -8
- package/dist/internal/step-up-state.mjs.map +1 -1
- package/dist/internal/storage-clock.mjs +44 -0
- package/dist/internal/storage-clock.mjs.map +1 -0
- package/dist/internal/storage-mapping.d.mts +11 -8
- package/dist/internal/storage-mapping.mjs +88 -302
- package/dist/internal/storage-mapping.mjs.map +1 -1
- package/dist/internal/storage-plans.mjs +15 -73
- package/dist/internal/storage-plans.mjs.map +1 -1
- package/dist/internal/storage-tables.d.mts +37 -520
- package/dist/internal/storage-tables.mjs +31 -211
- package/dist/internal/storage-tables.mjs.map +1 -1
- package/dist/internal/storage-validation.d.mts +1 -6
- package/dist/internal/storage-validation.mjs +1 -42
- package/dist/internal/storage-validation.mjs.map +1 -1
- package/dist/internal/table-model.d.mts +21 -0
- package/dist/internal/totp-native.d.mts +15 -0
- package/dist/internal/totp-native.mjs +401 -0
- package/dist/internal/totp-native.mjs.map +1 -0
- package/package.json +1 -1
- package/src/Adapter.ts +143 -199
- package/src/OAuthPersistence.ts +128 -271
- package/src/index.ts +1 -1
- package/src/internal/browser-login.ts +54 -24
- package/src/internal/configuration.ts +16 -31
- package/src/internal/d1-planning.ts +7 -0
- package/src/internal/email-native-state.ts +247 -0
- package/src/internal/email-native.ts +514 -0
- package/src/internal/email-policy.ts +235 -0
- package/src/internal/email-registration-native.ts +386 -0
- package/src/internal/models/email-model.ts +76 -214
- package/src/internal/models/oauth-connected-model.ts +50 -288
- package/src/internal/models/oauth-model.ts +147 -368
- package/src/internal/models/passkey-model.ts +11 -208
- package/src/internal/models/passkey-registration-ceremony-model.ts +6 -60
- package/src/internal/models/passkey-write-model.ts +14 -95
- package/src/internal/models/password-model.ts +26 -147
- package/src/internal/models/phone-model.ts +110 -0
- package/src/internal/models/proof-model.ts +48 -404
- package/src/internal/models/session-model.ts +102 -200
- package/src/internal/models/step-up-model.ts +17 -96
- package/src/internal/models/totp-model.ts +82 -0
- package/src/internal/native-sql-table.ts +32 -11
- package/src/internal/oauth/native-accounts.ts +576 -0
- package/src/internal/oauth/native-connected-state.ts +288 -0
- package/src/internal/oauth/native-connected.ts +888 -0
- package/src/internal/oauth/native-flow.ts +253 -0
- package/src/internal/oauth/native-layers.ts +83 -0
- package/src/internal/oauth/native-mutation.ts +222 -0
- package/src/internal/oauth/native-registration.ts +545 -0
- package/src/internal/oauth/native-revocations.ts +190 -0
- package/src/internal/oauth/native-sign-in.ts +111 -0
- package/src/internal/oauth/native-state.ts +346 -0
- package/src/internal/oauth/state.ts +2 -70
- package/src/internal/passkey-actions.ts +70 -0
- package/src/internal/passkey-inputs.ts +56 -0
- package/src/internal/passkey-managed.ts +360 -0
- package/src/internal/passkey-native-ceremony.ts +66 -0
- package/src/internal/passkey-native-flow.ts +140 -0
- package/src/internal/passkey-native-registration.ts +221 -0
- package/src/internal/passkey-native-state.ts +335 -0
- package/src/internal/passkey-native-write.ts +611 -0
- package/src/internal/passkey-native.ts +372 -0
- package/src/internal/passkey-policy.ts +246 -0
- package/src/internal/password-credentials.ts +52 -10
- package/src/internal/password-native.ts +571 -0
- package/src/internal/password-policy.ts +307 -0
- package/src/internal/password-registration-native.ts +322 -0
- package/src/internal/persistence.ts +336 -290
- package/src/internal/phone-composed.ts +86 -0
- package/src/internal/phone-native.ts +659 -0
- package/src/internal/proof-native.ts +448 -0
- package/src/internal/registration.ts +96 -143
- package/src/internal/session-native-authority.ts +247 -0
- package/src/internal/session-native-cleanup.ts +65 -0
- package/src/internal/session-native-login.ts +205 -0
- package/src/internal/session-native-pending-read.ts +68 -0
- package/src/internal/session-native-pending.ts +223 -0
- package/src/internal/session-native-record.ts +141 -0
- package/src/internal/session-native-state.ts +259 -0
- package/src/internal/session-native-stateful.ts +512 -0
- package/src/internal/session-native-step-up.ts +450 -0
- package/src/internal/session-native-validity.ts +208 -0
- package/src/internal/session-policy.ts +59 -0
- package/src/internal/sql-authority.ts +56 -0
- package/src/internal/sql-change.ts +38 -0
- package/src/internal/sql-cleanup.ts +56 -0
- package/src/internal/sql-commit.ts +435 -0
- package/src/internal/sql-expression.ts +94 -0
- package/src/internal/sql-metadata.ts +100 -0
- package/src/internal/sql-oauth-connected-model.ts +6 -95
- package/src/internal/sql-oauth-model.ts +31 -134
- package/src/internal/sql-persistence.ts +2 -6
- package/src/internal/sql-storage-validation.ts +1 -2
- package/src/internal/sql-table.ts +19 -52
- package/src/internal/standalone.ts +2 -11
- package/src/internal/step-up-state.ts +4 -17
- package/src/internal/storage-clock.ts +58 -0
- package/src/internal/storage-mapping.ts +125 -340
- package/src/internal/storage-plans.ts +14 -80
- package/src/internal/storage-tables.ts +28 -212
- package/src/internal/storage-validation.ts +0 -58
- package/src/internal/table-model.ts +24 -0
- package/src/internal/totp-native.ts +701 -0
- package/dist/internal/PasswordPreparedPostconditions.d.mts +0 -22
- package/dist/internal/PasswordPreparedPostconditions.mjs +0 -12
- package/dist/internal/PasswordPreparedPostconditions.mjs.map +0 -1
- package/dist/internal/authority-snapshot.mjs +0 -53
- package/dist/internal/authority-snapshot.mjs.map +0 -1
- package/dist/internal/email-kernel.d.mts +0 -276
- package/dist/internal/email-kernel.mjs +0 -497
- package/dist/internal/email-kernel.mjs.map +0 -1
- package/dist/internal/models/passkey-registration-ceremony-model.mjs +0 -18
- package/dist/internal/models/passkey-registration-ceremony-model.mjs.map +0 -1
- package/dist/internal/oauth/accounts.d.mts +0 -8
- package/dist/internal/oauth/accounts.mjs +0 -379
- package/dist/internal/oauth/accounts.mjs.map +0 -1
- package/dist/internal/oauth/connected-access.d.mts +0 -9
- package/dist/internal/oauth/connected-access.mjs +0 -229
- package/dist/internal/oauth/connected-access.mjs.map +0 -1
- package/dist/internal/oauth/connected-collection.d.mts +0 -7
- package/dist/internal/oauth/connected-collection.mjs +0 -214
- package/dist/internal/oauth/connected-collection.mjs.map +0 -1
- package/dist/internal/oauth/connected-custody.d.mts +0 -6
- package/dist/internal/oauth/connected-custody.mjs +0 -165
- package/dist/internal/oauth/connected-custody.mjs.map +0 -1
- package/dist/internal/oauth/connected-flow.d.mts +0 -7
- package/dist/internal/oauth/connected-flow.mjs +0 -324
- package/dist/internal/oauth/connected-flow.mjs.map +0 -1
- package/dist/internal/oauth/connected-input.mjs +0 -122
- package/dist/internal/oauth/connected-input.mjs.map +0 -1
- package/dist/internal/oauth/connected-keys.d.mts +0 -2
- package/dist/internal/oauth/connected-keys.mjs +0 -22
- package/dist/internal/oauth/connected-keys.mjs.map +0 -1
- package/dist/internal/oauth/connected-maintenance.d.mts +0 -9
- package/dist/internal/oauth/connected-maintenance.mjs +0 -226
- package/dist/internal/oauth/connected-maintenance.mjs.map +0 -1
- package/dist/internal/oauth/connected-management.d.mts +0 -9
- package/dist/internal/oauth/connected-management.mjs +0 -243
- package/dist/internal/oauth/connected-management.mjs.map +0 -1
- package/dist/internal/oauth/connected-reference.mjs +0 -63
- package/dist/internal/oauth/connected-reference.mjs.map +0 -1
- package/dist/internal/oauth/connected-settlement.d.mts +0 -8
- package/dist/internal/oauth/connected-settlement.mjs +0 -141
- package/dist/internal/oauth/connected-settlement.mjs.map +0 -1
- package/dist/internal/oauth/connected-sign-in.d.mts +0 -10
- package/dist/internal/oauth/connected-sign-in.mjs +0 -281
- package/dist/internal/oauth/connected-sign-in.mjs.map +0 -1
- package/dist/internal/oauth/connected-state.d.mts +0 -14
- package/dist/internal/oauth/connected-state.mjs +0 -469
- package/dist/internal/oauth/connected-state.mjs.map +0 -1
- package/dist/internal/oauth/connected-target.d.mts +0 -21
- package/dist/internal/oauth/connected-target.mjs +0 -117
- package/dist/internal/oauth/connected-target.mjs.map +0 -1
- package/dist/internal/oauth/flow.d.mts +0 -5
- package/dist/internal/oauth/flow.mjs +0 -279
- package/dist/internal/oauth/flow.mjs.map +0 -1
- package/dist/internal/oauth/input.mjs +0 -127
- package/dist/internal/oauth/input.mjs.map +0 -1
- package/dist/internal/oauth/owner.d.mts +0 -10
- package/dist/internal/oauth/owner.mjs +0 -10
- package/dist/internal/oauth/owner.mjs.map +0 -1
- package/dist/internal/oauth/query-compiler.d.mts +0 -7
- package/dist/internal/oauth/query-compiler.mjs +0 -9
- package/dist/internal/oauth/query-compiler.mjs.map +0 -1
- package/dist/internal/oauth/registration.d.mts +0 -7
- package/dist/internal/oauth/registration.mjs +0 -393
- package/dist/internal/oauth/registration.mjs.map +0 -1
- package/dist/internal/oauth/target.d.mts +0 -31
- package/dist/internal/oauth/target.mjs +0 -273
- package/dist/internal/oauth/target.mjs.map +0 -1
- package/dist/internal/oauth-kernel.d.mts +0 -1423
- package/dist/internal/oauth-kernel.mjs +0 -187
- package/dist/internal/oauth-kernel.mjs.map +0 -1
- package/dist/internal/passkey/admission.d.mts +0 -6
- package/dist/internal/passkey/admission.mjs +0 -220
- package/dist/internal/passkey/admission.mjs.map +0 -1
- package/dist/internal/passkey/credentials.d.mts +0 -14
- package/dist/internal/passkey/credentials.mjs +0 -249
- package/dist/internal/passkey/credentials.mjs.map +0 -1
- package/dist/internal/passkey/enrollment.mjs +0 -138
- package/dist/internal/passkey/enrollment.mjs.map +0 -1
- package/dist/internal/passkey/flow.d.mts +0 -21
- package/dist/internal/passkey/flow.mjs +0 -452
- package/dist/internal/passkey/flow.mjs.map +0 -1
- package/dist/internal/passkey/management.mjs +0 -231
- package/dist/internal/passkey/management.mjs.map +0 -1
- package/dist/internal/passkey/registration-ceremony.d.mts +0 -9
- package/dist/internal/passkey/registration-ceremony.mjs +0 -129
- package/dist/internal/passkey/registration-ceremony.mjs.map +0 -1
- package/dist/internal/passkey/registration-custody.d.mts +0 -2
- package/dist/internal/passkey/registration-custody.mjs +0 -52
- package/dist/internal/passkey/registration-custody.mjs.map +0 -1
- package/dist/internal/passkey/registration-write.mjs +0 -211
- package/dist/internal/passkey/registration-write.mjs.map +0 -1
- package/dist/internal/passkey/state.d.mts +0 -10
- package/dist/internal/passkey/state.mjs +0 -234
- package/dist/internal/passkey/state.mjs.map +0 -1
- package/dist/internal/passkey/target.d.mts +0 -20
- package/dist/internal/passkey/target.mjs +0 -200
- package/dist/internal/passkey/target.mjs.map +0 -1
- package/dist/internal/passkey/write-state.d.mts +0 -17
- package/dist/internal/passkey/write-state.mjs +0 -354
- package/dist/internal/passkey/write-state.mjs.map +0 -1
- package/dist/internal/passkey/write-target.mjs +0 -192
- package/dist/internal/passkey/write-target.mjs.map +0 -1
- package/dist/internal/passkey-kernel.d.mts +0 -6045
- package/dist/internal/passkey-kernel.mjs +0 -49
- package/dist/internal/passkey-kernel.mjs.map +0 -1
- package/dist/internal/passkeys.d.mts +0 -7
- package/dist/internal/passkeys.mjs +0 -387
- package/dist/internal/passkeys.mjs.map +0 -1
- package/dist/internal/password-credentials.d.mts +0 -11
- package/dist/internal/password-kernel.d.mts +0 -278
- package/dist/internal/password-kernel.mjs +0 -508
- package/dist/internal/password-kernel.mjs.map +0 -1
- package/dist/internal/phone-kernel.d.mts +0 -162
- package/dist/internal/phone-kernel.mjs +0 -437
- package/dist/internal/phone-kernel.mjs.map +0 -1
- package/dist/internal/proof-kernel.d.mts +0 -94
- package/dist/internal/proof-kernel.mjs +0 -624
- package/dist/internal/proof-kernel.mjs.map +0 -1
- package/dist/internal/query-operations.d.mts +0 -68
- package/dist/internal/session-kernel.d.mts +0 -62
- package/dist/internal/session-kernel.mjs +0 -820
- package/dist/internal/session-kernel.mjs.map +0 -1
- package/dist/internal/sql-oauth-connected-model.mjs +0 -7
- package/dist/internal/sql-oauth-connected-model.mjs.map +0 -1
- package/dist/internal/sql-query.d.mts +0 -12
- package/dist/internal/sql-query.mjs +0 -206
- package/dist/internal/sql-query.mjs.map +0 -1
- package/dist/internal/step-up-state.d.mts +0 -49
- package/dist/internal/transaction-execution-kernel.d.mts +0 -37
- package/dist/internal/transaction-execution-kernel.mjs +0 -120
- package/dist/internal/transaction-execution-kernel.mjs.map +0 -1
- package/dist/internal/transaction-kernel.d.mts +0 -81
- package/dist/internal/transaction-kernel.mjs +0 -264
- package/dist/internal/transaction-kernel.mjs.map +0 -1
- package/src/internal/PasswordPreparedPostconditions.ts +0 -30
- package/src/internal/authority-snapshot.ts +0 -91
- package/src/internal/email-kernel.ts +0 -1556
- package/src/internal/oauth/accounts.ts +0 -839
- package/src/internal/oauth/connected-access.ts +0 -388
- package/src/internal/oauth/connected-collection.ts +0 -345
- package/src/internal/oauth/connected-custody.ts +0 -308
- package/src/internal/oauth/connected-flow.ts +0 -562
- package/src/internal/oauth/connected-input.ts +0 -147
- package/src/internal/oauth/connected-keys.ts +0 -31
- package/src/internal/oauth/connected-maintenance.ts +0 -379
- package/src/internal/oauth/connected-management.ts +0 -391
- package/src/internal/oauth/connected-reference.ts +0 -135
- package/src/internal/oauth/connected-settlement.ts +0 -278
- package/src/internal/oauth/connected-sign-in.ts +0 -472
- package/src/internal/oauth/connected-state.ts +0 -924
- package/src/internal/oauth/connected-target.ts +0 -307
- package/src/internal/oauth/flow.ts +0 -505
- package/src/internal/oauth/input.ts +0 -201
- package/src/internal/oauth/owner.ts +0 -22
- package/src/internal/oauth/query-compiler.ts +0 -15
- package/src/internal/oauth/registration.ts +0 -676
- package/src/internal/oauth/target.ts +0 -803
- package/src/internal/oauth-kernel.ts +0 -294
- package/src/internal/passkey/admission.ts +0 -368
- package/src/internal/passkey/credentials.ts +0 -511
- package/src/internal/passkey/enrollment.ts +0 -326
- package/src/internal/passkey/flow.ts +0 -1062
- package/src/internal/passkey/management.ts +0 -426
- package/src/internal/passkey/registration-ceremony.ts +0 -283
- package/src/internal/passkey/registration-custody.ts +0 -91
- package/src/internal/passkey/registration-write.ts +0 -426
- package/src/internal/passkey/state.ts +0 -351
- package/src/internal/passkey/target.ts +0 -598
- package/src/internal/passkey/write-state.ts +0 -692
- package/src/internal/passkey/write-target.ts +0 -450
- package/src/internal/passkey-kernel.ts +0 -112
- package/src/internal/passkeys.ts +0 -652
- package/src/internal/password-kernel.ts +0 -1523
- package/src/internal/phone-kernel.ts +0 -872
- package/src/internal/proof-kernel.ts +0 -1992
- package/src/internal/query-operations.ts +0 -91
- package/src/internal/session-kernel.ts +0 -2406
- package/src/internal/sql-query.ts +0 -304
- package/src/internal/transaction-execution-kernel.ts +0 -335
- package/src/internal/transaction-kernel.ts +0 -603
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import type { TokenDigest } from "@yielded/auth/Schema";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
type StatefulSessionRecord,
|
|
2
|
+
import type {
|
|
3
|
+
AuthenticationRequirement,
|
|
4
|
+
SecurityRevision,
|
|
5
|
+
SessionId,
|
|
6
|
+
AuthenticationFlowId,
|
|
7
|
+
PendingAuthenticationRecord,
|
|
8
|
+
StatefulSessionRecord,
|
|
10
9
|
} from "@yielded/auth/Sessions";
|
|
11
10
|
import type { DateTime, Effect } from "effect";
|
|
12
11
|
|
|
13
|
-
import type { TableModel as Table, SqlExpression } from "../
|
|
12
|
+
import type { TableModel as Table, SqlExpression } from "../table-model";
|
|
14
13
|
import type { PersistenceMappingError, SubjectIdCodec } from "./common";
|
|
14
|
+
import type { ProofClock } from "./proof-model";
|
|
15
15
|
|
|
16
16
|
type ColumnKey<T extends Table> = T["column"];
|
|
17
17
|
|
|
@@ -27,10 +27,14 @@ export interface SessionSubjectTables<Subject extends Table, NativeId> {
|
|
|
27
27
|
readonly id: ColumnKey<Subject>;
|
|
28
28
|
readonly status: ColumnKey<Subject>;
|
|
29
29
|
readonly securityRevision: ColumnKey<Subject>;
|
|
30
|
+
readonly activeStatusValue: unknown;
|
|
30
31
|
readonly isActiveStatus: (value: unknown) => boolean;
|
|
31
32
|
readonly decodeRequirement: (
|
|
32
33
|
row: Subject["select"],
|
|
33
34
|
) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
|
|
35
|
+
/** Required for D1 authority writes. Declare every mutable subject input of
|
|
36
|
+
* decodeRequirement; [] explicitly declares a constant requirement. */
|
|
37
|
+
readonly requirementColumns?: ReadonlyArray<ColumnKey<Subject>>;
|
|
34
38
|
readonly nextSecurityRevision?: (
|
|
35
39
|
current: SecurityRevision,
|
|
36
40
|
) => Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
@@ -49,53 +53,34 @@ export interface SessionAuthorityTables<
|
|
|
49
53
|
readonly subjectId: ColumnKey<Credential>;
|
|
50
54
|
readonly credentialId: ColumnKey<Credential>;
|
|
51
55
|
readonly revision: ColumnKey<Credential>;
|
|
52
|
-
/**
|
|
56
|
+
/** Omitted status means every row is an active credential. */
|
|
53
57
|
readonly status?: ColumnKey<Credential>;
|
|
58
|
+
readonly activeStatusValue?: unknown;
|
|
54
59
|
readonly isActiveStatus?: (value: unknown) => boolean;
|
|
55
60
|
};
|
|
56
61
|
}
|
|
57
62
|
|
|
58
|
-
export interface
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
readonly pendingStateValue: unknown;
|
|
67
|
-
readonly establishedStateValue: unknown;
|
|
68
|
-
readonly encodeInstant: (instant: DateTime.Utc) => unknown;
|
|
69
|
-
readonly decodeInstant: (
|
|
70
|
-
native: unknown,
|
|
71
|
-
) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
|
|
72
|
-
readonly encodePendingInsert: (input: {
|
|
73
|
-
readonly evidence: AuthenticationEvidence;
|
|
74
|
-
readonly subjectId: NativeSubjectId;
|
|
75
|
-
readonly pendingDigest: TokenDigest;
|
|
76
|
-
readonly dedupUntil: DateTime.Utc;
|
|
77
|
-
}) => Flow["insert"];
|
|
78
|
-
readonly encodeEstablishedInsert: (input: {
|
|
79
|
-
readonly evidence: AuthenticationEvidence;
|
|
80
|
-
readonly subjectId: NativeSubjectId;
|
|
81
|
-
readonly dedupUntil: DateTime.Utc;
|
|
82
|
-
}) => Flow["insert"];
|
|
83
|
-
};
|
|
63
|
+
export interface SessionExecution<Expression extends SqlExpression = SqlExpression> {
|
|
64
|
+
/** Exact session module scope for pending rows and revocation tombstones. */
|
|
65
|
+
readonly moduleId: string;
|
|
66
|
+
readonly clock: ProofClock<Expression>;
|
|
67
|
+
/** D1 mappings must use the authoritative primary database. */
|
|
68
|
+
readonly d1?: { readonly primary: true };
|
|
69
|
+
/** Match only the declared unique keys, never generic SQL failures. */
|
|
70
|
+
readonly isConstraintConflict: (cause: unknown) => boolean;
|
|
84
71
|
}
|
|
85
72
|
|
|
86
73
|
export interface StatefulSessionTables<
|
|
87
74
|
Claims,
|
|
88
75
|
Session extends Table,
|
|
89
|
-
Flow extends Table,
|
|
90
76
|
NativeSubjectId,
|
|
91
77
|
NativeSessionId,
|
|
92
|
-
>
|
|
78
|
+
> {
|
|
93
79
|
readonly session: {
|
|
94
80
|
readonly table: Session["table"];
|
|
95
81
|
readonly sessionId: ColumnKey<Session>;
|
|
96
82
|
readonly subjectId: ColumnKey<Session>;
|
|
97
83
|
readonly digest: ColumnKey<Session>;
|
|
98
|
-
readonly version: ColumnKey<Session>;
|
|
99
84
|
readonly securityRevision: ColumnKey<Session>;
|
|
100
85
|
readonly issuedAt: ColumnKey<Session>;
|
|
101
86
|
readonly expiresAt: ColumnKey<Session>;
|
|
@@ -103,60 +88,69 @@ export interface StatefulSessionTables<
|
|
|
103
88
|
readonly encodeInstant: (instant: DateTime.Utc) => unknown;
|
|
104
89
|
readonly encodeInsert: (
|
|
105
90
|
record: StatefulSessionRecord<Claims>,
|
|
106
|
-
ids: {
|
|
107
|
-
readonly subjectId: NativeSubjectId;
|
|
108
|
-
readonly sessionId: NativeSessionId;
|
|
109
|
-
},
|
|
91
|
+
ids: { readonly subjectId: NativeSubjectId; readonly sessionId: NativeSessionId },
|
|
110
92
|
) => Session["insert"];
|
|
111
|
-
/**
|
|
93
|
+
/** Replace prepared metadata and retain exact private provenance. Digest binds the immutable source metadata. */
|
|
112
94
|
readonly encodeRotation: (record: StatefulSessionRecord<Claims>) => Partial<Session["insert"]>;
|
|
113
95
|
readonly decode: (
|
|
114
96
|
row: Session["select"],
|
|
115
97
|
) => Effect.Effect<StatefulSessionRecord<Claims>, PersistenceMappingError>;
|
|
116
98
|
readonly allocateId?: Effect.Effect<NativeSessionId, PersistenceMappingError>;
|
|
117
99
|
readonly allocateIdSync?: () => NativeSessionId;
|
|
118
|
-
readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
119
|
-
readonly allocateVersionSync?: () => SecurityRevision;
|
|
120
100
|
};
|
|
121
101
|
readonly sessionId: SessionIdCodec<NativeSessionId>;
|
|
122
102
|
}
|
|
123
103
|
|
|
124
|
-
export interface
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
104
|
+
export interface SessionPendingInsert<NativeId> {
|
|
105
|
+
readonly moduleId: string;
|
|
106
|
+
readonly kind: "Login" | "StepUp";
|
|
107
|
+
readonly digest: TokenDigest;
|
|
108
|
+
readonly version: SecurityRevision;
|
|
109
|
+
readonly flowId: AuthenticationFlowId;
|
|
110
|
+
readonly subjectId: NativeId;
|
|
111
|
+
readonly bindingDigest: TokenDigest;
|
|
112
|
+
readonly snapshot: string;
|
|
113
|
+
readonly expiresAt: DateTime.Utc;
|
|
114
|
+
readonly attemptLimit: number;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** One physical table and one SQL owner for Login and StepUp. The adapter sets
|
|
118
|
+
* every guard column and binds kind before decoding, charging or consuming. */
|
|
119
|
+
export interface SessionPendingTables<Pending extends Table, NativeSubjectId> {
|
|
130
120
|
readonly pending: {
|
|
131
121
|
readonly table: Pending["table"];
|
|
122
|
+
readonly moduleId: ColumnKey<Pending>;
|
|
123
|
+
readonly kind: ColumnKey<Pending>;
|
|
132
124
|
readonly digest: ColumnKey<Pending>;
|
|
133
125
|
readonly version: ColumnKey<Pending>;
|
|
134
126
|
readonly flowId: ColumnKey<Pending>;
|
|
135
127
|
readonly subjectId: ColumnKey<Pending>;
|
|
136
128
|
readonly bindingDigest: ColumnKey<Pending>;
|
|
129
|
+
readonly snapshot: ColumnKey<Pending>;
|
|
137
130
|
readonly expiresAt: ColumnKey<Pending>;
|
|
138
131
|
readonly attemptLimit: ColumnKey<Pending>;
|
|
139
132
|
readonly failedAttempts: ColumnKey<Pending>;
|
|
140
133
|
readonly consumed: ColumnKey<Pending>;
|
|
141
134
|
readonly encodeInstant: (instant: DateTime.Utc) => unknown;
|
|
142
|
-
readonly encodeInsert: (
|
|
135
|
+
readonly encodeInsert: (input: SessionPendingInsert<NativeSubjectId>) => Pending["insert"];
|
|
136
|
+
readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
137
|
+
readonly allocateVersionSync?: () => SecurityRevision;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export interface PendingAuthenticationTables<
|
|
142
|
+
Claims,
|
|
143
|
+
Pending extends Table,
|
|
144
|
+
NativeSubjectId,
|
|
145
|
+
> extends SessionPendingTables<Pending, NativeSubjectId> {
|
|
146
|
+
/** Canonical JSON of the full record; the consumer Schema owns Claims encoding. */
|
|
147
|
+
readonly login: {
|
|
148
|
+
readonly encode: (
|
|
143
149
|
record: PendingAuthenticationRecord<Claims>,
|
|
144
|
-
|
|
145
|
-
readonly subjectId: NativeSubjectId;
|
|
146
|
-
readonly failedAttempts: 0;
|
|
147
|
-
readonly consumed: false;
|
|
148
|
-
},
|
|
149
|
-
) => Pending["insert"];
|
|
150
|
+
) => Effect.Effect<string, PersistenceMappingError>;
|
|
150
151
|
readonly decode: (
|
|
151
|
-
|
|
152
|
+
snapshot: unknown,
|
|
152
153
|
) => Effect.Effect<PendingAuthenticationRecord<Claims>, PersistenceMappingError>;
|
|
153
|
-
/** Decodes original evidence and storage guards only. The internal pending
|
|
154
|
-
* context lookup must not execute unrelated consumer Claims transforms. */
|
|
155
|
-
readonly decodeContext: (
|
|
156
|
-
row: Pending["select"],
|
|
157
|
-
) => Effect.Effect<PendingAuthenticationState, PersistenceMappingError>;
|
|
158
|
-
readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
159
|
-
readonly allocateVersionSync?: () => SecurityRevision;
|
|
160
154
|
};
|
|
161
155
|
}
|
|
162
156
|
|
|
@@ -167,6 +161,7 @@ export interface SignedSessionValidityTables<
|
|
|
167
161
|
> {
|
|
168
162
|
readonly tombstone: {
|
|
169
163
|
readonly table: Tombstone["table"];
|
|
164
|
+
readonly moduleId: ColumnKey<Tombstone>;
|
|
170
165
|
readonly subjectId: ColumnKey<Tombstone>;
|
|
171
166
|
readonly sessionId: ColumnKey<Tombstone>;
|
|
172
167
|
readonly absoluteExpiresAt: ColumnKey<Tombstone>;
|
|
@@ -175,6 +170,7 @@ export interface SignedSessionValidityTables<
|
|
|
175
170
|
native: unknown,
|
|
176
171
|
) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
|
|
177
172
|
readonly encodeInsert: (input: {
|
|
173
|
+
readonly moduleId: string;
|
|
178
174
|
readonly subjectId: NativeSubjectId;
|
|
179
175
|
readonly sessionId: NativeSessionId;
|
|
180
176
|
readonly absoluteExpiresAt: DateTime.Utc;
|
|
@@ -183,69 +179,42 @@ export interface SignedSessionValidityTables<
|
|
|
183
179
|
readonly sessionId: SessionIdCodec<NativeSessionId>;
|
|
184
180
|
}
|
|
185
181
|
|
|
186
|
-
export
|
|
187
|
-
readonly sessionDigest: "unique(session.digest)";
|
|
188
|
-
readonly flowId: "unique(flow.flowId)";
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
export interface RequiredPendingAuthenticationConstraints {
|
|
192
|
-
readonly pendingDigest: "unique(pending.digest)";
|
|
193
|
-
readonly pendingFlow: "unique(pending.flowId)";
|
|
194
|
-
readonly flowId: "unique(flow.flowId)";
|
|
195
|
-
}
|
|
182
|
+
export const requiredSessionConstraints = { sessionDigest: "unique(session.digest)" } as const;
|
|
196
183
|
|
|
197
|
-
export
|
|
198
|
-
extends RequiredSessionConstraints, RequiredPendingAuthenticationConstraints {}
|
|
199
|
-
|
|
200
|
-
export interface RequiredSignedValidityConstraints {
|
|
201
|
-
readonly tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)";
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
export const requiredSessionConstraints: RequiredSessionConstraints = {
|
|
205
|
-
sessionDigest: "unique(session.digest)",
|
|
206
|
-
flowId: "unique(flow.flowId)",
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
export const requiredPendingAuthenticationConstraints: RequiredPendingAuthenticationConstraints = {
|
|
184
|
+
export const requiredPendingAuthenticationConstraints = {
|
|
210
185
|
pendingDigest: "unique(pending.digest)",
|
|
211
|
-
|
|
212
|
-
flowId: "unique(flow.flowId)",
|
|
213
|
-
};
|
|
186
|
+
} as const;
|
|
214
187
|
|
|
215
|
-
export const requiredStatefulPendingConstraints
|
|
188
|
+
export const requiredStatefulPendingConstraints = {
|
|
216
189
|
...requiredSessionConstraints,
|
|
217
190
|
...requiredPendingAuthenticationConstraints,
|
|
218
|
-
};
|
|
191
|
+
} as const;
|
|
219
192
|
|
|
220
|
-
export const requiredSignedValidityConstraints
|
|
221
|
-
tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)",
|
|
222
|
-
};
|
|
193
|
+
export const requiredSignedValidityConstraints = {
|
|
194
|
+
tombstoneOwner: "unique(tombstone.moduleId,tombstone.subjectId,tombstone.sessionId)",
|
|
195
|
+
} as const;
|
|
223
196
|
|
|
224
|
-
export
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
197
|
+
export type RequiredSessionConstraints = typeof requiredSessionConstraints;
|
|
198
|
+
|
|
199
|
+
export type RequiredPendingAuthenticationConstraints =
|
|
200
|
+
typeof requiredPendingAuthenticationConstraints;
|
|
201
|
+
|
|
202
|
+
export type RequiredStatefulPendingConstraints = typeof requiredStatefulPendingConstraints;
|
|
203
|
+
export type RequiredSignedValidityConstraints = typeof requiredSignedValidityConstraints;
|
|
232
204
|
|
|
233
205
|
export type AuthenticationAuthorityMapping<
|
|
234
206
|
Claims,
|
|
235
207
|
Subject extends Table,
|
|
236
208
|
Credential extends Table,
|
|
237
|
-
Flow extends Table,
|
|
238
209
|
Pending extends Table,
|
|
239
210
|
NativeSubjectId,
|
|
211
|
+
Expression extends SqlExpression = SqlExpression,
|
|
240
212
|
> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
|
|
241
|
-
|
|
213
|
+
SessionExecution<Expression> &
|
|
242
214
|
(
|
|
215
|
+
| { readonly pending?: undefined }
|
|
243
216
|
| {
|
|
244
|
-
|
|
245
|
-
readonly pending?: undefined;
|
|
246
|
-
}
|
|
247
|
-
| {
|
|
248
|
-
readonly pending: PendingAuthenticationTables<Claims, Pending, Flow, NativeSubjectId>;
|
|
217
|
+
readonly pending: PendingAuthenticationTables<Claims, Pending, NativeSubjectId>;
|
|
249
218
|
readonly constraints: RequiredPendingAuthenticationConstraints;
|
|
250
219
|
}
|
|
251
220
|
);
|
|
@@ -255,26 +224,17 @@ export type StatefulSessionMapping<
|
|
|
255
224
|
Subject extends Table,
|
|
256
225
|
Credential extends Table,
|
|
257
226
|
Session extends Table,
|
|
258
|
-
Flow extends Table,
|
|
259
227
|
Pending extends Table,
|
|
260
228
|
NativeSubjectId,
|
|
261
229
|
NativeSessionId,
|
|
230
|
+
Expression extends SqlExpression = SqlExpression,
|
|
262
231
|
> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
|
|
263
|
-
StatefulSessionTables<Claims, Session,
|
|
264
|
-
|
|
232
|
+
StatefulSessionTables<Claims, Session, NativeSubjectId, NativeSessionId> &
|
|
233
|
+
SessionExecution<Expression> &
|
|
265
234
|
(
|
|
235
|
+
| { readonly pending?: undefined; readonly constraints: RequiredSessionConstraints }
|
|
266
236
|
| {
|
|
267
|
-
|
|
268
|
-
readonly pending?: undefined;
|
|
269
|
-
readonly constraints: RequiredSessionConstraints;
|
|
270
|
-
}
|
|
271
|
-
| {
|
|
272
|
-
readonly pending: PendingAuthenticationTables<
|
|
273
|
-
Claims,
|
|
274
|
-
Pending,
|
|
275
|
-
Flow,
|
|
276
|
-
NativeSubjectId
|
|
277
|
-
>["pending"];
|
|
237
|
+
readonly pending: PendingAuthenticationTables<Claims, Pending, NativeSubjectId>;
|
|
278
238
|
readonly constraints: RequiredStatefulPendingConstraints;
|
|
279
239
|
}
|
|
280
240
|
);
|
|
@@ -284,92 +244,34 @@ export type PendingAuthenticationMapping<
|
|
|
284
244
|
Subject extends Table,
|
|
285
245
|
Credential extends Table,
|
|
286
246
|
Pending extends Table,
|
|
287
|
-
Flow extends Table,
|
|
288
247
|
NativeSubjectId,
|
|
248
|
+
Expression extends SqlExpression = SqlExpression,
|
|
289
249
|
> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
|
|
290
|
-
PendingAuthenticationTables<Claims, Pending,
|
|
291
|
-
|
|
292
|
-
readonly constraints: RequiredPendingAuthenticationConstraints;
|
|
293
|
-
};
|
|
250
|
+
PendingAuthenticationTables<Claims, Pending, NativeSubjectId> &
|
|
251
|
+
SessionExecution<Expression> & { readonly constraints: RequiredPendingAuthenticationConstraints };
|
|
294
252
|
|
|
295
253
|
export type SignedSessionValidityMapping<
|
|
296
254
|
Subject extends Table,
|
|
297
255
|
Tombstone extends Table,
|
|
298
256
|
NativeSubjectId,
|
|
299
257
|
NativeSessionId,
|
|
258
|
+
Expression extends SqlExpression = SqlExpression,
|
|
300
259
|
> = SessionSubjectTables<Subject, NativeSubjectId> &
|
|
301
260
|
SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId> &
|
|
302
|
-
|
|
303
|
-
readonly constraints: RequiredSignedValidityConstraints;
|
|
304
|
-
};
|
|
261
|
+
SessionExecution<Expression> & { readonly constraints: RequiredSignedValidityConstraints };
|
|
305
262
|
|
|
306
|
-
/**
|
|
307
|
-
|
|
308
|
-
* column. `engineNowMillis` is Unix epoch milliseconds for proof freshness.
|
|
309
|
-
* Changes to the consumer's factor policy MUST bump subject.securityRevision.
|
|
310
|
-
* Supply the authoritative primary D1 database, never a replica-affined
|
|
311
|
-
* `withSession` handle, because verification and security revision reads must
|
|
312
|
-
* observe completed revocation writes across clients.
|
|
313
|
-
*/
|
|
314
|
-
export interface D1SessionClockMapping<Expression extends SqlExpression = SqlExpression> {
|
|
315
|
-
readonly d1: {
|
|
316
|
-
readonly engineNow: Expression;
|
|
317
|
-
readonly engineNowMillis: Expression;
|
|
318
|
-
readonly activeSubjectStatusValue: unknown;
|
|
319
|
-
/** Required when `credential.status` is mapped. */
|
|
320
|
-
readonly activeCredentialStatusValue?: unknown;
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
export type D1AuthenticationAuthorityMapping<
|
|
325
|
-
Claims,
|
|
326
|
-
Subject extends Table,
|
|
327
|
-
Credential extends Table,
|
|
328
|
-
Flow extends Table,
|
|
263
|
+
/** Maintenance uses the same mapped rows and one total per-call deletion limit. */
|
|
264
|
+
export type SessionCleanupMapping<
|
|
329
265
|
Pending extends Table,
|
|
330
|
-
NativeSubjectId,
|
|
331
|
-
Expression extends SqlExpression = SqlExpression,
|
|
332
|
-
> = AuthenticationAuthorityMapping<Claims, Subject, Credential, Flow, Pending, NativeSubjectId> &
|
|
333
|
-
D1SessionClockMapping<Expression>;
|
|
334
|
-
|
|
335
|
-
export type D1PendingAuthenticationMapping<
|
|
336
|
-
Claims,
|
|
337
|
-
Subject extends Table,
|
|
338
|
-
Credential extends Table,
|
|
339
|
-
Pending extends Table,
|
|
340
|
-
Flow extends Table,
|
|
341
|
-
NativeSubjectId,
|
|
342
|
-
Expression extends SqlExpression = SqlExpression,
|
|
343
|
-
> = PendingAuthenticationMapping<Claims, Subject, Credential, Pending, Flow, NativeSubjectId> &
|
|
344
|
-
D1SessionClockMapping<Expression>;
|
|
345
|
-
|
|
346
|
-
export type D1StatefulSessionMapping<
|
|
347
|
-
Claims,
|
|
348
|
-
Subject extends Table,
|
|
349
|
-
Credential extends Table,
|
|
350
|
-
Session extends Table,
|
|
351
|
-
Flow extends Table,
|
|
352
|
-
Pending extends Table,
|
|
353
|
-
NativeSubjectId,
|
|
354
|
-
NativeSessionId,
|
|
355
|
-
Expression extends SqlExpression = SqlExpression,
|
|
356
|
-
> = StatefulSessionMapping<
|
|
357
|
-
Claims,
|
|
358
|
-
Subject,
|
|
359
|
-
Credential,
|
|
360
|
-
Session,
|
|
361
|
-
Flow,
|
|
362
|
-
Pending,
|
|
363
|
-
NativeSubjectId,
|
|
364
|
-
NativeSessionId
|
|
365
|
-
> &
|
|
366
|
-
D1SessionClockMapping<Expression>;
|
|
367
|
-
|
|
368
|
-
export type D1SignedSessionValidityMapping<
|
|
369
|
-
Subject extends Table,
|
|
370
266
|
Tombstone extends Table,
|
|
371
267
|
NativeSubjectId,
|
|
372
268
|
NativeSessionId,
|
|
373
269
|
Expression extends SqlExpression = SqlExpression,
|
|
374
|
-
> =
|
|
375
|
-
|
|
270
|
+
> = Pick<SessionExecution<Expression>, "moduleId" | "clock" | "d1"> & {
|
|
271
|
+
readonly pending?: SessionPendingTables<Pending, NativeSubjectId>["pending"];
|
|
272
|
+
readonly tombstone?: SignedSessionValidityTables<
|
|
273
|
+
Tombstone,
|
|
274
|
+
NativeSubjectId,
|
|
275
|
+
NativeSessionId
|
|
276
|
+
>["tombstone"];
|
|
277
|
+
};
|
|
@@ -1,59 +1,18 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { DateTime, Effect } from "effect";
|
|
3
|
-
|
|
4
|
-
import type { TableModel as Table, SqlExpression } from "../query-operations";
|
|
5
|
-
import type { PersistenceMappingError } from "./common";
|
|
1
|
+
import type { TableModel as Table, SqlExpression } from "../table-model";
|
|
6
2
|
import type {
|
|
7
|
-
D1SessionClockMapping,
|
|
8
3
|
SessionAuthorityTables,
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
SessionExecution,
|
|
5
|
+
SessionPendingTables,
|
|
11
6
|
SignedSessionValidityTables,
|
|
12
7
|
StatefulSessionTables,
|
|
13
8
|
} from "./session-model";
|
|
9
|
+
import { requiredPendingAuthenticationConstraints } from "./session-model";
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/** Distinct from login-pending storage. Snapshot is TEXT encoded by the core's
|
|
18
|
-
* SessionStepUpIntent schema; it contains no Claims and needs no consumer decoder. */
|
|
19
|
-
export interface SessionStepUpIntentTables<Intent extends Table, NativeSubjectId> {
|
|
20
|
-
readonly intent: {
|
|
21
|
-
readonly table: Intent["table"];
|
|
22
|
-
readonly digest: ColumnKey<Intent>;
|
|
23
|
-
readonly version: ColumnKey<Intent>;
|
|
24
|
-
readonly flowId: ColumnKey<Intent>;
|
|
25
|
-
readonly subjectId: ColumnKey<Intent>;
|
|
26
|
-
readonly bindingDigest: ColumnKey<Intent>;
|
|
27
|
-
readonly snapshot: ColumnKey<Intent>;
|
|
28
|
-
readonly expiresAt: ColumnKey<Intent>;
|
|
29
|
-
readonly attemptLimit: ColumnKey<Intent>;
|
|
30
|
-
readonly failedAttempts: ColumnKey<Intent>;
|
|
31
|
-
readonly consumed: ColumnKey<Intent>;
|
|
32
|
-
readonly encodeInstant: (instant: DateTime.Utc) => unknown;
|
|
33
|
-
/** Consumer fields/defaults; the adapter sets all mapped security columns. */
|
|
34
|
-
readonly encodeInsert: (
|
|
35
|
-
intent: SessionStepUpIntent,
|
|
36
|
-
input: {
|
|
37
|
-
readonly subjectId: NativeSubjectId;
|
|
38
|
-
},
|
|
39
|
-
) => Intent["insert"];
|
|
40
|
-
readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
41
|
-
readonly allocateVersionSync?: () => SecurityRevision;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface RequiredSessionStepUpConstraints {
|
|
46
|
-
readonly intentDigest: "unique(intent.digest)";
|
|
47
|
-
readonly intentFlow: "unique(intent.flowId)";
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export const requiredSessionStepUpConstraints: RequiredSessionStepUpConstraints = {
|
|
51
|
-
intentDigest: "unique(intent.digest)",
|
|
52
|
-
intentFlow: "unique(intent.flowId)",
|
|
53
|
-
};
|
|
11
|
+
export const requiredSessionStepUpConstraints = requiredPendingAuthenticationConstraints;
|
|
12
|
+
export type RequiredSessionStepUpConstraints = typeof requiredSessionStepUpConstraints;
|
|
54
13
|
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
14
|
+
/** Stateful metadata is decoded from the exact inspected digest's record. No
|
|
15
|
+
* duplicate credentialVersion/authenticatedAt columns or row-version CAS. */
|
|
57
16
|
export type SessionStepUpSourceTables<
|
|
58
17
|
Claims,
|
|
59
18
|
Session extends Table,
|
|
@@ -61,47 +20,31 @@ export type SessionStepUpSourceTables<
|
|
|
61
20
|
NativeSubjectId,
|
|
62
21
|
NativeSessionId,
|
|
63
22
|
> =
|
|
64
|
-
| {
|
|
65
|
-
readonly kind: "StatelessSigned";
|
|
66
|
-
}
|
|
23
|
+
| { readonly kind: "StatelessSigned" }
|
|
67
24
|
| ({
|
|
68
25
|
readonly kind: "StateAssistedSigned";
|
|
69
26
|
readonly constraints: {
|
|
70
|
-
readonly tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)";
|
|
27
|
+
readonly tombstoneOwner: "unique(tombstone.moduleId,tombstone.subjectId,tombstone.sessionId)";
|
|
71
28
|
};
|
|
72
29
|
} & SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId>)
|
|
73
|
-
| {
|
|
30
|
+
| ({
|
|
74
31
|
readonly kind: "Stateful";
|
|
75
|
-
readonly constraints: {
|
|
76
|
-
|
|
77
|
-
};
|
|
78
|
-
readonly sessionId: SessionIdCodec<NativeSessionId>;
|
|
79
|
-
/** encodeRotation must replace Claims, provenance, and the queryable security
|
|
80
|
-
* fields together; it must not retain the old proof payload. */
|
|
81
|
-
readonly session: StatefulSessionTables<
|
|
82
|
-
Claims,
|
|
83
|
-
Session,
|
|
84
|
-
Table,
|
|
85
|
-
NativeSubjectId,
|
|
86
|
-
NativeSessionId
|
|
87
|
-
>["session"] & {
|
|
88
|
-
readonly credentialVersion: ColumnKey<Session>;
|
|
89
|
-
readonly authenticatedAt: ColumnKey<Session>;
|
|
90
|
-
};
|
|
91
|
-
};
|
|
32
|
+
readonly constraints: { readonly sessionDigest: "unique(session.digest)" };
|
|
33
|
+
} & StatefulSessionTables<Claims, Session, NativeSubjectId, NativeSessionId>);
|
|
92
34
|
|
|
93
35
|
export type SessionStepUpMapping<
|
|
94
36
|
Claims,
|
|
95
37
|
Subject extends Table,
|
|
96
38
|
Credential extends Table,
|
|
97
|
-
|
|
39
|
+
Pending extends Table,
|
|
98
40
|
Session extends Table,
|
|
99
41
|
Tombstone extends Table,
|
|
100
42
|
NativeSubjectId,
|
|
101
43
|
NativeSessionId,
|
|
44
|
+
Expression extends SqlExpression = SqlExpression,
|
|
102
45
|
> = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
|
|
103
|
-
|
|
104
|
-
|
|
46
|
+
SessionPendingTables<Pending, NativeSubjectId> &
|
|
47
|
+
SessionExecution<Expression> & {
|
|
105
48
|
readonly source: SessionStepUpSourceTables<
|
|
106
49
|
Claims,
|
|
107
50
|
Session,
|
|
@@ -111,25 +54,3 @@ export type SessionStepUpMapping<
|
|
|
111
54
|
>;
|
|
112
55
|
readonly constraints: RequiredSessionStepUpConstraints;
|
|
113
56
|
};
|
|
114
|
-
|
|
115
|
-
export type D1SessionStepUpMapping<
|
|
116
|
-
Claims,
|
|
117
|
-
Subject extends Table,
|
|
118
|
-
Credential extends Table,
|
|
119
|
-
Intent extends Table,
|
|
120
|
-
Session extends Table,
|
|
121
|
-
Tombstone extends Table,
|
|
122
|
-
NativeSubjectId,
|
|
123
|
-
NativeSessionId,
|
|
124
|
-
Expression extends SqlExpression = SqlExpression,
|
|
125
|
-
> = SessionStepUpMapping<
|
|
126
|
-
Claims,
|
|
127
|
-
Subject,
|
|
128
|
-
Credential,
|
|
129
|
-
Intent,
|
|
130
|
-
Session,
|
|
131
|
-
Tombstone,
|
|
132
|
-
NativeSubjectId,
|
|
133
|
-
NativeSessionId
|
|
134
|
-
> &
|
|
135
|
-
D1SessionClockMapping<Expression>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { SubjectId } from "@yielded/auth/Schema";
|
|
2
|
+
import type { AuthenticationRequirement } from "@yielded/auth/Sessions";
|
|
3
|
+
import type { TotpPolicy } from "@yielded/auth/Totp";
|
|
4
|
+
import type { Effect } from "effect";
|
|
5
|
+
|
|
6
|
+
import type { PersistenceMappingError } from "../mapping-error";
|
|
7
|
+
import type { TableModel, SqlExpression } from "../table-model";
|
|
8
|
+
import type { ProofClock } from "./proof-model";
|
|
9
|
+
import type { PendingAuthenticationTables } from "./session-model";
|
|
10
|
+
|
|
11
|
+
export const requiredTotpConstraints = {
|
|
12
|
+
factor: "unique(scope)",
|
|
13
|
+
credential: "unique(credentialId)",
|
|
14
|
+
subject: "unique(id)",
|
|
15
|
+
} as const;
|
|
16
|
+
|
|
17
|
+
export type TotpMappingSource<M, R = never> = M | Effect.Effect<M, PersistenceMappingError, R>;
|
|
18
|
+
|
|
19
|
+
/** One encrypted factor row and the common credential authority. Version protects
|
|
20
|
+
* accepted-step, failure-budget and recovery-code changes; no command receipts. */
|
|
21
|
+
export interface TotpMapping<
|
|
22
|
+
S extends TableModel,
|
|
23
|
+
F extends TableModel,
|
|
24
|
+
C extends TableModel,
|
|
25
|
+
N,
|
|
26
|
+
P extends TableModel = TableModel,
|
|
27
|
+
Expression extends SqlExpression = SqlExpression,
|
|
28
|
+
> {
|
|
29
|
+
readonly moduleId: string;
|
|
30
|
+
readonly policy: TotpPolicy;
|
|
31
|
+
readonly constraints: typeof requiredTotpConstraints;
|
|
32
|
+
readonly d1?: { readonly primary: true };
|
|
33
|
+
readonly subjectIds: {
|
|
34
|
+
readonly toNative: (id: SubjectId) => N;
|
|
35
|
+
readonly toSubject: (id: N) => SubjectId;
|
|
36
|
+
};
|
|
37
|
+
readonly subject: {
|
|
38
|
+
readonly table: S["table"];
|
|
39
|
+
readonly id: S["column"];
|
|
40
|
+
readonly securityRevision: S["column"];
|
|
41
|
+
readonly factorEnabled: S["column"];
|
|
42
|
+
readonly activeCondition: Expression;
|
|
43
|
+
readonly encodeEnabled: (enabled: boolean) => unknown;
|
|
44
|
+
readonly decodeRequirement: (row: S["select"]) => AuthenticationRequirement;
|
|
45
|
+
/** Required for D1: declare every independently mutable input read by
|
|
46
|
+
* decodeRequirement. An explicit [] promises a constant requirement. */
|
|
47
|
+
readonly requirementColumns?: ReadonlyArray<S["column"]>;
|
|
48
|
+
};
|
|
49
|
+
readonly factor: {
|
|
50
|
+
readonly table: F["table"];
|
|
51
|
+
readonly scope: F["column"];
|
|
52
|
+
readonly state: F["column"];
|
|
53
|
+
readonly version: F["column"];
|
|
54
|
+
readonly encodeInsert: (value: {
|
|
55
|
+
readonly scope: string;
|
|
56
|
+
readonly state: string;
|
|
57
|
+
readonly version: string;
|
|
58
|
+
}) => F["insert"];
|
|
59
|
+
};
|
|
60
|
+
readonly credential: {
|
|
61
|
+
readonly table: C["table"];
|
|
62
|
+
readonly id: C["column"];
|
|
63
|
+
readonly subjectId: C["column"];
|
|
64
|
+
readonly revision: C["column"];
|
|
65
|
+
readonly status: C["column"];
|
|
66
|
+
readonly activeCondition: Expression;
|
|
67
|
+
readonly encodeStatus: (active: boolean) => unknown;
|
|
68
|
+
readonly encodeInsert: (value: {
|
|
69
|
+
readonly credentialId: string;
|
|
70
|
+
readonly subjectId: N;
|
|
71
|
+
readonly revision: string;
|
|
72
|
+
readonly active: boolean;
|
|
73
|
+
}) => C["insert"];
|
|
74
|
+
};
|
|
75
|
+
readonly engineNowMillis: Expression;
|
|
76
|
+
/** Reset uses the very same Login-kind row owner as pending authentication. */
|
|
77
|
+
readonly pending?: Omit<PendingAuthenticationTables<unknown, P, N>, "login"> & {
|
|
78
|
+
readonly login: Pick<PendingAuthenticationTables<unknown, P, N>["login"], "decode">;
|
|
79
|
+
readonly moduleId: string;
|
|
80
|
+
readonly clock: ProofClock<Expression>;
|
|
81
|
+
};
|
|
82
|
+
}
|