@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.
Files changed (481) hide show
  1. package/README.md +6 -8
  2. package/dist/Adapter.d.mts +47 -33
  3. package/dist/Adapter.mjs +36 -23
  4. package/dist/OAuthPersistence.d.mts +35 -51
  5. package/dist/OAuthPersistence.mjs +60 -68
  6. package/dist/OAuthPersistence.mjs.map +1 -1
  7. package/dist/index.d.mts +2 -2
  8. package/dist/index.mjs +2 -2
  9. package/dist/internal/browser-login.d.mts +1 -1
  10. package/dist/internal/browser-login.mjs +29 -9
  11. package/dist/internal/browser-login.mjs.map +1 -1
  12. package/dist/internal/configuration.d.mts +13 -8
  13. package/dist/internal/configuration.mjs.map +1 -1
  14. package/dist/internal/crypto.d.mts +1 -0
  15. package/dist/internal/crypto.mjs +1 -1
  16. package/dist/internal/d1-planning.mjs +8 -0
  17. package/dist/internal/d1-planning.mjs.map +1 -0
  18. package/dist/internal/email-native-state.mjs +135 -0
  19. package/dist/internal/email-native-state.mjs.map +1 -0
  20. package/dist/internal/email-native.d.mts +17 -0
  21. package/dist/internal/email-native.mjs +245 -0
  22. package/dist/internal/email-native.mjs.map +1 -0
  23. package/dist/internal/email-policy.mjs +92 -0
  24. package/dist/internal/email-policy.mjs.map +1 -0
  25. package/dist/internal/email-registration-native.d.mts +38 -0
  26. package/dist/internal/email-registration-native.mjs +171 -0
  27. package/dist/internal/email-registration-native.mjs.map +1 -0
  28. package/dist/internal/models/email-model.d.mts +40 -104
  29. package/dist/internal/models/email-model.mjs +3 -5
  30. package/dist/internal/models/email-model.mjs.map +1 -1
  31. package/dist/internal/models/oauth-connected-model.d.mts +44 -213
  32. package/dist/internal/models/oauth-connected-model.mjs +6 -14
  33. package/dist/internal/models/oauth-connected-model.mjs.map +1 -1
  34. package/dist/internal/models/oauth-model.d.mts +95 -244
  35. package/dist/internal/models/oauth-model.mjs +28 -22
  36. package/dist/internal/models/oauth-model.mjs.map +1 -1
  37. package/dist/internal/models/passkey-model.d.mts +11 -147
  38. package/dist/internal/models/passkey-model.mjs +5 -24
  39. package/dist/internal/models/passkey-model.mjs.map +1 -1
  40. package/dist/internal/models/passkey-registration-ceremony-model.d.mts +5 -39
  41. package/dist/internal/models/passkey-write-model.d.mts +17 -75
  42. package/dist/internal/models/passkey-write-model.mjs +1 -7
  43. package/dist/internal/models/passkey-write-model.mjs.map +1 -1
  44. package/dist/internal/models/password-model.d.mts +16 -82
  45. package/dist/internal/models/password-model.mjs +1 -4
  46. package/dist/internal/models/password-model.mjs.map +1 -1
  47. package/dist/internal/models/phone-model.d.mts +86 -0
  48. package/dist/internal/models/phone-model.mjs +10 -0
  49. package/dist/internal/models/phone-model.mjs.map +1 -0
  50. package/dist/internal/models/proof-model.d.mts +43 -272
  51. package/dist/internal/models/proof-model.mjs +2 -10
  52. package/dist/internal/models/proof-model.mjs.map +1 -1
  53. package/dist/internal/models/session-model.d.mts +74 -93
  54. package/dist/internal/models/session-model.mjs +3 -11
  55. package/dist/internal/models/session-model.mjs.map +1 -1
  56. package/dist/internal/models/step-up-model.d.mts +12 -50
  57. package/dist/internal/models/step-up-model.mjs +2 -4
  58. package/dist/internal/models/step-up-model.mjs.map +1 -1
  59. package/dist/internal/models/totp-model.d.mts +76 -0
  60. package/dist/internal/models/totp-model.mjs +10 -0
  61. package/dist/internal/models/totp-model.mjs.map +1 -0
  62. package/dist/internal/native-sql-table.d.mts +21 -4
  63. package/dist/internal/native-sql-table.mjs +9 -5
  64. package/dist/internal/native-sql-table.mjs.map +1 -1
  65. package/dist/internal/oauth/native-accounts.d.mts +17 -0
  66. package/dist/internal/oauth/native-accounts.mjs +290 -0
  67. package/dist/internal/oauth/native-accounts.mjs.map +1 -0
  68. package/dist/internal/oauth/native-connected-state.d.mts +11 -0
  69. package/dist/internal/oauth/native-connected-state.mjs +146 -0
  70. package/dist/internal/oauth/native-connected-state.mjs.map +1 -0
  71. package/dist/internal/oauth/native-connected.d.mts +15 -0
  72. package/dist/internal/oauth/native-connected.mjs +462 -0
  73. package/dist/internal/oauth/native-connected.mjs.map +1 -0
  74. package/dist/internal/oauth/native-flow.mjs +138 -0
  75. package/dist/internal/oauth/native-flow.mjs.map +1 -0
  76. package/dist/internal/oauth/native-layers.d.mts +24 -0
  77. package/dist/internal/oauth/native-layers.mjs +13 -0
  78. package/dist/internal/oauth/native-layers.mjs.map +1 -0
  79. package/dist/internal/oauth/native-mutation.mjs +122 -0
  80. package/dist/internal/oauth/native-mutation.mjs.map +1 -0
  81. package/dist/internal/oauth/native-registration.d.mts +24 -0
  82. package/dist/internal/oauth/native-registration.mjs +328 -0
  83. package/dist/internal/oauth/native-registration.mjs.map +1 -0
  84. package/dist/internal/oauth/native-revocations.d.mts +17 -0
  85. package/dist/internal/oauth/native-revocations.mjs +106 -0
  86. package/dist/internal/oauth/native-revocations.mjs.map +1 -0
  87. package/dist/internal/oauth/native-sign-in.d.mts +17 -0
  88. package/dist/internal/oauth/native-sign-in.mjs +50 -0
  89. package/dist/internal/oauth/native-sign-in.mjs.map +1 -0
  90. package/dist/internal/oauth/native-state.d.mts +10 -0
  91. package/dist/internal/oauth/native-state.mjs +214 -0
  92. package/dist/internal/oauth/native-state.mjs.map +1 -0
  93. package/dist/internal/oauth/state.d.mts +10 -0
  94. package/dist/internal/oauth/state.mjs +3 -27
  95. package/dist/internal/oauth/state.mjs.map +1 -1
  96. package/dist/internal/passkey-actions.mjs +55 -0
  97. package/dist/internal/passkey-actions.mjs.map +1 -0
  98. package/dist/internal/passkey-inputs.mjs +73 -0
  99. package/dist/internal/passkey-inputs.mjs.map +1 -0
  100. package/dist/internal/passkey-managed.mjs +224 -0
  101. package/dist/internal/passkey-managed.mjs.map +1 -0
  102. package/dist/internal/passkey-native-ceremony.d.mts +35 -0
  103. package/dist/internal/passkey-native-ceremony.mjs +38 -0
  104. package/dist/internal/passkey-native-ceremony.mjs.map +1 -0
  105. package/dist/internal/passkey-native-flow.mjs +91 -0
  106. package/dist/internal/passkey-native-flow.mjs.map +1 -0
  107. package/dist/internal/passkey-native-registration.d.mts +10 -0
  108. package/dist/internal/passkey-native-registration.mjs +114 -0
  109. package/dist/internal/passkey-native-registration.mjs.map +1 -0
  110. package/dist/internal/passkey-native-state.d.mts +15 -0
  111. package/dist/internal/passkey-native-state.mjs +186 -0
  112. package/dist/internal/passkey-native-state.mjs.map +1 -0
  113. package/dist/internal/passkey-native-write.d.mts +82 -0
  114. package/dist/internal/passkey-native-write.mjs +330 -0
  115. package/dist/internal/passkey-native-write.mjs.map +1 -0
  116. package/dist/internal/passkey-native.d.mts +835 -0
  117. package/dist/internal/passkey-native.mjs +175 -0
  118. package/dist/internal/passkey-native.mjs.map +1 -0
  119. package/dist/internal/passkey-policy.mjs +115 -0
  120. package/dist/internal/passkey-policy.mjs.map +1 -0
  121. package/dist/internal/password-credentials.mjs +38 -9
  122. package/dist/internal/password-credentials.mjs.map +1 -1
  123. package/dist/internal/password-native.d.mts +14 -0
  124. package/dist/internal/password-native.mjs +292 -0
  125. package/dist/internal/password-native.mjs.map +1 -0
  126. package/dist/internal/password-policy.mjs +93 -0
  127. package/dist/internal/password-policy.mjs.map +1 -0
  128. package/dist/internal/password-registration-native.d.mts +22 -0
  129. package/dist/internal/password-registration-native.mjs +142 -0
  130. package/dist/internal/password-registration-native.mjs.map +1 -0
  131. package/dist/internal/persistence.d.mts +6 -19
  132. package/dist/internal/persistence.mjs +199 -166
  133. package/dist/internal/persistence.mjs.map +1 -1
  134. package/dist/internal/phone-composed.mjs +79 -0
  135. package/dist/internal/phone-composed.mjs.map +1 -0
  136. package/dist/internal/phone-native.d.mts +15 -0
  137. package/dist/internal/phone-native.mjs +354 -0
  138. package/dist/internal/phone-native.mjs.map +1 -0
  139. package/dist/internal/proof-native.d.mts +15 -0
  140. package/dist/internal/proof-native.mjs +289 -0
  141. package/dist/internal/proof-native.mjs.map +1 -0
  142. package/dist/internal/registration.mjs +50 -60
  143. package/dist/internal/registration.mjs.map +1 -1
  144. package/dist/internal/session-native-authority.d.mts +15 -0
  145. package/dist/internal/session-native-authority.mjs +91 -0
  146. package/dist/internal/session-native-authority.mjs.map +1 -0
  147. package/dist/internal/session-native-cleanup.d.mts +14 -0
  148. package/dist/internal/session-native-cleanup.mjs +48 -0
  149. package/dist/internal/session-native-cleanup.mjs.map +1 -0
  150. package/dist/internal/session-native-login.d.mts +15 -0
  151. package/dist/internal/session-native-login.mjs +87 -0
  152. package/dist/internal/session-native-login.mjs.map +1 -0
  153. package/dist/internal/session-native-pending-read.mjs +42 -0
  154. package/dist/internal/session-native-pending-read.mjs.map +1 -0
  155. package/dist/internal/session-native-pending.mjs +134 -0
  156. package/dist/internal/session-native-pending.mjs.map +1 -0
  157. package/dist/internal/session-native-record.mjs +79 -0
  158. package/dist/internal/session-native-record.mjs.map +1 -0
  159. package/dist/internal/session-native-state.mjs +130 -0
  160. package/dist/internal/session-native-state.mjs.map +1 -0
  161. package/dist/internal/session-native-stateful.d.mts +16 -0
  162. package/dist/internal/session-native-stateful.mjs +225 -0
  163. package/dist/internal/session-native-stateful.mjs.map +1 -0
  164. package/dist/internal/session-native-step-up.d.mts +15 -0
  165. package/dist/internal/session-native-step-up.mjs +212 -0
  166. package/dist/internal/session-native-step-up.mjs.map +1 -0
  167. package/dist/internal/session-native-validity.d.mts +15 -0
  168. package/dist/internal/session-native-validity.mjs +97 -0
  169. package/dist/internal/session-native-validity.mjs.map +1 -0
  170. package/dist/internal/session-policy.mjs +29 -0
  171. package/dist/internal/session-policy.mjs.map +1 -0
  172. package/dist/internal/sql-authority.d.mts +16 -0
  173. package/dist/internal/sql-authority.mjs +32 -0
  174. package/dist/internal/sql-authority.mjs.map +1 -0
  175. package/dist/internal/sql-change.mjs +21 -0
  176. package/dist/internal/sql-change.mjs.map +1 -0
  177. package/dist/internal/sql-cleanup.mjs +35 -0
  178. package/dist/internal/sql-cleanup.mjs.map +1 -0
  179. package/dist/internal/sql-commit.d.mts +72 -0
  180. package/dist/internal/sql-commit.mjs +176 -0
  181. package/dist/internal/sql-commit.mjs.map +1 -0
  182. package/dist/internal/sql-expression.d.mts +17 -0
  183. package/dist/internal/sql-expression.mjs +49 -0
  184. package/dist/internal/sql-expression.mjs.map +1 -0
  185. package/dist/internal/sql-oauth-connected-model.d.mts +7 -23
  186. package/dist/internal/sql-oauth-model.d.mts +27 -52
  187. package/dist/internal/sql-oauth-model.mjs +3 -4
  188. package/dist/internal/sql-oauth-model.mjs.map +1 -1
  189. package/dist/internal/sql-persistence.mjs +5 -9
  190. package/dist/internal/sql-persistence.mjs.map +1 -1
  191. package/dist/internal/sql-storage-validation.mjs +1 -2
  192. package/dist/internal/sql-storage-validation.mjs.map +1 -1
  193. package/dist/internal/sql-table.d.mts +3 -16
  194. package/dist/internal/sql-table.mjs +21 -42
  195. package/dist/internal/sql-table.mjs.map +1 -1
  196. package/dist/internal/standalone.mjs +2 -3
  197. package/dist/internal/standalone.mjs.map +1 -1
  198. package/dist/internal/step-up-state.mjs +5 -8
  199. package/dist/internal/step-up-state.mjs.map +1 -1
  200. package/dist/internal/storage-clock.mjs +44 -0
  201. package/dist/internal/storage-clock.mjs.map +1 -0
  202. package/dist/internal/storage-mapping.d.mts +11 -8
  203. package/dist/internal/storage-mapping.mjs +88 -302
  204. package/dist/internal/storage-mapping.mjs.map +1 -1
  205. package/dist/internal/storage-plans.mjs +15 -73
  206. package/dist/internal/storage-plans.mjs.map +1 -1
  207. package/dist/internal/storage-tables.d.mts +37 -520
  208. package/dist/internal/storage-tables.mjs +31 -211
  209. package/dist/internal/storage-tables.mjs.map +1 -1
  210. package/dist/internal/storage-validation.d.mts +1 -6
  211. package/dist/internal/storage-validation.mjs +1 -42
  212. package/dist/internal/storage-validation.mjs.map +1 -1
  213. package/dist/internal/table-model.d.mts +21 -0
  214. package/dist/internal/totp-native.d.mts +15 -0
  215. package/dist/internal/totp-native.mjs +401 -0
  216. package/dist/internal/totp-native.mjs.map +1 -0
  217. package/package.json +1 -1
  218. package/src/Adapter.ts +143 -199
  219. package/src/OAuthPersistence.ts +128 -271
  220. package/src/index.ts +1 -1
  221. package/src/internal/browser-login.ts +54 -24
  222. package/src/internal/configuration.ts +16 -31
  223. package/src/internal/d1-planning.ts +7 -0
  224. package/src/internal/email-native-state.ts +247 -0
  225. package/src/internal/email-native.ts +514 -0
  226. package/src/internal/email-policy.ts +235 -0
  227. package/src/internal/email-registration-native.ts +386 -0
  228. package/src/internal/models/email-model.ts +76 -214
  229. package/src/internal/models/oauth-connected-model.ts +50 -288
  230. package/src/internal/models/oauth-model.ts +147 -368
  231. package/src/internal/models/passkey-model.ts +11 -208
  232. package/src/internal/models/passkey-registration-ceremony-model.ts +6 -60
  233. package/src/internal/models/passkey-write-model.ts +14 -95
  234. package/src/internal/models/password-model.ts +28 -148
  235. package/src/internal/models/phone-model.ts +110 -0
  236. package/src/internal/models/proof-model.ts +48 -404
  237. package/src/internal/models/session-model.ts +102 -200
  238. package/src/internal/models/step-up-model.ts +17 -96
  239. package/src/internal/models/totp-model.ts +82 -0
  240. package/src/internal/native-sql-table.ts +32 -11
  241. package/src/internal/oauth/native-accounts.ts +576 -0
  242. package/src/internal/oauth/native-connected-state.ts +288 -0
  243. package/src/internal/oauth/native-connected.ts +888 -0
  244. package/src/internal/oauth/native-flow.ts +253 -0
  245. package/src/internal/oauth/native-layers.ts +83 -0
  246. package/src/internal/oauth/native-mutation.ts +222 -0
  247. package/src/internal/oauth/native-registration.ts +545 -0
  248. package/src/internal/oauth/native-revocations.ts +190 -0
  249. package/src/internal/oauth/native-sign-in.ts +111 -0
  250. package/src/internal/oauth/native-state.ts +346 -0
  251. package/src/internal/oauth/state.ts +2 -70
  252. package/src/internal/passkey-actions.ts +70 -0
  253. package/src/internal/passkey-inputs.ts +56 -0
  254. package/src/internal/passkey-managed.ts +360 -0
  255. package/src/internal/passkey-native-ceremony.ts +66 -0
  256. package/src/internal/passkey-native-flow.ts +140 -0
  257. package/src/internal/passkey-native-registration.ts +221 -0
  258. package/src/internal/passkey-native-state.ts +335 -0
  259. package/src/internal/passkey-native-write.ts +611 -0
  260. package/src/internal/passkey-native.ts +372 -0
  261. package/src/internal/passkey-policy.ts +246 -0
  262. package/src/internal/password-credentials.ts +52 -10
  263. package/src/internal/password-native.ts +571 -0
  264. package/src/internal/password-policy.ts +307 -0
  265. package/src/internal/password-registration-native.ts +322 -0
  266. package/src/internal/persistence.ts +336 -290
  267. package/src/internal/phone-composed.ts +86 -0
  268. package/src/internal/phone-native.ts +659 -0
  269. package/src/internal/proof-native.ts +448 -0
  270. package/src/internal/registration.ts +96 -143
  271. package/src/internal/session-native-authority.ts +247 -0
  272. package/src/internal/session-native-cleanup.ts +65 -0
  273. package/src/internal/session-native-login.ts +205 -0
  274. package/src/internal/session-native-pending-read.ts +68 -0
  275. package/src/internal/session-native-pending.ts +223 -0
  276. package/src/internal/session-native-record.ts +141 -0
  277. package/src/internal/session-native-state.ts +259 -0
  278. package/src/internal/session-native-stateful.ts +512 -0
  279. package/src/internal/session-native-step-up.ts +450 -0
  280. package/src/internal/session-native-validity.ts +208 -0
  281. package/src/internal/session-policy.ts +59 -0
  282. package/src/internal/sql-authority.ts +56 -0
  283. package/src/internal/sql-change.ts +38 -0
  284. package/src/internal/sql-cleanup.ts +56 -0
  285. package/src/internal/sql-commit.ts +435 -0
  286. package/src/internal/sql-expression.ts +94 -0
  287. package/src/internal/sql-metadata.ts +100 -0
  288. package/src/internal/sql-oauth-connected-model.ts +6 -95
  289. package/src/internal/sql-oauth-model.ts +31 -134
  290. package/src/internal/sql-persistence.ts +2 -6
  291. package/src/internal/sql-storage-validation.ts +1 -2
  292. package/src/internal/sql-table.ts +19 -52
  293. package/src/internal/standalone.ts +2 -11
  294. package/src/internal/step-up-state.ts +4 -17
  295. package/src/internal/storage-clock.ts +58 -0
  296. package/src/internal/storage-mapping.ts +125 -340
  297. package/src/internal/storage-plans.ts +14 -80
  298. package/src/internal/storage-tables.ts +28 -212
  299. package/src/internal/storage-validation.ts +0 -58
  300. package/src/internal/table-model.ts +24 -0
  301. package/src/internal/totp-native.ts +701 -0
  302. package/dist/internal/PasswordPreparedPostconditions.d.mts +0 -22
  303. package/dist/internal/PasswordPreparedPostconditions.mjs +0 -12
  304. package/dist/internal/PasswordPreparedPostconditions.mjs.map +0 -1
  305. package/dist/internal/authority-snapshot.mjs +0 -53
  306. package/dist/internal/authority-snapshot.mjs.map +0 -1
  307. package/dist/internal/email-kernel.d.mts +0 -276
  308. package/dist/internal/email-kernel.mjs +0 -497
  309. package/dist/internal/email-kernel.mjs.map +0 -1
  310. package/dist/internal/models/passkey-registration-ceremony-model.mjs +0 -18
  311. package/dist/internal/models/passkey-registration-ceremony-model.mjs.map +0 -1
  312. package/dist/internal/oauth/accounts.d.mts +0 -8
  313. package/dist/internal/oauth/accounts.mjs +0 -379
  314. package/dist/internal/oauth/accounts.mjs.map +0 -1
  315. package/dist/internal/oauth/connected-access.d.mts +0 -9
  316. package/dist/internal/oauth/connected-access.mjs +0 -229
  317. package/dist/internal/oauth/connected-access.mjs.map +0 -1
  318. package/dist/internal/oauth/connected-collection.d.mts +0 -7
  319. package/dist/internal/oauth/connected-collection.mjs +0 -214
  320. package/dist/internal/oauth/connected-collection.mjs.map +0 -1
  321. package/dist/internal/oauth/connected-custody.d.mts +0 -6
  322. package/dist/internal/oauth/connected-custody.mjs +0 -165
  323. package/dist/internal/oauth/connected-custody.mjs.map +0 -1
  324. package/dist/internal/oauth/connected-flow.d.mts +0 -7
  325. package/dist/internal/oauth/connected-flow.mjs +0 -324
  326. package/dist/internal/oauth/connected-flow.mjs.map +0 -1
  327. package/dist/internal/oauth/connected-input.mjs +0 -122
  328. package/dist/internal/oauth/connected-input.mjs.map +0 -1
  329. package/dist/internal/oauth/connected-keys.d.mts +0 -2
  330. package/dist/internal/oauth/connected-keys.mjs +0 -22
  331. package/dist/internal/oauth/connected-keys.mjs.map +0 -1
  332. package/dist/internal/oauth/connected-maintenance.d.mts +0 -9
  333. package/dist/internal/oauth/connected-maintenance.mjs +0 -226
  334. package/dist/internal/oauth/connected-maintenance.mjs.map +0 -1
  335. package/dist/internal/oauth/connected-management.d.mts +0 -9
  336. package/dist/internal/oauth/connected-management.mjs +0 -243
  337. package/dist/internal/oauth/connected-management.mjs.map +0 -1
  338. package/dist/internal/oauth/connected-reference.mjs +0 -63
  339. package/dist/internal/oauth/connected-reference.mjs.map +0 -1
  340. package/dist/internal/oauth/connected-settlement.d.mts +0 -8
  341. package/dist/internal/oauth/connected-settlement.mjs +0 -141
  342. package/dist/internal/oauth/connected-settlement.mjs.map +0 -1
  343. package/dist/internal/oauth/connected-sign-in.d.mts +0 -10
  344. package/dist/internal/oauth/connected-sign-in.mjs +0 -281
  345. package/dist/internal/oauth/connected-sign-in.mjs.map +0 -1
  346. package/dist/internal/oauth/connected-state.d.mts +0 -14
  347. package/dist/internal/oauth/connected-state.mjs +0 -469
  348. package/dist/internal/oauth/connected-state.mjs.map +0 -1
  349. package/dist/internal/oauth/connected-target.d.mts +0 -21
  350. package/dist/internal/oauth/connected-target.mjs +0 -117
  351. package/dist/internal/oauth/connected-target.mjs.map +0 -1
  352. package/dist/internal/oauth/flow.d.mts +0 -5
  353. package/dist/internal/oauth/flow.mjs +0 -279
  354. package/dist/internal/oauth/flow.mjs.map +0 -1
  355. package/dist/internal/oauth/input.mjs +0 -127
  356. package/dist/internal/oauth/input.mjs.map +0 -1
  357. package/dist/internal/oauth/owner.d.mts +0 -10
  358. package/dist/internal/oauth/owner.mjs +0 -10
  359. package/dist/internal/oauth/owner.mjs.map +0 -1
  360. package/dist/internal/oauth/query-compiler.d.mts +0 -7
  361. package/dist/internal/oauth/query-compiler.mjs +0 -9
  362. package/dist/internal/oauth/query-compiler.mjs.map +0 -1
  363. package/dist/internal/oauth/registration.d.mts +0 -7
  364. package/dist/internal/oauth/registration.mjs +0 -393
  365. package/dist/internal/oauth/registration.mjs.map +0 -1
  366. package/dist/internal/oauth/target.d.mts +0 -31
  367. package/dist/internal/oauth/target.mjs +0 -273
  368. package/dist/internal/oauth/target.mjs.map +0 -1
  369. package/dist/internal/oauth-kernel.d.mts +0 -1423
  370. package/dist/internal/oauth-kernel.mjs +0 -187
  371. package/dist/internal/oauth-kernel.mjs.map +0 -1
  372. package/dist/internal/passkey/admission.d.mts +0 -6
  373. package/dist/internal/passkey/admission.mjs +0 -220
  374. package/dist/internal/passkey/admission.mjs.map +0 -1
  375. package/dist/internal/passkey/credentials.d.mts +0 -14
  376. package/dist/internal/passkey/credentials.mjs +0 -249
  377. package/dist/internal/passkey/credentials.mjs.map +0 -1
  378. package/dist/internal/passkey/enrollment.mjs +0 -138
  379. package/dist/internal/passkey/enrollment.mjs.map +0 -1
  380. package/dist/internal/passkey/flow.d.mts +0 -21
  381. package/dist/internal/passkey/flow.mjs +0 -452
  382. package/dist/internal/passkey/flow.mjs.map +0 -1
  383. package/dist/internal/passkey/management.mjs +0 -231
  384. package/dist/internal/passkey/management.mjs.map +0 -1
  385. package/dist/internal/passkey/registration-ceremony.d.mts +0 -9
  386. package/dist/internal/passkey/registration-ceremony.mjs +0 -129
  387. package/dist/internal/passkey/registration-ceremony.mjs.map +0 -1
  388. package/dist/internal/passkey/registration-custody.d.mts +0 -2
  389. package/dist/internal/passkey/registration-custody.mjs +0 -52
  390. package/dist/internal/passkey/registration-custody.mjs.map +0 -1
  391. package/dist/internal/passkey/registration-write.mjs +0 -211
  392. package/dist/internal/passkey/registration-write.mjs.map +0 -1
  393. package/dist/internal/passkey/state.d.mts +0 -10
  394. package/dist/internal/passkey/state.mjs +0 -234
  395. package/dist/internal/passkey/state.mjs.map +0 -1
  396. package/dist/internal/passkey/target.d.mts +0 -20
  397. package/dist/internal/passkey/target.mjs +0 -200
  398. package/dist/internal/passkey/target.mjs.map +0 -1
  399. package/dist/internal/passkey/write-state.d.mts +0 -17
  400. package/dist/internal/passkey/write-state.mjs +0 -346
  401. package/dist/internal/passkey/write-state.mjs.map +0 -1
  402. package/dist/internal/passkey/write-target.mjs +0 -192
  403. package/dist/internal/passkey/write-target.mjs.map +0 -1
  404. package/dist/internal/passkey-kernel.d.mts +0 -6045
  405. package/dist/internal/passkey-kernel.mjs +0 -49
  406. package/dist/internal/passkey-kernel.mjs.map +0 -1
  407. package/dist/internal/passkeys.d.mts +0 -7
  408. package/dist/internal/passkeys.mjs +0 -387
  409. package/dist/internal/passkeys.mjs.map +0 -1
  410. package/dist/internal/password-credentials.d.mts +0 -11
  411. package/dist/internal/password-kernel.d.mts +0 -278
  412. package/dist/internal/password-kernel.mjs +0 -508
  413. package/dist/internal/password-kernel.mjs.map +0 -1
  414. package/dist/internal/phone-kernel.d.mts +0 -162
  415. package/dist/internal/phone-kernel.mjs +0 -437
  416. package/dist/internal/phone-kernel.mjs.map +0 -1
  417. package/dist/internal/proof-kernel.d.mts +0 -94
  418. package/dist/internal/proof-kernel.mjs +0 -624
  419. package/dist/internal/proof-kernel.mjs.map +0 -1
  420. package/dist/internal/query-operations.d.mts +0 -68
  421. package/dist/internal/session-kernel.d.mts +0 -62
  422. package/dist/internal/session-kernel.mjs +0 -820
  423. package/dist/internal/session-kernel.mjs.map +0 -1
  424. package/dist/internal/sql-oauth-connected-model.mjs +0 -7
  425. package/dist/internal/sql-oauth-connected-model.mjs.map +0 -1
  426. package/dist/internal/sql-query.d.mts +0 -12
  427. package/dist/internal/sql-query.mjs +0 -206
  428. package/dist/internal/sql-query.mjs.map +0 -1
  429. package/dist/internal/step-up-state.d.mts +0 -49
  430. package/dist/internal/transaction-execution-kernel.d.mts +0 -37
  431. package/dist/internal/transaction-execution-kernel.mjs +0 -120
  432. package/dist/internal/transaction-execution-kernel.mjs.map +0 -1
  433. package/dist/internal/transaction-kernel.d.mts +0 -81
  434. package/dist/internal/transaction-kernel.mjs +0 -264
  435. package/dist/internal/transaction-kernel.mjs.map +0 -1
  436. package/src/internal/PasswordPreparedPostconditions.ts +0 -30
  437. package/src/internal/authority-snapshot.ts +0 -91
  438. package/src/internal/email-kernel.ts +0 -1555
  439. package/src/internal/oauth/accounts.ts +0 -838
  440. package/src/internal/oauth/connected-access.ts +0 -388
  441. package/src/internal/oauth/connected-collection.ts +0 -345
  442. package/src/internal/oauth/connected-custody.ts +0 -308
  443. package/src/internal/oauth/connected-flow.ts +0 -562
  444. package/src/internal/oauth/connected-input.ts +0 -147
  445. package/src/internal/oauth/connected-keys.ts +0 -31
  446. package/src/internal/oauth/connected-maintenance.ts +0 -379
  447. package/src/internal/oauth/connected-management.ts +0 -391
  448. package/src/internal/oauth/connected-reference.ts +0 -135
  449. package/src/internal/oauth/connected-settlement.ts +0 -278
  450. package/src/internal/oauth/connected-sign-in.ts +0 -472
  451. package/src/internal/oauth/connected-state.ts +0 -924
  452. package/src/internal/oauth/connected-target.ts +0 -307
  453. package/src/internal/oauth/flow.ts +0 -505
  454. package/src/internal/oauth/input.ts +0 -201
  455. package/src/internal/oauth/owner.ts +0 -22
  456. package/src/internal/oauth/query-compiler.ts +0 -15
  457. package/src/internal/oauth/registration.ts +0 -676
  458. package/src/internal/oauth/target.ts +0 -803
  459. package/src/internal/oauth-kernel.ts +0 -294
  460. package/src/internal/passkey/admission.ts +0 -368
  461. package/src/internal/passkey/credentials.ts +0 -511
  462. package/src/internal/passkey/enrollment.ts +0 -326
  463. package/src/internal/passkey/flow.ts +0 -1062
  464. package/src/internal/passkey/management.ts +0 -426
  465. package/src/internal/passkey/registration-ceremony.ts +0 -283
  466. package/src/internal/passkey/registration-custody.ts +0 -91
  467. package/src/internal/passkey/registration-write.ts +0 -426
  468. package/src/internal/passkey/state.ts +0 -351
  469. package/src/internal/passkey/target.ts +0 -598
  470. package/src/internal/passkey/write-state.ts +0 -678
  471. package/src/internal/passkey/write-target.ts +0 -450
  472. package/src/internal/passkey-kernel.ts +0 -112
  473. package/src/internal/passkeys.ts +0 -652
  474. package/src/internal/password-kernel.ts +0 -1522
  475. package/src/internal/phone-kernel.ts +0 -872
  476. package/src/internal/proof-kernel.ts +0 -1992
  477. package/src/internal/query-operations.ts +0 -91
  478. package/src/internal/session-kernel.ts +0 -2406
  479. package/src/internal/sql-query.ts +0 -304
  480. package/src/internal/transaction-execution-kernel.ts +0 -335
  481. package/src/internal/transaction-kernel.ts +0 -603
@@ -1,17 +1,17 @@
1
1
  import type { TokenDigest } from "@yielded/auth/Schema";
2
- import {
3
- type AuthenticationRequirement,
4
- type AuthenticationEvidence,
5
- type SecurityRevision,
6
- type SessionId,
7
- type PendingAuthenticationRecord,
8
- type PendingAuthenticationState,
9
- type StatefulSessionRecord,
2
+ import type {
3
+ AuthenticationRequirement,
4
+ SecurityRevision,
5
+ SessionId,
6
+ AuthenticationFlowId,
7
+ PendingAuthenticationRecord,
8
+ StatefulSessionRecord,
10
9
  } from "@yielded/auth/Sessions";
11
10
  import type { DateTime, Effect } from "effect";
12
11
 
13
- import type { TableModel as Table, SqlExpression } from "../query-operations";
12
+ import type { TableModel as Table, SqlExpression } from "../table-model";
14
13
  import type { PersistenceMappingError, SubjectIdCodec } from "./common";
14
+ import type { ProofClock } from "./proof-model";
15
15
 
16
16
  type ColumnKey<T extends Table> = T["column"];
17
17
 
@@ -27,10 +27,14 @@ export interface SessionSubjectTables<Subject extends Table, NativeId> {
27
27
  readonly id: ColumnKey<Subject>;
28
28
  readonly status: ColumnKey<Subject>;
29
29
  readonly securityRevision: ColumnKey<Subject>;
30
+ readonly activeStatusValue: unknown;
30
31
  readonly isActiveStatus: (value: unknown) => boolean;
31
32
  readonly decodeRequirement: (
32
33
  row: Subject["select"],
33
34
  ) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
35
+ /** Required for D1 authority writes. Declare every mutable subject input of
36
+ * decodeRequirement; [] explicitly declares a constant requirement. */
37
+ readonly requirementColumns?: ReadonlyArray<ColumnKey<Subject>>;
34
38
  readonly nextSecurityRevision?: (
35
39
  current: SecurityRevision,
36
40
  ) => Effect.Effect<SecurityRevision, PersistenceMappingError>;
@@ -49,53 +53,34 @@ export interface SessionAuthorityTables<
49
53
  readonly subjectId: ColumnKey<Credential>;
50
54
  readonly credentialId: ColumnKey<Credential>;
51
55
  readonly revision: ColumnKey<Credential>;
52
- /** Optional consumer status predicate; omitted means every stored credential row is active. */
56
+ /** Omitted status means every row is an active credential. */
53
57
  readonly status?: ColumnKey<Credential>;
58
+ readonly activeStatusValue?: unknown;
54
59
  readonly isActiveStatus?: (value: unknown) => boolean;
55
60
  };
56
61
  }
57
62
 
58
- export interface SessionFlowTables<Flow extends Table, NativeSubjectId> {
59
- readonly flow: {
60
- readonly table: Flow["table"];
61
- readonly flowId: ColumnKey<Flow>;
62
- readonly subjectId: ColumnKey<Flow>;
63
- readonly state: ColumnKey<Flow>;
64
- readonly pendingDigest: ColumnKey<Flow>;
65
- readonly dedupUntil: ColumnKey<Flow>;
66
- readonly pendingStateValue: unknown;
67
- readonly establishedStateValue: unknown;
68
- readonly encodeInstant: (instant: DateTime.Utc) => unknown;
69
- readonly decodeInstant: (
70
- native: unknown,
71
- ) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
72
- readonly encodePendingInsert: (input: {
73
- readonly evidence: AuthenticationEvidence;
74
- readonly subjectId: NativeSubjectId;
75
- readonly pendingDigest: TokenDigest;
76
- readonly dedupUntil: DateTime.Utc;
77
- }) => Flow["insert"];
78
- readonly encodeEstablishedInsert: (input: {
79
- readonly evidence: AuthenticationEvidence;
80
- readonly subjectId: NativeSubjectId;
81
- readonly dedupUntil: DateTime.Utc;
82
- }) => Flow["insert"];
83
- };
63
+ export interface SessionExecution<Expression extends SqlExpression = SqlExpression> {
64
+ /** Exact session module scope for pending rows and revocation tombstones. */
65
+ readonly moduleId: string;
66
+ readonly clock: ProofClock<Expression>;
67
+ /** D1 mappings must use the authoritative primary database. */
68
+ readonly d1?: { readonly primary: true };
69
+ /** Match only the declared unique keys, never generic SQL failures. */
70
+ readonly isConstraintConflict: (cause: unknown) => boolean;
84
71
  }
85
72
 
86
73
  export interface StatefulSessionTables<
87
74
  Claims,
88
75
  Session extends Table,
89
- Flow extends Table,
90
76
  NativeSubjectId,
91
77
  NativeSessionId,
92
- > extends SessionFlowTables<Flow, NativeSubjectId> {
78
+ > {
93
79
  readonly session: {
94
80
  readonly table: Session["table"];
95
81
  readonly sessionId: ColumnKey<Session>;
96
82
  readonly subjectId: ColumnKey<Session>;
97
83
  readonly digest: ColumnKey<Session>;
98
- readonly version: ColumnKey<Session>;
99
84
  readonly securityRevision: ColumnKey<Session>;
100
85
  readonly issuedAt: ColumnKey<Session>;
101
86
  readonly expiresAt: ColumnKey<Session>;
@@ -103,60 +88,69 @@ export interface StatefulSessionTables<
103
88
  readonly encodeInstant: (instant: DateTime.Utc) => unknown;
104
89
  readonly encodeInsert: (
105
90
  record: StatefulSessionRecord<Claims>,
106
- ids: {
107
- readonly subjectId: NativeSubjectId;
108
- readonly sessionId: NativeSessionId;
109
- },
91
+ ids: { readonly subjectId: NativeSubjectId; readonly sessionId: NativeSessionId },
110
92
  ) => Session["insert"];
111
- /** Persist the prepared credentialVersion and retain exact private provenance. */
93
+ /** Replace prepared metadata and retain exact private provenance. Digest binds the immutable source metadata. */
112
94
  readonly encodeRotation: (record: StatefulSessionRecord<Claims>) => Partial<Session["insert"]>;
113
95
  readonly decode: (
114
96
  row: Session["select"],
115
97
  ) => Effect.Effect<StatefulSessionRecord<Claims>, PersistenceMappingError>;
116
98
  readonly allocateId?: Effect.Effect<NativeSessionId, PersistenceMappingError>;
117
99
  readonly allocateIdSync?: () => NativeSessionId;
118
- readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
119
- readonly allocateVersionSync?: () => SecurityRevision;
120
100
  };
121
101
  readonly sessionId: SessionIdCodec<NativeSessionId>;
122
102
  }
123
103
 
124
- export interface PendingAuthenticationTables<
125
- Claims,
126
- Pending extends Table,
127
- Flow extends Table,
128
- NativeSubjectId,
129
- > extends SessionFlowTables<Flow, NativeSubjectId> {
104
+ export interface SessionPendingInsert<NativeId> {
105
+ readonly moduleId: string;
106
+ readonly kind: "Login" | "StepUp";
107
+ readonly digest: TokenDigest;
108
+ readonly version: SecurityRevision;
109
+ readonly flowId: AuthenticationFlowId;
110
+ readonly subjectId: NativeId;
111
+ readonly bindingDigest: TokenDigest;
112
+ readonly snapshot: string;
113
+ readonly expiresAt: DateTime.Utc;
114
+ readonly attemptLimit: number;
115
+ }
116
+
117
+ /** One physical table and one SQL owner for Login and StepUp. The adapter sets
118
+ * every guard column and binds kind before decoding, charging or consuming. */
119
+ export interface SessionPendingTables<Pending extends Table, NativeSubjectId> {
130
120
  readonly pending: {
131
121
  readonly table: Pending["table"];
122
+ readonly moduleId: ColumnKey<Pending>;
123
+ readonly kind: ColumnKey<Pending>;
132
124
  readonly digest: ColumnKey<Pending>;
133
125
  readonly version: ColumnKey<Pending>;
134
126
  readonly flowId: ColumnKey<Pending>;
135
127
  readonly subjectId: ColumnKey<Pending>;
136
128
  readonly bindingDigest: ColumnKey<Pending>;
129
+ readonly snapshot: ColumnKey<Pending>;
137
130
  readonly expiresAt: ColumnKey<Pending>;
138
131
  readonly attemptLimit: ColumnKey<Pending>;
139
132
  readonly failedAttempts: ColumnKey<Pending>;
140
133
  readonly consumed: ColumnKey<Pending>;
141
134
  readonly encodeInstant: (instant: DateTime.Utc) => unknown;
142
- readonly encodeInsert: (
135
+ readonly encodeInsert: (input: SessionPendingInsert<NativeSubjectId>) => Pending["insert"];
136
+ readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
137
+ readonly allocateVersionSync?: () => SecurityRevision;
138
+ };
139
+ }
140
+
141
+ export interface PendingAuthenticationTables<
142
+ Claims,
143
+ Pending extends Table,
144
+ NativeSubjectId,
145
+ > extends SessionPendingTables<Pending, NativeSubjectId> {
146
+ /** Canonical JSON of the full record; the consumer Schema owns Claims encoding. */
147
+ readonly login: {
148
+ readonly encode: (
143
149
  record: PendingAuthenticationRecord<Claims>,
144
- input: {
145
- readonly subjectId: NativeSubjectId;
146
- readonly failedAttempts: 0;
147
- readonly consumed: false;
148
- },
149
- ) => Pending["insert"];
150
+ ) => Effect.Effect<string, PersistenceMappingError>;
150
151
  readonly decode: (
151
- row: Pending["select"],
152
+ snapshot: unknown,
152
153
  ) => Effect.Effect<PendingAuthenticationRecord<Claims>, PersistenceMappingError>;
153
- /** Decodes original evidence and storage guards only. The internal pending
154
- * context lookup must not execute unrelated consumer Claims transforms. */
155
- readonly decodeContext: (
156
- row: Pending["select"],
157
- ) => Effect.Effect<PendingAuthenticationState, PersistenceMappingError>;
158
- readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
159
- readonly allocateVersionSync?: () => SecurityRevision;
160
154
  };
161
155
  }
162
156
 
@@ -167,6 +161,7 @@ export interface SignedSessionValidityTables<
167
161
  > {
168
162
  readonly tombstone: {
169
163
  readonly table: Tombstone["table"];
164
+ readonly moduleId: ColumnKey<Tombstone>;
170
165
  readonly subjectId: ColumnKey<Tombstone>;
171
166
  readonly sessionId: ColumnKey<Tombstone>;
172
167
  readonly absoluteExpiresAt: ColumnKey<Tombstone>;
@@ -175,6 +170,7 @@ export interface SignedSessionValidityTables<
175
170
  native: unknown,
176
171
  ) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
177
172
  readonly encodeInsert: (input: {
173
+ readonly moduleId: string;
178
174
  readonly subjectId: NativeSubjectId;
179
175
  readonly sessionId: NativeSessionId;
180
176
  readonly absoluteExpiresAt: DateTime.Utc;
@@ -183,69 +179,42 @@ export interface SignedSessionValidityTables<
183
179
  readonly sessionId: SessionIdCodec<NativeSessionId>;
184
180
  }
185
181
 
186
- export interface RequiredSessionConstraints {
187
- readonly sessionDigest: "unique(session.digest)";
188
- readonly flowId: "unique(flow.flowId)";
189
- }
190
-
191
- export interface RequiredPendingAuthenticationConstraints {
192
- readonly pendingDigest: "unique(pending.digest)";
193
- readonly pendingFlow: "unique(pending.flowId)";
194
- readonly flowId: "unique(flow.flowId)";
195
- }
182
+ export const requiredSessionConstraints = { sessionDigest: "unique(session.digest)" } as const;
196
183
 
197
- export interface RequiredStatefulPendingConstraints
198
- extends RequiredSessionConstraints, RequiredPendingAuthenticationConstraints {}
199
-
200
- export interface RequiredSignedValidityConstraints {
201
- readonly tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)";
202
- }
203
-
204
- export const requiredSessionConstraints: RequiredSessionConstraints = {
205
- sessionDigest: "unique(session.digest)",
206
- flowId: "unique(flow.flowId)",
207
- };
208
-
209
- export const requiredPendingAuthenticationConstraints: RequiredPendingAuthenticationConstraints = {
184
+ export const requiredPendingAuthenticationConstraints = {
210
185
  pendingDigest: "unique(pending.digest)",
211
- pendingFlow: "unique(pending.flowId)",
212
- flowId: "unique(flow.flowId)",
213
- };
186
+ } as const;
214
187
 
215
- export const requiredStatefulPendingConstraints: RequiredStatefulPendingConstraints = {
188
+ export const requiredStatefulPendingConstraints = {
216
189
  ...requiredSessionConstraints,
217
190
  ...requiredPendingAuthenticationConstraints,
218
- };
191
+ } as const;
219
192
 
220
- export const requiredSignedValidityConstraints: RequiredSignedValidityConstraints = {
221
- tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)",
222
- };
193
+ export const requiredSignedValidityConstraints = {
194
+ tombstoneOwner: "unique(tombstone.moduleId,tombstone.subjectId,tombstone.sessionId)",
195
+ } as const;
223
196
 
224
- export interface SessionConstraintClassifier {
225
- /**
226
- * Match only the named unique constraints declared by this mapping. Broad
227
- * SQL/constraint classifiers can relabel application or NOT NULL failures as
228
- * a domain conflict.
229
- */
230
- readonly isConstraintConflict: (cause: unknown) => boolean;
231
- }
197
+ export type RequiredSessionConstraints = typeof requiredSessionConstraints;
198
+
199
+ export type RequiredPendingAuthenticationConstraints =
200
+ typeof requiredPendingAuthenticationConstraints;
201
+
202
+ export type RequiredStatefulPendingConstraints = typeof requiredStatefulPendingConstraints;
203
+ export type RequiredSignedValidityConstraints = typeof requiredSignedValidityConstraints;
232
204
 
233
205
  export type AuthenticationAuthorityMapping<
234
206
  Claims,
235
207
  Subject extends Table,
236
208
  Credential extends Table,
237
- Flow extends Table,
238
209
  Pending extends Table,
239
210
  NativeSubjectId,
211
+ Expression extends SqlExpression = SqlExpression,
240
212
  > = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
241
- SessionConstraintClassifier &
213
+ SessionExecution<Expression> &
242
214
  (
215
+ | { readonly pending?: undefined }
243
216
  | {
244
- /** Omit for single-factor authority installations. Pending input then fails closed. */
245
- readonly pending?: undefined;
246
- }
247
- | {
248
- readonly pending: PendingAuthenticationTables<Claims, Pending, Flow, NativeSubjectId>;
217
+ readonly pending: PendingAuthenticationTables<Claims, Pending, NativeSubjectId>;
249
218
  readonly constraints: RequiredPendingAuthenticationConstraints;
250
219
  }
251
220
  );
@@ -255,26 +224,17 @@ export type StatefulSessionMapping<
255
224
  Subject extends Table,
256
225
  Credential extends Table,
257
226
  Session extends Table,
258
- Flow extends Table,
259
227
  Pending extends Table,
260
228
  NativeSubjectId,
261
229
  NativeSessionId,
230
+ Expression extends SqlExpression = SqlExpression,
262
231
  > = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
263
- StatefulSessionTables<Claims, Session, Flow, NativeSubjectId, NativeSessionId> &
264
- SessionConstraintClassifier &
232
+ StatefulSessionTables<Claims, Session, NativeSubjectId, NativeSessionId> &
233
+ SessionExecution<Expression> &
265
234
  (
235
+ | { readonly pending?: undefined; readonly constraints: RequiredSessionConstraints }
266
236
  | {
267
- /** Omit when this session module does not support pending MFA completion. */
268
- readonly pending?: undefined;
269
- readonly constraints: RequiredSessionConstraints;
270
- }
271
- | {
272
- readonly pending: PendingAuthenticationTables<
273
- Claims,
274
- Pending,
275
- Flow,
276
- NativeSubjectId
277
- >["pending"];
237
+ readonly pending: PendingAuthenticationTables<Claims, Pending, NativeSubjectId>;
278
238
  readonly constraints: RequiredStatefulPendingConstraints;
279
239
  }
280
240
  );
@@ -284,92 +244,34 @@ export type PendingAuthenticationMapping<
284
244
  Subject extends Table,
285
245
  Credential extends Table,
286
246
  Pending extends Table,
287
- Flow extends Table,
288
247
  NativeSubjectId,
248
+ Expression extends SqlExpression = SqlExpression,
289
249
  > = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
290
- PendingAuthenticationTables<Claims, Pending, Flow, NativeSubjectId> &
291
- SessionConstraintClassifier & {
292
- readonly constraints: RequiredPendingAuthenticationConstraints;
293
- };
250
+ PendingAuthenticationTables<Claims, Pending, NativeSubjectId> &
251
+ SessionExecution<Expression> & { readonly constraints: RequiredPendingAuthenticationConstraints };
294
252
 
295
253
  export type SignedSessionValidityMapping<
296
254
  Subject extends Table,
297
255
  Tombstone extends Table,
298
256
  NativeSubjectId,
299
257
  NativeSessionId,
258
+ Expression extends SqlExpression = SqlExpression,
300
259
  > = SessionSubjectTables<Subject, NativeSubjectId> &
301
260
  SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId> &
302
- SessionConstraintClassifier & {
303
- readonly constraints: RequiredSignedValidityConstraints;
304
- };
261
+ SessionExecution<Expression> & { readonly constraints: RequiredSignedValidityConstraints };
305
262
 
306
- /** D1 evaluates these expressions inside the atomic batch, after queueing delay.
307
- * `engineNow` must use the exact native representation of every mapped instant
308
- * column. `engineNowMillis` is Unix epoch milliseconds for proof freshness.
309
- * Changes to the consumer's factor policy MUST bump subject.securityRevision.
310
- * Supply the authoritative primary D1 database, never a replica-affined
311
- * `withSession` handle, because verification and security revision reads must
312
- * observe completed revocation writes across clients.
313
- */
314
- export interface D1SessionClockMapping<Expression extends SqlExpression = SqlExpression> {
315
- readonly d1: {
316
- readonly engineNow: Expression;
317
- readonly engineNowMillis: Expression;
318
- readonly activeSubjectStatusValue: unknown;
319
- /** Required when `credential.status` is mapped. */
320
- readonly activeCredentialStatusValue?: unknown;
321
- };
322
- }
323
-
324
- export type D1AuthenticationAuthorityMapping<
325
- Claims,
326
- Subject extends Table,
327
- Credential extends Table,
328
- Flow extends Table,
263
+ /** Maintenance uses the same mapped rows and one total per-call deletion limit. */
264
+ export type SessionCleanupMapping<
329
265
  Pending extends Table,
330
- NativeSubjectId,
331
- Expression extends SqlExpression = SqlExpression,
332
- > = AuthenticationAuthorityMapping<Claims, Subject, Credential, Flow, Pending, NativeSubjectId> &
333
- D1SessionClockMapping<Expression>;
334
-
335
- export type D1PendingAuthenticationMapping<
336
- Claims,
337
- Subject extends Table,
338
- Credential extends Table,
339
- Pending extends Table,
340
- Flow extends Table,
341
- NativeSubjectId,
342
- Expression extends SqlExpression = SqlExpression,
343
- > = PendingAuthenticationMapping<Claims, Subject, Credential, Pending, Flow, NativeSubjectId> &
344
- D1SessionClockMapping<Expression>;
345
-
346
- export type D1StatefulSessionMapping<
347
- Claims,
348
- Subject extends Table,
349
- Credential extends Table,
350
- Session extends Table,
351
- Flow extends Table,
352
- Pending extends Table,
353
- NativeSubjectId,
354
- NativeSessionId,
355
- Expression extends SqlExpression = SqlExpression,
356
- > = StatefulSessionMapping<
357
- Claims,
358
- Subject,
359
- Credential,
360
- Session,
361
- Flow,
362
- Pending,
363
- NativeSubjectId,
364
- NativeSessionId
365
- > &
366
- D1SessionClockMapping<Expression>;
367
-
368
- export type D1SignedSessionValidityMapping<
369
- Subject extends Table,
370
266
  Tombstone extends Table,
371
267
  NativeSubjectId,
372
268
  NativeSessionId,
373
269
  Expression extends SqlExpression = SqlExpression,
374
- > = SignedSessionValidityMapping<Subject, Tombstone, NativeSubjectId, NativeSessionId> &
375
- D1SessionClockMapping<Expression>;
270
+ > = Pick<SessionExecution<Expression>, "moduleId" | "clock" | "d1"> & {
271
+ readonly pending?: SessionPendingTables<Pending, NativeSubjectId>["pending"];
272
+ readonly tombstone?: SignedSessionValidityTables<
273
+ Tombstone,
274
+ NativeSubjectId,
275
+ NativeSessionId
276
+ >["tombstone"];
277
+ };
@@ -1,59 +1,18 @@
1
- import type { SecurityRevision, SessionStepUpIntent } from "@yielded/auth/Sessions";
2
- import type { DateTime, Effect } from "effect";
3
-
4
- import type { TableModel as Table, SqlExpression } from "../query-operations";
5
- import type { PersistenceMappingError } from "./common";
1
+ import type { TableModel as Table, SqlExpression } from "../table-model";
6
2
  import type {
7
- D1SessionClockMapping,
8
3
  SessionAuthorityTables,
9
- SessionConstraintClassifier,
10
- SessionIdCodec,
4
+ SessionExecution,
5
+ SessionPendingTables,
11
6
  SignedSessionValidityTables,
12
7
  StatefulSessionTables,
13
8
  } from "./session-model";
9
+ import { requiredPendingAuthenticationConstraints } from "./session-model";
14
10
 
15
- type ColumnKey<T extends Table> = T["column"];
16
-
17
- /** Distinct from login-pending storage. Snapshot is TEXT encoded by the core's
18
- * SessionStepUpIntent schema; it contains no Claims and needs no consumer decoder. */
19
- export interface SessionStepUpIntentTables<Intent extends Table, NativeSubjectId> {
20
- readonly intent: {
21
- readonly table: Intent["table"];
22
- readonly digest: ColumnKey<Intent>;
23
- readonly version: ColumnKey<Intent>;
24
- readonly flowId: ColumnKey<Intent>;
25
- readonly subjectId: ColumnKey<Intent>;
26
- readonly bindingDigest: ColumnKey<Intent>;
27
- readonly snapshot: ColumnKey<Intent>;
28
- readonly expiresAt: ColumnKey<Intent>;
29
- readonly attemptLimit: ColumnKey<Intent>;
30
- readonly failedAttempts: ColumnKey<Intent>;
31
- readonly consumed: ColumnKey<Intent>;
32
- readonly encodeInstant: (instant: DateTime.Utc) => unknown;
33
- /** Consumer fields/defaults; the adapter sets all mapped security columns. */
34
- readonly encodeInsert: (
35
- intent: SessionStepUpIntent,
36
- input: {
37
- readonly subjectId: NativeSubjectId;
38
- },
39
- ) => Intent["insert"];
40
- readonly allocateVersion?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
41
- readonly allocateVersionSync?: () => SecurityRevision;
42
- };
43
- }
44
-
45
- export interface RequiredSessionStepUpConstraints {
46
- readonly intentDigest: "unique(intent.digest)";
47
- readonly intentFlow: "unique(intent.flowId)";
48
- }
49
-
50
- export const requiredSessionStepUpConstraints: RequiredSessionStepUpConstraints = {
51
- intentDigest: "unique(intent.digest)",
52
- intentFlow: "unique(intent.flowId)",
53
- };
11
+ export const requiredSessionStepUpConstraints = requiredPendingAuthenticationConstraints;
12
+ export type RequiredSessionStepUpConstraints = typeof requiredSessionStepUpConstraints;
54
13
 
55
- /** Fixed source discriminator is checked against every stored intent. A minimal
56
- * pure-signed installation does not provide dummy session or tombstone tables. */
14
+ /** Stateful metadata is decoded from the exact inspected digest's record. No
15
+ * duplicate credentialVersion/authenticatedAt columns or row-version CAS. */
57
16
  export type SessionStepUpSourceTables<
58
17
  Claims,
59
18
  Session extends Table,
@@ -61,47 +20,31 @@ export type SessionStepUpSourceTables<
61
20
  NativeSubjectId,
62
21
  NativeSessionId,
63
22
  > =
64
- | {
65
- readonly kind: "StatelessSigned";
66
- }
23
+ | { readonly kind: "StatelessSigned" }
67
24
  | ({
68
25
  readonly kind: "StateAssistedSigned";
69
26
  readonly constraints: {
70
- readonly tombstoneOwner: "unique(tombstone.subjectId,tombstone.sessionId)";
27
+ readonly tombstoneOwner: "unique(tombstone.moduleId,tombstone.subjectId,tombstone.sessionId)";
71
28
  };
72
29
  } & SignedSessionValidityTables<Tombstone, NativeSubjectId, NativeSessionId>)
73
- | {
30
+ | ({
74
31
  readonly kind: "Stateful";
75
- readonly constraints: {
76
- readonly sessionDigest: "unique(session.digest)";
77
- };
78
- readonly sessionId: SessionIdCodec<NativeSessionId>;
79
- /** encodeRotation must replace Claims, provenance, and the queryable security
80
- * fields together; it must not retain the old proof payload. */
81
- readonly session: StatefulSessionTables<
82
- Claims,
83
- Session,
84
- Table,
85
- NativeSubjectId,
86
- NativeSessionId
87
- >["session"] & {
88
- readonly credentialVersion: ColumnKey<Session>;
89
- readonly authenticatedAt: ColumnKey<Session>;
90
- };
91
- };
32
+ readonly constraints: { readonly sessionDigest: "unique(session.digest)" };
33
+ } & StatefulSessionTables<Claims, Session, NativeSubjectId, NativeSessionId>);
92
34
 
93
35
  export type SessionStepUpMapping<
94
36
  Claims,
95
37
  Subject extends Table,
96
38
  Credential extends Table,
97
- Intent extends Table,
39
+ Pending extends Table,
98
40
  Session extends Table,
99
41
  Tombstone extends Table,
100
42
  NativeSubjectId,
101
43
  NativeSessionId,
44
+ Expression extends SqlExpression = SqlExpression,
102
45
  > = SessionAuthorityTables<Subject, Credential, NativeSubjectId> &
103
- SessionStepUpIntentTables<Intent, NativeSubjectId> &
104
- SessionConstraintClassifier & {
46
+ SessionPendingTables<Pending, NativeSubjectId> &
47
+ SessionExecution<Expression> & {
105
48
  readonly source: SessionStepUpSourceTables<
106
49
  Claims,
107
50
  Session,
@@ -111,25 +54,3 @@ export type SessionStepUpMapping<
111
54
  >;
112
55
  readonly constraints: RequiredSessionStepUpConstraints;
113
56
  };
114
-
115
- export type D1SessionStepUpMapping<
116
- Claims,
117
- Subject extends Table,
118
- Credential extends Table,
119
- Intent extends Table,
120
- Session extends Table,
121
- Tombstone extends Table,
122
- NativeSubjectId,
123
- NativeSessionId,
124
- Expression extends SqlExpression = SqlExpression,
125
- > = SessionStepUpMapping<
126
- Claims,
127
- Subject,
128
- Credential,
129
- Intent,
130
- Session,
131
- Tombstone,
132
- NativeSubjectId,
133
- NativeSessionId
134
- > &
135
- D1SessionClockMapping<Expression>;
@@ -0,0 +1,82 @@
1
+ import type { SubjectId } from "@yielded/auth/Schema";
2
+ import type { AuthenticationRequirement } from "@yielded/auth/Sessions";
3
+ import type { TotpPolicy } from "@yielded/auth/Totp";
4
+ import type { Effect } from "effect";
5
+
6
+ import type { PersistenceMappingError } from "../mapping-error";
7
+ import type { TableModel, SqlExpression } from "../table-model";
8
+ import type { ProofClock } from "./proof-model";
9
+ import type { PendingAuthenticationTables } from "./session-model";
10
+
11
+ export const requiredTotpConstraints = {
12
+ factor: "unique(scope)",
13
+ credential: "unique(credentialId)",
14
+ subject: "unique(id)",
15
+ } as const;
16
+
17
+ export type TotpMappingSource<M, R = never> = M | Effect.Effect<M, PersistenceMappingError, R>;
18
+
19
+ /** One encrypted factor row and the common credential authority. Version protects
20
+ * accepted-step, failure-budget and recovery-code changes; no command receipts. */
21
+ export interface TotpMapping<
22
+ S extends TableModel,
23
+ F extends TableModel,
24
+ C extends TableModel,
25
+ N,
26
+ P extends TableModel = TableModel,
27
+ Expression extends SqlExpression = SqlExpression,
28
+ > {
29
+ readonly moduleId: string;
30
+ readonly policy: TotpPolicy;
31
+ readonly constraints: typeof requiredTotpConstraints;
32
+ readonly d1?: { readonly primary: true };
33
+ readonly subjectIds: {
34
+ readonly toNative: (id: SubjectId) => N;
35
+ readonly toSubject: (id: N) => SubjectId;
36
+ };
37
+ readonly subject: {
38
+ readonly table: S["table"];
39
+ readonly id: S["column"];
40
+ readonly securityRevision: S["column"];
41
+ readonly factorEnabled: S["column"];
42
+ readonly activeCondition: Expression;
43
+ readonly encodeEnabled: (enabled: boolean) => unknown;
44
+ readonly decodeRequirement: (row: S["select"]) => AuthenticationRequirement;
45
+ /** Required for D1: declare every independently mutable input read by
46
+ * decodeRequirement. An explicit [] promises a constant requirement. */
47
+ readonly requirementColumns?: ReadonlyArray<S["column"]>;
48
+ };
49
+ readonly factor: {
50
+ readonly table: F["table"];
51
+ readonly scope: F["column"];
52
+ readonly state: F["column"];
53
+ readonly version: F["column"];
54
+ readonly encodeInsert: (value: {
55
+ readonly scope: string;
56
+ readonly state: string;
57
+ readonly version: string;
58
+ }) => F["insert"];
59
+ };
60
+ readonly credential: {
61
+ readonly table: C["table"];
62
+ readonly id: C["column"];
63
+ readonly subjectId: C["column"];
64
+ readonly revision: C["column"];
65
+ readonly status: C["column"];
66
+ readonly activeCondition: Expression;
67
+ readonly encodeStatus: (active: boolean) => unknown;
68
+ readonly encodeInsert: (value: {
69
+ readonly credentialId: string;
70
+ readonly subjectId: N;
71
+ readonly revision: string;
72
+ readonly active: boolean;
73
+ }) => C["insert"];
74
+ };
75
+ readonly engineNowMillis: Expression;
76
+ /** Reset uses the very same Login-kind row owner as pending authentication. */
77
+ readonly pending?: Omit<PendingAuthenticationTables<unknown, P, N>, "login"> & {
78
+ readonly login: Pick<PendingAuthenticationTables<unknown, P, N>["login"], "decode">;
79
+ readonly moduleId: string;
80
+ readonly clock: ProofClock<Expression>;
81
+ };
82
+ }