@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,15 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type PasskeyCeremony,
|
|
3
3
|
type PasskeyCredential,
|
|
4
|
-
type PasskeyMethodPolicy,
|
|
5
4
|
PasskeyCredentials,
|
|
6
|
-
PasskeyEnrollmentContext,
|
|
7
5
|
PasskeyPersistence,
|
|
8
6
|
} from "@yielded/auth/Passkey";
|
|
9
7
|
import type { SubjectId } from "@yielded/auth/Schema";
|
|
8
|
+
import type { AuthenticationRequirement } from "@yielded/auth/Sessions";
|
|
10
9
|
import { Effect, Layer } from "effect";
|
|
11
10
|
|
|
12
|
-
import type { TableModel as Table, SqlExpression } from "../
|
|
11
|
+
import type { TableModel as Table, SqlExpression } from "../table-model";
|
|
13
12
|
import type { PersistenceMappingError } from "./common";
|
|
14
13
|
|
|
15
14
|
export type PasskeyColumn<T extends Table> = T["column"];
|
|
@@ -26,10 +25,6 @@ export interface PasskeyPersistenceServices {
|
|
|
26
25
|
readonly passkeyPersistence: PasskeyPersistence["Service"];
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
export interface PasskeyEnrollmentContextServices {
|
|
30
|
-
readonly passkeyEnrollmentContext: PasskeyEnrollmentContext["Service"];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
28
|
export const passkeyCredentialsLayer = <E, R>(
|
|
34
29
|
services: Effect.Effect<PasskeyCredentialServices, E, R>,
|
|
35
30
|
): Layer.Layer<PasskeyCredentials, E, R> =>
|
|
@@ -46,14 +41,6 @@ export const passkeyPersistenceLayer = <E, R>(
|
|
|
46
41
|
Effect.map(services, (value) => value.passkeyPersistence),
|
|
47
42
|
);
|
|
48
43
|
|
|
49
|
-
export const passkeyEnrollmentContextLayer = <E, R>(
|
|
50
|
-
services: Effect.Effect<PasskeyEnrollmentContextServices, E, R>,
|
|
51
|
-
): Layer.Layer<PasskeyEnrollmentContext, E, R> =>
|
|
52
|
-
Layer.effect(
|
|
53
|
-
PasskeyEnrollmentContext,
|
|
54
|
-
Effect.map(services, (value) => value.passkeyEnrollmentContext),
|
|
55
|
-
);
|
|
56
|
-
|
|
57
44
|
/** Native IDs roundtrip exactly; protocol IDs and authentication references are
|
|
58
45
|
* different identities. These callbacks never suspend inside an owner. */
|
|
59
46
|
export interface PasskeySubjectIdCodec<N> {
|
|
@@ -79,6 +66,9 @@ export interface PasskeySubjectReadTable<
|
|
|
79
66
|
readonly id: PasskeyColumn<T>;
|
|
80
67
|
readonly status: PasskeyColumn<T>;
|
|
81
68
|
readonly securityRevision: PasskeyColumn<T>;
|
|
69
|
+
readonly decodeRequirement: (
|
|
70
|
+
row: T["select"],
|
|
71
|
+
) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
|
|
82
72
|
readonly decodeId: (row: Readonly<Partial<T["select"]>>) => N;
|
|
83
73
|
readonly isActiveStatus: (value: unknown) => boolean;
|
|
84
74
|
readonly activeCondition: Expression;
|
|
@@ -110,7 +100,6 @@ export interface PasskeyCredentialReadTable<
|
|
|
110
100
|
readonly rpId: PasskeyColumn<T>;
|
|
111
101
|
readonly protocolCredentialId: PasskeyColumn<T>;
|
|
112
102
|
readonly credentialKey: PasskeyColumn<T>;
|
|
113
|
-
readonly handleKey: PasskeyColumn<T>;
|
|
114
103
|
readonly userHandle: PasskeyColumn<T>;
|
|
115
104
|
readonly publicKey: PasskeyColumn<T>;
|
|
116
105
|
readonly algorithm: PasskeyColumn<T>;
|
|
@@ -122,269 +111,83 @@ export interface PasskeyCredentialReadTable<
|
|
|
122
111
|
readonly backupEligible: PasskeyColumn<T>;
|
|
123
112
|
readonly backupState: PasskeyColumn<T>;
|
|
124
113
|
readonly counter: PasskeyColumn<T>;
|
|
125
|
-
readonly maximumCounter: PasskeyColumn<T>;
|
|
126
114
|
readonly decode: (
|
|
127
115
|
row: Readonly<Partial<T["select"]>>,
|
|
128
|
-
) => Omit<PasskeyCredential, "revision" | "active">;
|
|
116
|
+
) => Omit<PasskeyCredential, "revision" | "active" | "requirement">;
|
|
129
117
|
readonly decodeSubjectId: (row: Readonly<Partial<T["select"]>>) => N;
|
|
130
118
|
readonly isActiveStatus: (value: unknown) => boolean;
|
|
131
119
|
readonly activeCondition: Expression;
|
|
132
120
|
}
|
|
133
121
|
|
|
134
|
-
export interface PasskeyCredentialOwnershipTable<
|
|
135
|
-
T extends Table,
|
|
136
|
-
N,
|
|
137
|
-
Expression extends SqlExpression = SqlExpression,
|
|
138
|
-
> {
|
|
139
|
-
readonly table: T["table"];
|
|
140
|
-
readonly credentialKey: PasskeyColumn<T>;
|
|
141
|
-
readonly rpId: PasskeyColumn<T>;
|
|
142
|
-
readonly protocolCredentialId: PasskeyColumn<T>;
|
|
143
|
-
readonly subjectId: PasskeyColumn<T>;
|
|
144
|
-
readonly credentialId: PasskeyColumn<T>;
|
|
145
|
-
readonly state: PasskeyColumn<T>;
|
|
146
|
-
readonly version: PasskeyColumn<T>;
|
|
147
|
-
readonly reservationId: PasskeyColumn<T>;
|
|
148
|
-
readonly ownedCondition: Expression;
|
|
149
|
-
readonly isOwnedState: (value: unknown) => boolean;
|
|
150
|
-
readonly decodeSubjectId: (row: Readonly<Partial<T["select"]>>) => N;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/** Reservations do not manufacture a subject; bound handles are RP-global. */
|
|
154
|
-
export interface PasskeyHandleReadTable<T extends Table> {
|
|
155
|
-
readonly table: T["table"];
|
|
156
|
-
readonly handleKey: PasskeyColumn<T>;
|
|
157
|
-
readonly rpId: PasskeyColumn<T>;
|
|
158
|
-
readonly userHandle: PasskeyColumn<T>;
|
|
159
|
-
readonly state: PasskeyColumn<T>;
|
|
160
|
-
readonly version: PasskeyColumn<T>;
|
|
161
|
-
readonly reservationId: PasskeyColumn<T>;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export interface PasskeyHandleReservationTable<
|
|
165
|
-
T extends Table,
|
|
166
|
-
Expression extends SqlExpression = SqlExpression,
|
|
167
|
-
> extends PasskeyHandleReadTable<T> {
|
|
168
|
-
readonly reservedCondition: Expression;
|
|
169
|
-
readonly isReservedState: (value: unknown) => boolean;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export interface PasskeyHandleOwnershipTable<
|
|
173
|
-
T extends Table,
|
|
174
|
-
N,
|
|
175
|
-
Expression extends SqlExpression = SqlExpression,
|
|
176
|
-
> extends PasskeyHandleReadTable<T> {
|
|
177
|
-
readonly subjectId: PasskeyColumn<T>;
|
|
178
|
-
readonly ownedCondition: Expression;
|
|
179
|
-
readonly isOwnedState: (value: unknown) => boolean;
|
|
180
|
-
readonly decodeSubjectId: (row: Readonly<Partial<T["select"]>>) => N;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
122
|
export const requiredPasskeyCredentialConstraints = {
|
|
184
123
|
credentialId: ["credentialId"],
|
|
124
|
+
credentialKey: ["credentialKey"],
|
|
185
125
|
factor: ["subjectId", "credentialId"],
|
|
186
|
-
credentialOwnership: ["credentialKey"],
|
|
187
|
-
handleOwnership: ["handleKey"],
|
|
188
|
-
boundSubjectHandle: ["rpId", "subjectId"],
|
|
189
126
|
} as const;
|
|
190
127
|
|
|
191
128
|
export interface PasskeyCredentialMapping<
|
|
192
129
|
S extends Table,
|
|
193
130
|
C extends Table,
|
|
194
131
|
F extends Table,
|
|
195
|
-
Ownership extends Table,
|
|
196
|
-
Handle extends Table,
|
|
197
132
|
N,
|
|
198
133
|
Expression extends SqlExpression = SqlExpression,
|
|
199
134
|
> {
|
|
200
135
|
readonly subject: PasskeySubjectReadTable<S, N, Expression>;
|
|
201
136
|
readonly credential: PasskeyCredentialReadTable<C, N, Expression>;
|
|
202
137
|
readonly authority: PasskeyFactorReadTable<F, Expression>;
|
|
203
|
-
readonly credentialOwnership: PasskeyCredentialOwnershipTable<Ownership, N, Expression>;
|
|
204
|
-
readonly handleOwnership: PasskeyHandleOwnershipTable<Handle, N, Expression>;
|
|
205
138
|
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
206
139
|
readonly constraints: typeof requiredPasskeyCredentialConstraints;
|
|
207
140
|
}
|
|
208
141
|
|
|
209
|
-
/** A stable additional policy row, acquired before RP/credential locks. The
|
|
210
|
-
* factory checks column names without erasing the consumer table at its input. */
|
|
211
|
-
const PasskeyPolicyGuardTypeId: unique symbol = Symbol("effect-auth/drizzle/PasskeyPolicyGuard");
|
|
212
|
-
|
|
213
|
-
export interface PasskeyPolicyGuard<Expression extends SqlExpression = SqlExpression> {
|
|
214
|
-
readonly [PasskeyPolicyGuardTypeId]: true;
|
|
215
|
-
readonly scope: string;
|
|
216
|
-
readonly table: object;
|
|
217
|
-
readonly columns: ReadonlyArray<string>;
|
|
218
|
-
readonly where: (moduleId: string) => Expression;
|
|
219
|
-
readonly condition: (moduleId: string) => Expression;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
export const passkeyPolicyGuard = <
|
|
223
|
-
T extends Table,
|
|
224
|
-
Expression extends SqlExpression = SqlExpression,
|
|
225
|
-
>(input: {
|
|
226
|
-
readonly scope: string;
|
|
227
|
-
readonly table: T["table"];
|
|
228
|
-
readonly columns: ReadonlyArray<PasskeyColumn<T>>;
|
|
229
|
-
readonly where: (moduleId: string) => Expression;
|
|
230
|
-
readonly condition: (moduleId: string) => Expression;
|
|
231
|
-
}): PasskeyPolicyGuard<Expression> => ({ ...input, [PasskeyPolicyGuardTypeId]: true });
|
|
232
|
-
|
|
233
|
-
export interface PasskeyModuleTable<
|
|
234
|
-
T extends Table,
|
|
235
|
-
Expression extends SqlExpression = SqlExpression,
|
|
236
|
-
> {
|
|
237
|
-
readonly table: T["table"];
|
|
238
|
-
readonly moduleId: PasskeyColumn<T>;
|
|
239
|
-
readonly status: PasskeyColumn<T>;
|
|
240
|
-
readonly policyRevision: PasskeyColumn<T>;
|
|
241
|
-
/** All physical fields used by decodeMethodPolicy, including policyRevision. */
|
|
242
|
-
readonly policyColumns: ReadonlyArray<PasskeyColumn<T>>;
|
|
243
|
-
readonly isActiveStatus: (value: unknown) => boolean;
|
|
244
|
-
readonly activeCondition: Expression;
|
|
245
|
-
readonly decodeMethodPolicy: (row: Readonly<Partial<T["select"]>>) => PasskeyMethodPolicy;
|
|
246
|
-
readonly guards?: ReadonlyArray<PasskeyPolicyGuard<Expression>>;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
export type PasskeyFlowState =
|
|
250
|
-
| "Pending"
|
|
251
|
-
| "Claimed"
|
|
252
|
-
| "Verified"
|
|
253
|
-
| "Rejected"
|
|
254
|
-
| "Ambiguous"
|
|
255
|
-
| "RegistrationAccepted"
|
|
256
|
-
| "ProvisioningPending";
|
|
257
|
-
|
|
258
142
|
export interface PasskeyFlowInsert {
|
|
259
143
|
readonly ceremony: PasskeyCeremony;
|
|
260
|
-
readonly policy: PasskeyMethodPolicy;
|
|
261
|
-
readonly marker: string;
|
|
262
144
|
}
|
|
263
145
|
|
|
146
|
+
/** An immutable, single-use challenge. Consuming or expiring it deletes the row. */
|
|
264
147
|
export interface PasskeyFlowTable<T extends Table> {
|
|
265
148
|
readonly table: T["table"];
|
|
266
149
|
readonly moduleId: PasskeyColumn<T>;
|
|
267
150
|
readonly flowId: PasskeyColumn<T>;
|
|
268
|
-
readonly commandId: PasskeyColumn<T>;
|
|
269
151
|
readonly purpose: PasskeyColumn<T>;
|
|
270
|
-
readonly state: PasskeyColumn<T>;
|
|
271
|
-
readonly version: PasskeyColumn<T>;
|
|
272
|
-
readonly generation: PasskeyColumn<T>;
|
|
273
152
|
readonly snapshot: PasskeyColumn<T>;
|
|
274
|
-
readonly policySnapshot: PasskeyColumn<T>;
|
|
275
153
|
readonly requestBindingVerifier: PasskeyColumn<T>;
|
|
276
154
|
readonly requestBindingExpiresAt: PasskeyColumn<T>;
|
|
277
155
|
readonly issuedAt: PasskeyColumn<T>;
|
|
278
156
|
readonly expiresAt: PasskeyColumn<T>;
|
|
279
|
-
readonly retentionUntil: PasskeyColumn<T>;
|
|
280
|
-
readonly claimId: PasskeyColumn<T>;
|
|
281
|
-
readonly claimedAt: PasskeyColumn<T>;
|
|
282
|
-
readonly claimExpiresAt: PasskeyColumn<T>;
|
|
283
|
-
readonly credentialSnapshot: PasskeyColumn<T>;
|
|
284
|
-
/** Core SubjectId scope text, not a consumer's native subject ID. */
|
|
285
|
-
readonly subjectScope: PasskeyColumn<T>;
|
|
286
|
-
readonly targetScope: PasskeyColumn<T>;
|
|
287
|
-
readonly states: Readonly<Record<PasskeyFlowState, unknown>>;
|
|
288
157
|
readonly encodeInsert: (input: PasskeyFlowInsert) => T["insert"];
|
|
289
158
|
}
|
|
290
159
|
|
|
291
|
-
export interface PasskeyAdmissionTable<T extends Table> {
|
|
292
|
-
readonly table: T["table"];
|
|
293
|
-
readonly authorityScope: PasskeyColumn<T>;
|
|
294
|
-
readonly moduleId: PasskeyColumn<T>;
|
|
295
|
-
readonly version: PasskeyColumn<T>;
|
|
296
|
-
readonly ownerMarker: PasskeyColumn<T>;
|
|
297
|
-
/** One physical clock sample, reused by every charge of this decision. */
|
|
298
|
-
readonly admittedAt: PasskeyColumn<T>;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
export type PasskeyChargeKind = "global" | "subject" | "target";
|
|
302
|
-
|
|
303
|
-
export interface PasskeyChargeInsert {
|
|
304
|
-
readonly moduleId: string;
|
|
305
|
-
readonly flowId: string;
|
|
306
|
-
readonly purpose: PasskeyCeremony["purpose"];
|
|
307
|
-
readonly kind: PasskeyChargeKind;
|
|
308
|
-
readonly scope: string;
|
|
309
|
-
readonly originalWindowMillis: number;
|
|
310
|
-
readonly marker: string;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/** Charge scope is canonical core identity text; this subject-free descriptor
|
|
314
|
-
* can count all purposes without decoding any unrelated native subject. */
|
|
315
|
-
export interface PasskeyChargeTable<T extends Table> {
|
|
316
|
-
readonly table: T["table"];
|
|
317
|
-
readonly moduleId: PasskeyColumn<T>;
|
|
318
|
-
readonly flowId: PasskeyColumn<T>;
|
|
319
|
-
readonly purpose: PasskeyColumn<T>;
|
|
320
|
-
readonly kind: PasskeyColumn<T>;
|
|
321
|
-
readonly scope: PasskeyColumn<T>;
|
|
322
|
-
readonly originalWindowMillis: PasskeyColumn<T>;
|
|
323
|
-
readonly admittedAt: PasskeyColumn<T>;
|
|
324
|
-
readonly retainUntil: PasskeyColumn<T>;
|
|
325
|
-
readonly version: PasskeyColumn<T>;
|
|
326
|
-
readonly ownerMarker: PasskeyColumn<T>;
|
|
327
|
-
readonly encodeInsert: (input: PasskeyChargeInsert) => T["insert"];
|
|
328
|
-
}
|
|
329
|
-
|
|
330
160
|
export const requiredPasskeyPersistenceConstraints = {
|
|
331
161
|
flow: ["moduleId", "flowId"],
|
|
332
|
-
command: ["moduleId", "commandId"],
|
|
333
|
-
admission: ["authorityScope", "moduleId"],
|
|
334
|
-
charge: ["moduleId", "flowId", "kind"],
|
|
335
162
|
} as const;
|
|
336
163
|
|
|
337
164
|
export interface PasskeyCeremonyMapping<
|
|
338
|
-
Module extends Table,
|
|
339
165
|
Flow extends Table,
|
|
340
|
-
Admission extends Table,
|
|
341
|
-
Charge extends Table,
|
|
342
166
|
Expression extends SqlExpression = SqlExpression,
|
|
343
167
|
> {
|
|
344
168
|
readonly moduleId: string;
|
|
345
|
-
readonly authorityScope: string;
|
|
346
|
-
readonly module: PasskeyModuleTable<Module, Expression>;
|
|
347
169
|
readonly flow: PasskeyFlowTable<Flow>;
|
|
348
|
-
readonly admission: PasskeyAdmissionTable<Admission>;
|
|
349
|
-
readonly charge: PasskeyChargeTable<Charge>;
|
|
350
170
|
readonly clock: PasskeyClock<Expression>;
|
|
351
171
|
readonly constraints: typeof requiredPasskeyPersistenceConstraints;
|
|
352
172
|
}
|
|
353
173
|
|
|
354
174
|
export interface PasskeyPersistenceMapping<
|
|
355
175
|
Read,
|
|
356
|
-
Module extends Table,
|
|
357
176
|
Flow extends Table,
|
|
358
|
-
Admission extends Table,
|
|
359
|
-
Charge extends Table,
|
|
360
177
|
N,
|
|
361
178
|
Expression extends SqlExpression = SqlExpression,
|
|
362
179
|
Credential extends Table = Table,
|
|
363
|
-
> extends PasskeyCeremonyMapping<
|
|
180
|
+
> extends PasskeyCeremonyMapping<Flow, Expression> {
|
|
364
181
|
readonly read: Read & {
|
|
365
182
|
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
366
183
|
};
|
|
367
184
|
readonly telemetry: {
|
|
368
185
|
readonly lastUsedAt: PasskeyColumn<Credential>;
|
|
186
|
+
readonly encodeBackupEligible: (value: boolean) => unknown;
|
|
369
187
|
readonly encodeBackupState: (value: boolean) => unknown;
|
|
370
188
|
};
|
|
371
189
|
}
|
|
372
190
|
|
|
373
|
-
export interface PasskeyEnrollmentContextMapping<
|
|
374
|
-
Read,
|
|
375
|
-
Module extends Table,
|
|
376
|
-
N,
|
|
377
|
-
Expression extends SqlExpression = SqlExpression,
|
|
378
|
-
> {
|
|
379
|
-
readonly moduleId: string;
|
|
380
|
-
readonly read: Read & {
|
|
381
|
-
readonly subjectIds: PasskeySubjectIdCodec<N>;
|
|
382
|
-
};
|
|
383
|
-
readonly module: PasskeyModuleTable<Module, Expression>;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
191
|
export interface D1PasskeyMapping {
|
|
387
|
-
readonly d1: {
|
|
388
|
-
readonly primary: true;
|
|
389
|
-
};
|
|
192
|
+
readonly d1: { readonly primary: true };
|
|
390
193
|
}
|
|
@@ -1,72 +1,18 @@
|
|
|
1
|
-
import type { TableModel as Table, SqlExpression } from "../
|
|
2
|
-
import type {
|
|
3
|
-
PasskeyCeremonyMapping,
|
|
4
|
-
PasskeyChargeTable,
|
|
5
|
-
PasskeyColumn,
|
|
6
|
-
PasskeyFlowTable,
|
|
7
|
-
PasskeyHandleReservationTable,
|
|
8
|
-
PasskeyPersistenceServices,
|
|
9
|
-
} from "./passkey-model";
|
|
1
|
+
import type { TableModel as Table, SqlExpression } from "../table-model";
|
|
2
|
+
import type { PasskeyCeremonyMapping, PasskeyPersistenceServices } from "./passkey-model";
|
|
10
3
|
|
|
11
4
|
export interface PasskeyRegistrationCeremonyCapabilities {
|
|
12
5
|
readonly purposes: readonly ["registration"];
|
|
13
6
|
readonly issue: "registration-authority";
|
|
14
|
-
readonly
|
|
7
|
+
readonly assertionConsumption: false;
|
|
15
8
|
}
|
|
16
9
|
|
|
17
10
|
export interface PasskeyRegistrationCeremonyServices extends PasskeyPersistenceServices {
|
|
18
11
|
readonly capabilities: PasskeyRegistrationCeremonyCapabilities;
|
|
19
12
|
}
|
|
20
13
|
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
export interface PasskeyRegistrationIntentReadTable<
|
|
24
|
-
T extends Table,
|
|
25
|
-
Expression extends SqlExpression = SqlExpression,
|
|
26
|
-
> {
|
|
27
|
-
readonly table: T["table"];
|
|
28
|
-
readonly moduleId: PasskeyColumn<T>;
|
|
29
|
-
readonly flowId: PasskeyColumn<T>;
|
|
30
|
-
readonly commandId: PasskeyColumn<T>;
|
|
31
|
-
readonly state: PasskeyColumn<T>;
|
|
32
|
-
readonly version: PasskeyColumn<T>;
|
|
33
|
-
readonly fingerprint: PasskeyColumn<T>;
|
|
34
|
-
readonly handleKey: PasskeyColumn<T>;
|
|
35
|
-
readonly reservationId: PasskeyColumn<T>;
|
|
36
|
-
readonly ceremonySnapshot: PasskeyColumn<T>;
|
|
37
|
-
/** Already validated by the issuing authority; compare opaque bytes only. */
|
|
38
|
-
readonly applicationSnapshot: PasskeyColumn<T>;
|
|
39
|
-
readonly pendingCondition: Expression;
|
|
40
|
-
readonly isPendingState: (value: unknown) => boolean;
|
|
41
|
-
/** Any unresolved initial intent or provisioning job; cleanup never releases it. */
|
|
42
|
-
readonly custodyCondition: Expression;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export const requiredPasskeyRegistrationCeremonyConstraints = {
|
|
46
|
-
flow: ["moduleId", "flowId"],
|
|
47
|
-
command: ["moduleId", "commandId"],
|
|
48
|
-
admission: ["authorityScope", "moduleId"],
|
|
49
|
-
charge: ["moduleId", "flowId", "kind"],
|
|
50
|
-
intentFlow: ["moduleId", "flowId"],
|
|
51
|
-
intentCommand: ["moduleId", "commandId"],
|
|
52
|
-
handle: ["handleKey"],
|
|
53
|
-
} as const;
|
|
54
|
-
|
|
55
|
-
export interface PasskeyRegistrationCeremonyMapping<
|
|
56
|
-
Module extends Table,
|
|
14
|
+
/** The registration authority owns insertion and consumption of the challenge. */
|
|
15
|
+
export type PasskeyRegistrationCeremonyMapping<
|
|
57
16
|
Flow extends Table,
|
|
58
|
-
Admission extends Table,
|
|
59
|
-
Charge extends Table,
|
|
60
|
-
Intent extends Table,
|
|
61
|
-
Handle extends Table,
|
|
62
17
|
Expression extends SqlExpression = SqlExpression,
|
|
63
|
-
>
|
|
64
|
-
PasskeyCeremonyMapping<Module, Flow, Admission, Charge, Expression>,
|
|
65
|
-
"constraints" | "flow" | "charge"
|
|
66
|
-
> {
|
|
67
|
-
readonly flow: Omit<PasskeyFlowTable<Flow>, "encodeInsert">;
|
|
68
|
-
readonly charge: Omit<PasskeyChargeTable<Charge>, "encodeInsert">;
|
|
69
|
-
readonly intent: PasskeyRegistrationIntentReadTable<Intent, Expression>;
|
|
70
|
-
readonly handle: PasskeyHandleReservationTable<Handle, Expression>;
|
|
71
|
-
readonly constraints: typeof requiredPasskeyRegistrationCeremonyConstraints;
|
|
72
|
-
}
|
|
18
|
+
> = PasskeyCeremonyMapping<Flow, Expression>;
|
|
@@ -3,7 +3,7 @@ import type {
|
|
|
3
3
|
PasskeyUnavailable,
|
|
4
4
|
PasskeyActionAuthorization,
|
|
5
5
|
PasskeyCeremony,
|
|
6
|
-
|
|
6
|
+
PasskeyAccess,
|
|
7
7
|
PasskeyCredential,
|
|
8
8
|
PasskeyCredentialSummary,
|
|
9
9
|
PasskeyIssueDecision,
|
|
@@ -14,23 +14,20 @@ import type {
|
|
|
14
14
|
PasskeyManagementPersistence,
|
|
15
15
|
PreparePasskeyCommit,
|
|
16
16
|
PasskeyManagementPolicy,
|
|
17
|
-
PasskeyMethodPolicy,
|
|
18
17
|
} from "@yielded/auth/Passkey";
|
|
19
18
|
import type { TokenDigest } from "@yielded/auth/Schema";
|
|
20
19
|
import type { SessionInvalidationWindow } from "@yielded/auth/Sessions";
|
|
21
20
|
import type { Effect, Schema } from "effect";
|
|
22
21
|
|
|
23
|
-
import type { TableModel as Table, SqlExpression } from "../
|
|
22
|
+
import type { TableModel as Table, SqlExpression } from "../table-model";
|
|
24
23
|
import type { PersistenceMappingError } from "./common";
|
|
25
24
|
import type {
|
|
26
25
|
PasskeyColumn,
|
|
27
26
|
PasskeyCredentialMapping,
|
|
28
27
|
PasskeyFlowTable,
|
|
29
|
-
PasskeyHandleReservationTable,
|
|
30
28
|
PasskeyPersistenceMapping,
|
|
31
29
|
PasskeyPersistenceServices,
|
|
32
30
|
} from "./passkey-model";
|
|
33
|
-
import type { PasskeyRegistrationIntentReadTable } from "./passkey-registration-ceremony-model";
|
|
34
31
|
|
|
35
32
|
export interface PasskeyCredentialInsert<N> {
|
|
36
33
|
readonly subjectId: N;
|
|
@@ -43,8 +40,6 @@ export interface PasskeyWriteTables<
|
|
|
43
40
|
S extends Table,
|
|
44
41
|
C extends Table,
|
|
45
42
|
F extends Table,
|
|
46
|
-
O extends Table,
|
|
47
|
-
H extends Table,
|
|
48
43
|
N,
|
|
49
44
|
Expression extends SqlExpression = SqlExpression,
|
|
50
45
|
> {
|
|
@@ -63,21 +58,7 @@ export interface PasskeyWriteTables<
|
|
|
63
58
|
readonly activeStatus: unknown;
|
|
64
59
|
readonly removedStatus: unknown;
|
|
65
60
|
};
|
|
66
|
-
|
|
67
|
-
readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => O["insert"];
|
|
68
|
-
readonly ownedState: unknown;
|
|
69
|
-
readonly removedState: unknown;
|
|
70
|
-
};
|
|
71
|
-
readonly handleOwnership: {
|
|
72
|
-
readonly encodeInsert: (input: {
|
|
73
|
-
readonly subjectId: N;
|
|
74
|
-
readonly rpId: string;
|
|
75
|
-
readonly userHandle: string;
|
|
76
|
-
readonly marker: string;
|
|
77
|
-
}) => H["insert"];
|
|
78
|
-
readonly ownedState: unknown;
|
|
79
|
-
};
|
|
80
|
-
/** All mutable policy dependencies must be subject columns or declared module guards. */
|
|
61
|
+
/** Mutable management policy dependencies belong to the locked subject row. */
|
|
81
62
|
readonly policy: {
|
|
82
63
|
readonly subjectColumns: ReadonlyArray<PasskeyColumn<S>>;
|
|
83
64
|
readonly management: (row: Readonly<Partial<S["select"]>>) => PasskeyManagementPolicy;
|
|
@@ -122,50 +103,21 @@ export const passkeyInvalidationMutation = <
|
|
|
122
103
|
readonly postcondition: (input: PasskeyInvalidationInput<N>) => Expression;
|
|
123
104
|
}): PasskeyInvalidationMutation<N, Expression> => input;
|
|
124
105
|
|
|
125
|
-
export interface PasskeyCommandTable<T extends Table, N> {
|
|
126
|
-
readonly table: T["table"];
|
|
127
|
-
readonly moduleId: PasskeyColumn<T>;
|
|
128
|
-
readonly commandId: PasskeyColumn<T>;
|
|
129
|
-
readonly subjectId: PasskeyColumn<T>;
|
|
130
|
-
readonly credentialId: PasskeyColumn<T>;
|
|
131
|
-
readonly intent: PasskeyColumn<T>;
|
|
132
|
-
readonly decision: PasskeyColumn<T>;
|
|
133
|
-
readonly retentionUntil: PasskeyColumn<T>;
|
|
134
|
-
readonly version: PasskeyColumn<T>;
|
|
135
|
-
readonly encodeInsert: (input: {
|
|
136
|
-
readonly moduleId: string;
|
|
137
|
-
readonly commandId: string;
|
|
138
|
-
readonly subjectId: N;
|
|
139
|
-
readonly credentialId: string;
|
|
140
|
-
}) => T["insert"];
|
|
141
|
-
}
|
|
142
|
-
|
|
143
106
|
export interface PasskeyManagementMapping<
|
|
144
107
|
S extends Table,
|
|
145
108
|
C extends Table,
|
|
146
109
|
F extends Table,
|
|
147
|
-
O extends Table,
|
|
148
|
-
H extends Table,
|
|
149
|
-
M extends Table,
|
|
150
110
|
Flow extends Table,
|
|
151
|
-
A extends Table,
|
|
152
|
-
Charge extends Table,
|
|
153
|
-
Command extends Table,
|
|
154
111
|
N,
|
|
155
112
|
Expression extends SqlExpression = SqlExpression,
|
|
156
113
|
> extends PasskeyPersistenceMapping<
|
|
157
|
-
PasskeyCredentialMapping<S, C, F,
|
|
158
|
-
M,
|
|
114
|
+
PasskeyCredentialMapping<S, C, F, N, Expression>,
|
|
159
115
|
Flow,
|
|
160
|
-
A,
|
|
161
|
-
Charge,
|
|
162
116
|
N,
|
|
163
117
|
Expression,
|
|
164
118
|
C
|
|
165
119
|
> {
|
|
166
|
-
readonly write: PasskeyWriteTables<S, C, F,
|
|
167
|
-
readonly command: PasskeyCommandTable<Command, N>;
|
|
168
|
-
readonly managementConstraints: typeof requiredPasskeyManagementConstraints;
|
|
120
|
+
readonly write: PasskeyWriteTables<S, C, F, N, Expression>;
|
|
169
121
|
/** Removal must match the installed session strategy and change the subject revision; immediate sessions must consult that authority or be updated here. Enrollment preserves existing authentication. */
|
|
170
122
|
readonly invalidation: {
|
|
171
123
|
readonly window: SessionInvalidationWindow;
|
|
@@ -174,8 +126,6 @@ export interface PasskeyManagementMapping<
|
|
|
174
126
|
};
|
|
175
127
|
}
|
|
176
128
|
|
|
177
|
-
export const requiredPasskeyManagementConstraints = { command: ["moduleId", "commandId"] } as const;
|
|
178
|
-
|
|
179
129
|
export interface PasskeyManagementServices extends PasskeyPersistenceServices {
|
|
180
130
|
readonly passkeyManagementPersistence: PasskeyManagementPersistence["Service"];
|
|
181
131
|
}
|
|
@@ -193,16 +143,15 @@ export interface PasskeyRegistrationWriter<R> {
|
|
|
193
143
|
readonly issueRegistration: <A>(
|
|
194
144
|
input: {
|
|
195
145
|
readonly ceremony: PasskeyCeremony;
|
|
196
|
-
readonly policy: PasskeyMethodPolicy;
|
|
197
146
|
readonly registration: R;
|
|
198
147
|
},
|
|
199
148
|
prepare: PreparePasskeyCommit<PasskeyIssueDecision, A>,
|
|
200
149
|
) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
|
|
201
150
|
readonly completeRegistration: <A>(
|
|
202
151
|
input: {
|
|
203
|
-
readonly
|
|
152
|
+
readonly access: PasskeyAccess;
|
|
153
|
+
readonly ceremony: PasskeyCeremony;
|
|
204
154
|
readonly verified: PasskeyRegistrationVerified;
|
|
205
|
-
readonly nowMillis: number;
|
|
206
155
|
},
|
|
207
156
|
prepare: PreparePasskeyCommit<
|
|
208
157
|
| PasskeyRegistrationResult
|
|
@@ -222,45 +171,21 @@ export interface PasskeyRegistrationMapping<
|
|
|
222
171
|
S extends Table,
|
|
223
172
|
C extends Table,
|
|
224
173
|
F extends Table,
|
|
225
|
-
O extends Table,
|
|
226
|
-
H extends Table,
|
|
227
|
-
M extends Table,
|
|
228
174
|
Flow extends Table,
|
|
229
|
-
A extends Table,
|
|
230
|
-
Charge extends Table,
|
|
231
|
-
Intent extends Table,
|
|
232
175
|
N,
|
|
233
176
|
R,
|
|
234
177
|
Expression extends SqlExpression = SqlExpression,
|
|
235
178
|
> extends PasskeyPersistenceMapping<
|
|
236
|
-
PasskeyCredentialMapping<S, C, F,
|
|
237
|
-
M,
|
|
179
|
+
PasskeyCredentialMapping<S, C, F, N, Expression>,
|
|
238
180
|
Flow,
|
|
239
|
-
A,
|
|
240
|
-
Charge,
|
|
241
181
|
N,
|
|
242
182
|
Expression,
|
|
243
183
|
C
|
|
244
184
|
> {
|
|
245
|
-
readonly write: PasskeyWriteTables<S, C, F,
|
|
185
|
+
readonly write: PasskeyWriteTables<S, C, F, N, Expression>;
|
|
246
186
|
readonly flow: PasskeyFlowTable<Flow>;
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
readonly encodeInsert: (input: {
|
|
250
|
-
readonly ceremony: PasskeyCeremony;
|
|
251
|
-
readonly reservationId: string;
|
|
252
|
-
}) => H["insert"];
|
|
253
|
-
};
|
|
254
|
-
readonly intent: PasskeyRegistrationIntentReadTable<Intent, Expression> & {
|
|
255
|
-
readonly pendingState: unknown;
|
|
256
|
-
readonly acceptedState: unknown;
|
|
257
|
-
readonly rejectedState: unknown;
|
|
258
|
-
readonly encodeInsert: (input: {
|
|
259
|
-
readonly ceremony: PasskeyCeremony;
|
|
260
|
-
readonly registration: R;
|
|
261
|
-
readonly reservationId: string;
|
|
262
|
-
}) => Intent["insert"];
|
|
263
|
-
};
|
|
187
|
+
/** Schema-encoded original registration payload on the same immutable flow row. */
|
|
188
|
+
readonly applicationSnapshot: PasskeyColumn<Flow>;
|
|
264
189
|
/** Consumer-owned data and identity, synchronously encoded inside the owner. A SQL-local registration creates no session and needs no email address. */
|
|
265
190
|
readonly registration: {
|
|
266
191
|
readonly schema: Schema.Codec<R, unknown, never, never>;
|
|
@@ -271,12 +196,13 @@ export interface PasskeyRegistrationMapping<
|
|
|
271
196
|
readonly eligible: (registration: R) => Expression;
|
|
272
197
|
/** Commit-time application policy after provisioning. Unlike `eligible`, this
|
|
273
198
|
* must permit the newly created subject and retain every mutable prerequisite.
|
|
274
|
-
*
|
|
275
|
-
* owners serialize revocation through commit; this predicate alone is not a lock. */
|
|
199
|
+
* Subject-local prerequisites are checked under its lock. */
|
|
276
200
|
readonly finalEligibility: (input: {
|
|
277
201
|
readonly registration: R;
|
|
278
202
|
readonly subjectId: N;
|
|
279
203
|
}) => Expression;
|
|
204
|
+
/** D1 plans require explicit subject identity, status, and security revision
|
|
205
|
+
* values; they cannot read database defaults before the atomic batch runs. */
|
|
280
206
|
readonly subject: (input: {
|
|
281
207
|
readonly registration: R;
|
|
282
208
|
readonly ceremony: PasskeyCeremony;
|
|
@@ -287,11 +213,4 @@ export interface PasskeyRegistrationMapping<
|
|
|
287
213
|
};
|
|
288
214
|
readonly activeStatus: unknown;
|
|
289
215
|
};
|
|
290
|
-
readonly registrationConstraints: typeof requiredPasskeyRegistrationWriteConstraints;
|
|
291
216
|
}
|
|
292
|
-
|
|
293
|
-
export const requiredPasskeyRegistrationWriteConstraints = {
|
|
294
|
-
intentFlow: ["moduleId", "flowId"],
|
|
295
|
-
intentCommand: ["moduleId", "commandId"],
|
|
296
|
-
handle: ["handleKey"],
|
|
297
|
-
} as const;
|