@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
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { PersistenceMappingError } from "./mapping-error.mjs";
|
|
2
|
+
import { Cause, Context, Effect, Schema } from "effect";
|
|
3
|
+
import { SqlClient } from "effect/sql";
|
|
4
|
+
import { Statement } from "effect/sql/Statement";
|
|
5
|
+
import { CommitDiscarded, CommitPending, CurrentCommitJournal, LifecycleHooks, PreparedCommit } from "@yielded/auth/Hooks";
|
|
6
|
+
import { SqlError } from "effect/sql/SqlError";
|
|
7
|
+
//#region src/internal/sql-commit.d.ts
|
|
8
|
+
type SqlCommitError = PersistenceMappingError | Schema.SchemaError | SqlError;
|
|
9
|
+
declare const SqlCommitOwnerError_base: Schema.Class<SqlCommitOwnerError, Schema.TaggedStruct<"SqlCommitOwnerError", {
|
|
10
|
+
readonly reason: Schema.Literals<readonly ["closed", "different-client", "poisoned", "in-flight", "invalid-receipt", "invalid-mode", "postcondition-requires-transaction", "batch-required", "empty-batch"]>;
|
|
11
|
+
}>, Cause.YieldableError>;
|
|
12
|
+
export declare class SqlCommitOwnerError extends SqlCommitOwnerError_base {}
|
|
13
|
+
declare const SqlBatchCommit_base: Context.ServiceClass<SqlBatchCommit, "@yielded/auth-persistence/SqlBatchCommit", {
|
|
14
|
+
readonly client: SqlClient.SqlClient;
|
|
15
|
+
readonly execute: (statements: ReadonlyArray<Statement<unknown>>) => Effect.Effect<void, SqlError>;
|
|
16
|
+
} | undefined>;
|
|
17
|
+
/** Composition selects a D1 batch owner or explicitly supplies no batch owner. */
|
|
18
|
+
export declare class SqlBatchCommit extends SqlBatchCommit_base {}
|
|
19
|
+
declare const SqlNativeCommit_base: Context.ServiceClass<SqlNativeCommit, "@yielded/auth-persistence/SqlNativeCommit", {
|
|
20
|
+
readonly client: SqlClient.SqlClient;
|
|
21
|
+
readonly withTransaction: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | SqlCommitError, R>;
|
|
22
|
+
}>;
|
|
23
|
+
/** Platform ownership for databases requiring a transaction isolation policy. */
|
|
24
|
+
export declare class SqlNativeCommit extends SqlNativeCommit_base {}
|
|
25
|
+
type SqlCommitMode = "transaction" | "statement" | "batch";
|
|
26
|
+
interface SqlPostcondition {
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly check: Effect.Effect<void, SqlCommitError, SqlClient.SqlClient>;
|
|
29
|
+
}
|
|
30
|
+
export interface SqlCommitScope {
|
|
31
|
+
readonly client: SqlClient.SqlClient;
|
|
32
|
+
readonly mode: SqlCommitMode;
|
|
33
|
+
readonly origin: "operation" | "application";
|
|
34
|
+
readonly postconditions: Array<SqlPostcondition | {
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly statement: Statement<unknown>;
|
|
37
|
+
}>;
|
|
38
|
+
readonly receipts: Array<Effect.Effect<void, CommitPending | CommitDiscarded>>;
|
|
39
|
+
readonly statements: Array<Statement<unknown>>;
|
|
40
|
+
active: boolean;
|
|
41
|
+
poisoned: boolean;
|
|
42
|
+
inFlight: number;
|
|
43
|
+
}
|
|
44
|
+
declare const CurrentSqlCommit_base: Context.ServiceClass<CurrentSqlCommit, "@yielded/auth-persistence/CurrentSqlCommit", SqlCommitScope>;
|
|
45
|
+
export declare class CurrentSqlCommit extends CurrentSqlCommit_base {}
|
|
46
|
+
type OwnedRequirements<R> = Exclude<Exclude<Exclude<Exclude<R, CurrentSqlCommit>, CurrentCommitJournal>, SqlClient.SqlClient>, LifecycleHooks>;
|
|
47
|
+
export interface SqlCommitExecutor<Failure> {
|
|
48
|
+
readonly read: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, Failure, Exclude<Exclude<R, SqlClient.SqlClient>, LifecycleHooks>>;
|
|
49
|
+
/** Session verification only: runs on the caller's transaction connection when
|
|
50
|
+
* one is ambient. Other reads reject ambient transactions before any result. */
|
|
51
|
+
readonly verify: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, Failure, Exclude<Exclude<R, SqlClient.SqlClient>, LifecycleHooks>>;
|
|
52
|
+
/** Preserve expected operation failures without admitting application suffix work. */
|
|
53
|
+
readonly operation: <A, E, R>(effect: Effect.Effect<A, E, R>, mode?: "transaction" | "statement") => Effect.Effect<A, E | Failure, OwnedRequirements<R>>;
|
|
54
|
+
readonly operationBatch: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | Failure, OwnedRequirements<R> | SqlBatchCommit>;
|
|
55
|
+
readonly coordinate: <A, E, R>(effect: Effect.Effect<A, E, R>, mode?: "transaction" | "statement") => Effect.Effect<A, E | Failure, OwnedRequirements<R>>;
|
|
56
|
+
readonly coordinateBatch: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | Failure, OwnedRequirements<R> | SqlBatchCommit>;
|
|
57
|
+
readonly run: <A, E, R>(effect: Effect.Effect<A, E, R>, mode?: "transaction" | "statement") => Effect.Effect<A, Failure, OwnedRequirements<R>>;
|
|
58
|
+
readonly batch: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, Failure, OwnedRequirements<R> | SqlBatchCommit>;
|
|
59
|
+
}
|
|
60
|
+
/** Capture an executor where its service is constructed. Bound services cannot
|
|
61
|
+
* escape their owner, join another client, or silently start a second commit.
|
|
62
|
+
* Reads are advisory and never coordinate a commit. Statement mode is reserved
|
|
63
|
+
* for one atomic SQL mutation; authority mutations use transaction or batch mode.
|
|
64
|
+
*/
|
|
65
|
+
export declare const makeSqlCommitExecutor: <Failure>(unavailable: () => Failure) => Effect.Effect<SqlCommitExecutor<Failure>, never, LifecycleHooks | SqlClient.SqlClient>;
|
|
66
|
+
/** Application statements join the same fixed batch and cannot escape it. */
|
|
67
|
+
export interface SqlBatchCollector {
|
|
68
|
+
readonly append: (statement: Statement<unknown>) => Effect.Effect<void, SqlCommitOwnerError>;
|
|
69
|
+
}
|
|
70
|
+
export declare const captureSqlBatchStatements: Effect.Effect<SqlBatchCollector, never, CurrentSqlCommit>;
|
|
71
|
+
//#endregion
|
|
72
|
+
//# sourceMappingURL=sql-commit.d.mts.map
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { requireStandalone } from "./standalone.mjs";
|
|
2
|
+
import { Cause, Context, Data, Effect, Option, Predicate, Schema } from "effect";
|
|
3
|
+
import { SqlClient } from "effect/sql";
|
|
4
|
+
import { CurrentCommitJournal, LifecycleHooks, coordinateCommit, hasCommitScope } from "@yielded/auth/Hooks";
|
|
5
|
+
import { reportPersistenceFailure } from "@yielded/auth/Persistence";
|
|
6
|
+
//#region src/internal/sql-commit.ts
|
|
7
|
+
var SqlCommitOwnerError = class extends Schema.TaggedError()("SqlCommitOwnerError", { reason: Schema.Literals([
|
|
8
|
+
"closed",
|
|
9
|
+
"different-client",
|
|
10
|
+
"poisoned",
|
|
11
|
+
"in-flight",
|
|
12
|
+
"invalid-receipt",
|
|
13
|
+
"invalid-mode",
|
|
14
|
+
"postcondition-requires-transaction",
|
|
15
|
+
"batch-required",
|
|
16
|
+
"empty-batch"
|
|
17
|
+
]) }) {};
|
|
18
|
+
/** Composition selects a D1 batch owner or explicitly supplies no batch owner. */
|
|
19
|
+
var SqlBatchCommit = class extends Context.Service()("@yielded/auth-persistence/SqlBatchCommit") {};
|
|
20
|
+
/** Platform ownership for databases requiring a transaction isolation policy. */
|
|
21
|
+
var SqlNativeCommit = class extends Context.Service()("@yielded/auth-persistence/SqlNativeCommit") {};
|
|
22
|
+
var CurrentSqlCommit = class extends Context.Service()("@yielded/auth-persistence/CurrentSqlCommit") {};
|
|
23
|
+
const closed = () => SqlCommitOwnerError.make({ reason: "closed" });
|
|
24
|
+
/** Explicit final checks run in the physical owner after application work.
|
|
25
|
+
* They resolve SqlClient there, rather than retaining a released savepoint.
|
|
26
|
+
*/
|
|
27
|
+
const registerSqlPostcondition = (condition) => Effect.flatMap(CurrentSqlCommit, (scope) => {
|
|
28
|
+
if (!scope.active) return Effect.fail(closed());
|
|
29
|
+
if (scope.mode !== "transaction") return Effect.fail(SqlCommitOwnerError.make({ reason: "postcondition-requires-transaction" }));
|
|
30
|
+
return Effect.sync(() => {
|
|
31
|
+
scope.postconditions.push(condition);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
/** D1 checks final semantic predicates after all application batch statements. */
|
|
35
|
+
const registerSqlBatchPostcondition = (condition) => Effect.flatMap(CurrentSqlCommit, (scope) => {
|
|
36
|
+
if (!scope.active) return Effect.fail(closed());
|
|
37
|
+
if (scope.mode !== "batch") return Effect.fail(SqlCommitOwnerError.make({ reason: "batch-required" }));
|
|
38
|
+
return Effect.sync(() => {
|
|
39
|
+
scope.postconditions.push(condition);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
/** A caught rollback cannot leave a discarded receipt in a successful owner. A D1
|
|
43
|
+
* batch needs one physical statement even when the decision writes nothing. */
|
|
44
|
+
const registerSqlCommitReceipt = (receipt) => Effect.flatMap(CurrentSqlCommit, (scope) => {
|
|
45
|
+
if (!scope.active) return Effect.fail(closed());
|
|
46
|
+
return Effect.sync(() => {
|
|
47
|
+
if (scope.mode === "batch" && scope.statements.length === 0) scope.statements.push(scope.client`select 1`);
|
|
48
|
+
scope.receipts.push(receipt.read.pipe(Effect.asVoid));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
const appendSqlBatchStatement = (statement) => Effect.flatMap(CurrentSqlCommit, (scope) => {
|
|
52
|
+
if (!scope.active) return Effect.fail(closed());
|
|
53
|
+
if (scope.mode !== "batch") return Effect.fail(SqlCommitOwnerError.make({ reason: "batch-required" }));
|
|
54
|
+
return Effect.sync(() => {
|
|
55
|
+
scope.statements.push(statement);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
/** Capture an executor where its service is constructed. Bound services cannot
|
|
59
|
+
* escape their owner, join another client, or silently start a second commit.
|
|
60
|
+
* Reads are advisory and never coordinate a commit. Statement mode is reserved
|
|
61
|
+
* for one atomic SQL mutation; authority mutations use transaction or batch mode.
|
|
62
|
+
*/
|
|
63
|
+
const makeSqlCommitExecutor = Effect.fnUntraced(function* (unavailable) {
|
|
64
|
+
const sql = yield* SqlClient.SqlClient;
|
|
65
|
+
const hooks = yield* LifecycleHooks;
|
|
66
|
+
const captured = yield* Effect.serviceOption(CurrentSqlCommit);
|
|
67
|
+
const native = yield* Effect.serviceOption(SqlNativeCommit);
|
|
68
|
+
const failure = unavailable();
|
|
69
|
+
const report = (effect) => reportPersistenceFailure(effect, (error) => Object.is(error, failure) || Schema.is(SqlCommitOwnerError)(error) || Predicate.hasProperty(failure, "_tag") && typeof failure._tag === "string" && Predicate.hasProperty(error, "_tag") && error._tag === failure._tag).pipe(Effect.mapError(() => failure), Effect.catchCause((cause) => Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(failure)));
|
|
70
|
+
const admit = Effect.gen(function* () {
|
|
71
|
+
if (Option.isSome(captured)) {
|
|
72
|
+
const scope = captured.value;
|
|
73
|
+
const current = yield* Effect.serviceOption(CurrentSqlCommit);
|
|
74
|
+
if (!scope.active || Option.isNone(current) || current.value !== scope) return yield* closed();
|
|
75
|
+
if (scope.client.transactionService !== sql.transactionService) return yield* SqlCommitOwnerError.make({ reason: "different-client" });
|
|
76
|
+
} else {
|
|
77
|
+
if (yield* hasCommitScope) return yield* Effect.fail(failure);
|
|
78
|
+
yield* requireStandalone(() => failure, sql.transactionService);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const provide = (effect) => effect.pipe(Effect.provideService(SqlClient.SqlClient, sql), Effect.provideService(LifecycleHooks, hooks));
|
|
82
|
+
const bound = (scope, effect) => Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
|
|
83
|
+
yield* admit;
|
|
84
|
+
const journal = yield* Effect.serviceOption(CurrentCommitJournal);
|
|
85
|
+
if (Option.isNone(journal)) return yield* closed();
|
|
86
|
+
scope.inFlight++;
|
|
87
|
+
return yield* restore(effect.pipe(Effect.provideService(CurrentSqlCommit, scope), Effect.provideService(CurrentCommitJournal, journal.value))).pipe(Effect.flatMap((value) => admit.pipe(Effect.as(value))), Effect.onExit((exit) => Effect.sync(() => {
|
|
88
|
+
scope.inFlight--;
|
|
89
|
+
if (exit._tag === "Failure") scope.poisoned = true;
|
|
90
|
+
})));
|
|
91
|
+
}));
|
|
92
|
+
const finish = Effect.fnUntraced(function* (scope) {
|
|
93
|
+
if (scope.poisoned) return yield* SqlCommitOwnerError.make({ reason: "poisoned" });
|
|
94
|
+
if (scope.inFlight !== 0) return yield* SqlCommitOwnerError.make({ reason: "in-flight" });
|
|
95
|
+
for (const condition of scope.postconditions) if ("statement" in condition) scope.statements.push(condition.statement);
|
|
96
|
+
else yield* condition.check;
|
|
97
|
+
for (const receipt of scope.receipts) {
|
|
98
|
+
const status = yield* Effect.result(receipt);
|
|
99
|
+
if (status._tag !== "Failure" || status.failure._tag !== "CommitPending") return yield* SqlCommitOwnerError.make({ reason: "invalid-receipt" });
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
const owned = (effect, mode, origin, batch) => {
|
|
103
|
+
if (Option.isSome(captured)) {
|
|
104
|
+
const scope = captured.value;
|
|
105
|
+
if (mode !== scope.mode && !(mode === "statement" && scope.mode === "transaction")) return Effect.fail(SqlCommitOwnerError.make({ reason: "invalid-mode" }));
|
|
106
|
+
return provide(bound(scope, effect));
|
|
107
|
+
}
|
|
108
|
+
const work = Effect.gen(function* () {
|
|
109
|
+
yield* admit;
|
|
110
|
+
return (yield* coordinateCommit(() => {
|
|
111
|
+
const scope = {
|
|
112
|
+
client: sql,
|
|
113
|
+
mode,
|
|
114
|
+
origin,
|
|
115
|
+
active: true,
|
|
116
|
+
poisoned: false,
|
|
117
|
+
inFlight: 0,
|
|
118
|
+
postconditions: [],
|
|
119
|
+
receipts: [],
|
|
120
|
+
statements: []
|
|
121
|
+
};
|
|
122
|
+
const owner = Effect.gen(function* () {
|
|
123
|
+
const value = yield* effect.pipe(Effect.provideService(CurrentSqlCommit, scope), Effect.ensuring(Effect.sync(() => {
|
|
124
|
+
scope.active = false;
|
|
125
|
+
})));
|
|
126
|
+
yield* finish(scope);
|
|
127
|
+
if (mode === "batch") {
|
|
128
|
+
if (batch === void 0) return yield* SqlCommitOwnerError.make({ reason: "batch-required" });
|
|
129
|
+
if (batch.client.transactionService !== sql.transactionService) return yield* SqlCommitOwnerError.make({ reason: "different-client" });
|
|
130
|
+
if (scope.statements.length === 0) return yield* SqlCommitOwnerError.make({ reason: "empty-batch" });
|
|
131
|
+
yield* batch.execute(scope.statements);
|
|
132
|
+
}
|
|
133
|
+
return value;
|
|
134
|
+
});
|
|
135
|
+
if (mode !== "transaction") return owner;
|
|
136
|
+
if (Option.isNone(native)) return sql.withTransaction(owner);
|
|
137
|
+
if (native.value.client.transactionService !== sql.transactionService) return Effect.fail(SqlCommitOwnerError.make({ reason: "different-client" }));
|
|
138
|
+
return native.value.withTransaction(owner);
|
|
139
|
+
})).value;
|
|
140
|
+
});
|
|
141
|
+
return provide(work);
|
|
142
|
+
};
|
|
143
|
+
const read = (effect) => {
|
|
144
|
+
if (Option.isSome(captured)) return provide(report(bound(captured.value, effect)));
|
|
145
|
+
return provide(report(admit.pipe(Effect.andThen(effect))));
|
|
146
|
+
};
|
|
147
|
+
const verify = (effect) => Option.isSome(captured) ? read(effect) : provide(report(effect));
|
|
148
|
+
const coordinate = (effect, mode, origin, batch) => {
|
|
149
|
+
class ApplicationFailure extends Data.TaggedError("SqlCommitApplicationFailure") {}
|
|
150
|
+
const wrapped = effect.pipe(Effect.mapError((error) => new ApplicationFailure({ error })));
|
|
151
|
+
return reportPersistenceFailure(owned(wrapped, mode, origin, batch), (error) => error instanceof ApplicationFailure || Schema.is(SqlCommitOwnerError)(error)).pipe(Effect.catchCause((cause) => Effect.failCause(Cause.fromReasons(cause.reasons.map((reason) => {
|
|
152
|
+
if (Cause.isInterruptReason(reason)) return reason;
|
|
153
|
+
if (Cause.isFailReason(reason) && reason.error instanceof ApplicationFailure) return Cause.makeFailReason(reason.error.error);
|
|
154
|
+
return Cause.makeFailReason(failure);
|
|
155
|
+
})))));
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
read,
|
|
159
|
+
verify,
|
|
160
|
+
operation: (effect, mode = "transaction") => coordinate(effect, mode, "operation"),
|
|
161
|
+
operationBatch: (effect) => Effect.flatMap(SqlBatchCommit, (batch) => coordinate(effect, "batch", "operation", batch)),
|
|
162
|
+
coordinate: (effect, mode = "transaction") => coordinate(effect, mode, "application"),
|
|
163
|
+
coordinateBatch: (effect) => Effect.flatMap(SqlBatchCommit, (batch) => coordinate(effect, "batch", "application", batch)),
|
|
164
|
+
run: (effect, mode = "transaction") => report(owned(effect, mode, "operation")),
|
|
165
|
+
batch: (effect) => Effect.flatMap(SqlBatchCommit, (batch) => report(owned(effect, "batch", "operation", batch)))
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
const captureSqlBatchStatements = Effect.map(CurrentSqlCommit, (scope) => ({ append: (statement) => Effect.gen(function* () {
|
|
169
|
+
const current = yield* Effect.serviceOption(CurrentSqlCommit);
|
|
170
|
+
if (!scope.active || scope.mode !== "batch" || Option.isNone(current) || current.value !== scope) return yield* closed();
|
|
171
|
+
scope.statements.push(statement);
|
|
172
|
+
}) }));
|
|
173
|
+
//#endregion
|
|
174
|
+
export { CurrentSqlCommit, SqlBatchCommit, SqlCommitOwnerError, SqlNativeCommit, appendSqlBatchStatement, captureSqlBatchStatements, makeSqlCommitExecutor, registerSqlBatchPostcondition, registerSqlCommitReceipt, registerSqlPostcondition };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=sql-commit.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-commit.mjs","names":[],"sources":["../../src/internal/sql-commit.ts"],"sourcesContent":["import {\n type CommitDiscarded,\n type CommitPending,\n type PreparedCommit,\n CurrentCommitJournal,\n LifecycleHooks,\n coordinateCommit,\n hasCommitScope,\n} from \"@yielded/auth/Hooks\";\nimport { reportPersistenceFailure } from \"@yielded/auth/Persistence\";\nimport { Cause, Context, Data, Effect, Option, Predicate, Schema } from \"effect\";\nimport { SqlClient } from \"effect/sql\";\nimport type { SqlError } from \"effect/sql/SqlError\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport type { PersistenceMappingError } from \"./mapping-error\";\nimport { requireStandalone } from \"./standalone\";\n\ntype SqlCommitError = PersistenceMappingError | Schema.SchemaError | SqlError;\n\nexport class SqlCommitOwnerError extends Schema.TaggedError<SqlCommitOwnerError>()(\n \"SqlCommitOwnerError\",\n {\n reason: Schema.Literals([\n \"closed\",\n \"different-client\",\n \"poisoned\",\n \"in-flight\",\n \"invalid-receipt\",\n \"invalid-mode\",\n \"postcondition-requires-transaction\",\n \"batch-required\",\n \"empty-batch\",\n ]),\n },\n) {}\n\n/** Composition selects a D1 batch owner or explicitly supplies no batch owner. */\nexport class SqlBatchCommit extends Context.Service<\n SqlBatchCommit,\n | undefined\n | {\n readonly client: SqlClient.SqlClient;\n readonly execute: (\n statements: ReadonlyArray<Statement<unknown>>,\n ) => Effect.Effect<void, SqlError>;\n }\n>()(\"@yielded/auth-persistence/SqlBatchCommit\") {}\n\n/** Platform ownership for databases requiring a transaction isolation policy. */\nexport class SqlNativeCommit extends Context.Service<\n SqlNativeCommit,\n {\n readonly client: SqlClient.SqlClient;\n readonly withTransaction: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | SqlCommitError, R>;\n }\n>()(\"@yielded/auth-persistence/SqlNativeCommit\") {}\n\ntype SqlCommitMode = \"transaction\" | \"statement\" | \"batch\";\n\ninterface SqlPostcondition {\n readonly name: string;\n readonly check: Effect.Effect<void, SqlCommitError, SqlClient.SqlClient>;\n}\n\nexport interface SqlCommitScope {\n readonly client: SqlClient.SqlClient;\n readonly mode: SqlCommitMode;\n readonly origin: \"operation\" | \"application\";\n readonly postconditions: Array<\n SqlPostcondition | { readonly name: string; readonly statement: Statement<unknown> }\n >;\n readonly receipts: Array<Effect.Effect<void, CommitPending | CommitDiscarded>>;\n readonly statements: Array<Statement<unknown>>;\n active: boolean;\n poisoned: boolean;\n inFlight: number;\n}\n\nexport class CurrentSqlCommit extends Context.Service<CurrentSqlCommit, SqlCommitScope>()(\n \"@yielded/auth-persistence/CurrentSqlCommit\",\n) {}\n\nconst closed = (): SqlCommitOwnerError => SqlCommitOwnerError.make({ reason: \"closed\" });\n\n/** Explicit final checks run in the physical owner after application work.\n * They resolve SqlClient there, rather than retaining a released savepoint.\n */\nexport const registerSqlPostcondition = (\n condition: SqlPostcondition,\n): Effect.Effect<void, SqlCommitOwnerError, CurrentSqlCommit> =>\n Effect.flatMap(CurrentSqlCommit, (scope) => {\n if (!scope.active) return Effect.fail(closed());\n if (scope.mode !== \"transaction\")\n return Effect.fail(\n SqlCommitOwnerError.make({ reason: \"postcondition-requires-transaction\" }),\n );\n\n return Effect.sync(() => {\n scope.postconditions.push(condition);\n });\n });\n\n/** D1 checks final semantic predicates after all application batch statements. */\nexport const registerSqlBatchPostcondition = (condition: {\n readonly name: string;\n readonly statement: Statement<unknown>;\n}): Effect.Effect<void, SqlCommitOwnerError, CurrentSqlCommit> =>\n Effect.flatMap(CurrentSqlCommit, (scope) => {\n if (!scope.active) return Effect.fail(closed());\n if (scope.mode !== \"batch\")\n return Effect.fail(SqlCommitOwnerError.make({ reason: \"batch-required\" }));\n\n return Effect.sync(() => {\n scope.postconditions.push(condition);\n });\n });\n\n/** A caught rollback cannot leave a discarded receipt in a successful owner. A D1\n * batch needs one physical statement even when the decision writes nothing. */\nexport const registerSqlCommitReceipt = <A>(\n receipt: PreparedCommit<A>,\n): Effect.Effect<void, SqlCommitOwnerError, CurrentSqlCommit> =>\n Effect.flatMap(CurrentSqlCommit, (scope) => {\n if (!scope.active) return Effect.fail(closed());\n\n return Effect.sync(() => {\n if (scope.mode === \"batch\" && scope.statements.length === 0)\n scope.statements.push(scope.client`select 1`);\n scope.receipts.push(receipt.read.pipe(Effect.asVoid));\n });\n });\n\nexport const appendSqlBatchStatement = (\n statement: Statement<unknown>,\n): Effect.Effect<void, SqlCommitOwnerError, CurrentSqlCommit> =>\n Effect.flatMap(CurrentSqlCommit, (scope) => {\n if (!scope.active) return Effect.fail(closed());\n if (scope.mode !== \"batch\")\n return Effect.fail(SqlCommitOwnerError.make({ reason: \"batch-required\" }));\n\n return Effect.sync(() => {\n scope.statements.push(statement);\n });\n });\n\ntype OwnedRequirements<R> = Exclude<\n Exclude<Exclude<Exclude<R, CurrentSqlCommit>, CurrentCommitJournal>, SqlClient.SqlClient>,\n LifecycleHooks\n>;\n\nexport interface SqlCommitExecutor<Failure> {\n readonly read: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, Failure, Exclude<Exclude<R, SqlClient.SqlClient>, LifecycleHooks>>;\n /** Session verification only: runs on the caller's transaction connection when\n * one is ambient. Other reads reject ambient transactions before any result. */\n readonly verify: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, Failure, Exclude<Exclude<R, SqlClient.SqlClient>, LifecycleHooks>>;\n /** Preserve expected operation failures without admitting application suffix work. */\n readonly operation: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode?: \"transaction\" | \"statement\",\n ) => Effect.Effect<A, E | Failure, OwnedRequirements<R>>;\n readonly operationBatch: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | Failure, OwnedRequirements<R> | SqlBatchCommit>;\n readonly coordinate: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode?: \"transaction\" | \"statement\",\n ) => Effect.Effect<A, E | Failure, OwnedRequirements<R>>;\n readonly coordinateBatch: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | Failure, OwnedRequirements<R> | SqlBatchCommit>;\n readonly run: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode?: \"transaction\" | \"statement\",\n ) => Effect.Effect<A, Failure, OwnedRequirements<R>>;\n readonly batch: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, Failure, OwnedRequirements<R> | SqlBatchCommit>;\n}\n\n/** Capture an executor where its service is constructed. Bound services cannot\n * escape their owner, join another client, or silently start a second commit.\n * Reads are advisory and never coordinate a commit. Statement mode is reserved\n * for one atomic SQL mutation; authority mutations use transaction or batch mode.\n */\nexport const makeSqlCommitExecutor = Effect.fnUntraced(function* <Failure>(\n unavailable: () => Failure,\n): Effect.fn.Return<SqlCommitExecutor<Failure>, never, SqlClient.SqlClient | LifecycleHooks> {\n const sql = yield* SqlClient.SqlClient;\n const hooks = yield* LifecycleHooks;\n const captured = yield* Effect.serviceOption(CurrentSqlCommit);\n const native = yield* Effect.serviceOption(SqlNativeCommit);\n const failure = unavailable();\n\n const report = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n reportPersistenceFailure(\n effect,\n (error) =>\n Object.is(error, failure) ||\n Schema.is(SqlCommitOwnerError)(error) ||\n (Predicate.hasProperty(failure, \"_tag\") &&\n typeof failure._tag === \"string\" &&\n Predicate.hasProperty(error, \"_tag\") &&\n error._tag === failure._tag),\n ).pipe(\n Effect.mapError(() => failure),\n Effect.catchCause((cause) =>\n Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(failure),\n ),\n );\n\n const admit = Effect.gen(function* () {\n if (Option.isSome(captured)) {\n const scope = captured.value;\n const current = yield* Effect.serviceOption(CurrentSqlCommit);\n\n if (!scope.active || Option.isNone(current) || current.value !== scope)\n return yield* closed();\n if (scope.client.transactionService !== sql.transactionService)\n return yield* SqlCommitOwnerError.make({ reason: \"different-client\" });\n } else {\n if (yield* hasCommitScope) return yield* Effect.fail(failure);\n yield* requireStandalone(() => failure, sql.transactionService);\n }\n });\n\n const provide = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n effect.pipe(\n Effect.provideService(SqlClient.SqlClient, sql),\n Effect.provideService(LifecycleHooks, hooks),\n );\n\n const bound = <A, E, R>(scope: SqlCommitScope, effect: Effect.Effect<A, E, R>) =>\n Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n yield* admit;\n const journal = yield* Effect.serviceOption(CurrentCommitJournal);\n\n if (Option.isNone(journal)) return yield* closed();\n scope.inFlight++;\n\n return yield* restore(\n effect.pipe(\n Effect.provideService(CurrentSqlCommit, scope),\n Effect.provideService(CurrentCommitJournal, journal.value),\n ),\n ).pipe(\n Effect.flatMap((value) => admit.pipe(Effect.as(value))),\n Effect.onExit((exit) =>\n Effect.sync(() => {\n scope.inFlight--;\n if (exit._tag === \"Failure\") scope.poisoned = true;\n }),\n ),\n );\n }),\n );\n\n const finish = Effect.fnUntraced(function* (scope: SqlCommitScope) {\n if (scope.poisoned) return yield* SqlCommitOwnerError.make({ reason: \"poisoned\" });\n if (scope.inFlight !== 0) return yield* SqlCommitOwnerError.make({ reason: \"in-flight\" });\n\n for (const condition of scope.postconditions) {\n if (\"statement\" in condition) scope.statements.push(condition.statement);\n else yield* condition.check;\n }\n for (const receipt of scope.receipts) {\n const status = yield* Effect.result(receipt);\n\n if (status._tag !== \"Failure\" || status.failure._tag !== \"CommitPending\")\n return yield* SqlCommitOwnerError.make({ reason: \"invalid-receipt\" });\n }\n });\n\n const owned = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode: SqlCommitMode,\n origin: SqlCommitScope[\"origin\"],\n batch?: SqlBatchCommit[\"Service\"],\n ) => {\n if (Option.isSome(captured)) {\n const scope = captured.value;\n\n if (mode !== scope.mode && !(mode === \"statement\" && scope.mode === \"transaction\"))\n return Effect.fail(SqlCommitOwnerError.make({ reason: \"invalid-mode\" }));\n\n return provide(bound(scope, effect));\n }\n\n const work = Effect.gen(function* () {\n yield* admit;\n\n const result = yield* coordinateCommit(() => {\n const scope: SqlCommitScope = {\n client: sql,\n mode,\n origin,\n active: true,\n poisoned: false,\n inFlight: 0,\n postconditions: [],\n receipts: [],\n statements: [],\n };\n\n const owner = Effect.gen(function* () {\n const value = yield* effect.pipe(\n Effect.provideService(CurrentSqlCommit, scope),\n Effect.ensuring(\n Effect.sync(() => {\n scope.active = false;\n }),\n ),\n );\n\n yield* finish(scope);\n if (mode === \"batch\") {\n if (batch === undefined)\n return yield* SqlCommitOwnerError.make({ reason: \"batch-required\" });\n if (batch.client.transactionService !== sql.transactionService)\n return yield* SqlCommitOwnerError.make({ reason: \"different-client\" });\n if (scope.statements.length === 0)\n return yield* SqlCommitOwnerError.make({ reason: \"empty-batch\" });\n\n yield* batch.execute(scope.statements);\n }\n\n return value;\n });\n\n if (mode !== \"transaction\") return owner;\n if (Option.isNone(native)) return sql.withTransaction(owner);\n if (native.value.client.transactionService !== sql.transactionService)\n return Effect.fail(SqlCommitOwnerError.make({ reason: \"different-client\" }));\n\n return native.value.withTransaction(owner);\n });\n\n return result.value;\n });\n\n return provide(work);\n };\n\n const read = <A, E, R>(effect: Effect.Effect<A, E, R>) => {\n if (Option.isSome(captured)) return provide(report(bound(captured.value, effect)));\n\n return provide(report(admit.pipe(Effect.andThen(effect))));\n };\n\n const verify = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n Option.isSome(captured) ? read(effect) : provide(report(effect));\n\n const coordinate = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode: SqlCommitMode,\n origin: SqlCommitScope[\"origin\"],\n batch?: SqlBatchCommit[\"Service\"],\n ) => {\n class ApplicationFailure extends Data.TaggedError(\"SqlCommitApplicationFailure\")<{\n readonly error: E;\n }> {}\n const wrapped = effect.pipe(Effect.mapError((error) => new ApplicationFailure({ error })));\n\n return reportPersistenceFailure(\n owned(wrapped, mode, origin, batch),\n (error) => error instanceof ApplicationFailure || Schema.is(SqlCommitOwnerError)(error),\n ).pipe(\n Effect.catchCause((cause) =>\n Effect.failCause(\n Cause.fromReasons(\n cause.reasons.map((reason): Cause.Reason<E | Failure> => {\n if (Cause.isInterruptReason(reason)) return reason;\n if (Cause.isFailReason(reason) && reason.error instanceof ApplicationFailure)\n return Cause.makeFailReason(reason.error.error);\n\n return Cause.makeFailReason(failure);\n }),\n ),\n ),\n ),\n );\n };\n\n return {\n read,\n verify,\n operation: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode: \"transaction\" | \"statement\" = \"transaction\",\n ) => coordinate(effect, mode, \"operation\"),\n operationBatch: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(SqlBatchCommit, (batch) => coordinate(effect, \"batch\", \"operation\", batch)),\n coordinate: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode: \"transaction\" | \"statement\" = \"transaction\",\n ) => coordinate(effect, mode, \"application\"),\n coordinateBatch: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(SqlBatchCommit, (batch) => coordinate(effect, \"batch\", \"application\", batch)),\n run: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n mode: \"transaction\" | \"statement\" = \"transaction\",\n ): Effect.Effect<A, Failure, OwnedRequirements<R>> => report(owned(effect, mode, \"operation\")),\n batch: <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n Effect.flatMap(SqlBatchCommit, (batch) => report(owned(effect, \"batch\", \"operation\", batch))),\n };\n});\n\n/** Application statements join the same fixed batch and cannot escape it. */\nexport interface SqlBatchCollector {\n readonly append: (statement: Statement<unknown>) => Effect.Effect<void, SqlCommitOwnerError>;\n}\n\nexport const captureSqlBatchStatements: Effect.Effect<SqlBatchCollector, never, CurrentSqlCommit> =\n Effect.map(CurrentSqlCommit, (scope) => ({\n append: (statement: Statement<unknown>) =>\n Effect.gen(function* () {\n const current = yield* Effect.serviceOption(CurrentSqlCommit);\n\n if (\n !scope.active ||\n scope.mode !== \"batch\" ||\n Option.isNone(current) ||\n current.value !== scope\n )\n return yield* closed();\n scope.statements.push(statement);\n }),\n }));\n"],"mappings":";;;;;;AAoBA,IAAa,sBAAb,cAAyC,OAAO,YAAiC,CAAC,CAChF,uBACA,EACE,QAAQ,OAAO,SAAS;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,EACH,CACF,CAAC,CAAC,CAAC;;AAGH,IAAa,iBAAb,cAAoC,QAAQ,QAS1C,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC;;AAGjD,IAAa,kBAAb,cAAqC,QAAQ,QAQ3C,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC;AAuBlD,IAAa,mBAAb,cAAsC,QAAQ,QAA0C,CAAC,CACvF,4CACF,CAAC,CAAC,CAAC;AAEH,MAAM,eAAoC,oBAAoB,KAAK,EAAE,QAAQ,SAAS,CAAC;;;;AAKvF,MAAa,4BACX,cAEA,OAAO,QAAQ,mBAAmB,UAAU;CAC1C,IAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,OAAO,CAAC;CAC9C,IAAI,MAAM,SAAS,eACjB,OAAO,OAAO,KACZ,oBAAoB,KAAK,EAAE,QAAQ,qCAAqC,CAAC,CAC3E;CAEF,OAAO,OAAO,WAAW;EACvB,MAAM,eAAe,KAAK,SAAS;CACrC,CAAC;AACH,CAAC;;AAGH,MAAa,iCAAiC,cAI5C,OAAO,QAAQ,mBAAmB,UAAU;CAC1C,IAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,OAAO,CAAC;CAC9C,IAAI,MAAM,SAAS,SACjB,OAAO,OAAO,KAAK,oBAAoB,KAAK,EAAE,QAAQ,iBAAiB,CAAC,CAAC;CAE3E,OAAO,OAAO,WAAW;EACvB,MAAM,eAAe,KAAK,SAAS;CACrC,CAAC;AACH,CAAC;;;AAIH,MAAa,4BACX,YAEA,OAAO,QAAQ,mBAAmB,UAAU;CAC1C,IAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,OAAO,CAAC;CAE9C,OAAO,OAAO,WAAW;EACvB,IAAI,MAAM,SAAS,WAAW,MAAM,WAAW,WAAW,GACxD,MAAM,WAAW,KAAK,MAAM,MAAM,UAAU;EAC9C,MAAM,SAAS,KAAK,QAAQ,KAAK,KAAK,OAAO,MAAM,CAAC;CACtD,CAAC;AACH,CAAC;AAEH,MAAa,2BACX,cAEA,OAAO,QAAQ,mBAAmB,UAAU;CAC1C,IAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,KAAK,OAAO,CAAC;CAC9C,IAAI,MAAM,SAAS,SACjB,OAAO,OAAO,KAAK,oBAAoB,KAAK,EAAE,QAAQ,iBAAiB,CAAC,CAAC;CAE3E,OAAO,OAAO,WAAW;EACvB,MAAM,WAAW,KAAK,SAAS;CACjC,CAAC;AACH,CAAC;;;;;;AA6CH,MAAa,wBAAwB,OAAO,WAAW,WACrD,aAC2F;CAC3F,MAAM,MAAM,OAAO,UAAU;CAC7B,MAAM,QAAQ,OAAO;CACrB,MAAM,WAAW,OAAO,OAAO,cAAc,gBAAgB;CAC7D,MAAM,SAAS,OAAO,OAAO,cAAc,eAAe;CAC1D,MAAM,UAAU,YAAY;CAE5B,MAAM,UAAmB,WACvB,yBACE,SACC,UACC,OAAO,GAAG,OAAO,OAAO,KACxB,OAAO,GAAG,mBAAmB,CAAC,CAAC,KAAK,KACnC,UAAU,YAAY,SAAS,MAAM,KACpC,OAAO,QAAQ,SAAS,YACxB,UAAU,YAAY,OAAO,MAAM,KACnC,MAAM,SAAS,QAAQ,IAC7B,CAAC,CAAC,KACA,OAAO,eAAe,OAAO,GAC7B,OAAO,YAAY,UACjB,MAAM,cAAc,KAAK,IAAI,OAAO,UAAU,KAAK,IAAI,OAAO,KAAK,OAAO,CAC5E,CACF;CAEF,MAAM,QAAQ,OAAO,IAAI,aAAa;EACpC,IAAI,OAAO,OAAO,QAAQ,GAAG;GAC3B,MAAM,QAAQ,SAAS;GACvB,MAAM,UAAU,OAAO,OAAO,cAAc,gBAAgB;GAE5D,IAAI,CAAC,MAAM,UAAU,OAAO,OAAO,OAAO,KAAK,QAAQ,UAAU,OAC/D,OAAO,OAAO,OAAO;GACvB,IAAI,MAAM,OAAO,uBAAuB,IAAI,oBAC1C,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,mBAAmB,CAAC;EACzE,OAAO;GACL,IAAI,OAAO,gBAAgB,OAAO,OAAO,OAAO,KAAK,OAAO;GAC5D,OAAO,wBAAwB,SAAS,IAAI,kBAAkB;EAChE;CACF,CAAC;CAED,MAAM,WAAoB,WACxB,OAAO,KACL,OAAO,eAAe,UAAU,WAAW,GAAG,GAC9C,OAAO,eAAe,gBAAgB,KAAK,CAC7C;CAEF,MAAM,SAAkB,OAAuB,WAC7C,OAAO,qBAAqB,YAC1B,OAAO,IAAI,aAAa;EACtB,OAAO;EACP,MAAM,UAAU,OAAO,OAAO,cAAc,oBAAoB;EAEhE,IAAI,OAAO,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO;EACjD,MAAM;EAEN,OAAO,OAAO,QACZ,OAAO,KACL,OAAO,eAAe,kBAAkB,KAAK,GAC7C,OAAO,eAAe,sBAAsB,QAAQ,KAAK,CAC3D,CACF,CAAC,CAAC,KACA,OAAO,SAAS,UAAU,MAAM,KAAK,OAAO,GAAG,KAAK,CAAC,CAAC,GACtD,OAAO,QAAQ,SACb,OAAO,WAAW;GAChB,MAAM;GACN,IAAI,KAAK,SAAS,WAAW,MAAM,WAAW;EAChD,CAAC,CACH,CACF;CACF,CAAC,CACH;CAEF,MAAM,SAAS,OAAO,WAAW,WAAW,OAAuB;EACjE,IAAI,MAAM,UAAU,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,WAAW,CAAC;EACjF,IAAI,MAAM,aAAa,GAAG,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,YAAY,CAAC;EAExF,KAAK,MAAM,aAAa,MAAM,gBAC5B,IAAI,eAAe,WAAW,MAAM,WAAW,KAAK,UAAU,SAAS;OAClE,OAAO,UAAU;EAExB,KAAK,MAAM,WAAW,MAAM,UAAU;GACpC,MAAM,SAAS,OAAO,OAAO,OAAO,OAAO;GAE3C,IAAI,OAAO,SAAS,aAAa,OAAO,QAAQ,SAAS,iBACvD,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,kBAAkB,CAAC;EACxE;CACF,CAAC;CAED,MAAM,SACJ,QACA,MACA,QACA,UACG;EACH,IAAI,OAAO,OAAO,QAAQ,GAAG;GAC3B,MAAM,QAAQ,SAAS;GAEvB,IAAI,SAAS,MAAM,QAAQ,EAAE,SAAS,eAAe,MAAM,SAAS,gBAClE,OAAO,OAAO,KAAK,oBAAoB,KAAK,EAAE,QAAQ,eAAe,CAAC,CAAC;GAEzE,OAAO,QAAQ,MAAM,OAAO,MAAM,CAAC;EACrC;EAEA,MAAM,OAAO,OAAO,IAAI,aAAa;GACnC,OAAO;GAgDP,QAAO,OA9Ce,uBAAuB;IAC3C,MAAM,QAAwB;KAC5B,QAAQ;KACR;KACA;KACA,QAAQ;KACR,UAAU;KACV,UAAU;KACV,gBAAgB,CAAC;KACjB,UAAU,CAAC;KACX,YAAY,CAAC;IACf;IAEA,MAAM,QAAQ,OAAO,IAAI,aAAa;KACpC,MAAM,QAAQ,OAAO,OAAO,KAC1B,OAAO,eAAe,kBAAkB,KAAK,GAC7C,OAAO,SACL,OAAO,WAAW;MAChB,MAAM,SAAS;KACjB,CAAC,CACH,CACF;KAEA,OAAO,OAAO,KAAK;KACnB,IAAI,SAAS,SAAS;MACpB,IAAI,UAAU,KAAA,GACZ,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,iBAAiB,CAAC;MACrE,IAAI,MAAM,OAAO,uBAAuB,IAAI,oBAC1C,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,mBAAmB,CAAC;MACvE,IAAI,MAAM,WAAW,WAAW,GAC9B,OAAO,OAAO,oBAAoB,KAAK,EAAE,QAAQ,cAAc,CAAC;MAElE,OAAO,MAAM,QAAQ,MAAM,UAAU;KACvC;KAEA,OAAO;IACT,CAAC;IAED,IAAI,SAAS,eAAe,OAAO;IACnC,IAAI,OAAO,OAAO,MAAM,GAAG,OAAO,IAAI,gBAAgB,KAAK;IAC3D,IAAI,OAAO,MAAM,OAAO,uBAAuB,IAAI,oBACjD,OAAO,OAAO,KAAK,oBAAoB,KAAK,EAAE,QAAQ,mBAAmB,CAAC,CAAC;IAE7E,OAAO,OAAO,MAAM,gBAAgB,KAAK;GAC3C,CAAC,EAAA,CAEa;EAChB,CAAC;EAED,OAAO,QAAQ,IAAI;CACrB;CAEA,MAAM,QAAiB,WAAmC;EACxD,IAAI,OAAO,OAAO,QAAQ,GAAG,OAAO,QAAQ,OAAO,MAAM,SAAS,OAAO,MAAM,CAAC,CAAC;EAEjF,OAAO,QAAQ,OAAO,MAAM,KAAK,OAAO,QAAQ,MAAM,CAAC,CAAC,CAAC;CAC3D;CAEA,MAAM,UAAmB,WACvB,OAAO,OAAO,QAAQ,IAAI,KAAK,MAAM,IAAI,QAAQ,OAAO,MAAM,CAAC;CAEjE,MAAM,cACJ,QACA,MACA,QACA,UACG;EACH,MAAM,2BAA2B,KAAK,YAAY,6BAA6B,CAAC,CAE7E,CAAC;EACJ,MAAM,UAAU,OAAO,KAAK,OAAO,UAAU,UAAU,IAAI,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;EAEzF,OAAO,yBACL,MAAM,SAAS,MAAM,QAAQ,KAAK,IACjC,UAAU,iBAAiB,sBAAsB,OAAO,GAAG,mBAAmB,CAAC,CAAC,KAAK,CACxF,CAAC,CAAC,KACA,OAAO,YAAY,UACjB,OAAO,UACL,MAAM,YACJ,MAAM,QAAQ,KAAK,WAAsC;GACvD,IAAI,MAAM,kBAAkB,MAAM,GAAG,OAAO;GAC5C,IAAI,MAAM,aAAa,MAAM,KAAK,OAAO,iBAAiB,oBACxD,OAAO,MAAM,eAAe,OAAO,MAAM,KAAK;GAEhD,OAAO,MAAM,eAAe,OAAO;EACrC,CAAC,CACH,CACF,CACF,CACF;CACF;CAEA,OAAO;EACL;EACA;EACA,YACE,QACA,OAAoC,kBACjC,WAAW,QAAQ,MAAM,WAAW;EACzC,iBAA0B,WACxB,OAAO,QAAQ,iBAAiB,UAAU,WAAW,QAAQ,SAAS,aAAa,KAAK,CAAC;EAC3F,aACE,QACA,OAAoC,kBACjC,WAAW,QAAQ,MAAM,aAAa;EAC3C,kBAA2B,WACzB,OAAO,QAAQ,iBAAiB,UAAU,WAAW,QAAQ,SAAS,eAAe,KAAK,CAAC;EAC7F,MACE,QACA,OAAoC,kBACgB,OAAO,MAAM,QAAQ,MAAM,WAAW,CAAC;EAC7F,QAAiB,WACf,OAAO,QAAQ,iBAAiB,UAAU,OAAO,MAAM,QAAQ,SAAS,aAAa,KAAK,CAAC,CAAC;CAChG;AACF,CAAC;AAOD,MAAa,4BACX,OAAO,IAAI,mBAAmB,WAAW,EACvC,SAAS,cACP,OAAO,IAAI,aAAa;CACtB,MAAM,UAAU,OAAO,OAAO,cAAc,gBAAgB;CAE5D,IACE,CAAC,MAAM,UACP,MAAM,SAAS,WACf,OAAO,OAAO,OAAO,KACrB,QAAQ,UAAU,OAElB,OAAO,OAAO,OAAO;CACvB,MAAM,WAAW,KAAK,SAAS;AACjC,CAAC,EACL,EAAE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as Statement$1 from "effect/sql/Statement";
|
|
2
|
+
import { SqlClient } from "effect/sql/SqlClient";
|
|
3
|
+
//#region src/internal/sql-expression.d.ts
|
|
4
|
+
/** Pure mapped SQL. Compilation binds values through the executing client's
|
|
5
|
+
* dialect; expressions neither acquire a client nor execute a query. */
|
|
6
|
+
export declare class SqlExpression {
|
|
7
|
+
readonly compile: (client: SqlClient) => Statement$1.Fragment;
|
|
8
|
+
constructor(compile: (client: SqlClient) => Statement$1.Fragment);
|
|
9
|
+
}
|
|
10
|
+
declare const template: (parts: TemplateStringsArray, ...values: ReadonlyArray<unknown>) => SqlExpression;
|
|
11
|
+
export declare const sql: typeof template & {
|
|
12
|
+
join: (values: ReadonlyArray<unknown>, separator?: SqlExpression) => SqlExpression;
|
|
13
|
+
};
|
|
14
|
+
export declare const eq: (left: unknown, right: unknown) => SqlExpression;
|
|
15
|
+
export declare const and: (...expressions: ReadonlyArray<SqlExpression | undefined>) => SqlExpression | undefined;
|
|
16
|
+
//#endregion
|
|
17
|
+
//# sourceMappingURL=sql-expression.d.mts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PersistenceMappingError } from "./mapping-error.mjs";
|
|
2
|
+
import { Column, Table, identifier } from "./sql-table.mjs";
|
|
3
|
+
import * as Statement$1 from "effect/sql/Statement";
|
|
4
|
+
//#region src/internal/sql-expression.ts
|
|
5
|
+
/** Pure mapped SQL. Compilation binds values through the executing client's
|
|
6
|
+
* dialect; expressions neither acquire a client nor execute a query. */
|
|
7
|
+
var SqlExpression = class {
|
|
8
|
+
compile;
|
|
9
|
+
constructor(compile) {
|
|
10
|
+
this.compile = compile;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const quoted = (client, name) => {
|
|
14
|
+
if (name.includes("\0")) throw PersistenceMappingError.make({
|
|
15
|
+
operation: "mapping",
|
|
16
|
+
cause: "NUL in SQL identifier"
|
|
17
|
+
});
|
|
18
|
+
return client.literal(identifier(name));
|
|
19
|
+
};
|
|
20
|
+
const tableName = (client, name, schema) => schema === void 0 ? quoted(client, name) : client`${quoted(client, schema)}.${quoted(client, name)}`;
|
|
21
|
+
const value = (client, input) => {
|
|
22
|
+
if (Statement$1.isFragment(input)) return input;
|
|
23
|
+
if (input instanceof SqlExpression) return input.compile(client);
|
|
24
|
+
if (input instanceof Table) return tableName(client, input.name, input.schema);
|
|
25
|
+
if (input instanceof Column) return client`${tableName(client, input.tableName, input.schema)}.${quoted(client, input.options.name)}`;
|
|
26
|
+
return Statement$1.fragment([Statement$1.parameter(typeof input === "boolean" ? client.onDialectOrElse({
|
|
27
|
+
sqlite: () => Number(input),
|
|
28
|
+
orElse: () => input
|
|
29
|
+
}) : input)]);
|
|
30
|
+
};
|
|
31
|
+
/** Reject foreign expression handles at the metadata boundary. */
|
|
32
|
+
const compileSqlExpression = (client, expression) => {
|
|
33
|
+
if (!Statement$1.isFragment(expression) && !(expression instanceof SqlExpression) && !(expression instanceof Table) && !(expression instanceof Column)) throw PersistenceMappingError.make({
|
|
34
|
+
operation: "mapping",
|
|
35
|
+
cause: "Expected a SQL expression"
|
|
36
|
+
});
|
|
37
|
+
return value(client, expression);
|
|
38
|
+
};
|
|
39
|
+
const template = (parts, ...values) => new SqlExpression((client) => client.join("", false)(parts.flatMap((part, index) => index === 0 ? [client.literal(part)] : [value(client, values[index - 1]), client.literal(part)])));
|
|
40
|
+
const sql = Object.assign(template, { join: (values, separator = template``) => new SqlExpression((client) => client.join("", false)(values.flatMap((input, index) => index === 0 ? [value(client, input)] : [separator.compile(client), value(client, input)]))) });
|
|
41
|
+
const eq = (left, right) => sql`${left} = ${right}`;
|
|
42
|
+
const and = (...expressions) => {
|
|
43
|
+
const present = expressions.filter((expression) => expression !== void 0);
|
|
44
|
+
return present.length === 0 ? void 0 : sql`(${sql.join(present, sql` AND `)})`;
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { SqlExpression, and, compileSqlExpression, eq, sql };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=sql-expression.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-expression.mjs","names":["Statement"],"sources":["../../src/internal/sql-expression.ts"],"sourcesContent":["import type { SqlClient } from \"effect/sql/SqlClient\";\nimport * as Statement from \"effect/sql/Statement\";\n\nimport { PersistenceMappingError } from \"./mapping-error\";\nimport { Column, identifier, Table } from \"./sql-table\";\n\n/** Pure mapped SQL. Compilation binds values through the executing client's\n * dialect; expressions neither acquire a client nor execute a query. */\nexport class SqlExpression {\n constructor(readonly compile: (client: SqlClient) => Statement.Fragment) {}\n}\n\nconst quoted = (client: SqlClient, name: string) => {\n if (name.includes(\"\\0\"))\n throw PersistenceMappingError.make({ operation: \"mapping\", cause: \"NUL in SQL identifier\" });\n\n return client.literal(identifier(name));\n};\n\nconst tableName = (client: SqlClient, name: string, schema?: string) =>\n schema === undefined\n ? quoted(client, name)\n : client`${quoted(client, schema)}.${quoted(client, name)}`;\n\nconst value = (client: SqlClient, input: unknown): Statement.Fragment => {\n if (Statement.isFragment(input)) return input;\n if (input instanceof SqlExpression) return input.compile(client);\n if (input instanceof Table) return tableName(client, input.name, input.schema);\n if (input instanceof Column)\n return client`${tableName(client, input.tableName, input.schema)}.${quoted(client, input.options.name)}`;\n\n return Statement.fragment([\n Statement.parameter(\n typeof input === \"boolean\"\n ? client.onDialectOrElse({ sqlite: () => Number(input), orElse: () => input })\n : input,\n ),\n ]);\n};\n\n/** Reject foreign expression handles at the metadata boundary. */\nexport const compileSqlExpression = (\n client: SqlClient,\n expression: unknown,\n): Statement.Fragment => {\n if (\n !Statement.isFragment(expression) &&\n !(expression instanceof SqlExpression) &&\n !(expression instanceof Table) &&\n !(expression instanceof Column)\n )\n throw PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Expected a SQL expression\",\n });\n\n return value(client, expression);\n};\n\nconst template = (parts: TemplateStringsArray, ...values: ReadonlyArray<unknown>) =>\n new SqlExpression((client) =>\n client.join(\n \"\",\n false,\n )(\n parts.flatMap((part, index) =>\n index === 0\n ? [client.literal(part)]\n : [value(client, values[index - 1]), client.literal(part)],\n ),\n ),\n );\n\nexport const sql = Object.assign(template, {\n join: (values: ReadonlyArray<unknown>, separator: SqlExpression = template``) =>\n new SqlExpression((client) =>\n client.join(\n \"\",\n false,\n )(\n values.flatMap((input, index) =>\n index === 0 ? [value(client, input)] : [separator.compile(client), value(client, input)],\n ),\n ),\n ),\n});\n\nexport const eq = (left: unknown, right: unknown): SqlExpression => sql`${left} = ${right}`;\n\nexport const and = (...expressions: ReadonlyArray<SqlExpression | undefined>) => {\n const present = expressions.filter((expression) => expression !== undefined);\n\n return present.length === 0 ? undefined : sql`(${sql.join(present, sql` AND `)})`;\n};\n"],"mappings":";;;;;;AAQA,IAAa,gBAAb,MAA2B;CACJ;CAArB,YAAY,SAA6D;EAApD,KAAA,UAAA;CAAqD;AAC5E;AAEA,MAAM,UAAU,QAAmB,SAAiB;CAClD,IAAI,KAAK,SAAS,IAAI,GACpB,MAAM,wBAAwB,KAAK;EAAE,WAAW;EAAW,OAAO;CAAwB,CAAC;CAE7F,OAAO,OAAO,QAAQ,WAAW,IAAI,CAAC;AACxC;AAEA,MAAM,aAAa,QAAmB,MAAc,WAClD,WAAW,KAAA,IACP,OAAO,QAAQ,IAAI,IACnB,MAAM,GAAG,OAAO,QAAQ,MAAM,EAAE,GAAG,OAAO,QAAQ,IAAI;AAE5D,MAAM,SAAS,QAAmB,UAAuC;CACvE,IAAIA,YAAU,WAAW,KAAK,GAAG,OAAO;CACxC,IAAI,iBAAiB,eAAe,OAAO,MAAM,QAAQ,MAAM;CAC/D,IAAI,iBAAiB,OAAO,OAAO,UAAU,QAAQ,MAAM,MAAM,MAAM,MAAM;CAC7E,IAAI,iBAAiB,QACnB,OAAO,MAAM,GAAG,UAAU,QAAQ,MAAM,WAAW,MAAM,MAAM,EAAE,GAAG,OAAO,QAAQ,MAAM,QAAQ,IAAI;CAEvG,OAAOA,YAAU,SAAS,CACxBA,YAAU,UACR,OAAO,UAAU,YACb,OAAO,gBAAgB;EAAE,cAAc,OAAO,KAAK;EAAG,cAAc;CAAM,CAAC,IAC3E,KACN,CACF,CAAC;AACH;;AAGA,MAAa,wBACX,QACA,eACuB;CACvB,IACE,CAACA,YAAU,WAAW,UAAU,KAChC,EAAE,sBAAsB,kBACxB,EAAE,sBAAsB,UACxB,EAAE,sBAAsB,SAExB,MAAM,wBAAwB,KAAK;EACjC,WAAW;EACX,OAAO;CACT,CAAC;CAEH,OAAO,MAAM,QAAQ,UAAU;AACjC;AAEA,MAAM,YAAY,OAA6B,GAAG,WAChD,IAAI,eAAe,WACjB,OAAO,KACL,IACA,KACF,CAAC,CACC,MAAM,SAAS,MAAM,UACnB,UAAU,IACN,CAAC,OAAO,QAAQ,IAAI,CAAC,IACrB,CAAC,MAAM,QAAQ,OAAO,QAAQ,EAAE,GAAG,OAAO,QAAQ,IAAI,CAAC,CAC7D,CACF,CACF;AAEF,MAAa,MAAM,OAAO,OAAO,UAAU,EACzC,OAAO,QAAgC,YAA2B,QAAQ,OACxE,IAAI,eAAe,WACjB,OAAO,KACL,IACA,KACF,CAAC,CACC,OAAO,SAAS,OAAO,UACrB,UAAU,IAAI,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,MAAM,GAAG,MAAM,QAAQ,KAAK,CAAC,CACzF,CACF,CACF,EACJ,CAAC;AAED,MAAa,MAAM,MAAe,UAAkC,GAAG,GAAG,KAAK,KAAK;AAEpF,MAAa,OAAO,GAAG,gBAA0D;CAC/E,MAAM,UAAU,YAAY,QAAQ,eAAe,eAAe,KAAA,CAAS;CAE3E,OAAO,QAAQ,WAAW,IAAI,KAAA,IAAY,GAAG,IAAI,IAAI,KAAK,SAAS,GAAG,OAAO,EAAE;AACjF"}
|
|
@@ -1,29 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { SqlExpression } from "./sql-expression.mjs";
|
|
2
|
+
import { OAuthConnectedAction, OAuthConnectedGrantTable as OAuthConnectedGrantTable$1, OAuthConnectedMapping as OAuthConnectedMapping$1, OAuthConnectedPolicyInput, OAuthConnectedRevocationJobTable as OAuthConnectedRevocationJobTable$1, OAuthConnectedRevocationMapping as OAuthConnectedRevocationMapping$1, OAuthConnectedSqlPolicy as OAuthConnectedSqlPolicy$1, oauth_connected_model_d_exports, requiredOAuthConnectedConstraints, requiredOAuthConnectedRevocationConstraints } from "./models/oauth-connected-model.mjs";
|
|
3
|
+
import { Table } from "./sql-table.mjs";
|
|
3
4
|
import { SqlTableModel } from "./sql-oauth-model.mjs";
|
|
4
5
|
//#region src/internal/sql-oauth-connected-model.d.ts
|
|
5
|
-
export type OAuthConnectedSubjectTable<S extends Table> = OAuthConnectedSubjectTable$1<SqlTableModel<S>, Fragment>;
|
|
6
|
-
export type OAuthConnectedFlowTable<F extends Table, N> = OAuthConnectedFlowTable$1<SqlTableModel<F>, N>;
|
|
7
6
|
export type OAuthConnectedGrantTable<G extends Table, N> = OAuthConnectedGrantTable$1<SqlTableModel<G>, N>;
|
|
8
|
-
/** Also stores a permanent provider/issuer scope anchor. clientKey must fit 52
|
|
9
|
-
* ASCII characters. Empty clientRegistrationId is reserved for that anchor;
|
|
10
|
-
* actual profile registrations are nonempty. Scope counter stays zero. */
|
|
11
|
-
export type OAuthConnectedClientRegistrationTable<C extends Table> = OAuthConnectedClientRegistrationTable$1<SqlTableModel<C>>;
|
|
12
|
-
/** Remote authority: no local-subject column or subject-scoped key. Retain this
|
|
13
|
-
* anchor/cutoff when a legitimately released tuple gains a different local owner. */
|
|
14
|
-
export type OAuthConnectedCohortTable<C extends Table> = OAuthConnectedCohortTable$1<SqlTableModel<C>>;
|
|
15
|
-
export type OAuthConnectedAdmissionTable<A extends Table, N> = OAuthConnectedAdmissionTable$1<SqlTableModel<A>, N>;
|
|
16
|
-
export type OAuthConnectedCommandTable<C extends Table, N> = OAuthConnectedCommandTable$1<SqlTableModel<C>, N>;
|
|
17
7
|
export type OAuthConnectedRevocationJobTable<J extends Table, N> = OAuthConnectedRevocationJobTable$1<SqlTableModel<J>, N>;
|
|
18
|
-
export type
|
|
19
|
-
export type
|
|
20
|
-
export
|
|
21
|
-
export type OAuthConnectedSqlPolicy<N> = OAuthConnectedSqlPolicy$1<N, Fragment, Table>;
|
|
22
|
-
/** Existing ownership only; workers never allocate or acquire a tuple. */
|
|
23
|
-
export type OAuthConnectedOwnershipRead<T extends Table, O extends Table, N> = OAuthConnectedOwnershipRead$1<SqlTableModel<T>, SqlTableModel<O>, N, Fragment>;
|
|
24
|
-
export type OAuthConnectedAuthorityMapping<T extends Table, O extends Table, F extends Table, G extends Table, C extends Table, H extends Table, N> = OAuthConnectedAuthorityMapping$1<SqlTableModel<T>, SqlTableModel<O>, SqlTableModel<F>, SqlTableModel<G>, SqlTableModel<C>, SqlTableModel<H>, N, Fragment>;
|
|
25
|
-
export type OAuthConnectedMapping<S extends Table, AC extends Table, T extends Table, O extends Table, F extends Table, G extends Table, C extends Table, H extends Table, A extends Table, D extends Table, N, J extends Table = never> = OAuthConnectedMapping$1<SqlTableModel<S>, SqlTableModel<AC>, SqlTableModel<T>, SqlTableModel<O>, SqlTableModel<F>, SqlTableModel<G>, SqlTableModel<C>, SqlTableModel<H>, SqlTableModel<A>, SqlTableModel<D>, N, SqlTableModel<J>, Fragment, Table, SqlTableModel<Table>>;
|
|
26
|
-
export type OAuthConnectedRevocationMapping<T extends Table, O extends Table, F extends Table, G extends Table, C extends Table, H extends Table, J extends Table, N> = OAuthConnectedRevocationMapping$1<SqlTableModel<T>, SqlTableModel<O>, SqlTableModel<F>, SqlTableModel<G>, SqlTableModel<C>, SqlTableModel<H>, SqlTableModel<J>, N, Fragment>;
|
|
8
|
+
export type OAuthConnectedSqlPolicy<N> = OAuthConnectedSqlPolicy$1<N, SqlExpression>;
|
|
9
|
+
export type OAuthConnectedMapping<S extends Table, AC extends Table, O extends Table, F extends Table, G extends Table, N, J extends Table = Table> = OAuthConnectedMapping$1<SqlTableModel<S>, SqlTableModel<AC>, SqlTableModel<O>, SqlTableModel<F>, SqlTableModel<G>, N, SqlTableModel<J>, SqlExpression, SqlTableModel>;
|
|
10
|
+
export type OAuthConnectedRevocationMapping<O extends Table, G extends Table, J extends Table, N> = OAuthConnectedRevocationMapping$1<SqlTableModel<O>, SqlTableModel<G>, SqlTableModel<J>, N, SqlExpression>;
|
|
27
11
|
//#endregion
|
|
28
|
-
export { type OAuthConnectedAction, type
|
|
12
|
+
export { type OAuthConnectedAction, type OAuthConnectedPolicyInput, requiredOAuthConnectedConstraints, requiredOAuthConnectedRevocationConstraints };
|
|
29
13
|
//# sourceMappingURL=sql-oauth-connected-model.d.mts.map
|
|
@@ -1,60 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { SqlExpression } from "./sql-expression.mjs";
|
|
2
|
+
import { TableModel } from "./table-model.mjs";
|
|
3
|
+
import { OAuthAccountsMapping as OAuthAccountsMapping$1, OAuthAction, OAuthAuthorityReadTable as OAuthAuthorityReadTable$1, OAuthAuthorityTable as OAuthAuthorityTable$1, OAuthCleanupDescriptor as OAuthCleanupDescriptor$1, OAuthCleanupTable as OAuthCleanupTable$1, OAuthClock as OAuthClock$1, OAuthCredentialReadTable as OAuthCredentialReadTable$1, OAuthCredentialTable as OAuthCredentialTable$1, OAuthD1Mapping, OAuthEligibilityDescriptor as OAuthEligibilityDescriptor$1, OAuthEligibilityFact, OAuthEligibilityTable as OAuthEligibilityTable$1, OAuthFlowTable as OAuthFlowTable$1, OAuthOwnershipReadTable as OAuthOwnershipReadTable$1, OAuthOwnershipTable as OAuthOwnershipTable$1, OAuthRegistrationAuthority, OAuthRegistrationGuardDescriptor as OAuthRegistrationGuardDescriptor$1, OAuthRegistrationGuardTable as OAuthRegistrationGuardTable$1, OAuthRegistrationIntentMapping as OAuthRegistrationIntentMapping$1, OAuthRegistrationIntentTable as OAuthRegistrationIntentTable$1, OAuthRegistrationMapping as OAuthRegistrationMapping$1, OAuthSignInMapping as OAuthSignInMapping$1, OAuthSubjectReadTable as OAuthSubjectReadTable$1, OAuthSubjectTable as OAuthSubjectTable$1, oauth_model_d_exports, requiredOAuthRegistrationConstraints, requiredOAuthSignInConstraints } from "./models/oauth-model.mjs";
|
|
4
|
+
import { Table } from "./sql-table.mjs";
|
|
4
5
|
//#region src/internal/sql-oauth-model.d.ts
|
|
5
6
|
export interface SqlTableModel<T extends Table = Table> extends TableModel {
|
|
6
7
|
readonly table: T;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export type
|
|
11
|
-
export type
|
|
12
|
-
export type
|
|
13
|
-
export type
|
|
14
|
-
export type
|
|
15
|
-
export type
|
|
16
|
-
export type
|
|
17
|
-
export type OAuthAuthorityReadTable<C extends Table> = OAuthAuthorityReadTable$1<SqlTableModel<C>, Fragment>;
|
|
18
|
-
export type OAuthAuthorityTable<C extends Table, N> = OAuthAuthorityTable$1<SqlTableModel<C>, N, Fragment>;
|
|
19
|
-
/** Both purposes may use the same physical table. Shared tables share module/flow
|
|
20
|
-
* and module/command uniqueness. The snapshot has the exact purpose-specific core
|
|
21
|
-
* codec; terminal writes erase it, while identity, claim and retention columns remain. */
|
|
9
|
+
export type OAuthClock = OAuthClock$1<SqlExpression>;
|
|
10
|
+
export type OAuthSubjectReadTable<S extends Table> = OAuthSubjectReadTable$1<SqlTableModel<S>, SqlExpression>;
|
|
11
|
+
export type OAuthSubjectTable<S extends Table> = OAuthSubjectTable$1<SqlTableModel<S>, SqlExpression>;
|
|
12
|
+
export type OAuthOwnershipReadTable<O extends Table, N> = OAuthOwnershipReadTable$1<SqlTableModel<O>, N>;
|
|
13
|
+
export type OAuthOwnershipTable<O extends Table, N> = OAuthOwnershipTable$1<SqlTableModel<O>, N>;
|
|
14
|
+
export type OAuthCredentialReadTable<C extends Table> = OAuthCredentialReadTable$1<SqlTableModel<C>, SqlExpression>;
|
|
15
|
+
export type OAuthCredentialTable<C extends Table, N> = OAuthCredentialTable$1<SqlTableModel<C>, N, SqlExpression>;
|
|
16
|
+
export type OAuthAuthorityReadTable<C extends Table> = OAuthAuthorityReadTable$1<SqlTableModel<C>, SqlExpression>;
|
|
17
|
+
export type OAuthAuthorityTable<C extends Table, N> = OAuthAuthorityTable$1<SqlTableModel<C>, N, SqlExpression>;
|
|
22
18
|
export type OAuthFlowTable<F extends Table> = OAuthFlowTable$1<SqlTableModel<F>>;
|
|
23
|
-
export type OAuthTupleAuthorityTable<T extends Table, N> = OAuthTupleAuthorityTable$1<SqlTableModel<T>, N>;
|
|
24
19
|
export type OAuthRegistrationIntentTable<I extends Table> = OAuthRegistrationIntentTable$1<SqlTableModel<I>>;
|
|
25
|
-
export type
|
|
26
|
-
export type
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export type
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
export
|
|
36
|
-
export
|
|
37
|
-
export
|
|
38
|
-
export type OAuthSignInMapping<S extends Table, O extends Table, C extends Table, AC extends Table, F extends Table, N> = OAuthSignInMapping$1<SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<F>, N, Fragment>;
|
|
39
|
-
export type OAuthOwnershipMutation<T extends Table, O extends Table, N> = OAuthOwnershipMutation$1<SqlTableModel<T>, SqlTableModel<O>, N, Fragment>;
|
|
40
|
-
export type OAuthRegistrationIntentMapping<S extends Table, O extends Table, C extends Table, AC extends Table, F extends Table, T extends Table, I extends Table, N> = OAuthRegistrationIntentMapping$1<SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<F>, SqlTableModel<T>, SqlTableModel<I>, N, Fragment>;
|
|
41
|
-
export type OAuthRegistrationBase<Registration, T extends Table, O extends Table, I extends Table, R extends Table, N> = OAuthRegistrationBase$1<Registration, SqlTableModel<T>, SqlTableModel<O>, SqlTableModel<I>, SqlTableModel<R>, N, Fragment, Table>;
|
|
42
|
-
export type OAuthRegistrationGuardTable<T extends Table, Registration, N> = OAuthRegistrationGuardTable$1<SqlTableModel<T>, Registration, N, Fragment>;
|
|
43
|
-
export type OAuthRegistrationGuardDescriptor<Registration, N> = OAuthRegistrationGuardDescriptor$1<Registration, N, Fragment, Table>;
|
|
44
|
-
export declare const oauthRegistrationGuardTable: <T extends Table, Registration, N>(input: OAuthRegistrationGuardTable<T, Registration, N>) => OAuthRegistrationGuardDescriptor<Registration, N>;
|
|
45
|
-
export type OAuthRegistrationMapping<Registration, S extends Table, O extends Table, C extends Table, AC extends Table, T extends Table, I extends Table, R extends Table, N> = OAuthRegistrationMapping$1<Registration, SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<T>, SqlTableModel<I>, SqlTableModel<R>, N, Fragment, Table>;
|
|
46
|
-
/** Heterogeneous descriptors are made by typed factories and projected privately. */
|
|
47
|
-
export type OAuthEligibilityDescriptor<N> = OAuthEligibilityDescriptor$1<N, Fragment, Table>;
|
|
48
|
-
export declare const oauthEligibilityTable: <T extends Table, N>(input: OAuthEligibilityTable<T, N>) => OAuthEligibilityDescriptor<N>;
|
|
49
|
-
export type OAuthCleanupDescriptor<N> = OAuthCleanupDescriptor$1<N, Fragment, Table>;
|
|
50
|
-
export declare const oauthCleanupTable: <T extends Table, N>(input: OAuthCleanupTable<T, N>) => OAuthCleanupDescriptor<N>;
|
|
51
|
-
/** A stable application/reference lock acquired before an ownership target.
|
|
52
|
-
* Missing rows retain ownership. Conditions use detached native IDs; every
|
|
53
|
-
* writer of the guarded reference follows the same order. */
|
|
54
|
-
export type OAuthReferenceGuardTable<T extends Table, N> = OAuthReferenceGuardTable$1<SqlTableModel<T>, N, Fragment>;
|
|
55
|
-
export type OAuthReferenceGuardDescriptor<N> = OAuthReferenceGuardDescriptor$1<N, Fragment, Table>;
|
|
56
|
-
export declare const oauthReferenceGuardTable: <T extends Table, N>(input: OAuthReferenceGuardTable<T, N>) => OAuthReferenceGuardDescriptor<N>;
|
|
57
|
-
export type OAuthAccountsMapping<S extends Table, O extends Table, C extends Table, AC extends Table, F extends Table, T extends Table, U extends Table, N> = OAuthAccountsMapping$1<SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<F>, SqlTableModel<T>, SqlTableModel<U>, N, Fragment, Table>;
|
|
20
|
+
export type OAuthEligibilityTable<T extends Table, N> = OAuthEligibilityTable$1<SqlTableModel<T>, N, SqlExpression>;
|
|
21
|
+
export type OAuthCleanupTable<T extends Table, N> = OAuthCleanupTable$1<SqlTableModel<T>, N, SqlExpression>;
|
|
22
|
+
export type OAuthRegistrationGuardTable<T extends Table, Registration, N> = OAuthRegistrationGuardTable$1<SqlTableModel<T>, Registration, N, SqlExpression>;
|
|
23
|
+
export type OAuthRegistrationGuardDescriptor<Registration, N> = OAuthRegistrationGuardDescriptor$1<Registration, N, SqlExpression, Table>;
|
|
24
|
+
export type OAuthEligibilityDescriptor<N> = OAuthEligibilityDescriptor$1<N, SqlExpression, Table>;
|
|
25
|
+
export type OAuthCleanupDescriptor<N> = OAuthCleanupDescriptor$1<N, SqlExpression, Table>;
|
|
26
|
+
export type OAuthSignInMapping<S extends Table, O extends Table, C extends Table, AC extends Table, F extends Table, N> = OAuthSignInMapping$1<SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<F>, N, SqlExpression>;
|
|
27
|
+
export type OAuthAccountsMapping<S extends Table, O extends Table, C extends Table, AC extends Table, F extends Table, N> = OAuthAccountsMapping$1<SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<F>, N, SqlExpression, Table>;
|
|
28
|
+
export type OAuthRegistrationIntentMapping<O extends Table, I extends Table, N> = OAuthRegistrationIntentMapping$1<SqlTableModel<O>, SqlTableModel<I>, N, SqlExpression>;
|
|
29
|
+
export type OAuthRegistrationMapping<Registration, S extends Table, O extends Table, C extends Table, AC extends Table, I extends Table, N> = OAuthRegistrationMapping$1<Registration, SqlTableModel<S>, SqlTableModel<O>, SqlTableModel<C>, SqlTableModel<AC>, SqlTableModel<I>, N, SqlExpression, Table>;
|
|
30
|
+
export declare const oauthEligibilityTable: <T extends Table, N>(input: OAuthEligibilityTable<T, N>) => OAuthEligibilityDescriptor$1<N, SqlExpression, T>;
|
|
31
|
+
export declare const oauthCleanupTable: <T extends Table, N>(input: OAuthCleanupTable<T, N>) => OAuthCleanupDescriptor$1<N, SqlExpression, T>;
|
|
32
|
+
export declare const oauthRegistrationGuardTable: <T extends Table, Registration, N>(input: OAuthRegistrationGuardTable<T, Registration, N>) => OAuthRegistrationGuardDescriptor$1<Registration, N, SqlExpression, T>;
|
|
58
33
|
//#endregion
|
|
59
|
-
export { type OAuthAction, type OAuthD1Mapping, type OAuthEligibilityFact, type
|
|
34
|
+
export { type OAuthAction, type OAuthD1Mapping, type OAuthEligibilityFact, type OAuthRegistrationAuthority, requiredOAuthRegistrationConstraints, requiredOAuthSignInConstraints };
|
|
60
35
|
//# sourceMappingURL=sql-oauth-model.d.mts.map
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { oauthCleanupTable as oauthCleanupTable$1, oauthEligibilityTable as oauthEligibilityTable$1,
|
|
1
|
+
import { oauthCleanupTable as oauthCleanupTable$1, oauthEligibilityTable as oauthEligibilityTable$1, oauthRegistrationGuardTable as oauthRegistrationGuardTable$1, requiredOAuthRegistrationConstraints, requiredOAuthSignInConstraints } from "./models/oauth-model.mjs";
|
|
2
2
|
//#region src/internal/sql-oauth-model.ts
|
|
3
|
-
const oauthRegistrationGuardTable = (input) => oauthRegistrationGuardTable$1(input);
|
|
4
3
|
const oauthEligibilityTable = (input) => oauthEligibilityTable$1(input);
|
|
5
4
|
const oauthCleanupTable = (input) => oauthCleanupTable$1(input);
|
|
6
|
-
const
|
|
5
|
+
const oauthRegistrationGuardTable = (input) => oauthRegistrationGuardTable$1(input);
|
|
7
6
|
//#endregion
|
|
8
|
-
export { oauthCleanupTable, oauthEligibilityTable,
|
|
7
|
+
export { oauthCleanupTable, oauthEligibilityTable, oauthRegistrationGuardTable, requiredOAuthRegistrationConstraints, requiredOAuthSignInConstraints };
|
|
9
8
|
|
|
10
9
|
//# sourceMappingURL=sql-oauth-model.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-oauth-model.mjs","names":["Shared.
|
|
1
|
+
{"version":3,"file":"sql-oauth-model.mjs","names":["Shared.oauthEligibilityTable","Shared.oauthCleanupTable","Shared.oauthRegistrationGuardTable"],"sources":["../../src/internal/sql-oauth-model.ts"],"sourcesContent":["import * as Shared from \"./models/oauth-model\";\nimport type { SqlExpression as SQL } from \"./sql-expression\";\nimport type { Table } from \"./sql-table\";\nimport type { TableModel } from \"./table-model\";\n\nexport interface SqlTableModel<T extends Table = Table> extends TableModel {\n readonly table: T;\n}\n\nexport {\n type OAuthAction,\n type OAuthEligibilityFact,\n type OAuthD1Mapping,\n type OAuthRegistrationAuthority,\n requiredOAuthSignInConstraints,\n requiredOAuthRegistrationConstraints,\n} from \"./models/oauth-model\";\n\nexport type OAuthClock = Shared.OAuthClock<SQL>;\n\nexport type OAuthSubjectReadTable<S extends Table> = Shared.OAuthSubjectReadTable<\n SqlTableModel<S>,\n SQL\n>;\n\nexport type OAuthSubjectTable<S extends Table> = Shared.OAuthSubjectTable<SqlTableModel<S>, SQL>;\n\nexport type OAuthOwnershipReadTable<O extends Table, N> = Shared.OAuthOwnershipReadTable<\n SqlTableModel<O>,\n N\n>;\n\nexport type OAuthOwnershipTable<O extends Table, N> = Shared.OAuthOwnershipTable<\n SqlTableModel<O>,\n N\n>;\n\nexport type OAuthCredentialReadTable<C extends Table> = Shared.OAuthCredentialReadTable<\n SqlTableModel<C>,\n SQL\n>;\n\nexport type OAuthCredentialTable<C extends Table, N> = Shared.OAuthCredentialTable<\n SqlTableModel<C>,\n N,\n SQL\n>;\n\nexport type OAuthAuthorityReadTable<C extends Table> = Shared.OAuthAuthorityReadTable<\n SqlTableModel<C>,\n SQL\n>;\n\nexport type OAuthAuthorityTable<C extends Table, N> = Shared.OAuthAuthorityTable<\n SqlTableModel<C>,\n N,\n SQL\n>;\n\nexport type OAuthFlowTable<F extends Table> = Shared.OAuthFlowTable<SqlTableModel<F>>;\n\nexport type OAuthRegistrationIntentTable<I extends Table> = Shared.OAuthRegistrationIntentTable<\n SqlTableModel<I>\n>;\n\nexport type OAuthEligibilityTable<T extends Table, N> = Shared.OAuthEligibilityTable<\n SqlTableModel<T>,\n N,\n SQL\n>;\n\nexport type OAuthCleanupTable<T extends Table, N> = Shared.OAuthCleanupTable<\n SqlTableModel<T>,\n N,\n SQL\n>;\n\nexport type OAuthRegistrationGuardTable<\n T extends Table,\n Registration,\n N,\n> = Shared.OAuthRegistrationGuardTable<SqlTableModel<T>, Registration, N, SQL>;\n\nexport type OAuthRegistrationGuardDescriptor<Registration, N> =\n Shared.OAuthRegistrationGuardDescriptor<Registration, N, SQL, Table>;\n\nexport type OAuthEligibilityDescriptor<N> = Shared.OAuthEligibilityDescriptor<N, SQL, Table>;\n\nexport type OAuthCleanupDescriptor<N> = Shared.OAuthCleanupDescriptor<N, SQL, Table>;\n\nexport type OAuthSignInMapping<\n S extends Table,\n O extends Table,\n C extends Table,\n AC extends Table,\n F extends Table,\n N,\n> = Shared.OAuthSignInMapping<\n SqlTableModel<S>,\n SqlTableModel<O>,\n SqlTableModel<C>,\n SqlTableModel<AC>,\n SqlTableModel<F>,\n N,\n SQL\n>;\n\nexport type OAuthAccountsMapping<\n S extends Table,\n O extends Table,\n C extends Table,\n AC extends Table,\n F extends Table,\n N,\n> = Shared.OAuthAccountsMapping<\n SqlTableModel<S>,\n SqlTableModel<O>,\n SqlTableModel<C>,\n SqlTableModel<AC>,\n SqlTableModel<F>,\n N,\n SQL,\n Table\n>;\n\nexport type OAuthRegistrationIntentMapping<\n O extends Table,\n I extends Table,\n N,\n> = Shared.OAuthRegistrationIntentMapping<SqlTableModel<O>, SqlTableModel<I>, N, SQL>;\n\nexport type OAuthRegistrationMapping<\n Registration,\n S extends Table,\n O extends Table,\n C extends Table,\n AC extends Table,\n I extends Table,\n N,\n> = Shared.OAuthRegistrationMapping<\n Registration,\n SqlTableModel<S>,\n SqlTableModel<O>,\n SqlTableModel<C>,\n SqlTableModel<AC>,\n SqlTableModel<I>,\n N,\n SQL,\n Table\n>;\n\nexport const oauthEligibilityTable = <T extends Table, N>(input: OAuthEligibilityTable<T, N>) =>\n Shared.oauthEligibilityTable<SqlTableModel<T>, N, SQL>(input);\n\nexport const oauthCleanupTable = <T extends Table, N>(input: OAuthCleanupTable<T, N>) =>\n Shared.oauthCleanupTable<SqlTableModel<T>, N, SQL>(input);\n\nexport const oauthRegistrationGuardTable = <T extends Table, Registration, N>(\n input: OAuthRegistrationGuardTable<T, Registration, N>,\n) => Shared.oauthRegistrationGuardTable<SqlTableModel<T>, Registration, N, SQL>(input);\n"],"mappings":";;AAuJA,MAAa,yBAA6C,UACxDA,wBAAuD,KAAK;AAE9D,MAAa,qBAAyC,UACpDC,oBAAmD,KAAK;AAE1D,MAAa,+BACX,UACGC,8BAA2E,KAAK"}
|