@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,497 +0,0 @@
1
- import { PersistenceMappingError, isMappedConstraintConflict } from "./mapping-error.mjs";
2
- import { CurrentProofSql } from "./proof-kernel.mjs";
3
- import { requiredEmailAddressConstraints, requiredEmailSignInConstraints } from "./models/email-model.mjs";
4
- import { Cause, Context, DateTime, Effect, Option, Schema } from "effect";
5
- import { CurrentCommitJournal, HookConfigurationError, LifecycleHooks, coordinateCommit, hasCommitScope } from "@yielded/auth/Hooks";
6
- import { assessAuthentication, snapshotAuthenticationEvidence } from "@yielded/auth/Sessions";
7
- import { reportPersistenceFailure } from "@yielded/auth/Persistence";
8
- import { ProofUnavailable } from "@yielded/auth/Proofs";
9
- import { EmailAddressPersistence, EmailSignInTargets, EmailUnavailable, snapshotEmailCredential, snapshotEmailRequirement, snapshotEmailRevision } from "@yielded/auth/Email";
10
- //#region src/internal/email-kernel.ts
11
- var CurrentEmailSql = class extends Context.Service()("effect-auth/CurrentEmailSql") {};
12
- const makeEmailKernel = (operations, proofs) => {
13
- const { and, eq, inArray, lte, column, updateValues } = operations;
14
- const { completeProofPlanIn } = proofs;
15
- const unavailable = () => EmailUnavailable.make({});
16
- const translateFailure = (effect) => reportPersistenceFailure(effect, (error) => Schema.is(EmailUnavailable)(error) || Schema.is(ProofUnavailable)(error) || Schema.is(HookConfigurationError)(error)).pipe(Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, () => unavailable()))));
17
- const nowMillis = Effect.map(DateTime.now, DateTime.toEpochMillis);
18
- const selectRows = (query, locking) => locking && typeof query.for === "function" ? query.for("update") : query;
19
- const sameIdentifier = (left, right) => left.namespace === right.namespace && left.value === right.value;
20
- const validEmailSignInConstraints = (mapping) => Object.entries(requiredEmailSignInConstraints).every(([key, value]) => mapping.constraints[key] === value);
21
- const validAddressConstraints = (mapping) => Object.entries(requiredEmailAddressConstraints).every(([key, value]) => mapping.constraints[key] === value);
22
- const subjectColumns = (mapping) => ({
23
- id: column(mapping.subject.table, mapping.subject.id),
24
- status: column(mapping.subject.table, mapping.subject.status),
25
- securityRevision: column(mapping.subject.table, mapping.subject.securityRevision)
26
- });
27
- const identifierColumns = (mapping) => ({
28
- namespace: column(mapping.identifier.table, mapping.identifier.namespace),
29
- value: column(mapping.identifier.table, mapping.identifier.value),
30
- subjectId: column(mapping.identifier.table, mapping.identifier.subjectId),
31
- verifiedAt: column(mapping.identifier.table, mapping.identifier.verifiedAt),
32
- bindingRevision: column(mapping.identifier.table, mapping.identifier.bindingRevision)
33
- });
34
- const credentialColumns = (mapping) => ({
35
- moduleId: column(mapping.credential.table, mapping.credential.moduleId),
36
- subjectId: column(mapping.credential.table, mapping.credential.subjectId),
37
- credentialId: column(mapping.credential.table, mapping.credential.credentialId),
38
- identifierNamespace: column(mapping.credential.table, mapping.credential.identifierNamespace),
39
- identifierValue: column(mapping.credential.table, mapping.credential.identifierValue),
40
- credentialRevision: column(mapping.credential.table, mapping.credential.credentialRevision),
41
- status: column(mapping.credential.table, mapping.credential.status)
42
- });
43
- const authorityColumns = (mapping) => ({
44
- subjectId: column(mapping.authorityCredential.table, mapping.authorityCredential.subjectId),
45
- credentialId: column(mapping.authorityCredential.table, mapping.authorityCredential.credentialId),
46
- revision: column(mapping.authorityCredential.table, mapping.authorityCredential.revision),
47
- status: column(mapping.authorityCredential.table, mapping.authorityCredential.status)
48
- });
49
- const commandColumns = (mapping) => ({
50
- moduleId: column(mapping.command.table, mapping.command.moduleId),
51
- commandId: column(mapping.command.table, mapping.command.commandId),
52
- action: column(mapping.command.table, mapping.command.action),
53
- bindingDigest: column(mapping.command.table, mapping.command.bindingDigest),
54
- retentionUntil: column(mapping.command.table, mapping.command.retentionUntil)
55
- });
56
- const allocate = (mode, asynchronous, synchronous) => {
57
- if (mode === "synchronous") return synchronous === void 0 ? Effect.fail(unavailable()) : Effect.try({
58
- try: synchronous,
59
- catch: (cause) => new PersistenceMappingError({
60
- operation: "mapping",
61
- cause
62
- })
63
- });
64
- if (asynchronous !== void 0) return asynchronous;
65
- return synchronous === void 0 ? Effect.fail(unavailable()) : Effect.try({
66
- try: synchronous,
67
- catch: (cause) => new PersistenceMappingError({
68
- operation: "mapping",
69
- cause
70
- })
71
- });
72
- };
73
- const nextSecurityRevision = (mapping, mode, current) => {
74
- if (mode === "synchronous") return mapping.subject.nextSecurityRevisionSync === void 0 ? Effect.fail(unavailable()) : Effect.try({
75
- try: () => mapping.subject.nextSecurityRevisionSync(current),
76
- catch: (cause) => new PersistenceMappingError({
77
- operation: "mapping",
78
- cause
79
- })
80
- });
81
- if (mapping.subject.nextSecurityRevision !== void 0) return mapping.subject.nextSecurityRevision(current);
82
- if (mapping.subject.nextSecurityRevisionSync !== void 0) return Effect.try({
83
- try: () => mapping.subject.nextSecurityRevisionSync(current),
84
- catch: (cause) => new PersistenceMappingError({
85
- operation: "mapping",
86
- cause
87
- })
88
- });
89
- return Effect.fail(unavailable());
90
- };
91
- const safeRead = (database, configuration, body) => Effect.gen(function* () {
92
- if (configuration.coordinated !== true) {
93
- if (yield* hasCommitScope) return yield* unavailable();
94
- yield* configuration.standaloneGuard;
95
- }
96
- return yield* database.transaction((transaction) => body.pipe(Effect.provideService(CurrentEmailSql, transaction), Effect.provideService(CurrentProofSql, transaction)));
97
- });
98
- const owned = (database, configuration, body) => {
99
- const run = coordinateCommit(() => database.transaction((transaction) => body.pipe(Effect.provideService(CurrentEmailSql, transaction), Effect.provideService(CurrentProofSql, transaction))), { mode: configuration.mode }).pipe(Effect.map((result) => result.value));
100
- return configuration.coordinated !== true ? Effect.gen(function* () {
101
- if (yield* hasCommitScope) return yield* unavailable();
102
- yield* configuration.standaloneGuard;
103
- return yield* run;
104
- }) : run;
105
- };
106
- const emailLookupQuery = (mapping, moduleId, identifier) => {
107
- const subject = subjectColumns(mapping), binding = identifierColumns(mapping), credential = credentialColumns(mapping);
108
- return {
109
- fields: {
110
- subject: mapping.subject.table,
111
- identifier: mapping.identifier.table,
112
- credential: mapping.credential.table
113
- },
114
- from: mapping.identifier.table,
115
- subjectTable: mapping.subject.table,
116
- subjectJoin: eq(subject.id, binding.subjectId),
117
- credentialTable: mapping.credential.table,
118
- credentialJoin: and(eq(credential.moduleId, moduleId), eq(credential.subjectId, binding.subjectId), eq(credential.identifierNamespace, binding.namespace), eq(credential.identifierValue, binding.value)),
119
- predicate: and(eq(binding.namespace, identifier.namespace), eq(binding.value, identifier.value)),
120
- limit: 1
121
- };
122
- };
123
- const emailLookupRows = Effect.fn("Drizzle.emailLookupRows")(function* (mapping, moduleId, identifier) {
124
- const database = yield* CurrentEmailSql;
125
- const query = emailLookupQuery(mapping, moduleId, identifier);
126
- return yield* database.select(query.fields).from(query.from).innerJoin(query.subjectTable, query.subjectJoin).innerJoin(query.credentialTable, query.credentialJoin).where(query.predicate).limit(query.limit);
127
- });
128
- const decodeEmailSnapshot = Effect.fn("DrizzleEmail.decodeSnapshot")(function* (mapping, moduleId, requested, row) {
129
- if (!mapping.subject.isActiveStatus(row.subject[mapping.subject.status]) || !mapping.identifier.isCurrent(row.identifier) || !mapping.credential.isActiveStatus(row.credential[mapping.credential.status])) return void 0;
130
- const snapshot = yield* mapping.credential.decode({
131
- moduleId,
132
- subject: row.subject,
133
- identifier: row.identifier,
134
- credential: row.credential
135
- }).pipe(Effect.flatMap(snapshotEmailCredential));
136
- const subjectId = yield* mapping.subjectId.toSubject(row.subject[mapping.subject.id]);
137
- const verifiedAtMillis = yield* mapping.decodeInstant(row.identifier[mapping.identifier.verifiedAt]);
138
- if (snapshot.moduleId !== moduleId || !sameIdentifier(snapshot.identifier, requested) || snapshot.revision.subjectId !== subjectId || snapshot.revision.securityRevision !== row.subject[mapping.subject.securityRevision] || snapshot.identifierRevision !== row.identifier[mapping.identifier.bindingRevision] || snapshot.verifiedAtMillis !== verifiedAtMillis || snapshot.credentialId !== row.credential[mapping.credential.credentialId] || snapshot.credentialRevision !== row.credential[mapping.credential.credentialRevision]) return void 0;
139
- return snapshot;
140
- });
141
- const makeSqlEmailSignInTargets = Effect.fn("makeSqlEmailSignInTargets")(function* (mapping, configuration) {
142
- const database = yield* CurrentEmailSql;
143
- if (!configuration.coordinated) yield* (operations.validateStorage?.({
144
- ...mapping,
145
- proof: configuration.proof?.mapping
146
- }) ?? Effect.void).pipe(Effect.mapError(unavailable));
147
- return EmailSignInTargets.of({ lookup: (input) => (validEmailSignInConstraints(mapping) ? safeRead(database, configuration, Effect.gen(function* () {
148
- const row = (yield* emailLookupRows(mapping, input.moduleId, input.identifier))[0];
149
- if (row === void 0) return Option.none();
150
- const snapshot = yield* decodeEmailSnapshot(mapping, input.moduleId, input.identifier, row);
151
- return snapshot === void 0 ? Option.none() : Option.some(snapshot);
152
- })) : Effect.fail(unavailable())).pipe(Effect.provideService(CurrentEmailSql, database), translateFailure) });
153
- });
154
- const readSubject = Effect.fn("DrizzleEmail.readSubject")(function* (mapping, subjectId, locking) {
155
- const database = yield* CurrentEmailSql;
156
- const nativeSubjectId = yield* mapping.subjectId.toNative(subjectId);
157
- const s = subjectColumns(mapping);
158
- return {
159
- nativeSubjectId,
160
- subject: (yield* selectRows(database.select().from(mapping.subject.table).where(eq(s.id, nativeSubjectId)).limit(1), locking))[0]
161
- };
162
- });
163
- const identifierRow = Effect.fn("Drizzle.identifierRow")(function* (mapping, identifier, locking) {
164
- const database = yield* CurrentEmailSql;
165
- const i = identifierColumns(mapping);
166
- return yield* selectRows(database.select().from(mapping.identifier.table).where(and(eq(i.namespace, identifier.namespace), eq(i.value, identifier.value))).limit(1), locking);
167
- });
168
- const credentialById = Effect.fn("Drizzle.credentialById")(function* (mapping, moduleId, credentialId, locking) {
169
- const database = yield* CurrentEmailSql;
170
- const c = credentialColumns(mapping);
171
- return yield* selectRows(database.select().from(mapping.credential.table).where(and(eq(c.moduleId, moduleId), eq(c.credentialId, credentialId))).limit(1), locking);
172
- });
173
- const credentialByIdentifier = Effect.fn("Drizzle.credentialByIdentifier")(function* (mapping, moduleId, identifier, locking) {
174
- const database = yield* CurrentEmailSql;
175
- const c = credentialColumns(mapping);
176
- return yield* selectRows(database.select().from(mapping.credential.table).where(and(eq(c.moduleId, moduleId), eq(c.identifierNamespace, identifier.namespace), eq(c.identifierValue, identifier.value))).limit(1), locking);
177
- });
178
- const currentAddress = Effect.fn("DrizzleEmail.currentAddress")(function* (mapping, input, locking) {
179
- const database = yield* CurrentEmailSql;
180
- const locked = yield* readSubject(mapping, input.subjectId, locking);
181
- if (locked.subject === void 0 || !mapping.subject.isActiveStatus(locked.subject[mapping.subject.status])) return void 0;
182
- const discoveredSource = input.sourceCredentialId === void 0 ? void 0 : (yield* credentialById(mapping, input.moduleId, input.sourceCredentialId, false))[0];
183
- const sourceIdentifier = discoveredSource === void 0 ? void 0 : {
184
- namespace: discoveredSource[mapping.credential.identifierNamespace],
185
- value: discoveredSource[mapping.credential.identifierValue]
186
- };
187
- const identifiers = [input.target, ...sourceIdentifier === void 0 ? [] : [sourceIdentifier]].filter((value, index, values) => values.findIndex((candidate) => sameIdentifier(candidate, value)) === index).sort((left, right) => `${left.namespace}\u0000${left.value}`.localeCompare(`${right.namespace}\u0000${right.value}`));
188
- const lockedIdentifiers = /* @__PURE__ */ new Map();
189
- for (const identifier of identifiers) {
190
- const row = (yield* identifierRow(mapping, identifier, locking))[0];
191
- if (row !== void 0) lockedIdentifiers.set(`${identifier.namespace}\u0000${identifier.value}`, row);
192
- }
193
- const sourceCredential = input.sourceCredentialId === void 0 ? void 0 : (yield* credentialById(mapping, input.moduleId, input.sourceCredentialId, locking))[0];
194
- const targetCredential = (yield* credentialByIdentifier(mapping, input.moduleId, input.target, locking))[0];
195
- const a = authorityColumns(mapping);
196
- const activeAuthority = (yield* selectRows(database.select().from(mapping.authorityCredential.table).where(eq(a.subjectId, locked.nativeSubjectId)).orderBy(a.credentialId), locking)).filter((row) => mapping.authorityCredential.isActiveStatus(row[mapping.authorityCredential.status]));
197
- const subjectId = yield* mapping.subjectId.toSubject(locked.nativeSubjectId);
198
- const revision = Object.freeze({
199
- subjectId,
200
- securityRevision: locked.subject[mapping.subject.securityRevision],
201
- credentials: Object.freeze(activeAuthority.map((row) => Object.freeze({
202
- credentialId: row[mapping.authorityCredential.credentialId],
203
- revision: row[mapping.authorityCredential.revision]
204
- })))
205
- });
206
- const targetIdentifier = lockedIdentifiers.get(`${input.target.namespace}\u0000${input.target.value}`);
207
- const targetMutable = targetIdentifier !== void 0 && mapping.subjectId.equals(targetIdentifier[mapping.identifier.subjectId], locked.nativeSubjectId) && mapping.identifier.isMutableTarget(targetIdentifier) && (targetCredential === void 0 || !mapping.credential.isActiveStatus(targetCredential[mapping.credential.status]) && mapping.subjectId.equals(targetCredential[mapping.credential.subjectId], locked.nativeSubjectId));
208
- let source;
209
- if (input.sourceCredentialId !== void 0) {
210
- if (sourceCredential === void 0 || sourceIdentifier === void 0 || !mapping.subjectId.equals(sourceCredential[mapping.credential.subjectId], locked.nativeSubjectId) || !mapping.credential.isActiveStatus(sourceCredential[mapping.credential.status])) return void 0;
211
- const sourceIdentifierRow = lockedIdentifiers.get(`${sourceIdentifier.namespace}\u0000${sourceIdentifier.value}`);
212
- if (sourceIdentifierRow === void 0 || !mapping.identifier.isCurrent(sourceIdentifierRow) || !mapping.subjectId.equals(sourceIdentifierRow[mapping.identifier.subjectId], locked.nativeSubjectId)) return void 0;
213
- source = {
214
- credential: sourceCredential,
215
- identifier: sourceIdentifierRow,
216
- snapshot: yield* mapping.credential.decode({
217
- moduleId: input.moduleId,
218
- subject: locked.subject,
219
- identifier: sourceIdentifierRow,
220
- credential: sourceCredential
221
- }).pipe(Effect.flatMap(snapshotEmailCredential))
222
- };
223
- }
224
- let eligible = targetIdentifier === void 0 ? targetCredential === void 0 : targetMutable;
225
- if (input.sourceCredentialId !== void 0 && source === void 0) eligible = false;
226
- if (source !== void 0 && sameIdentifier(source.snapshot.identifier, input.target)) eligible = false;
227
- if (mapping.addressCardinality === "single" && input.sourceCredentialId === void 0) {
228
- const c = credentialColumns(mapping);
229
- if ((yield* selectRows(database.select().from(mapping.credential.table).where(and(eq(c.moduleId, input.moduleId), eq(c.subjectId, locked.nativeSubjectId))), locking)).some((row) => mapping.credential.isActiveStatus(row[mapping.credential.status]))) eligible = false;
230
- }
231
- return {
232
- nativeSubjectId: locked.nativeSubjectId,
233
- subject: locked.subject,
234
- revision,
235
- ...source === void 0 ? {} : { source },
236
- ...targetIdentifier === void 0 ? {} : { targetIdentifier },
237
- ...targetCredential === void 0 ? {} : { targetCredential },
238
- ...targetMutable ? { targetIdentifierRevision: targetIdentifier[mapping.identifier.bindingRevision] } : {},
239
- eligible
240
- };
241
- });
242
- const sameEmailRevision = (left, right) => {
243
- if (left.subjectId !== right.subjectId || left.securityRevision !== right.securityRevision || left.credentials.length !== right.credentials.length) return false;
244
- const expected = [...left.credentials].sort((a, b) => a.credentialId.localeCompare(b.credentialId));
245
- const actual = [...right.credentials].sort((a, b) => a.credentialId.localeCompare(b.credentialId));
246
- return expected.every((item, index) => item.credentialId === actual[index].credentialId && item.revision === actual[index].revision);
247
- };
248
- const actionModule = (moduleId, action) => `${moduleId}/${action === "verify-address" ? "verify-address" : "change-address"}`;
249
- const actionPurpose = (action) => action === "verify-address" ? "email-address-verification" : "email-address-change";
250
- const completionMatches = (input, action) => {
251
- const completion = input.completion.input;
252
- const binding = completion.binding;
253
- return completion.moduleId === actionModule(input.moduleId, action) && completion.purpose === actionPurpose(action) && binding._tag === "IdentifierChange" && sameIdentifier(binding.identifier, input.target) && sameEmailRevision(binding.revision, input.captured.revision);
254
- };
255
- const snapshotEmailMutation = Effect.fn("DrizzleEmail.snapshotMutation")(function* (input) {
256
- const evidence = yield* snapshotAuthenticationEvidence(input.authorization.evidence).pipe(Effect.mapError(unavailable));
257
- const requirement = yield* snapshotEmailRequirement(input.authorization.requirement);
258
- const source = input.captured.source === void 0 ? void 0 : yield* snapshotEmailCredential(input.captured.source);
259
- return Object.freeze({
260
- ...input,
261
- target: Object.freeze({ ...input.target }),
262
- ...input.invalidation === void 0 ? {} : { invalidation: Object.freeze({ ...input.invalidation }) },
263
- captured: Object.freeze({
264
- eligible: input.captured.eligible,
265
- revision: snapshotEmailRevision(input.captured.revision),
266
- ...input.captured.targetIdentifierRevision === void 0 ? {} : { targetIdentifierRevision: input.captured.targetIdentifierRevision },
267
- ...source === void 0 ? {} : { source }
268
- }),
269
- authorization: Object.freeze({
270
- challenge: Object.freeze({
271
- ...input.authorization.challenge,
272
- target: Object.freeze({ ...input.authorization.challenge.target }),
273
- revision: snapshotEmailRevision(input.authorization.challenge.revision)
274
- }),
275
- evidence,
276
- requirement
277
- })
278
- });
279
- });
280
- const validateEmailAuthority = Effect.fn("DrizzleEmail.validateAuthority")(function* (mapping, configuration, input, action) {
281
- const confirmsExisting = action === "verify-address" && input.captured.targetIdentifierRevision !== void 0;
282
- if (!input.captured.eligible || !completionMatches(input, action) || input.authorization.challenge.moduleId !== input.moduleId || input.authorization.challenge.action !== action || input.authorization.challenge.commandId !== input.commandId || !sameIdentifier(input.authorization.challenge.target, input.target) || input.authorization.challenge.sourceCredentialId !== input.captured.source?.credentialId || !sameEmailRevision(input.authorization.challenge.revision, input.captured.revision) || input.authorization.challenge.targetIdentifierRevision !== input.captured.targetIdentifierRevision || input.authorization.evidence.flowId !== input.commandId || input.authorization.evidence.bindingDigest !== input.authorization.challenge.bindingDigest || !sameEmailRevision(input.authorization.evidence.revision, input.captured.revision) || action === "verify-address" && input.captured.source !== void 0 || action === "change-address" && input.captured.source === void 0 || confirmsExisting !== (input.invalidation === void 0) || (input.invalidation?.existingSessions === "immediate" || input.invalidation?.existingSessions === "cache-expiry") && mapping.sessionInvalidation !== "same-authority-immediate") return void 0;
283
- const current = yield* currentAddress(mapping, {
284
- moduleId: input.moduleId,
285
- subjectId: input.captured.revision.subjectId,
286
- target: input.target,
287
- ...input.captured.source === void 0 ? {} : { sourceCredentialId: input.captured.source.credentialId }
288
- }, configuration.locking);
289
- if (current === void 0 || !current.eligible || !sameEmailRevision(current.revision, input.captured.revision) || current.targetIdentifierRevision !== input.captured.targetIdentifierRevision || input.captured.source !== void 0 && (current.source === void 0 || current.source.snapshot.identifierRevision !== input.captured.source.identifierRevision || current.source.snapshot.credentialRevision !== input.captured.source.credentialRevision || !sameIdentifier(current.source.snapshot.identifier, input.captured.source.identifier))) return void 0;
290
- const currentRequirement = yield* mapping.subject.decodeActionRequirement(current.subject, action);
291
- const original = yield* assessAuthentication(input.authorization.evidence, input.authorization.requirement).pipe(Effect.mapError(unavailable));
292
- const configured = yield* assessAuthentication(input.authorization.evidence, currentRequirement).pipe(Effect.mapError(unavailable));
293
- return original.satisfied && configured.satisfied ? current : void 0;
294
- });
295
- const commandExists = Effect.fn("Drizzle.commandExists")(function* (mapping, moduleId, commandId, locking) {
296
- const database = yield* CurrentEmailSql;
297
- const c = commandColumns(mapping);
298
- return yield* selectRows(database.select().from(mapping.command.table).where(and(eq(c.moduleId, moduleId), eq(c.commandId, commandId))).limit(1), locking);
299
- });
300
- const applyMutation = Effect.fn("DrizzleEmail.applyMutation")(function* (mapping, input, action, current, allocated, now) {
301
- const database = yield* CurrentEmailSql;
302
- const i = identifierColumns(mapping);
303
- const c = credentialColumns(mapping);
304
- const a = authorityColumns(mapping);
305
- const s = subjectColumns(mapping);
306
- const targetCredentialId = current.targetCredential?.[mapping.credential.credentialId] ?? allocated.targetCredentialId;
307
- if (action === "change-address") {
308
- const source = current.source;
309
- yield* database.update(mapping.identifier.table).set(mapping.identifier.encodeRetirement({
310
- source: source.snapshot.identifier,
311
- bindingRevision: allocated.sourceIdentifierRevision
312
- })).where(and(eq(i.namespace, source.snapshot.identifier.namespace), eq(i.value, source.snapshot.identifier.value), eq(i.subjectId, current.nativeSubjectId), eq(i.bindingRevision, source.snapshot.identifierRevision)));
313
- yield* database.update(mapping.credential.table).set(mapping.credential.encodeRetirement({
314
- source: source.snapshot.identifier,
315
- credentialRevision: allocated.sourceCredentialRevision
316
- })).where(and(eq(c.moduleId, input.moduleId), eq(c.credentialId, source.snapshot.credentialId), eq(c.subjectId, current.nativeSubjectId), eq(c.credentialRevision, source.snapshot.credentialRevision)));
317
- yield* database.update(mapping.authorityCredential.table).set(mapping.authorityCredential.encodeRetirement(allocated.sourceCredentialRevision)).where(and(eq(a.subjectId, current.nativeSubjectId), eq(a.credentialId, source.snapshot.credentialId), eq(a.revision, source.snapshot.credentialRevision)));
318
- }
319
- if (current.targetIdentifier === void 0) yield* database.insert(mapping.identifier.table).values(mapping.identifier.encodeVerifiedInsert({
320
- identifier: input.target,
321
- subjectId: current.nativeSubjectId,
322
- verifiedAtMillis: now,
323
- bindingRevision: allocated.targetIdentifierRevision
324
- }));
325
- else yield* database.update(mapping.identifier.table).set(mapping.identifier.encodeVerification({
326
- verifiedAtMillis: now,
327
- bindingRevision: allocated.targetIdentifierRevision
328
- })).where(and(eq(i.namespace, input.target.namespace), eq(i.value, input.target.value), eq(i.subjectId, current.nativeSubjectId), eq(i.bindingRevision, current.targetIdentifier[mapping.identifier.bindingRevision])));
329
- if (current.targetCredential === void 0) {
330
- yield* database.insert(mapping.credential.table).values(mapping.credential.encodeVerifiedInsert({
331
- moduleId: input.moduleId,
332
- subjectId: current.nativeSubjectId,
333
- credentialId: targetCredentialId,
334
- identifier: input.target,
335
- credentialRevision: allocated.targetCredentialRevision
336
- }));
337
- yield* database.insert(mapping.authorityCredential.table).values(mapping.authorityCredential.encodeInsert({
338
- subjectId: current.nativeSubjectId,
339
- credentialId: targetCredentialId,
340
- revision: allocated.targetCredentialRevision
341
- }));
342
- } else {
343
- const oldRevision = current.targetCredential[mapping.credential.credentialRevision];
344
- yield* database.update(mapping.credential.table).set(mapping.credential.encodeActivation({
345
- identifier: input.target,
346
- credentialRevision: allocated.targetCredentialRevision
347
- })).where(and(eq(c.moduleId, input.moduleId), eq(c.credentialId, targetCredentialId), eq(c.subjectId, current.nativeSubjectId), eq(c.credentialRevision, oldRevision)));
348
- yield* database.update(mapping.authorityCredential.table).set(mapping.authorityCredential.encodeActivation(allocated.targetCredentialRevision)).where(and(eq(a.subjectId, current.nativeSubjectId), eq(a.credentialId, targetCredentialId), eq(a.revision, oldRevision)));
349
- }
350
- yield* database.update(mapping.subject.table).set(updateValues([[mapping.subject.securityRevision, allocated.nextSecurityRevision]])).where(and(eq(s.id, current.nativeSubjectId), eq(s.securityRevision, input.captured.revision.securityRevision)));
351
- yield* database.insert(mapping.command.table).values(mapping.command.encodeInsert({
352
- moduleId: input.moduleId,
353
- commandId: input.commandId,
354
- action,
355
- bindingDigest: input.authorization.challenge.bindingDigest,
356
- retentionUntilMillis: now + mapping.commandRetentionMillis
357
- }));
358
- const sourceStillActive = action === "verify-address" ? [] : yield* selectRows(database.select().from(mapping.credential.table).where(and(eq(c.moduleId, input.moduleId), eq(c.credentialId, current.source.snapshot.credentialId), eq(c.subjectId, current.nativeSubjectId))), false);
359
- const target = (yield* emailLookupRows(mapping, input.moduleId, input.target))[0];
360
- const targetAuthority = yield* selectRows(database.select().from(mapping.authorityCredential.table).where(and(eq(a.subjectId, current.nativeSubjectId), eq(a.credentialId, targetCredentialId))).limit(1), false);
361
- const command = yield* selectRows(database.select().from(mapping.command.table).where(and(eq(commandColumns(mapping).moduleId, input.moduleId), eq(commandColumns(mapping).commandId, input.commandId), eq(commandColumns(mapping).action, action), eq(commandColumns(mapping).bindingDigest, input.authorization.challenge.bindingDigest), eq(commandColumns(mapping).retentionUntil, mapping.encodeInstant(now + mapping.commandRetentionMillis)))).limit(1), false);
362
- const targetVerifiedAt = target === void 0 ? void 0 : yield* mapping.decodeInstant(target.identifier[mapping.identifier.verifiedAt]);
363
- const sourceIdentifier = action === "verify-address" ? [] : yield* identifierRow(mapping, current.source.snapshot.identifier, false);
364
- const sourceAuthority = action === "verify-address" ? [] : yield* selectRows(database.select().from(mapping.authorityCredential.table).where(and(eq(a.subjectId, current.nativeSubjectId), eq(a.credentialId, current.source.snapshot.credentialId))).limit(1), false);
365
- return target !== void 0 && mapping.subjectId.equals(target.subject[mapping.subject.id], current.nativeSubjectId) && mapping.subject.isActiveStatus(target.subject[mapping.subject.status]) && target.subject[mapping.subject.securityRevision] === allocated.nextSecurityRevision && target.identifier[mapping.identifier.bindingRevision] === allocated.targetIdentifierRevision && targetVerifiedAt === now && target.credential[mapping.credential.credentialRevision] === allocated.targetCredentialRevision && target.credential[mapping.credential.credentialId] === targetCredentialId && mapping.subjectId.equals(target.credential[mapping.credential.subjectId], current.nativeSubjectId) && mapping.identifier.isCurrent(target.identifier) && mapping.credential.isActiveStatus(target.credential[mapping.credential.status]) && targetAuthority.length === 1 && targetAuthority[0][mapping.authorityCredential.revision] === allocated.targetCredentialRevision && mapping.authorityCredential.isActiveStatus(targetAuthority[0][mapping.authorityCredential.status]) && command.length === 1 && (action === "verify-address" || sourceStillActive.length === 1 && sourceStillActive[0][mapping.credential.credentialRevision] === allocated.sourceCredentialRevision && !mapping.credential.isActiveStatus(sourceStillActive[0][mapping.credential.status]) && sourceIdentifier.length === 1 && mapping.subjectId.equals(sourceIdentifier[0][mapping.identifier.subjectId], current.nativeSubjectId) && sourceIdentifier[0][mapping.identifier.bindingRevision] === allocated.sourceIdentifierRevision && !mapping.identifier.isCurrent(sourceIdentifier[0]) && sourceAuthority.length === 1 && sourceAuthority[0][mapping.authorityCredential.revision] === allocated.sourceCredentialRevision && !mapping.authorityCredential.isActiveStatus(sourceAuthority[0][mapping.authorityCredential.status]));
366
- });
367
- const probeProofCompletion = Effect.fn("Drizzle.probeProofCompletion")(function* (configuration, input) {
368
- const database = yield* CurrentEmailSql;
369
- if (configuration.proof === void 0) return yield* Effect.fail(unavailable());
370
- const validProbe = { _tag: "EmailProofCompletionValid" };
371
- const plan = {
372
- input,
373
- prepare: (decision, journal, project) => journal.prepare(project(decision))
374
- };
375
- return yield* coordinateCommit(() => database.transaction((transaction) => completeProofPlanIn(configuration.proof.mapping, configuration.proof.configuration, plan, Effect.fail(validProbe), () => false).pipe(Effect.provideService(CurrentProofSql, transaction))), { mode: configuration.mode }).pipe(Effect.as(false), Effect.catchCause((cause) => {
376
- const reason = cause.reasons[0];
377
- return cause.reasons.length === 1 && reason !== void 0 && Cause.isFailReason(reason) && reason.error === validProbe ? Effect.succeed(true) : Effect.failCause(cause);
378
- }));
379
- });
380
- const prepareRejected = Effect.fn("Drizzle.prepareRejected")(function* (configuration, prepare) {
381
- const database = yield* CurrentEmailSql;
382
- return yield* owned(database, configuration, Effect.gen(function* () {
383
- const journal = yield* CurrentCommitJournal;
384
- return yield* Effect.succeed(prepare("rejected", journal));
385
- }));
386
- });
387
- const makeSqlEmailAddressPersistence = Effect.fn("makeSqlEmailAddressPersistence")(function* (mapping, configuration) {
388
- const database = yield* CurrentEmailSql;
389
- if (!configuration.coordinated) yield* (operations.validateStorage?.({
390
- ...mapping,
391
- proof: configuration.proof?.mapping
392
- }) ?? Effect.void).pipe(Effect.mapError(unavailable));
393
- const hooks = yield* LifecycleHooks;
394
- return EmailAddressPersistence.of({
395
- target: (input) => (validAddressConstraints(mapping) ? safeRead(database, configuration, Effect.gen(function* () {
396
- const current = yield* currentAddress(mapping, input, configuration.locking);
397
- if (current === void 0) return yield* unavailable();
398
- return Object.freeze({
399
- revision: snapshotEmailRevision(current.revision),
400
- eligible: current.eligible,
401
- ...current.targetIdentifierRevision === void 0 ? {} : { targetIdentifierRevision: current.targetIdentifierRevision },
402
- ...current.source === void 0 ? {} : { source: yield* snapshotEmailCredential(current.source.snapshot) }
403
- });
404
- })) : Effect.fail(unavailable())).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure),
405
- checkCompletion: (input) => {
406
- if (configuration.proof === void 0 || input.binding._tag !== "IdentifierChange") return Effect.succeed(false).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure);
407
- const binding = input.binding;
408
- return safeRead(database, configuration, Effect.gen(function* () {
409
- const action = input.moduleId.endsWith("/verify-address") && input.purpose === "email-address-verification" ? "verify-address" : input.moduleId.endsWith("/change-address") && input.purpose === "email-address-change" ? "change-address" : void 0;
410
- if (action === void 0) return false;
411
- const moduleId = input.moduleId.slice(0, -`/${action}`.length);
412
- const current = yield* currentAddress(mapping, {
413
- moduleId,
414
- subjectId: binding.revision.subjectId,
415
- target: binding.identifier
416
- }, false);
417
- return current !== void 0 && sameEmailRevision(current.revision, binding.revision);
418
- })).pipe(Effect.flatMap((current) => current ? probeProofCompletion(configuration, input) : Effect.succeed(false))).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure);
419
- },
420
- verifyWithProof: (uncaptured, prepare) => mutateAddress(mapping, configuration, uncaptured, "verify-address", prepare).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure),
421
- changeWithProof: (uncaptured, prepare) => mutateAddress(mapping, configuration, uncaptured, "change-address", prepare).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure),
422
- cleanup: (input, prepare) => owned(database, configuration, Effect.gen(function* () {
423
- const transaction = yield* CurrentEmailSql;
424
- const journal = yield* CurrentCommitJournal;
425
- const c = commandColumns(mapping);
426
- const now = yield* nowMillis;
427
- const rows = yield* selectRows(transaction.select({ commandId: c.commandId }).from(mapping.command.table).where(and(eq(c.moduleId, input.moduleId), lte(c.retentionUntil, mapping.encodeInstant(now)))).limit(input.limit + 1), configuration.locking);
428
- const selected = rows.slice(0, input.limit);
429
- const receipt = prepare({
430
- removed: selected.length,
431
- hasMore: rows.length > input.limit
432
- }, journal);
433
- if (selected.length > 0) yield* transaction.delete(mapping.command.table).where(and(eq(c.moduleId, input.moduleId), inArray(c.commandId, selected.map((row) => row.commandId)), lte(c.retentionUntil, mapping.encodeInstant(now))));
434
- return receipt;
435
- })).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure)
436
- });
437
- });
438
- const mutateAddress = Effect.fn("Drizzle.mutateAddress")(function* (mapping, configuration, uncaptured, action, prepare) {
439
- const database = yield* CurrentEmailSql;
440
- if (!validAddressConstraints(mapping) || configuration.proof === void 0) return yield* unavailable();
441
- const input = yield* snapshotEmailMutation(uncaptured);
442
- const targetCredentialId = yield* allocate(configuration.mode, mapping.allocateCredentialId, mapping.allocateCredentialIdSync);
443
- const targetIdentifierRevision = yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync);
444
- const targetCredentialRevision = yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync);
445
- const sourceIdentifierRevision = yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync);
446
- const sourceCredentialRevision = yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync);
447
- const confirmsExisting = action === "verify-address" && input.captured.targetIdentifierRevision !== void 0;
448
- const nextRevision = confirmsExisting ? input.captured.revision.securityRevision : yield* nextSecurityRevision(mapping, configuration.mode, input.captured.revision.securityRevision);
449
- if (!confirmsExisting && nextRevision === input.captured.revision.securityRevision || [
450
- targetIdentifierRevision,
451
- targetCredentialRevision,
452
- sourceIdentifierRevision,
453
- sourceCredentialRevision
454
- ].some((value) => input.captured.revision.credentials.some((item) => item.revision === value))) return yield* unavailable();
455
- return yield* owned(database, configuration, Effect.gen(function* () {
456
- const journal = yield* CurrentCommitJournal;
457
- const current = yield* validateEmailAuthority(mapping, configuration, input, action);
458
- if (current === void 0) return prepare("rejected", journal);
459
- if ((yield* commandExists(mapping, input.moduleId, input.commandId, configuration.locking)).length > 0) return prepare("rejected", journal);
460
- let receipt;
461
- yield* completeProofPlanIn(configuration.proof.mapping, configuration.proof.configuration, input.completion, Effect.gen(function* () {
462
- const currentRequirement = yield* mapping.subject.decodeActionRequirement(current.subject, action);
463
- const original = yield* assessAuthentication(input.authorization.evidence, input.authorization.requirement).pipe(Effect.mapError(unavailable));
464
- const configured = yield* assessAuthentication(input.authorization.evidence, currentRequirement).pipe(Effect.mapError(unavailable));
465
- if (!original.satisfied || !configured.satisfied) return false;
466
- const now = yield* nowMillis;
467
- return yield* applyMutation(mapping, input, action, current, {
468
- targetCredentialId,
469
- targetIdentifierRevision,
470
- targetCredentialRevision,
471
- sourceIdentifierRevision,
472
- sourceCredentialRevision,
473
- nextSecurityRevision: nextRevision
474
- }, now);
475
- }), (decision) => {
476
- receipt = prepare(decision === "completed" ? "changed" : "rejected", journal);
477
- return decision;
478
- });
479
- return receipt ?? prepare("rejected", journal);
480
- })).pipe(Effect.catchCause((cause) => cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isCommandConflict, cause) || cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isIdentifierConflict, cause) || cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isCredentialConflict, cause) ? prepareRejected(configuration, prepare) : Effect.failCause(cause)));
481
- });
482
- return {
483
- validEmailSignInConstraints,
484
- emailLookupQuery,
485
- decodeEmailSnapshot,
486
- makeSqlEmailSignInTargets,
487
- currentAddress,
488
- sameEmailRevision,
489
- snapshotEmailMutation,
490
- validateEmailAuthority,
491
- makeSqlEmailAddressPersistence
492
- };
493
- };
494
- //#endregion
495
- export { CurrentEmailSql, makeEmailKernel };
496
-
497
- //# sourceMappingURL=email-kernel.mjs.map