@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,178 +1,29 @@
1
- import { requiredProofConstraints } from "./proof-model.mjs";
1
+ import { NativeDatabase } from "./native-database.mjs";
2
+ import { coordinateNativeTarget, nativeTarget } from "./native-target.mjs";
2
3
  import { validateDrizzleStorage } from "./storage-validation.mjs";
3
- import { CurrentProofSql, completeProofPlanIn } from "./proof-sql.mjs";
4
- import { randomId } from "./crypto.mjs";
5
- import { phoneProofs, requiredPhoneConstraints } from "./phone-model.mjs";
6
- import { CurrentD1PlanningDatabase } from "./d1-planning.mjs";
7
- import { nativeDatabase } from "./native-database.mjs";
8
- import { coordinateTransactionOwner, makeTransactionExecution, sqlClientTransactionStandaloneGuard } from "./transaction-execution.mjs";
9
- import { compileD1ProofCompletionPlan } from "./d1-proofs.mjs";
10
- import { CurrentPhoneTransaction, admitPhone, capturePhone, cleanupPhoneAdmission, equal, invariant, lookupPhone, preparePhoneMutation, unavailable } from "./phone-state.mjs";
11
- import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
12
- import { sql } from "drizzle-orm";
13
- import { Context, Effect, Schema } from "effect";
14
- import { LifecycleHooks } from "@yielded/auth/Hooks";
15
- import { ProofBinding } from "@yielded/auth/Proofs";
16
- import { PhoneActionAuthorization, PhoneAdmission, PhoneAdmissionPolicy, PhoneConfigurationError, PhoneLifecyclePolicy, PhoneLifecycleTarget, PhonePersistence, PhoneSignInTargets } from "@yielded/auth/PhoneOtp";
4
+ import { nativeProofMapping } from "./proof-target.mjs";
5
+ import { makeNativePhoneServices } from "@yielded/auth-persistence/Adapter";
6
+ import { Effect, Schema } from "effect";
7
+ import { PhoneConfigurationError, PhoneLifecyclePolicy, PhoneOtpUnavailable } from "@yielded/auth/PhoneOtp";
17
8
  //#region src/drizzle/phone-target.ts
18
- const sqlClientPhoneStandaloneGuard = (service) => sqlClientTransactionStandaloneGuard(unavailable, service);
19
- const validateMapping = (original, configuration) => {
20
- const mapping = original;
21
- invariant(mapping.moduleId.length > 0);
22
- Schema.decodeSync(PhoneLifecyclePolicy)(mapping.policy);
23
- Schema.decodeSync(PhoneAdmissionPolicy)(mapping.admission);
24
- invariant(mapping.admission.requestRetentionMillis >= mapping.admission.windowMillis);
25
- const proofs = phoneProofs(mapping.proofs);
26
- invariant(proofs !== void 0);
27
- for (const [key, value] of Object.entries(requiredProofConstraints)) invariant(proofs.constraints?.[key] === value);
28
- if (configuration.mode === "synchronous") invariant(proofs.allocateVersionSync !== void 0);
29
- if (configuration.mode === "batch") invariant(proofs.d1 !== void 0 && proofs.authority.identifier.d1CurrentCondition !== void 0);
30
- for (const [key, value] of Object.entries(requiredPhoneConstraints)) invariant(mapping.constraints?.[key] === value);
31
- if (configuration.mode === "batch") invariant(mapping.d1?.primary === true);
32
- return Object.freeze({
33
- ...mapping,
34
- policy: Object.freeze({ ...mapping.policy }),
35
- subject: Object.freeze({ ...mapping.subject }),
36
- state: Object.freeze({ ...mapping.state }),
37
- identifier: Object.freeze({ ...mapping.identifier }),
38
- admission: Object.freeze({ ...mapping.admission }),
39
- credential: Object.freeze({ ...mapping.credential }),
40
- subjectIds: Object.freeze({ ...mapping.subjectIds })
41
- });
42
- };
43
- const services = Effect.fnUntraced(function* (mapping, execution, configuration) {
44
- const hooks = yield* LifecycleHooks;
45
- const run = (effect, mutation = true) => execution.admit.pipe(Effect.andThen(execution.run(effect, mutation)), Effect.provideService(LifecycleHooks, hooks));
46
- return {
47
- phoneAdmission: PhoneAdmission.of({
48
- admit: (input) => run(admitPhone(mapping, { ...input })),
49
- cleanup: (input) => run(cleanupPhoneAdmission(mapping, { ...input }))
50
- }),
51
- phoneSignInTargets: PhoneSignInTargets.of({ lookup: (input) => run(lookupPhone(mapping, { ...input }), false) }),
52
- phonePersistence: PhonePersistence.of({
53
- target: (input) => run(Effect.gen(function* () {
54
- invariant(input.moduleId === mapping.moduleId);
55
- return (yield* capturePhone(mapping, { ...input })).target;
56
- }), false),
57
- mutate: (original, prepare) => Effect.suspend(() => {
58
- const input = {
59
- ...original,
60
- target: Schema.decodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(Schema.encodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(original.target)),
61
- policy: { ...original.policy },
62
- ...original.authorization === void 0 ? {} : { authorization: Schema.decodeSync(Schema.toCodecIso(PhoneActionAuthorization))(Schema.encodeSync(Schema.toCodecIso(PhoneActionAuthorization))(original.authorization)) },
63
- completion: {
64
- input: {
65
- ...original.completion.input,
66
- binding: Schema.decodeSync(Schema.toCodecIso(ProofBinding))(Schema.encodeSync(Schema.toCodecIso(ProofBinding))(original.completion.input.binding))
67
- },
68
- prepare: original.completion.prepare
69
- }
70
- };
71
- return run(Effect.gen(function* () {
72
- const owner = yield* CurrentPhoneTransaction, candidate = yield* preparePhoneMutation(mapping, input);
73
- if (candidate.mutate === void 0) {
74
- const receipt = prepare(candidate.decision, owner.journal);
75
- owner.guards.push(receipt);
76
- return receipt;
77
- }
78
- const cn = phoneProofs(mapping.proofs).continuation;
79
- const observed = yield* owner.read(cn.table, equal(cn.table, {
80
- [cn.moduleId]: input.completion.input.moduleId,
81
- [cn.continuationId]: input.completion.input.continuationId
82
- }), { limit: 1 });
83
- let completed = false;
84
- const plan = {
85
- ...input.completion,
86
- prepare: (decision, journal) => {
87
- completed = decision === "completed";
88
- const proofReceipt = input.completion.prepare(decision, journal, () => void 0);
89
- owner.guards.push(proofReceipt);
90
- return prepare(decision === "completed" ? candidate.decision : { _tag: "Rejected" }, journal);
91
- }
92
- };
93
- let receipt;
94
- if (owner.batch) {
95
- const offset = owner.statements.length;
96
- yield* candidate.mutate;
97
- const statements = owner.statements.splice(offset);
98
- const compiled = yield* compileD1ProofCompletionPlan(phoneProofs(mapping.proofs), plan, {
99
- statements,
100
- appliedCondition: candidate.appliedCondition
101
- }, (x) => x).pipe(Effect.provideService(CurrentD1PlanningDatabase, owner.database));
102
- invariant(compiled.statements.length !== 0);
103
- owner.statements.push(...compiled.statements, ...compiled.postconditions ?? []);
104
- receipt = compiled.receipt;
105
- } else receipt = yield* completeProofPlanIn(phoneProofs(mapping.proofs), {
106
- mode: configuration.mode === "synchronous" ? "synchronous" : "interactive",
107
- locking: configuration.locking,
108
- standaloneGuard: Effect.void,
109
- coordinated: true,
110
- insertIfAbsent: (query, key, value) => configuration.dialect === "mysql" ? query.onDuplicateKeyUpdate({ set: { [key]: value } }) : query.onConflictDoNothing()
111
- }, plan, candidate.mutate, (x) => x).pipe(Effect.provideService(CurrentProofSql, owner.database));
112
- if (completed) {
113
- invariant(observed.rows.length === 1);
114
- const record = yield* cn.decode(observed.rows[0]);
115
- observed.rows = observed.rows.map((row) => ({
116
- ...row,
117
- [cn.consumed]: true
118
- }));
119
- const command = phoneProofs(mapping.proofs).command;
120
- owner.postconditions.push(sql`${mapping.engineNowMillis} < ${record.expiresAtMillis}`, sql`exists(select 1 from ${command.table} where ${equal(command.table, {
121
- [command.moduleId]: input.completion.input.moduleId,
122
- [command.commandId]: input.completion.input.continuationDigest,
123
- [command.kind]: "complete",
124
- [command.decision]: "completed",
125
- [command.retentionUntil]: phoneProofs(mapping.proofs).encodeInstant(record.expiresAtMillis)
126
- })})`);
127
- }
128
- invariant(receipt?._tag === "PreparedCommit");
129
- owner.guards.push(receipt);
130
- return receipt;
131
- }));
132
- }).pipe(Effect.catchDefect(() => Effect.fail(unavailable())))
133
- })
9
+ const unavailable = () => PhoneOtpUnavailable.make({});
10
+ const validate = Effect.fnUntraced(function* (source, configuration) {
11
+ yield* validateDrizzleStorage(source);
12
+ yield* validateDrizzleStorage(source.proofs);
13
+ yield* Schema.decodeEffect(PhoneLifecyclePolicy)(source.policy);
14
+ if (configuration.mode === "batch" && source.proofs.d1?.primary !== true) return yield* PhoneConfigurationError.make({});
15
+ }, Effect.mapError(() => PhoneConfigurationError.make({})));
16
+ const services = Effect.fnUntraced(function* (source, configuration) {
17
+ const target = yield* nativeTarget(configuration);
18
+ const mapping = {
19
+ ...source,
20
+ proofs: nativeProofMapping(source.proofs)
134
21
  };
22
+ return yield* target.provide(makeNativePhoneServices(target.tables, mapping));
135
23
  });
136
- const makeTargetPhonePersistence = (source, configuration) => Effect.gen(function* () {
137
- const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
138
- const mapping = yield* Effect.try({
139
- try: () => validateMapping(original, configuration),
140
- catch: () => PhoneConfigurationError.make({})
141
- });
142
- yield* validateDrizzleStorage({
143
- ...mapping,
144
- proofs: phoneProofs(mapping.proofs)
145
- }).pipe(Effect.mapError(() => PhoneConfigurationError.make({})));
146
- const execution = yield* makeTransactionExecution(CurrentPhoneTransaction, configuration, unavailable, randomId);
147
- return yield* services(mapping, execution, configuration);
148
- });
149
- const coordinateTargetPhone = (database, source, configuration, body) => Effect.gen(function* () {
150
- const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
151
- const mapping = yield* Effect.try({
152
- try: () => validateMapping(original, configuration),
153
- catch: () => PhoneConfigurationError.make({})
154
- });
155
- yield* validateDrizzleStorage({
156
- ...mapping,
157
- proofs: phoneProofs(mapping.proofs)
158
- }).pipe(Effect.mapError(() => PhoneConfigurationError.make({})));
159
- return yield* coordinateTransactionOwner(database, CurrentPhoneTransaction, configuration, Effect.void, unavailable, randomId, (execution) => services(mapping, execution, configuration), (transaction, acquireServices, append) => Effect.flatMap(acquireServices, (boundServices) => body(transaction, boundServices, append)));
160
- });
161
- /** Concrete driver wrappers select transaction mode. */
162
- const makePhoneTarget = (databaseService, configuration) => {
163
- function coordinatePhonePersistence(acquire, options, body) {
164
- return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateTargetPhone(database, options.mapping, configuration, (transaction, services) => {
165
- const provided = Context.make(PhonePersistence, services.phonePersistence).pipe(Context.add(PhoneAdmission, services.phoneAdmission), Context.add(PhoneSignInTargets, services.phoneSignInTargets));
166
- const work = Effect.provideContext(body, provided);
167
- return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
168
- }).pipe(Effect.provideService(NativeDatabase, database)));
169
- }
170
- return {
171
- makePhonePersistenceServices: (mapping) => makeTargetPhonePersistence(mapping, configuration).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
172
- coordinatePhonePersistence
173
- };
174
- };
24
+ const makeTargetPhonePersistenceServices = (source, configuration) => validate(source, configuration).pipe(Effect.andThen(services(source, configuration)));
25
+ const coordinateTargetPhonePersistence = (database, source, configuration, body) => validate(source, configuration).pipe(Effect.provideService(NativeDatabase, database), Effect.andThen(coordinateNativeTarget(unavailable, database, configuration, services(source, configuration), body)));
175
26
  //#endregion
176
- export { coordinateTargetPhone, makePhoneTarget, makeTargetPhonePersistence, sqlClientPhoneStandaloneGuard };
27
+ export { coordinateTargetPhonePersistence, makeTargetPhonePersistenceServices };
177
28
 
178
29
  //# sourceMappingURL=phone-target.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone-target.mjs","names":[],"sources":["../../src/drizzle/phone-target.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n PhoneConfigurationError,\n PhoneLifecyclePolicy,\n PhoneAdmissionPolicy,\n PhoneLifecycleTarget,\n PhoneActionAuthorization,\n PhoneAdmission,\n type PhoneMutation,\n PhonePersistence,\n PhoneSignInTargets,\n type PhoneOtpUnavailable as PhoneUnavailable,\n} from \"@yielded/auth/PhoneOtp\";\nimport { ProofBinding } from \"@yielded/auth/Proofs\";\nimport { sql, type Table } from \"drizzle-orm\";\n/* oxlint-disable no-explicit-any -- shared native implementation; driver entrypoints retain exact database and table types. */\nimport { type Crypto, Context, Effect, Schema } from \"effect\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport { randomId } from \"./crypto\";\nimport { CurrentD1PlanningDatabase } from \"./d1-planning\";\nimport { compileD1ProofCompletionPlan } from \"./d1-proofs\";\nimport type { PersistenceMappingError } from \"./model\";\nimport { nativeDatabase } from \"./native-database\";\nimport {\n phoneProofs,\n type PhoneMapping,\n type PhoneMappingSource,\n type PhonePersistenceServices,\n type PhoneProofCompletionMapping,\n requiredPhoneConstraints,\n} from \"./phone-model\";\nimport {\n capturePhone,\n lookupPhone,\n admitPhone,\n cleanupPhoneAdmission,\n CurrentPhoneTransaction,\n invariant,\n equal,\n preparePhoneMutation,\n unavailable,\n} from \"./phone-state\";\nimport { requiredProofConstraints } from \"./proof-model\";\nimport { completeProofPlanIn, CurrentProofSql } from \"./proof-sql\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport type { SuppliedService } from \"./SuppliedService\";\nimport {\n coordinateTransactionOwner,\n makeTransactionExecution,\n sqlClientTransactionStandaloneGuard,\n type TransactionExecution,\n type TransactionTargetConfiguration,\n type TransactionCoordinatorError,\n} from \"./transaction-execution\";\nimport type { TransactionNativeDatabase } from \"./transaction-owner\";\nexport type PhoneTargetConfiguration = TransactionTargetConfiguration<PhoneUnavailable>;\n\nexport type PhoneCoordinatorError<E> =\n | TransactionCoordinatorError<E, PhoneUnavailable>\n | PhoneConfigurationError\n | PersistenceMappingError;\n\nexport const sqlClientPhoneStandaloneGuard = (\n service: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, service);\n\nconst validateMapping = <M>(original: M, configuration: PhoneTargetConfiguration): M => {\n const mapping = original as any;\n\n invariant(mapping.moduleId.length > 0);\n Schema.decodeSync(PhoneLifecyclePolicy)(mapping.policy);\n Schema.decodeSync(PhoneAdmissionPolicy)(mapping.admission);\n invariant(mapping.admission.requestRetentionMillis >= mapping.admission.windowMillis);\n const proofs = phoneProofs(mapping.proofs);\n\n invariant(proofs !== undefined);\n for (const [key, value] of Object.entries(requiredProofConstraints))\n invariant((proofs.constraints as any)?.[key] === value);\n if (configuration.mode === \"synchronous\") invariant(proofs.allocateVersionSync !== undefined);\n if (configuration.mode === \"batch\")\n invariant(\n proofs.d1 !== undefined && proofs.authority.identifier.d1CurrentCondition !== undefined,\n );\n for (const [key, value] of Object.entries(requiredPhoneConstraints))\n invariant(mapping.constraints?.[key] === value);\n if (configuration.mode === \"batch\") invariant(mapping.d1?.primary === true);\n\n return Object.freeze({\n ...mapping,\n policy: Object.freeze({ ...mapping.policy }),\n subject: Object.freeze({ ...mapping.subject }),\n state: Object.freeze({ ...mapping.state }),\n identifier: Object.freeze({ ...mapping.identifier }),\n admission: Object.freeze({ ...mapping.admission }),\n credential: Object.freeze({ ...mapping.credential }),\n subjectIds: Object.freeze({ ...mapping.subjectIds }),\n });\n};\n\nconst services = Effect.fnUntraced(function* (\n mapping: any,\n execution: TransactionExecution<PhoneUnavailable, CurrentPhoneTransaction>,\n configuration: PhoneTargetConfiguration,\n): Effect.fn.Return<PhonePersistenceServices, never, LifecycleHooks> {\n const hooks = yield* LifecycleHooks;\n\n const run = <A, E, R>(effect: Effect.Effect<A, E, R>, mutation = true) =>\n execution.admit.pipe(\n Effect.andThen(execution.run(effect, mutation)),\n Effect.provideService(LifecycleHooks, hooks),\n );\n\n return {\n phoneAdmission: PhoneAdmission.of({\n admit: (input) => run(admitPhone(mapping, { ...input })),\n cleanup: (input) => run(cleanupPhoneAdmission(mapping, { ...input })),\n }),\n phoneSignInTargets: PhoneSignInTargets.of({\n lookup: (input) => run(lookupPhone(mapping, { ...input }), false),\n }),\n phonePersistence: PhonePersistence.of({\n target: (input) =>\n run(\n Effect.gen(function* () {\n invariant(input.moduleId === mapping.moduleId);\n\n return (yield* capturePhone(mapping, { ...input })).target;\n }),\n false,\n ),\n mutate: (original, prepare) =>\n Effect.suspend(() => {\n const input: PhoneMutation = {\n ...original,\n target: Schema.decodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(\n Schema.encodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(original.target),\n ),\n policy: { ...original.policy },\n ...(original.authorization === undefined\n ? {}\n : {\n authorization: Schema.decodeSync(Schema.toCodecIso(PhoneActionAuthorization))(\n Schema.encodeSync(Schema.toCodecIso(PhoneActionAuthorization))(\n original.authorization,\n ),\n ),\n }),\n completion: {\n input: {\n ...original.completion.input,\n binding: Schema.decodeSync(Schema.toCodecIso(ProofBinding))(\n Schema.encodeSync(Schema.toCodecIso(ProofBinding))(\n original.completion.input.binding,\n ),\n ),\n },\n prepare: original.completion.prepare,\n },\n };\n\n return run(\n Effect.gen(function* () {\n const owner = yield* CurrentPhoneTransaction,\n candidate = yield* preparePhoneMutation(mapping, input);\n\n if (candidate.mutate === undefined) {\n const receipt = prepare(candidate.decision, owner.journal);\n\n owner.guards.push(receipt as any);\n\n return receipt;\n }\n const cn = phoneProofs(mapping.proofs).continuation;\n\n const observed = yield* owner.read(\n cn.table,\n equal(cn.table, {\n [cn.moduleId]: input.completion.input.moduleId,\n [cn.continuationId]: input.completion.input.continuationId,\n }),\n { limit: 1 },\n );\n\n let completed = false;\n\n const plan = {\n ...input.completion,\n prepare: (decision: any, journal: any) => {\n completed = decision === \"completed\";\n const proofReceipt = input.completion.prepare(decision, journal, () => undefined);\n\n owner.guards.push(proofReceipt);\n\n return prepare(\n decision === \"completed\" ? candidate.decision : { _tag: \"Rejected\" },\n journal,\n );\n },\n };\n\n let receipt;\n\n if (owner.batch) {\n const offset = owner.statements.length;\n\n yield* candidate.mutate;\n const statements = owner.statements.splice(offset);\n\n const compiled = yield* compileD1ProofCompletionPlan(\n phoneProofs(mapping.proofs) as any,\n plan as any,\n { statements, appliedCondition: candidate.appliedCondition! },\n (x) => x,\n ).pipe(Effect.provideService(CurrentD1PlanningDatabase, owner.database));\n\n // Mutation observations describe an accepted plan. A stale proof aborts this owner.\n invariant(compiled.statements.length !== 0);\n owner.statements.push(...compiled.statements, ...(compiled.postconditions ?? []));\n receipt = compiled.receipt;\n } else {\n receipt = yield* completeProofPlanIn(\n phoneProofs(mapping.proofs),\n {\n mode: configuration.mode === \"synchronous\" ? \"synchronous\" : \"interactive\",\n locking: configuration.locking,\n standaloneGuard: Effect.void,\n coordinated: true,\n insertIfAbsent: (query: any, key, value) =>\n configuration.dialect === \"mysql\"\n ? query.onDuplicateKeyUpdate({ set: { [key]: value } })\n : query.onConflictDoNothing(),\n },\n plan as any,\n candidate.mutate,\n (x) => x,\n ).pipe(Effect.provideService(CurrentProofSql, owner.database));\n }\n if (completed) {\n invariant(observed.rows.length === 1);\n const record = yield* cn.decode(observed.rows[0]!);\n\n observed.rows = observed.rows.map((row) => ({ ...row, [cn.consumed]: true }));\n const command = phoneProofs(mapping.proofs).command;\n\n owner.postconditions.push(\n sql`${mapping.engineNowMillis} < ${record.expiresAtMillis}`,\n sql`exists(select 1 from ${command.table} where ${equal(command.table, { [command.moduleId]: input.completion.input.moduleId, [command.commandId]: input.completion.input.continuationDigest, [command.kind]: \"complete\", [command.decision]: \"completed\", [command.retentionUntil]: phoneProofs(mapping.proofs).encodeInstant(record.expiresAtMillis) })})`,\n );\n }\n invariant(receipt?._tag === \"PreparedCommit\");\n owner.guards.push(receipt as any);\n\n return receipt as ReturnType<typeof prepare>;\n }),\n );\n }).pipe(Effect.catchDefect(() => Effect.fail(unavailable()))),\n }),\n };\n});\n\nexport const makeTargetPhonePersistence = <\n S extends Table,\n I extends Table,\n F extends Table,\n C extends Table,\n N,\n RSetup = never,\n>(\n source: PhoneMappingSource<PhoneMapping<S, I, C, F, N>, RSetup>,\n configuration: PhoneTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => PhoneConfigurationError.make({}),\n });\n\n yield* validateDrizzleStorage({\n ...mapping,\n proofs: phoneProofs(mapping.proofs),\n }).pipe(Effect.mapError(() => PhoneConfigurationError.make({})));\n\n const execution = yield* makeTransactionExecution(\n CurrentPhoneTransaction,\n configuration,\n unavailable,\n randomId,\n );\n\n return yield* services(mapping, execution, configuration);\n });\n\nexport const coordinateTargetPhone = <\n M extends { readonly proofs: PhoneProofCompletionMapping },\n A,\n E,\n R,\n RSetup = never,\n>(\n database: TransactionNativeDatabase,\n source: PhoneMappingSource<M, RSetup>,\n configuration: PhoneTargetConfiguration,\n body: (\n transaction: any,\n services: PhonePersistenceServices,\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<\n A,\n PhoneCoordinatorError<E>,\n R | RSetup | Crypto.Crypto | LifecycleHooks | NativeDatabase\n> =>\n Effect.gen(function* () {\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => PhoneConfigurationError.make({}),\n });\n\n yield* validateDrizzleStorage({\n ...mapping,\n proofs: phoneProofs(mapping.proofs),\n }).pipe(Effect.mapError(() => PhoneConfigurationError.make({})));\n\n return yield* coordinateTransactionOwner(\n database,\n CurrentPhoneTransaction,\n configuration,\n Effect.void,\n unavailable,\n randomId,\n (execution) => services(mapping, execution, configuration),\n (transaction, acquireServices, append) =>\n Effect.flatMap(acquireServices, (boundServices) =>\n body(transaction, boundServices, append),\n ),\n );\n });\n\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\n/** Concrete driver wrappers select transaction mode. */\nexport const makePhoneTarget = <\n DatabaseId,\n D extends { readonly transaction: any },\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: PhoneTargetConfiguration,\n) => {\n function coordinatePhonePersistence<\n Database extends D,\n S extends T,\n I extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PhoneMappingSource<PhoneMapping<S, I, C, F, N> & Extra, RSetup>;\n readonly transaction?: never;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PhonePersistence | PhoneAdmission | PhoneSignInTargets> : R\n >,\n ): Effect.Effect<\n A,\n PhoneCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PhonePersistence | PhoneAdmission | PhoneSignInTargets>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePhonePersistence<\n Database extends D,\n S extends T,\n I extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PhoneMappingSource<PhoneMapping<S, I, C, F, N> & Extra, RSetup>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true\n ? NoInfer<PhonePersistence | PhoneAdmission | PhoneSignInTargets | TxId>\n : R\n >,\n ): Effect.Effect<\n A,\n PhoneCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PhonePersistence | PhoneAdmission | PhoneSignInTargets | TxId>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePhonePersistence<\n Database extends D,\n S extends T,\n I extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PhoneMappingSource<PhoneMapping<S, I, C, F, N> & Extra, RSetup>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PhoneCoordinatorError<E> | DatabaseError,\n | Exclude<R, PhonePersistence | PhoneAdmission | PhoneSignInTargets>\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPhone(\n database as any,\n options.mapping,\n configuration,\n (\n transaction: TransactionOf<Database>,\n services,\n ): Effect.Effect<\n A,\n E,\n Exclude<R, PhonePersistence | PhoneAdmission | PhoneSignInTargets>\n > => {\n const provided = Context.make(PhonePersistence, services.phonePersistence).pipe(\n Context.add(PhoneAdmission, services.phoneAdmission),\n Context.add(PhoneSignInTargets, services.phoneSignInTargets),\n );\n\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\n return {\n makePhonePersistenceServices: <\n S extends T,\n I extends T,\n F extends T,\n C extends T,\n N,\n RSetup = never,\n >(\n mapping: PhoneMappingSource<PhoneMapping<S, I, C, F, N> & Extra, RSetup>,\n ) =>\n makeTargetPhonePersistence(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n coordinatePhonePersistence,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"phone-target.mjs","names":[],"sources":["../../src/drizzle/phone-target.ts"],"sourcesContent":["import {\n makeNativePhoneServices,\n type AnyPhoneMapping as SharedMapping,\n} from \"@yielded/auth-persistence/Adapter\";\nimport {\n PhoneOtpUnavailable,\n PhoneLifecyclePolicy,\n PhoneConfigurationError,\n} from \"@yielded/auth/PhoneOtp\";\nimport { Effect, Schema } from \"effect\";\n\nimport { NativeDatabase, type NativeDatabaseHandle } from \"./native-database\";\nimport {\n coordinateNativeTarget,\n nativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport { type AnyPhoneMapping, type PhonePersistenceServices } from \"./phone-model\";\nimport { nativeProofMapping } from \"./proof-target\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nconst unavailable = () => PhoneOtpUnavailable.make({});\n\nconst validate = Effect.fnUntraced(\n function* (source: AnyPhoneMapping, configuration: NativeTargetConfiguration) {\n yield* validateDrizzleStorage(source);\n yield* validateDrizzleStorage(source.proofs);\n yield* Schema.decodeEffect(PhoneLifecyclePolicy)(source.policy);\n if (configuration.mode === \"batch\" && source.proofs.d1?.primary !== true)\n return yield* PhoneConfigurationError.make({});\n },\n Effect.mapError(() => PhoneConfigurationError.make({})),\n);\n\nconst services = Effect.fnUntraced(function* (\n source: AnyPhoneMapping,\n configuration: NativeTargetConfiguration,\n) {\n const target = yield* nativeTarget(configuration);\n const mapping: SharedMapping = { ...source, proofs: nativeProofMapping(source.proofs) };\n\n return yield* target.provide(makeNativePhoneServices(target.tables, mapping));\n});\n\nexport const makeTargetPhonePersistenceServices = (\n source: AnyPhoneMapping,\n configuration: NativeTargetConfiguration,\n) => validate(source, configuration).pipe(Effect.andThen(services(source, configuration)));\n\nexport const coordinateTargetPhonePersistence = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n source: AnyPhoneMapping,\n configuration: NativeTargetConfiguration,\n body: (transaction: Transaction, services: PhonePersistenceServices) => Effect.Effect<A, E, R>,\n) =>\n validate(source, configuration).pipe(\n Effect.provideService(NativeDatabase, database),\n Effect.andThen(\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n services(source, configuration),\n body,\n ),\n ),\n );\n"],"mappings":";;;;;;;;AAqBA,MAAM,oBAAoB,oBAAoB,KAAK,CAAC,CAAC;AAErD,MAAM,WAAW,OAAO,WACtB,WAAW,QAAyB,eAA0C;CAC5E,OAAO,uBAAuB,MAAM;CACpC,OAAO,uBAAuB,OAAO,MAAM;CAC3C,OAAO,OAAO,aAAa,oBAAoB,CAAC,CAAC,OAAO,MAAM;CAC9D,IAAI,cAAc,SAAS,WAAW,OAAO,OAAO,IAAI,YAAY,MAClE,OAAO,OAAO,wBAAwB,KAAK,CAAC,CAAC;AACjD,GACA,OAAO,eAAe,wBAAwB,KAAK,CAAC,CAAC,CAAC,CACxD;AAEA,MAAM,WAAW,OAAO,WAAW,WACjC,QACA,eACA;CACA,MAAM,SAAS,OAAO,aAAa,aAAa;CAChD,MAAM,UAAyB;EAAE,GAAG;EAAQ,QAAQ,mBAAmB,OAAO,MAAM;CAAE;CAEtF,OAAO,OAAO,OAAO,QAAQ,wBAAwB,OAAO,QAAQ,OAAO,CAAC;AAC9E,CAAC;AAED,MAAa,sCACX,QACA,kBACG,SAAS,QAAQ,aAAa,CAAC,CAAC,KAAK,OAAO,QAAQ,SAAS,QAAQ,aAAa,CAAC,CAAC;AAEzF,MAAa,oCACX,UACA,QACA,eACA,SAEA,SAAS,QAAQ,aAAa,CAAC,CAAC,KAC9B,OAAO,eAAe,gBAAgB,QAAQ,GAC9C,OAAO,QACL,uBACE,aACA,UACA,eACA,SAAS,QAAQ,aAAa,GAC9B,IACF,CACF,CACF"}
@@ -0,0 +1,24 @@
1
+ import { NativeDatabase, nativeDatabase } from "./native-database.mjs";
2
+ import { coordinateTargetProofPersistence, makeTargetProofPersistenceServices } from "./proof-target.mjs";
3
+ import { Effect } from "effect";
4
+ import { ProofPersistence } from "@yielded/auth/Proofs";
5
+ //#region src/drizzle/proof-drivers.ts
6
+ /** Physical driver selection; the proof workflow has one implementation.
7
+ * Erase only foreign table/ID callback variance at the validated mapping boundary;
8
+ * decoded proof and subject values still pass through their owning codecs. */
9
+ const makeProofTarget = (databaseService, configuration) => {
10
+ function coordinateProofPersistence(acquire, options, body) {
11
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateTargetProofPersistence(database, options.mapping, configuration, (transaction, services) => {
12
+ const work = Effect.provideService(body, ProofPersistence, services.proofPersistence);
13
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
14
+ }));
15
+ }
16
+ return {
17
+ makeProofPersistenceServices: (mapping) => makeTargetProofPersistenceServices(mapping, configuration).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
18
+ coordinateProofPersistence
19
+ };
20
+ };
21
+ //#endregion
22
+ export { makeProofTarget };
23
+
24
+ //# sourceMappingURL=proof-drivers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-drivers.mjs","names":[],"sources":["../../src/drizzle/proof-drivers.ts"],"sourcesContent":["import type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { ProofPersistence, type ProofUnavailable } from \"@yielded/auth/Proofs\";\nimport type { Table } from \"drizzle-orm\";\nimport { type Context, Effect, type Crypto } from \"effect\";\n\nimport type { NativeDriverDatabase, NativeDriverTransaction } from \"./driver-types\";\nimport { NativeDatabase, nativeDatabase } from \"./native-database\";\nimport type { NativeTargetConfiguration } from \"./native-target\";\nimport type { AnyProofPersistenceMapping, ProofPersistenceMapping } from \"./proof-model\";\nimport {\n coordinateTargetProofPersistence,\n makeTargetProofPersistenceServices,\n} from \"./proof-target\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\n/** Physical driver selection; the proof workflow has one implementation.\n * Erase only foreign table/ID callback variance at the validated mapping boundary;\n * decoded proof and subject values still pass through their owning codecs. */\nexport const makeProofTarget = <DatabaseId, D extends NativeDriverDatabase>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: NativeTargetConfiguration,\n) => {\n function coordinateProofPersistence<\n Database extends D,\n Proof extends Table,\n Subject extends Table,\n NativeId,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<Database, DE, DR>,\n options: {\n readonly mapping: ProofPersistenceMapping<Proof, Subject, NativeId>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | ProofUnavailable,\n Exclude<R, ProofPersistence> | DR | LifecycleHooks | Crypto.Crypto\n >;\n function coordinateProofPersistence<\n Database extends D,\n Proof extends Table,\n Subject extends Table,\n NativeId,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DE, DR>,\n options: {\n readonly mapping: ProofPersistenceMapping<Proof, Subject, NativeId>;\n readonly transaction: SuppliedService<\n TxId,\n NoInfer<NativeDriverTransaction<Database>>,\n TxShape\n >;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | ProofUnavailable,\n Exclude<R, ProofPersistence | TxId> | DR | LifecycleHooks | Crypto.Crypto\n >;\n function coordinateProofPersistence<\n Database extends D,\n Proof extends Table,\n Subject extends Table,\n NativeId,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DE, DR>,\n options: {\n readonly mapping: ProofPersistenceMapping<Proof, Subject, NativeId>;\n readonly transaction?: SuppliedService<\n TxId,\n NoInfer<NativeDriverTransaction<Database>>,\n TxShape\n >;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetProofPersistence(\n database,\n options.mapping as unknown as AnyProofPersistenceMapping,\n configuration,\n (transaction: NativeDriverTransaction<Database>, services) => {\n const work = Effect.provideService(body, ProofPersistence, services.proofPersistence);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n makeProofPersistenceServices: <Proof extends Table, Subject extends Table, NativeId>(\n mapping: ProofPersistenceMapping<Proof, Subject, NativeId>,\n ) =>\n makeTargetProofPersistenceServices(\n mapping as unknown as AnyProofPersistenceMapping,\n configuration,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateProofPersistence,\n };\n};\n"],"mappings":";;;;;;;;AAkBA,MAAa,mBACX,iBACA,kBACG;CAmDH,SAAS,2BAaP,SACA,SAQA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,iCACE,UACA,QAAQ,SACR,gBACC,aAAgD,aAAa;GAC5D,MAAM,OAAO,OAAO,eAAe,MAAM,kBAAkB,SAAS,gBAAgB;GAEpF,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,OAAO;EACL,+BACE,YAEA,mCACE,SACA,aACF,CAAC,CAAC,KAAK,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAAC;EACrF;CACF;AACF"}
@@ -1,21 +1,13 @@
1
+ import { ClockMapping, MappedClock } from "./native-clock.mjs";
1
2
  import { DrizzleTableModel } from "./table-model.mjs";
2
3
  import * as Shared from "@yielded/auth-persistence/Adapter";
3
- import { ProofAction, ProofAuthorityInput, ProofCommandDecision, ProofCommandKind, ProofConstraintClassifier, ProofContinuationRecord, ProofDeliveryState, ProofGenerationState, ProofScopeKeys, ProofScopeKind, RequiredProofConstraints, requiredProofConstraints } from "@yielded/auth-persistence/Adapter";
4
+ import { RequiredProofConstraints, requiredProofConstraints } from "@yielded/auth-persistence/Adapter";
4
5
  import { SQL, Table } from "drizzle-orm";
5
6
  //#region src/drizzle/proof-model.d.ts
6
- export type ProofAuthorityTables<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> = Shared.ProofAuthorityTables<DrizzleTableModel<Subject>, DrizzleTableModel<Identifier>, DrizzleTableModel<Credential>, NativeSubjectId, SQL>;
7
- export type ProofRequestTable<Request extends Table> = Shared.ProofRequestTable<DrizzleTableModel<Request>>;
8
- export type ProofSeriesTable<Series extends Table> = Shared.ProofSeriesTable<DrizzleTableModel<Series>>;
9
- export type ProofGenerationTable<Generation extends Table> = Shared.ProofGenerationTable<DrizzleTableModel<Generation>>;
10
- export type ProofContinuationTable<Continuation extends Table> = Shared.ProofContinuationTable<DrizzleTableModel<Continuation>>;
11
- export type ProofRateScopeTable<RateScope extends Table> = Shared.ProofRateScopeTable<DrizzleTableModel<RateScope>>;
12
- export type ProofAbuseEventTable<AbuseEvent extends Table> = Shared.ProofAbuseEventTable<DrizzleTableModel<AbuseEvent>>;
13
- export type ProofFailureEventTable<FailureEvent extends Table> = Shared.ProofFailureEventTable<DrizzleTableModel<FailureEvent>>;
14
- export type ProofCommandTable<Command extends Table> = Shared.ProofCommandTable<DrizzleTableModel<Command>>;
15
- export type ProofD1Clock = Shared.ProofD1Clock<SQL>;
16
- export type ProofPersistenceMapping<Request extends Table, Series extends Table, Generation extends Table, Continuation extends Table, RateScope extends Table, AbuseEvent extends Table, FailureEvent extends Table, Command extends Table, Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> = Shared.ProofPersistenceMapping<DrizzleTableModel<Request>, DrizzleTableModel<Series>, DrizzleTableModel<Generation>, DrizzleTableModel<Continuation>, DrizzleTableModel<RateScope>, DrizzleTableModel<AbuseEvent>, DrizzleTableModel<FailureEvent>, DrizzleTableModel<Command>, DrizzleTableModel<Subject>, DrizzleTableModel<Identifier>, DrizzleTableModel<Credential>, NativeSubjectId, SQL>;
17
- export type D1ProofPersistenceMapping<Request extends Table, Series extends Table, Generation extends Table, Continuation extends Table, RateScope extends Table, AbuseEvent extends Table, FailureEvent extends Table, Command extends Table, Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> = Shared.D1ProofPersistenceMapping<DrizzleTableModel<Request>, DrizzleTableModel<Series>, DrizzleTableModel<Generation>, DrizzleTableModel<Continuation>, DrizzleTableModel<RateScope>, DrizzleTableModel<AbuseEvent>, DrizzleTableModel<FailureEvent>, DrizzleTableModel<Command>, DrizzleTableModel<Subject>, DrizzleTableModel<Identifier>, DrizzleTableModel<Credential>, NativeSubjectId, SQL>;
18
- export type AnyProofPersistenceMapping = ProofPersistenceMapping<Table, Table, Table, Table, Table, Table, Table, Table, Table, Table, Table, unknown>;
7
+ export type ProofTable<Proof extends Table> = Shared.ProofTable<DrizzleTableModel<Proof>>;
8
+ type ProofClock$1 = MappedClock;
9
+ export type ProofPersistenceMapping<Proof extends Table, Subject extends Table, NativeSubjectId> = ClockMapping<Shared.ProofPersistenceMapping<DrizzleTableModel<Proof>, DrizzleTableModel<Subject>, NativeSubjectId, SQL>>;
10
+ export type AnyProofPersistenceMapping = ProofPersistenceMapping<Table, Table, unknown>;
19
11
  //#endregion
20
- export { type ProofAction, type ProofAuthorityInput, type ProofCommandDecision, type ProofCommandKind, type ProofConstraintClassifier, type ProofContinuationRecord, type ProofDeliveryState, type ProofGenerationState, type ProofScopeKeys, type ProofScopeKind, type RequiredProofConstraints, requiredProofConstraints };
12
+ export { ProofClock$1 as ProofClock, type RequiredProofConstraints, requiredProofConstraints };
21
13
  //# sourceMappingURL=proof-model.d.mts.map
@@ -1,10 +1,10 @@
1
- import "./standalone-guard.mjs";
2
- import "./proof-sql.mjs";
3
- import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
1
+ import "./proof-model.mjs";
2
+ import "./native-database.mjs";
3
+ import "./D1BatchStatements.mjs";
4
+ import "./native-target.mjs";
5
+ import { requireStandalone } from "@yielded/auth-persistence/Adapter";
4
6
  import { Effect, Layer } from "effect";
5
- import { HookConfigurationError, LifecycleHooks } from "@yielded/auth/Hooks";
6
7
  import { ProofPersistence, ProofUnavailable } from "@yielded/auth/Proofs";
7
- import "effect/sql/SqlError";
8
8
  //#region src/drizzle/proof-target.d.ts
9
9
  export declare const proofPersistenceLayer: <E, R>(services: Effect.Effect<{
10
10
  readonly proofPersistence: ProofPersistence["Service"];
@@ -1,38 +1,24 @@
1
+ import { nativeClock } from "./native-clock.mjs";
2
+ import { coordinateNativeTarget, nativeTarget } from "./native-target.mjs";
1
3
  import { validateDrizzleStorage } from "./storage-validation.mjs";
2
- import { sqlClientStandaloneGuard } from "./standalone-guard.mjs";
3
- import { CurrentProofSql, makeSqlProofPersistence } from "./proof-sql.mjs";
4
+ import { makeNativeProofServices } from "@yielded/auth-persistence/Adapter";
4
5
  import { Effect, Layer } from "effect";
5
- import { LifecycleHooks, coordinateCommit, hasCommitScope } from "@yielded/auth/Hooks";
6
6
  import { ProofPersistence, ProofUnavailable } from "@yielded/auth/Proofs";
7
7
  //#region src/drizzle/proof-target.ts
8
- const sqlClientProofStandaloneGuard = (service) => sqlClientStandaloneGuard(service, () => ProofUnavailable.make({}));
9
- const options = (configuration, coordinated = false) => ({
10
- mode: configuration.mode,
11
- locking: configuration.locking,
12
- standaloneGuard: !coordinated ? configuration.standaloneGuard : Effect.void,
13
- insertIfAbsent: configuration.insertIfAbsent,
14
- coordinated
8
+ const unavailable = () => ProofUnavailable.make({});
9
+ const nativeProofMapping = (value) => ({
10
+ ...value,
11
+ clock: nativeClock(value.clock)
15
12
  });
16
- const makeTargetProofPersistenceServices = (mapping, configuration) => Effect.gen(function* () {
17
- return { proofPersistence: yield* makeSqlProofPersistence(mapping, options(configuration)) };
18
- });
19
- /**
20
- * The native transaction is the root commit owner. Interruption or owner failure
21
- * rolls it back and discards the journal. No owner effect is retried. Native
22
- * transaction-acquisition `SqlError`s are exposed; caller errors, including
23
- * Drizzle query wrappers, propagate unchanged.
24
- */
25
- const coordinateTargetProofPersistence = (database, mapping, configuration, owner) => Effect.gen(function* () {
26
- const hooks = yield* LifecycleHooks;
27
- if (yield* hasCommitScope) return yield* ProofUnavailable.make({});
28
- yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;
29
- yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(() => ProofUnavailable.make({})));
30
- return (yield* coordinateCommit(() => database.transaction((transaction) => Effect.gen(function* () {
31
- return yield* owner(transaction, { proofPersistence: yield* makeSqlProofPersistence(mapping, options(configuration, true)).pipe(Effect.provideService(CurrentProofSql, transaction)) });
32
- })), { mode: configuration.mode }).pipe(Effect.provideService(LifecycleHooks, hooks))).value;
13
+ const makeTargetProofPersistenceServices = Effect.fnUntraced(function* (source, configuration) {
14
+ yield* validateDrizzleStorage(source).pipe(Effect.mapError(unavailable));
15
+ if (configuration.mode === "batch" && source.d1?.primary !== true) return yield* unavailable();
16
+ const target = yield* nativeTarget(configuration);
17
+ return yield* target.provide(makeNativeProofServices(target.tables, nativeProofMapping(source)));
33
18
  });
19
+ const coordinateTargetProofPersistence = (database, source, configuration, body) => coordinateNativeTarget(unavailable, database, configuration, makeTargetProofPersistenceServices(source, configuration), body);
34
20
  const proofPersistenceLayer = (services) => Layer.effect(ProofPersistence, Effect.map(services, (value) => value.proofPersistence));
35
21
  //#endregion
36
- export { coordinateTargetProofPersistence, makeTargetProofPersistenceServices, proofPersistenceLayer, sqlClientProofStandaloneGuard };
22
+ export { coordinateTargetProofPersistence, makeTargetProofPersistenceServices, nativeProofMapping, proofPersistenceLayer };
37
23
 
38
24
  //# sourceMappingURL=proof-target.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"proof-target.mjs","names":[],"sources":["../../src/drizzle/proof-target.ts"],"sourcesContent":["import type { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport {\n coordinateCommit,\n hasCommitScope,\n LifecycleHooks,\n type HookConfigurationError,\n} from \"@yielded/auth/Hooks\";\nimport { ProofUnavailable, ProofPersistence } from \"@yielded/auth/Proofs\";\n/* oxlint-disable no-explicit-any -- public driver entrypoints restore concrete Drizzle types. */\nimport { Effect, Layer } from \"effect\";\nimport type * as SqlError from \"effect/sql/SqlError\";\n\nimport {\n CurrentProofSql,\n makeSqlProofPersistence,\n type ProofSqlConfiguration,\n type ProofSqlDatabase,\n type ProofSqlQuery,\n} from \"./proof-sql\";\nimport { sqlClientStandaloneGuard, type TransactionService } from \"./standalone-guard\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nexport interface ProofTargetConfiguration {\n readonly mode: \"interactive\" | \"synchronous\";\n readonly locking: boolean;\n readonly standaloneGuard: Effect.Effect<void, ProofUnavailable>;\n readonly coordinatorGuard?: Effect.Effect<void, ProofUnavailable>;\n readonly insertIfAbsent: (\n query: ProofSqlQuery,\n selfKey: string,\n selfValue: unknown,\n ) => ProofSqlQuery;\n}\n\ninterface TransactionOwner<Transaction> {\n readonly transaction: <A, E, R>(\n body: (transaction: Transaction) => Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E | SqlError.SqlError, R>;\n}\n\nexport type ProofCoordinatorError<E> =\n | E\n | ProofUnavailable\n | HookConfigurationError\n | SqlError.SqlError;\n\nexport const sqlClientProofStandaloneGuard = (\n service: TransactionService | undefined,\n): Effect.Effect<void, ProofUnavailable> =>\n sqlClientStandaloneGuard(service, () => ProofUnavailable.make({}));\n\nconst options = (\n configuration: ProofTargetConfiguration,\n coordinated = false,\n): ProofSqlConfiguration => ({\n mode: configuration.mode,\n locking: configuration.locking,\n\n standaloneGuard: !coordinated ? configuration.standaloneGuard : Effect.void,\n insertIfAbsent: configuration.insertIfAbsent,\n coordinated,\n});\n\nexport const makeTargetProofPersistenceServices = (\n mapping: any,\n configuration: ProofTargetConfiguration,\n) =>\n Effect.gen(function* () {\n return {\n proofPersistence: yield* makeSqlProofPersistence(mapping, options(configuration)),\n };\n });\n\n/**\n * The native transaction is the root commit owner. Interruption or owner failure\n * rolls it back and discards the journal. No owner effect is retried. Native\n * transaction-acquisition `SqlError`s are exposed; caller errors, including\n * Drizzle query wrappers, propagate unchanged.\n */\nexport const coordinateTargetProofPersistence = <Transaction, A, E, R>(\n database: TransactionOwner<Transaction>,\n mapping: any,\n configuration: ProofTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly proofPersistence: ProofPersistence[\"Service\"] },\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, ProofCoordinatorError<E>, R | LifecycleHooks | NativeDatabase> =>\n Effect.gen(function* (): Effect.fn.Return<\n A,\n ProofCoordinatorError<E>,\n R | LifecycleHooks | NativeDatabase\n > {\n const hooks = yield* LifecycleHooks;\n\n if (yield* hasCommitScope) return yield* ProofUnavailable.make({});\n yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;\n\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(() => ProofUnavailable.make({})));\n\n const result = yield* coordinateCommit(\n () =>\n database.transaction((transaction) =>\n Effect.gen(function* () {\n return yield* owner(transaction, {\n proofPersistence: yield* makeSqlProofPersistence(\n mapping,\n options(configuration, true),\n ).pipe(\n Effect.provideService(CurrentProofSql, transaction as unknown as ProofSqlDatabase),\n ),\n });\n }),\n ),\n { mode: configuration.mode },\n ).pipe(Effect.provideService(LifecycleHooks, hooks));\n\n return result.value;\n });\n\nexport const proofPersistenceLayer = <E, R>(\n services: Effect.Effect<{ readonly proofPersistence: ProofPersistence[\"Service\"] }, E, R>,\n) =>\n Layer.effect(\n ProofPersistence,\n Effect.map(services, (value) => value.proofPersistence),\n );\n"],"mappings":";;;;;;;AA8CA,MAAa,iCACX,YAEA,yBAAyB,eAAe,iBAAiB,KAAK,CAAC,CAAC,CAAC;AAEnE,MAAM,WACJ,eACA,cAAc,WACa;CAC3B,MAAM,cAAc;CACpB,SAAS,cAAc;CAEvB,iBAAiB,CAAC,cAAc,cAAc,kBAAkB,OAAO;CACvE,gBAAgB,cAAc;CAC9B;AACF;AAEA,MAAa,sCACX,SACA,kBAEA,OAAO,IAAI,aAAa;CACtB,OAAO,EACL,kBAAkB,OAAO,wBAAwB,SAAS,QAAQ,aAAa,CAAC,EAClF;AACF,CAAC;;;;;;;AAQH,MAAa,oCACX,UACA,SACA,eACA,UAKA,OAAO,IAAI,aAIT;CACA,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,gBAAgB,OAAO,OAAO,iBAAiB,KAAK,CAAC,CAAC;CACjE,OAAO,cAAc,oBAAoB,cAAc;CAEvD,OAAO,uBAAuB,OAAO,CAAC,CAAC,KAAK,OAAO,eAAe,iBAAiB,KAAK,CAAC,CAAC,CAAC,CAAC;CAmB5F,QAAO,OAjBe,uBAElB,SAAS,aAAa,gBACpB,OAAO,IAAI,aAAa;EACtB,OAAO,OAAO,MAAM,aAAa,EAC/B,kBAAkB,OAAO,wBACvB,SACA,QAAQ,eAAe,IAAI,CAC7B,CAAC,CAAC,KACA,OAAO,eAAe,iBAAiB,WAA0C,CACnF,EACF,CAAC;CACH,CAAC,CACH,GACF,EAAE,MAAM,cAAc,KAAK,CAC7B,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,KAAK,CAAC,EAAA,CAErC;AAChB,CAAC;AAEH,MAAa,yBACX,aAEA,MAAM,OACJ,kBACA,OAAO,IAAI,WAAW,UAAU,MAAM,gBAAgB,CACxD"}
1
+ {"version":3,"file":"proof-target.mjs","names":[],"sources":["../../src/drizzle/proof-target.ts"],"sourcesContent":["import {\n makeNativeProofServices,\n requireStandalone,\n type AnyProofPersistenceMapping as SharedMapping,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { ProofUnavailable, ProofPersistence } from \"@yielded/auth/Proofs\";\nimport { Effect, Layer } from \"effect\";\n\nimport { nativeClock } from \"./native-clock\";\nimport type { NativeDatabaseHandle } from \"./native-database\";\nimport {\n coordinateNativeTarget,\n nativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type { AnyProofPersistenceMapping } from \"./proof-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nconst unavailable = () => ProofUnavailable.make({});\n\nexport const sqlClientProofStandaloneGuard = (marker: Parameters<typeof requireStandalone>[1]) =>\n requireStandalone(unavailable, marker);\n\nexport const nativeProofMapping = (value: AnyProofPersistenceMapping): SharedMapping => ({\n ...value,\n clock: nativeClock(value.clock),\n});\n\nexport const makeTargetProofPersistenceServices = Effect.fnUntraced(function* (\n source: AnyProofPersistenceMapping,\n configuration: NativeTargetConfiguration,\n) {\n yield* validateDrizzleStorage(source).pipe(Effect.mapError(unavailable));\n if (configuration.mode === \"batch\" && source.d1?.primary !== true) return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeProofServices(target.tables, nativeProofMapping(source)));\n});\n\nexport const coordinateTargetProofPersistence = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n source: AnyProofPersistenceMapping,\n configuration: NativeTargetConfiguration,\n body: (\n transaction: Transaction,\n services: { readonly proofPersistence: ProofPersistence[\"Service\"] },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n makeTargetProofPersistenceServices(source, configuration),\n body,\n );\n\nexport const proofPersistenceLayer = <E, R>(\n services: Effect.Effect<{ readonly proofPersistence: ProofPersistence[\"Service\"] }, E, R>,\n) =>\n Layer.effect(\n ProofPersistence,\n Effect.map(services, (value) => value.proofPersistence),\n );\n"],"mappings":";;;;;;;AAkBA,MAAM,oBAAoB,iBAAiB,KAAK,CAAC,CAAC;AAKlD,MAAa,sBAAsB,WAAsD;CACvF,GAAG;CACH,OAAO,YAAY,MAAM,KAAK;AAChC;AAEA,MAAa,qCAAqC,OAAO,WAAW,WAClE,QACA,eACA;CACA,OAAO,uBAAuB,MAAM,CAAC,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC;CACvE,IAAI,cAAc,SAAS,WAAW,OAAO,IAAI,YAAY,MAAM,OAAO,OAAO,YAAY;CAC7F,MAAM,SAAS,OAAO,aAAa,aAAa;CAEhD,OAAO,OAAO,OAAO,QAAQ,wBAAwB,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC;AACjG,CAAC;AAED,MAAa,oCACX,UACA,QACA,eACA,SAKA,uBACE,aACA,UACA,eACA,mCAAmC,QAAQ,aAAa,GACxD,IACF;AAEF,MAAa,yBACX,aAEA,MAAM,OACJ,kBACA,OAAO,IAAI,WAAW,UAAU,MAAM,gBAAgB,CACxD"}
@@ -0,0 +1,97 @@
1
+ import { nativeClock } from "./native-clock.mjs";
2
+ import { NativeDatabase, nativeDatabase } from "./native-database.mjs";
3
+ import { coordinateNativeTarget, nativeTarget } from "./native-target.mjs";
4
+ import { validateDrizzleStorage } from "./storage-validation.mjs";
5
+ import { makeNativeAuthenticationAuthorityServices, makeNativePendingAuthenticationServices, makeNativeSessionCleanupServices, makeNativeSessionStepUpServices, makeNativeSignedSessionValidityServices, makeNativeStatefulSessionServices } from "@yielded/auth-persistence/Adapter";
6
+ import { Effect } from "effect";
7
+ import { AuthenticationAuthority, SessionUnavailable } from "@yielded/auth/Sessions";
8
+ //#region src/drizzle/session-drivers.ts
9
+ const unavailable = () => SessionUnavailable.make({});
10
+ const clockMapping = (mapping) => ({
11
+ ...mapping,
12
+ clock: nativeClock(mapping.clock)
13
+ });
14
+ /** Foreign table/ID callback variance is erased only at this physical mapping
15
+ * boundary. All subjects, sessions, pending payloads and policy use their codecs. */
16
+ const makeSessionTarget = (databaseService, configuration) => {
17
+ const authenticationAuthority = (mapping) => Effect.gen(function* () {
18
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
19
+ if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
20
+ const target = yield* nativeTarget(configuration);
21
+ return yield* target.provide(makeNativeAuthenticationAuthorityServices(target.tables, mapping));
22
+ });
23
+ function coordinateAuthenticationAuthority(acquire, options, body) {
24
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateNativeTarget(unavailable, database, configuration, authenticationAuthority(clockMapping(options.mapping)), (transaction, services) => {
25
+ const work = body.pipe(Effect.provideService(AuthenticationAuthority, services.authenticationAuthority));
26
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
27
+ }));
28
+ }
29
+ const pendingAuthentication = (mapping) => Effect.gen(function* () {
30
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
31
+ if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
32
+ const target = yield* nativeTarget(configuration);
33
+ return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));
34
+ });
35
+ function coordinatePendingAuthentication(acquire, options, body) {
36
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateNativeTarget(unavailable, database, configuration, pendingAuthentication(clockMapping(options.mapping)), (transaction, services) => {
37
+ const work = body.pipe(Effect.provideService(options.target, services.pendingAuthentication));
38
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
39
+ }));
40
+ }
41
+ const statefulSessionPersistence = (mapping) => Effect.gen(function* () {
42
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
43
+ if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
44
+ const target = yield* nativeTarget(configuration);
45
+ return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));
46
+ });
47
+ function coordinateStatefulSessions(acquire, options, body) {
48
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateNativeTarget(unavailable, database, configuration, statefulSessionPersistence(clockMapping(options.mapping)), (transaction, services) => {
49
+ const work = body.pipe(Effect.provideService(options.persistence, services.statefulSessionPersistence), Effect.provideService(options.repository, services.sessionRepository));
50
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
51
+ }));
52
+ }
53
+ const signedSessionValidity = (mapping) => Effect.gen(function* () {
54
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
55
+ if (configuration.mode === "batch" && mapping.d1?.primary !== true) return yield* unavailable();
56
+ const target = yield* nativeTarget(configuration);
57
+ return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));
58
+ });
59
+ function coordinateSignedSessionValidity(acquire, options, body) {
60
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateNativeTarget(unavailable, database, configuration, signedSessionValidity(clockMapping(options.mapping)), (transaction, services) => {
61
+ const work = body.pipe(Effect.provideService(options.target, services.signedSessionValidity));
62
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
63
+ }));
64
+ }
65
+ const sessionStepUpPersistence = (mapping) => Effect.gen(function* () {
66
+ yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
67
+ if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
68
+ const target = yield* nativeTarget(configuration);
69
+ return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));
70
+ });
71
+ function coordinateSessionStepUp(acquire, options, body) {
72
+ return Effect.flatMap(nativeDatabase(acquire), (database) => coordinateNativeTarget(unavailable, database, configuration, sessionStepUpPersistence(clockMapping(options.mapping)), (transaction, services) => {
73
+ const work = body.pipe(Effect.provideService(options.target, services.sessionStepUpPersistence));
74
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
75
+ }));
76
+ }
77
+ return {
78
+ coordinateAuthenticationAuthority,
79
+ makeAuthenticationAuthorityServices: (mapping) => authenticationAuthority(clockMapping(mapping)).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
80
+ coordinatePendingAuthentication,
81
+ makePendingAuthenticationServices: (mapping) => pendingAuthentication(clockMapping(mapping)).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
82
+ coordinateStatefulSessions,
83
+ makeStatefulSessionServices: (mapping) => statefulSessionPersistence(clockMapping(mapping)).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
84
+ coordinateSignedSessionValidity,
85
+ makeSignedSessionValidityServices: (mapping) => signedSessionValidity(clockMapping(mapping)).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
86
+ coordinateSessionStepUp,
87
+ makeSessionStepUpServices: (mapping, target) => sessionStepUpPersistence(clockMapping(mapping)).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))).pipe(Effect.map((services) => ({ sessionStepUpPersistence: target.of(services.sessionStepUpPersistence) }))),
88
+ makeSessionCleanupServices: (mapping) => Effect.gen(function* () {
89
+ const target = yield* nativeTarget(configuration);
90
+ return yield* target.provide(makeNativeSessionCleanupServices(target.tables, clockMapping(mapping)));
91
+ }).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)))
92
+ };
93
+ };
94
+ //#endregion
95
+ export { makeSessionTarget };
96
+
97
+ //# sourceMappingURL=session-drivers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-drivers.mjs","names":[],"sources":["../../src/drizzle/session-drivers.ts"],"sourcesContent":["import {\n makeNativeAuthenticationAuthorityServices,\n type NativeAuthenticationAuthorityMapping,\n makeNativePendingAuthenticationServices,\n type NativePendingAuthenticationMapping,\n makeNativeStatefulSessionServices,\n type NativeStatefulSessionMapping,\n makeNativeSignedSessionValidityServices,\n type NativeSignedSessionValidityMapping,\n makeNativeSessionStepUpServices,\n type NativeSessionStepUpMapping,\n makeNativeSessionCleanupServices,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n AuthenticationAuthority,\n SessionUnavailable,\n type PendingAuthentication,\n type StatefulSessionPersistence,\n type SessionRepository,\n type SignedSessionValidity,\n type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { Table } from \"drizzle-orm\";\nimport { Effect, type Context } from \"effect\";\n\nimport type { NativeDriverDatabase, NativeDriverTransaction } from \"./driver-types\";\nimport { nativeClock, type MappedClock } from \"./native-clock\";\nimport { NativeDatabase, nativeDatabase } from \"./native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type {\n AuthenticationAuthorityMapping,\n PendingAuthenticationMapping,\n StatefulSessionMapping,\n SignedSessionValidityMapping,\n SessionCleanupMapping,\n} from \"./session-model\";\nimport type { SessionStepUpMapping } from \"./step-up-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\nconst unavailable = () => SessionUnavailable.make({});\n\nconst clockMapping = <T extends { readonly clock: MappedClock }>(mapping: T) => ({\n ...mapping,\n clock: nativeClock(mapping.clock),\n});\n\n/** Foreign table/ID callback variance is erased only at this physical mapping\n * boundary. All subjects, sessions, pending payloads and policy use their codecs. */\nexport const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: NativeTargetConfiguration,\n) => {\n const authenticationAuthority = <Claims>(mapping: NativeAuthenticationAuthorityMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeAuthenticationAuthorityServices(target.tables, mapping),\n );\n });\n\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority | TxId> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n authenticationAuthority(\n clockMapping(options.mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(AuthenticationAuthority, services.authenticationAuthority),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const pendingAuthentication = <Claims>(mapping: NativePendingAuthenticationMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));\n });\n\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n pendingAuthentication(\n clockMapping(options.mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.pendingAuthentication),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const statefulSessionPersistence = <Claims>(mapping: NativeStatefulSessionMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));\n });\n\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId | TxId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n statefulSessionPersistence(\n clockMapping(options.mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.persistence, services.statefulSessionPersistence),\n Effect.provideService(options.repository, services.sessionRepository),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const signedSessionValidity = (mapping: NativeSignedSessionValidityMapping) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (configuration.mode === \"batch\" && mapping.d1?.primary !== true)\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));\n });\n\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n signedSessionValidity(\n clockMapping(options.mapping) as unknown as NativeSignedSessionValidityMapping,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.signedSessionValidity),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const sessionStepUpPersistence = <Claims>(mapping: NativeSessionStepUpMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));\n });\n\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n sessionStepUpPersistence(\n clockMapping(options.mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.sessionStepUpPersistence),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n coordinateAuthenticationAuthority,\n makeAuthenticationAuthorityServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>,\n ) =>\n authenticationAuthority(\n clockMapping(mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinatePendingAuthentication,\n makePendingAuthenticationServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: PendingAuthenticationMapping<Claims, S, C, P, N>,\n ) =>\n pendingAuthentication(\n clockMapping(mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateStatefulSessions,\n makeStatefulSessionServices: <\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n >(\n mapping: StatefulSessionMapping<Claims, S, C, Session, P, N, NS>,\n ) =>\n statefulSessionPersistence(\n clockMapping(mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSignedSessionValidity,\n makeSignedSessionValidityServices: <S extends Table, T extends Table, N, NS>(\n mapping: SignedSessionValidityMapping<S, T, N, NS>,\n ) =>\n signedSessionValidity(\n clockMapping(mapping) as unknown as NativeSignedSessionValidityMapping,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSessionStepUp,\n makeSessionStepUpServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n Id,\n >(\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n ) =>\n sessionStepUpPersistence(\n clockMapping(mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n )\n .pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)))\n .pipe(\n Effect.map((services) => ({\n sessionStepUpPersistence: target.of(services.sessionStepUpPersistence),\n })),\n ),\n makeSessionCleanupServices: <P extends Table, T extends Table, N, NS>(\n mapping: SessionCleanupMapping<P, T, N, NS>,\n ) =>\n Effect.gen(function* () {\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeSessionCleanupServices(\n target.tables,\n clockMapping(mapping) as unknown as Parameters<\n typeof makeNativeSessionCleanupServices\n >[1],\n ),\n );\n }).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n };\n};\n"],"mappings":"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"}