@yielded/auth-persistence 0.1.0-beta.24 → 0.1.0-beta.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -8
- package/dist/Adapter.d.mts +47 -33
- package/dist/Adapter.mjs +36 -23
- package/dist/OAuthPersistence.d.mts +35 -51
- package/dist/OAuthPersistence.mjs +60 -68
- package/dist/OAuthPersistence.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/internal/browser-login.d.mts +1 -1
- package/dist/internal/browser-login.mjs +29 -9
- package/dist/internal/browser-login.mjs.map +1 -1
- package/dist/internal/configuration.d.mts +13 -8
- package/dist/internal/configuration.mjs.map +1 -1
- package/dist/internal/crypto.d.mts +1 -0
- package/dist/internal/crypto.mjs +1 -1
- package/dist/internal/d1-planning.mjs +8 -0
- package/dist/internal/d1-planning.mjs.map +1 -0
- package/dist/internal/email-native-state.mjs +135 -0
- package/dist/internal/email-native-state.mjs.map +1 -0
- package/dist/internal/email-native.d.mts +17 -0
- package/dist/internal/email-native.mjs +245 -0
- package/dist/internal/email-native.mjs.map +1 -0
- package/dist/internal/email-policy.mjs +92 -0
- package/dist/internal/email-policy.mjs.map +1 -0
- package/dist/internal/email-registration-native.d.mts +38 -0
- package/dist/internal/email-registration-native.mjs +171 -0
- package/dist/internal/email-registration-native.mjs.map +1 -0
- package/dist/internal/models/email-model.d.mts +40 -104
- package/dist/internal/models/email-model.mjs +3 -5
- package/dist/internal/models/email-model.mjs.map +1 -1
- package/dist/internal/models/oauth-connected-model.d.mts +44 -213
- package/dist/internal/models/oauth-connected-model.mjs +6 -14
- package/dist/internal/models/oauth-connected-model.mjs.map +1 -1
- package/dist/internal/models/oauth-model.d.mts +95 -244
- package/dist/internal/models/oauth-model.mjs +28 -22
- package/dist/internal/models/oauth-model.mjs.map +1 -1
- package/dist/internal/models/passkey-model.d.mts +11 -147
- package/dist/internal/models/passkey-model.mjs +5 -24
- package/dist/internal/models/passkey-model.mjs.map +1 -1
- package/dist/internal/models/passkey-registration-ceremony-model.d.mts +5 -39
- package/dist/internal/models/passkey-write-model.d.mts +17 -75
- package/dist/internal/models/passkey-write-model.mjs +1 -7
- package/dist/internal/models/passkey-write-model.mjs.map +1 -1
- package/dist/internal/models/password-model.d.mts +16 -82
- package/dist/internal/models/password-model.mjs +1 -4
- package/dist/internal/models/password-model.mjs.map +1 -1
- package/dist/internal/models/phone-model.d.mts +86 -0
- package/dist/internal/models/phone-model.mjs +10 -0
- package/dist/internal/models/phone-model.mjs.map +1 -0
- package/dist/internal/models/proof-model.d.mts +43 -272
- package/dist/internal/models/proof-model.mjs +2 -10
- package/dist/internal/models/proof-model.mjs.map +1 -1
- package/dist/internal/models/session-model.d.mts +74 -93
- package/dist/internal/models/session-model.mjs +3 -11
- package/dist/internal/models/session-model.mjs.map +1 -1
- package/dist/internal/models/step-up-model.d.mts +12 -50
- package/dist/internal/models/step-up-model.mjs +2 -4
- package/dist/internal/models/step-up-model.mjs.map +1 -1
- package/dist/internal/models/totp-model.d.mts +76 -0
- package/dist/internal/models/totp-model.mjs +10 -0
- package/dist/internal/models/totp-model.mjs.map +1 -0
- package/dist/internal/native-sql-table.d.mts +21 -4
- package/dist/internal/native-sql-table.mjs +9 -5
- package/dist/internal/native-sql-table.mjs.map +1 -1
- package/dist/internal/oauth/native-accounts.d.mts +17 -0
- package/dist/internal/oauth/native-accounts.mjs +290 -0
- package/dist/internal/oauth/native-accounts.mjs.map +1 -0
- package/dist/internal/oauth/native-connected-state.d.mts +11 -0
- package/dist/internal/oauth/native-connected-state.mjs +146 -0
- package/dist/internal/oauth/native-connected-state.mjs.map +1 -0
- package/dist/internal/oauth/native-connected.d.mts +15 -0
- package/dist/internal/oauth/native-connected.mjs +462 -0
- package/dist/internal/oauth/native-connected.mjs.map +1 -0
- package/dist/internal/oauth/native-flow.mjs +138 -0
- package/dist/internal/oauth/native-flow.mjs.map +1 -0
- package/dist/internal/oauth/native-layers.d.mts +24 -0
- package/dist/internal/oauth/native-layers.mjs +13 -0
- package/dist/internal/oauth/native-layers.mjs.map +1 -0
- package/dist/internal/oauth/native-mutation.mjs +122 -0
- package/dist/internal/oauth/native-mutation.mjs.map +1 -0
- package/dist/internal/oauth/native-registration.d.mts +24 -0
- package/dist/internal/oauth/native-registration.mjs +328 -0
- package/dist/internal/oauth/native-registration.mjs.map +1 -0
- package/dist/internal/oauth/native-revocations.d.mts +17 -0
- package/dist/internal/oauth/native-revocations.mjs +106 -0
- package/dist/internal/oauth/native-revocations.mjs.map +1 -0
- package/dist/internal/oauth/native-sign-in.d.mts +17 -0
- package/dist/internal/oauth/native-sign-in.mjs +50 -0
- package/dist/internal/oauth/native-sign-in.mjs.map +1 -0
- package/dist/internal/oauth/native-state.d.mts +10 -0
- package/dist/internal/oauth/native-state.mjs +214 -0
- package/dist/internal/oauth/native-state.mjs.map +1 -0
- package/dist/internal/oauth/state.d.mts +10 -0
- package/dist/internal/oauth/state.mjs +3 -27
- package/dist/internal/oauth/state.mjs.map +1 -1
- package/dist/internal/passkey-actions.mjs +55 -0
- package/dist/internal/passkey-actions.mjs.map +1 -0
- package/dist/internal/passkey-inputs.mjs +73 -0
- package/dist/internal/passkey-inputs.mjs.map +1 -0
- package/dist/internal/passkey-managed.mjs +224 -0
- package/dist/internal/passkey-managed.mjs.map +1 -0
- package/dist/internal/passkey-native-ceremony.d.mts +35 -0
- package/dist/internal/passkey-native-ceremony.mjs +38 -0
- package/dist/internal/passkey-native-ceremony.mjs.map +1 -0
- package/dist/internal/passkey-native-flow.mjs +91 -0
- package/dist/internal/passkey-native-flow.mjs.map +1 -0
- package/dist/internal/passkey-native-registration.d.mts +10 -0
- package/dist/internal/passkey-native-registration.mjs +114 -0
- package/dist/internal/passkey-native-registration.mjs.map +1 -0
- package/dist/internal/passkey-native-state.d.mts +15 -0
- package/dist/internal/passkey-native-state.mjs +186 -0
- package/dist/internal/passkey-native-state.mjs.map +1 -0
- package/dist/internal/passkey-native-write.d.mts +82 -0
- package/dist/internal/passkey-native-write.mjs +330 -0
- package/dist/internal/passkey-native-write.mjs.map +1 -0
- package/dist/internal/passkey-native.d.mts +835 -0
- package/dist/internal/passkey-native.mjs +175 -0
- package/dist/internal/passkey-native.mjs.map +1 -0
- package/dist/internal/passkey-policy.mjs +115 -0
- package/dist/internal/passkey-policy.mjs.map +1 -0
- package/dist/internal/password-credentials.mjs +38 -9
- package/dist/internal/password-credentials.mjs.map +1 -1
- package/dist/internal/password-native.d.mts +14 -0
- package/dist/internal/password-native.mjs +292 -0
- package/dist/internal/password-native.mjs.map +1 -0
- package/dist/internal/password-policy.mjs +93 -0
- package/dist/internal/password-policy.mjs.map +1 -0
- package/dist/internal/password-registration-native.d.mts +22 -0
- package/dist/internal/password-registration-native.mjs +142 -0
- package/dist/internal/password-registration-native.mjs.map +1 -0
- package/dist/internal/persistence.d.mts +6 -19
- package/dist/internal/persistence.mjs +199 -166
- package/dist/internal/persistence.mjs.map +1 -1
- package/dist/internal/phone-composed.mjs +79 -0
- package/dist/internal/phone-composed.mjs.map +1 -0
- package/dist/internal/phone-native.d.mts +15 -0
- package/dist/internal/phone-native.mjs +354 -0
- package/dist/internal/phone-native.mjs.map +1 -0
- package/dist/internal/proof-native.d.mts +15 -0
- package/dist/internal/proof-native.mjs +289 -0
- package/dist/internal/proof-native.mjs.map +1 -0
- package/dist/internal/registration.mjs +50 -60
- package/dist/internal/registration.mjs.map +1 -1
- package/dist/internal/session-native-authority.d.mts +15 -0
- package/dist/internal/session-native-authority.mjs +91 -0
- package/dist/internal/session-native-authority.mjs.map +1 -0
- package/dist/internal/session-native-cleanup.d.mts +14 -0
- package/dist/internal/session-native-cleanup.mjs +48 -0
- package/dist/internal/session-native-cleanup.mjs.map +1 -0
- package/dist/internal/session-native-login.d.mts +15 -0
- package/dist/internal/session-native-login.mjs +87 -0
- package/dist/internal/session-native-login.mjs.map +1 -0
- package/dist/internal/session-native-pending-read.mjs +42 -0
- package/dist/internal/session-native-pending-read.mjs.map +1 -0
- package/dist/internal/session-native-pending.mjs +134 -0
- package/dist/internal/session-native-pending.mjs.map +1 -0
- package/dist/internal/session-native-record.mjs +79 -0
- package/dist/internal/session-native-record.mjs.map +1 -0
- package/dist/internal/session-native-state.mjs +130 -0
- package/dist/internal/session-native-state.mjs.map +1 -0
- package/dist/internal/session-native-stateful.d.mts +16 -0
- package/dist/internal/session-native-stateful.mjs +225 -0
- package/dist/internal/session-native-stateful.mjs.map +1 -0
- package/dist/internal/session-native-step-up.d.mts +15 -0
- package/dist/internal/session-native-step-up.mjs +212 -0
- package/dist/internal/session-native-step-up.mjs.map +1 -0
- package/dist/internal/session-native-validity.d.mts +15 -0
- package/dist/internal/session-native-validity.mjs +97 -0
- package/dist/internal/session-native-validity.mjs.map +1 -0
- package/dist/internal/session-policy.mjs +29 -0
- package/dist/internal/session-policy.mjs.map +1 -0
- package/dist/internal/sql-authority.d.mts +16 -0
- package/dist/internal/sql-authority.mjs +32 -0
- package/dist/internal/sql-authority.mjs.map +1 -0
- package/dist/internal/sql-change.mjs +21 -0
- package/dist/internal/sql-change.mjs.map +1 -0
- package/dist/internal/sql-cleanup.mjs +35 -0
- package/dist/internal/sql-cleanup.mjs.map +1 -0
- package/dist/internal/sql-commit.d.mts +72 -0
- package/dist/internal/sql-commit.mjs +176 -0
- package/dist/internal/sql-commit.mjs.map +1 -0
- package/dist/internal/sql-expression.d.mts +17 -0
- package/dist/internal/sql-expression.mjs +49 -0
- package/dist/internal/sql-expression.mjs.map +1 -0
- package/dist/internal/sql-oauth-connected-model.d.mts +7 -23
- package/dist/internal/sql-oauth-model.d.mts +27 -52
- package/dist/internal/sql-oauth-model.mjs +3 -4
- package/dist/internal/sql-oauth-model.mjs.map +1 -1
- package/dist/internal/sql-persistence.mjs +5 -9
- package/dist/internal/sql-persistence.mjs.map +1 -1
- package/dist/internal/sql-storage-validation.mjs +1 -2
- package/dist/internal/sql-storage-validation.mjs.map +1 -1
- package/dist/internal/sql-table.d.mts +3 -16
- package/dist/internal/sql-table.mjs +21 -42
- package/dist/internal/sql-table.mjs.map +1 -1
- package/dist/internal/standalone.mjs +2 -3
- package/dist/internal/standalone.mjs.map +1 -1
- package/dist/internal/step-up-state.mjs +5 -8
- package/dist/internal/step-up-state.mjs.map +1 -1
- package/dist/internal/storage-clock.mjs +44 -0
- package/dist/internal/storage-clock.mjs.map +1 -0
- package/dist/internal/storage-mapping.d.mts +11 -8
- package/dist/internal/storage-mapping.mjs +88 -302
- package/dist/internal/storage-mapping.mjs.map +1 -1
- package/dist/internal/storage-plans.mjs +15 -73
- package/dist/internal/storage-plans.mjs.map +1 -1
- package/dist/internal/storage-tables.d.mts +37 -520
- package/dist/internal/storage-tables.mjs +31 -211
- package/dist/internal/storage-tables.mjs.map +1 -1
- package/dist/internal/storage-validation.d.mts +1 -6
- package/dist/internal/storage-validation.mjs +1 -42
- package/dist/internal/storage-validation.mjs.map +1 -1
- package/dist/internal/table-model.d.mts +21 -0
- package/dist/internal/totp-native.d.mts +15 -0
- package/dist/internal/totp-native.mjs +401 -0
- package/dist/internal/totp-native.mjs.map +1 -0
- package/package.json +1 -1
- package/src/Adapter.ts +143 -199
- package/src/OAuthPersistence.ts +128 -271
- package/src/index.ts +1 -1
- package/src/internal/browser-login.ts +54 -24
- package/src/internal/configuration.ts +16 -31
- package/src/internal/d1-planning.ts +7 -0
- package/src/internal/email-native-state.ts +247 -0
- package/src/internal/email-native.ts +514 -0
- package/src/internal/email-policy.ts +235 -0
- package/src/internal/email-registration-native.ts +386 -0
- package/src/internal/models/email-model.ts +76 -214
- package/src/internal/models/oauth-connected-model.ts +50 -288
- package/src/internal/models/oauth-model.ts +147 -368
- package/src/internal/models/passkey-model.ts +11 -208
- package/src/internal/models/passkey-registration-ceremony-model.ts +6 -60
- package/src/internal/models/passkey-write-model.ts +14 -95
- package/src/internal/models/password-model.ts +28 -148
- package/src/internal/models/phone-model.ts +110 -0
- package/src/internal/models/proof-model.ts +48 -404
- package/src/internal/models/session-model.ts +102 -200
- package/src/internal/models/step-up-model.ts +17 -96
- package/src/internal/models/totp-model.ts +82 -0
- package/src/internal/native-sql-table.ts +32 -11
- package/src/internal/oauth/native-accounts.ts +576 -0
- package/src/internal/oauth/native-connected-state.ts +288 -0
- package/src/internal/oauth/native-connected.ts +888 -0
- package/src/internal/oauth/native-flow.ts +253 -0
- package/src/internal/oauth/native-layers.ts +83 -0
- package/src/internal/oauth/native-mutation.ts +222 -0
- package/src/internal/oauth/native-registration.ts +545 -0
- package/src/internal/oauth/native-revocations.ts +190 -0
- package/src/internal/oauth/native-sign-in.ts +111 -0
- package/src/internal/oauth/native-state.ts +346 -0
- package/src/internal/oauth/state.ts +2 -70
- package/src/internal/passkey-actions.ts +70 -0
- package/src/internal/passkey-inputs.ts +56 -0
- package/src/internal/passkey-managed.ts +360 -0
- package/src/internal/passkey-native-ceremony.ts +66 -0
- package/src/internal/passkey-native-flow.ts +140 -0
- package/src/internal/passkey-native-registration.ts +221 -0
- package/src/internal/passkey-native-state.ts +335 -0
- package/src/internal/passkey-native-write.ts +611 -0
- package/src/internal/passkey-native.ts +372 -0
- package/src/internal/passkey-policy.ts +246 -0
- package/src/internal/password-credentials.ts +52 -10
- package/src/internal/password-native.ts +571 -0
- package/src/internal/password-policy.ts +307 -0
- package/src/internal/password-registration-native.ts +322 -0
- package/src/internal/persistence.ts +336 -290
- package/src/internal/phone-composed.ts +86 -0
- package/src/internal/phone-native.ts +659 -0
- package/src/internal/proof-native.ts +448 -0
- package/src/internal/registration.ts +96 -143
- package/src/internal/session-native-authority.ts +247 -0
- package/src/internal/session-native-cleanup.ts +65 -0
- package/src/internal/session-native-login.ts +205 -0
- package/src/internal/session-native-pending-read.ts +68 -0
- package/src/internal/session-native-pending.ts +223 -0
- package/src/internal/session-native-record.ts +141 -0
- package/src/internal/session-native-state.ts +259 -0
- package/src/internal/session-native-stateful.ts +512 -0
- package/src/internal/session-native-step-up.ts +450 -0
- package/src/internal/session-native-validity.ts +208 -0
- package/src/internal/session-policy.ts +59 -0
- package/src/internal/sql-authority.ts +56 -0
- package/src/internal/sql-change.ts +38 -0
- package/src/internal/sql-cleanup.ts +56 -0
- package/src/internal/sql-commit.ts +435 -0
- package/src/internal/sql-expression.ts +94 -0
- package/src/internal/sql-metadata.ts +100 -0
- package/src/internal/sql-oauth-connected-model.ts +6 -95
- package/src/internal/sql-oauth-model.ts +31 -134
- package/src/internal/sql-persistence.ts +2 -6
- package/src/internal/sql-storage-validation.ts +1 -2
- package/src/internal/sql-table.ts +19 -52
- package/src/internal/standalone.ts +2 -11
- package/src/internal/step-up-state.ts +4 -17
- package/src/internal/storage-clock.ts +58 -0
- package/src/internal/storage-mapping.ts +125 -340
- package/src/internal/storage-plans.ts +14 -80
- package/src/internal/storage-tables.ts +28 -212
- package/src/internal/storage-validation.ts +0 -58
- package/src/internal/table-model.ts +24 -0
- package/src/internal/totp-native.ts +701 -0
- package/dist/internal/PasswordPreparedPostconditions.d.mts +0 -22
- package/dist/internal/PasswordPreparedPostconditions.mjs +0 -12
- package/dist/internal/PasswordPreparedPostconditions.mjs.map +0 -1
- package/dist/internal/authority-snapshot.mjs +0 -53
- package/dist/internal/authority-snapshot.mjs.map +0 -1
- package/dist/internal/email-kernel.d.mts +0 -276
- package/dist/internal/email-kernel.mjs +0 -497
- package/dist/internal/email-kernel.mjs.map +0 -1
- package/dist/internal/models/passkey-registration-ceremony-model.mjs +0 -18
- package/dist/internal/models/passkey-registration-ceremony-model.mjs.map +0 -1
- package/dist/internal/oauth/accounts.d.mts +0 -8
- package/dist/internal/oauth/accounts.mjs +0 -379
- package/dist/internal/oauth/accounts.mjs.map +0 -1
- package/dist/internal/oauth/connected-access.d.mts +0 -9
- package/dist/internal/oauth/connected-access.mjs +0 -229
- package/dist/internal/oauth/connected-access.mjs.map +0 -1
- package/dist/internal/oauth/connected-collection.d.mts +0 -7
- package/dist/internal/oauth/connected-collection.mjs +0 -214
- package/dist/internal/oauth/connected-collection.mjs.map +0 -1
- package/dist/internal/oauth/connected-custody.d.mts +0 -6
- package/dist/internal/oauth/connected-custody.mjs +0 -165
- package/dist/internal/oauth/connected-custody.mjs.map +0 -1
- package/dist/internal/oauth/connected-flow.d.mts +0 -7
- package/dist/internal/oauth/connected-flow.mjs +0 -324
- package/dist/internal/oauth/connected-flow.mjs.map +0 -1
- package/dist/internal/oauth/connected-input.mjs +0 -122
- package/dist/internal/oauth/connected-input.mjs.map +0 -1
- package/dist/internal/oauth/connected-keys.d.mts +0 -2
- package/dist/internal/oauth/connected-keys.mjs +0 -22
- package/dist/internal/oauth/connected-keys.mjs.map +0 -1
- package/dist/internal/oauth/connected-maintenance.d.mts +0 -9
- package/dist/internal/oauth/connected-maintenance.mjs +0 -226
- package/dist/internal/oauth/connected-maintenance.mjs.map +0 -1
- package/dist/internal/oauth/connected-management.d.mts +0 -9
- package/dist/internal/oauth/connected-management.mjs +0 -243
- package/dist/internal/oauth/connected-management.mjs.map +0 -1
- package/dist/internal/oauth/connected-reference.mjs +0 -63
- package/dist/internal/oauth/connected-reference.mjs.map +0 -1
- package/dist/internal/oauth/connected-settlement.d.mts +0 -8
- package/dist/internal/oauth/connected-settlement.mjs +0 -141
- package/dist/internal/oauth/connected-settlement.mjs.map +0 -1
- package/dist/internal/oauth/connected-sign-in.d.mts +0 -10
- package/dist/internal/oauth/connected-sign-in.mjs +0 -281
- package/dist/internal/oauth/connected-sign-in.mjs.map +0 -1
- package/dist/internal/oauth/connected-state.d.mts +0 -14
- package/dist/internal/oauth/connected-state.mjs +0 -469
- package/dist/internal/oauth/connected-state.mjs.map +0 -1
- package/dist/internal/oauth/connected-target.d.mts +0 -21
- package/dist/internal/oauth/connected-target.mjs +0 -117
- package/dist/internal/oauth/connected-target.mjs.map +0 -1
- package/dist/internal/oauth/flow.d.mts +0 -5
- package/dist/internal/oauth/flow.mjs +0 -279
- package/dist/internal/oauth/flow.mjs.map +0 -1
- package/dist/internal/oauth/input.mjs +0 -127
- package/dist/internal/oauth/input.mjs.map +0 -1
- package/dist/internal/oauth/owner.d.mts +0 -10
- package/dist/internal/oauth/owner.mjs +0 -10
- package/dist/internal/oauth/owner.mjs.map +0 -1
- package/dist/internal/oauth/query-compiler.d.mts +0 -7
- package/dist/internal/oauth/query-compiler.mjs +0 -9
- package/dist/internal/oauth/query-compiler.mjs.map +0 -1
- package/dist/internal/oauth/registration.d.mts +0 -7
- package/dist/internal/oauth/registration.mjs +0 -393
- package/dist/internal/oauth/registration.mjs.map +0 -1
- package/dist/internal/oauth/target.d.mts +0 -31
- package/dist/internal/oauth/target.mjs +0 -273
- package/dist/internal/oauth/target.mjs.map +0 -1
- package/dist/internal/oauth-kernel.d.mts +0 -1423
- package/dist/internal/oauth-kernel.mjs +0 -187
- package/dist/internal/oauth-kernel.mjs.map +0 -1
- package/dist/internal/passkey/admission.d.mts +0 -6
- package/dist/internal/passkey/admission.mjs +0 -220
- package/dist/internal/passkey/admission.mjs.map +0 -1
- package/dist/internal/passkey/credentials.d.mts +0 -14
- package/dist/internal/passkey/credentials.mjs +0 -249
- package/dist/internal/passkey/credentials.mjs.map +0 -1
- package/dist/internal/passkey/enrollment.mjs +0 -138
- package/dist/internal/passkey/enrollment.mjs.map +0 -1
- package/dist/internal/passkey/flow.d.mts +0 -21
- package/dist/internal/passkey/flow.mjs +0 -452
- package/dist/internal/passkey/flow.mjs.map +0 -1
- package/dist/internal/passkey/management.mjs +0 -231
- package/dist/internal/passkey/management.mjs.map +0 -1
- package/dist/internal/passkey/registration-ceremony.d.mts +0 -9
- package/dist/internal/passkey/registration-ceremony.mjs +0 -129
- package/dist/internal/passkey/registration-ceremony.mjs.map +0 -1
- package/dist/internal/passkey/registration-custody.d.mts +0 -2
- package/dist/internal/passkey/registration-custody.mjs +0 -52
- package/dist/internal/passkey/registration-custody.mjs.map +0 -1
- package/dist/internal/passkey/registration-write.mjs +0 -211
- package/dist/internal/passkey/registration-write.mjs.map +0 -1
- package/dist/internal/passkey/state.d.mts +0 -10
- package/dist/internal/passkey/state.mjs +0 -234
- package/dist/internal/passkey/state.mjs.map +0 -1
- package/dist/internal/passkey/target.d.mts +0 -20
- package/dist/internal/passkey/target.mjs +0 -200
- package/dist/internal/passkey/target.mjs.map +0 -1
- package/dist/internal/passkey/write-state.d.mts +0 -17
- package/dist/internal/passkey/write-state.mjs +0 -346
- package/dist/internal/passkey/write-state.mjs.map +0 -1
- package/dist/internal/passkey/write-target.mjs +0 -192
- package/dist/internal/passkey/write-target.mjs.map +0 -1
- package/dist/internal/passkey-kernel.d.mts +0 -6045
- package/dist/internal/passkey-kernel.mjs +0 -49
- package/dist/internal/passkey-kernel.mjs.map +0 -1
- package/dist/internal/passkeys.d.mts +0 -7
- package/dist/internal/passkeys.mjs +0 -387
- package/dist/internal/passkeys.mjs.map +0 -1
- package/dist/internal/password-credentials.d.mts +0 -11
- package/dist/internal/password-kernel.d.mts +0 -278
- package/dist/internal/password-kernel.mjs +0 -508
- package/dist/internal/password-kernel.mjs.map +0 -1
- package/dist/internal/phone-kernel.d.mts +0 -162
- package/dist/internal/phone-kernel.mjs +0 -437
- package/dist/internal/phone-kernel.mjs.map +0 -1
- package/dist/internal/proof-kernel.d.mts +0 -94
- package/dist/internal/proof-kernel.mjs +0 -624
- package/dist/internal/proof-kernel.mjs.map +0 -1
- package/dist/internal/query-operations.d.mts +0 -68
- package/dist/internal/session-kernel.d.mts +0 -62
- package/dist/internal/session-kernel.mjs +0 -820
- package/dist/internal/session-kernel.mjs.map +0 -1
- package/dist/internal/sql-oauth-connected-model.mjs +0 -7
- package/dist/internal/sql-oauth-connected-model.mjs.map +0 -1
- package/dist/internal/sql-query.d.mts +0 -12
- package/dist/internal/sql-query.mjs +0 -206
- package/dist/internal/sql-query.mjs.map +0 -1
- package/dist/internal/step-up-state.d.mts +0 -49
- package/dist/internal/transaction-execution-kernel.d.mts +0 -37
- package/dist/internal/transaction-execution-kernel.mjs +0 -120
- package/dist/internal/transaction-execution-kernel.mjs.map +0 -1
- package/dist/internal/transaction-kernel.d.mts +0 -81
- package/dist/internal/transaction-kernel.mjs +0 -264
- package/dist/internal/transaction-kernel.mjs.map +0 -1
- package/src/internal/PasswordPreparedPostconditions.ts +0 -30
- package/src/internal/authority-snapshot.ts +0 -91
- package/src/internal/email-kernel.ts +0 -1555
- package/src/internal/oauth/accounts.ts +0 -838
- package/src/internal/oauth/connected-access.ts +0 -388
- package/src/internal/oauth/connected-collection.ts +0 -345
- package/src/internal/oauth/connected-custody.ts +0 -308
- package/src/internal/oauth/connected-flow.ts +0 -562
- package/src/internal/oauth/connected-input.ts +0 -147
- package/src/internal/oauth/connected-keys.ts +0 -31
- package/src/internal/oauth/connected-maintenance.ts +0 -379
- package/src/internal/oauth/connected-management.ts +0 -391
- package/src/internal/oauth/connected-reference.ts +0 -135
- package/src/internal/oauth/connected-settlement.ts +0 -278
- package/src/internal/oauth/connected-sign-in.ts +0 -472
- package/src/internal/oauth/connected-state.ts +0 -924
- package/src/internal/oauth/connected-target.ts +0 -307
- package/src/internal/oauth/flow.ts +0 -505
- package/src/internal/oauth/input.ts +0 -201
- package/src/internal/oauth/owner.ts +0 -22
- package/src/internal/oauth/query-compiler.ts +0 -15
- package/src/internal/oauth/registration.ts +0 -676
- package/src/internal/oauth/target.ts +0 -803
- package/src/internal/oauth-kernel.ts +0 -294
- package/src/internal/passkey/admission.ts +0 -368
- package/src/internal/passkey/credentials.ts +0 -511
- package/src/internal/passkey/enrollment.ts +0 -326
- package/src/internal/passkey/flow.ts +0 -1062
- package/src/internal/passkey/management.ts +0 -426
- package/src/internal/passkey/registration-ceremony.ts +0 -283
- package/src/internal/passkey/registration-custody.ts +0 -91
- package/src/internal/passkey/registration-write.ts +0 -426
- package/src/internal/passkey/state.ts +0 -351
- package/src/internal/passkey/target.ts +0 -598
- package/src/internal/passkey/write-state.ts +0 -678
- package/src/internal/passkey/write-target.ts +0 -450
- package/src/internal/passkey-kernel.ts +0 -112
- package/src/internal/passkeys.ts +0 -652
- package/src/internal/password-kernel.ts +0 -1522
- package/src/internal/phone-kernel.ts +0 -872
- package/src/internal/proof-kernel.ts +0 -1992
- package/src/internal/query-operations.ts +0 -91
- package/src/internal/session-kernel.ts +0 -2406
- package/src/internal/sql-query.ts +0 -304
- package/src/internal/transaction-execution-kernel.ts +0 -335
- package/src/internal/transaction-kernel.ts +0 -603
|
@@ -1,285 +1,56 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AnyTableModel, SqlExpression, TableModel } from "../query-operations.mjs";
|
|
1
|
+
import { AnyTableModel, SqlExpression, TableModel } from "../table-model.mjs";
|
|
3
2
|
import { SubjectIdCodec } from "./common.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import { TokenDigest } from "@yielded/auth/Schema";
|
|
6
|
-
import { ProofBinding, ProofContinuationId, ProofId, ProofPolicy, ProofPurpose, ProofRecord, ProofRequestReceipt, ProofVersion } from "@yielded/auth/Proofs";
|
|
3
|
+
import { ProofIssueRecord } from "@yielded/auth/Proofs";
|
|
7
4
|
//#region src/internal/models/proof-model.d.ts
|
|
8
|
-
type
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
readonly
|
|
18
|
-
readonly
|
|
19
|
-
|
|
20
|
-
readonly
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
readonly moduleId: string;
|
|
24
|
-
readonly purpose: ProofPurpose;
|
|
25
|
-
readonly binding: ProofBinding;
|
|
26
|
-
/** Resolved by Effect preplanning before an interactive check or D1 predicate compile. */
|
|
27
|
-
readonly nativeSubjectId?: NativeSubjectId;
|
|
28
|
-
}
|
|
29
|
-
export interface ProofAuthorityTables<Subject extends TableModel, Identifier extends TableModel, Credential extends TableModel, NativeSubjectId, Expression extends SqlExpression = SqlExpression> {
|
|
30
|
-
readonly identifier: {
|
|
31
|
-
readonly table: Identifier["table"];
|
|
32
|
-
readonly namespace: ColumnKey<Identifier>;
|
|
33
|
-
readonly value: ColumnKey<Identifier>;
|
|
34
|
-
/** Evaluate the consumer's explicit current-ownership/availability semantics. */
|
|
35
|
-
readonly isCurrent: (input: ProofAuthorityInput<NativeSubjectId>, rows: ReadonlyArray<Identifier["select"]>) => boolean;
|
|
36
|
-
/** Optional outside D1. Never infer this semantic predicate from eligibility. */
|
|
37
|
-
readonly d1CurrentCondition?: (input: ProofAuthorityInput<NativeSubjectId>) => Expression;
|
|
38
|
-
};
|
|
39
|
-
readonly subject?: {
|
|
40
|
-
readonly table: Subject["table"];
|
|
41
|
-
readonly id: ColumnKey<Subject>;
|
|
42
|
-
readonly status: ColumnKey<Subject>;
|
|
43
|
-
readonly securityRevision: ColumnKey<Subject>;
|
|
44
|
-
readonly isActiveStatus: (value: unknown) => boolean;
|
|
45
|
-
readonly d1ActiveStatusValue: unknown;
|
|
46
|
-
};
|
|
47
|
-
readonly credential?: {
|
|
48
|
-
readonly table: Credential["table"];
|
|
49
|
-
readonly subjectId: ColumnKey<Credential>;
|
|
50
|
-
readonly credentialId: ColumnKey<Credential>;
|
|
51
|
-
readonly revision: ColumnKey<Credential>;
|
|
52
|
-
readonly status?: ColumnKey<Credential>;
|
|
53
|
-
readonly isActiveStatus?: (value: unknown) => boolean;
|
|
54
|
-
readonly d1ActiveStatusValue?: unknown;
|
|
55
|
-
};
|
|
56
|
-
readonly subjectId?: SubjectIdCodec<NativeSubjectId>;
|
|
57
|
-
}
|
|
58
|
-
export interface ProofRequestTable<Request extends TableModel> {
|
|
59
|
-
readonly table: Request["table"];
|
|
60
|
-
readonly moduleId: ColumnKey<Request>;
|
|
61
|
-
readonly requestId: ColumnKey<Request>;
|
|
62
|
-
readonly fingerprint: ColumnKey<Request>;
|
|
63
|
-
readonly proofId: ColumnKey<Request>;
|
|
64
|
-
readonly purpose: ColumnKey<Request>;
|
|
65
|
-
readonly keyId: ColumnKey<Request>;
|
|
66
|
-
readonly createdAt: ColumnKey<Request>;
|
|
67
|
-
readonly retentionUntil: ColumnKey<Request>;
|
|
5
|
+
type Column<T extends TableModel> = T["column"];
|
|
6
|
+
/** One current code per canonical identifier and subject. Binding is canonical
|
|
7
|
+
* Schema JSON, and token comparisons are byte exact even on collated columns. */
|
|
8
|
+
export interface ProofTable<Proof extends TableModel> {
|
|
9
|
+
readonly table: Proof["table"];
|
|
10
|
+
readonly moduleId: Column<Proof>;
|
|
11
|
+
readonly purpose: Column<Proof>;
|
|
12
|
+
readonly seriesKey: Column<Proof>;
|
|
13
|
+
readonly proofId: Column<Proof>;
|
|
14
|
+
readonly binding: Column<Proof>;
|
|
15
|
+
readonly verifierKeyId: Column<Proof>;
|
|
16
|
+
readonly verifierDigest: Column<Proof>;
|
|
17
|
+
readonly issuedAt: Column<Proof>;
|
|
18
|
+
readonly expiresAt: Column<Proof>;
|
|
19
|
+
readonly failedAttempts: Column<Proof>;
|
|
68
20
|
readonly encodeInsert: (input: {
|
|
69
|
-
readonly record:
|
|
70
|
-
readonly createdAtMillis: number;
|
|
71
|
-
readonly retentionUntilMillis: number;
|
|
72
|
-
}) => Request["insert"];
|
|
73
|
-
readonly decodeReceipt: (row: Request["select"]) => Effect.Effect<ProofRequestReceipt, PersistenceMappingError>;
|
|
74
|
-
}
|
|
75
|
-
export interface ProofSeriesTable<Series extends TableModel> {
|
|
76
|
-
readonly table: Series["table"];
|
|
77
|
-
readonly moduleId: ColumnKey<Series>;
|
|
78
|
-
readonly purpose: ColumnKey<Series>;
|
|
79
|
-
readonly scopeKey: ColumnKey<Series>;
|
|
80
|
-
readonly activeProofId: ColumnKey<Series>;
|
|
81
|
-
readonly lastIssueAt: ColumnKey<Series>;
|
|
82
|
-
readonly version: ColumnKey<Series>;
|
|
83
|
-
readonly encodeInsert: (input: {
|
|
84
|
-
readonly moduleId: string;
|
|
85
|
-
readonly purpose: ProofPurpose;
|
|
86
|
-
readonly scopeKey: string;
|
|
87
|
-
readonly version: ProofVersion;
|
|
88
|
-
}) => Series["insert"];
|
|
89
|
-
}
|
|
90
|
-
export interface ProofGenerationTable<Generation extends TableModel> {
|
|
91
|
-
readonly table: Generation["table"];
|
|
92
|
-
readonly moduleId: ColumnKey<Generation>;
|
|
93
|
-
readonly purpose: ColumnKey<Generation>;
|
|
94
|
-
readonly proofId: ColumnKey<Generation>;
|
|
95
|
-
readonly requestId: ColumnKey<Generation>;
|
|
96
|
-
readonly seriesKey: ColumnKey<Generation>;
|
|
97
|
-
readonly deliveryId: ColumnKey<Generation>;
|
|
98
|
-
readonly binding: ColumnKey<Generation>;
|
|
99
|
-
readonly verifierKeyId: ColumnKey<Generation>;
|
|
100
|
-
readonly verifierDigest: ColumnKey<Generation>;
|
|
101
|
-
readonly issuedAt: ColumnKey<Generation>;
|
|
102
|
-
readonly expiresAt: ColumnKey<Generation>;
|
|
103
|
-
readonly version: ColumnKey<Generation>;
|
|
104
|
-
readonly state: ColumnKey<Generation>;
|
|
105
|
-
readonly sendCount: ColumnKey<Generation>;
|
|
106
|
-
readonly deliveryState: ColumnKey<Generation>;
|
|
107
|
-
readonly claimVersion: ColumnKey<Generation>;
|
|
108
|
-
readonly claimDeadline: ColumnKey<Generation>;
|
|
109
|
-
readonly retryAt: ColumnKey<Generation>;
|
|
110
|
-
readonly deliveryRetryMillis: ColumnKey<Generation>;
|
|
111
|
-
readonly retentionUntil: ColumnKey<Generation>;
|
|
112
|
-
readonly encodeInsert: (input: {
|
|
113
|
-
readonly record: ProofRecord;
|
|
21
|
+
readonly record: ProofIssueRecord;
|
|
114
22
|
readonly seriesKey: string;
|
|
115
|
-
|
|
116
|
-
readonly state: ProofGenerationState;
|
|
117
|
-
readonly deliveryState: ProofDeliveryState;
|
|
118
|
-
readonly policy: ProofPolicy;
|
|
119
|
-
}) => Generation["insert"];
|
|
120
|
-
readonly decodeRecord: (row: Generation["select"]) => Effect.Effect<ProofRecord, PersistenceMappingError>;
|
|
121
|
-
readonly decodeBinding: (row: Generation["select"]) => Effect.Effect<ProofBinding, PersistenceMappingError>;
|
|
122
|
-
}
|
|
123
|
-
export interface ProofContinuationRecord {
|
|
124
|
-
readonly moduleId: string;
|
|
125
|
-
readonly purpose: ProofPurpose;
|
|
126
|
-
readonly continuationId: ProofContinuationId;
|
|
127
|
-
readonly digest: TokenDigest;
|
|
128
|
-
readonly proofId: ProofId;
|
|
129
|
-
readonly seriesKey: string;
|
|
130
|
-
readonly binding: ProofBinding;
|
|
131
|
-
readonly expiresAtMillis: number;
|
|
132
|
-
readonly version: ProofVersion;
|
|
133
|
-
}
|
|
134
|
-
export interface ProofContinuationTable<Continuation extends TableModel> {
|
|
135
|
-
readonly table: Continuation["table"];
|
|
136
|
-
readonly moduleId: ColumnKey<Continuation>;
|
|
137
|
-
readonly purpose: ColumnKey<Continuation>;
|
|
138
|
-
readonly continuationId: ColumnKey<Continuation>;
|
|
139
|
-
readonly digest: ColumnKey<Continuation>;
|
|
140
|
-
readonly proofId: ColumnKey<Continuation>;
|
|
141
|
-
readonly seriesKey: ColumnKey<Continuation>;
|
|
142
|
-
readonly binding: ColumnKey<Continuation>;
|
|
143
|
-
readonly expiresAt: ColumnKey<Continuation>;
|
|
144
|
-
readonly consumed: ColumnKey<Continuation>;
|
|
145
|
-
readonly version: ColumnKey<Continuation>;
|
|
146
|
-
readonly retentionUntil: ColumnKey<Continuation>;
|
|
147
|
-
readonly encodeInsert: (record: ProofContinuationRecord & {
|
|
148
|
-
readonly retentionUntilMillis: number;
|
|
149
|
-
}) => Continuation["insert"];
|
|
150
|
-
readonly decode: (row: Continuation["select"]) => Effect.Effect<ProofContinuationRecord, PersistenceMappingError>;
|
|
151
|
-
}
|
|
152
|
-
export interface ProofRateScopeTable<RateScope extends TableModel> {
|
|
153
|
-
readonly table: RateScope["table"];
|
|
154
|
-
readonly moduleId: ColumnKey<RateScope>;
|
|
155
|
-
readonly purpose: ColumnKey<RateScope>;
|
|
156
|
-
readonly action: ColumnKey<RateScope>;
|
|
157
|
-
readonly scopeKind: ColumnKey<RateScope>;
|
|
158
|
-
readonly scopeKey: ColumnKey<RateScope>;
|
|
159
|
-
readonly encodeInsert: (input: {
|
|
160
|
-
readonly moduleId: string;
|
|
161
|
-
readonly purpose: ProofPurpose;
|
|
162
|
-
readonly action: ProofAction;
|
|
163
|
-
readonly scopeKind: ProofScopeKind;
|
|
164
|
-
readonly scopeKey: string;
|
|
165
|
-
}) => RateScope["insert"];
|
|
23
|
+
}) => Proof["insert"];
|
|
166
24
|
}
|
|
167
|
-
export interface
|
|
168
|
-
readonly
|
|
169
|
-
readonly
|
|
170
|
-
|
|
171
|
-
readonly
|
|
172
|
-
readonly
|
|
173
|
-
readonly
|
|
174
|
-
readonly commandId: ColumnKey<AbuseEvent>;
|
|
175
|
-
readonly occurredAt: ColumnKey<AbuseEvent>;
|
|
176
|
-
readonly retentionUntil: ColumnKey<AbuseEvent>;
|
|
177
|
-
readonly encodeInsert: (input: {
|
|
178
|
-
readonly moduleId: string;
|
|
179
|
-
readonly purpose: ProofPurpose;
|
|
180
|
-
readonly action: ProofAction;
|
|
181
|
-
readonly scopeKind: ProofScopeKind;
|
|
182
|
-
readonly scopeKey: string;
|
|
183
|
-
readonly commandId: string;
|
|
184
|
-
readonly occurredAtMillis: number;
|
|
185
|
-
readonly retentionUntilMillis: number;
|
|
186
|
-
}) => AbuseEvent["insert"];
|
|
187
|
-
}
|
|
188
|
-
export interface ProofFailureEventTable<FailureEvent extends TableModel> {
|
|
189
|
-
readonly table: FailureEvent["table"];
|
|
190
|
-
readonly moduleId: ColumnKey<FailureEvent>;
|
|
191
|
-
readonly purpose: ColumnKey<FailureEvent>;
|
|
192
|
-
readonly seriesKey: ColumnKey<FailureEvent>;
|
|
193
|
-
readonly commandId: ColumnKey<FailureEvent>;
|
|
194
|
-
readonly occurredAt: ColumnKey<FailureEvent>;
|
|
195
|
-
readonly retentionUntil: ColumnKey<FailureEvent>;
|
|
196
|
-
readonly encodeInsert: (input: {
|
|
197
|
-
readonly moduleId: string;
|
|
198
|
-
readonly purpose: ProofPurpose;
|
|
199
|
-
readonly seriesKey: string;
|
|
200
|
-
readonly commandId: string;
|
|
201
|
-
readonly occurredAtMillis: number;
|
|
202
|
-
readonly retentionUntilMillis: number;
|
|
203
|
-
}) => FailureEvent["insert"];
|
|
204
|
-
}
|
|
205
|
-
export interface ProofCommandTable<Command extends TableModel> {
|
|
206
|
-
readonly table: Command["table"];
|
|
207
|
-
readonly moduleId: ColumnKey<Command>;
|
|
208
|
-
readonly commandId: ColumnKey<Command>;
|
|
209
|
-
readonly kind: ColumnKey<Command>;
|
|
210
|
-
readonly decision: ColumnKey<Command>;
|
|
211
|
-
readonly retentionUntil: ColumnKey<Command>;
|
|
212
|
-
readonly encodeInsert: (input: {
|
|
213
|
-
readonly moduleId: string;
|
|
214
|
-
readonly commandId: string;
|
|
215
|
-
readonly kind: ProofCommandKind;
|
|
216
|
-
readonly decision: ProofCommandDecision;
|
|
217
|
-
readonly retentionUntilMillis: number;
|
|
218
|
-
}) => Command["insert"];
|
|
25
|
+
export interface ProofClock<Expression extends SqlExpression = SqlExpression> {
|
|
26
|
+
readonly encodeInstant: (millis: number) => unknown;
|
|
27
|
+
readonly decodeInstant: (value: unknown) => number;
|
|
28
|
+
/** Integer engine wall-clock milliseconds; PostgreSQL uses clock_timestamp(). */
|
|
29
|
+
readonly engineNowMillis: Expression;
|
|
30
|
+
readonly toMillis: (expression: Expression) => Expression;
|
|
31
|
+
readonly fromMillis: (expression: Expression) => Expression;
|
|
219
32
|
}
|
|
220
33
|
export interface RequiredProofConstraints {
|
|
221
|
-
readonly
|
|
222
|
-
readonly
|
|
223
|
-
readonly proof: "unique(generation.moduleId,generation.proofId)";
|
|
224
|
-
readonly delivery: "unique(generation.moduleId,generation.deliveryId)";
|
|
225
|
-
readonly continuationId: "unique(continuation.moduleId,continuation.continuationId)";
|
|
226
|
-
readonly continuationDigest: "unique(continuation.moduleId,continuation.digest)";
|
|
227
|
-
readonly rateScope: "unique(rateScope.moduleId,rateScope.purpose,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)";
|
|
228
|
-
readonly abuseEvent: "unique(abuseEvent.moduleId,abuseEvent.action,abuseEvent.scopeKind,abuseEvent.scopeKey,abuseEvent.commandId)";
|
|
229
|
-
readonly failureEvent: "unique(failureEvent.moduleId,failureEvent.seriesKey,failureEvent.commandId)";
|
|
230
|
-
readonly command: "unique(command.moduleId,command.commandId)";
|
|
34
|
+
readonly series: "unique(proof.moduleId,proof.purpose,proof.seriesKey)";
|
|
35
|
+
readonly proof: "unique(proof.moduleId,proof.proofId)";
|
|
231
36
|
}
|
|
232
37
|
export declare const requiredProofConstraints: RequiredProofConstraints;
|
|
233
|
-
export interface
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
readonly
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
readonly engineNow: Expression;
|
|
244
|
-
/** Integer Unix milliseconds expression evaluated inside the submitted batch. */
|
|
245
|
-
readonly engineNowMillis: Expression;
|
|
246
|
-
/** Native instant expression for an engine-time rolling-window cutoff. */
|
|
247
|
-
readonly engineInstantMinus: (millis: number) => Expression;
|
|
248
|
-
/** Native instant expression for a retention/lease deadline from engine time. */
|
|
249
|
-
readonly engineInstantPlus: (millis: number) => Expression;
|
|
250
|
-
}
|
|
251
|
-
export interface ProofPersistenceMapping<Request extends TableModel, Series extends TableModel, Generation extends TableModel, Continuation extends TableModel, RateScope extends TableModel, AbuseEvent extends TableModel, FailureEvent extends TableModel, Command extends TableModel, Subject extends TableModel, Identifier extends TableModel, Credential extends TableModel, NativeSubjectId, Expression extends SqlExpression = SqlExpression> extends ProofConstraintClassifier {
|
|
252
|
-
readonly request: ProofRequestTable<Request>;
|
|
253
|
-
readonly series: ProofSeriesTable<Series>;
|
|
254
|
-
readonly generation: ProofGenerationTable<Generation>;
|
|
255
|
-
readonly continuation: ProofContinuationTable<Continuation>;
|
|
256
|
-
readonly rateScope: ProofRateScopeTable<RateScope>;
|
|
257
|
-
readonly abuseEvent: ProofAbuseEventTable<AbuseEvent>;
|
|
258
|
-
readonly failureEvent: ProofFailureEventTable<FailureEvent>;
|
|
259
|
-
readonly command: ProofCommandTable<Command>;
|
|
260
|
-
readonly authority: ProofAuthorityTables<Subject, Identifier, Credential, NativeSubjectId, Expression>;
|
|
38
|
+
export interface ProofPersistenceMapping<Proof extends TableModel, Subject extends TableModel, NativeSubjectId, Expression extends SqlExpression = SqlExpression> {
|
|
39
|
+
readonly proof: ProofTable<Proof>;
|
|
40
|
+
/** Bare subject-bound redemption takes this lock before touching the proof.
|
|
41
|
+
* Protected mutation owners already holding it use the shared locked primitive. */
|
|
42
|
+
readonly subject: {
|
|
43
|
+
readonly table: Subject["table"];
|
|
44
|
+
readonly id: Column<Subject>;
|
|
45
|
+
};
|
|
46
|
+
readonly subjectId: SubjectIdCodec<NativeSubjectId>;
|
|
47
|
+
readonly clock: ProofClock<Expression>;
|
|
261
48
|
readonly constraints: RequiredProofConstraints;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
readonly
|
|
265
|
-
readonly binding: ProofBinding;
|
|
266
|
-
}) => ProofScopeKeys;
|
|
267
|
-
readonly encodeInstant: (epochMillis: number) => unknown;
|
|
268
|
-
readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;
|
|
269
|
-
readonly allocateVersion?: Effect.Effect<ProofVersion, PersistenceMappingError>;
|
|
270
|
-
readonly allocateVersionSync?: () => ProofVersion;
|
|
271
|
-
/** Required by D1 mappings and ignored by interactive targets. */
|
|
272
|
-
readonly d1?: ProofD1Clock<Expression>;
|
|
273
|
-
}
|
|
274
|
-
export type D1ProofPersistenceMapping<Request extends TableModel, Series extends TableModel, Generation extends TableModel, Continuation extends TableModel, RateScope extends TableModel, AbuseEvent extends TableModel, FailureEvent extends TableModel, Command extends TableModel, Subject extends TableModel, Identifier extends TableModel, Credential extends TableModel, NativeSubjectId, Expression extends SqlExpression = SqlExpression> = ProofPersistenceMapping<Request, Series, Generation, Continuation, RateScope, AbuseEvent, FailureEvent, Command, Subject, Identifier, Credential, NativeSubjectId, Expression> & {
|
|
275
|
-
readonly d1: ProofD1Clock<Expression>;
|
|
276
|
-
readonly authority: ProofAuthorityTables<Subject, Identifier, Credential, NativeSubjectId, Expression> & {
|
|
277
|
-
readonly identifier: ProofAuthorityTables<Subject, Identifier, Credential, NativeSubjectId, Expression>["identifier"] & {
|
|
278
|
-
/** Synchronous SQL compiler; Effect-based ID conversion has already completed. */
|
|
279
|
-
readonly d1CurrentCondition: (input: ProofAuthorityInput<NativeSubjectId>) => Expression;
|
|
280
|
-
};
|
|
49
|
+
/** D1 planning reads use the primary engine. */
|
|
50
|
+
readonly d1?: {
|
|
51
|
+
readonly primary: true;
|
|
281
52
|
};
|
|
282
|
-
}
|
|
283
|
-
export type AnyProofPersistenceMapping<Expression extends SqlExpression = SqlExpression> = ProofPersistenceMapping<AnyTableModel, AnyTableModel,
|
|
53
|
+
}
|
|
54
|
+
export type AnyProofPersistenceMapping<Expression extends SqlExpression = SqlExpression> = ProofPersistenceMapping<AnyTableModel, AnyTableModel, unknown, Expression>;
|
|
284
55
|
//#endregion
|
|
285
56
|
//# sourceMappingURL=proof-model.d.mts.map
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
//#region src/internal/models/proof-model.ts
|
|
2
2
|
const requiredProofConstraints = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
proof: "unique(generation.moduleId,generation.proofId)",
|
|
6
|
-
delivery: "unique(generation.moduleId,generation.deliveryId)",
|
|
7
|
-
continuationId: "unique(continuation.moduleId,continuation.continuationId)",
|
|
8
|
-
continuationDigest: "unique(continuation.moduleId,continuation.digest)",
|
|
9
|
-
rateScope: "unique(rateScope.moduleId,rateScope.purpose,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)",
|
|
10
|
-
abuseEvent: "unique(abuseEvent.moduleId,abuseEvent.action,abuseEvent.scopeKind,abuseEvent.scopeKey,abuseEvent.commandId)",
|
|
11
|
-
failureEvent: "unique(failureEvent.moduleId,failureEvent.seriesKey,failureEvent.commandId)",
|
|
12
|
-
command: "unique(command.moduleId,command.commandId)"
|
|
3
|
+
series: "unique(proof.moduleId,proof.purpose,proof.seriesKey)",
|
|
4
|
+
proof: "unique(proof.moduleId,proof.proofId)"
|
|
13
5
|
};
|
|
14
6
|
//#endregion
|
|
15
7
|
export { requiredProofConstraints };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof-model.mjs","names":[],"sources":["../../../src/internal/models/proof-model.ts"],"sourcesContent":["import type {\n ProofBinding,\n ProofContinuationId,\n ProofId,\n ProofPurpose,\n ProofRequestReceipt,\n ProofVersion,\n ProofPolicy,\n ProofRecord,\n} from \"@yielded/auth/Proofs\";\nimport type { TokenDigest } from \"@yielded/auth/Schema\";\nimport type { Effect } from \"effect\";\n\nimport type { AnyTableModel, TableModel as Table, SqlExpression } from \"../query-operations\";\nimport type { PersistenceMappingError, SubjectIdCodec } from \"./common\";\n\ntype ColumnKey<T extends Table> = T[\"column\"];\n\nexport type ProofAction = \"issue\" | \"attempt\";\n\nexport type ProofScopeKind = \"action\" | \"identifier\" | \"subject\";\n\nexport type ProofGenerationState = \"active\" | \"consumed\" | \"cancelled\" | \"superseded\";\n\nexport type ProofDeliveryState = \"new\" | \"claimed\" | \"accepted\" | \"failed\" | \"ambiguous\";\n\nexport type ProofCommandKind = \"attempt\" | \"complete\";\n\nexport type ProofCommandDecision = \"accepted\" | \"rejected\" | \"completed\";\n\nexport interface ProofScopeKeys {\n /** Stable across flow/context/request changes and bounded by the consumer codec. */\n readonly series: string;\n readonly identifier: string;\n /** A tagged non-null value; use a stable sentinel when the binding has no subject. */\n readonly subject: string;\n}\n\nexport interface ProofAuthorityInput<NativeSubjectId> {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly binding: ProofBinding;\n /** Resolved by Effect preplanning before an interactive check or D1 predicate compile. */\n readonly nativeSubjectId?: NativeSubjectId;\n}\n\nexport interface ProofAuthorityTables<\n Subject extends Table,\n Identifier extends Table,\n Credential extends Table,\n NativeSubjectId,\n Expression extends SqlExpression = SqlExpression,\n> {\n readonly identifier: {\n readonly table: Identifier[\"table\"];\n readonly namespace: ColumnKey<Identifier>;\n readonly value: ColumnKey<Identifier>;\n /** Evaluate the consumer's explicit current-ownership/availability semantics. */\n readonly isCurrent: (\n input: ProofAuthorityInput<NativeSubjectId>,\n rows: ReadonlyArray<Identifier[\"select\"]>,\n ) => boolean;\n /** Optional outside D1. Never infer this semantic predicate from eligibility. */\n readonly d1CurrentCondition?: (input: ProofAuthorityInput<NativeSubjectId>) => Expression;\n };\n readonly subject?: {\n readonly table: Subject[\"table\"];\n readonly id: ColumnKey<Subject>;\n readonly status: ColumnKey<Subject>;\n readonly securityRevision: ColumnKey<Subject>;\n readonly isActiveStatus: (value: unknown) => boolean;\n readonly d1ActiveStatusValue: unknown;\n };\n readonly credential?: {\n readonly table: Credential[\"table\"];\n readonly subjectId: ColumnKey<Credential>;\n readonly credentialId: ColumnKey<Credential>;\n readonly revision: ColumnKey<Credential>;\n readonly status?: ColumnKey<Credential>;\n readonly isActiveStatus?: (value: unknown) => boolean;\n readonly d1ActiveStatusValue?: unknown;\n };\n readonly subjectId?: SubjectIdCodec<NativeSubjectId>;\n}\n\nexport interface ProofRequestTable<Request extends Table> {\n readonly table: Request[\"table\"];\n readonly moduleId: ColumnKey<Request>;\n readonly requestId: ColumnKey<Request>;\n readonly fingerprint: ColumnKey<Request>;\n readonly proofId: ColumnKey<Request>;\n readonly purpose: ColumnKey<Request>;\n readonly keyId: ColumnKey<Request>;\n readonly createdAt: ColumnKey<Request>;\n readonly retentionUntil: ColumnKey<Request>;\n readonly encodeInsert: (input: {\n readonly record: ProofRecord;\n readonly createdAtMillis: number;\n readonly retentionUntilMillis: number;\n }) => Request[\"insert\"];\n readonly decodeReceipt: (\n row: Request[\"select\"],\n ) => Effect.Effect<ProofRequestReceipt, PersistenceMappingError>;\n}\n\nexport interface ProofSeriesTable<Series extends Table> {\n readonly table: Series[\"table\"];\n readonly moduleId: ColumnKey<Series>;\n readonly purpose: ColumnKey<Series>;\n readonly scopeKey: ColumnKey<Series>;\n readonly activeProofId: ColumnKey<Series>;\n readonly lastIssueAt: ColumnKey<Series>;\n readonly version: ColumnKey<Series>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly scopeKey: string;\n readonly version: ProofVersion;\n }) => Series[\"insert\"];\n}\n\nexport interface ProofGenerationTable<Generation extends Table> {\n readonly table: Generation[\"table\"];\n readonly moduleId: ColumnKey<Generation>;\n readonly purpose: ColumnKey<Generation>;\n readonly proofId: ColumnKey<Generation>;\n readonly requestId: ColumnKey<Generation>;\n readonly seriesKey: ColumnKey<Generation>;\n readonly deliveryId: ColumnKey<Generation>;\n readonly binding: ColumnKey<Generation>;\n readonly verifierKeyId: ColumnKey<Generation>;\n readonly verifierDigest: ColumnKey<Generation>;\n readonly issuedAt: ColumnKey<Generation>;\n readonly expiresAt: ColumnKey<Generation>;\n readonly version: ColumnKey<Generation>;\n readonly state: ColumnKey<Generation>;\n readonly sendCount: ColumnKey<Generation>;\n readonly deliveryState: ColumnKey<Generation>;\n readonly claimVersion: ColumnKey<Generation>;\n readonly claimDeadline: ColumnKey<Generation>;\n readonly retryAt: ColumnKey<Generation>;\n readonly deliveryRetryMillis: ColumnKey<Generation>;\n readonly retentionUntil: ColumnKey<Generation>;\n readonly encodeInsert: (input: {\n readonly record: ProofRecord;\n readonly seriesKey: string;\n readonly retentionUntilMillis: number;\n readonly state: ProofGenerationState;\n readonly deliveryState: ProofDeliveryState;\n readonly policy: ProofPolicy;\n }) => Generation[\"insert\"];\n readonly decodeRecord: (\n row: Generation[\"select\"],\n ) => Effect.Effect<ProofRecord, PersistenceMappingError>;\n readonly decodeBinding: (\n row: Generation[\"select\"],\n ) => Effect.Effect<ProofBinding, PersistenceMappingError>;\n}\n\nexport interface ProofContinuationRecord {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly continuationId: ProofContinuationId;\n readonly digest: TokenDigest;\n readonly proofId: ProofId;\n readonly seriesKey: string;\n readonly binding: ProofBinding;\n readonly expiresAtMillis: number;\n readonly version: ProofVersion;\n}\n\nexport interface ProofContinuationTable<Continuation extends Table> {\n readonly table: Continuation[\"table\"];\n readonly moduleId: ColumnKey<Continuation>;\n readonly purpose: ColumnKey<Continuation>;\n readonly continuationId: ColumnKey<Continuation>;\n readonly digest: ColumnKey<Continuation>;\n readonly proofId: ColumnKey<Continuation>;\n readonly seriesKey: ColumnKey<Continuation>;\n readonly binding: ColumnKey<Continuation>;\n readonly expiresAt: ColumnKey<Continuation>;\n readonly consumed: ColumnKey<Continuation>;\n readonly version: ColumnKey<Continuation>;\n readonly retentionUntil: ColumnKey<Continuation>;\n readonly encodeInsert: (\n record: ProofContinuationRecord & {\n readonly retentionUntilMillis: number;\n },\n ) => Continuation[\"insert\"];\n readonly decode: (\n row: Continuation[\"select\"],\n ) => Effect.Effect<ProofContinuationRecord, PersistenceMappingError>;\n}\n\nexport interface ProofRateScopeTable<RateScope extends Table> {\n readonly table: RateScope[\"table\"];\n readonly moduleId: ColumnKey<RateScope>;\n readonly purpose: ColumnKey<RateScope>;\n readonly action: ColumnKey<RateScope>;\n readonly scopeKind: ColumnKey<RateScope>;\n readonly scopeKey: ColumnKey<RateScope>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly action: ProofAction;\n readonly scopeKind: ProofScopeKind;\n readonly scopeKey: string;\n }) => RateScope[\"insert\"];\n}\n\nexport interface ProofAbuseEventTable<AbuseEvent extends Table> {\n readonly table: AbuseEvent[\"table\"];\n readonly moduleId: ColumnKey<AbuseEvent>;\n readonly purpose: ColumnKey<AbuseEvent>;\n readonly action: ColumnKey<AbuseEvent>;\n readonly scopeKind: ColumnKey<AbuseEvent>;\n readonly scopeKey: ColumnKey<AbuseEvent>;\n readonly commandId: ColumnKey<AbuseEvent>;\n readonly occurredAt: ColumnKey<AbuseEvent>;\n readonly retentionUntil: ColumnKey<AbuseEvent>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly action: ProofAction;\n readonly scopeKind: ProofScopeKind;\n readonly scopeKey: string;\n readonly commandId: string;\n readonly occurredAtMillis: number;\n readonly retentionUntilMillis: number;\n }) => AbuseEvent[\"insert\"];\n}\n\nexport interface ProofFailureEventTable<FailureEvent extends Table> {\n readonly table: FailureEvent[\"table\"];\n readonly moduleId: ColumnKey<FailureEvent>;\n readonly purpose: ColumnKey<FailureEvent>;\n readonly seriesKey: ColumnKey<FailureEvent>;\n readonly commandId: ColumnKey<FailureEvent>;\n readonly occurredAt: ColumnKey<FailureEvent>;\n readonly retentionUntil: ColumnKey<FailureEvent>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly seriesKey: string;\n readonly commandId: string;\n readonly occurredAtMillis: number;\n readonly retentionUntilMillis: number;\n }) => FailureEvent[\"insert\"];\n}\n\nexport interface ProofCommandTable<Command extends Table> {\n readonly table: Command[\"table\"];\n readonly moduleId: ColumnKey<Command>;\n readonly commandId: ColumnKey<Command>;\n readonly kind: ColumnKey<Command>;\n readonly decision: ColumnKey<Command>;\n readonly retentionUntil: ColumnKey<Command>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly commandId: string;\n readonly kind: ProofCommandKind;\n readonly decision: ProofCommandDecision;\n readonly retentionUntilMillis: number;\n }) => Command[\"insert\"];\n}\n\nexport interface RequiredProofConstraints {\n readonly request: \"unique(request.moduleId,request.requestId)\";\n readonly series: \"unique(series.moduleId,series.purpose,series.scopeKey)\";\n readonly proof: \"unique(generation.moduleId,generation.proofId)\";\n readonly delivery: \"unique(generation.moduleId,generation.deliveryId)\";\n readonly continuationId: \"unique(continuation.moduleId,continuation.continuationId)\";\n readonly continuationDigest: \"unique(continuation.moduleId,continuation.digest)\";\n readonly rateScope: \"unique(rateScope.moduleId,rateScope.purpose,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)\";\n readonly abuseEvent: \"unique(abuseEvent.moduleId,abuseEvent.action,abuseEvent.scopeKind,abuseEvent.scopeKey,abuseEvent.commandId)\";\n readonly failureEvent: \"unique(failureEvent.moduleId,failureEvent.seriesKey,failureEvent.commandId)\";\n readonly command: \"unique(command.moduleId,command.commandId)\";\n}\n\nexport const requiredProofConstraints: RequiredProofConstraints = {\n request: \"unique(request.moduleId,request.requestId)\",\n series: \"unique(series.moduleId,series.purpose,series.scopeKey)\",\n proof: \"unique(generation.moduleId,generation.proofId)\",\n delivery: \"unique(generation.moduleId,generation.deliveryId)\",\n continuationId: \"unique(continuation.moduleId,continuation.continuationId)\",\n continuationDigest: \"unique(continuation.moduleId,continuation.digest)\",\n rateScope:\n \"unique(rateScope.moduleId,rateScope.purpose,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)\",\n abuseEvent:\n \"unique(abuseEvent.moduleId,abuseEvent.action,abuseEvent.scopeKind,abuseEvent.scopeKey,abuseEvent.commandId)\",\n failureEvent: \"unique(failureEvent.moduleId,failureEvent.seriesKey,failureEvent.commandId)\",\n command: \"unique(command.moduleId,command.commandId)\",\n};\n\nexport interface ProofConstraintClassifier {\n /** Match only the declared request uniqueness constraint, including wrapped driver errors. */\n readonly isRequestConflict: (cause: unknown) => boolean;\n /** Match only the declared series uniqueness constraint, including wrapped driver errors. */\n readonly isSeriesConflict: (cause: unknown) => boolean;\n /** Match only the declared command uniqueness constraint, including wrapped driver errors. */\n readonly isCommandConflict: (cause: unknown) => boolean;\n}\n\nexport interface ProofD1Clock<Expression extends SqlExpression = SqlExpression> {\n /** Native instant expression evaluated by SQLite inside the submitted batch. */\n readonly engineNow: Expression;\n /** Integer Unix milliseconds expression evaluated inside the submitted batch. */\n readonly engineNowMillis: Expression;\n /** Native instant expression for an engine-time rolling-window cutoff. */\n readonly engineInstantMinus: (millis: number) => Expression;\n /** Native instant expression for a retention/lease deadline from engine time. */\n readonly engineInstantPlus: (millis: number) => Expression;\n}\n\nexport interface ProofPersistenceMapping<\n Request extends Table,\n Series extends Table,\n Generation extends Table,\n Continuation extends Table,\n RateScope extends Table,\n AbuseEvent extends Table,\n FailureEvent extends Table,\n Command extends Table,\n Subject extends Table,\n Identifier extends Table,\n Credential extends Table,\n NativeSubjectId,\n Expression extends SqlExpression = SqlExpression,\n> extends ProofConstraintClassifier {\n readonly request: ProofRequestTable<Request>;\n readonly series: ProofSeriesTable<Series>;\n readonly generation: ProofGenerationTable<Generation>;\n readonly continuation: ProofContinuationTable<Continuation>;\n readonly rateScope: ProofRateScopeTable<RateScope>;\n readonly abuseEvent: ProofAbuseEventTable<AbuseEvent>;\n readonly failureEvent: ProofFailureEventTable<FailureEvent>;\n readonly command: ProofCommandTable<Command>;\n readonly authority: ProofAuthorityTables<\n Subject,\n Identifier,\n Credential,\n NativeSubjectId,\n Expression\n >;\n readonly constraints: RequiredProofConstraints;\n readonly scopeKeys: (input: {\n readonly moduleId: string;\n readonly purpose: ProofPurpose;\n readonly binding: ProofBinding;\n }) => ProofScopeKeys;\n readonly encodeInstant: (epochMillis: number) => unknown;\n readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;\n readonly allocateVersion?: Effect.Effect<ProofVersion, PersistenceMappingError>;\n readonly allocateVersionSync?: () => ProofVersion;\n /** Required by D1 mappings and ignored by interactive targets. */\n readonly d1?: ProofD1Clock<Expression>;\n}\n\nexport type D1ProofPersistenceMapping<\n Request extends Table,\n Series extends Table,\n Generation extends Table,\n Continuation extends Table,\n RateScope extends Table,\n AbuseEvent extends Table,\n FailureEvent extends Table,\n Command extends Table,\n Subject extends Table,\n Identifier extends Table,\n Credential extends Table,\n NativeSubjectId,\n Expression extends SqlExpression = SqlExpression,\n> = ProofPersistenceMapping<\n Request,\n Series,\n Generation,\n Continuation,\n RateScope,\n AbuseEvent,\n FailureEvent,\n Command,\n Subject,\n Identifier,\n Credential,\n NativeSubjectId,\n Expression\n> & {\n readonly d1: ProofD1Clock<Expression>;\n readonly authority: ProofAuthorityTables<\n Subject,\n Identifier,\n Credential,\n NativeSubjectId,\n Expression\n > & {\n readonly identifier: ProofAuthorityTables<\n Subject,\n Identifier,\n Credential,\n NativeSubjectId,\n Expression\n >[\"identifier\"] & {\n /** Synchronous SQL compiler; Effect-based ID conversion has already completed. */\n readonly d1CurrentCondition: (input: ProofAuthorityInput<NativeSubjectId>) => Expression;\n };\n };\n};\n\nexport type AnyProofPersistenceMapping<Expression extends SqlExpression = SqlExpression> =\n ProofPersistenceMapping<\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n AnyTableModel,\n unknown,\n Expression\n >;\n"],"mappings":";AAuRA,MAAa,2BAAqD;CAChE,SAAS;CACT,QAAQ;CACR,OAAO;CACP,UAAU;CACV,gBAAgB;CAChB,oBAAoB;CACpB,WACE;CACF,YACE;CACF,cAAc;CACd,SAAS;AACX"}
|
|
1
|
+
{"version":3,"file":"proof-model.mjs","names":[],"sources":["../../../src/internal/models/proof-model.ts"],"sourcesContent":["import type { ProofIssueRecord } from \"@yielded/auth/Proofs\";\n\nimport type { AnyTableModel, TableModel as Table, SqlExpression } from \"../table-model\";\nimport type { SubjectIdCodec } from \"./common\";\n\ntype Column<T extends Table> = T[\"column\"];\n\n/** One current code per canonical identifier and subject. Binding is canonical\n * Schema JSON, and token comparisons are byte exact even on collated columns. */\nexport interface ProofTable<Proof extends Table> {\n readonly table: Proof[\"table\"];\n readonly moduleId: Column<Proof>;\n readonly purpose: Column<Proof>;\n readonly seriesKey: Column<Proof>;\n readonly proofId: Column<Proof>;\n readonly binding: Column<Proof>;\n readonly verifierKeyId: Column<Proof>;\n readonly verifierDigest: Column<Proof>;\n readonly issuedAt: Column<Proof>;\n readonly expiresAt: Column<Proof>;\n readonly failedAttempts: Column<Proof>;\n readonly encodeInsert: (input: {\n readonly record: ProofIssueRecord;\n readonly seriesKey: string;\n }) => Proof[\"insert\"];\n}\n\nexport interface ProofClock<Expression extends SqlExpression = SqlExpression> {\n readonly encodeInstant: (millis: number) => unknown;\n readonly decodeInstant: (value: unknown) => number;\n /** Integer engine wall-clock milliseconds; PostgreSQL uses clock_timestamp(). */\n readonly engineNowMillis: Expression;\n readonly toMillis: (expression: Expression) => Expression;\n readonly fromMillis: (expression: Expression) => Expression;\n}\n\nexport interface RequiredProofConstraints {\n readonly series: \"unique(proof.moduleId,proof.purpose,proof.seriesKey)\";\n readonly proof: \"unique(proof.moduleId,proof.proofId)\";\n}\n\nexport const requiredProofConstraints: RequiredProofConstraints = {\n series: \"unique(proof.moduleId,proof.purpose,proof.seriesKey)\",\n proof: \"unique(proof.moduleId,proof.proofId)\",\n};\n\nexport interface ProofPersistenceMapping<\n Proof extends Table,\n Subject extends Table,\n NativeSubjectId,\n Expression extends SqlExpression = SqlExpression,\n> {\n readonly proof: ProofTable<Proof>;\n /** Bare subject-bound redemption takes this lock before touching the proof.\n * Protected mutation owners already holding it use the shared locked primitive. */\n readonly subject: {\n readonly table: Subject[\"table\"];\n readonly id: Column<Subject>;\n };\n readonly subjectId: SubjectIdCodec<NativeSubjectId>;\n readonly clock: ProofClock<Expression>;\n readonly constraints: RequiredProofConstraints;\n /** D1 planning reads use the primary engine. */\n readonly d1?: { readonly primary: true };\n}\n\nexport type AnyProofPersistenceMapping<Expression extends SqlExpression = SqlExpression> =\n ProofPersistenceMapping<AnyTableModel, AnyTableModel, unknown, Expression>;\n"],"mappings":";AAyCA,MAAa,2BAAqD;CAChE,QAAQ;CACR,OAAO;AACT"}
|