@yielded/auth-persistence-drizzle 0.1.0-beta.24 → 0.1.0-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +90 -25
  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 -1265
  340. package/src/drizzle/d1-passwords.ts +0 -2060
  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 -1201
  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,13 +1,12 @@
1
1
  import type * as Shared from "@yielded/auth-persistence/Adapter";
2
2
  import type { SQL, Table } from "drizzle-orm";
3
3
 
4
+ import type { ClockMapping } from "./native-clock";
4
5
  import type { DrizzleTableModel } from "./table-model";
5
6
 
6
7
  export {
7
8
  type RequiredPasswordConstraints,
8
9
  requiredPasswordConstraints,
9
- type PasswordConstraintClassifier,
10
- type PasswordRegistrationState,
11
10
  type PasswordRegistrationIntent,
12
11
  type RequiredPasswordRegistrationConstraints,
13
12
  requiredPasswordRegistrationConstraints,
@@ -41,52 +40,23 @@ export type PasswordCredentialTable<
41
40
  NativeSubjectId
42
41
  >;
43
42
 
44
- export type PasswordCommandTable<Command extends Table> = Shared.PasswordCommandTable<
45
- DrizzleTableModel<Command>
46
- >;
47
-
48
- export type PasswordD1Clock = Shared.PasswordD1Clock<SQL>;
49
-
50
43
  export type PasswordPersistenceMapping<
51
44
  Subject extends Table,
52
45
  Identifier extends Table,
53
46
  Credential extends Table,
54
47
  AuthorityCredential extends Table,
55
- Command extends Table,
56
- NativeSubjectId,
57
- > = Shared.PasswordPersistenceMapping<
58
- DrizzleTableModel<Subject>,
59
- DrizzleTableModel<Identifier>,
60
- DrizzleTableModel<Credential>,
61
- DrizzleTableModel<AuthorityCredential>,
62
- DrizzleTableModel<Command>,
63
48
  NativeSubjectId,
64
- SQL
49
+ > = ClockMapping<
50
+ Shared.PasswordPersistenceMapping<
51
+ DrizzleTableModel<Subject>,
52
+ DrizzleTableModel<Identifier>,
53
+ DrizzleTableModel<Credential>,
54
+ DrizzleTableModel<AuthorityCredential>,
55
+ NativeSubjectId,
56
+ SQL
57
+ >
65
58
  >;
66
59
 
67
- export type D1PasswordPersistenceMapping<
68
- Subject extends Table,
69
- Identifier extends Table,
70
- Credential extends Table,
71
- AuthorityCredential extends Table,
72
- Command extends Table,
73
- NativeSubjectId,
74
- > = Shared.D1PasswordPersistenceMapping<
75
- DrizzleTableModel<Subject>,
76
- DrizzleTableModel<Identifier>,
77
- DrizzleTableModel<Credential>,
78
- DrizzleTableModel<AuthorityCredential>,
79
- DrizzleTableModel<Command>,
80
- NativeSubjectId,
81
- SQL
82
- >;
83
-
84
- export type PasswordRegistrationTable<
85
- Registration,
86
- Request extends Table,
87
- NativeSubjectId,
88
- > = Shared.PasswordRegistrationTable<Registration, DrizzleTableModel<Request>, NativeSubjectId>;
89
-
90
60
  export type PasswordRegistrationProvisioning<
91
61
  Registration,
92
62
  Subject extends Table,
@@ -103,7 +73,6 @@ export type PasswordRegistrationMapping<
103
73
  Identifier extends Table,
104
74
  Credential extends Table,
105
75
  AuthorityCredential extends Table,
106
- Request extends Table,
107
76
  NativeSubjectId,
108
77
  > = Shared.PasswordRegistrationMapping<
109
78
  Registration,
@@ -111,7 +80,6 @@ export type PasswordRegistrationMapping<
111
80
  DrizzleTableModel<Identifier>,
112
81
  DrizzleTableModel<Credential>,
113
82
  DrizzleTableModel<AuthorityCredential>,
114
- DrizzleTableModel<Request>,
115
83
  NativeSubjectId,
116
84
  SQL
117
85
  >;
@@ -121,7 +89,6 @@ export type AnyPasswordPersistenceMapping = PasswordPersistenceMapping<
121
89
  Table,
122
90
  Table,
123
91
  Table,
124
- Table,
125
92
  unknown
126
93
  >;
127
94
 
@@ -131,6 +98,5 @@ export type AnyPasswordRegistrationMapping<Registration = unknown> = PasswordReg
131
98
  Table,
132
99
  Table,
133
100
  Table,
134
- Table,
135
101
  unknown
136
102
  >;
@@ -1,262 +1,108 @@
1
1
  import {
2
- CurrentPasswordPreparedTransaction,
3
- type NativeDatabase,
4
- type PasswordPreparedPostcondition,
5
- PasswordPreparedPostconditions,
2
+ makeNativePasswordServices,
3
+ makeNativePasswordRegistrationServices,
4
+ requireStandalone,
5
+ type AnyPasswordPersistenceMapping as SharedPasswordMapping,
6
+ type PasswordRegistrationAuthority,
6
7
  } from "@yielded/auth-persistence/Adapter";
7
- import {
8
- coordinateCommit,
9
- hasCommitScope,
10
- LifecycleHooks,
11
- type HookConfigurationError,
12
- } from "@yielded/auth/Hooks";
13
- import { PasswordUnavailable, PasswordPersistence } from "@yielded/auth/Password";
14
- /* oxlint-disable no-explicit-any -- public driver wrappers restore concrete Drizzle generics. */
15
- import { Cause, type Context, Effect, Layer } from "effect";
16
- import type * as SqlError from "effect/sql/SqlError";
8
+ import { PasswordPersistence, PasswordUnavailable } from "@yielded/auth/Password";
9
+ import { type Context, Effect, Layer } from "effect";
17
10
 
11
+ import { nativeClock } from "./native-clock";
12
+ import type { NativeDatabaseHandle } from "./native-database";
18
13
  import {
19
- makeSqlPasswordRegistrationAuthority,
20
- type PasswordRegistrationAuthority,
21
- type PasswordRegistrationConfiguration,
22
- } from "./password-registration";
23
- import {
24
- CurrentPasswordSql,
25
- makeSqlPasswordPersistence,
26
- type PasswordSqlConfiguration,
27
- type PasswordSqlDatabase,
28
- type PasswordSqlQuery,
29
- } from "./password-sql";
30
- import type { ProofTargetConfiguration } from "./proof-target";
31
- import { sqlClientStandaloneGuard, type TransactionService } from "./standalone-guard";
14
+ nativeTarget,
15
+ coordinateNativeTarget,
16
+ type NativeTargetConfiguration,
17
+ } from "./native-target";
18
+ import type {
19
+ AnyPasswordPersistenceMapping,
20
+ AnyPasswordRegistrationMapping,
21
+ } from "./password-model";
22
+ import type { AnyProofPersistenceMapping } from "./proof-model";
23
+ import { nativeProofMapping } from "./proof-target";
32
24
  import { validateDrizzleStorage } from "./storage-validation";
33
25
 
34
- export interface PasswordTargetConfiguration {
35
- readonly mode: "interactive" | "synchronous";
36
- readonly locking: boolean;
37
- readonly standaloneGuard: Effect.Effect<void, PasswordUnavailable>;
38
- readonly coordinatorGuard?: Effect.Effect<void, PasswordUnavailable>;
39
- readonly insertIfAbsent: (
40
- query: PasswordSqlQuery,
41
- selfKey: string,
42
- selfValue: unknown,
43
- ) => PasswordSqlQuery;
44
- readonly generatedSubjectRows: (query: PasswordSqlQuery) => PasswordSqlQuery;
45
- readonly proof: ProofTargetConfiguration;
46
- }
47
-
48
- interface TransactionOwner<Transaction> {
49
- readonly transaction: <A, E, R>(
50
- body: (transaction: Transaction) => Effect.Effect<A, E, R>,
51
- ) => Effect.Effect<A, E | SqlError.SqlError, R>;
52
- }
53
-
54
- export type PasswordCoordinatorError<E> =
55
- | E
56
- | PasswordUnavailable
57
- | HookConfigurationError
58
- | SqlError.SqlError;
59
-
60
- export const sqlClientPasswordStandaloneGuard = (
61
- service: TransactionService | undefined,
62
- ): Effect.Effect<void, PasswordUnavailable> =>
63
- sqlClientStandaloneGuard(service, () => PasswordUnavailable.make({}));
64
-
65
- export const passwordOptions = (
66
- configuration: PasswordTargetConfiguration,
67
- proofMapping?: any,
68
- coordinated = false,
69
- ): PasswordSqlConfiguration => ({
70
- mode: configuration.mode,
71
- locking: configuration.locking,
26
+ const unavailable = () => PasswordUnavailable.make({});
72
27
 
73
- standaloneGuard: !coordinated ? configuration.standaloneGuard : Effect.void,
74
- insertIfAbsent: configuration.insertIfAbsent,
75
- coordinated,
76
- ...(proofMapping === undefined
77
- ? {}
78
- : {
79
- proof: {
80
- mapping: proofMapping,
81
- configuration: {
82
- mode: configuration.proof.mode,
83
- locking: configuration.proof.locking,
28
+ export const sqlClientPasswordStandaloneGuard = (marker: Parameters<typeof requireStandalone>[1]) =>
29
+ requireStandalone(unavailable, marker);
84
30
 
85
- standaloneGuard: Effect.void,
86
-
87
- coordinated,
88
- insertIfAbsent: configuration.proof.insertIfAbsent,
89
- },
90
- },
91
- }),
31
+ const mapped = (value: AnyPasswordPersistenceMapping): SharedPasswordMapping => ({
32
+ ...value,
33
+ clock: nativeClock(value.clock),
92
34
  });
93
35
 
94
- const registrationOptions = (
95
- configuration: PasswordTargetConfiguration,
96
- coordinated = false,
97
- ): PasswordRegistrationConfiguration => ({
98
- mode: configuration.mode,
99
- locking: configuration.locking,
100
-
101
- standaloneGuard: !coordinated ? configuration.standaloneGuard : Effect.void,
102
- generatedSubjectRows: configuration.generatedSubjectRows,
103
- coordinated,
36
+ export const makeTargetPasswordPersistenceServices = Effect.fnUntraced(function* (
37
+ mapping: AnyPasswordPersistenceMapping,
38
+ configuration: NativeTargetConfiguration,
39
+ proofs?: AnyProofPersistenceMapping,
40
+ ) {
41
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
42
+ if (proofs !== undefined)
43
+ yield* validateDrizzleStorage(proofs).pipe(Effect.mapError(unavailable));
44
+ if (
45
+ configuration.mode === "batch" &&
46
+ (mapping.d1?.primary !== true || (proofs !== undefined && proofs.d1?.primary !== true))
47
+ )
48
+ return yield* unavailable();
49
+ const target = yield* nativeTarget(configuration);
50
+
51
+ return yield* target.provide(
52
+ makeNativePasswordServices(
53
+ target.tables,
54
+ mapped(mapping),
55
+ proofs === undefined ? undefined : nativeProofMapping(proofs),
56
+ ),
57
+ );
104
58
  });
105
59
 
106
- export const makeTargetPasswordPersistenceServices = (
107
- mapping: any,
108
- configuration: PasswordTargetConfiguration,
109
- proofMapping?: any,
110
- ) =>
111
- Effect.gen(function* () {
112
- return {
113
- passwordPersistence: yield* makeSqlPasswordPersistence(
114
- mapping,
115
- passwordOptions(configuration, proofMapping),
116
- ),
117
- };
118
- });
60
+ export const makeTargetPasswordRegistrationServices = Effect.fnUntraced(function* <Registration>(
61
+ mapping: AnyPasswordRegistrationMapping<Registration>,
62
+ configuration: NativeTargetConfiguration,
63
+ ) {
64
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
65
+ const target = yield* nativeTarget(configuration);
119
66
 
120
- export const makeTargetPasswordRegistrationServices = <Registration>(
121
- mapping: any,
122
- configuration: PasswordTargetConfiguration,
123
- ) =>
124
- Effect.gen(function* () {
125
- return {
126
- registrationAuthority: yield* makeSqlPasswordRegistrationAuthority<Registration>(
127
- mapping,
128
- registrationOptions(configuration),
129
- ),
130
- };
131
- });
67
+ return yield* target.provide(
68
+ makeNativePasswordRegistrationServices(target.tables, mapping, target.batch),
69
+ );
70
+ });
132
71
 
133
- /** Native transaction acquisition exposes SqlError; caller errors propagate unchanged. */
134
72
  export const coordinateTargetPasswordPersistence = <Transaction, A, E, R>(
135
- database: TransactionOwner<Transaction>,
136
- mapping: any,
137
- configuration: PasswordTargetConfiguration,
138
- proofMapping: any | undefined,
139
- owner: (
73
+ database: NativeDatabaseHandle,
74
+ mapping: AnyPasswordPersistenceMapping,
75
+ configuration: NativeTargetConfiguration,
76
+ body: (
140
77
  transaction: Transaction,
141
78
  services: { readonly passwordPersistence: PasswordPersistence["Service"] },
142
79
  ) => Effect.Effect<A, E, R>,
143
- ): Effect.Effect<A, PasswordCoordinatorError<E>, R | LifecycleHooks | NativeDatabase> =>
144
- Effect.gen(function* (): Effect.fn.Return<
145
- A,
146
- PasswordCoordinatorError<E>,
147
- R | LifecycleHooks | NativeDatabase
148
- > {
149
- const hooks = yield* LifecycleHooks;
150
-
151
- if (yield* hasCommitScope) return yield* PasswordUnavailable.make({});
152
- yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;
153
-
154
- yield* validateDrizzleStorage({ ...mapping, proof: proofMapping }).pipe(
155
- Effect.mapError(() => PasswordUnavailable.make({})),
156
- );
157
-
158
- const result = yield* coordinateCommit(
159
- () =>
160
- database.transaction((transaction) =>
161
- Effect.gen(function* () {
162
- const postconditions: Array<PasswordPreparedPostcondition> = [];
163
- let acceptingPostconditions = true;
164
-
165
- const value = yield* owner(transaction, {
166
- passwordPersistence: yield* makeSqlPasswordPersistence(
167
- mapping,
168
- passwordOptions(configuration, proofMapping, true),
169
- ).pipe(
170
- Effect.provideService(
171
- CurrentPasswordSql,
172
- transaction as unknown as PasswordSqlDatabase,
173
- ),
174
- ),
175
- }).pipe(
176
- Effect.provideService(PasswordPreparedPostconditions, {
177
- register: (check) => {
178
- if (!acceptingPostconditions) return false;
179
- postconditions.push(check);
180
-
181
- return true;
182
- },
183
- }),
184
- Effect.ensuring(
185
- Effect.sync(() => {
186
- acceptingPostconditions = false;
187
- }),
188
- ),
189
- );
190
-
191
- // Application work in this transaction must not change what the
192
- // password mutations committed to; a failure here rolls back both.
193
- for (const check of postconditions)
194
- yield* check.pipe(
195
- Effect.provideService(
196
- CurrentPasswordPreparedTransaction,
197
- transaction as unknown as PasswordSqlDatabase,
198
- ),
199
- Effect.catchCause((cause) =>
200
- Effect.failCause(Cause.map(cause, () => PasswordUnavailable.make({}))),
201
- ),
202
- );
203
-
204
- return value;
205
- }),
206
- ),
207
- { mode: configuration.mode },
208
- ).pipe(Effect.provideService(LifecycleHooks, hooks));
209
-
210
- return result.value;
211
- });
80
+ proofs?: AnyProofPersistenceMapping,
81
+ ) =>
82
+ coordinateNativeTarget(
83
+ unavailable,
84
+ database,
85
+ configuration,
86
+ makeTargetPasswordPersistenceServices(mapping, configuration, proofs),
87
+ body,
88
+ );
212
89
 
213
90
  export const coordinateTargetPasswordRegistration = <Registration, Transaction, A, E, R>(
214
- database: TransactionOwner<Transaction>,
215
- mapping: any,
216
- configuration: PasswordTargetConfiguration,
217
- owner: (
91
+ database: NativeDatabaseHandle,
92
+ mapping: AnyPasswordRegistrationMapping<Registration>,
93
+ configuration: NativeTargetConfiguration,
94
+ body: (
218
95
  transaction: Transaction,
219
- services: {
220
- readonly registrationAuthority: PasswordRegistrationAuthority<Registration>;
221
- },
96
+ services: { readonly registrationAuthority: PasswordRegistrationAuthority<Registration> },
222
97
  ) => Effect.Effect<A, E, R>,
223
- ): Effect.Effect<A, PasswordCoordinatorError<E>, R | LifecycleHooks | NativeDatabase> =>
224
- Effect.gen(function* (): Effect.fn.Return<
225
- A,
226
- PasswordCoordinatorError<E>,
227
- R | LifecycleHooks | NativeDatabase
228
- > {
229
- const hooks = yield* LifecycleHooks;
230
-
231
- if (yield* hasCommitScope) return yield* PasswordUnavailable.make({});
232
- yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;
233
-
234
- yield* validateDrizzleStorage(mapping).pipe(
235
- Effect.mapError(() => PasswordUnavailable.make({})),
236
- );
237
-
238
- const result = yield* coordinateCommit(
239
- () =>
240
- database.transaction((transaction) =>
241
- Effect.gen(function* () {
242
- return yield* owner(transaction, {
243
- registrationAuthority: yield* makeSqlPasswordRegistrationAuthority<Registration>(
244
- mapping,
245
- registrationOptions(configuration, true),
246
- ).pipe(
247
- Effect.provideService(
248
- CurrentPasswordSql,
249
- transaction as unknown as PasswordSqlDatabase,
250
- ),
251
- ),
252
- });
253
- }),
254
- ),
255
- { mode: configuration.mode },
256
- ).pipe(Effect.provideService(LifecycleHooks, hooks));
257
-
258
- return result.value;
259
- });
98
+ ) =>
99
+ coordinateNativeTarget(
100
+ unavailable,
101
+ database,
102
+ configuration,
103
+ makeTargetPasswordRegistrationServices(mapping, configuration),
104
+ body,
105
+ );
260
106
 
261
107
  export const passwordPersistenceLayer = <E, R>(
262
108
  services: Effect.Effect<{ readonly passwordPersistence: PasswordPersistence["Service"] }, E, R>,
@@ -267,7 +113,7 @@ export const passwordPersistenceLayer = <E, R>(
267
113
  );
268
114
 
269
115
  export const passwordRegistrationLayer = <Id, Registration, E, R>(
270
- tag: Context.Key<Id, PasswordRegistrationAuthority<Registration>>,
116
+ target: Context.Key<Id, PasswordRegistrationAuthority<Registration>>,
271
117
  services: Effect.Effect<
272
118
  { readonly registrationAuthority: PasswordRegistrationAuthority<Registration> },
273
119
  E,
@@ -275,6 +121,6 @@ export const passwordRegistrationLayer = <Id, Registration, E, R>(
275
121
  >,
276
122
  ) =>
277
123
  Layer.effect(
278
- tag,
124
+ target,
279
125
  Effect.map(services, (value) => value.registrationAuthority),
280
126
  );
@@ -1,4 +1,4 @@
1
- import { withStorageValidation, NativeDatabase } from "@yielded/auth-persistence/Adapter";
1
+ import { withStorageValidation } from "@yielded/auth-persistence/Adapter";
2
2
  import {
3
3
  ExternalIdentityMutation,
4
4
  IdentityConflict,
@@ -25,7 +25,7 @@ import {
25
25
  type IdentityTables,
26
26
  type SubjectProvisioningTables,
27
27
  } from "./model";
28
- import { nativeDatabase } from "./native-database";
28
+ import { NativeDatabase, nativeDatabase } from "./native-database";
29
29
  import { Database as DatabaseService } from "./pg-database";
30
30
  import { validateDrizzleStorage } from "./storage-validation";
31
31
 
@@ -62,8 +62,6 @@ export const makePgSubjectProvisioningServices = Effect.fnUntraced(function* <
62
62
  const requestFingerprintColumn = column(requestTable, mapping.provisioningRequest.fingerprint);
63
63
  const requestSubjectColumn = column(requestTable, mapping.provisioningRequest.subjectId);
64
64
  const identifierTable = mapping.identifier.table;
65
- const identifierNamespaceColumn = column(identifierTable, mapping.identifier.namespace);
66
- const identifierValueColumn = column(identifierTable, mapping.identifier.value);
67
65
 
68
66
  const findReceipt = Effect.fn("DrizzlePgIdentity.findReceipt")(function* (requestId: string) {
69
67
  const rows = yield* db
@@ -151,21 +149,8 @@ export const makePgSubjectProvisioningServices = Effect.fnUntraced(function* <
151
149
  if (receipt !== undefined && receipt.fingerprint === fingerprint) {
152
150
  return Effect.succeed(receipt.subjectId as NativeId);
153
151
  }
154
- if (input.identifier === undefined) return IdentityConflict.make();
155
-
156
- return db
157
- .select({
158
- subjectId: column(identifierTable, mapping.identifier.subjectId) as PgColumn,
159
- })
160
- .from(identifierTable as any)
161
- .where(
162
- and(
163
- eq(identifierNamespaceColumn, input.identifier.namespace),
164
- eq(identifierValueColumn, input.identifier.value),
165
- ),
166
- )
167
- .limit(1)
168
- .pipe(Effect.flatMap(() => IdentityConflict.make()));
152
+
153
+ return IdentityConflict.make();
169
154
  }),
170
155
  );
171
156
  },
@@ -0,0 +1,142 @@
1
+ import type { LifecycleHooks } from "@yielded/auth/Hooks";
2
+ import {
3
+ PhonePersistence,
4
+ PhoneSignInTargets,
5
+ type PhoneConfigurationError,
6
+ type PhoneOtpUnavailable,
7
+ } from "@yielded/auth/PhoneOtp";
8
+ import type { Table } from "drizzle-orm";
9
+ import { type Context, Effect, type Crypto } from "effect";
10
+
11
+ import type { NativeDriverDatabase, NativeDriverTransaction } from "./driver-types";
12
+ import { NativeDatabase, nativeDatabase } from "./native-database";
13
+ import type { NativeTargetConfiguration } from "./native-target";
14
+ import type { AnyPhoneMapping, PhoneMapping } from "./phone-model";
15
+ import {
16
+ coordinateTargetPhonePersistence,
17
+ makeTargetPhonePersistenceServices,
18
+ } from "./phone-target";
19
+ import type { SuppliedService } from "./SuppliedService";
20
+
21
+ /** Physical driver selection; the phone workflow has one implementation.
22
+ * Erase only foreign table/ID callback variance at the validated mapping boundary;
23
+ * decoded phone and subject values still pass through their owning codecs. */
24
+ export const makePhoneTarget = <DatabaseId, D extends NativeDriverDatabase>(
25
+ databaseService: Context.Service<DatabaseId, D>,
26
+ configuration: NativeTargetConfiguration,
27
+ ) => {
28
+ function coordinatePhonePersistence<
29
+ Database extends D,
30
+ Subject extends Table,
31
+ Identifier extends Table,
32
+ Credential extends Table,
33
+ Proof extends Table,
34
+ NativeId,
35
+ A,
36
+ E,
37
+ R,
38
+ DE,
39
+ DR,
40
+ >(
41
+ acquire: Effect.Effect<Database, DE, DR>,
42
+ options: {
43
+ readonly mapping: PhoneMapping<Subject, Identifier, Credential, Proof, NativeId>;
44
+ readonly transaction?: never;
45
+ },
46
+ body: Effect.Effect<A, E, R>,
47
+ ): Effect.Effect<
48
+ A,
49
+ E | DE | PhoneOtpUnavailable | PhoneConfigurationError,
50
+ Exclude<R, PhonePersistence | PhoneSignInTargets> | DR | LifecycleHooks | Crypto.Crypto
51
+ >;
52
+ function coordinatePhonePersistence<
53
+ Database extends D,
54
+ Subject extends Table,
55
+ Identifier extends Table,
56
+ Credential extends Table,
57
+ Proof extends Table,
58
+ NativeId,
59
+ A,
60
+ E,
61
+ R,
62
+ DE,
63
+ DR,
64
+ TxId,
65
+ TxShape,
66
+ >(
67
+ acquire: Effect.Effect<Database, DE, DR>,
68
+ options: {
69
+ readonly mapping: PhoneMapping<Subject, Identifier, Credential, Proof, NativeId>;
70
+ readonly transaction: SuppliedService<
71
+ TxId,
72
+ NoInfer<NativeDriverTransaction<Database>>,
73
+ TxShape
74
+ >;
75
+ },
76
+ body: Effect.Effect<A, E, R>,
77
+ ): Effect.Effect<
78
+ A,
79
+ E | DE | PhoneOtpUnavailable | PhoneConfigurationError,
80
+ Exclude<R, PhonePersistence | PhoneSignInTargets | TxId> | DR | LifecycleHooks | Crypto.Crypto
81
+ >;
82
+ function coordinatePhonePersistence<
83
+ Database extends D,
84
+ Subject extends Table,
85
+ Identifier extends Table,
86
+ Credential extends Table,
87
+ Proof extends Table,
88
+ NativeId,
89
+ A,
90
+ E,
91
+ R,
92
+ DE,
93
+ DR,
94
+ TxId,
95
+ TxShape,
96
+ >(
97
+ acquire: Effect.Effect<Database, DE, DR>,
98
+ options: {
99
+ readonly mapping: PhoneMapping<Subject, Identifier, Credential, Proof, NativeId>;
100
+ readonly transaction?: SuppliedService<
101
+ TxId,
102
+ NoInfer<NativeDriverTransaction<Database>>,
103
+ TxShape
104
+ >;
105
+ },
106
+ body: Effect.Effect<A, E, R>,
107
+ ) {
108
+ return Effect.flatMap(nativeDatabase(acquire), (database) =>
109
+ coordinateTargetPhonePersistence(
110
+ database,
111
+ options.mapping as unknown as AnyPhoneMapping,
112
+ configuration,
113
+ (transaction: NativeDriverTransaction<Database>, services) => {
114
+ const work = body.pipe(
115
+ Effect.provideService(PhonePersistence, services.phonePersistence),
116
+ Effect.provideService(PhoneSignInTargets, services.phoneSignInTargets),
117
+ );
118
+
119
+ return options.transaction === undefined
120
+ ? work
121
+ : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
122
+ },
123
+ ),
124
+ );
125
+ }
126
+
127
+ return {
128
+ makePhonePersistenceServices: <
129
+ Subject extends Table,
130
+ Identifier extends Table,
131
+ Credential extends Table,
132
+ Proof extends Table,
133
+ NativeId,
134
+ >(
135
+ mapping: PhoneMapping<Subject, Identifier, Credential, Proof, NativeId>,
136
+ ) =>
137
+ makeTargetPhonePersistenceServices(mapping as unknown as AnyPhoneMapping, configuration).pipe(
138
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),
139
+ ),
140
+ coordinatePhonePersistence,
141
+ };
142
+ };