@yielded/auth-persistence 0.1.0-beta.25 → 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 +14 -81
  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 +26 -147
  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 -354
  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 -1556
  439. package/src/internal/oauth/accounts.ts +0 -839
  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 -692
  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 -1523
  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,16 +1,16 @@
1
1
  import { PersistenceMappingError } from "./mapping-error.mjs";
2
2
  import { randomId } from "./crypto.mjs";
3
- import { requiredProofConstraints } from "./models/proof-model.mjs";
4
3
  import { storageTables } from "./storage-tables.mjs";
5
4
  import { requiredEmailAddressConstraints } from "./models/email-model.mjs";
6
5
  import { requiredPasswordConstraints } from "./models/password-model.mjs";
7
- import { Crypto, DateTime, Effect, Redacted, Schema } from "effect";
8
- import { TokenDigest } from "@yielded/auth/Schema";
9
- import { SecurityRevision, SessionAuthenticationProvenance, SessionCredentialVersion, SessionId, SessionMetadata } from "@yielded/auth/Sessions";
10
- import { ProofBinding, ProofContinuationId, ProofDeliveryId, ProofId, ProofPurpose, ProofRequestId, ProofRequestReceipt, ProofVersion } from "@yielded/auth/Proofs";
6
+ import { requiredProofConstraints } from "./models/proof-model.mjs";
7
+ import { makeStorageClock } from "./storage-clock.mjs";
8
+ import { Crypto, DateTime, Effect, Redacted, Schema, Struct } from "effect";
11
9
  import { EmailCredentialSnapshot } from "@yielded/auth/Email";
12
10
  import { EncodedPasswordHash, PasswordCredentialSnapshot } from "@yielded/auth/Password";
11
+ import { AuthenticationEvidence, SecurityRevision, SessionAuthenticationProvenance, SessionCredentialVersion, SessionId, SessionMetadata } from "@yielded/auth/Sessions";
13
12
  import { LoginIdentifier } from "@yielded/auth/Identity";
13
+ import { TokenDigest } from "@yielded/auth/Schema";
14
14
  //#region src/internal/storage-mapping.ts
15
15
  const failure = (cause) => PersistenceMappingError.make({
16
16
  operation: "decode",
@@ -18,36 +18,6 @@ const failure = (cause) => PersistenceMappingError.make({
18
18
  });
19
19
  const decode = (schema, value) => Schema.decodeUnknownEffect(schema)(value).pipe(Effect.mapError(failure));
20
20
  const string = (value) => Schema.decodeUnknownSync(Schema.String)(value);
21
- const tuple = Schema.encodeSync(Schema.fromJsonString(Schema.Array(Schema.String)));
22
- const bindingJson = Schema.fromJsonString(ProofBinding);
23
- const receiptJson = Schema.fromJsonString(ProofRequestReceipt);
24
- const ProofRecord$1 = Schema.Struct({
25
- moduleId: Schema.String,
26
- purpose: ProofPurpose,
27
- proofId: ProofId,
28
- requestId: ProofRequestId,
29
- fingerprint: TokenDigest,
30
- deliveryId: ProofDeliveryId,
31
- binding: ProofBinding,
32
- verifier: Schema.Struct({
33
- keyId: Schema.String,
34
- digest: TokenDigest
35
- }),
36
- issuedAtMillis: Schema.Int,
37
- expiresAtMillis: Schema.Int,
38
- version: ProofVersion
39
- });
40
- const ProofContinuation = Schema.Struct({
41
- moduleId: Schema.String,
42
- purpose: ProofPurpose,
43
- continuationId: ProofContinuationId,
44
- digest: TokenDigest,
45
- proofId: ProofId,
46
- seriesKey: Schema.String,
47
- binding: ProofBinding,
48
- expiresAtMillis: Schema.Int,
49
- version: ProofVersion
50
- });
51
21
  /** Derive shared row mappings from a managed or custom storage layout.
52
22
  * Acquire Effect Crypto once; the returned allocators retain that implementation.
53
23
  * Each factory requires its role tables to exist. Adapter authors supply typed
@@ -79,6 +49,7 @@ const makeMappings = Effect.fnUntraced(function* (input) {
79
49
  securityRevision: s.securityRevision,
80
50
  isActiveStatus: (value) => Object.is(value, s.activeValue),
81
51
  d1ActiveStatusValue: s.activeValue,
52
+ activeStatusValue: s.activeValue,
82
53
  decodeRequirement: s.requirements,
83
54
  decodeActionRequirement: s.actionRequirements,
84
55
  nextSecurityRevision: () => allocate.pipe(Effect.map(SecurityRevision.make))
@@ -89,6 +60,7 @@ const makeMappings = Effect.fnUntraced(function* (input) {
89
60
  credentialId: "credentialId",
90
61
  revision: "revision",
91
62
  status: "active",
63
+ activeStatusValue: true,
92
64
  isActiveStatus: (value) => value === true,
93
65
  encodeInsert: (row) => ({
94
66
  ...row,
@@ -101,219 +73,28 @@ const makeMappings = Effect.fnUntraced(function* (input) {
101
73
  subject,
102
74
  credential: authorityCredential()
103
75
  });
76
+ const clock = yield* makeStorageClock(input);
104
77
  const proofs = () => ({
105
78
  constraints: requiredProofConstraints,
106
- encodeInstant: instant,
107
- decodeInstant: readInstant,
108
- allocateVersion: allocate.pipe(Effect.map(ProofVersion.make)),
109
- isRequestConflict: () => false,
110
- isSeriesConflict: () => false,
111
- isCommandConflict: () => false,
112
- scopeKeys: ({ binding }) => ({
113
- series: tuple([
114
- binding.identifier.namespace,
115
- binding.identifier.value,
116
- binding._tag === "Identifier" ? "anonymous" : binding.revision.subjectId
117
- ]),
118
- identifier: tuple([binding.identifier.namespace, binding.identifier.value]),
119
- subject: binding._tag === "Identifier" ? "anonymous" : binding.revision.subjectId
120
- }),
121
- authority: {
122
- ...authority(),
123
- identifier: {
124
- table: table("identifiers"),
125
- namespace: "namespace",
126
- value: "value",
127
- isCurrent: (request, rows) => request.binding._tag === "Identifier" ? rows.length === 0 : request.binding._tag === "IdentifierChange" ? rows.length === 0 || rows.length === 1 && rows.every((row) => Object.is(row.subjectId, request.nativeSubjectId) && row.active === true && row.verifiedAt === null) : rows.length === 1 && rows.every((row) => Object.is(row.subjectId, request.nativeSubjectId) && row.active === true)
128
- }
129
- },
130
- request: {
131
- ...mapped("proofRequests"),
132
- moduleId: "moduleId",
133
- requestId: "requestId",
134
- fingerprint: "fingerprint",
135
- proofId: "proofId",
136
- purpose: "purpose",
137
- keyId: "keyId",
138
- createdAt: "createdAt",
139
- retentionUntil: "retentionUntil",
140
- encodeInsert: ({ record, retentionUntilMillis }) => ({
141
- moduleId: record.moduleId,
142
- requestId: record.requestId,
143
- fingerprint: record.fingerprint,
144
- proofId: record.proofId,
145
- purpose: record.purpose,
146
- keyId: record.verifier.keyId,
147
- createdAt: instant(record.issuedAtMillis),
148
- retentionUntil: instant(retentionUntilMillis),
149
- receipt: Schema.encodeSync(receiptJson)({
150
- requestId: record.requestId,
151
- reference: {
152
- proofId: record.proofId,
153
- purpose: record.purpose,
154
- keyId: record.verifier.keyId
155
- }
156
- })
157
- }),
158
- decodeReceipt: (row) => decode(receiptJson, row.receipt)
159
- },
160
- series: {
161
- ...mapped("proofSeries"),
162
- moduleId: "moduleId",
163
- purpose: "purpose",
164
- scopeKey: "scopeKey",
165
- activeProofId: "activeProofId",
166
- lastIssueAt: "lastIssueAt",
167
- version: "version",
168
- encodeInsert: (row) => ({
169
- ...row,
170
- activeProofId: null,
171
- lastIssueAt: null
172
- })
79
+ subjectId,
80
+ subject: {
81
+ table: s.table,
82
+ id: s.id
173
83
  },
174
- generation: {
175
- ...mapped("proofGenerations"),
84
+ clock,
85
+ proof: {
86
+ ...mapped("proofs"),
176
87
  moduleId: "moduleId",
177
88
  purpose: "purpose",
178
- proofId: "proofId",
179
- requestId: "requestId",
180
89
  seriesKey: "seriesKey",
181
- deliveryId: "deliveryId",
90
+ proofId: "proofId",
182
91
  binding: "binding",
183
92
  verifierKeyId: "verifierKeyId",
184
93
  verifierDigest: "verifierDigest",
185
94
  issuedAt: "issuedAt",
186
95
  expiresAt: "expiresAt",
187
- version: "version",
188
- state: "state",
189
- sendCount: "sendCount",
190
- deliveryState: "deliveryState",
191
- claimVersion: "claimVersion",
192
- claimDeadline: "claimDeadline",
193
- retryAt: "retryAt",
194
- deliveryRetryMillis: "deliveryRetryMillis",
195
- retentionUntil: "retentionUntil",
196
- encodeInsert: ({ record, seriesKey, retentionUntilMillis, state, deliveryState, policy }) => ({
197
- moduleId: record.moduleId,
198
- purpose: record.purpose,
199
- proofId: record.proofId,
200
- requestId: record.requestId,
201
- seriesKey,
202
- deliveryId: record.deliveryId,
203
- binding: Schema.encodeSync(bindingJson)(record.binding),
204
- verifierKeyId: record.verifier.keyId,
205
- verifierDigest: record.verifier.digest,
206
- issuedAt: instant(record.issuedAtMillis),
207
- expiresAt: instant(record.expiresAtMillis),
208
- version: record.version,
209
- state,
210
- sendCount: 0,
211
- deliveryState,
212
- claimVersion: null,
213
- claimDeadline: null,
214
- retryAt: null,
215
- deliveryRetryMillis: policy.deliveryRetryMillis,
216
- retentionUntil: instant(retentionUntilMillis),
217
- fingerprint: record.fingerprint
218
- }),
219
- decodeBinding: (row) => decode(bindingJson, row.binding),
220
- decodeRecord: (row) => Effect.gen(function* () {
221
- return yield* decode(ProofRecord$1, {
222
- moduleId: row.moduleId,
223
- purpose: row.purpose,
224
- proofId: row.proofId,
225
- requestId: row.requestId,
226
- fingerprint: row.fingerprint,
227
- deliveryId: row.deliveryId,
228
- binding: yield* decode(bindingJson, row.binding),
229
- verifier: {
230
- keyId: row.verifierKeyId,
231
- digest: row.verifierDigest
232
- },
233
- issuedAtMillis: yield* readInstant(row.issuedAt),
234
- expiresAtMillis: yield* readInstant(row.expiresAt),
235
- version: row.version
236
- });
237
- })
238
- },
239
- continuation: {
240
- ...mapped("proofContinuations"),
241
- moduleId: "moduleId",
242
- purpose: "purpose",
243
- continuationId: "continuationId",
244
- digest: "digest",
245
- proofId: "proofId",
246
- seriesKey: "seriesKey",
247
- binding: "binding",
248
- expiresAt: "expiresAt",
249
- consumed: "consumed",
250
- version: "version",
251
- retentionUntil: "retentionUntil",
252
- encodeInsert: (record) => ({
253
- ...record,
254
- binding: Schema.encodeSync(bindingJson)(record.binding),
255
- expiresAt: instant(record.expiresAtMillis),
256
- consumed: false,
257
- retentionUntil: instant(record.retentionUntilMillis)
258
- }),
259
- decode: (row) => Effect.gen(function* () {
260
- return yield* decode(ProofContinuation, {
261
- ...row,
262
- binding: yield* decode(bindingJson, row.binding),
263
- expiresAtMillis: yield* readInstant(row.expiresAt)
264
- });
265
- })
266
- },
267
- rateScope: {
268
- ...mapped("proofScopes"),
269
- moduleId: "moduleId",
270
- purpose: "purpose",
271
- action: "action",
272
- scopeKind: "scopeKind",
273
- scopeKey: "scopeKey",
274
- encodeInsert: (row) => ({ ...row })
275
- },
276
- abuseEvent: {
277
- ...mapped("proofAbuse"),
278
- moduleId: "moduleId",
279
- purpose: "purpose",
280
- action: "action",
281
- scopeKind: "scopeKind",
282
- scopeKey: "scopeKey",
283
- commandId: "commandId",
284
- occurredAt: "occurredAt",
285
- retentionUntil: "retentionUntil",
286
- encodeInsert: (row) => ({
287
- ...row,
288
- occurredAt: instant(row.occurredAtMillis),
289
- retentionUntil: instant(row.retentionUntilMillis)
290
- })
291
- },
292
- failureEvent: {
293
- ...mapped("proofFailures"),
294
- moduleId: "moduleId",
295
- purpose: "purpose",
296
- seriesKey: "seriesKey",
297
- commandId: "commandId",
298
- occurredAt: "occurredAt",
299
- retentionUntil: "retentionUntil",
300
- encodeInsert: (row) => ({
301
- ...row,
302
- occurredAt: instant(row.occurredAtMillis),
303
- retentionUntil: instant(row.retentionUntilMillis)
304
- })
305
- },
306
- command: {
307
- ...mapped("proofCommands"),
308
- moduleId: "moduleId",
309
- commandId: "commandId",
310
- kind: "kind",
311
- decision: "decision",
312
- retentionUntil: "retentionUntil",
313
- encodeInsert: (row) => ({
314
- ...row,
315
- retentionUntil: instant(row.retentionUntilMillis)
316
- })
96
+ failedAttempts: "failedAttempts",
97
+ encodeInsert: () => ({})
317
98
  }
318
99
  });
319
100
  const passwords = () => {
@@ -326,12 +107,10 @@ const makeMappings = Effect.fnUntraced(function* (input) {
326
107
  subject,
327
108
  authorityCredential: authorityCredential(),
328
109
  constraints: requiredPasswordConstraints,
329
- isCommandConflict: () => false,
330
110
  encodeInstant: instant,
331
111
  decodeInstant: readInstant,
332
112
  allocateCredentialId: allocate,
333
113
  allocateRevision: allocate.pipe(Effect.map(SecurityRevision.make)),
334
- commandRetentionMillis: 864e5,
335
114
  sessionInvalidation: "same-authority-immediate",
336
115
  identifier: {
337
116
  table: table("identifiers"),
@@ -397,34 +176,24 @@ const makeMappings = Effect.fnUntraced(function* (input) {
397
176
  });
398
177
  })
399
178
  },
400
- command: {
401
- ...mapped("passwordCommands"),
402
- moduleId: "moduleId",
403
- commandId: "commandId",
404
- action: "action",
405
- bindingDigest: "bindingDigest",
406
- decision: "decision",
407
- retentionUntil: "retentionUntil",
408
- encodeInsert: (row) => ({
409
- ...row,
410
- retentionUntil: instant(row.retentionUntilMillis)
411
- })
412
- }
179
+ clock
413
180
  };
414
181
  };
415
182
  const emails = () => ({
416
183
  subjectId,
417
- subject,
184
+ subject: {
185
+ ...subject,
186
+ activeStatusValue: s.activeValue
187
+ },
418
188
  constraints: requiredEmailAddressConstraints,
419
189
  addressCardinality: "single",
420
190
  changeDisposition: "retire-source",
191
+ clock,
421
192
  encodeInstant: instant,
422
193
  decodeInstant: readInstant,
423
194
  allocateCredentialId: allocate,
424
195
  allocateRevision: allocate.pipe(Effect.map(SecurityRevision.make)),
425
- commandRetentionMillis: 864e5,
426
196
  sessionInvalidation: "same-authority-immediate",
427
- isCommandConflict: () => false,
428
197
  isIdentifierConflict: () => false,
429
198
  isCredentialConflict: () => false,
430
199
  authorityCredential: {
@@ -465,6 +234,7 @@ const makeMappings = Effect.fnUntraced(function* (input) {
465
234
  })
466
235
  },
467
236
  credential: {
237
+ activeStatusValue: true,
468
238
  table: table("emailCredentials"),
469
239
  moduleId: "moduleId",
470
240
  subjectId: "subjectId",
@@ -491,7 +261,7 @@ const makeMappings = Effect.fnUntraced(function* (input) {
491
261
  active: false
492
262
  }),
493
263
  decode: ({ moduleId, subject: row, identifier, credential }) => Effect.gen(function* () {
494
- return yield* decode(EmailCredentialSnapshot, {
264
+ return yield* decode(Schema.Struct(Struct.omit(EmailCredentialSnapshot.fields, ["requirement"])), {
495
265
  moduleId,
496
266
  identifier: {
497
267
  namespace: identifier.namespace,
@@ -511,32 +281,68 @@ const makeMappings = Effect.fnUntraced(function* (input) {
511
281
  }
512
282
  });
513
283
  })
514
- },
515
- command: {
516
- table: table("emailCommands"),
517
- moduleId: "moduleId",
518
- commandId: "commandId",
519
- action: "action",
520
- bindingDigest: "bindingDigest",
521
- retentionUntil: "retentionUntil",
522
- encodeInsert: ({ retentionUntilMillis, ...row }) => ({
523
- ...row,
524
- retentionUntil: instant(retentionUntilMillis)
525
- })
526
284
  }
527
285
  });
528
- const sessions = (claims) => {
286
+ const pending = (claims, moduleId) => {
287
+ const record = Schema.fromJsonString(Schema.Struct({
288
+ digest: TokenDigest,
289
+ version: SecurityRevision,
290
+ evidence: AuthenticationEvidence,
291
+ expiresAt: Schema.DateTimeUtcFromMillis,
292
+ attemptLimit: Schema.Int.check(Schema.isGreaterThan(0)),
293
+ claims: Schema.Unknown
294
+ }));
295
+ return {
296
+ ...authority(),
297
+ moduleId,
298
+ clock,
299
+ isConstraintConflict: () => false,
300
+ constraints: { pendingDigest: "unique(pending.digest)" },
301
+ pending: {
302
+ table: table("pending"),
303
+ moduleId: "moduleId",
304
+ kind: "kind",
305
+ digest: "digest",
306
+ version: "version",
307
+ flowId: "flowId",
308
+ subjectId: "subjectId",
309
+ bindingDigest: "bindingDigest",
310
+ snapshot: "snapshot",
311
+ expiresAt: "expiresAt",
312
+ attemptLimit: "attemptLimit",
313
+ failedAttempts: "failedAttempts",
314
+ consumed: "consumed",
315
+ encodeInstant: (date) => instant(DateTime.toEpochMillis(date)),
316
+ allocateVersion: allocate.pipe(Effect.map(SecurityRevision.make)),
317
+ encodeInsert: (value) => ({
318
+ ...value,
319
+ expiresAt: instant(DateTime.toEpochMillis(value.expiresAt)),
320
+ failedAttempts: 0,
321
+ consumed: false
322
+ })
323
+ },
324
+ login: {
325
+ encode: (value) => Schema.encodeEffect(claims)(value.claims).pipe(Effect.flatMap((saved) => Schema.encodeEffect(record)({
326
+ ...value,
327
+ claims: saved
328
+ })), Effect.mapError(failure)),
329
+ decode: (value) => decode(record, value).pipe(Effect.flatMap((saved) => decode(claims, saved.claims).pipe(Effect.map((decoded) => ({
330
+ ...saved,
331
+ claims: decoded
332
+ })))))
333
+ }
334
+ };
335
+ };
336
+ const sessions = (claims, moduleId) => {
529
337
  const record = Schema.fromJsonString(Schema.Struct({
530
338
  ...SessionMetadata.fields,
531
339
  claims: Schema.Unknown,
532
340
  digest: TokenDigest,
533
- version: SecurityRevision,
534
341
  provenance: SessionAuthenticationProvenance,
535
342
  credentialVersion: SessionCredentialVersion
536
343
  }));
537
344
  const encodeRow = (value) => ({
538
345
  digest: value.digest,
539
- version: value.version,
540
346
  securityRevision: value.securityRevision,
541
347
  issuedAt: instant(DateTime.toEpochMillis(value.issuedAt)),
542
348
  expiresAt: instant(DateTime.toEpochMillis(value.expiresAt)),
@@ -546,67 +352,46 @@ const makeMappings = Effect.fnUntraced(function* (input) {
546
352
  claims: Schema.encodeSync(claims)(value.claims)
547
353
  })
548
354
  });
355
+ const login = pending(claims, moduleId);
549
356
  return {
550
357
  ...authority(),
358
+ moduleId,
359
+ clock,
551
360
  isConstraintConflict: () => false,
361
+ pending: {
362
+ pending: login.pending,
363
+ login: login.login
364
+ },
552
365
  constraints: {
553
366
  sessionDigest: "unique(session.digest)",
554
- flowId: "unique(flow.flowId)"
367
+ pendingDigest: "unique(pending.digest)"
555
368
  },
556
369
  sessionId: {
557
370
  toNative: (id) => Effect.succeed(id),
558
371
  toSession: (id) => decode(SessionId, id),
559
372
  equals: Object.is
560
373
  },
561
- flow: {
562
- table: table("sessionFlows"),
563
- flowId: "flowId",
564
- subjectId: "subjectId",
565
- state: "state",
566
- pendingDigest: "pendingDigest",
567
- dedupUntil: "dedupUntil",
568
- pendingStateValue: "pending",
569
- establishedStateValue: "established",
570
- encodeInstant: (date) => instant(DateTime.toEpochMillis(date)),
571
- decodeInstant: (value) => readInstant(value).pipe(Effect.map(DateTime.makeUnsafe)),
572
- encodePendingInsert: (row) => ({
573
- flowId: row.evidence.flowId,
574
- subjectId: row.subjectId,
575
- state: "pending",
576
- pendingDigest: row.pendingDigest,
577
- dedupUntil: instant(DateTime.toEpochMillis(row.dedupUntil))
578
- }),
579
- encodeEstablishedInsert: (row) => ({
580
- flowId: row.evidence.flowId,
581
- subjectId: row.subjectId,
582
- state: "established",
583
- pendingDigest: null,
584
- dedupUntil: instant(DateTime.toEpochMillis(row.dedupUntil))
585
- })
586
- },
587
374
  session: {
588
375
  table: table("sessions"),
589
376
  sessionId: "sessionId",
590
377
  subjectId: "subjectId",
591
378
  digest: "digest",
592
- version: "version",
593
379
  securityRevision: "securityRevision",
594
380
  issuedAt: "issuedAt",
595
381
  expiresAt: "expiresAt",
596
382
  absoluteExpiresAt: "absoluteExpiresAt",
597
383
  encodeInstant: (date) => instant(DateTime.toEpochMillis(date)),
598
384
  allocateId: allocate,
599
- allocateVersion: allocate.pipe(Effect.map(SecurityRevision.make)),
600
385
  encodeInsert: (value, ids) => ({
601
386
  ...encodeRow(value),
602
387
  ...ids
603
388
  }),
604
389
  encodeRotation: encodeRow,
605
390
  decode: (row) => Effect.gen(function* () {
606
- const saved = yield* decode(record, row.record);
607
- const decodedClaims = yield* decode(claims, saved.claims);
391
+ const saved = yield* decode(record, row.record), decodedClaims = yield* decode(claims, saved.claims);
608
392
  return {
609
393
  ...saved,
394
+ issuedAt: DateTime.makeUnsafe(yield* readInstant(row.issuedAt)),
610
395
  claims: decodedClaims
611
396
  };
612
397
  })
@@ -620,6 +405,7 @@ const makeMappings = Effect.fnUntraced(function* (input) {
620
405
  passwords,
621
406
  emails,
622
407
  sessions,
408
+ pending,
623
409
  string
624
410
  };
625
411
  });