@yielded/auth-persistence-drizzle 0.1.0-beta.25 → 0.1.0-beta.27

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 (383) hide show
  1. package/README.md +4 -2
  2. package/dist/D1.d.mts +495 -1151
  3. package/dist/D1.mjs +41 -19
  4. package/dist/D1.mjs.map +1 -1
  5. package/dist/Libsql.d.mts +385 -1996
  6. package/dist/Libsql.mjs +43 -47
  7. package/dist/Libsql.mjs.map +1 -1
  8. package/dist/Mysql2.d.mts +397 -1743
  9. package/dist/Mysql2.mjs +35 -41
  10. package/dist/Mysql2.mjs.map +1 -1
  11. package/dist/Pglite.d.mts +397 -1743
  12. package/dist/Pglite.mjs +42 -31
  13. package/dist/Pglite.mjs.map +1 -1
  14. package/dist/Postgres.d.mts +397 -1743
  15. package/dist/Postgres.mjs +42 -31
  16. package/dist/Postgres.mjs.map +1 -1
  17. package/dist/SqliteBun.d.mts +385 -1992
  18. package/dist/SqliteBun.mjs +43 -43
  19. package/dist/SqliteBun.mjs.map +1 -1
  20. package/dist/SqliteDo.d.mts +385 -1991
  21. package/dist/SqliteDo.mjs +42 -41
  22. package/dist/SqliteDo.mjs.map +1 -1
  23. package/dist/SqliteNode.d.mts +385 -1992
  24. package/dist/SqliteNode.mjs +43 -43
  25. package/dist/SqliteNode.mjs.map +1 -1
  26. package/dist/SqliteWasm.d.mts +385 -1992
  27. package/dist/SqliteWasm.mjs +43 -43
  28. package/dist/SqliteWasm.mjs.map +1 -1
  29. package/dist/drizzle/d1-identity.mjs +2 -2
  30. package/dist/drizzle/d1-identity.mjs.map +1 -1
  31. package/dist/drizzle/driver-types.d.mts +15 -0
  32. package/dist/drizzle/email-drivers.mjs +32 -0
  33. package/dist/drizzle/email-drivers.mjs.map +1 -0
  34. package/dist/drizzle/email-model.d.mts +9 -13
  35. package/dist/drizzle/email-target.d.mts +10 -11
  36. package/dist/drizzle/email-target.mjs +33 -70
  37. package/dist/drizzle/email-target.mjs.map +1 -1
  38. package/dist/drizzle/model.d.mts +1 -10
  39. package/dist/drizzle/model.mjs +1 -2
  40. package/dist/drizzle/model.mjs.map +1 -1
  41. package/dist/drizzle/mysql-identity.mjs +3 -6
  42. package/dist/drizzle/mysql-identity.mjs.map +1 -1
  43. package/dist/drizzle/native-clock.d.mts +9 -0
  44. package/dist/drizzle/native-clock.mjs +18 -0
  45. package/dist/drizzle/native-clock.mjs.map +1 -0
  46. package/dist/drizzle/native-database.d.mts +46 -0
  47. package/dist/drizzle/native-database.mjs +6 -5
  48. package/dist/drizzle/native-database.mjs.map +1 -1
  49. package/dist/drizzle/native-sql-table.mjs +13 -5
  50. package/dist/drizzle/native-sql-table.mjs.map +1 -1
  51. package/dist/drizzle/native-target.d.mts +6 -0
  52. package/dist/drizzle/native-target.mjs +44 -0
  53. package/dist/drizzle/native-target.mjs.map +1 -0
  54. package/dist/drizzle/oauth-connected-drivers.mjs +4 -56
  55. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
  56. package/dist/drizzle/oauth-connected-model.d.mts +5 -22
  57. package/dist/drizzle/oauth-connected-model.mjs +1 -7
  58. package/dist/drizzle/oauth-connected-reference.d.mts +5 -7
  59. package/dist/drizzle/oauth-connected-reference.mjs +11 -3
  60. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -1
  61. package/dist/drizzle/oauth-drivers.mjs +1 -2
  62. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  63. package/dist/drizzle/oauth-model.d.mts +11 -37
  64. package/dist/drizzle/oauth-model.mjs +3 -4
  65. package/dist/drizzle/oauth-model.mjs.map +1 -1
  66. package/dist/drizzle/oauth-proxy.d.mts +1 -1
  67. package/dist/drizzle/oauth-proxy.mjs +1 -1
  68. package/dist/drizzle/oauth-target.d.mts +9 -6
  69. package/dist/drizzle/oauth-target.mjs +47 -15
  70. package/dist/drizzle/oauth-target.mjs.map +1 -1
  71. package/dist/drizzle/passkey/target.d.mts +14 -0
  72. package/dist/drizzle/passkey/target.mjs +52 -0
  73. package/dist/drizzle/passkey/target.mjs.map +1 -0
  74. package/dist/drizzle/passkey/write-target.d.mts +11 -0
  75. package/dist/drizzle/passkey/write-target.mjs +28 -0
  76. package/dist/drizzle/passkey/write-target.mjs.map +1 -0
  77. package/dist/drizzle/passkey-drivers.mjs +2 -4
  78. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  79. package/dist/drizzle/passkey-model.d.mts +5 -26
  80. package/dist/drizzle/passkey-model.mjs +2 -8
  81. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +3 -6
  82. package/dist/drizzle/passkey-write-drivers.mjs +2 -3
  83. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  84. package/dist/drizzle/passkey-write-model.d.mts +7 -9
  85. package/dist/drizzle/passkey-write-model.mjs +1 -3
  86. package/dist/drizzle/passkey-write-model.mjs.map +1 -1
  87. package/dist/drizzle/password-drivers.mjs +31 -0
  88. package/dist/drizzle/password-drivers.mjs.map +1 -0
  89. package/dist/drizzle/password-model.d.mts +7 -10
  90. package/dist/drizzle/password-target.d.mts +7 -8
  91. package/dist/drizzle/password-target.mjs +23 -68
  92. package/dist/drizzle/password-target.mjs.map +1 -1
  93. package/dist/drizzle/pg-identity.mjs +3 -6
  94. package/dist/drizzle/pg-identity.mjs.map +1 -1
  95. package/dist/drizzle/phone-drivers.mjs +24 -0
  96. package/dist/drizzle/phone-drivers.mjs.map +1 -0
  97. package/dist/drizzle/phone-model.d.mts +13 -104
  98. package/dist/drizzle/phone-model.mjs +5 -33
  99. package/dist/drizzle/phone-model.mjs.map +1 -1
  100. package/dist/drizzle/phone-target.mjs +22 -171
  101. package/dist/drizzle/phone-target.mjs.map +1 -1
  102. package/dist/drizzle/proof-drivers.mjs +24 -0
  103. package/dist/drizzle/proof-drivers.mjs.map +1 -0
  104. package/dist/drizzle/proof-model.d.mts +7 -15
  105. package/dist/drizzle/proof-target.d.mts +5 -5
  106. package/dist/drizzle/proof-target.mjs +14 -28
  107. package/dist/drizzle/proof-target.mjs.map +1 -1
  108. package/dist/drizzle/session-drivers.mjs +97 -0
  109. package/dist/drizzle/session-drivers.mjs.map +1 -0
  110. package/dist/drizzle/session-model.d.mts +11 -22
  111. package/dist/drizzle/sqlite-do-database.d.mts +3 -3
  112. package/dist/drizzle/sqlite-do-database.mjs +6 -1
  113. package/dist/drizzle/sqlite-do-database.mjs.map +1 -1
  114. package/dist/drizzle/sqlite-identity.mjs +3 -5
  115. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  116. package/dist/drizzle/step-up-model.d.mts +2 -5
  117. package/dist/drizzle/storage-validation.mjs +2 -1
  118. package/dist/drizzle/storage-validation.mjs.map +1 -1
  119. package/dist/drizzle/totp-model.d.mts +7 -74
  120. package/dist/drizzle/totp-model.mjs +1 -5
  121. package/dist/drizzle/totp-model.mjs.map +1 -1
  122. package/dist/drizzle/totp-target.mjs +39 -75
  123. package/dist/drizzle/totp-target.mjs.map +1 -1
  124. package/dist/drizzle/transaction-handle.mjs +13 -0
  125. package/dist/drizzle/transaction-handle.mjs.map +1 -0
  126. package/dist/drizzle/transaction-mysql.mjs +43 -12
  127. package/dist/drizzle/transaction-mysql.mjs.map +1 -1
  128. package/dist/index.d.mts +17 -22
  129. package/dist/index.mjs +10 -16
  130. package/dist/internal/drizzle-postgres.mjs +4 -6
  131. package/dist/internal/drizzle-postgres.mjs.map +1 -1
  132. package/dist/internal/drizzle-sqlite.mjs +4 -6
  133. package/dist/internal/drizzle-sqlite.mjs.map +1 -1
  134. package/package.json +1 -1
  135. package/src/D1.ts +77 -74
  136. package/src/Libsql.ts +65 -105
  137. package/src/Mysql2.ts +52 -87
  138. package/src/Pglite.ts +74 -81
  139. package/src/Postgres.ts +74 -81
  140. package/src/SqliteBun.ts +65 -113
  141. package/src/SqliteDo.ts +58 -106
  142. package/src/SqliteNode.ts +65 -113
  143. package/src/SqliteWasm.ts +65 -113
  144. package/src/drizzle/d1-identity.ts +2 -2
  145. package/src/drizzle/driver-types.ts +26 -0
  146. package/src/drizzle/email-drivers.ts +320 -0
  147. package/src/drizzle/email-model.ts +24 -78
  148. package/src/drizzle/email-target.ts +118 -211
  149. package/src/drizzle/model.ts +0 -2
  150. package/src/drizzle/mysql-identity.ts +4 -24
  151. package/src/drizzle/native-clock.ts +21 -0
  152. package/src/drizzle/native-database.ts +59 -18
  153. package/src/drizzle/native-sql-table.ts +104 -87
  154. package/src/drizzle/native-target.ts +120 -0
  155. package/src/drizzle/oauth-connected-drivers.ts +24 -233
  156. package/src/drizzle/oauth-connected-model.ts +3 -93
  157. package/src/drizzle/oauth-connected-reference.ts +16 -25
  158. package/src/drizzle/oauth-drivers.ts +58 -99
  159. package/src/drizzle/oauth-model.ts +27 -132
  160. package/src/drizzle/oauth-target.ts +250 -33
  161. package/src/drizzle/passkey/target.ts +205 -0
  162. package/src/drizzle/passkey/write-target.ts +91 -0
  163. package/src/drizzle/passkey-drivers.ts +35 -133
  164. package/src/drizzle/passkey-model.ts +3 -81
  165. package/src/drizzle/passkey-registration-ceremony-model.ts +5 -25
  166. package/src/drizzle/passkey-write-drivers.ts +32 -102
  167. package/src/drizzle/passkey-write-model.ts +10 -44
  168. package/src/drizzle/password-drivers.ts +286 -0
  169. package/src/drizzle/password-model.ts +10 -44
  170. package/src/drizzle/password-target.ts +85 -239
  171. package/src/drizzle/pg-identity.ts +4 -19
  172. package/src/drizzle/phone-drivers.ts +142 -0
  173. package/src/drizzle/phone-model.ts +22 -162
  174. package/src/drizzle/phone-target.ts +51 -493
  175. package/src/drizzle/proof-drivers.ts +123 -0
  176. package/src/drizzle/proof-model.ts +12 -123
  177. package/src/drizzle/proof-target.ts +38 -102
  178. package/src/drizzle/session-drivers.ts +696 -0
  179. package/src/drizzle/session-model.ts +54 -118
  180. package/src/drizzle/sqlite-do-database.ts +8 -0
  181. package/src/drizzle/sqlite-identity.ts +4 -22
  182. package/src/drizzle/step-up-model.ts +13 -37
  183. package/src/drizzle/storage-validation.ts +2 -1
  184. package/src/drizzle/totp-model.ts +20 -77
  185. package/src/drizzle/totp-target.ts +121 -261
  186. package/src/drizzle/transaction-handle.ts +41 -0
  187. package/src/drizzle/transaction-mysql.ts +91 -26
  188. package/src/index.ts +7 -122
  189. package/src/internal/drizzle-postgres.ts +4 -7
  190. package/src/internal/drizzle-sqlite.ts +4 -7
  191. package/dist/drizzle/crypto.mjs +0 -11
  192. package/dist/drizzle/crypto.mjs.map +0 -1
  193. package/dist/drizzle/d1-emails.d.mts +0 -62
  194. package/dist/drizzle/d1-emails.mjs +0 -626
  195. package/dist/drizzle/d1-emails.mjs.map +0 -1
  196. package/dist/drizzle/d1-generated-statement.mjs +0 -79
  197. package/dist/drizzle/d1-generated-statement.mjs.map +0 -1
  198. package/dist/drizzle/d1-oauth.d.mts +0 -331
  199. package/dist/drizzle/d1-oauth.mjs +0 -79
  200. package/dist/drizzle/d1-oauth.mjs.map +0 -1
  201. package/dist/drizzle/d1-passkey.d.mts +0 -37
  202. package/dist/drizzle/d1-passkey.mjs +0 -98
  203. package/dist/drizzle/d1-passkey.mjs.map +0 -1
  204. package/dist/drizzle/d1-password-prepared.d.mts +0 -25
  205. package/dist/drizzle/d1-password-prepared.mjs +0 -473
  206. package/dist/drizzle/d1-password-prepared.mjs.map +0 -1
  207. package/dist/drizzle/d1-passwords.d.mts +0 -70
  208. package/dist/drizzle/d1-passwords.mjs +0 -808
  209. package/dist/drizzle/d1-passwords.mjs.map +0 -1
  210. package/dist/drizzle/d1-phone.d.mts +0 -23
  211. package/dist/drizzle/d1-phone.mjs +0 -33
  212. package/dist/drizzle/d1-phone.mjs.map +0 -1
  213. package/dist/drizzle/d1-planning.d.mts +0 -11
  214. package/dist/drizzle/d1-planning.mjs +0 -43
  215. package/dist/drizzle/d1-planning.mjs.map +0 -1
  216. package/dist/drizzle/d1-proofs.d.mts +0 -80
  217. package/dist/drizzle/d1-proofs.mjs +0 -842
  218. package/dist/drizzle/d1-proofs.mjs.map +0 -1
  219. package/dist/drizzle/d1-sessions.d.mts +0 -68
  220. package/dist/drizzle/d1-sessions.mjs +0 -987
  221. package/dist/drizzle/d1-sessions.mjs.map +0 -1
  222. package/dist/drizzle/d1-totp.d.mts +0 -23
  223. package/dist/drizzle/d1-totp.mjs +0 -30
  224. package/dist/drizzle/d1-totp.mjs.map +0 -1
  225. package/dist/drizzle/email-registration.d.mts +0 -33
  226. package/dist/drizzle/email-registration.mjs +0 -281
  227. package/dist/drizzle/email-registration.mjs.map +0 -1
  228. package/dist/drizzle/email-sql.d.mts +0 -1
  229. package/dist/drizzle/email-sql.mjs +0 -9
  230. package/dist/drizzle/email-sql.mjs.map +0 -1
  231. package/dist/drizzle/mysql-emails.d.mts +0 -71
  232. package/dist/drizzle/mysql-emails.mjs +0 -43
  233. package/dist/drizzle/mysql-emails.mjs.map +0 -1
  234. package/dist/drizzle/mysql-password-prepared.d.mts +0 -30
  235. package/dist/drizzle/mysql-password-prepared.mjs +0 -21
  236. package/dist/drizzle/mysql-password-prepared.mjs.map +0 -1
  237. package/dist/drizzle/mysql-passwords.d.mts +0 -71
  238. package/dist/drizzle/mysql-passwords.mjs +0 -43
  239. package/dist/drizzle/mysql-passwords.mjs.map +0 -1
  240. package/dist/drizzle/mysql-proofs.d.mts +0 -75
  241. package/dist/drizzle/mysql-proofs.mjs +0 -28
  242. package/dist/drizzle/mysql-proofs.mjs.map +0 -1
  243. package/dist/drizzle/mysql-sessions.d.mts +0 -92
  244. package/dist/drizzle/mysql-sessions.mjs +0 -58
  245. package/dist/drizzle/mysql-sessions.mjs.map +0 -1
  246. package/dist/drizzle/oauth-connected-model.mjs.map +0 -1
  247. package/dist/drizzle/oauth-connected-target.d.mts +0 -6
  248. package/dist/drizzle/oauth-connected-target.mjs +0 -12
  249. package/dist/drizzle/oauth-connected-target.mjs.map +0 -1
  250. package/dist/drizzle/oauth-kernel.mjs +0 -11
  251. package/dist/drizzle/oauth-kernel.mjs.map +0 -1
  252. package/dist/drizzle/oauth-mysql.mjs +0 -8
  253. package/dist/drizzle/oauth-mysql.mjs.map +0 -1
  254. package/dist/drizzle/passkey-kernel.mjs +0 -8
  255. package/dist/drizzle/passkey-kernel.mjs.map +0 -1
  256. package/dist/drizzle/passkey-model.mjs.map +0 -1
  257. package/dist/drizzle/passkey-registration-ceremony-model.mjs +0 -2
  258. package/dist/drizzle/passkey-state.mjs +0 -7
  259. package/dist/drizzle/passkey-state.mjs.map +0 -1
  260. package/dist/drizzle/passkey-target.d.mts +0 -2
  261. package/dist/drizzle/passkey-target.mjs +0 -7
  262. package/dist/drizzle/passkey-target.mjs.map +0 -1
  263. package/dist/drizzle/passkey-write-target.d.mts +0 -5
  264. package/dist/drizzle/passkey-write-target.mjs +0 -7
  265. package/dist/drizzle/passkey-write-target.mjs.map +0 -1
  266. package/dist/drizzle/password-prepared-model.d.mts +0 -92
  267. package/dist/drizzle/password-prepared-model.mjs +0 -11
  268. package/dist/drizzle/password-prepared-model.mjs.map +0 -1
  269. package/dist/drizzle/password-prepared-sql.mjs +0 -395
  270. package/dist/drizzle/password-prepared-sql.mjs.map +0 -1
  271. package/dist/drizzle/password-prepared-state.mjs +0 -104
  272. package/dist/drizzle/password-prepared-state.mjs.map +0 -1
  273. package/dist/drizzle/password-prepared-target.d.mts +0 -13
  274. package/dist/drizzle/password-prepared-target.mjs +0 -62
  275. package/dist/drizzle/password-prepared-target.mjs.map +0 -1
  276. package/dist/drizzle/password-registration.d.mts +0 -7
  277. package/dist/drizzle/password-registration.mjs +0 -137
  278. package/dist/drizzle/password-registration.mjs.map +0 -1
  279. package/dist/drizzle/password-sql.d.mts +0 -1
  280. package/dist/drizzle/password-sql.mjs +0 -10
  281. package/dist/drizzle/password-sql.mjs.map +0 -1
  282. package/dist/drizzle/pg-emails.d.mts +0 -72
  283. package/dist/drizzle/pg-emails.mjs +0 -43
  284. package/dist/drizzle/pg-emails.mjs.map +0 -1
  285. package/dist/drizzle/pg-password-prepared.d.mts +0 -31
  286. package/dist/drizzle/pg-password-prepared.mjs +0 -21
  287. package/dist/drizzle/pg-password-prepared.mjs.map +0 -1
  288. package/dist/drizzle/pg-passwords.d.mts +0 -72
  289. package/dist/drizzle/pg-passwords.mjs +0 -43
  290. package/dist/drizzle/pg-passwords.mjs.map +0 -1
  291. package/dist/drizzle/pg-proofs.d.mts +0 -76
  292. package/dist/drizzle/pg-proofs.mjs +0 -27
  293. package/dist/drizzle/pg-proofs.mjs.map +0 -1
  294. package/dist/drizzle/pg-sessions.d.mts +0 -93
  295. package/dist/drizzle/pg-sessions.mjs +0 -58
  296. package/dist/drizzle/pg-sessions.mjs.map +0 -1
  297. package/dist/drizzle/phone-state.mjs +0 -14
  298. package/dist/drizzle/phone-state.mjs.map +0 -1
  299. package/dist/drizzle/phone-target.d.mts +0 -15
  300. package/dist/drizzle/proof-sql.d.mts +0 -1
  301. package/dist/drizzle/proof-sql.mjs +0 -8
  302. package/dist/drizzle/proof-sql.mjs.map +0 -1
  303. package/dist/drizzle/query-operations.mjs +0 -31
  304. package/dist/drizzle/query-operations.mjs.map +0 -1
  305. package/dist/drizzle/session-sql.d.mts +0 -1
  306. package/dist/drizzle/session-sql.mjs +0 -9
  307. package/dist/drizzle/session-sql.mjs.map +0 -1
  308. package/dist/drizzle/session-target.d.mts +0 -30
  309. package/dist/drizzle/session-target.mjs +0 -49
  310. package/dist/drizzle/session-target.mjs.map +0 -1
  311. package/dist/drizzle/sqlite-emails.mjs +0 -50
  312. package/dist/drizzle/sqlite-emails.mjs.map +0 -1
  313. package/dist/drizzle/sqlite-password-prepared.mjs +0 -26
  314. package/dist/drizzle/sqlite-password-prepared.mjs.map +0 -1
  315. package/dist/drizzle/sqlite-passwords.mjs +0 -54
  316. package/dist/drizzle/sqlite-passwords.mjs.map +0 -1
  317. package/dist/drizzle/sqlite-proofs.mjs +0 -34
  318. package/dist/drizzle/sqlite-proofs.mjs.map +0 -1
  319. package/dist/drizzle/sqlite-sessions.mjs +0 -79
  320. package/dist/drizzle/sqlite-sessions.mjs.map +0 -1
  321. package/dist/drizzle/standalone-guard.d.mts +0 -2
  322. package/dist/drizzle/standalone-guard.mjs +0 -21
  323. package/dist/drizzle/standalone-guard.mjs.map +0 -1
  324. package/dist/drizzle/totp-state.d.mts +0 -37
  325. package/dist/drizzle/totp-state.mjs +0 -287
  326. package/dist/drizzle/totp-state.mjs.map +0 -1
  327. package/dist/drizzle/totp-target.d.mts +0 -15
  328. package/dist/drizzle/transaction-execution.d.mts +0 -2
  329. package/dist/drizzle/transaction-execution.mjs +0 -11
  330. package/dist/drizzle/transaction-execution.mjs.map +0 -1
  331. package/dist/drizzle/transaction-owner.d.mts +0 -1
  332. package/dist/drizzle/transaction-owner.mjs +0 -8
  333. package/dist/drizzle/transaction-owner.mjs.map +0 -1
  334. package/src/drizzle/crypto.ts +0 -14
  335. package/src/drizzle/d1-emails.ts +0 -1945
  336. package/src/drizzle/d1-generated-statement.ts +0 -129
  337. package/src/drizzle/d1-oauth.ts +0 -360
  338. package/src/drizzle/d1-passkey.ts +0 -383
  339. package/src/drizzle/d1-password-prepared.ts +0 -1266
  340. package/src/drizzle/d1-passwords.ts +0 -2061
  341. package/src/drizzle/d1-phone.ts +0 -103
  342. package/src/drizzle/d1-planning.ts +0 -104
  343. package/src/drizzle/d1-proofs.ts +0 -2354
  344. package/src/drizzle/d1-sessions.ts +0 -2940
  345. package/src/drizzle/d1-totp.ts +0 -88
  346. package/src/drizzle/email-registration.ts +0 -850
  347. package/src/drizzle/email-sql.ts +0 -25
  348. package/src/drizzle/mysql-emails.ts +0 -343
  349. package/src/drizzle/mysql-password-prepared.ts +0 -198
  350. package/src/drizzle/mysql-passwords.ts +0 -343
  351. package/src/drizzle/mysql-proofs.ts +0 -196
  352. package/src/drizzle/mysql-sessions.ts +0 -780
  353. package/src/drizzle/oauth-connected-target.ts +0 -21
  354. package/src/drizzle/oauth-kernel.ts +0 -10
  355. package/src/drizzle/oauth-mysql.ts +0 -10
  356. package/src/drizzle/passkey-kernel.ts +0 -4
  357. package/src/drizzle/passkey-state.ts +0 -3
  358. package/src/drizzle/passkey-target.ts +0 -23
  359. package/src/drizzle/passkey-write-target.ts +0 -9
  360. package/src/drizzle/password-prepared-model.ts +0 -241
  361. package/src/drizzle/password-prepared-sql.ts +0 -1202
  362. package/src/drizzle/password-prepared-state.ts +0 -231
  363. package/src/drizzle/password-prepared-target.ts +0 -169
  364. package/src/drizzle/password-registration.ts +0 -369
  365. package/src/drizzle/password-sql.ts +0 -16
  366. package/src/drizzle/pg-emails.ts +0 -343
  367. package/src/drizzle/pg-password-prepared.ts +0 -199
  368. package/src/drizzle/pg-passwords.ts +0 -342
  369. package/src/drizzle/pg-proofs.ts +0 -206
  370. package/src/drizzle/pg-sessions.ts +0 -789
  371. package/src/drizzle/phone-state.ts +0 -21
  372. package/src/drizzle/proof-sql.ts +0 -10
  373. package/src/drizzle/query-operations.ts +0 -49
  374. package/src/drizzle/session-sql.ts +0 -15
  375. package/src/drizzle/session-target.ts +0 -337
  376. package/src/drizzle/sqlite-emails.ts +0 -393
  377. package/src/drizzle/sqlite-password-prepared.ts +0 -230
  378. package/src/drizzle/sqlite-passwords.ts +0 -497
  379. package/src/drizzle/sqlite-proofs.ts +0 -229
  380. package/src/drizzle/sqlite-sessions.ts +0 -1013
  381. package/src/drizzle/totp-state.ts +0 -525
  382. package/src/drizzle/transaction-execution.ts +0 -13
  383. package/src/drizzle/transaction-owner.ts +0 -11
@@ -1,281 +0,0 @@
1
- import { requiredEmailRegistrationConstraints } from "./email-model.mjs";
2
- import { PersistenceMappingError, column, isMappedConstraintConflict, updateValues } from "./model.mjs";
3
- import { validateDrizzleStorage } from "./storage-validation.mjs";
4
- import { CurrentProofSql, completeProofPlanIn } from "./proof-sql.mjs";
5
- import { CurrentEmailSql } from "./email-sql.mjs";
6
- import { and, eq, isNull } from "drizzle-orm";
7
- import { Cause, DateTime, Effect, Schema } from "effect";
8
- import { CurrentCommitJournal, HookConfigurationError, LifecycleHooks, coordinateCommit, hasCommitScope } from "@yielded/auth/Hooks";
9
- import { SecurityRevision } from "@yielded/auth/Sessions";
10
- import { EmailUnavailable } from "@yielded/auth/Email";
11
- import { reportPersistenceFailure } from "@yielded/auth/Persistence";
12
- import { ProofUnavailable } from "@yielded/auth/Proofs";
13
- //#region src/drizzle/email-registration.ts
14
- const unavailable = () => EmailUnavailable.make({});
15
- 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()))));
16
- const nowMillis = Effect.map(DateTime.now, DateTime.toEpochMillis);
17
- const selectRows = (query, locking) => locking && typeof query.for === "function" ? query.for("update") : query;
18
- const sameIdentifier = (left, right) => left.namespace === right.namespace && left.value === right.value;
19
- const validConstraints = (mapping) => {
20
- if (mapping.constraints.request !== requiredEmailRegistrationConstraints.request || mapping.constraints.pendingReference !== requiredEmailRegistrationConstraints.pendingReference) return false;
21
- if (mapping.mode === "pending") return true;
22
- return Object.entries(requiredEmailRegistrationConstraints).every(([key, value]) => mapping.constraints[key] === value);
23
- };
24
- const allocate = (mode, asynchronous, synchronous) => {
25
- if (mode === "synchronous") return synchronous === void 0 ? Effect.fail(unavailable()) : Effect.try({
26
- try: synchronous,
27
- catch: (cause) => new PersistenceMappingError({
28
- operation: "mapping",
29
- cause
30
- })
31
- });
32
- if (asynchronous !== void 0) return asynchronous;
33
- return synchronous === void 0 ? Effect.fail(unavailable()) : Effect.try({
34
- try: synchronous,
35
- catch: (cause) => new PersistenceMappingError({
36
- operation: "mapping",
37
- cause
38
- })
39
- });
40
- };
41
- const registrationRows = Effect.fn("Drizzle.registrationRows")(function* (mapping, moduleId, commandId, locking) {
42
- const database = yield* CurrentEmailSql;
43
- const module = column(mapping.registration.table, mapping.registration.moduleId);
44
- const command = column(mapping.registration.table, mapping.registration.commandId);
45
- return yield* selectRows(database.select().from(mapping.registration.table).where(and(eq(module, moduleId), eq(command, commandId))).limit(1), locking);
46
- });
47
- /** Discover before locking, then lock subject before identifier like the other
48
- * identity owners. A changed discovery is rejected rather than locking a second
49
- * subject in the opposite order. Proof authority separately enforces the host's
50
- * active/unverified eligibility policy in the same physical owner. */
51
- const readEmailRegistrationTarget = Effect.fnUntraced(function* (mapping, identifier, locking) {
52
- const database = yield* CurrentEmailSql;
53
- const i = mapping.identifier;
54
- const s = mapping.subject;
55
- const lookup = () => database.select().from(i.table).where(and(eq(column(i.table, i.namespace), identifier.namespace), eq(column(i.table, i.value), identifier.value))).limit(1);
56
- const discovered = (yield* lookup())[0];
57
- if (discovered === void 0) return { _tag: "Absent" };
58
- if (discovered[i.verifiedAt] !== null) return { _tag: "Rejected" };
59
- const nativeSubjectId = discovered[i.subjectId];
60
- const subject = (yield* selectRows(database.select().from(s.table).where(eq(column(s.table, s.id), nativeSubjectId)).limit(1), locking))[0];
61
- const current = (yield* selectRows(lookup(), locking))[0];
62
- if (subject === void 0 || current === void 0 || current[i.verifiedAt] !== null || !mapping.subjectId.equals(current[i.subjectId], nativeSubjectId) || current[i.bindingRevision] !== discovered[i.bindingRevision]) return { _tag: "Rejected" };
63
- return {
64
- _tag: "Reserved",
65
- nativeSubjectId,
66
- bindingRevision: yield* Schema.decodeUnknownEffect(SecurityRevision)(current[i.bindingRevision]),
67
- securityRevision: yield* Schema.decodeUnknownEffect(SecurityRevision)(subject[s.securityRevision])
68
- };
69
- });
70
- const owned = (database, configuration, body) => {
71
- 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));
72
- return configuration.coordinated !== true ? Effect.gen(function* () {
73
- if (yield* hasCommitScope) return yield* unavailable();
74
- yield* configuration.standaloneGuard;
75
- return yield* run;
76
- }) : run;
77
- };
78
- const completionMatches = (mapping, input) => {
79
- const completion = input.completion.input;
80
- return completion.moduleId === `${input.moduleId}/registration` && completion.purpose === "email-code-registration" && completion.binding._tag === "Identifier" && sameIdentifier(completion.binding.identifier, input.identifier) && validConstraints(mapping);
81
- };
82
- const prepareReplay = Effect.fn("DrizzleEmailRegistration.prepareReplay")(function* (mapping, row, fingerprint, prepare) {
83
- const journal = yield* CurrentCommitJournal;
84
- if (row[mapping.registration.fingerprint] !== fingerprint) return prepare({ _tag: "Rejected" }, journal);
85
- return prepare(yield* mapping.registration.decodeReplay(row), journal);
86
- });
87
- const registerIn = Effect.fn("DrizzleEmailRegistration.registerIn")(function* (mapping, configuration, input, inspected, allocated, prepare) {
88
- const journal = yield* CurrentCommitJournal;
89
- const existing = (yield* registrationRows(mapping, input.moduleId, input.commandId, configuration.locking))[0];
90
- if (existing !== void 0) return yield* prepareReplay(mapping, existing, input.fingerprint, prepare);
91
- if (!completionMatches(mapping, input)) return prepare({ _tag: "Rejected" }, journal);
92
- if (!inspected.eligible || inspected.fingerprint !== input.fingerprint) return prepare({ _tag: "Rejected" }, journal);
93
- const target = mapping.mode === "atomic" ? yield* readEmailRegistrationTarget(mapping, input.identifier, configuration.locking) : void 0;
94
- if (target?._tag === "Rejected") return prepare({ _tag: "Rejected" }, journal);
95
- if (target?._tag === "Reserved" && (allocated.displacedSecurityRevision === void 0 || allocated.displacedSecurityRevision === target.securityRevision || allocated.identifierRevision === target.bindingRevision)) return yield* unavailable();
96
- const now = yield* nowMillis;
97
- const intent = {
98
- moduleId: input.moduleId,
99
- commandId: input.commandId,
100
- identifier: Object.freeze({ ...input.identifier }),
101
- registration: input.registration,
102
- fingerprint: input.fingerprint,
103
- completion: Object.freeze({
104
- moduleId: input.completion.input.moduleId,
105
- purpose: input.completion.input.purpose,
106
- continuationId: input.completion.input.continuationId,
107
- binding: input.completion.input.binding
108
- })
109
- };
110
- let decision;
111
- let nativeSubjectId = allocated.nativeSubjectId;
112
- const protectedMutation = Effect.gen(function* () {
113
- const transaction = yield* CurrentEmailSql;
114
- if (mapping.mode === "pending") {
115
- if (allocated.pendingReference === void 0) return false;
116
- decision = {
117
- _tag: "ProvisioningPending",
118
- reference: allocated.pendingReference
119
- };
120
- yield* transaction.insert(mapping.registration.table).values(mapping.registration.encodeInsert(intent, {
121
- state: "pending",
122
- pendingReference: allocated.pendingReference,
123
- retentionUntilMillis: now + mapping.retentionMillis
124
- }));
125
- } else {
126
- if (allocated.credentialId === void 0 || allocated.securityRevision === void 0 || allocated.identifierRevision === void 0 || allocated.credentialRevision === void 0) return false;
127
- const subjectInsert = transaction.insert(mapping.subject.table).values(mapping.provisioning.encodeSubjectInsert(intent, {
128
- nativeSubjectId,
129
- securityRevision: allocated.securityRevision
130
- }));
131
- if (mapping.provisioning.idMode === "generated") {
132
- const rows = yield* configuration.generatedSubjectRows(subjectInsert);
133
- nativeSubjectId = yield* mapping.provisioning.decodeGeneratedId(rows);
134
- } else yield* subjectInsert;
135
- if (nativeSubjectId === void 0) return false;
136
- if (target?._tag === "Reserved") {
137
- const i = mapping.identifier;
138
- const s = mapping.subject;
139
- yield* transaction.update(i.table).set(updateValues([
140
- [i.subjectId, nativeSubjectId],
141
- [i.verifiedAt, mapping.encodeInstant(now)],
142
- [i.bindingRevision, allocated.identifierRevision]
143
- ])).where(and(eq(column(i.table, i.namespace), input.identifier.namespace), eq(column(i.table, i.value), input.identifier.value), eq(column(i.table, i.subjectId), target.nativeSubjectId), eq(column(i.table, i.bindingRevision), target.bindingRevision), isNull(column(i.table, i.verifiedAt))));
144
- yield* transaction.update(s.table).set(updateValues([[s.securityRevision, allocated.displacedSecurityRevision]])).where(and(eq(column(s.table, s.id), target.nativeSubjectId), eq(column(s.table, s.securityRevision), target.securityRevision)));
145
- } else yield* transaction.insert(mapping.identifier.table).values(mapping.identifier.encodeVerifiedInsert({
146
- identifier: input.identifier,
147
- subjectId: nativeSubjectId,
148
- verifiedAtMillis: now,
149
- bindingRevision: allocated.identifierRevision
150
- }));
151
- yield* transaction.insert(mapping.credential.table).values(mapping.credential.encodeVerifiedInsert({
152
- moduleId: input.moduleId,
153
- subjectId: nativeSubjectId,
154
- credentialId: allocated.credentialId,
155
- identifier: input.identifier,
156
- credentialRevision: allocated.credentialRevision
157
- }));
158
- yield* transaction.insert(mapping.authorityCredential.table).values(mapping.authorityCredential.encodeInsert({
159
- subjectId: nativeSubjectId,
160
- credentialId: allocated.credentialId,
161
- revision: allocated.credentialRevision
162
- }));
163
- yield* transaction.insert(mapping.registration.table).values(mapping.registration.encodeInsert(intent, {
164
- state: "registered",
165
- nativeSubjectId,
166
- retentionUntilMillis: now + mapping.retentionMillis
167
- }));
168
- decision = { _tag: "Registered" };
169
- }
170
- const stored = (yield* registrationRows(mapping, input.moduleId, input.commandId, false))[0];
171
- const registrationModule = column(mapping.registration.table, mapping.registration.moduleId);
172
- const registrationCommand = column(mapping.registration.table, mapping.registration.commandId);
173
- const registrationFingerprint = column(mapping.registration.table, mapping.registration.fingerprint);
174
- const registrationState = column(mapping.registration.table, mapping.registration.state);
175
- const registrationSubject = column(mapping.registration.table, mapping.registration.subjectId);
176
- const registrationReference = column(mapping.registration.table, mapping.registration.pendingReference);
177
- const registrationRetention = column(mapping.registration.table, mapping.registration.retentionUntil);
178
- const exactRegistration = yield* selectRows(transaction.select().from(mapping.registration.table).where(and(eq(registrationModule, input.moduleId), eq(registrationCommand, input.commandId), eq(registrationFingerprint, input.fingerprint), eq(registrationState, mapping.mode === "pending" ? "pending" : "registered"), eq(registrationRetention, mapping.encodeInstant(now + mapping.retentionMillis)), mapping.mode === "pending" ? and(eq(registrationReference, allocated.pendingReference), isNull(registrationSubject)) : and(eq(registrationSubject, nativeSubjectId), isNull(registrationReference)))).limit(1), false);
179
- if (mapping.mode === "atomic" && nativeSubjectId !== void 0) {
180
- const subjectId = column(mapping.subject.table, mapping.subject.id);
181
- const identifierNamespace = column(mapping.identifier.table, mapping.identifier.namespace);
182
- const identifierValue = column(mapping.identifier.table, mapping.identifier.value);
183
- const identifierSubject = column(mapping.identifier.table, mapping.identifier.subjectId);
184
- const identifierVerifiedAt = column(mapping.identifier.table, mapping.identifier.verifiedAt);
185
- const credentialModule = column(mapping.credential.table, mapping.credential.moduleId);
186
- const credentialId = column(mapping.credential.table, mapping.credential.credentialId);
187
- const credentialSubject = column(mapping.credential.table, mapping.credential.subjectId);
188
- const credentialNamespace = column(mapping.credential.table, mapping.credential.identifierNamespace);
189
- const credentialValue = column(mapping.credential.table, mapping.credential.identifierValue);
190
- const authoritySubject = column(mapping.authorityCredential.table, mapping.authorityCredential.subjectId);
191
- const authorityId = column(mapping.authorityCredential.table, mapping.authorityCredential.credentialId);
192
- const subject = (yield* selectRows(transaction.select().from(mapping.subject.table).where(eq(subjectId, nativeSubjectId)).limit(1), false))[0];
193
- const identifier = (yield* selectRows(transaction.select().from(mapping.identifier.table).where(and(eq(identifierNamespace, input.identifier.namespace), eq(identifierValue, input.identifier.value), eq(identifierSubject, nativeSubjectId), eq(identifierVerifiedAt, mapping.encodeInstant(now)))).limit(1), false))[0];
194
- const credential = (yield* selectRows(transaction.select().from(mapping.credential.table).where(and(eq(credentialModule, input.moduleId), eq(credentialId, allocated.credentialId), eq(credentialSubject, nativeSubjectId), eq(credentialNamespace, input.identifier.namespace), eq(credentialValue, input.identifier.value))).limit(1), false))[0];
195
- const authority = (yield* selectRows(transaction.select().from(mapping.authorityCredential.table).where(and(eq(authoritySubject, nativeSubjectId), eq(authorityId, allocated.credentialId))).limit(1), false))[0];
196
- const displaced = target?._tag === "Reserved" ? (yield* transaction.select().from(mapping.subject.table).where(and(eq(subjectId, target.nativeSubjectId), eq(column(mapping.subject.table, mapping.subject.securityRevision), allocated.displacedSecurityRevision))).limit(1))[0] : void 0;
197
- if (target?._tag === "Reserved" && displaced === void 0 || subject === void 0 || !mapping.subject.isActiveStatus(subject[mapping.subject.status]) || subject[mapping.subject.securityRevision] !== allocated.securityRevision || identifier === void 0 || identifier[mapping.identifier.bindingRevision] !== allocated.identifierRevision || !mapping.identifier.isCurrent(identifier) || credential === void 0 || credential[mapping.credential.credentialRevision] !== allocated.credentialRevision || !mapping.credential.isActiveStatus(credential[mapping.credential.status]) || authority === void 0 || authority[mapping.authorityCredential.revision] !== allocated.credentialRevision || !mapping.authorityCredential.isActiveStatus(authority[mapping.authorityCredential.status])) return false;
198
- }
199
- return stored !== void 0 && exactRegistration.length === 1 && stored[mapping.registration.fingerprint] === input.fingerprint && (mapping.mode === "pending" || nativeSubjectId !== void 0 && stored[mapping.registration.subjectId] !== null && mapping.subjectId.equals(stored[mapping.registration.subjectId], nativeSubjectId));
200
- });
201
- let receipt;
202
- yield* completeProofPlanIn(configuration.proof.mapping, configuration.proof.configuration, input.completion, protectedMutation, (completionDecision) => {
203
- receipt = prepare(completionDecision === "completed" && decision !== void 0 ? decision : { _tag: "Rejected" }, journal);
204
- return completionDecision;
205
- });
206
- return receipt ?? prepare({ _tag: "Rejected" }, journal);
207
- });
208
- const prepareConflict = Effect.fn("Drizzle.prepareConflict")(function* (mapping, configuration, input, prepare) {
209
- const database = yield* CurrentEmailSql;
210
- return yield* owned(database, configuration, Effect.gen(function* () {
211
- const journal = yield* CurrentCommitJournal;
212
- const row = (yield* registrationRows(mapping, input.moduleId, input.commandId, configuration.locking))[0];
213
- return row === void 0 ? prepare({ _tag: "Rejected" }, journal) : yield* prepareReplay(mapping, row, input.fingerprint, prepare);
214
- }));
215
- });
216
- const makeSqlEmailRegistrationAuthority = Effect.fn("makeSqlEmailRegistrationAuthority")(function* (mapping, configuration) {
217
- const database = yield* CurrentEmailSql;
218
- if (!configuration.coordinated) yield* validateDrizzleStorage({
219
- ...mapping,
220
- proof: configuration.proof.mapping
221
- }).pipe(Effect.mapError(unavailable));
222
- const hooks = yield* LifecycleHooks;
223
- return {
224
- inspect: (input) => mapping.inspect(input).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure),
225
- registerWithProof: (input, prepare) => Effect.gen(function* () {
226
- if (!validConstraints(mapping)) return yield* unavailable();
227
- const snapshot = (registration) => configuration.mode === "synchronous" && configuration.coordinated === true ? mapping.snapshotRegistrationSync === void 0 ? Effect.fail(unavailable()) : Effect.try({
228
- try: () => mapping.snapshotRegistrationSync(registration),
229
- catch: (cause) => new PersistenceMappingError({
230
- operation: "mapping",
231
- cause
232
- })
233
- }) : mapping.snapshotRegistration(registration);
234
- const storedRegistration = yield* snapshot(input.registration);
235
- const inspectionRegistration = yield* snapshot(input.registration);
236
- const capturedInput = Object.freeze({
237
- ...input,
238
- identifier: Object.freeze({ ...input.identifier }),
239
- registration: storedRegistration
240
- });
241
- const inspectInput = {
242
- identifier: capturedInput.identifier,
243
- registration: inspectionRegistration
244
- };
245
- const inspected = configuration.mode === "synchronous" && configuration.coordinated === true ? mapping.inspectSync === void 0 ? yield* unavailable() : yield* Effect.try({
246
- try: () => mapping.inspectSync(inspectInput),
247
- catch: (cause) => new PersistenceMappingError({
248
- operation: "mapping",
249
- cause
250
- })
251
- }) : yield* mapping.inspect(inspectInput);
252
- const atomic = mapping.mode === "atomic";
253
- const credentialId = atomic ? yield* allocate(configuration.mode, mapping.allocateCredentialId, mapping.allocateCredentialIdSync) : void 0;
254
- const securityRevision = atomic ? yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync) : void 0;
255
- const displacedSecurityRevision = atomic ? yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync) : void 0;
256
- const identifierRevision = atomic ? yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync) : void 0;
257
- const credentialRevision = atomic ? yield* allocate(configuration.mode, mapping.allocateRevision, mapping.allocateRevisionSync) : void 0;
258
- const nativeSubjectId = atomic && mapping.provisioning.idMode !== "generated" ? yield* allocate(configuration.mode, mapping.provisioning.allocateSubjectId, mapping.provisioning.allocateSubjectIdSync) : void 0;
259
- const pendingReference = mapping.mode === "pending" ? yield* allocate(configuration.mode, mapping.allocatePendingReference, mapping.allocatePendingReferenceSync) : void 0;
260
- return yield* owned(database, configuration, Effect.gen(function* () {
261
- return yield* registerIn(mapping, configuration, capturedInput, inspected, {
262
- ...credentialId === void 0 ? {} : { credentialId },
263
- ...securityRevision === void 0 ? {} : { securityRevision },
264
- ...displacedSecurityRevision === void 0 ? {} : { displacedSecurityRevision },
265
- ...identifierRevision === void 0 ? {} : { identifierRevision },
266
- ...credentialRevision === void 0 ? {} : { credentialRevision },
267
- ...nativeSubjectId === void 0 ? {} : { nativeSubjectId },
268
- ...pendingReference === void 0 ? {} : { pendingReference }
269
- }, prepare);
270
- })).pipe(Effect.catchCause((cause) => {
271
- const request = cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isRequestConflict, cause);
272
- const conflict = mapping.mode === "atomic" && (cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isIdentifierConflict, cause) || cause.reasons.every(Cause.isFailReason) && isMappedConstraintConflict(mapping.isCredentialConflict, cause));
273
- return request || conflict ? prepareConflict(mapping, configuration, capturedInput, prepare) : Effect.failCause(cause);
274
- }));
275
- }).pipe(Effect.provideService(CurrentEmailSql, database), Effect.provideService(LifecycleHooks, hooks), translateFailure)
276
- };
277
- });
278
- //#endregion
279
- export { makeSqlEmailRegistrationAuthority, readEmailRegistrationTarget };
280
-
281
- //# sourceMappingURL=email-registration.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-registration.mjs","names":[],"sources":["../../src/drizzle/email-registration.ts"],"sourcesContent":["import type { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport {\n type PrepareEmailCommit,\n type EmailCommandId,\n type EmailRegistrationDecision,\n EmailUnavailable,\n} from \"@yielded/auth/Email\";\nimport {\n coordinateCommit,\n CurrentCommitJournal,\n hasCommitScope,\n type PreparedCommit,\n LifecycleHooks,\n HookConfigurationError,\n} from \"@yielded/auth/Hooks\";\nimport type { LoginIdentifier } from \"@yielded/auth/Identity\";\nimport { reportPersistenceFailure } from \"@yielded/auth/Persistence\";\nimport { type ProofCompletionPlan, ProofUnavailable } from \"@yielded/auth/Proofs\";\nimport type { TokenDigest } from \"@yielded/auth/Schema\";\nimport { SecurityRevision } from \"@yielded/auth/Sessions\";\n/* oxlint-disable no-explicit-any -- registration plans bridge consumer-owned Drizzle rows. */\nimport { and, eq, isNull } from \"drizzle-orm\";\nimport { Cause, DateTime, Effect, Schema } from \"effect\";\n\nimport {\n type AnyEmailRegistrationMapping,\n requiredEmailRegistrationConstraints,\n} from \"./email-model\";\nimport { CurrentEmailSql, type EmailSqlDatabase, type EmailSqlQuery } from \"./email-sql\";\nimport { column, isMappedConstraintConflict, PersistenceMappingError, updateValues } from \"./model\";\nimport {\n CurrentProofSql,\n completeProofPlanIn,\n type ProofSqlConfiguration,\n type ProofSqlDatabase,\n} from \"./proof-sql\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\ntype Mapping<Registration> = AnyEmailRegistrationMapping<Registration>;\nconst unavailable = () => EmailUnavailable.make({});\n\nconst translateFailure = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n): Effect.Effect<A, EmailUnavailable, R> =>\n reportPersistenceFailure(\n effect,\n (error) =>\n Schema.is(EmailUnavailable)(error) ||\n Schema.is(ProofUnavailable)(error) ||\n Schema.is(HookConfigurationError)(error),\n ).pipe(Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, () => unavailable()))));\n\nconst nowMillis = Effect.map(DateTime.now, DateTime.toEpochMillis);\n\nexport interface EmailRegistrationAuthority<Registration> {\n readonly inspect: (input: {\n readonly identifier: LoginIdentifier;\n readonly registration: Registration;\n }) => Effect.Effect<\n { readonly fingerprint: TokenDigest; readonly eligible: boolean },\n EmailUnavailable\n >;\n readonly registerWithProof: <A>(\n input: {\n readonly moduleId: string;\n readonly commandId: EmailCommandId;\n readonly identifier: LoginIdentifier;\n readonly registration: Registration;\n readonly fingerprint: TokenDigest;\n readonly completion: ProofCompletionPlan;\n },\n prepare: PrepareEmailCommit<EmailRegistrationDecision, A>,\n ) => Effect.Effect<PreparedCommit<A>, EmailUnavailable>;\n}\n\nexport interface EmailRegistrationConfiguration {\n readonly mode: \"interactive\" | \"synchronous\";\n readonly locking: boolean;\n readonly standaloneGuard: Effect.Effect<void, EmailUnavailable>;\n readonly coordinated?: boolean;\n readonly generatedSubjectRows: (query: EmailSqlQuery) => EmailSqlQuery;\n readonly proof: {\n readonly mapping: any;\n readonly configuration: ProofSqlConfiguration;\n };\n}\n\nconst selectRows = (query: EmailSqlQuery, locking: boolean) =>\n locking && typeof query.for === \"function\" ? query.for(\"update\") : query;\n\nconst sameIdentifier = (left: LoginIdentifier, right: LoginIdentifier) =>\n left.namespace === right.namespace && left.value === right.value;\n\nconst validConstraints = <Registration>(mapping: Mapping<Registration>) => {\n if (\n mapping.constraints.request !== requiredEmailRegistrationConstraints.request ||\n mapping.constraints.pendingReference !== requiredEmailRegistrationConstraints.pendingReference\n )\n return false;\n if (mapping.mode === \"pending\") return true;\n\n return Object.entries(requiredEmailRegistrationConstraints).every(\n ([key, value]) =>\n mapping.constraints[key as keyof typeof requiredEmailRegistrationConstraints] === value,\n );\n};\n\nconst allocate = <A>(\n mode: EmailRegistrationConfiguration[\"mode\"],\n asynchronous: Effect.Effect<A, PersistenceMappingError> | undefined,\n synchronous: (() => A) | undefined,\n) => {\n if (mode === \"synchronous\")\n return synchronous === undefined\n ? Effect.fail(unavailable())\n : Effect.try({\n try: synchronous,\n catch: (cause) => new PersistenceMappingError({ operation: \"mapping\", cause }),\n });\n if (asynchronous !== undefined) return asynchronous;\n\n return synchronous === undefined\n ? Effect.fail(unavailable())\n : Effect.try({\n try: synchronous,\n catch: (cause) => new PersistenceMappingError({ operation: \"mapping\", cause }),\n });\n};\n\nconst registrationRows = Effect.fn(\"Drizzle.registrationRows\")(function* <Registration>(\n mapping: Mapping<Registration>,\n moduleId: string,\n commandId: string,\n locking: boolean,\n) {\n const database = yield* CurrentEmailSql;\n\n const module = column(mapping.registration.table, mapping.registration.moduleId);\n const command = column(mapping.registration.table, mapping.registration.commandId);\n\n return yield* selectRows(\n database\n .select()\n .from(mapping.registration.table)\n .where(and(eq(module, moduleId), eq(command, commandId)))\n .limit(1),\n locking,\n );\n});\n\n/** Discover before locking, then lock subject before identifier like the other\n * identity owners. A changed discovery is rejected rather than locking a second\n * subject in the opposite order. Proof authority separately enforces the host's\n * active/unverified eligibility policy in the same physical owner. */\nexport const readEmailRegistrationTarget = Effect.fnUntraced(function* <Registration>(\n mapping: Extract<Mapping<Registration>, { readonly mode: \"atomic\" }>,\n identifier: LoginIdentifier,\n locking: boolean,\n) {\n const database = yield* CurrentEmailSql;\n const i = mapping.identifier;\n const s = mapping.subject;\n\n const lookup = () =>\n database\n .select()\n .from(i.table)\n .where(\n and(\n eq(column(i.table, i.namespace), identifier.namespace),\n eq(column(i.table, i.value), identifier.value),\n ),\n )\n .limit(1);\n\n const discovered = (yield* lookup())[0];\n\n if (discovered === undefined) return { _tag: \"Absent\" } as const;\n if (discovered[i.verifiedAt] !== null) return { _tag: \"Rejected\" } as const;\n const nativeSubjectId = discovered[i.subjectId];\n\n const subject = (yield* selectRows(\n database\n .select()\n .from(s.table)\n .where(eq(column(s.table, s.id), nativeSubjectId))\n .limit(1),\n locking,\n ))[0];\n\n const current = (yield* selectRows(lookup(), locking))[0];\n\n if (\n subject === undefined ||\n current === undefined ||\n current[i.verifiedAt] !== null ||\n !mapping.subjectId.equals(current[i.subjectId], nativeSubjectId) ||\n current[i.bindingRevision] !== discovered[i.bindingRevision]\n )\n return { _tag: \"Rejected\" } as const;\n\n return {\n _tag: \"Reserved\" as const,\n nativeSubjectId,\n bindingRevision: yield* Schema.decodeUnknownEffect(SecurityRevision)(\n current[i.bindingRevision],\n ),\n securityRevision: yield* Schema.decodeUnknownEffect(SecurityRevision)(\n subject[s.securityRevision],\n ),\n };\n});\n\nconst owned = <A, E, R>(\n database: EmailSqlDatabase,\n configuration: EmailRegistrationConfiguration,\n body: Effect.Effect<A, E, R>,\n) => {\n const run = coordinateCommit(\n () =>\n database.transaction((transaction) =>\n body.pipe(\n Effect.provideService(CurrentEmailSql, transaction),\n Effect.provideService(CurrentProofSql, transaction as unknown as ProofSqlDatabase),\n ),\n ),\n { mode: configuration.mode },\n ).pipe(Effect.map((result) => result.value));\n\n return configuration.coordinated !== true\n ? Effect.gen(function* () {\n if (yield* hasCommitScope) return yield* unavailable();\n yield* configuration.standaloneGuard;\n\n return yield* run;\n })\n : run;\n};\n\nconst completionMatches = <Registration>(\n mapping: Mapping<Registration>,\n input: {\n readonly moduleId: string;\n readonly identifier: LoginIdentifier;\n readonly completion: ProofCompletionPlan;\n },\n) => {\n const completion = input.completion.input;\n\n return (\n completion.moduleId === `${input.moduleId}/registration` &&\n completion.purpose === \"email-code-registration\" &&\n completion.binding._tag === \"Identifier\" &&\n sameIdentifier(completion.binding.identifier, input.identifier) &&\n validConstraints(mapping)\n );\n};\n\nconst prepareReplay = Effect.fn(\"DrizzleEmailRegistration.prepareReplay\")(function* <\n Registration,\n A,\n>(\n mapping: Mapping<Registration>,\n row: any,\n fingerprint: TokenDigest,\n prepare: PrepareEmailCommit<EmailRegistrationDecision, A>,\n) {\n const journal = yield* CurrentCommitJournal;\n\n if (row[mapping.registration.fingerprint] !== fingerprint)\n return prepare({ _tag: \"Rejected\" }, journal);\n\n return prepare(yield* mapping.registration.decodeReplay(row), journal);\n});\n\nconst registerIn = Effect.fn(\"DrizzleEmailRegistration.registerIn\")(function* <Registration, A>(\n mapping: Mapping<Registration>,\n configuration: EmailRegistrationConfiguration,\n input: {\n readonly moduleId: string;\n readonly commandId: string;\n readonly identifier: LoginIdentifier;\n readonly registration: Registration;\n readonly fingerprint: TokenDigest;\n readonly completion: ProofCompletionPlan;\n },\n inspected: { readonly fingerprint: TokenDigest; readonly eligible: boolean },\n allocated: {\n readonly credentialId?: string;\n readonly securityRevision?: SecurityRevision;\n readonly displacedSecurityRevision?: SecurityRevision;\n readonly identifierRevision?: SecurityRevision;\n readonly credentialRevision?: SecurityRevision;\n readonly nativeSubjectId?: unknown;\n readonly pendingReference?: string;\n },\n prepare: PrepareEmailCommit<EmailRegistrationDecision, A>,\n) {\n const journal = yield* CurrentCommitJournal;\n\n const existing = (yield* registrationRows(\n mapping,\n input.moduleId,\n input.commandId,\n configuration.locking,\n ))[0];\n\n if (existing !== undefined)\n return yield* prepareReplay(mapping, existing, input.fingerprint, prepare);\n if (!completionMatches(mapping, input)) return prepare({ _tag: \"Rejected\" }, journal);\n if (!inspected.eligible || inspected.fingerprint !== input.fingerprint)\n return prepare({ _tag: \"Rejected\" }, journal);\n\n const target =\n mapping.mode === \"atomic\"\n ? yield* readEmailRegistrationTarget(mapping, input.identifier, configuration.locking)\n : undefined;\n\n if (target?._tag === \"Rejected\") return prepare({ _tag: \"Rejected\" }, journal);\n if (\n target?._tag === \"Reserved\" &&\n (allocated.displacedSecurityRevision === undefined ||\n allocated.displacedSecurityRevision === target.securityRevision ||\n allocated.identifierRevision === target.bindingRevision)\n )\n return yield* unavailable();\n const now = yield* nowMillis;\n\n const intent = {\n moduleId: input.moduleId,\n commandId: input.commandId,\n identifier: Object.freeze({ ...input.identifier }),\n registration: input.registration,\n fingerprint: input.fingerprint,\n completion: Object.freeze({\n moduleId: input.completion.input.moduleId,\n purpose: input.completion.input.purpose,\n continuationId: input.completion.input.continuationId,\n binding: input.completion.input.binding,\n }),\n };\n\n let decision: EmailRegistrationDecision | undefined;\n let nativeSubjectId = allocated.nativeSubjectId;\n\n const protectedMutation = Effect.gen(function* () {\n const transaction = yield* CurrentEmailSql;\n\n if (mapping.mode === \"pending\") {\n if (allocated.pendingReference === undefined) return false;\n decision = { _tag: \"ProvisioningPending\", reference: allocated.pendingReference };\n yield* transaction.insert(mapping.registration.table).values(\n mapping.registration.encodeInsert(intent, {\n state: \"pending\",\n pendingReference: allocated.pendingReference,\n retentionUntilMillis: now + mapping.retentionMillis,\n }),\n );\n } else {\n if (\n allocated.credentialId === undefined ||\n allocated.securityRevision === undefined ||\n allocated.identifierRevision === undefined ||\n allocated.credentialRevision === undefined\n )\n return false;\n\n const subjectInsert = transaction.insert(mapping.subject.table).values(\n mapping.provisioning.encodeSubjectInsert(intent, {\n nativeSubjectId,\n securityRevision: allocated.securityRevision,\n }),\n );\n\n if (mapping.provisioning.idMode === \"generated\") {\n const rows = yield* configuration.generatedSubjectRows(subjectInsert);\n\n nativeSubjectId = yield* mapping.provisioning.decodeGeneratedId(rows);\n } else yield* subjectInsert;\n if (nativeSubjectId === undefined) return false;\n if (target?._tag === \"Reserved\") {\n const i = mapping.identifier;\n const s = mapping.subject;\n\n // Change only mapped ownership columns. Never delete a consumer-owned\n // identifier row or copy insertion defaults over unrelated columns.\n yield* transaction\n .update(i.table)\n .set(\n updateValues([\n [i.subjectId, nativeSubjectId],\n [i.verifiedAt, mapping.encodeInstant(now)],\n [i.bindingRevision, allocated.identifierRevision],\n ]),\n )\n .where(\n and(\n eq(column(i.table, i.namespace), input.identifier.namespace),\n eq(column(i.table, i.value), input.identifier.value),\n eq(column(i.table, i.subjectId), target.nativeSubjectId),\n eq(column(i.table, i.bindingRevision), target.bindingRevision),\n isNull(column(i.table, i.verifiedAt)),\n ),\n );\n yield* transaction\n .update(s.table)\n .set(updateValues([[s.securityRevision, allocated.displacedSecurityRevision]]))\n .where(\n and(\n eq(column(s.table, s.id), target.nativeSubjectId),\n eq(column(s.table, s.securityRevision), target.securityRevision),\n ),\n );\n } else {\n yield* transaction.insert(mapping.identifier.table).values(\n mapping.identifier.encodeVerifiedInsert({\n identifier: input.identifier,\n subjectId: nativeSubjectId,\n verifiedAtMillis: now,\n bindingRevision: allocated.identifierRevision,\n }),\n );\n }\n yield* transaction.insert(mapping.credential.table).values(\n mapping.credential.encodeVerifiedInsert({\n moduleId: input.moduleId,\n subjectId: nativeSubjectId,\n credentialId: allocated.credentialId,\n identifier: input.identifier,\n credentialRevision: allocated.credentialRevision,\n }),\n );\n yield* transaction.insert(mapping.authorityCredential.table).values(\n mapping.authorityCredential.encodeInsert({\n subjectId: nativeSubjectId,\n credentialId: allocated.credentialId,\n revision: allocated.credentialRevision,\n }),\n );\n yield* transaction.insert(mapping.registration.table).values(\n mapping.registration.encodeInsert(intent, {\n state: \"registered\",\n nativeSubjectId,\n retentionUntilMillis: now + mapping.retentionMillis,\n }),\n );\n decision = { _tag: \"Registered\" };\n }\n const stored = (yield* registrationRows(mapping, input.moduleId, input.commandId, false))[0];\n const registrationModule = column(mapping.registration.table, mapping.registration.moduleId);\n const registrationCommand = column(mapping.registration.table, mapping.registration.commandId);\n\n const registrationFingerprint = column(\n mapping.registration.table,\n mapping.registration.fingerprint,\n );\n\n const registrationState = column(mapping.registration.table, mapping.registration.state);\n const registrationSubject = column(mapping.registration.table, mapping.registration.subjectId);\n\n const registrationReference = column(\n mapping.registration.table,\n mapping.registration.pendingReference,\n );\n\n const registrationRetention = column(\n mapping.registration.table,\n mapping.registration.retentionUntil,\n );\n\n const exactRegistration = yield* selectRows(\n transaction\n .select()\n .from(mapping.registration.table)\n .where(\n and(\n eq(registrationModule, input.moduleId),\n eq(registrationCommand, input.commandId),\n eq(registrationFingerprint, input.fingerprint),\n eq(registrationState, mapping.mode === \"pending\" ? \"pending\" : \"registered\"),\n eq(registrationRetention, mapping.encodeInstant(now + mapping.retentionMillis)),\n mapping.mode === \"pending\"\n ? and(\n eq(registrationReference, allocated.pendingReference!),\n isNull(registrationSubject),\n )\n : and(eq(registrationSubject, nativeSubjectId), isNull(registrationReference)),\n ),\n )\n .limit(1),\n false,\n );\n\n if (mapping.mode === \"atomic\" && nativeSubjectId !== undefined) {\n const subjectId = column(mapping.subject.table, mapping.subject.id);\n const identifierNamespace = column(mapping.identifier.table, mapping.identifier.namespace);\n const identifierValue = column(mapping.identifier.table, mapping.identifier.value);\n const identifierSubject = column(mapping.identifier.table, mapping.identifier.subjectId);\n const identifierVerifiedAt = column(mapping.identifier.table, mapping.identifier.verifiedAt);\n const credentialModule = column(mapping.credential.table, mapping.credential.moduleId);\n const credentialId = column(mapping.credential.table, mapping.credential.credentialId);\n const credentialSubject = column(mapping.credential.table, mapping.credential.subjectId);\n\n const credentialNamespace = column(\n mapping.credential.table,\n mapping.credential.identifierNamespace,\n );\n\n const credentialValue = column(mapping.credential.table, mapping.credential.identifierValue);\n\n const authoritySubject = column(\n mapping.authorityCredential.table,\n mapping.authorityCredential.subjectId,\n );\n\n const authorityId = column(\n mapping.authorityCredential.table,\n mapping.authorityCredential.credentialId,\n );\n\n const subject = (yield* selectRows(\n transaction\n .select()\n .from(mapping.subject.table)\n .where(eq(subjectId, nativeSubjectId))\n .limit(1),\n false,\n ))[0];\n\n const identifier = (yield* selectRows(\n transaction\n .select()\n .from(mapping.identifier.table)\n .where(\n and(\n eq(identifierNamespace, input.identifier.namespace),\n eq(identifierValue, input.identifier.value),\n eq(identifierSubject, nativeSubjectId),\n eq(identifierVerifiedAt, mapping.encodeInstant(now)),\n ),\n )\n .limit(1),\n false,\n ))[0];\n\n const credential = (yield* selectRows(\n transaction\n .select()\n .from(mapping.credential.table)\n .where(\n and(\n eq(credentialModule, input.moduleId),\n eq(credentialId, allocated.credentialId!),\n eq(credentialSubject, nativeSubjectId),\n eq(credentialNamespace, input.identifier.namespace),\n eq(credentialValue, input.identifier.value),\n ),\n )\n .limit(1),\n false,\n ))[0];\n\n const authority = (yield* selectRows(\n transaction\n .select()\n .from(mapping.authorityCredential.table)\n .where(\n and(eq(authoritySubject, nativeSubjectId), eq(authorityId, allocated.credentialId!)),\n )\n .limit(1),\n false,\n ))[0];\n\n const displaced =\n target?._tag === \"Reserved\"\n ? (yield* transaction\n .select()\n .from(mapping.subject.table)\n .where(\n and(\n eq(subjectId, target.nativeSubjectId),\n eq(\n column(mapping.subject.table, mapping.subject.securityRevision),\n allocated.displacedSecurityRevision,\n ),\n ),\n )\n .limit(1))[0]\n : undefined;\n\n if (\n (target?._tag === \"Reserved\" && displaced === undefined) ||\n subject === undefined ||\n !mapping.subject.isActiveStatus(subject[mapping.subject.status]) ||\n subject[mapping.subject.securityRevision] !== allocated.securityRevision ||\n identifier === undefined ||\n identifier[mapping.identifier.bindingRevision] !== allocated.identifierRevision ||\n !mapping.identifier.isCurrent(identifier) ||\n credential === undefined ||\n credential[mapping.credential.credentialRevision] !== allocated.credentialRevision ||\n !mapping.credential.isActiveStatus(credential[mapping.credential.status]) ||\n authority === undefined ||\n authority[mapping.authorityCredential.revision] !== allocated.credentialRevision ||\n !mapping.authorityCredential.isActiveStatus(authority[mapping.authorityCredential.status])\n )\n return false;\n }\n\n return (\n stored !== undefined &&\n exactRegistration.length === 1 &&\n stored[mapping.registration.fingerprint] === input.fingerprint &&\n (mapping.mode === \"pending\" ||\n (nativeSubjectId !== undefined &&\n stored[mapping.registration.subjectId] !== null &&\n mapping.subjectId.equals(stored[mapping.registration.subjectId], nativeSubjectId)))\n );\n });\n\n let receipt: PreparedCommit<A> | undefined;\n\n yield* completeProofPlanIn(\n configuration.proof.mapping,\n configuration.proof.configuration,\n input.completion,\n protectedMutation,\n (completionDecision) => {\n receipt = prepare(\n completionDecision === \"completed\" && decision !== undefined\n ? decision\n : { _tag: \"Rejected\" },\n journal,\n );\n\n return completionDecision;\n },\n );\n\n return receipt ?? prepare({ _tag: \"Rejected\" }, journal);\n});\n\nconst prepareConflict = Effect.fn(\"Drizzle.prepareConflict\")(function* <Registration, A>(\n mapping: Mapping<Registration>,\n configuration: EmailRegistrationConfiguration,\n input: {\n readonly moduleId: string;\n readonly commandId: string;\n readonly fingerprint: TokenDigest;\n },\n prepare: PrepareEmailCommit<EmailRegistrationDecision, A>,\n) {\n const database = yield* CurrentEmailSql;\n\n return yield* owned(\n database,\n configuration,\n Effect.gen(function* () {\n const journal = yield* CurrentCommitJournal;\n\n const row = (yield* registrationRows(\n mapping,\n input.moduleId,\n input.commandId,\n configuration.locking,\n ))[0];\n\n return row === undefined\n ? prepare({ _tag: \"Rejected\" }, journal)\n : yield* prepareReplay(mapping, row, input.fingerprint, prepare);\n }),\n );\n});\n\nexport const makeSqlEmailRegistrationAuthority = Effect.fn(\"makeSqlEmailRegistrationAuthority\")(\n function* <Registration>(\n mapping: Mapping<Registration>,\n configuration: EmailRegistrationConfiguration,\n ): Effect.fn.Return<\n EmailRegistrationAuthority<Registration>,\n EmailUnavailable,\n LifecycleHooks | CurrentEmailSql | NativeDatabase\n > {\n const database = yield* CurrentEmailSql;\n\n if (!configuration.coordinated)\n yield* validateDrizzleStorage({\n ...mapping,\n proof: configuration.proof.mapping,\n }).pipe(Effect.mapError(unavailable));\n const hooks = yield* LifecycleHooks;\n\n return {\n inspect: (input) =>\n mapping\n .inspect(input)\n .pipe(\n Effect.provideService(CurrentEmailSql, database),\n Effect.provideService(LifecycleHooks, hooks),\n translateFailure,\n ),\n registerWithProof: (input, prepare) =>\n Effect.gen(function* () {\n if (!validConstraints(mapping)) return yield* unavailable();\n\n const snapshot = (registration: Registration) =>\n configuration.mode === \"synchronous\" && configuration.coordinated === true\n ? mapping.snapshotRegistrationSync === undefined\n ? Effect.fail(unavailable())\n : Effect.try({\n try: () => mapping.snapshotRegistrationSync!(registration),\n catch: (cause) => new PersistenceMappingError({ operation: \"mapping\", cause }),\n })\n : mapping.snapshotRegistration(registration);\n\n const storedRegistration = yield* snapshot(input.registration);\n const inspectionRegistration = yield* snapshot(input.registration);\n\n const capturedInput = Object.freeze({\n ...input,\n identifier: Object.freeze({ ...input.identifier }),\n registration: storedRegistration,\n });\n\n // Registration decoding and fingerprinting may suspend (for example while\n // hashing a detached Registration value). Finish that work before a\n // synchronous Durable Object transaction owner is entered.\n const inspectInput = {\n identifier: capturedInput.identifier,\n registration: inspectionRegistration,\n };\n\n const inspected =\n configuration.mode === \"synchronous\" && configuration.coordinated === true\n ? mapping.inspectSync === undefined\n ? yield* unavailable()\n : yield* Effect.try({\n try: () => mapping.inspectSync!(inspectInput),\n catch: (cause) => new PersistenceMappingError({ operation: \"mapping\", cause }),\n })\n : yield* mapping.inspect(inspectInput);\n\n const atomic = mapping.mode === \"atomic\";\n\n const credentialId = atomic\n ? yield* allocate(\n configuration.mode,\n mapping.allocateCredentialId,\n mapping.allocateCredentialIdSync,\n )\n : undefined;\n\n const securityRevision = atomic\n ? yield* allocate(\n configuration.mode,\n mapping.allocateRevision,\n mapping.allocateRevisionSync,\n )\n : undefined;\n\n const displacedSecurityRevision = atomic\n ? yield* allocate(\n configuration.mode,\n mapping.allocateRevision,\n mapping.allocateRevisionSync,\n )\n : undefined;\n\n const identifierRevision = atomic\n ? yield* allocate(\n configuration.mode,\n mapping.allocateRevision,\n mapping.allocateRevisionSync,\n )\n : undefined;\n\n const credentialRevision = atomic\n ? yield* allocate(\n configuration.mode,\n mapping.allocateRevision,\n mapping.allocateRevisionSync,\n )\n : undefined;\n\n const nativeSubjectId =\n atomic && mapping.provisioning.idMode !== \"generated\"\n ? yield* allocate(\n configuration.mode,\n mapping.provisioning.allocateSubjectId,\n mapping.provisioning.allocateSubjectIdSync,\n )\n : undefined;\n\n const pendingReference =\n mapping.mode === \"pending\"\n ? yield* allocate(\n configuration.mode,\n mapping.allocatePendingReference,\n mapping.allocatePendingReferenceSync,\n )\n : undefined;\n\n const run = owned(\n database,\n configuration,\n Effect.gen(function* () {\n return yield* registerIn(\n mapping,\n configuration,\n capturedInput,\n inspected,\n {\n ...(credentialId === undefined ? {} : { credentialId }),\n ...(securityRevision === undefined ? {} : { securityRevision }),\n ...(displacedSecurityRevision === undefined ? {} : { displacedSecurityRevision }),\n ...(identifierRevision === undefined ? {} : { identifierRevision }),\n ...(credentialRevision === undefined ? {} : { credentialRevision }),\n ...(nativeSubjectId === undefined ? {} : { nativeSubjectId }),\n ...(pendingReference === undefined ? {} : { pendingReference }),\n },\n prepare,\n );\n }),\n );\n\n return yield* run.pipe(\n Effect.catchCause((cause) => {\n const request =\n cause.reasons.every(Cause.isFailReason) &&\n isMappedConstraintConflict(mapping.isRequestConflict, cause);\n\n const conflict =\n mapping.mode === \"atomic\" &&\n ((cause.reasons.every(Cause.isFailReason) &&\n isMappedConstraintConflict(mapping.isIdentifierConflict, cause)) ||\n (cause.reasons.every(Cause.isFailReason) &&\n isMappedConstraintConflict(mapping.isCredentialConflict, cause)));\n\n return request || conflict\n ? prepareConflict(mapping, configuration, capturedInput, prepare)\n : Effect.failCause(cause);\n }),\n );\n }).pipe(\n Effect.provideService(CurrentEmailSql, database),\n Effect.provideService(LifecycleHooks, hooks),\n translateFailure,\n ),\n };\n },\n);\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- import "@yielded/auth-persistence/Adapter";
@@ -1,9 +0,0 @@
1
- import { drizzleQueryOperations } from "./query-operations.mjs";
2
- import { completeProofPlanIn } from "./proof-sql.mjs";
3
- import { CurrentEmailSql, makeEmailKernel } from "@yielded/auth-persistence/Adapter";
4
- //#region src/drizzle/email-sql.ts
5
- const { validEmailSignInConstraints, emailLookupQuery, decodeEmailSnapshot, makeSqlEmailSignInTargets, currentAddress, sameEmailRevision, snapshotEmailMutation, validateEmailAuthority, makeSqlEmailAddressPersistence } = makeEmailKernel(drizzleQueryOperations, { completeProofPlanIn });
6
- //#endregion
7
- export { CurrentEmailSql, currentAddress, decodeEmailSnapshot, emailLookupQuery, makeSqlEmailAddressPersistence, makeSqlEmailSignInTargets, sameEmailRevision, snapshotEmailMutation, validEmailSignInConstraints, validateEmailAuthority };
8
-
9
- //# sourceMappingURL=email-sql.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-sql.mjs","names":[],"sources":["../../src/drizzle/email-sql.ts"],"sourcesContent":["import { makeEmailKernel } from \"@yielded/auth-persistence/Adapter\";\n\nimport { completeProofPlanIn } from \"./proof-sql\";\nimport { drizzleQueryOperations } from \"./query-operations\";\n\nexport { CurrentEmailSql } from \"@yielded/auth-persistence/Adapter\";\n\nexport type {\n EmailSqlQuery,\n EmailSqlDatabase,\n EmailSqlConfiguration,\n CurrentAddress,\n} from \"@yielded/auth-persistence/Adapter\";\n\nexport const {\n validEmailSignInConstraints,\n emailLookupQuery,\n decodeEmailSnapshot,\n makeSqlEmailSignInTargets,\n currentAddress,\n sameEmailRevision,\n snapshotEmailMutation,\n validateEmailAuthority,\n makeSqlEmailAddressPersistence,\n} = makeEmailKernel(drizzleQueryOperations, { completeProofPlanIn });\n"],"mappings":";;;;AAcA,MAAa,EACX,6BACA,kBACA,qBACA,2BACA,gBACA,mBACA,uBACA,wBACA,mCACE,gBAAgB,wBAAwB,EAAE,oBAAoB,CAAC"}
@@ -1,71 +0,0 @@
1
- import { EmailAddressMapping, EmailRegistrationMapping, EmailSignInMapping } from "./email-model.mjs";
2
- import { ProofPersistenceMapping } from "./proof-model.mjs";
3
- import { EmailRegistrationAuthority } from "./email-registration.mjs";
4
- import { SuppliedService } from "./SuppliedService.mjs";
5
- import { Database as Database$1 } from "./mysql-database.mjs";
6
- import { AnyRelations } from "drizzle-orm";
7
- import { Effect } from "effect";
8
- import { HookConfigurationError, LifecycleHooks } from "@yielded/auth/Hooks";
9
- import { AnyMySqlTable } from "drizzle-orm/mysql-core";
10
- import { EmailAddressPersistence, EmailUnavailable } from "@yielded/auth/Email";
11
- import { EffectMysql2Database } from "drizzle-orm/effect-mysql2";
12
- import { SqlError } from "effect/sql/SqlError";
13
- //#region src/drizzle/mysql-emails.d.ts
14
- type Database = EffectMysql2Database<AnyRelations>;
15
- type TransactionOf<D extends Database> = Parameters<Parameters<D["transaction"]>[0]>[0];
16
- type ProofMapping = ProofPersistenceMapping<any, any, any, any, any, any, any, any, any, any, any, any>;
17
- export declare const makeMysqlEmailSignInServices: <S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, NativeId>(mapping: EmailSignInMapping<S, I, C, NativeId>) => Effect.Effect<{
18
- emailSignInTargets: {
19
- readonly lookup: (input: {
20
- readonly moduleId: string;
21
- readonly identifier: import("@yielded/auth/Identity").LoginIdentifier;
22
- }) => Effect.Effect<import("effect/Option").Option<import("@yielded/auth/Email").EmailCredentialSnapshot>, EmailUnavailable>;
23
- };
24
- }, EmailUnavailable, Database$1>;
25
- export declare const makeMysqlEmailAddressServices: <S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, NativeId>(mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>, proofMapping: ProofMapping) => Effect.Effect<{
26
- emailAddressPersistence: {
27
- readonly target: (input: {
28
- readonly moduleId: string;
29
- readonly subjectId: import("@yielded/auth/Schema").SubjectId;
30
- readonly target: import("@yielded/auth/Identity").LoginIdentifier;
31
- readonly sourceCredentialId?: string;
32
- }) => Effect.Effect<import("@yielded/auth/Email").EmailAddressTarget, EmailUnavailable>;
33
- readonly checkCompletion: (input: import("@yielded/auth/Proofs").ProofCompletionInput) => Effect.Effect<boolean, EmailUnavailable>;
34
- readonly verifyWithProof: <A>(input: import("@yielded/auth/Email").EmailAddressMutation, prepare: import("@yielded/auth/Email").PrepareEmailCommit<import("@yielded/auth/Email").EmailAddressDecision, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, EmailUnavailable>;
35
- readonly changeWithProof: <A>(input: import("@yielded/auth/Email").EmailAddressMutation, prepare: import("@yielded/auth/Email").PrepareEmailCommit<import("@yielded/auth/Email").EmailAddressDecision, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, EmailUnavailable>;
36
- readonly cleanup: <A>(input: {
37
- readonly moduleId: string;
38
- readonly limit: number;
39
- }, prepare: import("@yielded/auth/Email").PrepareEmailCommit<{
40
- readonly removed: number;
41
- readonly hasMore: boolean;
42
- }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, EmailUnavailable>;
43
- };
44
- }, EmailUnavailable, Database$1 | LifecycleHooks>;
45
- export declare function coordinateMysqlEmailAddress<D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, NativeId, Out, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
46
- readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;
47
- readonly proofMapping: ProofMapping;
48
- readonly transaction?: never;
49
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, EmailAddressPersistence> | LifecycleHooks | DatabaseRequirements>;
50
- export declare function coordinateMysqlEmailAddress<D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, NativeId, Out, E, R, DatabaseError, DatabaseRequirements, TxId, TxShape>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
51
- readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;
52
- readonly proofMapping: ProofMapping;
53
- readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;
54
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, EmailAddressPersistence | TxId> | LifecycleHooks | DatabaseRequirements>;
55
- export declare const makeMysqlEmailRegistrationServices: <Registration, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, Rq extends AnyMySqlTable, NativeId>(mapping: EmailRegistrationMapping<Registration, S, I, C, AC, Rq, NativeId>, proofMapping: ProofMapping) => Effect.Effect<{
56
- registrationAuthority: EmailRegistrationAuthority<Registration>;
57
- }, EmailUnavailable, Database$1 | LifecycleHooks>;
58
- export declare function coordinateMysqlEmailRegistration<TargetId, Registration, D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, Rq extends AnyMySqlTable, NativeId, Out, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
59
- readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;
60
- readonly proofMapping: ProofMapping;
61
- readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;
62
- readonly transaction?: never;
63
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements>;
64
- export declare function coordinateMysqlEmailRegistration<TargetId, Registration, D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, Rq extends AnyMySqlTable, NativeId, Out, E, R, DatabaseError, DatabaseRequirements, TxId, TxShape>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
65
- readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;
66
- readonly proofMapping: ProofMapping;
67
- readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;
68
- readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;
69
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, TargetId | TxId> | LifecycleHooks | DatabaseRequirements>;
70
- //#endregion
71
- //# sourceMappingURL=mysql-emails.d.mts.map
@@ -1,43 +0,0 @@
1
- import { acquireTransactionService, transactionService } from "./standalone-guard.mjs";
2
- import { CurrentEmailSql } from "./email-sql.mjs";
3
- import { coordinateTargetEmailAddress, coordinateTargetEmailRegistration, makeTargetEmailAddressServices, makeTargetEmailRegistrationServices, makeTargetEmailSignInServices, sqlClientEmailStandaloneGuard } from "./email-target.mjs";
4
- import { sqlClientProofStandaloneGuard } from "./proof-target.mjs";
5
- import { nativeDatabase } from "./native-database.mjs";
6
- import { Database } from "./mysql-database.mjs";
7
- import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
8
- import { Context, Effect } from "effect";
9
- import { EmailAddressPersistence } from "@yielded/auth/Email";
10
- //#region src/drizzle/mysql-emails.ts
11
- const configuration = (service) => ({
12
- mode: "interactive",
13
- locking: true,
14
- standaloneGuard: sqlClientEmailStandaloneGuard(service),
15
- generatedSubjectRows: (query) => query.$returningId(),
16
- proof: {
17
- mode: "interactive",
18
- locking: true,
19
- standaloneGuard: sqlClientProofStandaloneGuard(service),
20
- insertIfAbsent: (query, selfKey, selfValue) => query.onDuplicateKeyUpdate({ set: { [selfKey]: selfValue } })
21
- }
22
- });
23
- const makeMysqlEmailSignInServices = (mapping) => Effect.flatMap(Effect.map(acquireTransactionService(Database), configuration), (configuration) => makeTargetEmailSignInServices(mapping, configuration)).pipe(Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(Database)), Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)));
24
- const makeMysqlEmailAddressServices = (mapping, proofMapping) => Effect.flatMap(Effect.map(acquireTransactionService(Database), configuration), (configuration) => makeTargetEmailAddressServices(mapping, proofMapping, configuration)).pipe(Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(Database)), Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)));
25
- function coordinateMysqlEmailAddress(acquire, options, body) {
26
- return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateTargetEmailAddress(database, options.mapping, options.proofMapping, configuration(transactionService(database)), (transaction, services) => {
27
- const provided = Context.make(EmailAddressPersistence, services.emailAddressPersistence);
28
- const work = Effect.provideContext(body, provided);
29
- return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
30
- }).pipe(Effect.provideService(NativeDatabase, database)));
31
- }
32
- const makeMysqlEmailRegistrationServices = (mapping, proofMapping) => Effect.flatMap(Effect.map(acquireTransactionService(Database), configuration), (configuration) => makeTargetEmailRegistrationServices(mapping, proofMapping, configuration)).pipe(Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(Database)), Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)));
33
- function coordinateMysqlEmailRegistration(acquire, options, body) {
34
- return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateTargetEmailRegistration(database, options.mapping, options.proofMapping, configuration(transactionService(database)), (transaction, services) => {
35
- const provided = Context.make(options.target, services.registrationAuthority);
36
- const work = Effect.provideContext(body, provided);
37
- return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
38
- }).pipe(Effect.provideService(NativeDatabase, database)));
39
- }
40
- //#endregion
41
- export { coordinateMysqlEmailAddress, coordinateMysqlEmailRegistration, makeMysqlEmailAddressServices, makeMysqlEmailRegistrationServices, makeMysqlEmailSignInServices };
42
-
43
- //# sourceMappingURL=mysql-emails.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mysql-emails.mjs","names":["DatabaseService"],"sources":["../../src/drizzle/mysql-emails.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport { EmailAddressPersistence, type EmailUnavailable } from \"@yielded/auth/Email\";\nimport type { LifecycleHooks, HookConfigurationError } from \"@yielded/auth/Hooks\";\n/* oxlint-disable no-explicit-any -- proof mapping tables are independently typed by the proof owner; this driver forwards them unchanged to the shared target. */\nimport type { AnyRelations } from \"drizzle-orm\";\nimport type { EffectMysql2Database } from \"drizzle-orm/effect-mysql2\";\nimport type { AnyMySqlTable } from \"drizzle-orm/mysql-core\";\nimport { Effect, Context } from \"effect\";\nimport type { SqlError } from \"effect/sql/SqlError\";\n\nimport type {\n EmailAddressMapping,\n EmailRegistrationMapping,\n EmailSignInMapping,\n} from \"./email-model\";\nimport type { EmailRegistrationAuthority } from \"./email-registration\";\nimport { CurrentEmailSql } from \"./email-sql\";\nimport type { EmailSqlQuery } from \"./email-sql\";\nimport {\n coordinateTargetEmailAddress,\n coordinateTargetEmailRegistration,\n makeTargetEmailAddressServices,\n makeTargetEmailRegistrationServices,\n makeTargetEmailSignInServices,\n sqlClientEmailStandaloneGuard,\n} from \"./email-target\";\nimport { Database as DatabaseService } from \"./mysql-database\";\nimport { nativeDatabase } from \"./native-database\";\nimport type { ProofPersistenceMapping } from \"./proof-model\";\nimport type { ProofSqlQuery } from \"./proof-sql\";\nimport { sqlClientProofStandaloneGuard } from \"./proof-target\";\nimport {\n type TransactionService,\n acquireTransactionService,\n transactionService,\n} from \"./standalone-guard\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\ntype Database = EffectMysql2Database<AnyRelations>;\ntype TransactionOf<D extends Database> = Parameters<Parameters<D[\"transaction\"]>[0]>[0];\ntype ProofMapping = ProofPersistenceMapping<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>;\n\nconst configuration = (service: TransactionService | undefined) => ({\n mode: \"interactive\" as const,\n locking: true,\n standaloneGuard: sqlClientEmailStandaloneGuard(service),\n generatedSubjectRows: (query: EmailSqlQuery) => query.$returningId(),\n proof: {\n mode: \"interactive\" as const,\n locking: true,\n standaloneGuard: sqlClientProofStandaloneGuard(service),\n insertIfAbsent: (query: ProofSqlQuery, selfKey: string, selfValue: unknown) =>\n query.onDuplicateKeyUpdate({ set: { [selfKey]: selfValue } }),\n },\n});\n\nexport const makeMysqlEmailSignInServices = <\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n NativeId,\n>(\n mapping: EmailSignInMapping<S, I, C, NativeId>,\n) =>\n Effect.flatMap(\n Effect.map(acquireTransactionService(DatabaseService), configuration),\n (configuration) => makeTargetEmailSignInServices(mapping, configuration),\n ).pipe(\n Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(DatabaseService)),\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),\n );\n\nexport const makeMysqlEmailAddressServices = <\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n M extends AnyMySqlTable,\n NativeId,\n>(\n mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>,\n proofMapping: ProofMapping,\n) =>\n Effect.flatMap(\n Effect.map(acquireTransactionService(DatabaseService), configuration),\n (configuration) => makeTargetEmailAddressServices(mapping, proofMapping, configuration),\n ).pipe(\n Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(DatabaseService)),\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),\n );\n\nexport function coordinateMysqlEmailAddress<\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n M extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly transaction?: never;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, EmailAddressPersistence> | LifecycleHooks | DatabaseRequirements\n>;\n\nexport function coordinateMysqlEmailAddress<\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n M extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, EmailAddressPersistence | TxId> | LifecycleHooks | DatabaseRequirements\n>;\n\nexport function coordinateMysqlEmailAddress<\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n M extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailAddressMapping<S, I, C, AC, M, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, EmailAddressPersistence> | LifecycleHooks | DatabaseRequirements\n> {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetEmailAddress<TransactionOf<D>, Out, E, Exclude<R, EmailAddressPersistence>>(\n database,\n options.mapping,\n options.proofMapping,\n configuration(transactionService(database)),\n (\n transaction: TransactionOf<D>,\n services: { readonly emailAddressPersistence: EmailAddressPersistence[\"Service\"] },\n ) => {\n const provided = Context.make(EmailAddressPersistence, services.emailAddressPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n}\n\nexport const makeMysqlEmailRegistrationServices = <\n Registration,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n Rq extends AnyMySqlTable,\n NativeId,\n>(\n mapping: EmailRegistrationMapping<Registration, S, I, C, AC, Rq, NativeId>,\n proofMapping: ProofMapping,\n) =>\n Effect.flatMap(\n Effect.map(acquireTransactionService(DatabaseService), configuration),\n (configuration) =>\n makeTargetEmailRegistrationServices<Registration>(mapping, proofMapping, configuration),\n ).pipe(\n Effect.provideServiceEffect(CurrentEmailSql, nativeDatabase(DatabaseService)),\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),\n );\n\nexport function coordinateMysqlEmailRegistration<\n TargetId,\n Registration,\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n Rq extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n>;\n\nexport function coordinateMysqlEmailRegistration<\n TargetId,\n Registration,\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n Rq extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId | TxId> | LifecycleHooks | DatabaseRequirements\n>;\n\nexport function coordinateMysqlEmailRegistration<\n TargetId,\n Registration,\n D extends Database,\n S extends AnyMySqlTable,\n I extends AnyMySqlTable,\n C extends AnyMySqlTable,\n AC extends AnyMySqlTable,\n Rq extends AnyMySqlTable,\n NativeId,\n Out,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n>(\n acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: EmailRegistrationMapping<NoInfer<Registration>, S, I, C, AC, Rq, NativeId>;\n readonly proofMapping: ProofMapping;\n readonly target: SuppliedService<TargetId, EmailRegistrationAuthority<Registration>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;\n },\n body: Effect.Effect<Out, E, R>,\n): Effect.Effect<\n Out,\n E | EmailUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n> {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetEmailRegistration<Registration, TransactionOf<D>, Out, E, Exclude<R, TargetId>>(\n database,\n options.mapping,\n options.proofMapping,\n configuration(transactionService(database)),\n (\n transaction: TransactionOf<D>,\n services: { readonly registrationAuthority: EmailRegistrationAuthority<Registration> },\n ) => {\n const provided = Context.make(options.target, services.registrationAuthority);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n}\n"],"mappings":";;;;;;;;;;AAuDA,MAAM,iBAAiB,aAA6C;CAClE,MAAM;CACN,SAAS;CACT,iBAAiB,8BAA8B,OAAO;CACtD,uBAAuB,UAAyB,MAAM,aAAa;CACnE,OAAO;EACL,MAAM;EACN,SAAS;EACT,iBAAiB,8BAA8B,OAAO;EACtD,iBAAiB,OAAsB,SAAiB,cACtD,MAAM,qBAAqB,EAAE,KAAK,GAAG,UAAU,UAAU,EAAE,CAAC;CAChE;AACF;AAEA,MAAa,gCAMX,YAEA,OAAO,QACL,OAAO,IAAI,0BAA0BA,QAAe,GAAG,aAAa,IACnE,kBAAkB,8BAA8B,SAAS,aAAa,CACzE,CAAC,CAAC,KACA,OAAO,qBAAqB,iBAAiB,eAAeA,QAAe,CAAC,GAC5E,OAAO,qBAAqB,gBAAgB,eAAeA,QAAe,CAAC,CAC7E;AAEF,MAAa,iCAQX,SACA,iBAEA,OAAO,QACL,OAAO,IAAI,0BAA0BA,QAAe,GAAG,aAAa,IACnE,kBAAkB,+BAA+B,SAAS,cAAc,aAAa,CACxF,CAAC,CAAC,KACA,OAAO,qBAAqB,iBAAiB,eAAeA,QAAe,CAAC,GAC5E,OAAO,qBAAqB,gBAAgB,eAAeA,QAAe,CAAC,CAC7E;AA0DF,SAAgB,4BAgBd,SACA,SAKA,MAKA;CACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,6BACE,UACA,QAAQ,SACR,QAAQ,cACR,cAAc,mBAAmB,QAAQ,CAAC,IAExC,aACA,aACG;EACH,MAAM,WAAW,QAAQ,KAAK,yBAAyB,SAAS,uBAAuB;EACvF,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;EAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;CAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;AACF;AAEA,MAAa,sCASX,SACA,iBAEA,OAAO,QACL,OAAO,IAAI,0BAA0BA,QAAe,GAAG,aAAa,IACnE,kBACC,oCAAkD,SAAS,cAAc,aAAa,CAC1F,CAAC,CAAC,KACA,OAAO,qBAAqB,iBAAiB,eAAeA,QAAe,CAAC,GAC5E,OAAO,qBAAqB,gBAAgB,eAAeA,QAAe,CAAC,CAC7E;AAgEF,SAAgB,iCAkBd,SACA,SAMA,MAKA;CACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,kCACE,UACA,QAAQ,SACR,QAAQ,cACR,cAAc,mBAAmB,QAAQ,CAAC,IAExC,aACA,aACG;EACH,MAAM,WAAW,QAAQ,KAAK,QAAQ,QAAQ,SAAS,qBAAqB;EAC5E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;EAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;CAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;AACF"}
@@ -1,30 +0,0 @@
1
- import { PasswordPreparedPersistenceMapping, PasswordPreparedProofMapping } from "./password-prepared-model.mjs";
2
- import { SuppliedService } from "./SuppliedService.mjs";
3
- import { Database as Database$1 } from "./mysql-database.mjs";
4
- import { AnyRelations } from "drizzle-orm";
5
- import { Effect } from "effect";
6
- import { HookConfigurationError, LifecycleHooks } from "@yielded/auth/Hooks";
7
- import { AnyMySqlTable } from "drizzle-orm/mysql-core";
8
- import { PasswordPreparedPersistence, PasswordUnavailable } from "@yielded/auth/Password";
9
- import { EffectMysql2Database } from "drizzle-orm/effect-mysql2";
10
- import { SqlError } from "effect/sql/SqlError";
11
- //#region src/drizzle/mysql-password-prepared.d.ts
12
- type Database = EffectMysql2Database<AnyRelations>;
13
- type TransactionOf<D extends Database> = Parameters<Parameters<D["transaction"]>[0]>[0];
14
- export declare const makeMySqlPasswordPreparedPersistenceServices: <S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, T extends AnyMySqlTable, B extends AnyMySqlTable, NativeId, PS extends AnyMySqlTable = AnyMySqlTable, PC extends AnyMySqlTable = AnyMySqlTable, PM extends AnyMySqlTable = AnyMySqlTable, PSub extends AnyMySqlTable = AnyMySqlTable, PI extends AnyMySqlTable = AnyMySqlTable, PCr extends AnyMySqlTable = AnyMySqlTable, PNativeId = unknown>(mapping: PasswordPreparedPersistenceMapping<S, I, C, AC, M, T, B, NativeId>, proofMapping?: PasswordPreparedProofMapping<PS, PC, PM, PSub, PI, PCr, PNativeId>) => Effect.Effect<{
15
- passwordPreparedPersistence: PasswordPreparedPersistence;
16
- }, PasswordUnavailable, Database$1 | LifecycleHooks>;
17
- export declare function coordinateMySqlPasswordPreparedPersistence<TargetId, D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, T extends AnyMySqlTable, B extends AnyMySqlTable, NativeId, PS extends AnyMySqlTable, PC extends AnyMySqlTable, PM extends AnyMySqlTable, PSub extends AnyMySqlTable, PI extends AnyMySqlTable, PCr extends AnyMySqlTable, PNativeId, Out, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
18
- readonly mapping: PasswordPreparedPersistenceMapping<S, I, C, AC, M, T, B, NativeId>;
19
- readonly proofMapping?: PasswordPreparedProofMapping<PS, PC, PM, PSub, PI, PCr, PNativeId> | undefined;
20
- readonly target: SuppliedService<TargetId, PasswordPreparedPersistence>;
21
- readonly transaction?: never;
22
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | PasswordUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements>;
23
- export declare function coordinateMySqlPasswordPreparedPersistence<TargetId, D extends Database, S extends AnyMySqlTable, I extends AnyMySqlTable, C extends AnyMySqlTable, AC extends AnyMySqlTable, M extends AnyMySqlTable, T extends AnyMySqlTable, B extends AnyMySqlTable, NativeId, PS extends AnyMySqlTable, PC extends AnyMySqlTable, PM extends AnyMySqlTable, PSub extends AnyMySqlTable, PI extends AnyMySqlTable, PCr extends AnyMySqlTable, PNativeId, Out, E, R, DatabaseError, DatabaseRequirements, TxId, TxShape>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
24
- readonly mapping: PasswordPreparedPersistenceMapping<S, I, C, AC, M, T, B, NativeId>;
25
- readonly proofMapping?: PasswordPreparedProofMapping<PS, PC, PM, PSub, PI, PCr, PNativeId> | undefined;
26
- readonly target: SuppliedService<TargetId, PasswordPreparedPersistence>;
27
- readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<D>>, TxShape>;
28
- }, body: Effect.Effect<Out, E, R>): Effect.Effect<Out, E | PasswordUnavailable | HookConfigurationError | SqlError | DatabaseError, Exclude<R, TargetId | TxId> | LifecycleHooks | DatabaseRequirements>;
29
- //#endregion
30
- //# sourceMappingURL=mysql-password-prepared.d.mts.map