@yielded/auth-persistence 0.1.0-beta.24 → 0.1.0-beta.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +16 -82
- 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 +28 -148
- 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 -346
- 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 -1555
- package/src/internal/oauth/accounts.ts +0 -838
- 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 -678
- 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 -1522
- 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,243 +0,0 @@
|
|
|
1
|
-
import { digest } from "../crypto.mjs";
|
|
2
|
-
import { CurrentOAuthTransaction } from "./owner.mjs";
|
|
3
|
-
import { OAuthQueryCompiler } from "./query-compiler.mjs";
|
|
4
|
-
import { invariant } from "./state.mjs";
|
|
5
|
-
import { OAuthConnectedState } from "./connected-state.mjs";
|
|
6
|
-
import { OAuthConnectedCustody } from "./connected-custody.mjs";
|
|
7
|
-
import { OAuthConnectedFlow } from "./connected-flow.mjs";
|
|
8
|
-
import { OAuthConnectedAccess } from "./connected-access.mjs";
|
|
9
|
-
import { Context, Effect, Layer } from "effect";
|
|
10
|
-
import * as M from "@yielded/auth/OAuth";
|
|
11
|
-
import { snapshotOAuthSync } from "@yielded/auth/OAuth";
|
|
12
|
-
//#region src/internal/oauth/connected-management.ts
|
|
13
|
-
const make = Effect.gen(function* () {
|
|
14
|
-
const operations = yield* OAuthQueryCompiler;
|
|
15
|
-
const A = yield* OAuthConnectedAccess;
|
|
16
|
-
const C = yield* OAuthConnectedCustody;
|
|
17
|
-
const F = yield* OAuthConnectedFlow;
|
|
18
|
-
const S = yield* OAuthConnectedState;
|
|
19
|
-
const { asc, eq, gt, lte } = operations;
|
|
20
|
-
const { both, col, equal } = operations;
|
|
21
|
-
const list = Effect.fn("oauthConnected.list")(function* (mapping, input) {
|
|
22
|
-
const owner = yield* CurrentOAuthTransaction;
|
|
23
|
-
const found = yield* S.useAuthority(mapping, input.authorization, "metadata");
|
|
24
|
-
if (found === void 0) return { items: [] };
|
|
25
|
-
invariant(Number.isSafeInteger(input.limit) && input.limit >= 1 && input.limit <= 100);
|
|
26
|
-
const g = mapping.grant, h = mapping.cohort, j = S.jobTable(mapping);
|
|
27
|
-
const cursor = input.cursor === void 0 ? void 0 : M.OAuthGrantId.make(input.cursor);
|
|
28
|
-
const where = both(equal(g.table, {
|
|
29
|
-
[g.moduleId]: input.authorization.moduleId,
|
|
30
|
-
[g.subjectId]: found.nativeId
|
|
31
|
-
}), cursor === void 0 ? void 0 : gt(col(g.table, g.grantId), cursor), input.authorization.grantId === void 0 ? void 0 : eq(col(g.table, g.grantId), input.authorization.grantId), input.authorization.profileKey === void 0 ? void 0 : eq(col(g.table, g.profileKey), input.authorization.profileKey));
|
|
32
|
-
const columns = [
|
|
33
|
-
g.moduleId,
|
|
34
|
-
g.grantId,
|
|
35
|
-
g.subjectId,
|
|
36
|
-
g.identityKey,
|
|
37
|
-
g.clientKey,
|
|
38
|
-
g.cohortKey,
|
|
39
|
-
g.cohortGeneration,
|
|
40
|
-
g.profileKey,
|
|
41
|
-
g.state,
|
|
42
|
-
g.summary,
|
|
43
|
-
g.revocationJobId,
|
|
44
|
-
g.version
|
|
45
|
-
];
|
|
46
|
-
const read = yield* owner.read(g.table, where, {
|
|
47
|
-
columns,
|
|
48
|
-
limit: input.limit + 1,
|
|
49
|
-
takeOnly: true,
|
|
50
|
-
observe: false,
|
|
51
|
-
lock: false,
|
|
52
|
-
orderBy: asc(col(g.table, g.grantId))
|
|
53
|
-
});
|
|
54
|
-
const more = read.rows.length > input.limit, rows = read.rows.slice(0, input.limit), last = rows.at(-1)?.[g.grantId];
|
|
55
|
-
owner.observations.push({
|
|
56
|
-
table: g.table,
|
|
57
|
-
where: more ? both(where, lte(col(g.table, g.grantId), last)) : where,
|
|
58
|
-
rows
|
|
59
|
-
});
|
|
60
|
-
const items = [];
|
|
61
|
-
for (const row of rows) {
|
|
62
|
-
const summary = S.summaryStorage.decode(row[g.summary]);
|
|
63
|
-
invariant(summary.grantId === row[g.grantId] && summary.profileKey === row[g.profileKey] && mapping.subjectId.equals(found.nativeId, row[g.subjectId]));
|
|
64
|
-
const cr = (yield* owner.read(h.table, equal(h.table, { [h.cohortKey]: row[g.cohortKey] }), {
|
|
65
|
-
limit: 1,
|
|
66
|
-
lock: false
|
|
67
|
-
})).rows[0];
|
|
68
|
-
invariant(cr !== void 0 && cr[h.clientKey] === row[g.clientKey] && cr[h.identityKey] === row[g.identityKey]);
|
|
69
|
-
let status = row[g.state];
|
|
70
|
-
if (status !== "Disconnected" && (cr[h.state] !== "Open" || cr[h.generation] !== row[g.cohortGeneration])) status = "ReauthorizationRequired";
|
|
71
|
-
let remote = summary.remoteRevocation;
|
|
72
|
-
if (row[g.revocationJobId] !== null) {
|
|
73
|
-
if (j === void 0) remote = "Unknown";
|
|
74
|
-
else {
|
|
75
|
-
const jr = (yield* owner.read(j.table, equal(j.table, { [j.jobId]: row[g.revocationJobId] }), {
|
|
76
|
-
limit: 1,
|
|
77
|
-
lock: false,
|
|
78
|
-
columns: [
|
|
79
|
-
j.jobId,
|
|
80
|
-
j.moduleId,
|
|
81
|
-
j.grantId,
|
|
82
|
-
j.cohortKey,
|
|
83
|
-
j.state
|
|
84
|
-
]
|
|
85
|
-
})).rows[0];
|
|
86
|
-
invariant(jr !== void 0 && jr[j.moduleId] === row[g.moduleId] && jr[j.grantId] === row[g.grantId] && jr[j.cohortKey] === row[g.cohortKey]);
|
|
87
|
-
remote = jr[j.state] === "Confirmed" ? "Confirmed" : jr[j.state] === "Unknown" ? "Unknown" : "Pending";
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
items.push(snapshotOAuthSync(M.OAuthConnectedSummary, {
|
|
91
|
-
...summary,
|
|
92
|
-
status,
|
|
93
|
-
remoteRevocation: remote
|
|
94
|
-
}));
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
items,
|
|
98
|
-
...more ? { cursor: last } : {}
|
|
99
|
-
};
|
|
100
|
-
});
|
|
101
|
-
const command = Effect.fn("oauthConnected.disconnectCommand")(function* (mapping, moduleId, commandId, lock = true) {
|
|
102
|
-
const owner = yield* CurrentOAuthTransaction;
|
|
103
|
-
const d = mapping.command, read = yield* owner.read(d.table, equal(d.table, {
|
|
104
|
-
[d.moduleId]: moduleId,
|
|
105
|
-
[d.commandId]: commandId
|
|
106
|
-
}), {
|
|
107
|
-
limit: 1,
|
|
108
|
-
lock,
|
|
109
|
-
observe: lock
|
|
110
|
-
});
|
|
111
|
-
const row = read.rows[0];
|
|
112
|
-
if (row === void 0) return { read };
|
|
113
|
-
const grant = S.commandStorage.decode(row[d.intent]), result = S.disconnectedStorage.decode(row[d.decision]);
|
|
114
|
-
const native = yield* mapping.subjectId.toNative(grant.context.subjectId);
|
|
115
|
-
invariant(grant.context.moduleId === moduleId && grant.context.grantId === row[d.grantId] && result.grantId === grant.context.grantId && mapping.subjectId.equals(native, row[d.subjectId]) && !result.replayed);
|
|
116
|
-
return {
|
|
117
|
-
read,
|
|
118
|
-
row,
|
|
119
|
-
grant,
|
|
120
|
-
result
|
|
121
|
-
};
|
|
122
|
-
});
|
|
123
|
-
return {
|
|
124
|
-
list,
|
|
125
|
-
inspectDisconnect: Effect.fn("oauthConnected.inspectDisconnect")(function* (mapping, input) {
|
|
126
|
-
const found = yield* S.useAuthority(mapping, input.authorization, "metadata");
|
|
127
|
-
if (found === void 0 || input.subjectId !== found.revision.subjectId || input.moduleId !== input.authorization.moduleId) return { _tag: "Rejected" };
|
|
128
|
-
const discovered = yield* command(mapping, input.moduleId, input.commandId, false);
|
|
129
|
-
if (discovered.row !== void 0) {
|
|
130
|
-
if (discovered.grant.context.subjectId !== input.subjectId || discovered.grant.context.grantId !== input.grantId) return { _tag: "Conflict" };
|
|
131
|
-
if ((yield* S.useAuthority(mapping, input.authorization, "metadata", discovered.grant.context)) === void 0) return { _tag: "Rejected" };
|
|
132
|
-
const prior = yield* command(mapping, input.moduleId, input.commandId);
|
|
133
|
-
const d = mapping.command;
|
|
134
|
-
if (prior.row === void 0 || prior.row[d.intent] !== discovered.row[d.intent] || prior.row[d.decision] !== discovered.row[d.decision] || prior.row[d.version] !== discovered.row[d.version]) return { _tag: "Rejected" };
|
|
135
|
-
return {
|
|
136
|
-
_tag: "Replay",
|
|
137
|
-
result: {
|
|
138
|
-
...prior.result,
|
|
139
|
-
replayed: true
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
const read = yield* A.locked(mapping, input.authorization, input.grantId, "metadata");
|
|
144
|
-
if (read === void 0) return { _tag: "Rejected" };
|
|
145
|
-
if ((yield* command(mapping, input.moduleId, input.commandId)).row !== void 0) return { _tag: "Rejected" };
|
|
146
|
-
return {
|
|
147
|
-
_tag: "Target",
|
|
148
|
-
grant: {
|
|
149
|
-
context: read.grant.context,
|
|
150
|
-
...read.grant.sealed === void 0 ? {} : { sealed: read.grant.sealed }
|
|
151
|
-
},
|
|
152
|
-
revision: read.found.revision
|
|
153
|
-
};
|
|
154
|
-
}),
|
|
155
|
-
disconnect: Effect.fn("oauthConnected.disconnect")(function* (mapping, input) {
|
|
156
|
-
const owner = yield* CurrentOAuthTransaction;
|
|
157
|
-
const token = input.grant.context, found = yield* S.current(mapping, token.subjectId);
|
|
158
|
-
if (found === void 0 || input.moduleId !== token.moduleId || !(yield* S.action(mapping, found, input.authorization, "disconnect", {
|
|
159
|
-
moduleId: input.moduleId,
|
|
160
|
-
flowId: input.commandId,
|
|
161
|
-
commandId: input.commandId,
|
|
162
|
-
revision: input.authorization.challenge.revision,
|
|
163
|
-
intent: S.disconnectStorage.encode(input.grant),
|
|
164
|
-
maximumAgeMillis: 3e5,
|
|
165
|
-
configuration: token.configuration,
|
|
166
|
-
grant: token
|
|
167
|
-
}))) return { _tag: "Rejected" };
|
|
168
|
-
const client = yield* S.client(mapping, token.configuration, false);
|
|
169
|
-
if (client === void 0) return { _tag: "Rejected" };
|
|
170
|
-
const tuple = yield* F.inspectTuple(mapping, token.identity), t = mapping.ownership.tuple;
|
|
171
|
-
if (tuple.row?.[t.state] !== "Owned" || !mapping.subjectId.equals(tuple.row[t.subjectId], found.nativeId)) return { _tag: "Conflict" };
|
|
172
|
-
const cohort = yield* S.cohort(mapping, client.id, tuple.key, false);
|
|
173
|
-
invariant(cohort.row !== void 0);
|
|
174
|
-
const read = yield* S.readGrant(mapping, input.moduleId, token.grantId), g = mapping.grant;
|
|
175
|
-
if (read === void 0 || !C.sameContext(read.context, token) || S.disconnectStorage.encode({
|
|
176
|
-
context: read.context,
|
|
177
|
-
...read.sealed === void 0 ? {} : { sealed: read.sealed }
|
|
178
|
-
}) !== S.disconnectStorage.encode(input.grant)) return { _tag: "Conflict" };
|
|
179
|
-
const prior = yield* command(mapping, input.moduleId, input.commandId);
|
|
180
|
-
if (prior.row !== void 0) return { _tag: "Conflict" };
|
|
181
|
-
const now = yield* owner.now(mapping.clock), wasOpen = !cohort.blocked;
|
|
182
|
-
invariant(input.retentionUntilMillis >= now && input.retentionUntilMillis <= now + 2592e6);
|
|
183
|
-
const affected = yield* C.fence(mapping, client, cohort);
|
|
184
|
-
let remote = "Unsupported";
|
|
185
|
-
if (input.revocation !== void 0) {
|
|
186
|
-
yield* C.storeJob(mapping, input.revocation, token, found.nativeId, now);
|
|
187
|
-
remote = "Pending";
|
|
188
|
-
} else if (token.configuration.profile.revocation === "cohort") {
|
|
189
|
-
invariant(read.sealed === void 0);
|
|
190
|
-
remote = "Unknown";
|
|
191
|
-
}
|
|
192
|
-
const result = snapshotOAuthSync(M.OAuthConnectedDisconnected, {
|
|
193
|
-
_tag: "Disconnected",
|
|
194
|
-
grantId: token.grantId,
|
|
195
|
-
remoteRevocation: remote,
|
|
196
|
-
affectedGrantCount: affected,
|
|
197
|
-
replayed: false
|
|
198
|
-
});
|
|
199
|
-
yield* owner.update(g.table, {
|
|
200
|
-
[g.moduleId]: input.moduleId,
|
|
201
|
-
[g.grantId]: token.grantId
|
|
202
|
-
}, {
|
|
203
|
-
[g.state]: "Disconnected",
|
|
204
|
-
[g.activeIdentityKey]: null,
|
|
205
|
-
[g.sealed]: null,
|
|
206
|
-
[g.revocationJobId]: input.revocation?.context.jobId ?? read.row[g.revocationJobId],
|
|
207
|
-
[g.version]: owner.marker
|
|
208
|
-
});
|
|
209
|
-
const d = mapping.command, key = {
|
|
210
|
-
[d.moduleId]: input.moduleId,
|
|
211
|
-
[d.commandId]: input.commandId
|
|
212
|
-
};
|
|
213
|
-
const inserted = yield* owner.insert(d.table, {
|
|
214
|
-
...d.encodeInsert({
|
|
215
|
-
commandId: input.commandId,
|
|
216
|
-
grant: snapshotOAuthSync(M.OAuthConnectedDisconnectGrant, input.grant),
|
|
217
|
-
subjectId: S.nativeCopy(found.nativeId)
|
|
218
|
-
}),
|
|
219
|
-
...key,
|
|
220
|
-
[d.subjectId]: found.nativeId,
|
|
221
|
-
[d.grantId]: token.grantId,
|
|
222
|
-
[d.intent]: S.commandStorage.encode({
|
|
223
|
-
context: token,
|
|
224
|
-
originalDigest: yield* digest(S.disconnectStorage.encode(input.grant)),
|
|
225
|
-
...input.revocation === void 0 ? {} : { revocationJobId: input.revocation.context.jobId }
|
|
226
|
-
}),
|
|
227
|
-
[d.decision]: S.disconnectedStorage.encode(result),
|
|
228
|
-
[d.retentionUntil]: mapping.clock.encodeInstant(input.retentionUntilMillis),
|
|
229
|
-
[d.version]: owner.marker
|
|
230
|
-
}, key);
|
|
231
|
-
prior.read.rows = inserted.rows;
|
|
232
|
-
if (wasOpen && input.revocation === void 0 && token.configuration.profile.revocation === "unsupported") yield* C.clear(mapping, client, cohort, void 0, true);
|
|
233
|
-
return result;
|
|
234
|
-
})
|
|
235
|
-
};
|
|
236
|
-
});
|
|
237
|
-
var OAuthConnectedManagement = class OAuthConnectedManagement extends Context.Service()("effect-auth/persistence/OAuthConnectedManagement") {
|
|
238
|
-
static layer = Layer.effect(OAuthConnectedManagement, make);
|
|
239
|
-
};
|
|
240
|
-
//#endregion
|
|
241
|
-
export { OAuthConnectedManagement };
|
|
242
|
-
|
|
243
|
-
//# sourceMappingURL=connected-management.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connected-management.mjs","names":[],"sources":["../../../src/internal/oauth/connected-management.ts"],"sourcesContent":["import * as M from \"@yielded/auth/OAuth\";\nimport { snapshotOAuthSync } from \"@yielded/auth/OAuth\";\nimport { Effect, Context, Layer } from \"effect\";\n\nimport { OAuthConnectedAccess } from \"./connected-access\";\nimport { OAuthConnectedCustody } from \"./connected-custody\";\nimport { OAuthConnectedFlow } from \"./connected-flow\";\nimport type * as FTypes from \"./connected-flow\";\nimport { OAuthConnectedState } from \"./connected-state\";\nimport type * as STypes from \"./connected-state\";\nimport { CurrentOAuthTransaction } from \"./owner\";\nimport { OAuthQueryCompiler } from \"./query-compiler\";\nimport { digest, invariant } from \"./state\";\n\nconst make = Effect.gen(function* () {\n const operations = yield* OAuthQueryCompiler;\n const A = yield* OAuthConnectedAccess;\n const C = yield* OAuthConnectedCustody;\n const F = yield* OAuthConnectedFlow;\n const S = yield* OAuthConnectedState;\n\n const { asc, eq, gt, lte } = operations;\n const { both, col, equal } = operations;\n\n const list = Effect.fn(\"oauthConnected.list\")(function* (\n mapping: STypes.Mapping,\n input: FTypes.Input<\"list\">,\n ) {\n const owner = yield* CurrentOAuthTransaction;\n const found = yield* S.useAuthority(mapping, input.authorization, \"metadata\");\n\n if (found === undefined) return { items: [] };\n invariant(Number.isSafeInteger(input.limit) && input.limit >= 1 && input.limit <= 100);\n\n const g = mapping.grant,\n h = mapping.cohort,\n j = S.jobTable(mapping);\n\n const cursor = input.cursor === undefined ? undefined : M.OAuthGrantId.make(input.cursor);\n\n const where = both(\n equal(g.table, { [g.moduleId]: input.authorization.moduleId, [g.subjectId]: found.nativeId }),\n cursor === undefined ? undefined : gt(col(g.table, g.grantId), cursor),\n input.authorization.grantId === undefined\n ? undefined\n : eq(col(g.table, g.grantId), input.authorization.grantId),\n input.authorization.profileKey === undefined\n ? undefined\n : eq(col(g.table, g.profileKey), input.authorization.profileKey),\n );\n\n const columns = [\n g.moduleId,\n g.grantId,\n g.subjectId,\n g.identityKey,\n g.clientKey,\n g.cohortKey,\n g.cohortGeneration,\n g.profileKey,\n g.state,\n g.summary,\n g.revocationJobId,\n g.version,\n ];\n\n const read = yield* owner.read(g.table, where, {\n columns,\n limit: input.limit + 1,\n takeOnly: true,\n observe: false,\n lock: false,\n orderBy: asc(col(g.table, g.grantId)),\n });\n\n const more = read.rows.length > input.limit,\n rows = read.rows.slice(0, input.limit),\n last = rows.at(-1)?.[g.grantId];\n\n owner.observations.push({\n table: g.table,\n where: more ? both(where, lte(col(g.table, g.grantId), last)) : where,\n rows,\n });\n const items: Array<typeof M.OAuthConnectedSummary.Type> = [];\n\n for (const row of rows) {\n const summary = S.summaryStorage.decode(row[g.summary]);\n\n invariant(\n summary.grantId === row[g.grantId] &&\n summary.profileKey === row[g.profileKey] &&\n mapping.subjectId.equals(found.nativeId, row[g.subjectId]),\n );\n\n const co = yield* owner.read(h.table, equal(h.table, { [h.cohortKey]: row[g.cohortKey] }), {\n limit: 1,\n lock: false,\n });\n\n const cr = co.rows[0];\n\n invariant(\n cr !== undefined &&\n cr[h.clientKey] === row[g.clientKey] &&\n cr[h.identityKey] === row[g.identityKey],\n );\n let status = row[g.state] as (typeof M.OAuthConnectedSummary.Type)[\"status\"];\n\n if (\n status !== \"Disconnected\" &&\n (cr[h.state] !== \"Open\" || cr[h.generation] !== row[g.cohortGeneration])\n )\n status = \"ReauthorizationRequired\";\n let remote = summary.remoteRevocation;\n\n if (row[g.revocationJobId] !== null) {\n if (j === undefined) remote = \"Unknown\";\n else {\n const job = yield* owner.read(\n j.table,\n equal(j.table, { [j.jobId]: row[g.revocationJobId] }),\n {\n limit: 1,\n lock: false,\n columns: [j.jobId, j.moduleId, j.grantId, j.cohortKey, j.state],\n },\n );\n\n const jr = job.rows[0];\n\n invariant(\n jr !== undefined &&\n jr[j.moduleId] === row[g.moduleId] &&\n jr[j.grantId] === row[g.grantId] &&\n jr[j.cohortKey] === row[g.cohortKey],\n );\n remote =\n jr[j.state] === \"Confirmed\"\n ? \"Confirmed\"\n : jr[j.state] === \"Unknown\"\n ? \"Unknown\"\n : \"Pending\";\n }\n }\n items.push(\n snapshotOAuthSync(M.OAuthConnectedSummary, {\n ...summary,\n status,\n remoteRevocation: remote,\n }),\n );\n }\n\n return { items, ...(more ? { cursor: last as string } : {}) };\n });\n\n const command = Effect.fn(\"oauthConnected.disconnectCommand\")(function* (\n mapping: STypes.Mapping,\n moduleId: string,\n commandId: string,\n lock = true,\n ) {\n const owner = yield* CurrentOAuthTransaction;\n\n const d = mapping.command,\n read = yield* owner.read(\n d.table,\n equal(d.table, { [d.moduleId]: moduleId, [d.commandId]: commandId }),\n { limit: 1, lock, observe: lock },\n );\n\n const row = read.rows[0];\n\n if (row === undefined) return { read };\n\n const grant = S.commandStorage.decode(row[d.intent]),\n result = S.disconnectedStorage.decode(row[d.decision]);\n\n const native = yield* mapping.subjectId.toNative(grant.context.subjectId);\n\n invariant(\n grant.context.moduleId === moduleId &&\n grant.context.grantId === row[d.grantId] &&\n result.grantId === grant.context.grantId &&\n mapping.subjectId.equals(native, row[d.subjectId]) &&\n !result.replayed,\n );\n\n return { read, row, grant, result };\n });\n\n const inspectDisconnect = Effect.fn(\"oauthConnected.inspectDisconnect\")(function* (\n mapping: STypes.Mapping,\n input: FTypes.Input<\"inspectDisconnect\">,\n ) {\n const found = yield* S.useAuthority(mapping, input.authorization, \"metadata\");\n\n if (\n found === undefined ||\n input.subjectId !== found.revision.subjectId ||\n input.moduleId !== input.authorization.moduleId\n )\n return { _tag: \"Rejected\" } as const;\n const discovered = yield* command(mapping, input.moduleId, input.commandId, false);\n\n if (discovered.row !== undefined) {\n if (\n discovered.grant.context.subjectId !== input.subjectId ||\n discovered.grant.context.grantId !== input.grantId\n )\n return { _tag: \"Conflict\" } as const;\n if (\n (yield* S.useAuthority(\n mapping,\n input.authorization,\n \"metadata\",\n discovered.grant.context,\n )) === undefined\n )\n return { _tag: \"Rejected\" } as const;\n const prior = yield* command(mapping, input.moduleId, input.commandId);\n const d = mapping.command;\n\n if (\n prior.row === undefined ||\n prior.row[d.intent] !== discovered.row[d.intent] ||\n prior.row[d.decision] !== discovered.row[d.decision] ||\n prior.row[d.version] !== discovered.row[d.version]\n )\n return { _tag: \"Rejected\" } as const;\n\n return { _tag: \"Replay\", result: { ...prior.result, replayed: true } } as const;\n }\n const read = yield* A.locked(mapping, input.authorization, input.grantId, \"metadata\");\n\n if (read === undefined) return { _tag: \"Rejected\" } as const;\n const finalCommand = yield* command(mapping, input.moduleId, input.commandId);\n\n if (finalCommand.row !== undefined) return { _tag: \"Rejected\" } as const;\n\n return {\n _tag: \"Target\",\n grant: {\n context: read.grant.context,\n ...(read.grant.sealed === undefined ? {} : { sealed: read.grant.sealed }),\n },\n revision: read.found.revision,\n } as const;\n });\n\n const disconnect = Effect.fn(\"oauthConnected.disconnect\")(function* (\n mapping: STypes.Mapping,\n input: FTypes.Input<\"disconnect\">,\n ) {\n const owner = yield* CurrentOAuthTransaction;\n\n const token = input.grant.context,\n found = yield* S.current(mapping, token.subjectId);\n\n if (\n found === undefined ||\n input.moduleId !== token.moduleId ||\n !(yield* S.action(mapping, found, input.authorization, \"disconnect\", {\n moduleId: input.moduleId,\n flowId: input.commandId,\n commandId: input.commandId,\n revision: input.authorization.challenge.revision,\n intent: S.disconnectStorage.encode(input.grant),\n maximumAgeMillis: 300000,\n configuration: token.configuration,\n grant: token,\n }))\n )\n return { _tag: \"Rejected\" } as const;\n const client = yield* S.client(mapping, token.configuration, false);\n\n if (client === undefined) return { _tag: \"Rejected\" } as const;\n\n const tuple = yield* F.inspectTuple(mapping, token.identity),\n t = mapping.ownership.tuple;\n\n if (\n tuple.row?.[t.state] !== \"Owned\" ||\n !mapping.subjectId.equals(tuple.row[t.subjectId], found.nativeId)\n )\n return { _tag: \"Conflict\" } as const;\n const cohort = yield* S.cohort(mapping, client.id, tuple.key, false);\n\n invariant(cohort.row !== undefined);\n\n const read = yield* S.readGrant(mapping, input.moduleId, token.grantId),\n g = mapping.grant;\n\n if (\n read === undefined ||\n !C.sameContext(read.context, token) ||\n S.disconnectStorage.encode({\n context: read.context,\n ...(read.sealed === undefined ? {} : { sealed: read.sealed }),\n }) !== S.disconnectStorage.encode(input.grant)\n )\n return { _tag: \"Conflict\" } as const;\n const prior = yield* command(mapping, input.moduleId, input.commandId);\n\n // Only inspectDisconnect exposes replay. Mutation replay cannot repeat effects.\n if (prior.row !== undefined) return { _tag: \"Conflict\" } as const;\n\n const now = yield* owner.now(mapping.clock),\n wasOpen = !cohort.blocked;\n\n invariant(input.retentionUntilMillis >= now && input.retentionUntilMillis <= now + 2592000000);\n const affected = yield* C.fence(mapping, client, cohort);\n let remote: (typeof M.OAuthConnectedSummary.Type)[\"remoteRevocation\"] = \"Unsupported\";\n\n if (input.revocation !== undefined) {\n yield* C.storeJob(mapping, input.revocation, token, found.nativeId, now);\n remote = \"Pending\";\n } else if (token.configuration.profile.revocation === \"cohort\") {\n invariant(read.sealed === undefined);\n remote = \"Unknown\";\n }\n\n const result = snapshotOAuthSync(M.OAuthConnectedDisconnected, {\n _tag: \"Disconnected\",\n grantId: token.grantId,\n remoteRevocation: remote,\n affectedGrantCount: affected,\n replayed: false,\n });\n\n yield* owner.update(\n g.table,\n { [g.moduleId]: input.moduleId, [g.grantId]: token.grantId },\n {\n [g.state]: \"Disconnected\",\n [g.activeIdentityKey]: null,\n [g.sealed]: null,\n [g.revocationJobId]: input.revocation?.context.jobId ?? read.row[g.revocationJobId],\n [g.version]: owner.marker,\n },\n );\n\n const d = mapping.command,\n key = { [d.moduleId]: input.moduleId, [d.commandId]: input.commandId };\n\n const inserted = yield* owner.insert(\n d.table,\n {\n ...d.encodeInsert({\n commandId: input.commandId,\n grant: snapshotOAuthSync(M.OAuthConnectedDisconnectGrant, input.grant),\n subjectId: S.nativeCopy(found.nativeId),\n }),\n ...key,\n [d.subjectId]: found.nativeId,\n [d.grantId]: token.grantId,\n [d.intent]: S.commandStorage.encode({\n context: token,\n originalDigest: yield* digest(S.disconnectStorage.encode(input.grant)),\n ...(input.revocation === undefined\n ? {}\n : { revocationJobId: input.revocation.context.jobId }),\n }),\n [d.decision]: S.disconnectedStorage.encode(result),\n [d.retentionUntil]: mapping.clock.encodeInstant(input.retentionUntilMillis),\n [d.version]: owner.marker,\n },\n key,\n );\n\n prior.read.rows = inserted.rows;\n if (\n wasOpen &&\n input.revocation === undefined &&\n token.configuration.profile.revocation === \"unsupported\"\n )\n yield* C.clear(mapping, client, cohort, undefined, true);\n\n return result;\n });\n\n return { list, inspectDisconnect, disconnect };\n});\n\nexport class OAuthConnectedManagement extends Context.Service<\n OAuthConnectedManagement,\n Effect.Success<typeof make>\n>()(\"effect-auth/persistence/OAuthConnectedManagement\") {\n static readonly layer = Layer.effect(OAuthConnectedManagement, make);\n}\n"],"mappings":"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"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { makeTransactionKernel } from "../transaction-kernel.mjs";
|
|
2
|
-
import { captureOAuthMapping, unavailable } from "./state.mjs";
|
|
3
|
-
import { scopeKey } from "./connected-keys.mjs";
|
|
4
|
-
import { oauthReferenceGuardTable } from "../models/oauth-model.mjs";
|
|
5
|
-
import { Effect } from "effect";
|
|
6
|
-
//#region src/internal/oauth/connected-reference.ts
|
|
7
|
-
const makeOAuthConnectedReferenceKernel = (operations, dialect) => {
|
|
8
|
-
const { eq, sql } = operations;
|
|
9
|
-
const transactions = makeTransactionKernel(operations);
|
|
10
|
-
const { both } = transactions;
|
|
11
|
-
const { col, equal } = transactions.makeTransactionRows(unavailable);
|
|
12
|
-
const exactText = (table, key, value) => {
|
|
13
|
-
const column = col(table, key), bound = sql.param(value, column);
|
|
14
|
-
return dialect(table) === "mysql" ? sql`binary ${column} = binary ${bound}` : dialect(table) === "pg" ? sql`convert_to(cast(${column} as text),'UTF8') = convert_to(cast(${bound} as text),'UTF8')` : sql`cast(${column} as blob) = cast(${bound} as blob)`;
|
|
15
|
-
};
|
|
16
|
-
/** Compose Accounts.Unlink with this connected authority. The stable scope lock
|
|
17
|
-
* serializes unknown claims across every client registration for an issuer. */
|
|
18
|
-
const oauthConnectedOwnershipReferences = (original) => {
|
|
19
|
-
const mapping = captureOAuthMapping(original), c = mapping.client;
|
|
20
|
-
return Object.freeze({
|
|
21
|
-
connectedReferenceGuards: [oauthReferenceGuardTable({
|
|
22
|
-
table: c.table,
|
|
23
|
-
orderBy: c.clientKey,
|
|
24
|
-
condition: (input) => Effect.gen(function* () {
|
|
25
|
-
const key = yield* scopeKey(input.identity.provider, input.identity.issuer);
|
|
26
|
-
return both(equal(c.table, {
|
|
27
|
-
[c.clientKey]: key,
|
|
28
|
-
[c.counter]: mapping.order.encode(0)
|
|
29
|
-
}), exactText(c.table, c.provider, input.identity.provider), exactText(c.table, c.issuer, input.identity.issuer), exactText(c.table, c.clientRegistrationId, ""));
|
|
30
|
-
})
|
|
31
|
-
})],
|
|
32
|
-
connectedReference: (input) => connectedReferenceCondition(mapping, input.identityKey)
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
const connectedReferenceCondition = (mapping, identityKey, knownIdentity) => {
|
|
36
|
-
const c = mapping.client, t = mapping.ownership.tuple, f = mapping.flow, g = mapping.grant, h = mapping.cohort, a = mapping.admission, j = mapping.revocation.mode === "cohort" ? mapping.revocation.job : void 0;
|
|
37
|
-
const tuple = equal(t.table, { [t.identityKey]: identityKey });
|
|
38
|
-
const knownFlow = sql`exists(select 1 from ${h.table} where ${col(h.table, h.cohortKey)} = ${col(f.table, f.cohortKey)} and ${col(h.table, h.identityKey)} = ${identityKey})`;
|
|
39
|
-
const unknownFlow = knownIdentity === void 0 ? sql`${col(f.table, f.cohortKey)} is null and exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(f.table, f.clientKey)} and exists(select 1 from ${t.table} where ${tuple} and ${col(c.table, c.provider)} = ${col(t.table, t.provider)} and ${col(c.table, c.issuer)} = ${col(t.table, t.issuer)}))` : sql`${col(f.table, f.cohortKey)} is null and exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(f.table, f.clientKey)} and ${col(c.table, c.provider)} = ${knownIdentity.provider} and ${col(c.table, c.issuer)} = ${knownIdentity.issuer})`;
|
|
40
|
-
const related = [
|
|
41
|
-
f,
|
|
42
|
-
g,
|
|
43
|
-
h,
|
|
44
|
-
...j === void 0 ? [] : [j]
|
|
45
|
-
];
|
|
46
|
-
return sql`(${sql.join([
|
|
47
|
-
sql`exists(select 1 from ${g.table} where ${eq(col(g.table, g.identityKey), identityKey)})`,
|
|
48
|
-
sql`exists(select 1 from ${a.table} where ${eq(col(a.table, a.identityKey), identityKey)})`,
|
|
49
|
-
sql`exists(select 1 from ${h.table} where ${both(eq(col(h.table, h.identityKey), identityKey), eq(col(h.table, h.state), "Blocked"))})`,
|
|
50
|
-
sql`exists(select 1 from ${f.table} where ${col(f.table, f.work)} = 'Unresolved' and (${knownFlow} or (${unknownFlow})))`,
|
|
51
|
-
...j === void 0 ? [] : [sql`exists(select 1 from ${j.table} where ${eq(col(j.table, j.identityKey), identityKey)})`],
|
|
52
|
-
...related.map((v) => sql`exists(select 1 from ${v.table} where not exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(v.table, v.clientKey)}))`)
|
|
53
|
-
], sql` or `)})`;
|
|
54
|
-
};
|
|
55
|
-
return {
|
|
56
|
-
oauthConnectedOwnershipReferences,
|
|
57
|
-
connectedReferenceCondition
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
//#endregion
|
|
61
|
-
export { makeOAuthConnectedReferenceKernel };
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=connected-reference.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connected-reference.mjs","names":[],"sources":["../../../src/internal/oauth/connected-reference.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport type { OAuthConnectedMapping } from \"../models/oauth-connected-model\";\nimport {\n oauthReferenceGuardTable,\n type OAuthReferenceGuardDescriptor,\n} from \"../models/oauth-model\";\n/* oxlint-disable no-explicit-any -- only adapter SQL expression handles are erased. */\nimport type { SqlExpression as SQL } from \"../query-operations\";\nimport type { QueryOperations } from \"../query-operations\";\nimport type { TableModel } from \"../query-operations\";\nimport { makeTransactionKernel } from \"../transaction-kernel\";\nimport { scopeKey } from \"./connected-keys\";\nimport type { Mapping } from \"./connected-state\";\nimport { unavailable, captureOAuthMapping } from \"./state\";\ntype Table = object;\n\nexport const makeOAuthConnectedReferenceKernel = (\n operations: QueryOperations,\n dialect: (table: object) => \"pg\" | \"sqlite\" | \"mysql\",\n) => {\n const { eq, sql } = operations;\n const transactions = makeTransactionKernel(operations);\n const { both } = transactions;\n const { col, equal } = transactions.makeTransactionRows(unavailable);\n\n const exactText = (table: Table, key: string, value: string) => {\n const column = col(table, key),\n bound = sql.param(value, column);\n\n return dialect(table) === \"mysql\"\n ? sql`binary ${column} = binary ${bound}`\n : dialect(table) === \"pg\"\n ? sql`convert_to(cast(${column} as text),'UTF8') = convert_to(cast(${bound} as text),'UTF8')`\n : sql`cast(${column} as blob) = cast(${bound} as blob)`;\n };\n\n /** Compose Accounts.Unlink with this connected authority. The stable scope lock\n * serializes unknown claims across every client registration for an issuer. */\n const oauthConnectedOwnershipReferences = <\n S extends TableModel,\n AC extends TableModel,\n T extends TableModel,\n O extends TableModel,\n F extends TableModel,\n G extends TableModel,\n C extends TableModel,\n H extends TableModel,\n A extends TableModel,\n D extends TableModel,\n N,\n J extends TableModel,\n >(\n original: OAuthConnectedMapping<S, AC, T, O, F, G, C, H, A, D, N, J, any>,\n ): {\n readonly connectedReferenceGuards: ReadonlyArray<OAuthReferenceGuardDescriptor<N>>;\n readonly connectedReference: (input: {\n readonly identityKey: string;\n readonly subjectId: N;\n }) => SQL;\n } => {\n const mapping = captureOAuthMapping(original),\n c = mapping.client;\n\n return Object.freeze({\n connectedReferenceGuards: [\n oauthReferenceGuardTable<C, N>({\n table: c.table,\n orderBy: c.clientKey,\n condition: (input) =>\n Effect.gen(function* () {\n const key = yield* scopeKey(input.identity.provider, input.identity.issuer);\n\n return both(\n equal(c.table, {\n [c.clientKey]: key,\n [c.counter]: mapping.order.encode(0),\n }),\n exactText(c.table, c.provider, input.identity.provider),\n exactText(c.table, c.issuer, input.identity.issuer),\n exactText(c.table, c.clientRegistrationId, \"\"),\n );\n }),\n }),\n ],\n connectedReference: (input) => connectedReferenceCondition(mapping, input.identityKey),\n });\n };\n\n const connectedReferenceCondition = (\n mapping: Mapping,\n identityKey: string | SQL,\n knownIdentity?: { readonly provider: string | SQL; readonly issuer: string | SQL },\n ) => {\n const c = mapping.client,\n t = mapping.ownership.tuple,\n f = mapping.flow,\n g = mapping.grant,\n h = mapping.cohort,\n a = mapping.admission,\n j = mapping.revocation.mode === \"cohort\" ? mapping.revocation.job : undefined;\n\n const tuple = equal(t.table, { [t.identityKey]: identityKey });\n const knownFlow = sql`exists(select 1 from ${h.table} where ${col(h.table, h.cohortKey)} = ${col(f.table, f.cohortKey)} and ${col(h.table, h.identityKey)} = ${identityKey})`;\n\n const unknownFlow =\n knownIdentity === undefined\n ? sql`${col(f.table, f.cohortKey)} is null and exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(f.table, f.clientKey)} and exists(select 1 from ${t.table} where ${tuple} and ${col(c.table, c.provider)} = ${col(t.table, t.provider)} and ${col(c.table, c.issuer)} = ${col(t.table, t.issuer)}))`\n : sql`${col(f.table, f.cohortKey)} is null and exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(f.table, f.clientKey)} and ${col(c.table, c.provider)} = ${knownIdentity.provider} and ${col(c.table, c.issuer)} = ${knownIdentity.issuer})`;\n\n const related = [f, g, h, ...(j === undefined ? [] : [j])];\n\n return sql`(${sql.join(\n [\n sql`exists(select 1 from ${g.table} where ${eq(col(g.table, g.identityKey), identityKey)})`,\n sql`exists(select 1 from ${a.table} where ${eq(col(a.table, a.identityKey), identityKey)})`,\n sql`exists(select 1 from ${h.table} where ${both(eq(col(h.table, h.identityKey), identityKey), eq(col(h.table, h.state), \"Blocked\"))})`,\n sql`exists(select 1 from ${f.table} where ${col(f.table, f.work)} = 'Unresolved' and (${knownFlow} or (${unknownFlow})))`,\n ...(j === undefined\n ? []\n : [\n sql`exists(select 1 from ${j.table} where ${eq(col(j.table, j.identityKey), identityKey)})`,\n ]),\n // A missing real client cannot turn erased unknown work into absence.\n ...related.map(\n (v) =>\n sql`exists(select 1 from ${v.table} where not exists(select 1 from ${c.table} where ${col(c.table, c.clientKey)} = ${col(v.table, v.clientKey)}))`,\n ),\n ],\n sql` or `,\n )})`;\n };\n\n return { oauthConnectedOwnershipReferences, connectedReferenceCondition };\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import "../mapping-error.mjs";
|
|
2
|
-
import "./owner.mjs";
|
|
3
|
-
import "./connected-state.mjs";
|
|
4
|
-
import "./query-compiler.mjs";
|
|
5
|
-
import "./connected-custody.mjs";
|
|
6
|
-
import "./connected-flow.mjs";
|
|
7
|
-
import { Context, Effect, Layer } from "effect";
|
|
8
|
-
import "@yielded/auth/OAuth";
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { CurrentOAuthTransaction } from "./owner.mjs";
|
|
2
|
-
import { OAuthQueryCompiler } from "./query-compiler.mjs";
|
|
3
|
-
import { invariant, oauthIdentityKey, sameIdentity } from "./state.mjs";
|
|
4
|
-
import { OAuthConnectedState } from "./connected-state.mjs";
|
|
5
|
-
import { OAuthConnectedCustody } from "./connected-custody.mjs";
|
|
6
|
-
import { OAuthConnectedFlow } from "./connected-flow.mjs";
|
|
7
|
-
import { Context, Effect, Layer } from "effect";
|
|
8
|
-
import * as M from "@yielded/auth/OAuth";
|
|
9
|
-
import { snapshotOAuthSync } from "@yielded/auth/OAuth";
|
|
10
|
-
//#region src/internal/oauth/connected-settlement.ts
|
|
11
|
-
const make = Effect.gen(function* () {
|
|
12
|
-
const operations = yield* OAuthQueryCompiler;
|
|
13
|
-
const C = yield* OAuthConnectedCustody;
|
|
14
|
-
const F = yield* OAuthConnectedFlow;
|
|
15
|
-
const S = yield* OAuthConnectedState;
|
|
16
|
-
const { ne, sql } = operations;
|
|
17
|
-
const { both, col, equal } = operations;
|
|
18
|
-
const validMetadata = (context, now) => {
|
|
19
|
-
const m = context.metadata, p = context.configuration.profile;
|
|
20
|
-
return p.provider === context.identity.provider && context.configuration.provider === context.identity.provider && context.configuration.issuer === context.identity.issuer && m.obtainedAtMillis <= now && m.useUntilMillis > m.obtainedAtMillis && m.useUntilMillis <= m.obtainedAtMillis + p.maximumAccessLifetimeMillis && (m.accessExpiresAtMillis === void 0 || m.useUntilMillis <= m.accessExpiresAtMillis) && m.scopes.every((v) => p.scopes.includes(v)) && m.resources.every((v) => p.resources.includes(v)) && new Set(m.scopes).size === m.scopes.length && new Set(m.resources).size === m.resources.length && (m.refreshUseUntilMillis === void 0 || p.retention === "access-and-refresh" && p.maximumRefreshLifetimeMillis !== void 0 && m.refreshUseUntilMillis > m.obtainedAtMillis && m.refreshUseUntilMillis <= m.obtainedAtMillis + p.maximumRefreshLifetimeMillis && (m.refreshExpiresAtMillis === void 0 || m.refreshUseUntilMillis <= m.refreshExpiresAtMillis));
|
|
21
|
-
};
|
|
22
|
-
/** The only writer that activates or replaces a confirmed connected grant. */
|
|
23
|
-
const activateGrant = Effect.fn("oauthConnected.activateGrant")(function* (mapping, grant, native, now, replacing) {
|
|
24
|
-
const owner = yield* CurrentOAuthTransaction;
|
|
25
|
-
const token = grant.context;
|
|
26
|
-
const g = mapping.grant;
|
|
27
|
-
const identityKey = yield* oauthIdentityKey(token.identity);
|
|
28
|
-
const clientKey = yield* S.clientKey(token.configuration);
|
|
29
|
-
const cohortKey = yield* S.cohortKey(clientKey, identityKey);
|
|
30
|
-
const values = {
|
|
31
|
-
...g.encodeInsert({
|
|
32
|
-
grant: snapshotOAuthSync(M.OAuthConnectedStoredGrant, grant),
|
|
33
|
-
subjectId: S.nativeCopy(native)
|
|
34
|
-
}),
|
|
35
|
-
[g.moduleId]: token.moduleId,
|
|
36
|
-
[g.grantId]: token.grantId,
|
|
37
|
-
[g.subjectId]: native,
|
|
38
|
-
[g.identityKey]: identityKey,
|
|
39
|
-
[g.activeIdentityKey]: identityKey,
|
|
40
|
-
[g.clientKey]: clientKey,
|
|
41
|
-
[g.cohortKey]: cohortKey,
|
|
42
|
-
[g.profileKey]: token.configuration.profile.key,
|
|
43
|
-
[g.grantVersion]: token.grantVersion,
|
|
44
|
-
[g.tokenVersion]: token.tokenVersion,
|
|
45
|
-
[g.cohortGeneration]: token.cohortGeneration,
|
|
46
|
-
[g.state]: "Active",
|
|
47
|
-
[g.version]: owner.marker,
|
|
48
|
-
[g.context]: S.tokenContextStorage.encode(token),
|
|
49
|
-
[g.sealed]: S.sealedStorage.encode(grant.sealed),
|
|
50
|
-
[g.summary]: S.summaryStorage.encode(C.summary(token)),
|
|
51
|
-
[g.revocationJobId]: null,
|
|
52
|
-
[g.refreshWork]: "None",
|
|
53
|
-
[g.refreshClaim]: null,
|
|
54
|
-
[g.refreshClaimExpiresAt]: null,
|
|
55
|
-
[g.retentionUntil]: mapping.clock.encodeInstant(S.retainedUntil(mapping, Math.max(now, token.metadata.useUntilMillis, token.metadata.refreshUseUntilMillis ?? 0)))
|
|
56
|
-
};
|
|
57
|
-
if (!replacing) yield* owner.insert(g.table, values, {
|
|
58
|
-
[g.moduleId]: token.moduleId,
|
|
59
|
-
[g.grantId]: token.grantId
|
|
60
|
-
});
|
|
61
|
-
else yield* owner.update(g.table, {
|
|
62
|
-
[g.moduleId]: token.moduleId,
|
|
63
|
-
[g.grantId]: token.grantId
|
|
64
|
-
}, values);
|
|
65
|
-
});
|
|
66
|
-
return {
|
|
67
|
-
validMetadata,
|
|
68
|
-
activateGrant,
|
|
69
|
-
settle: Effect.fn("oauthConnected.settle")(function* (mapping, input) {
|
|
70
|
-
const owner = yield* CurrentOAuthTransaction;
|
|
71
|
-
const c = input.claim.flow.context, out = input.outcome;
|
|
72
|
-
const found = yield* S.current(mapping, c.revision.subjectId);
|
|
73
|
-
const authorized = found !== void 0 && (yield* S.action(mapping, found, input.authorization, "settle", F.expected(input.claim.flow)));
|
|
74
|
-
const cl = yield* S.client(mapping, S.configuration(input.claim.flow), false);
|
|
75
|
-
if (cl === void 0) return { _tag: "Rejected" };
|
|
76
|
-
if (out._tag !== "Verified" && out._tag !== "Quarantined") {
|
|
77
|
-
if ((yield* F.exact(mapping, input.claim)) === void 0) return { _tag: "Rejected" };
|
|
78
|
-
const state = out._tag === "Unissued" ? "Rejected" : out._tag;
|
|
79
|
-
yield* F.terminal(mapping, input.claim, state, out._tag === "Cancelled" || out._tag === "Unissued" ? "Resolved" : "Unresolved");
|
|
80
|
-
return { _tag: state };
|
|
81
|
-
}
|
|
82
|
-
const grant = snapshotOAuthSync(M.OAuthConnectedStoredGrant, out.grant), token = grant.context;
|
|
83
|
-
invariant(token.moduleId === c.moduleId && token.subjectId === c.revision.subjectId && token.grantId === c.grantId && token.identity.provider === c.provider && token.identity.issuer === c.issuer && (yield* S.clientKey(token.configuration)) === cl.id && S.tokenContextStorage.encode({
|
|
84
|
-
...token,
|
|
85
|
-
configuration: S.configuration(input.claim.flow)
|
|
86
|
-
}) === S.tokenContextStorage.encode(token));
|
|
87
|
-
const native = yield* mapping.subjectId.toNative(c.revision.subjectId);
|
|
88
|
-
const tuple = yield* F.readTuple(mapping.ownership, token.identity), t = mapping.ownership.tuple;
|
|
89
|
-
if (tuple.row[t.state] === "Reserved" || tuple.row[t.state] === "Owned" && !mapping.subjectId.equals(tuple.row[t.subjectId], native)) {
|
|
90
|
-
if ((yield* F.exact(mapping, input.claim)) !== void 0) yield* F.terminal(mapping, input.claim, "Conflict", "Unresolved");
|
|
91
|
-
return { _tag: "Conflict" };
|
|
92
|
-
}
|
|
93
|
-
const co = yield* S.cohort(mapping, cl.id, tuple.key, true);
|
|
94
|
-
const original = yield* S.readGrant(mapping, c.moduleId, c.grantId);
|
|
95
|
-
const g = mapping.grant;
|
|
96
|
-
const other = yield* owner.read(g.table, both(equal(g.table, {
|
|
97
|
-
[g.moduleId]: c.moduleId,
|
|
98
|
-
[g.subjectId]: native,
|
|
99
|
-
[g.profileKey]: c.profile.key,
|
|
100
|
-
[g.activeIdentityKey]: tuple.key
|
|
101
|
-
}), ne(col(g.table, g.grantId), c.grantId)), { limit: 1 });
|
|
102
|
-
const claimed = yield* F.exact(mapping, input.claim);
|
|
103
|
-
if (claimed === void 0) return { _tag: "Rejected" };
|
|
104
|
-
invariant(token.exchangeOrder === input.claim.order && validMetadata(token, claimed.now) && token.metadata.obtainedAtMillis >= input.claim.claimedAtMillis);
|
|
105
|
-
const reconnect = c.reconnect;
|
|
106
|
-
const targetOkay = reconnect === void 0 ? original === void 0 : original !== void 0 && F.sameTarget(reconnect, original.context) && sameIdentity(reconnect.identity, token.identity) && original.row[g.refreshWork] !== "Unresolved";
|
|
107
|
-
const previousSafe = yield* C.noFormerOwner(mapping, tuple.key, cl.id, native);
|
|
108
|
-
if (!(out._tag === "Verified" && authorized && claimed.active && c.profile.issuance === "active" && token.metadata.useUntilMillis > claimed.now && !co.blocked && co.generation === token.cohortGeneration && S.orderNumber(input.claim.order) > co.cutoff && targetOkay && other.rows.length === 0 && previousSafe)) {
|
|
109
|
-
if (!previousSafe) {
|
|
110
|
-
yield* F.terminal(mapping, input.claim, "Conflict", "Unresolved");
|
|
111
|
-
return { _tag: "Conflict" };
|
|
112
|
-
}
|
|
113
|
-
if (tuple.row[t.state] === "Unowned") yield* F.acquireTuple(mapping.ownership, token.identity, tuple.key, S.nativeCopy(native));
|
|
114
|
-
yield* C.fence(mapping, cl, co);
|
|
115
|
-
if (out.cleanup !== void 0) {
|
|
116
|
-
yield* C.storeJob(mapping, out.cleanup, token, native, claimed.now);
|
|
117
|
-
yield* F.terminal(mapping, input.claim, "Quarantined", "Resolved", { cohort: co.id });
|
|
118
|
-
} else yield* F.terminal(mapping, input.claim, "Quarantined", "Unresolved", {
|
|
119
|
-
cohort: co.id,
|
|
120
|
-
sealed: grant
|
|
121
|
-
});
|
|
122
|
-
return { _tag: targetOkay && other.rows.length === 0 ? "Rejected" : "Conflict" };
|
|
123
|
-
}
|
|
124
|
-
if (tuple.row[t.state] === "Unowned") yield* F.acquireTuple(mapping.ownership, token.identity, tuple.key, S.nativeCopy(native));
|
|
125
|
-
yield* activateGrant(mapping, grant, native, claimed.now, original !== void 0);
|
|
126
|
-
yield* F.terminal(mapping, input.claim, "Connected", "Resolved", { cohort: co.id });
|
|
127
|
-
owner.postconditions.push(sql`${mapping.clock.engineNowMillis} >= ${claimed.now} and ${mapping.clock.engineNowMillis} < ${Math.min(input.claim.claimExpiresAtMillis, token.metadata.useUntilMillis)}`);
|
|
128
|
-
return {
|
|
129
|
-
_tag: "Connected",
|
|
130
|
-
grant
|
|
131
|
-
};
|
|
132
|
-
})
|
|
133
|
-
};
|
|
134
|
-
});
|
|
135
|
-
var OAuthConnectedSettlement = class OAuthConnectedSettlement extends Context.Service()("effect-auth/persistence/OAuthConnectedSettlement") {
|
|
136
|
-
static layer = Layer.effect(OAuthConnectedSettlement, make);
|
|
137
|
-
};
|
|
138
|
-
//#endregion
|
|
139
|
-
export { OAuthConnectedSettlement };
|
|
140
|
-
|
|
141
|
-
//# sourceMappingURL=connected-settlement.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connected-settlement.mjs","names":[],"sources":["../../../src/internal/oauth/connected-settlement.ts"],"sourcesContent":["import * as M from \"@yielded/auth/OAuth\";\nimport { snapshotOAuthSync } from \"@yielded/auth/OAuth\";\nimport { Effect, Context, Layer } from \"effect\";\n\nimport { OAuthConnectedCustody } from \"./connected-custody\";\nimport { OAuthConnectedFlow } from \"./connected-flow\";\nimport type * as FTypes from \"./connected-flow\";\nimport { OAuthConnectedState } from \"./connected-state\";\nimport type * as STypes from \"./connected-state\";\nimport { CurrentOAuthTransaction } from \"./owner\";\nimport { OAuthQueryCompiler } from \"./query-compiler\";\nimport { invariant, sameIdentity, oauthIdentityKey } from \"./state\";\n\nconst make = Effect.gen(function* () {\n const operations = yield* OAuthQueryCompiler;\n const C = yield* OAuthConnectedCustody;\n const F = yield* OAuthConnectedFlow;\n const S = yield* OAuthConnectedState;\n\n const { ne, sql } = operations;\n const { both, col, equal } = operations;\n\n const validMetadata = (context: M.OAuthConnectedTokenContext, now: number) => {\n const m = context.metadata,\n p = context.configuration.profile;\n\n return (\n p.provider === context.identity.provider &&\n context.configuration.provider === context.identity.provider &&\n context.configuration.issuer === context.identity.issuer &&\n m.obtainedAtMillis <= now &&\n m.useUntilMillis > m.obtainedAtMillis &&\n m.useUntilMillis <= m.obtainedAtMillis + p.maximumAccessLifetimeMillis &&\n (m.accessExpiresAtMillis === undefined || m.useUntilMillis <= m.accessExpiresAtMillis) &&\n m.scopes.every((v) => p.scopes.includes(v)) &&\n m.resources.every((v) => p.resources.includes(v)) &&\n new Set(m.scopes).size === m.scopes.length &&\n new Set(m.resources).size === m.resources.length &&\n (m.refreshUseUntilMillis === undefined ||\n (p.retention === \"access-and-refresh\" &&\n p.maximumRefreshLifetimeMillis !== undefined &&\n m.refreshUseUntilMillis > m.obtainedAtMillis &&\n m.refreshUseUntilMillis <= m.obtainedAtMillis + p.maximumRefreshLifetimeMillis &&\n (m.refreshExpiresAtMillis === undefined ||\n m.refreshUseUntilMillis <= m.refreshExpiresAtMillis)))\n );\n };\n\n /** The only writer that activates or replaces a confirmed connected grant. */\n const activateGrant = Effect.fn(\"oauthConnected.activateGrant\")(function* (\n mapping: STypes.Mapping,\n grant: M.OAuthConnectedStoredGrant,\n native: unknown,\n now: number,\n replacing: boolean,\n ) {\n const owner = yield* CurrentOAuthTransaction;\n const token = grant.context;\n const g = mapping.grant;\n const identityKey = yield* oauthIdentityKey(token.identity);\n const clientKey = yield* S.clientKey(token.configuration);\n const cohortKey = yield* S.cohortKey(clientKey, identityKey);\n\n const values = {\n ...g.encodeInsert({\n grant: snapshotOAuthSync(M.OAuthConnectedStoredGrant, grant),\n subjectId: S.nativeCopy(native),\n }),\n [g.moduleId]: token.moduleId,\n [g.grantId]: token.grantId,\n [g.subjectId]: native,\n [g.identityKey]: identityKey,\n [g.activeIdentityKey]: identityKey,\n [g.clientKey]: clientKey,\n [g.cohortKey]: cohortKey,\n [g.profileKey]: token.configuration.profile.key,\n [g.grantVersion]: token.grantVersion,\n [g.tokenVersion]: token.tokenVersion,\n [g.cohortGeneration]: token.cohortGeneration,\n [g.state]: \"Active\",\n [g.version]: owner.marker,\n [g.context]: S.tokenContextStorage.encode(token),\n [g.sealed]: S.sealedStorage.encode(grant.sealed),\n [g.summary]: S.summaryStorage.encode(C.summary(token)),\n [g.revocationJobId]: null,\n [g.refreshWork]: \"None\",\n [g.refreshClaim]: null,\n [g.refreshClaimExpiresAt]: null,\n [g.retentionUntil]: mapping.clock.encodeInstant(\n S.retainedUntil(\n mapping,\n Math.max(now, token.metadata.useUntilMillis, token.metadata.refreshUseUntilMillis ?? 0),\n ),\n ),\n };\n\n if (!replacing) {\n yield* owner.insert(g.table, values, {\n [g.moduleId]: token.moduleId,\n [g.grantId]: token.grantId,\n });\n } else\n yield* owner.update(\n g.table,\n { [g.moduleId]: token.moduleId, [g.grantId]: token.grantId },\n values,\n );\n });\n\n const settle = Effect.fn(\"oauthConnected.settle\")(function* (\n mapping: STypes.Mapping,\n input: FTypes.Input<\"settle\">,\n ) {\n const owner = yield* CurrentOAuthTransaction;\n\n const c = input.claim.flow.context,\n out = input.outcome;\n\n const found = yield* S.current(mapping, c.revision.subjectId);\n\n const authorized =\n found !== undefined &&\n (yield* S.action(\n mapping,\n found,\n input.authorization,\n \"settle\",\n F.expected(input.claim.flow),\n ));\n\n const cl = yield* S.client(mapping, S.configuration(input.claim.flow), false);\n\n if (cl === undefined) return { _tag: \"Rejected\" } as const;\n if (out._tag !== \"Verified\" && out._tag !== \"Quarantined\") {\n const claimed = yield* F.exact(mapping, input.claim);\n\n if (claimed === undefined) return { _tag: \"Rejected\" } as const;\n const state = out._tag === \"Unissued\" ? \"Rejected\" : out._tag;\n\n yield* F.terminal(\n mapping,\n input.claim,\n state,\n out._tag === \"Cancelled\" || out._tag === \"Unissued\" ? \"Resolved\" : \"Unresolved\",\n );\n\n return { _tag: state } as\n | { readonly _tag: \"Cancelled\" }\n | { readonly _tag: \"Rejected\" }\n | { readonly _tag: \"Conflict\" }\n | { readonly _tag: \"Ambiguous\" };\n }\n\n const grant = snapshotOAuthSync(M.OAuthConnectedStoredGrant, out.grant),\n token = grant.context;\n\n invariant(\n token.moduleId === c.moduleId &&\n token.subjectId === c.revision.subjectId &&\n token.grantId === c.grantId &&\n token.identity.provider === c.provider &&\n token.identity.issuer === c.issuer &&\n (yield* S.clientKey(token.configuration)) === cl.id &&\n S.tokenContextStorage.encode({\n ...token,\n configuration: S.configuration(input.claim.flow),\n }) === S.tokenContextStorage.encode(token),\n );\n const native = yield* mapping.subjectId.toNative(c.revision.subjectId);\n\n const tuple = yield* F.readTuple(mapping.ownership, token.identity),\n t = mapping.ownership.tuple;\n\n if (\n tuple.row[t.state] === \"Reserved\" ||\n (tuple.row[t.state] === \"Owned\" && !mapping.subjectId.equals(tuple.row[t.subjectId], native))\n ) {\n const claimed = yield* F.exact(mapping, input.claim);\n\n if (claimed !== undefined) yield* F.terminal(mapping, input.claim, \"Conflict\", \"Unresolved\");\n\n return { _tag: \"Conflict\" } as const;\n }\n const co = yield* S.cohort(mapping, cl.id, tuple.key, true);\n const original = yield* S.readGrant(mapping, c.moduleId, c.grantId);\n const g = mapping.grant;\n\n const other = yield* owner.read(\n g.table,\n both(\n equal(g.table, {\n [g.moduleId]: c.moduleId,\n [g.subjectId]: native,\n [g.profileKey]: c.profile.key,\n [g.activeIdentityKey]: tuple.key,\n }),\n ne(col(g.table, g.grantId), c.grantId),\n ),\n { limit: 1 },\n );\n\n const claimed = yield* F.exact(mapping, input.claim);\n\n if (claimed === undefined) return { _tag: \"Rejected\" } as const;\n invariant(\n token.exchangeOrder === input.claim.order &&\n validMetadata(token, claimed.now) &&\n token.metadata.obtainedAtMillis >= input.claim.claimedAtMillis,\n );\n const reconnect = c.reconnect;\n\n const targetOkay =\n reconnect === undefined\n ? original === undefined\n : original !== undefined &&\n F.sameTarget(reconnect, original.context) &&\n sameIdentity(reconnect.identity, token.identity) &&\n original.row[g.refreshWork] !== \"Unresolved\";\n\n const previousSafe = yield* C.noFormerOwner(mapping, tuple.key, cl.id, native);\n\n const active =\n out._tag === \"Verified\" &&\n authorized &&\n claimed.active &&\n c.profile.issuance === \"active\" &&\n token.metadata.useUntilMillis > claimed.now &&\n !co.blocked &&\n co.generation === token.cohortGeneration &&\n S.orderNumber(input.claim.order) > co.cutoff &&\n targetOkay &&\n other.rows.length === 0 &&\n previousSafe;\n\n if (!active) {\n // Foreign historical custody never authorizes a new remote operation.\n if (!previousSafe) {\n yield* F.terminal(mapping, input.claim, \"Conflict\", \"Unresolved\");\n\n return { _tag: \"Conflict\" } as const;\n }\n if (tuple.row[t.state] === \"Unowned\")\n yield* F.acquireTuple(mapping.ownership, token.identity, tuple.key, S.nativeCopy(native));\n yield* C.fence(mapping, cl, co);\n if (out.cleanup !== undefined) {\n yield* C.storeJob(mapping, out.cleanup, token, native, claimed.now);\n yield* F.terminal(mapping, input.claim, \"Quarantined\", \"Resolved\", { cohort: co.id });\n } else\n yield* F.terminal(mapping, input.claim, \"Quarantined\", \"Unresolved\", {\n cohort: co.id,\n sealed: grant,\n });\n\n return { _tag: targetOkay && other.rows.length === 0 ? \"Rejected\" : \"Conflict\" } as\n | { readonly _tag: \"Rejected\" }\n | { readonly _tag: \"Conflict\" };\n }\n if (tuple.row[t.state] === \"Unowned\")\n yield* F.acquireTuple(mapping.ownership, token.identity, tuple.key, S.nativeCopy(native));\n\n yield* activateGrant(mapping, grant, native, claimed.now, original !== undefined);\n yield* F.terminal(mapping, input.claim, \"Connected\", \"Resolved\", { cohort: co.id });\n owner.postconditions.push(\n sql`${mapping.clock.engineNowMillis} >= ${claimed.now} and ${mapping.clock.engineNowMillis} < ${Math.min(input.claim.claimExpiresAtMillis, token.metadata.useUntilMillis)}`,\n );\n\n return { _tag: \"Connected\", grant } as const;\n });\n\n return { validMetadata, activateGrant, settle };\n});\n\nexport class OAuthConnectedSettlement extends Context.Service<\n OAuthConnectedSettlement,\n Effect.Success<typeof make>\n>()(\"effect-auth/persistence/OAuthConnectedSettlement\") {\n static readonly layer = Layer.effect(OAuthConnectedSettlement, make);\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import "../mapping-error.mjs";
|
|
2
|
-
import "./owner.mjs";
|
|
3
|
-
import "./connected-state.mjs";
|
|
4
|
-
import "./query-compiler.mjs";
|
|
5
|
-
import "./flow.mjs";
|
|
6
|
-
import "./connected-custody.mjs";
|
|
7
|
-
import "./connected-flow.mjs";
|
|
8
|
-
import "./connected-settlement.mjs";
|
|
9
|
-
import { Context, Effect, Layer, Schema } from "effect";
|
|
10
|
-
import "@yielded/auth/OAuth";
|