@yielded/auth-persistence 0.1.0-beta.25 → 0.1.0-beta.27
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
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TableModel } from "./table-model.mjs";
|
|
2
|
+
import "./mapping-error.mjs";
|
|
3
|
+
import { PasskeyCredentialMapping, PasskeyPersistenceMapping } from "./models/passkey-model.mjs";
|
|
4
|
+
import "./native-sql-table.mjs";
|
|
5
|
+
import "./sql-commit.mjs";
|
|
6
|
+
import { Effect, Schema } from "effect";
|
|
7
|
+
import { SqlClient } from "effect/sql";
|
|
8
|
+
import { Fragment } from "effect/sql/Statement";
|
|
9
|
+
import "@yielded/auth/Passkey";
|
|
10
|
+
//#region src/internal/passkey-native-state.d.ts
|
|
11
|
+
export type PasskeyNativeRead = PasskeyCredentialMapping<TableModel, TableModel, TableModel, unknown, any>;
|
|
12
|
+
export type PasskeyNativeMapping = PasskeyPersistenceMapping<PasskeyNativeRead, TableModel, unknown, any>;
|
|
13
|
+
export type PasskeyNativeRow = Readonly<Record<string, unknown>>;
|
|
14
|
+
//#endregion
|
|
15
|
+
//# sourceMappingURL=passkey-native-state.d.mts.map
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { sqlMapping } from "./native-sql-table.mjs";
|
|
2
|
+
import { exactSqlText } from "./sql-change.mjs";
|
|
3
|
+
import { passkeyCredentialKey } from "./passkey-policy.mjs";
|
|
4
|
+
import { makePasskeyNativeFlow } from "./passkey-native-flow.mjs";
|
|
5
|
+
import { Effect, Schema } from "effect";
|
|
6
|
+
import { SqlClient } from "effect/sql";
|
|
7
|
+
import * as M from "@yielded/auth/Passkey";
|
|
8
|
+
//#region src/internal/passkey-native-state.ts
|
|
9
|
+
const passkeyNativeInvariant = (value) => {
|
|
10
|
+
if (!value) throw M.PasskeyUnavailable.make({});
|
|
11
|
+
};
|
|
12
|
+
const makePasskeyNativeReadState = Effect.fnUntraced(function* (tables, read, clock) {
|
|
13
|
+
const sql = (yield* SqlClient.SqlClient).withoutTransforms();
|
|
14
|
+
const subject = tables(read.subject.table);
|
|
15
|
+
const credential = tables(read.credential.table);
|
|
16
|
+
const factor = tables(read.authority.table);
|
|
17
|
+
const now = clock === void 0 ? sql`0` : tables.expression(clock.engineNowMillis);
|
|
18
|
+
const millis = (expression) => clock === void 0 ? expression : tables.expression(clock.toMillis(expression));
|
|
19
|
+
const storedNow = clock === void 0 ? sql`0` : tables.expression(clock.fromMillis(clock.engineNowMillis));
|
|
20
|
+
const active = (table) => tables.expression(read[table].activeCondition);
|
|
21
|
+
const invariant = passkeyNativeInvariant;
|
|
22
|
+
const sameId = (nativeId, value) => read.subjectIds.equals(nativeId, value);
|
|
23
|
+
const native = (id) => {
|
|
24
|
+
const value = read.subjectIds.toNative(id);
|
|
25
|
+
invariant(read.subjectIds.toSubject(value) === id);
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
const revisions = (nativeId, rows) => {
|
|
29
|
+
const entries = /* @__PURE__ */ new Map();
|
|
30
|
+
for (const row of rows) {
|
|
31
|
+
if (row[read.authority.credentialId] === null) continue;
|
|
32
|
+
invariant(sameId(nativeId, row[read.authority.subjectId]));
|
|
33
|
+
if (!read.authority.isActiveStatus(row[read.authority.status])) continue;
|
|
34
|
+
const entry = Schema.decodeUnknownSync(M.PasskeyRevision.fields.credentials)([{
|
|
35
|
+
credentialId: row[read.authority.credentialId],
|
|
36
|
+
revision: row[read.authority.revision]
|
|
37
|
+
}])[0];
|
|
38
|
+
invariant(entry !== void 0);
|
|
39
|
+
const previous = entries.get(entry.credentialId);
|
|
40
|
+
invariant(previous === void 0 || previous === entry.revision);
|
|
41
|
+
entries.set(entry.credentialId, entry.revision);
|
|
42
|
+
}
|
|
43
|
+
invariant(entries.size <= 64);
|
|
44
|
+
return [...entries].sort(([a], [b]) => a.localeCompare(b)).map(([credentialId, revision]) => ({
|
|
45
|
+
credentialId,
|
|
46
|
+
revision
|
|
47
|
+
}));
|
|
48
|
+
};
|
|
49
|
+
const revision = (row, factors) => {
|
|
50
|
+
const id = read.subject.decodeId(row);
|
|
51
|
+
const subjectId = read.subjectIds.toSubject(id);
|
|
52
|
+
invariant(sameId(native(subjectId), id));
|
|
53
|
+
return Schema.decodeUnknownSync(M.PasskeyRevision)({
|
|
54
|
+
subjectId,
|
|
55
|
+
securityRevision: row[read.subject.securityRevision],
|
|
56
|
+
credentials: revisions(id, factors)
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const decodeCredential = Effect.fnUntraced(function* (row, current, subjectRow) {
|
|
60
|
+
const value = read.credential.decode(row);
|
|
61
|
+
const owned = current.credentials.find((entry) => entry.credentialId === value.credentialId);
|
|
62
|
+
if (!read.credential.isActiveStatus(row[read.credential.status]) || owned?.revision !== row[read.credential.credentialRevision]) return void 0;
|
|
63
|
+
invariant(read.subjectIds.toSubject(read.credential.decodeSubjectId(row)) === current.subjectId);
|
|
64
|
+
return M.snapshotPasskeySync(M.PasskeyCredential, {
|
|
65
|
+
...value,
|
|
66
|
+
revision: current,
|
|
67
|
+
requirement: yield* read.subject.decodeRequirement(subjectRow),
|
|
68
|
+
active: true
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const readAuthority = Effect.fnUntraced(function* (nativeId, lock, credentialId) {
|
|
72
|
+
if (lock) {
|
|
73
|
+
const locked = yield* sql`select ${subject.fields("s_")}, ${now} as "engineNow" from ${subject.name} where ${subject.column(read.subject.id)} = ${subject.value(read.subject.id, nativeId)} and ${active("subject")} ${sql.onDialectOrElse({
|
|
74
|
+
pg: () => sql`for update`,
|
|
75
|
+
mysql: () => sql`for update`,
|
|
76
|
+
orElse: () => sql``
|
|
77
|
+
})}`;
|
|
78
|
+
if (locked.length !== 1) return void 0;
|
|
79
|
+
const row = subject.decode(locked[0], "s_");
|
|
80
|
+
if (!sameId(read.subject.decodeId(row), nativeId) || !read.subject.isActiveStatus(row[read.subject.status])) return void 0;
|
|
81
|
+
const lockedFactors = sql`select ${factor.fields("f_")} from ${factor.name} where ${factor.column(read.authority.subjectId)} = ${factor.value(read.authority.subjectId, nativeId)} and ${active("authority")} order by ${factor.column(read.authority.credentialId)} limit 65 ${sql.onDialectOrElse({
|
|
82
|
+
pg: () => sql`for update`,
|
|
83
|
+
mysql: () => sql`for update`,
|
|
84
|
+
orElse: () => sql``
|
|
85
|
+
})}`;
|
|
86
|
+
const rows = credentialId === void 0 ? yield* sql`${lockedFactors}` : yield* sql`with locked_factors as ${sql.onDialectOrElse({
|
|
87
|
+
pg: () => sql`materialized`,
|
|
88
|
+
orElse: () => sql``
|
|
89
|
+
})} (${lockedFactors})
|
|
90
|
+
select locked_factors.*, ${credential.fields("c_")} from ${credential.name} left join locked_factors on 1 = 1
|
|
91
|
+
where ${credential.column(read.credential.subjectId)} = ${credential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, credential.column(read.credential.credentialId), credential.value(read.credential.credentialId, credentialId))} and ${active("credential")}`;
|
|
92
|
+
invariant(rows.length <= 64);
|
|
93
|
+
return {
|
|
94
|
+
row,
|
|
95
|
+
credential: credentialId === void 0 || rows[0] === void 0 ? void 0 : credential.decode(rows[0], "c_"),
|
|
96
|
+
revision: revision(row, rows.map((row) => factor.decode(row, "f_"))),
|
|
97
|
+
nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(locked[0].engineNow))
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const observedSubject = joinedSubject, observedFactor = joinedFactor;
|
|
101
|
+
const rows = yield* sql`select ${observedSubject.fields("s_")}, ${observedFactor.fields("f_")}, ${now} as "engineNow" ${credentialId === void 0 ? sql`` : sql`, ${joinedCredential.fields("c_")}`} from ${selected("subject", "passkey_subject")} left join ${selected("authority", "passkey_factor")} on ${observedFactor.column(read.authority.subjectId)} = ${observedFactor.value(read.authority.subjectId, nativeId)} ${credentialId === void 0 ? sql`` : sql`join ${selected("credential", "passkey_credential")} on ${joinedCredential.column(read.credential.subjectId)} = ${joinedCredential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, joinedCredential.column(read.credential.credentialId), joinedCredential.value(read.credential.credentialId, credentialId))}`} where ${observedSubject.column(read.subject.id)} = ${observedSubject.value(read.subject.id, nativeId)} limit 65`;
|
|
102
|
+
if (rows.length === 0 || rows.length > 64) return void 0;
|
|
103
|
+
const row = observedSubject.decode(rows[0], "s_");
|
|
104
|
+
if (!sameId(read.subject.decodeId(row), nativeId) || !read.subject.isActiveStatus(row[read.subject.status])) return void 0;
|
|
105
|
+
invariant(rows.every((selected) => {
|
|
106
|
+
const other = observedSubject.decode(selected, "s_");
|
|
107
|
+
return sameId(read.subject.decodeId(other), nativeId) && other[read.subject.securityRevision] === row[read.subject.securityRevision] && read.subject.isActiveStatus(other[read.subject.status]);
|
|
108
|
+
}));
|
|
109
|
+
return {
|
|
110
|
+
row,
|
|
111
|
+
credential: credentialId === void 0 ? void 0 : joinedCredential.decode(rows[0], "c_"),
|
|
112
|
+
revision: revision(row, rows.map((selected) => observedFactor.decode(selected, "f_"))),
|
|
113
|
+
nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(rows[0].engineNow))
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
const joinedSubject = subject.as("passkey_subject");
|
|
117
|
+
const joinedFactor = factor.as("passkey_factor");
|
|
118
|
+
const joinedCredential = credential.as("passkey_credential");
|
|
119
|
+
const selected = (kind, alias) => {
|
|
120
|
+
return sql`(select * from ${(kind === "subject" ? subject : kind === "authority" ? factor : credential).name} where ${active(kind)}) as ${sql(alias)}`;
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
sql,
|
|
124
|
+
tables,
|
|
125
|
+
subject,
|
|
126
|
+
credential,
|
|
127
|
+
factor,
|
|
128
|
+
now,
|
|
129
|
+
storedNow,
|
|
130
|
+
millis,
|
|
131
|
+
active,
|
|
132
|
+
native,
|
|
133
|
+
sameId,
|
|
134
|
+
revision,
|
|
135
|
+
decodeCredential,
|
|
136
|
+
readAuthority,
|
|
137
|
+
lookup: Effect.fnUntraced(function* (rpId, protocolCredentialId) {
|
|
138
|
+
const key = yield* passkeyCredentialKey(rpId, protocolCredentialId);
|
|
139
|
+
if (subject.unencodedTextColumn?.(read.subject.id) !== void 0 && credential.unencodedTextColumn?.(read.credential.subjectId) !== void 0 && factor.unencodedTextColumn?.(read.authority.subjectId) !== void 0) {
|
|
140
|
+
const s = joinedSubject, c = joinedCredential, f = joinedFactor;
|
|
141
|
+
const rows = yield* sql`select ${s.fields("s_")}, ${c.fields("c_")}, ${f.fields("f_")}
|
|
142
|
+
from ${selected("credential", "passkey_credential")}
|
|
143
|
+
join ${selected("subject", "passkey_subject")} on ${exactSqlText(sql, s.column(read.subject.id), c.column(read.credential.subjectId))}
|
|
144
|
+
left join ${selected("authority", "passkey_factor")} on ${exactSqlText(sql, f.column(read.authority.subjectId), c.column(read.credential.subjectId))}
|
|
145
|
+
where ${exactSqlText(sql, c.column(read.credential.credentialKey), c.value(read.credential.credentialKey, key))} limit 65`;
|
|
146
|
+
if (rows.length === 0 || rows.length > 64) return void 0;
|
|
147
|
+
const row = c.decode(rows[0], "c_");
|
|
148
|
+
const subjectRow = s.decode(rows[0], "s_");
|
|
149
|
+
const owner = read.credential.decodeSubjectId(row);
|
|
150
|
+
invariant(row[read.credential.rpId] === rpId && row[read.credential.protocolCredentialId] === protocolCredentialId);
|
|
151
|
+
invariant(rows.every((selected) => {
|
|
152
|
+
const other = c.decode(selected, "c_");
|
|
153
|
+
const subjectValue = s.decode(selected, "s_");
|
|
154
|
+
return sameId(owner, read.credential.decodeSubjectId(other)) && sameId(owner, read.subject.decodeId(subjectValue)) && other[read.credential.credentialId] === row[read.credential.credentialId] && other[read.credential.credentialRevision] === row[read.credential.credentialRevision] && subjectValue[read.subject.securityRevision] === subjectRow[read.subject.securityRevision];
|
|
155
|
+
}));
|
|
156
|
+
return yield* decodeCredential(row, revision(subjectRow, rows.map((row) => f.decode(row, "f_"))), subjectRow);
|
|
157
|
+
}
|
|
158
|
+
const rows = yield* sql`select ${credential.fields("c_")} from ${credential.name} where ${credential.column(read.credential.credentialKey)} = ${credential.value(read.credential.credentialKey, key)} and ${active("credential")}`;
|
|
159
|
+
if (rows.length !== 1) return void 0;
|
|
160
|
+
const row = credential.decode(rows[0], "c_");
|
|
161
|
+
invariant(row[read.credential.rpId] === rpId && row[read.credential.protocolCredentialId] === protocolCredentialId);
|
|
162
|
+
const current = yield* readAuthority(read.credential.decodeSubjectId(row), false);
|
|
163
|
+
return current === void 0 ? void 0 : yield* decodeCredential(row, current.revision, current.row);
|
|
164
|
+
}),
|
|
165
|
+
joinedSubject,
|
|
166
|
+
joinedFactor,
|
|
167
|
+
joinedCredential,
|
|
168
|
+
selected,
|
|
169
|
+
mapped: sqlMapping
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
const makePasskeyNativeState = Effect.fnUntraced(function* (tables, mapping) {
|
|
173
|
+
const state = yield* makePasskeyNativeReadState(tables, mapping.read, mapping.clock);
|
|
174
|
+
const ceremony = yield* makePasskeyNativeFlow(tables, mapping);
|
|
175
|
+
return {
|
|
176
|
+
...state,
|
|
177
|
+
mapping,
|
|
178
|
+
ceremony,
|
|
179
|
+
flow: ceremony.flow,
|
|
180
|
+
access: ceremony.access
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
//#endregion
|
|
184
|
+
export { makePasskeyNativeReadState, makePasskeyNativeState, passkeyNativeInvariant };
|
|
185
|
+
|
|
186
|
+
//# sourceMappingURL=passkey-native-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-native-state.mjs","names":[],"sources":["../../src/internal/passkey-native-state.ts"],"sourcesContent":["/* oxlint-disable no-explicit-any -- physical mapping generics are erased only at this shared adapter boundary. */\nimport * as M from \"@yielded/auth/Passkey\";\nimport { Effect, Schema } from \"effect\";\nimport { SqlClient } from \"effect/sql\";\nimport type { Fragment } from \"effect/sql/Statement\";\n\nimport type { PasskeyCredentialMapping, PasskeyPersistenceMapping } from \"./models/passkey-model\";\nimport { sqlMapping, type NativeSqlTables } from \"./native-sql-table\";\nimport { makePasskeyNativeFlow } from \"./passkey-native-flow\";\nimport { passkeyCredentialKey } from \"./passkey-policy\";\nimport { exactSqlText } from \"./sql-change\";\nimport type { TableModel } from \"./table-model\";\n\n// Physical expression types are validated by NativeSqlTables at this boundary.\nexport type PasskeyNativeRead = PasskeyCredentialMapping<\n TableModel,\n TableModel,\n TableModel,\n unknown,\n any\n>;\n\nexport type PasskeyNativeMapping = PasskeyPersistenceMapping<\n PasskeyNativeRead,\n TableModel,\n unknown,\n any\n>;\n\nexport type PasskeyNativeRow = Readonly<Record<string, unknown>>;\n\nexport const passkeyNativeInvariant: (value: unknown) => asserts value = (value) => {\n if (!value) throw M.PasskeyUnavailable.make({});\n};\n\nexport const makePasskeyNativeReadState = Effect.fnUntraced(function* (\n tables: NativeSqlTables,\n read: PasskeyNativeRead,\n clock?: PasskeyNativeMapping[\"clock\"],\n) {\n const sql = (yield* SqlClient.SqlClient).withoutTransforms();\n const subject = tables(read.subject.table);\n const credential = tables(read.credential.table);\n const factor = tables(read.authority.table);\n const now = clock === undefined ? sql`0` : tables.expression(clock.engineNowMillis);\n\n const millis = (expression: Fragment) =>\n clock === undefined ? expression : tables.expression(clock.toMillis(expression));\n\n const storedNow =\n clock === undefined ? sql`0` : tables.expression(clock.fromMillis(clock.engineNowMillis));\n\n const active = (table: \"subject\" | \"credential\" | \"authority\") =>\n tables.expression(read[table].activeCondition);\n\n const invariant: typeof passkeyNativeInvariant = passkeyNativeInvariant;\n const sameId = (nativeId: unknown, value: unknown) => read.subjectIds.equals(nativeId, value);\n\n const native = (id: M.PasskeyCredential[\"revision\"][\"subjectId\"]) => {\n const value = read.subjectIds.toNative(id);\n\n invariant(read.subjectIds.toSubject(value) === id);\n\n return value;\n };\n\n const revisions = (nativeId: unknown, rows: ReadonlyArray<PasskeyNativeRow>) => {\n const entries = new Map<string, M.PasskeyCredential[\"revision\"][\"securityRevision\"]>();\n\n for (const row of rows) {\n if (row[read.authority.credentialId] === null) continue;\n invariant(sameId(nativeId, row[read.authority.subjectId]));\n if (!read.authority.isActiveStatus(row[read.authority.status])) continue;\n\n const decoded = Schema.decodeUnknownSync(M.PasskeyRevision.fields.credentials)([\n {\n credentialId: row[read.authority.credentialId],\n revision: row[read.authority.revision],\n },\n ]);\n\n const entry = decoded[0];\n\n invariant(entry !== undefined);\n const previous = entries.get(entry.credentialId);\n\n invariant(previous === undefined || previous === entry.revision);\n entries.set(entry.credentialId, entry.revision);\n }\n invariant(entries.size <= 64);\n\n return [...entries]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([credentialId, revision]) => ({ credentialId, revision }));\n };\n\n const revision = (row: PasskeyNativeRow, factors: ReadonlyArray<PasskeyNativeRow>) => {\n const id = read.subject.decodeId(row);\n const subjectId = read.subjectIds.toSubject(id);\n\n invariant(sameId(native(subjectId), id));\n\n return Schema.decodeUnknownSync(M.PasskeyRevision)({\n subjectId,\n securityRevision: row[read.subject.securityRevision],\n credentials: revisions(id, factors),\n });\n };\n\n const decodeCredential = Effect.fnUntraced(function* (\n row: PasskeyNativeRow,\n current: M.PasskeyCredential[\"revision\"],\n subjectRow: PasskeyNativeRow,\n ) {\n const value = read.credential.decode(row);\n const owned = current.credentials.find((entry) => entry.credentialId === value.credentialId);\n\n if (\n !read.credential.isActiveStatus(row[read.credential.status]) ||\n owned?.revision !== row[read.credential.credentialRevision]\n )\n return undefined;\n invariant(\n read.subjectIds.toSubject(read.credential.decodeSubjectId(row)) === current.subjectId,\n );\n\n return M.snapshotPasskeySync(M.PasskeyCredential, {\n ...value,\n revision: current,\n requirement: yield* read.subject.decodeRequirement(subjectRow),\n active: true,\n });\n });\n\n const readAuthority = Effect.fnUntraced(function* (\n nativeId: unknown,\n lock: boolean,\n credentialId?: string,\n ) {\n // The subject lock is a distinct first statement; joined FOR UPDATE cannot\n // establish the lock order required by coordinated application transactions.\n if (lock) {\n const locked =\n yield* sql<PasskeyNativeRow>`select ${subject.fields(\"s_\")}, ${now} as \"engineNow\" from ${subject.name} where ${subject.column(read.subject.id)} = ${subject.value(read.subject.id, nativeId)} and ${active(\"subject\")} ${sql.onDialectOrElse({ pg: () => sql`for update`, mysql: () => sql`for update`, orElse: () => sql`` })}`;\n\n if (locked.length !== 1) return undefined;\n const row = subject.decode(locked[0]!, \"s_\");\n\n if (\n !sameId(read.subject.decodeId(row), nativeId) ||\n !read.subject.isActiveStatus(row[read.subject.status])\n )\n return undefined;\n\n const lockedFactors = sql`select ${factor.fields(\"f_\")} from ${factor.name} where ${factor.column(read.authority.subjectId)} = ${factor.value(read.authority.subjectId, nativeId)} and ${active(\"authority\")} order by ${factor.column(read.authority.credentialId)} limit 65 ${sql.onDialectOrElse({ pg: () => sql`for update`, mysql: () => sql`for update`, orElse: () => sql`` })}`;\n\n const rows =\n credentialId === undefined\n ? yield* sql<PasskeyNativeRow>`${lockedFactors}`\n : yield* sql<PasskeyNativeRow>`with locked_factors as ${sql.onDialectOrElse({ pg: () => sql`materialized`, orElse: () => sql`` })} (${lockedFactors})\n select locked_factors.*, ${credential.fields(\"c_\")} from ${credential.name} left join locked_factors on 1 = 1\n where ${credential.column(read.credential.subjectId)} = ${credential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, credential.column(read.credential.credentialId), credential.value(read.credential.credentialId, credentialId))} and ${active(\"credential\")}`;\n\n invariant(rows.length <= 64);\n\n return {\n row,\n credential:\n credentialId === undefined || rows[0] === undefined\n ? undefined\n : credential.decode(rows[0], \"c_\"),\n revision: revision(\n row,\n rows.map((row) => factor.decode(row, \"f_\")),\n ),\n nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(locked[0]!.engineNow)),\n };\n }\n\n const observedSubject = joinedSubject,\n observedFactor = joinedFactor;\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${observedSubject.fields(\"s_\")}, ${observedFactor.fields(\"f_\")}, ${now} as \"engineNow\" ${credentialId === undefined ? sql`` : sql`, ${joinedCredential.fields(\"c_\")}`} from ${selected(\"subject\", \"passkey_subject\")} left join ${selected(\"authority\", \"passkey_factor\")} on ${observedFactor.column(read.authority.subjectId)} = ${observedFactor.value(read.authority.subjectId, nativeId)} ${credentialId === undefined ? sql`` : sql`join ${selected(\"credential\", \"passkey_credential\")} on ${joinedCredential.column(read.credential.subjectId)} = ${joinedCredential.value(read.credential.subjectId, nativeId)} and ${exactSqlText(sql, joinedCredential.column(read.credential.credentialId), joinedCredential.value(read.credential.credentialId, credentialId))}`} where ${observedSubject.column(read.subject.id)} = ${observedSubject.value(read.subject.id, nativeId)} limit 65`;\n\n if (rows.length === 0 || rows.length > 64) return undefined;\n const row = observedSubject.decode(rows[0]!, \"s_\");\n\n if (\n !sameId(read.subject.decodeId(row), nativeId) ||\n !read.subject.isActiveStatus(row[read.subject.status])\n )\n return undefined;\n invariant(\n rows.every((selected) => {\n const other = observedSubject.decode(selected, \"s_\");\n\n return (\n sameId(read.subject.decodeId(other), nativeId) &&\n other[read.subject.securityRevision] === row[read.subject.securityRevision] &&\n read.subject.isActiveStatus(other[read.subject.status])\n );\n }),\n );\n\n return {\n row,\n credential: credentialId === undefined ? undefined : joinedCredential.decode(rows[0]!, \"c_\"),\n revision: revision(\n row,\n rows.map((selected) => observedFactor.decode(selected, \"f_\")),\n ),\n nowMillis: yield* Schema.decodeEffect(Schema.Int)(Number(rows[0]!.engineNow)),\n };\n });\n\n // Active predicates retain their original table qualification inside each\n // subquery; aliases allow applications to map several roles to one table.\n const joinedSubject = subject.as(\"passkey_subject\");\n const joinedFactor = factor.as(\"passkey_factor\");\n const joinedCredential = credential.as(\"passkey_credential\");\n\n const selected = (kind: \"subject\" | \"authority\" | \"credential\", alias: string) => {\n const table = kind === \"subject\" ? subject : kind === \"authority\" ? factor : credential;\n\n return sql`(select * from ${table.name} where ${active(kind)}) as ${sql(alias)}`;\n };\n\n const lookup = Effect.fnUntraced(function* (rpId: string, protocolCredentialId: string) {\n const key = yield* passkeyCredentialKey(rpId, protocolCredentialId);\n\n if (\n subject.unencodedTextColumn?.(read.subject.id) !== undefined &&\n credential.unencodedTextColumn?.(read.credential.subjectId) !== undefined &&\n factor.unencodedTextColumn?.(read.authority.subjectId) !== undefined\n ) {\n const s = joinedSubject,\n c = joinedCredential,\n f = joinedFactor;\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${s.fields(\"s_\")}, ${c.fields(\"c_\")}, ${f.fields(\"f_\")}\n from ${selected(\"credential\", \"passkey_credential\")}\n join ${selected(\"subject\", \"passkey_subject\")} on ${exactSqlText(sql, s.column(read.subject.id), c.column(read.credential.subjectId))}\n left join ${selected(\"authority\", \"passkey_factor\")} on ${exactSqlText(sql, f.column(read.authority.subjectId), c.column(read.credential.subjectId))}\n where ${exactSqlText(sql, c.column(read.credential.credentialKey), c.value(read.credential.credentialKey, key))} limit 65`;\n\n if (rows.length === 0 || rows.length > 64) return undefined;\n const row = c.decode(rows[0]!, \"c_\");\n const subjectRow = s.decode(rows[0]!, \"s_\");\n const owner = read.credential.decodeSubjectId(row);\n\n invariant(\n row[read.credential.rpId] === rpId &&\n row[read.credential.protocolCredentialId] === protocolCredentialId,\n );\n invariant(\n rows.every((selected) => {\n const other = c.decode(selected, \"c_\");\n const subjectValue = s.decode(selected, \"s_\");\n\n return (\n sameId(owner, read.credential.decodeSubjectId(other)) &&\n sameId(owner, read.subject.decodeId(subjectValue)) &&\n other[read.credential.credentialId] === row[read.credential.credentialId] &&\n other[read.credential.credentialRevision] === row[read.credential.credentialRevision] &&\n subjectValue[read.subject.securityRevision] ===\n subjectRow[read.subject.securityRevision]\n );\n }),\n );\n\n return yield* decodeCredential(\n row,\n revision(\n subjectRow,\n rows.map((row) => f.decode(row, \"f_\")),\n ),\n subjectRow,\n );\n }\n\n const rows =\n yield* sql<PasskeyNativeRow>`select ${credential.fields(\"c_\")} from ${credential.name} where ${credential.column(read.credential.credentialKey)} = ${credential.value(read.credential.credentialKey, key)} and ${active(\"credential\")}`;\n\n if (rows.length !== 1) return undefined;\n const row = credential.decode(rows[0]!, \"c_\");\n\n invariant(\n row[read.credential.rpId] === rpId &&\n row[read.credential.protocolCredentialId] === protocolCredentialId,\n );\n const current = yield* readAuthority(read.credential.decodeSubjectId(row), false);\n\n return current === undefined\n ? undefined\n : yield* decodeCredential(row, current.revision, current.row);\n });\n\n return {\n sql,\n tables,\n subject,\n credential,\n factor,\n now,\n storedNow,\n millis,\n active,\n native,\n sameId,\n revision,\n decodeCredential,\n readAuthority,\n lookup,\n joinedSubject,\n joinedFactor,\n joinedCredential,\n selected,\n mapped: sqlMapping,\n };\n});\n\nexport const makePasskeyNativeState = Effect.fnUntraced(function* (\n tables: NativeSqlTables,\n mapping: PasskeyNativeMapping,\n) {\n const state = yield* makePasskeyNativeReadState(tables, mapping.read, mapping.clock);\n const ceremony = yield* makePasskeyNativeFlow(tables, mapping);\n\n return { ...state, mapping, ceremony, flow: ceremony.flow, access: ceremony.access };\n});\n\nexport type PasskeyNativeReadState = Effect.Success<ReturnType<typeof makePasskeyNativeReadState>>;\nexport type PasskeyNativeState = Effect.Success<ReturnType<typeof makePasskeyNativeState>>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { TableModel } from "./table-model.mjs";
|
|
2
|
+
import "./mapping-error.mjs";
|
|
3
|
+
import { PasskeyManagementMapping } from "./models/passkey-write-model.mjs";
|
|
4
|
+
import "./native-sql-table.mjs";
|
|
5
|
+
import "./sql-commit.mjs";
|
|
6
|
+
import "./passkey-native-state.mjs";
|
|
7
|
+
import { NativePasskeyServices } from "./passkey-native.mjs";
|
|
8
|
+
import { Effect, Schema } from "effect";
|
|
9
|
+
import { SqlClient } from "effect/sql";
|
|
10
|
+
import { Fragment } from "effect/sql/Statement";
|
|
11
|
+
import * as M from "@yielded/auth/Passkey";
|
|
12
|
+
//#region src/internal/passkey-native-write.d.ts
|
|
13
|
+
export type NativePasskeyManagementMapping = PasskeyManagementMapping<TableModel, TableModel, TableModel, TableModel, unknown, any>;
|
|
14
|
+
export declare const makePasskeyNativeManagement: (base: NativePasskeyServices, mapping: NativePasskeyManagementMapping) => {
|
|
15
|
+
passkeyManagementPersistence: {
|
|
16
|
+
readonly list: (input: {
|
|
17
|
+
readonly moduleId: string;
|
|
18
|
+
readonly subjectId: import("@yielded/auth/Schema").SubjectId;
|
|
19
|
+
readonly cursor?: string;
|
|
20
|
+
readonly limit: number;
|
|
21
|
+
}) => Effect.Effect<{
|
|
22
|
+
readonly credentials: ReadonlyArray<M.PasskeyCredentialSummary>;
|
|
23
|
+
readonly cursor?: string;
|
|
24
|
+
}, M.PasskeyUnavailable>;
|
|
25
|
+
readonly completeEnrollment: <A>(input: {
|
|
26
|
+
readonly access: M.PasskeyAccess;
|
|
27
|
+
readonly ceremony: M.PasskeyCeremony;
|
|
28
|
+
readonly verified: M.PasskeyRegistrationVerified;
|
|
29
|
+
readonly management: M.PasskeyManagementPolicy;
|
|
30
|
+
}, prepare: M.PreparePasskeyCommit<{
|
|
31
|
+
readonly _tag: "Enrolled";
|
|
32
|
+
readonly credential: M.PasskeyCredentialSummary;
|
|
33
|
+
} | {
|
|
34
|
+
readonly _tag: "Rejected";
|
|
35
|
+
}, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
|
|
36
|
+
readonly inspectRemove: (input: {
|
|
37
|
+
readonly moduleId: string;
|
|
38
|
+
readonly subjectId: import("@yielded/auth/Schema").SubjectId;
|
|
39
|
+
readonly credentialId: string;
|
|
40
|
+
}) => Effect.Effect<{
|
|
41
|
+
readonly _tag: "Target";
|
|
42
|
+
readonly credential: M.PasskeyCredential;
|
|
43
|
+
} | {
|
|
44
|
+
readonly _tag: "Rejected";
|
|
45
|
+
}, M.PasskeyUnavailable>;
|
|
46
|
+
readonly remove: <A>(input: {
|
|
47
|
+
readonly moduleId: string;
|
|
48
|
+
readonly commandId: string;
|
|
49
|
+
readonly credential: M.PasskeyCredential;
|
|
50
|
+
readonly authorization: M.PasskeyActionAuthorization;
|
|
51
|
+
readonly management: M.PasskeyManagementPolicy;
|
|
52
|
+
readonly invalidation: import("@yielded/auth/Sessions").SessionInvalidationWindow;
|
|
53
|
+
}, prepare: M.PreparePasskeyCommit<{
|
|
54
|
+
readonly _tag: "Removed";
|
|
55
|
+
readonly result: {
|
|
56
|
+
readonly credentialId: string;
|
|
57
|
+
readonly invalidation: {
|
|
58
|
+
readonly trigger: "all-session-revocation" | "credential-change" | "factor-reset" | "identifier-change" | "password-reset" | "subject-delete" | "subject-disable";
|
|
59
|
+
readonly existingSessions: "cache-expiry" | "immediate" | "original-absolute-expiry";
|
|
60
|
+
readonly maximumExposureMillis: number;
|
|
61
|
+
readonly oldAuthenticationEvidence: "rejected";
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
} | {
|
|
65
|
+
readonly _tag: "Rejected" | "LastSignInMethod";
|
|
66
|
+
}, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
|
|
67
|
+
readonly rename: <A>(input: {
|
|
68
|
+
readonly moduleId: string;
|
|
69
|
+
readonly subjectId: import("@yielded/auth/Schema").SubjectId;
|
|
70
|
+
readonly commandId: string;
|
|
71
|
+
readonly credentialId: string;
|
|
72
|
+
readonly name: string;
|
|
73
|
+
}, prepare: M.PreparePasskeyCommit<{
|
|
74
|
+
readonly _tag: "Renamed";
|
|
75
|
+
readonly credential: M.PasskeyCredentialSummary;
|
|
76
|
+
} | {
|
|
77
|
+
readonly _tag: "Rejected";
|
|
78
|
+
}, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, M.PasskeyUnavailable>;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
//#endregion
|
|
82
|
+
//# sourceMappingURL=passkey-native-write.d.mts.map
|