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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/README.md +4 -2
  2. package/dist/D1.d.mts +495 -1151
  3. package/dist/D1.mjs +41 -19
  4. package/dist/D1.mjs.map +1 -1
  5. package/dist/Libsql.d.mts +385 -1996
  6. package/dist/Libsql.mjs +43 -47
  7. package/dist/Libsql.mjs.map +1 -1
  8. package/dist/Mysql2.d.mts +397 -1743
  9. package/dist/Mysql2.mjs +35 -41
  10. package/dist/Mysql2.mjs.map +1 -1
  11. package/dist/Pglite.d.mts +397 -1743
  12. package/dist/Pglite.mjs +42 -31
  13. package/dist/Pglite.mjs.map +1 -1
  14. package/dist/Postgres.d.mts +397 -1743
  15. package/dist/Postgres.mjs +42 -31
  16. package/dist/Postgres.mjs.map +1 -1
  17. package/dist/SqliteBun.d.mts +385 -1992
  18. package/dist/SqliteBun.mjs +43 -43
  19. package/dist/SqliteBun.mjs.map +1 -1
  20. package/dist/SqliteDo.d.mts +385 -1991
  21. package/dist/SqliteDo.mjs +42 -41
  22. package/dist/SqliteDo.mjs.map +1 -1
  23. package/dist/SqliteNode.d.mts +385 -1992
  24. package/dist/SqliteNode.mjs +43 -43
  25. package/dist/SqliteNode.mjs.map +1 -1
  26. package/dist/SqliteWasm.d.mts +385 -1992
  27. package/dist/SqliteWasm.mjs +43 -43
  28. package/dist/SqliteWasm.mjs.map +1 -1
  29. package/dist/drizzle/d1-identity.mjs +2 -2
  30. package/dist/drizzle/d1-identity.mjs.map +1 -1
  31. package/dist/drizzle/driver-types.d.mts +15 -0
  32. package/dist/drizzle/email-drivers.mjs +32 -0
  33. package/dist/drizzle/email-drivers.mjs.map +1 -0
  34. package/dist/drizzle/email-model.d.mts +9 -13
  35. package/dist/drizzle/email-target.d.mts +10 -11
  36. package/dist/drizzle/email-target.mjs +33 -70
  37. package/dist/drizzle/email-target.mjs.map +1 -1
  38. package/dist/drizzle/model.d.mts +1 -10
  39. package/dist/drizzle/model.mjs +1 -2
  40. package/dist/drizzle/model.mjs.map +1 -1
  41. package/dist/drizzle/mysql-identity.mjs +3 -6
  42. package/dist/drizzle/mysql-identity.mjs.map +1 -1
  43. package/dist/drizzle/native-clock.d.mts +9 -0
  44. package/dist/drizzle/native-clock.mjs +18 -0
  45. package/dist/drizzle/native-clock.mjs.map +1 -0
  46. package/dist/drizzle/native-database.d.mts +46 -0
  47. package/dist/drizzle/native-database.mjs +6 -5
  48. package/dist/drizzle/native-database.mjs.map +1 -1
  49. package/dist/drizzle/native-sql-table.mjs +13 -5
  50. package/dist/drizzle/native-sql-table.mjs.map +1 -1
  51. package/dist/drizzle/native-target.d.mts +6 -0
  52. package/dist/drizzle/native-target.mjs +44 -0
  53. package/dist/drizzle/native-target.mjs.map +1 -0
  54. package/dist/drizzle/oauth-connected-drivers.mjs +4 -56
  55. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
  56. package/dist/drizzle/oauth-connected-model.d.mts +5 -22
  57. package/dist/drizzle/oauth-connected-model.mjs +1 -7
  58. package/dist/drizzle/oauth-connected-reference.d.mts +5 -7
  59. package/dist/drizzle/oauth-connected-reference.mjs +11 -3
  60. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -1
  61. package/dist/drizzle/oauth-drivers.mjs +1 -2
  62. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  63. package/dist/drizzle/oauth-model.d.mts +11 -37
  64. package/dist/drizzle/oauth-model.mjs +3 -4
  65. package/dist/drizzle/oauth-model.mjs.map +1 -1
  66. package/dist/drizzle/oauth-proxy.d.mts +1 -1
  67. package/dist/drizzle/oauth-proxy.mjs +1 -1
  68. package/dist/drizzle/oauth-target.d.mts +9 -6
  69. package/dist/drizzle/oauth-target.mjs +47 -15
  70. package/dist/drizzle/oauth-target.mjs.map +1 -1
  71. package/dist/drizzle/passkey/target.d.mts +14 -0
  72. package/dist/drizzle/passkey/target.mjs +52 -0
  73. package/dist/drizzle/passkey/target.mjs.map +1 -0
  74. package/dist/drizzle/passkey/write-target.d.mts +11 -0
  75. package/dist/drizzle/passkey/write-target.mjs +28 -0
  76. package/dist/drizzle/passkey/write-target.mjs.map +1 -0
  77. package/dist/drizzle/passkey-drivers.mjs +2 -4
  78. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  79. package/dist/drizzle/passkey-model.d.mts +5 -26
  80. package/dist/drizzle/passkey-model.mjs +2 -8
  81. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +3 -6
  82. package/dist/drizzle/passkey-write-drivers.mjs +2 -3
  83. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  84. package/dist/drizzle/passkey-write-model.d.mts +7 -9
  85. package/dist/drizzle/passkey-write-model.mjs +1 -3
  86. package/dist/drizzle/passkey-write-model.mjs.map +1 -1
  87. package/dist/drizzle/password-drivers.mjs +31 -0
  88. package/dist/drizzle/password-drivers.mjs.map +1 -0
  89. package/dist/drizzle/password-model.d.mts +7 -10
  90. package/dist/drizzle/password-target.d.mts +7 -8
  91. package/dist/drizzle/password-target.mjs +23 -68
  92. package/dist/drizzle/password-target.mjs.map +1 -1
  93. package/dist/drizzle/pg-identity.mjs +3 -6
  94. package/dist/drizzle/pg-identity.mjs.map +1 -1
  95. package/dist/drizzle/phone-drivers.mjs +24 -0
  96. package/dist/drizzle/phone-drivers.mjs.map +1 -0
  97. package/dist/drizzle/phone-model.d.mts +13 -104
  98. package/dist/drizzle/phone-model.mjs +5 -33
  99. package/dist/drizzle/phone-model.mjs.map +1 -1
  100. package/dist/drizzle/phone-target.mjs +22 -171
  101. package/dist/drizzle/phone-target.mjs.map +1 -1
  102. package/dist/drizzle/proof-drivers.mjs +24 -0
  103. package/dist/drizzle/proof-drivers.mjs.map +1 -0
  104. package/dist/drizzle/proof-model.d.mts +7 -15
  105. package/dist/drizzle/proof-target.d.mts +5 -5
  106. package/dist/drizzle/proof-target.mjs +14 -28
  107. package/dist/drizzle/proof-target.mjs.map +1 -1
  108. package/dist/drizzle/session-drivers.mjs +97 -0
  109. package/dist/drizzle/session-drivers.mjs.map +1 -0
  110. package/dist/drizzle/session-model.d.mts +11 -22
  111. package/dist/drizzle/sqlite-do-database.d.mts +3 -3
  112. package/dist/drizzle/sqlite-do-database.mjs +6 -1
  113. package/dist/drizzle/sqlite-do-database.mjs.map +1 -1
  114. package/dist/drizzle/sqlite-identity.mjs +3 -5
  115. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  116. package/dist/drizzle/step-up-model.d.mts +2 -5
  117. package/dist/drizzle/storage-validation.mjs +2 -1
  118. package/dist/drizzle/storage-validation.mjs.map +1 -1
  119. package/dist/drizzle/totp-model.d.mts +7 -74
  120. package/dist/drizzle/totp-model.mjs +1 -5
  121. package/dist/drizzle/totp-model.mjs.map +1 -1
  122. package/dist/drizzle/totp-target.mjs +39 -75
  123. package/dist/drizzle/totp-target.mjs.map +1 -1
  124. package/dist/drizzle/transaction-handle.mjs +13 -0
  125. package/dist/drizzle/transaction-handle.mjs.map +1 -0
  126. package/dist/drizzle/transaction-mysql.mjs +43 -12
  127. package/dist/drizzle/transaction-mysql.mjs.map +1 -1
  128. package/dist/index.d.mts +17 -22
  129. package/dist/index.mjs +10 -16
  130. package/dist/internal/drizzle-postgres.mjs +4 -6
  131. package/dist/internal/drizzle-postgres.mjs.map +1 -1
  132. package/dist/internal/drizzle-sqlite.mjs +4 -6
  133. package/dist/internal/drizzle-sqlite.mjs.map +1 -1
  134. package/package.json +1 -1
  135. package/src/D1.ts +77 -74
  136. package/src/Libsql.ts +65 -105
  137. package/src/Mysql2.ts +52 -87
  138. package/src/Pglite.ts +74 -81
  139. package/src/Postgres.ts +74 -81
  140. package/src/SqliteBun.ts +65 -113
  141. package/src/SqliteDo.ts +58 -106
  142. package/src/SqliteNode.ts +65 -113
  143. package/src/SqliteWasm.ts +65 -113
  144. package/src/drizzle/d1-identity.ts +2 -2
  145. package/src/drizzle/driver-types.ts +26 -0
  146. package/src/drizzle/email-drivers.ts +320 -0
  147. package/src/drizzle/email-model.ts +24 -78
  148. package/src/drizzle/email-target.ts +118 -211
  149. package/src/drizzle/model.ts +0 -2
  150. package/src/drizzle/mysql-identity.ts +4 -24
  151. package/src/drizzle/native-clock.ts +21 -0
  152. package/src/drizzle/native-database.ts +59 -18
  153. package/src/drizzle/native-sql-table.ts +104 -87
  154. package/src/drizzle/native-target.ts +120 -0
  155. package/src/drizzle/oauth-connected-drivers.ts +24 -233
  156. package/src/drizzle/oauth-connected-model.ts +3 -93
  157. package/src/drizzle/oauth-connected-reference.ts +16 -25
  158. package/src/drizzle/oauth-drivers.ts +58 -99
  159. package/src/drizzle/oauth-model.ts +27 -132
  160. package/src/drizzle/oauth-target.ts +250 -33
  161. package/src/drizzle/passkey/target.ts +205 -0
  162. package/src/drizzle/passkey/write-target.ts +91 -0
  163. package/src/drizzle/passkey-drivers.ts +35 -133
  164. package/src/drizzle/passkey-model.ts +3 -81
  165. package/src/drizzle/passkey-registration-ceremony-model.ts +5 -25
  166. package/src/drizzle/passkey-write-drivers.ts +32 -102
  167. package/src/drizzle/passkey-write-model.ts +10 -44
  168. package/src/drizzle/password-drivers.ts +286 -0
  169. package/src/drizzle/password-model.ts +10 -44
  170. package/src/drizzle/password-target.ts +85 -239
  171. package/src/drizzle/pg-identity.ts +4 -19
  172. package/src/drizzle/phone-drivers.ts +142 -0
  173. package/src/drizzle/phone-model.ts +22 -162
  174. package/src/drizzle/phone-target.ts +51 -493
  175. package/src/drizzle/proof-drivers.ts +123 -0
  176. package/src/drizzle/proof-model.ts +12 -123
  177. package/src/drizzle/proof-target.ts +38 -102
  178. package/src/drizzle/session-drivers.ts +696 -0
  179. package/src/drizzle/session-model.ts +54 -118
  180. package/src/drizzle/sqlite-do-database.ts +8 -0
  181. package/src/drizzle/sqlite-identity.ts +4 -22
  182. package/src/drizzle/step-up-model.ts +13 -37
  183. package/src/drizzle/storage-validation.ts +2 -1
  184. package/src/drizzle/totp-model.ts +20 -77
  185. package/src/drizzle/totp-target.ts +121 -261
  186. package/src/drizzle/transaction-handle.ts +41 -0
  187. package/src/drizzle/transaction-mysql.ts +90 -25
  188. package/src/index.ts +7 -122
  189. package/src/internal/drizzle-postgres.ts +4 -7
  190. package/src/internal/drizzle-sqlite.ts +4 -7
  191. package/dist/drizzle/crypto.mjs +0 -11
  192. package/dist/drizzle/crypto.mjs.map +0 -1
  193. package/dist/drizzle/d1-emails.d.mts +0 -62
  194. package/dist/drizzle/d1-emails.mjs +0 -626
  195. package/dist/drizzle/d1-emails.mjs.map +0 -1
  196. package/dist/drizzle/d1-generated-statement.mjs +0 -79
  197. package/dist/drizzle/d1-generated-statement.mjs.map +0 -1
  198. package/dist/drizzle/d1-oauth.d.mts +0 -331
  199. package/dist/drizzle/d1-oauth.mjs +0 -79
  200. package/dist/drizzle/d1-oauth.mjs.map +0 -1
  201. package/dist/drizzle/d1-passkey.d.mts +0 -37
  202. package/dist/drizzle/d1-passkey.mjs +0 -98
  203. package/dist/drizzle/d1-passkey.mjs.map +0 -1
  204. package/dist/drizzle/d1-password-prepared.d.mts +0 -25
  205. package/dist/drizzle/d1-password-prepared.mjs +0 -473
  206. package/dist/drizzle/d1-password-prepared.mjs.map +0 -1
  207. package/dist/drizzle/d1-passwords.d.mts +0 -70
  208. package/dist/drizzle/d1-passwords.mjs +0 -808
  209. package/dist/drizzle/d1-passwords.mjs.map +0 -1
  210. package/dist/drizzle/d1-phone.d.mts +0 -23
  211. package/dist/drizzle/d1-phone.mjs +0 -33
  212. package/dist/drizzle/d1-phone.mjs.map +0 -1
  213. package/dist/drizzle/d1-planning.d.mts +0 -11
  214. package/dist/drizzle/d1-planning.mjs +0 -43
  215. package/dist/drizzle/d1-planning.mjs.map +0 -1
  216. package/dist/drizzle/d1-proofs.d.mts +0 -80
  217. package/dist/drizzle/d1-proofs.mjs +0 -842
  218. package/dist/drizzle/d1-proofs.mjs.map +0 -1
  219. package/dist/drizzle/d1-sessions.d.mts +0 -68
  220. package/dist/drizzle/d1-sessions.mjs +0 -987
  221. package/dist/drizzle/d1-sessions.mjs.map +0 -1
  222. package/dist/drizzle/d1-totp.d.mts +0 -23
  223. package/dist/drizzle/d1-totp.mjs +0 -30
  224. package/dist/drizzle/d1-totp.mjs.map +0 -1
  225. package/dist/drizzle/email-registration.d.mts +0 -33
  226. package/dist/drizzle/email-registration.mjs +0 -281
  227. package/dist/drizzle/email-registration.mjs.map +0 -1
  228. package/dist/drizzle/email-sql.d.mts +0 -1
  229. package/dist/drizzle/email-sql.mjs +0 -9
  230. package/dist/drizzle/email-sql.mjs.map +0 -1
  231. package/dist/drizzle/mysql-emails.d.mts +0 -71
  232. package/dist/drizzle/mysql-emails.mjs +0 -43
  233. package/dist/drizzle/mysql-emails.mjs.map +0 -1
  234. package/dist/drizzle/mysql-password-prepared.d.mts +0 -30
  235. package/dist/drizzle/mysql-password-prepared.mjs +0 -21
  236. package/dist/drizzle/mysql-password-prepared.mjs.map +0 -1
  237. package/dist/drizzle/mysql-passwords.d.mts +0 -71
  238. package/dist/drizzle/mysql-passwords.mjs +0 -43
  239. package/dist/drizzle/mysql-passwords.mjs.map +0 -1
  240. package/dist/drizzle/mysql-proofs.d.mts +0 -75
  241. package/dist/drizzle/mysql-proofs.mjs +0 -28
  242. package/dist/drizzle/mysql-proofs.mjs.map +0 -1
  243. package/dist/drizzle/mysql-sessions.d.mts +0 -92
  244. package/dist/drizzle/mysql-sessions.mjs +0 -58
  245. package/dist/drizzle/mysql-sessions.mjs.map +0 -1
  246. package/dist/drizzle/oauth-connected-model.mjs.map +0 -1
  247. package/dist/drizzle/oauth-connected-target.d.mts +0 -6
  248. package/dist/drizzle/oauth-connected-target.mjs +0 -12
  249. package/dist/drizzle/oauth-connected-target.mjs.map +0 -1
  250. package/dist/drizzle/oauth-kernel.mjs +0 -11
  251. package/dist/drizzle/oauth-kernel.mjs.map +0 -1
  252. package/dist/drizzle/oauth-mysql.mjs +0 -8
  253. package/dist/drizzle/oauth-mysql.mjs.map +0 -1
  254. package/dist/drizzle/passkey-kernel.mjs +0 -8
  255. package/dist/drizzle/passkey-kernel.mjs.map +0 -1
  256. package/dist/drizzle/passkey-model.mjs.map +0 -1
  257. package/dist/drizzle/passkey-registration-ceremony-model.mjs +0 -2
  258. package/dist/drizzle/passkey-state.mjs +0 -7
  259. package/dist/drizzle/passkey-state.mjs.map +0 -1
  260. package/dist/drizzle/passkey-target.d.mts +0 -2
  261. package/dist/drizzle/passkey-target.mjs +0 -7
  262. package/dist/drizzle/passkey-target.mjs.map +0 -1
  263. package/dist/drizzle/passkey-write-target.d.mts +0 -5
  264. package/dist/drizzle/passkey-write-target.mjs +0 -7
  265. package/dist/drizzle/passkey-write-target.mjs.map +0 -1
  266. package/dist/drizzle/password-prepared-model.d.mts +0 -92
  267. package/dist/drizzle/password-prepared-model.mjs +0 -11
  268. package/dist/drizzle/password-prepared-model.mjs.map +0 -1
  269. package/dist/drizzle/password-prepared-sql.mjs +0 -395
  270. package/dist/drizzle/password-prepared-sql.mjs.map +0 -1
  271. package/dist/drizzle/password-prepared-state.mjs +0 -104
  272. package/dist/drizzle/password-prepared-state.mjs.map +0 -1
  273. package/dist/drizzle/password-prepared-target.d.mts +0 -13
  274. package/dist/drizzle/password-prepared-target.mjs +0 -62
  275. package/dist/drizzle/password-prepared-target.mjs.map +0 -1
  276. package/dist/drizzle/password-registration.d.mts +0 -7
  277. package/dist/drizzle/password-registration.mjs +0 -137
  278. package/dist/drizzle/password-registration.mjs.map +0 -1
  279. package/dist/drizzle/password-sql.d.mts +0 -1
  280. package/dist/drizzle/password-sql.mjs +0 -10
  281. package/dist/drizzle/password-sql.mjs.map +0 -1
  282. package/dist/drizzle/pg-emails.d.mts +0 -72
  283. package/dist/drizzle/pg-emails.mjs +0 -43
  284. package/dist/drizzle/pg-emails.mjs.map +0 -1
  285. package/dist/drizzle/pg-password-prepared.d.mts +0 -31
  286. package/dist/drizzle/pg-password-prepared.mjs +0 -21
  287. package/dist/drizzle/pg-password-prepared.mjs.map +0 -1
  288. package/dist/drizzle/pg-passwords.d.mts +0 -72
  289. package/dist/drizzle/pg-passwords.mjs +0 -43
  290. package/dist/drizzle/pg-passwords.mjs.map +0 -1
  291. package/dist/drizzle/pg-proofs.d.mts +0 -76
  292. package/dist/drizzle/pg-proofs.mjs +0 -27
  293. package/dist/drizzle/pg-proofs.mjs.map +0 -1
  294. package/dist/drizzle/pg-sessions.d.mts +0 -93
  295. package/dist/drizzle/pg-sessions.mjs +0 -58
  296. package/dist/drizzle/pg-sessions.mjs.map +0 -1
  297. package/dist/drizzle/phone-state.mjs +0 -14
  298. package/dist/drizzle/phone-state.mjs.map +0 -1
  299. package/dist/drizzle/phone-target.d.mts +0 -15
  300. package/dist/drizzle/proof-sql.d.mts +0 -1
  301. package/dist/drizzle/proof-sql.mjs +0 -8
  302. package/dist/drizzle/proof-sql.mjs.map +0 -1
  303. package/dist/drizzle/query-operations.mjs +0 -31
  304. package/dist/drizzle/query-operations.mjs.map +0 -1
  305. package/dist/drizzle/session-sql.d.mts +0 -1
  306. package/dist/drizzle/session-sql.mjs +0 -9
  307. package/dist/drizzle/session-sql.mjs.map +0 -1
  308. package/dist/drizzle/session-target.d.mts +0 -30
  309. package/dist/drizzle/session-target.mjs +0 -49
  310. package/dist/drizzle/session-target.mjs.map +0 -1
  311. package/dist/drizzle/sqlite-emails.mjs +0 -50
  312. package/dist/drizzle/sqlite-emails.mjs.map +0 -1
  313. package/dist/drizzle/sqlite-password-prepared.mjs +0 -26
  314. package/dist/drizzle/sqlite-password-prepared.mjs.map +0 -1
  315. package/dist/drizzle/sqlite-passwords.mjs +0 -54
  316. package/dist/drizzle/sqlite-passwords.mjs.map +0 -1
  317. package/dist/drizzle/sqlite-proofs.mjs +0 -34
  318. package/dist/drizzle/sqlite-proofs.mjs.map +0 -1
  319. package/dist/drizzle/sqlite-sessions.mjs +0 -79
  320. package/dist/drizzle/sqlite-sessions.mjs.map +0 -1
  321. package/dist/drizzle/standalone-guard.d.mts +0 -2
  322. package/dist/drizzle/standalone-guard.mjs +0 -21
  323. package/dist/drizzle/standalone-guard.mjs.map +0 -1
  324. package/dist/drizzle/totp-state.d.mts +0 -37
  325. package/dist/drizzle/totp-state.mjs +0 -287
  326. package/dist/drizzle/totp-state.mjs.map +0 -1
  327. package/dist/drizzle/totp-target.d.mts +0 -15
  328. package/dist/drizzle/transaction-execution.d.mts +0 -2
  329. package/dist/drizzle/transaction-execution.mjs +0 -11
  330. package/dist/drizzle/transaction-execution.mjs.map +0 -1
  331. package/dist/drizzle/transaction-owner.d.mts +0 -1
  332. package/dist/drizzle/transaction-owner.mjs +0 -8
  333. package/dist/drizzle/transaction-owner.mjs.map +0 -1
  334. package/src/drizzle/crypto.ts +0 -14
  335. package/src/drizzle/d1-emails.ts +0 -1945
  336. package/src/drizzle/d1-generated-statement.ts +0 -129
  337. package/src/drizzle/d1-oauth.ts +0 -360
  338. package/src/drizzle/d1-passkey.ts +0 -383
  339. package/src/drizzle/d1-password-prepared.ts +0 -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,525 +0,0 @@
1
- import { AuthenticationRequirement, SecurityRevision } from "@yielded/auth/Sessions";
2
- import {
3
- TotpUnavailable,
4
- type TotpMutation,
5
- TotpPolicy,
6
- TotpRecord,
7
- type TotpDecision,
8
- } from "@yielded/auth/Totp";
9
- /* oxlint-disable no-explicit-any -- private native driver bridge; public makers preserve table and ID types. */
10
- import { sql, type SQL } from "drizzle-orm";
11
- import { Context, Effect, Schema } from "effect";
12
-
13
- import { randomId, digest } from "./crypto";
14
- import { both, makeTransactionRows, type TransactionOwner } from "./transaction-owner";
15
- export const unavailable = () => TotpUnavailable.make({});
16
-
17
- export const invariant: (condition: unknown) => asserts condition = (condition) => {
18
- if (!condition) throw unavailable();
19
- };
20
-
21
- export class CurrentTotpTransaction extends Context.Service<
22
- CurrentTotpTransaction,
23
- TransactionOwner<TotpUnavailable>
24
- >()("effect-auth/drizzle/CurrentTotpTransaction") {}
25
-
26
- export const { equal, col, copiedRow } = makeTransactionRows(unavailable);
27
- const codec = Schema.fromJsonString(TotpRecord);
28
-
29
- export const encodeTotpRecord = (record: TotpRecord) => Schema.encodeSync(codec)(record);
30
- export const decodeTotpRecord = (state: string) => Schema.decodeSync(codec)(state);
31
-
32
- const scopeFor = (moduleId: string, subjectId: string) =>
33
- digest(`effect-auth/totp/scope/v1/${moduleId.length}:${moduleId}/${subjectId}`);
34
-
35
- export const captureTotp = Effect.fn("TotpNative.capture")(function* (
36
- mapping: any,
37
- subjectId: typeof TotpRecord.Type.subjectId,
38
- ) {
39
- const owner = yield* CurrentTotpTransaction,
40
- subject = mapping.subject,
41
- factor = mapping.factor,
42
- nativeId = mapping.subjectIds.toNative(subjectId);
43
-
44
- invariant(mapping.subjectIds.toSubject(nativeId) === subjectId);
45
-
46
- const selected = yield* owner.read(
47
- subject.table,
48
- equal(subject.table, { [subject.id]: nativeId }),
49
- { limit: 1 },
50
- );
51
-
52
- const subjectRow = selected.rows[0];
53
-
54
- if (
55
- subjectRow === undefined ||
56
- !(yield* owner.check(
57
- sql`exists(select 1 from ${subject.table} where ${both(owner.exact(subject.table, subjectRow), subject.activeCondition)})`,
58
- ))
59
- )
60
- return undefined;
61
-
62
- const scope = yield* scopeFor(mapping.moduleId, subjectId),
63
- found = yield* owner.read(factor.table, equal(factor.table, { [factor.scope]: scope }), {
64
- limit: 1,
65
- }),
66
- row = found.rows[0];
67
-
68
- const record = row === undefined ? null : decodeTotpRecord(row[factor.state] as string);
69
-
70
- invariant(
71
- record === null ||
72
- ((record.secret === null || record.secret.revision === record.revision) &&
73
- (record.pending === null || record.pending.secret.revision === record.pending.revision)),
74
- );
75
- invariant(
76
- record === null ||
77
- (record.moduleId === mapping.moduleId &&
78
- record.subjectId === subjectId &&
79
- record.version === row![factor.version]),
80
- );
81
-
82
- return {
83
- nativeId,
84
- subjectRow,
85
- factorRow: row,
86
- factorObservation: found,
87
- scope,
88
- snapshot: {
89
- revision: {
90
- subjectId,
91
- securityRevision: SecurityRevision.make(subjectRow[subject.securityRevision] as string),
92
- credentials:
93
- record === null || record.secret === null
94
- ? []
95
- : [
96
- {
97
- credentialId: record.credentialId,
98
- revision: SecurityRevision.make(record.revision),
99
- },
100
- ],
101
- },
102
- record,
103
- },
104
- };
105
- });
106
-
107
- const reject: TotpDecision = { _tag: "Rejected" };
108
-
109
- export const mutateTotp = Effect.fn("TotpNative.mutate")(function* (
110
- mapping: any,
111
- input: TotpMutation,
112
- ) {
113
- const owner = yield* CurrentTotpTransaction;
114
-
115
- invariant(
116
- input.moduleId === mapping.moduleId &&
117
- Schema.encodeSync(Schema.fromJsonString(TotpPolicy))(input.policy) ===
118
- Schema.encodeSync(Schema.fromJsonString(TotpPolicy))(mapping.policy),
119
- );
120
- const captured = yield* captureTotp(mapping, input.subjectId);
121
-
122
- if (captured === undefined) return reject;
123
-
124
- const { snapshot, subjectRow, factorRow, factorObservation, scope, nativeId } = captured,
125
- current = snapshot.record,
126
- policy = input.policy,
127
- action = input.action;
128
-
129
- if (
130
- snapshot.revision.securityRevision !== input.snapshot.revision.securityRevision ||
131
- (current?.version ?? null) !== (input.snapshot.record?.version ?? null)
132
- )
133
- return reject;
134
- if (
135
- (current === null) !== (input.snapshot.record === null) ||
136
- (current !== null && encodeTotpRecord(current) !== encodeTotpRecord(input.snapshot.record!))
137
- )
138
- return reject;
139
- const now = yield* owner.now({ engineNowMillis: mapping.engineNowMillis });
140
- const guards: SQL[] = [];
141
- const credentialGuards: { credentialId: string; condition: SQL }[] = [];
142
-
143
- const commandScope = yield* digest(
144
- `effect-auth/totp/command/v1/${mapping.moduleId.length}:${mapping.moduleId}/${input.subjectId.length}:${input.subjectId}/${input.commandId}`,
145
- );
146
-
147
- const management = ["Enroll", "Confirm", "Disable", "Regenerate"].includes(action._tag);
148
-
149
- const commandObservation = management
150
- ? yield* owner.read(
151
- mapping.factor.table,
152
- equal(mapping.factor.table, { [mapping.factor.scope]: commandScope }),
153
- { limit: 1 },
154
- )
155
- : undefined;
156
-
157
- if (commandObservation !== undefined && commandObservation.rows.length !== 0) return reject;
158
- const timeGuards: SQL[] = [];
159
-
160
- const timeBound = (start: number, end: number) => {
161
- timeGuards.push(
162
- sql`${mapping.engineNowMillis} >= ${start} and ${mapping.engineNowMillis} < ${end}`,
163
- );
164
- };
165
-
166
- if (
167
- action._tag === "Enroll" ||
168
- action._tag === "Confirm" ||
169
- action._tag === "Disable" ||
170
- action._tag === "Regenerate"
171
- ) {
172
- const authorization = input.authorization;
173
-
174
- if (authorization === undefined) return reject;
175
- const { challenge, evidence } = authorization;
176
-
177
- const expectedAction = {
178
- Enroll: "enroll",
179
- Confirm: "confirm",
180
- Disable: "disable",
181
- Regenerate: "regenerate",
182
- }[action._tag];
183
-
184
- if (
185
- challenge.action !== expectedAction ||
186
- challenge.moduleId !== mapping.moduleId ||
187
- challenge.commandId !== input.commandId ||
188
- challenge.revision.subjectId !== input.subjectId ||
189
- challenge.revision.securityRevision !== snapshot.revision.securityRevision ||
190
- evidence.flowId !== challenge.flowId ||
191
- evidence.bindingDigest !== challenge.bindingDigest ||
192
- evidence.revision.subjectId !== input.subjectId ||
193
- evidence.revision.securityRevision !== snapshot.revision.securityRevision
194
- )
195
- return reject;
196
- const auth = mapping.credential;
197
-
198
- for (const revision of [...evidence.revision.credentials].sort((a, b) =>
199
- a.credentialId.localeCompare(b.credentialId),
200
- )) {
201
- const found = yield* owner.read(
202
- auth.table,
203
- equal(auth.table, { [auth.id]: revision.credentialId, [auth.subjectId]: nativeId }),
204
- { limit: 1 },
205
- );
206
-
207
- const row = found.rows[0];
208
-
209
- if (row === undefined || row[auth.revision] !== revision.revision) return reject;
210
- const condition = sql`exists(select 1 from ${auth.table} where ${both(owner.exact(auth.table, row), auth.activeCondition)})`;
211
-
212
- if (!(yield* owner.check(condition))) return reject;
213
- credentialGuards.push({ credentialId: revision.credentialId, condition });
214
- }
215
-
216
- const eligible = evidence.proofs.filter((proof) =>
217
- evidence.revision.credentials.some(
218
- (revision) => revision.credentialId === proof.credentialId,
219
- ),
220
- );
221
-
222
- if (eligible.length !== evidence.proofs.length || eligible.length === 0) return reject;
223
-
224
- const requirements = [
225
- authorization.requirement,
226
- Schema.decodeSync(AuthenticationRequirement)(
227
- mapping.subject.decodeRequirement(copiedRow(subjectRow)),
228
- ),
229
- ];
230
-
231
- const maximumAge = Math.min(
232
- policy.maximumEvidenceAgeMillis,
233
- ...requirements.map((requirement) => requirement.maximumAgeMillis),
234
- );
235
-
236
- const evidenceFactors = new Set(eligible.flatMap((proof) => proof.factors));
237
- const evidenceCredentials = new Set(eligible.map((proof) => proof.credentialId));
238
-
239
- for (const requirement of requirements) {
240
- if (
241
- !requirement.alternatives.some(
242
- (alternative) =>
243
- alternative.factors.every((factor) => evidenceFactors.has(factor)) &&
244
- evidenceCredentials.size >= alternative.minimumCredentials &&
245
- eligible.some(
246
- (proof) =>
247
- (!alternative.userVerified || proof.userVerified) &&
248
- (!alternative.phishingResistant || proof.phishingResistant),
249
- ),
250
- )
251
- )
252
- return reject;
253
- }
254
- for (const proof of eligible) {
255
- const verifiedAt = proof.verifiedAt.epochMilliseconds;
256
-
257
- if (verifiedAt > now || now - verifiedAt >= maximumAge) return reject;
258
- timeBound(verifiedAt, verifiedAt + maximumAge);
259
- }
260
- if (
261
- (current !== null && current.secret !== null) ||
262
- action._tag === "Disable" ||
263
- action._tag === "Regenerate"
264
- ) {
265
- const factors = new Set(eligible.flatMap((proof) => proof.factors));
266
-
267
- if (
268
- !(
269
- eligible.some(
270
- (proof) =>
271
- proof.userVerified && proof.phishingResistant && proof.factors.includes("possession"),
272
- ) ||
273
- (factors.has("knowledge") &&
274
- factors.has("possession") &&
275
- new Set(eligible.map((proof) => proof.credentialId)).size >= 2)
276
- )
277
- )
278
- return reject;
279
- }
280
- }
281
- if (action._tag === "Recovery" && action.reset) {
282
- const target = action.pending;
283
-
284
- if (
285
- target === undefined ||
286
- mapping.pendingCondition === undefined ||
287
- target.revision.subjectId !== input.subjectId ||
288
- target.revision.securityRevision !== snapshot.revision.securityRevision ||
289
- target.expiresAtMillis <= now
290
- )
291
- return reject;
292
- const condition = mapping.pendingCondition(target, nativeId);
293
-
294
- if (!(yield* owner.check(condition))) return reject;
295
- guards.push(condition);
296
- timeBound(0, target.expiresAtMillis);
297
- }
298
-
299
- let next: TotpRecord,
300
- semantic = false,
301
- accepted = true;
302
-
303
- if (action._tag === "Enroll") {
304
- const candidate = action.record;
305
-
306
- if (
307
- candidate.subjectId !== input.subjectId ||
308
- candidate.moduleId !== input.moduleId ||
309
- candidate.pending === null ||
310
- candidate.pending.expiresAtMillis <= now ||
311
- candidate.pending.expiresAtMillis > now + policy.enrollmentLifetimeMillis ||
312
- candidate.pending.failedAttempts !== 0 ||
313
- candidate.pending.secret.revision !== candidate.pending.revision
314
- )
315
- return reject;
316
- // Reissuing cannot erase the confirmation budget during its current enrollment lifetime.
317
- if (current !== null && current.pending !== null && current.pending.expiresAtMillis > now)
318
- return reject;
319
- if (
320
- current !== null &&
321
- (candidate.credentialId !== current.credentialId ||
322
- encodeTotpRecord({ ...candidate, pending: current.pending }) !== encodeTotpRecord(current))
323
- )
324
- return reject;
325
- if (
326
- current === null &&
327
- (candidate.secret !== null ||
328
- candidate.recoveryDigests.length !== 0 ||
329
- candidate.acceptedStep !== -1 ||
330
- candidate.failedAttempts !== 0)
331
- )
332
- return reject;
333
- next = candidate;
334
- timeBound(0, candidate.pending.expiresAtMillis);
335
- } else {
336
- if (current === null) return reject;
337
- next = { ...current };
338
- if (action._tag === "Confirm") {
339
- const pending = current.pending;
340
-
341
- if (
342
- pending === null ||
343
- pending.enrollmentId !== action.enrollmentId ||
344
- pending.expiresAtMillis <= now ||
345
- pending.failedAttempts >= policy.attemptLimit
346
- )
347
- return reject;
348
- timeBound(0, pending.expiresAtMillis);
349
- if (
350
- action.matchedStep === null ||
351
- Math.abs(Math.floor(now / 30000) - action.matchedStep) > policy.clockSkewSteps
352
- ) {
353
- next = { ...current, pending: { ...pending, failedAttempts: pending.failedAttempts + 1 } };
354
- accepted = false;
355
- } else {
356
- if (new Set(action.recoveryDigests).size !== 10) return reject;
357
- next = {
358
- ...current,
359
- secret: pending.secret,
360
- revision: pending.secret.revision,
361
- pending: null,
362
- recoveryDigests: action.recoveryDigests,
363
- acceptedStep: action.matchedStep,
364
- attemptWindow: now,
365
- failedAttempts: 0,
366
- };
367
- semantic = true;
368
- timeBound(
369
- Math.max(0, (action.matchedStep - policy.clockSkewSteps) * 30000),
370
- (action.matchedStep + policy.clockSkewSteps + 1) * 30000,
371
- );
372
- }
373
- } else if (action._tag === "Verify" || action._tag === "Recovery") {
374
- if (current.secret === null) return reject;
375
-
376
- const expired = now >= current.attemptWindow + policy.attemptWindowMillis,
377
- attempts = expired ? 0 : current.failedAttempts,
378
- start = expired ? now : current.attemptWindow;
379
-
380
- if (attempts >= policy.attemptLimit) return reject;
381
- next = { ...current, attemptWindow: start, failedAttempts: attempts + 1 };
382
- if (action._tag === "Verify") {
383
- if (
384
- action.matchedStep === null ||
385
- action.matchedStep <= current.acceptedStep ||
386
- Math.abs(Math.floor(now / 30000) - action.matchedStep) > policy.clockSkewSteps
387
- )
388
- accepted = false;
389
- else {
390
- next = { ...next, acceptedStep: action.matchedStep, failedAttempts: 0 };
391
- timeBound(
392
- Math.max(0, (action.matchedStep - policy.clockSkewSteps) * 30000),
393
- (action.matchedStep + policy.clockSkewSteps + 1) * 30000,
394
- );
395
- }
396
- } else {
397
- if (
398
- (action.reset
399
- ? policy.lostFactorRecovery !== "reset-with-recovery-code"
400
- : !policy.allowRecoveryCodeForPending) ||
401
- !current.recoveryDigests.includes(action.digest)
402
- )
403
- accepted = false;
404
- else {
405
- next = {
406
- ...next,
407
- recoveryDigests: current.recoveryDigests.filter((value) => value !== action.digest),
408
- failedAttempts: 0,
409
- };
410
- if (action.reset) {
411
- next = {
412
- ...next,
413
- secret: null,
414
- pending: null,
415
- recoveryDigests: [],
416
- revision: yield* randomId,
417
- };
418
- semantic = true;
419
- }
420
- }
421
- }
422
- } else {
423
- if (current.secret === null) return reject;
424
- semantic = true;
425
- if (action._tag === "Disable")
426
- next = {
427
- ...current,
428
- secret: null,
429
- pending: null,
430
- recoveryDigests: [],
431
- revision: yield* randomId,
432
- };
433
- else {
434
- if (new Set(action.recoveryDigests).size !== 10) return reject;
435
- next = { ...current, recoveryDigests: action.recoveryDigests };
436
- }
437
- }
438
- }
439
- next = { ...next, version: yield* randomId };
440
-
441
- const subject = mapping.subject,
442
- factor = mapping.factor,
443
- auth = mapping.credential;
444
-
445
- const subjectKey = { [subject.id]: nativeId };
446
-
447
- if (semantic) {
448
- const revision = yield* randomId,
449
- updates = {
450
- [subject.securityRevision]: revision,
451
- [subject.factorEnabled]: subject.encodeEnabled(next.secret !== null),
452
- };
453
-
454
- yield* owner.update(subject.table, subjectKey, updates);
455
- const idKey = { [auth.id]: next.credentialId, [auth.subjectId]: nativeId };
456
- const existing = yield* owner.read(auth.table, equal(auth.table, idKey), { limit: 1 });
457
-
458
- if (existing.rows.length === 0) {
459
- const values = {
460
- ...auth.encodeInsert({
461
- credentialId: next.credentialId,
462
- subjectId: nativeId,
463
- revision: next.revision,
464
- active: next.secret !== null,
465
- }),
466
- [auth.id]: next.credentialId,
467
- [auth.subjectId]: nativeId,
468
- [auth.revision]: next.revision,
469
- [auth.status]: auth.encodeStatus(next.secret !== null),
470
- };
471
-
472
- existing.rows = (yield* owner.insert(auth.table, values, {
473
- [auth.id]: next.credentialId,
474
- })).rows;
475
- } else
476
- yield* owner.update(auth.table, idKey, {
477
- [auth.revision]: next.revision,
478
- [auth.status]: auth.encodeStatus(next.secret !== null),
479
- });
480
- // Management proof observations precede its own credential/revision mutation.
481
- // Retain all unrelated credential authority checks at final commit.
482
- }
483
-
484
- const state = encodeTotpRecord(next),
485
- values = { [factor.state]: state, [factor.version]: next.version };
486
-
487
- if (factorRow === undefined) {
488
- const insert = factor.encodeInsert({ scope, state, version: next.version });
489
-
490
- invariant(
491
- insert[factor.scope] === scope &&
492
- insert[factor.state] === state &&
493
- insert[factor.version] === next.version,
494
- );
495
- factorObservation.rows = (yield* owner.insert(factor.table, insert, {
496
- [factor.scope]: scope,
497
- })).rows;
498
- } else yield* owner.update(factor.table, { [factor.scope]: scope }, values);
499
- if (commandObservation !== undefined) {
500
- const values = factor.encodeInsert({
501
- scope: commandScope,
502
- state: "totp-command/v1",
503
- version: yield* randomId,
504
- });
505
-
506
- invariant(values[factor.scope] === commandScope && values[factor.state] === "totp-command/v1");
507
- commandObservation.rows = (yield* owner.insert(factor.table, values, {
508
- [factor.scope]: commandScope,
509
- })).rows;
510
- }
511
- // Exact pre-write observations plus final readback are asserted by the common owner.
512
- // Include active subject and native time at finalization, including on rejection commits.
513
- guards.push(
514
- sql`exists(select 1 from ${subject.table} where ${both(equal(subject.table, subjectKey), subject.activeCondition)})`,
515
- );
516
- owner.postconditions.push(
517
- ...guards,
518
- ...timeGuards,
519
- ...credentialGuards
520
- .filter((guard) => !semantic || guard.credentialId !== next.credentialId)
521
- .map((guard) => guard.condition),
522
- );
523
-
524
- return accepted ? { _tag: "Accepted" as const, record: next } : reject;
525
- });
@@ -1,13 +0,0 @@
1
- import { makeTransactionExecutionKernel } from "@yielded/auth-persistence/Adapter";
2
-
3
- import { makeTransactionOwner, reportTransactionFailure } from "./transaction-owner";
4
- export type { TransactionTargetConfiguration } from "@yielded/auth-persistence/Adapter";
5
- export type { TransactionCoordinatorError } from "@yielded/auth-persistence/Adapter";
6
- export type { TransactionBound } from "@yielded/auth-persistence/Adapter";
7
- export type { TransactionExecution } from "@yielded/auth-persistence/Adapter";
8
-
9
- export const {
10
- sqlClientTransactionStandaloneGuard,
11
- makeTransactionExecution,
12
- coordinateTransactionOwner,
13
- } = makeTransactionExecutionKernel({ makeTransactionOwner, reportTransactionFailure });
@@ -1,11 +0,0 @@
1
- import { makeTransactionKernel } from "@yielded/auth-persistence/Adapter";
2
-
3
- import { drizzleQueryOperations } from "./query-operations";
4
- export type { Row } from "@yielded/auth-persistence/Adapter";
5
- export type { TransactionNativeDatabase } from "@yielded/auth-persistence/Adapter";
6
- export type { Observation } from "@yielded/auth-persistence/Adapter";
7
- export type { GuardedUpdate } from "@yielded/auth-persistence/Adapter";
8
- export type { TransactionOwner } from "@yielded/auth-persistence/Adapter";
9
-
10
- export const { reportTransactionFailure, both, makeTransactionRows, makeTransactionOwner } =
11
- makeTransactionKernel(drizzleQueryOperations);