@yielded/auth-persistence-drizzle 0.1.0-beta.0

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 (401) hide show
  1. package/README.md +17 -0
  2. package/dist/D1.d.mts +963 -0
  3. package/dist/D1.mjs +29 -0
  4. package/dist/D1.mjs.map +1 -0
  5. package/dist/Libsql.d.mts +2134 -0
  6. package/dist/Libsql.mjs +77 -0
  7. package/dist/Libsql.mjs.map +1 -0
  8. package/dist/Mysql2.d.mts +1817 -0
  9. package/dist/Mysql2.mjs +55 -0
  10. package/dist/Mysql2.mjs.map +1 -0
  11. package/dist/Pglite.d.mts +1821 -0
  12. package/dist/Pglite.mjs +53 -0
  13. package/dist/Pglite.mjs.map +1 -0
  14. package/dist/Postgres.d.mts +1821 -0
  15. package/dist/Postgres.mjs +53 -0
  16. package/dist/Postgres.mjs.map +1 -0
  17. package/dist/SqliteBun.d.mts +2129 -0
  18. package/dist/SqliteBun.mjs +70 -0
  19. package/dist/SqliteBun.mjs.map +1 -0
  20. package/dist/SqliteDo.d.mts +2181 -0
  21. package/dist/SqliteDo.mjs +105 -0
  22. package/dist/SqliteDo.mjs.map +1 -0
  23. package/dist/SqliteNode.d.mts +2129 -0
  24. package/dist/SqliteNode.mjs +70 -0
  25. package/dist/SqliteNode.mjs.map +1 -0
  26. package/dist/SqliteWasm.d.mts +2132 -0
  27. package/dist/SqliteWasm.mjs +70 -0
  28. package/dist/SqliteWasm.mjs.map +1 -0
  29. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  30. package/dist/drizzle/D1BatchStatements.d.mts +10 -0
  31. package/dist/drizzle/D1BatchStatements.mjs +8 -0
  32. package/dist/drizzle/D1BatchStatements.mjs.map +1 -0
  33. package/dist/drizzle/SuppliedService.d.mts +9 -0
  34. package/dist/drizzle/d1-emails.d.mts +61 -0
  35. package/dist/drizzle/d1-emails.mjs +578 -0
  36. package/dist/drizzle/d1-emails.mjs.map +1 -0
  37. package/dist/drizzle/d1-generated-statement.mjs +79 -0
  38. package/dist/drizzle/d1-generated-statement.mjs.map +1 -0
  39. package/dist/drizzle/d1-identity.d.mts +30 -0
  40. package/dist/drizzle/d1-identity.mjs +118 -0
  41. package/dist/drizzle/d1-identity.mjs.map +1 -0
  42. package/dist/drizzle/d1-oauth.d.mts +300 -0
  43. package/dist/drizzle/d1-oauth.mjs +76 -0
  44. package/dist/drizzle/d1-oauth.mjs.map +1 -0
  45. package/dist/drizzle/d1-passkey.d.mts +47 -0
  46. package/dist/drizzle/d1-passkey.mjs +95 -0
  47. package/dist/drizzle/d1-passkey.mjs.map +1 -0
  48. package/dist/drizzle/d1-password-prepared.d.mts +24 -0
  49. package/dist/drizzle/d1-password-prepared.mjs +460 -0
  50. package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
  51. package/dist/drizzle/d1-passwords.d.mts +86 -0
  52. package/dist/drizzle/d1-passwords.mjs +1003 -0
  53. package/dist/drizzle/d1-passwords.mjs.map +1 -0
  54. package/dist/drizzle/d1-phone.d.mts +23 -0
  55. package/dist/drizzle/d1-phone.mjs +30 -0
  56. package/dist/drizzle/d1-phone.mjs.map +1 -0
  57. package/dist/drizzle/d1-planning.d.mts +11 -0
  58. package/dist/drizzle/d1-planning.mjs +43 -0
  59. package/dist/drizzle/d1-planning.mjs.map +1 -0
  60. package/dist/drizzle/d1-proofs.d.mts +79 -0
  61. package/dist/drizzle/d1-proofs.mjs +829 -0
  62. package/dist/drizzle/d1-proofs.mjs.map +1 -0
  63. package/dist/drizzle/d1-sessions.d.mts +66 -0
  64. package/dist/drizzle/d1-sessions.mjs +965 -0
  65. package/dist/drizzle/d1-sessions.mjs.map +1 -0
  66. package/dist/drizzle/d1-totp.d.mts +23 -0
  67. package/dist/drizzle/d1-totp.mjs +27 -0
  68. package/dist/drizzle/d1-totp.mjs.map +1 -0
  69. package/dist/drizzle/email-model.d.mts +30 -0
  70. package/dist/drizzle/email-model.mjs +2 -0
  71. package/dist/drizzle/email-registration.d.mts +29 -0
  72. package/dist/drizzle/email-registration.mjs +236 -0
  73. package/dist/drizzle/email-registration.mjs.map +1 -0
  74. package/dist/drizzle/email-sql.d.mts +1 -0
  75. package/dist/drizzle/email-sql.mjs +9 -0
  76. package/dist/drizzle/email-sql.mjs.map +1 -0
  77. package/dist/drizzle/email-target.d.mts +19 -0
  78. package/dist/drizzle/email-target.mjs +72 -0
  79. package/dist/drizzle/email-target.mjs.map +1 -0
  80. package/dist/drizzle/model.d.mts +245 -0
  81. package/dist/drizzle/model.mjs +55 -0
  82. package/dist/drizzle/model.mjs.map +1 -0
  83. package/dist/drizzle/mysql-emails.d.mts +70 -0
  84. package/dist/drizzle/mysql-emails.mjs +38 -0
  85. package/dist/drizzle/mysql-emails.mjs.map +1 -0
  86. package/dist/drizzle/mysql-identity.d.mts +21 -0
  87. package/dist/drizzle/mysql-identity.mjs +93 -0
  88. package/dist/drizzle/mysql-identity.mjs.map +1 -0
  89. package/dist/drizzle/mysql-password-prepared.d.mts +29 -0
  90. package/dist/drizzle/mysql-password-prepared.mjs +16 -0
  91. package/dist/drizzle/mysql-password-prepared.mjs.map +1 -0
  92. package/dist/drizzle/mysql-passwords.d.mts +85 -0
  93. package/dist/drizzle/mysql-passwords.mjs +38 -0
  94. package/dist/drizzle/mysql-passwords.mjs.map +1 -0
  95. package/dist/drizzle/mysql-proofs.d.mts +74 -0
  96. package/dist/drizzle/mysql-proofs.mjs +23 -0
  97. package/dist/drizzle/mysql-proofs.mjs.map +1 -0
  98. package/dist/drizzle/mysql-sessions.d.mts +91 -0
  99. package/dist/drizzle/mysql-sessions.mjs +53 -0
  100. package/dist/drizzle/mysql-sessions.mjs.map +1 -0
  101. package/dist/drizzle/mysql.d.mts +69 -0
  102. package/dist/drizzle/mysql.mjs +218 -0
  103. package/dist/drizzle/mysql.mjs.map +1 -0
  104. package/dist/drizzle/oauth-accounts.mjs +358 -0
  105. package/dist/drizzle/oauth-accounts.mjs.map +1 -0
  106. package/dist/drizzle/oauth-connected-access.mjs +210 -0
  107. package/dist/drizzle/oauth-connected-access.mjs.map +1 -0
  108. package/dist/drizzle/oauth-connected-collection.mjs +202 -0
  109. package/dist/drizzle/oauth-connected-collection.mjs.map +1 -0
  110. package/dist/drizzle/oauth-connected-custody.mjs +146 -0
  111. package/dist/drizzle/oauth-connected-custody.mjs.map +1 -0
  112. package/dist/drizzle/oauth-connected-drivers.mjs +76 -0
  113. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
  114. package/dist/drizzle/oauth-connected-flow.mjs +247 -0
  115. package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
  116. package/dist/drizzle/oauth-connected-input.mjs +103 -0
  117. package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
  118. package/dist/drizzle/oauth-connected-maintenance.mjs +214 -0
  119. package/dist/drizzle/oauth-connected-maintenance.mjs.map +1 -0
  120. package/dist/drizzle/oauth-connected-management.mjs +228 -0
  121. package/dist/drizzle/oauth-connected-management.mjs.map +1 -0
  122. package/dist/drizzle/oauth-connected-model.d.mts +277 -0
  123. package/dist/drizzle/oauth-connected-model.mjs +22 -0
  124. package/dist/drizzle/oauth-connected-model.mjs.map +1 -0
  125. package/dist/drizzle/oauth-connected-reference.d.mts +16 -0
  126. package/dist/drizzle/oauth-connected-reference.mjs +53 -0
  127. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -0
  128. package/dist/drizzle/oauth-connected-settlement.mjs +117 -0
  129. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -0
  130. package/dist/drizzle/oauth-connected-state.d.mts +1954 -0
  131. package/dist/drizzle/oauth-connected-state.mjs +422 -0
  132. package/dist/drizzle/oauth-connected-state.mjs.map +1 -0
  133. package/dist/drizzle/oauth-connected-target.d.mts +752 -0
  134. package/dist/drizzle/oauth-connected-target.mjs +91 -0
  135. package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
  136. package/dist/drizzle/oauth-drivers.mjs +51 -0
  137. package/dist/drizzle/oauth-drivers.mjs.map +1 -0
  138. package/dist/drizzle/oauth-flow.d.mts +22 -0
  139. package/dist/drizzle/oauth-flow.mjs +253 -0
  140. package/dist/drizzle/oauth-flow.mjs.map +1 -0
  141. package/dist/drizzle/oauth-input.mjs +127 -0
  142. package/dist/drizzle/oauth-input.mjs.map +1 -0
  143. package/dist/drizzle/oauth-model.d.mts +461 -0
  144. package/dist/drizzle/oauth-model.mjs +49 -0
  145. package/dist/drizzle/oauth-model.mjs.map +1 -0
  146. package/dist/drizzle/oauth-mysql.mjs +8 -0
  147. package/dist/drizzle/oauth-mysql.mjs.map +1 -0
  148. package/dist/drizzle/oauth-owner.d.mts +10 -0
  149. package/dist/drizzle/oauth-owner.mjs +10 -0
  150. package/dist/drizzle/oauth-owner.mjs.map +1 -0
  151. package/dist/drizzle/oauth-registration.d.mts +5 -0
  152. package/dist/drizzle/oauth-registration.mjs +374 -0
  153. package/dist/drizzle/oauth-registration.mjs.map +1 -0
  154. package/dist/drizzle/oauth-state.mjs +107 -0
  155. package/dist/drizzle/oauth-state.mjs.map +1 -0
  156. package/dist/drizzle/oauth-target.d.mts +109 -0
  157. package/dist/drizzle/oauth-target.mjs +246 -0
  158. package/dist/drizzle/oauth-target.mjs.map +1 -0
  159. package/dist/drizzle/passkey-drivers.mjs +34 -0
  160. package/dist/drizzle/passkey-drivers.mjs.map +1 -0
  161. package/dist/drizzle/passkey-kernel.mjs +8 -0
  162. package/dist/drizzle/passkey-kernel.mjs.map +1 -0
  163. package/dist/drizzle/passkey-model.d.mts +43 -0
  164. package/dist/drizzle/passkey-model.mjs +8 -0
  165. package/dist/drizzle/passkey-model.mjs.map +1 -0
  166. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +12 -0
  167. package/dist/drizzle/passkey-registration-ceremony-model.mjs +2 -0
  168. package/dist/drizzle/passkey-state.mjs +7 -0
  169. package/dist/drizzle/passkey-state.mjs.map +1 -0
  170. package/dist/drizzle/passkey-target.d.mts +2 -0
  171. package/dist/drizzle/passkey-target.mjs +7 -0
  172. package/dist/drizzle/passkey-target.mjs.map +1 -0
  173. package/dist/drizzle/passkey-write-drivers.mjs +32 -0
  174. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
  175. package/dist/drizzle/passkey-write-model.d.mts +20 -0
  176. package/dist/drizzle/passkey-write-model.mjs +9 -0
  177. package/dist/drizzle/passkey-write-model.mjs.map +1 -0
  178. package/dist/drizzle/passkey-write-target.d.mts +5 -0
  179. package/dist/drizzle/passkey-write-target.mjs +7 -0
  180. package/dist/drizzle/passkey-write-target.mjs.map +1 -0
  181. package/dist/drizzle/password-model.d.mts +24 -0
  182. package/dist/drizzle/password-model.mjs +2 -0
  183. package/dist/drizzle/password-prepared-model.d.mts +92 -0
  184. package/dist/drizzle/password-prepared-model.mjs +11 -0
  185. package/dist/drizzle/password-prepared-model.mjs.map +1 -0
  186. package/dist/drizzle/password-prepared-sql.mjs +389 -0
  187. package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
  188. package/dist/drizzle/password-prepared-state.mjs +104 -0
  189. package/dist/drizzle/password-prepared-state.mjs.map +1 -0
  190. package/dist/drizzle/password-prepared-target.d.mts +11 -0
  191. package/dist/drizzle/password-prepared-target.mjs +56 -0
  192. package/dist/drizzle/password-prepared-target.mjs.map +1 -0
  193. package/dist/drizzle/password-registration.d.mts +7 -0
  194. package/dist/drizzle/password-registration.mjs +134 -0
  195. package/dist/drizzle/password-registration.mjs.map +1 -0
  196. package/dist/drizzle/password-sql.d.mts +1 -0
  197. package/dist/drizzle/password-sql.mjs +9 -0
  198. package/dist/drizzle/password-sql.mjs.map +1 -0
  199. package/dist/drizzle/password-target.d.mts +16 -0
  200. package/dist/drizzle/password-target.mjs +61 -0
  201. package/dist/drizzle/password-target.mjs.map +1 -0
  202. package/dist/drizzle/pg-emails.d.mts +71 -0
  203. package/dist/drizzle/pg-emails.mjs +38 -0
  204. package/dist/drizzle/pg-emails.mjs.map +1 -0
  205. package/dist/drizzle/pg-password-prepared.d.mts +30 -0
  206. package/dist/drizzle/pg-password-prepared.mjs +16 -0
  207. package/dist/drizzle/pg-password-prepared.mjs.map +1 -0
  208. package/dist/drizzle/pg-passwords.d.mts +86 -0
  209. package/dist/drizzle/pg-passwords.mjs +38 -0
  210. package/dist/drizzle/pg-passwords.mjs.map +1 -0
  211. package/dist/drizzle/pg-proofs.d.mts +75 -0
  212. package/dist/drizzle/pg-proofs.mjs +22 -0
  213. package/dist/drizzle/pg-proofs.mjs.map +1 -0
  214. package/dist/drizzle/pg-sessions.d.mts +92 -0
  215. package/dist/drizzle/pg-sessions.mjs +53 -0
  216. package/dist/drizzle/pg-sessions.mjs.map +1 -0
  217. package/dist/drizzle/pg.d.mts +80 -0
  218. package/dist/drizzle/pg.mjs +289 -0
  219. package/dist/drizzle/pg.mjs.map +1 -0
  220. package/dist/drizzle/phone-model.d.mts +113 -0
  221. package/dist/drizzle/phone-model.mjs +39 -0
  222. package/dist/drizzle/phone-model.mjs.map +1 -0
  223. package/dist/drizzle/phone-state.mjs +14 -0
  224. package/dist/drizzle/phone-state.mjs.map +1 -0
  225. package/dist/drizzle/phone-target.d.mts +14 -0
  226. package/dist/drizzle/phone-target.mjs +168 -0
  227. package/dist/drizzle/phone-target.mjs.map +1 -0
  228. package/dist/drizzle/proof-model.d.mts +21 -0
  229. package/dist/drizzle/proof-model.mjs +2 -0
  230. package/dist/drizzle/proof-sql.d.mts +1 -0
  231. package/dist/drizzle/proof-sql.mjs +8 -0
  232. package/dist/drizzle/proof-sql.mjs.map +1 -0
  233. package/dist/drizzle/proof-target.d.mts +11 -0
  234. package/dist/drizzle/proof-target.mjs +36 -0
  235. package/dist/drizzle/proof-target.mjs.map +1 -0
  236. package/dist/drizzle/query-operations.mjs +27 -0
  237. package/dist/drizzle/query-operations.mjs.map +1 -0
  238. package/dist/drizzle/session-model.d.mts +31 -0
  239. package/dist/drizzle/session-model.mjs +2 -0
  240. package/dist/drizzle/session-sql.mjs +8 -0
  241. package/dist/drizzle/session-sql.mjs.map +1 -0
  242. package/dist/drizzle/session-target.d.mts +27 -0
  243. package/dist/drizzle/session-target.mjs +46 -0
  244. package/dist/drizzle/session-target.mjs.map +1 -0
  245. package/dist/drizzle/sqlite-emails.mjs +45 -0
  246. package/dist/drizzle/sqlite-emails.mjs.map +1 -0
  247. package/dist/drizzle/sqlite-identity.mjs +90 -0
  248. package/dist/drizzle/sqlite-identity.mjs.map +1 -0
  249. package/dist/drizzle/sqlite-password-prepared.mjs +21 -0
  250. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -0
  251. package/dist/drizzle/sqlite-passwords.mjs +49 -0
  252. package/dist/drizzle/sqlite-passwords.mjs.map +1 -0
  253. package/dist/drizzle/sqlite-proofs.mjs +29 -0
  254. package/dist/drizzle/sqlite-proofs.mjs.map +1 -0
  255. package/dist/drizzle/sqlite-sessions.mjs +74 -0
  256. package/dist/drizzle/sqlite-sessions.mjs.map +1 -0
  257. package/dist/drizzle/sqlite.d.mts +77 -0
  258. package/dist/drizzle/sqlite.mjs +217 -0
  259. package/dist/drizzle/sqlite.mjs.map +1 -0
  260. package/dist/drizzle/standalone-guard.mjs +17 -0
  261. package/dist/drizzle/standalone-guard.mjs.map +1 -0
  262. package/dist/drizzle/step-up-model.d.mts +16 -0
  263. package/dist/drizzle/step-up-model.mjs +2 -0
  264. package/dist/drizzle/table-model.d.mts +11 -0
  265. package/dist/drizzle/totp-model.d.mts +82 -0
  266. package/dist/drizzle/totp-model.mjs +13 -0
  267. package/dist/drizzle/totp-model.mjs.map +1 -0
  268. package/dist/drizzle/totp-state.d.mts +37 -0
  269. package/dist/drizzle/totp-state.mjs +287 -0
  270. package/dist/drizzle/totp-state.mjs.map +1 -0
  271. package/dist/drizzle/totp-target.d.mts +14 -0
  272. package/dist/drizzle/totp-target.mjs +81 -0
  273. package/dist/drizzle/totp-target.mjs.map +1 -0
  274. package/dist/drizzle/transaction-execution.d.mts +2 -0
  275. package/dist/drizzle/transaction-execution.mjs +11 -0
  276. package/dist/drizzle/transaction-execution.mjs.map +1 -0
  277. package/dist/drizzle/transaction-mysql.mjs +47 -0
  278. package/dist/drizzle/transaction-mysql.mjs.map +1 -0
  279. package/dist/drizzle/transaction-owner.d.mts +2 -0
  280. package/dist/drizzle/transaction-owner.mjs +8 -0
  281. package/dist/drizzle/transaction-owner.mjs.map +1 -0
  282. package/dist/index.d.mts +27 -0
  283. package/dist/index.mjs +27 -0
  284. package/dist/internal/drizzle-migrations.mjs +19 -0
  285. package/dist/internal/drizzle-migrations.mjs.map +1 -0
  286. package/dist/internal/drizzle-postgres.mjs +37 -0
  287. package/dist/internal/drizzle-postgres.mjs.map +1 -0
  288. package/dist/internal/drizzle-sqlite.mjs +35 -0
  289. package/dist/internal/drizzle-sqlite.mjs.map +1 -0
  290. package/package.json +1 -0
  291. package/src/D1.ts +136 -0
  292. package/src/Libsql.ts +257 -0
  293. package/src/Mysql2.ts +184 -0
  294. package/src/Pglite.ts +174 -0
  295. package/src/Postgres.ts +174 -0
  296. package/src/SqliteBun.ts +258 -0
  297. package/src/SqliteDo.ts +473 -0
  298. package/src/SqliteNode.ts +259 -0
  299. package/src/SqliteWasm.ts +263 -0
  300. package/src/drizzle/D1BatchStatements.ts +10 -0
  301. package/src/drizzle/SuppliedService.ts +10 -0
  302. package/src/drizzle/d1-emails.ts +1829 -0
  303. package/src/drizzle/d1-generated-statement.ts +129 -0
  304. package/src/drizzle/d1-identity.ts +375 -0
  305. package/src/drizzle/d1-oauth.ts +340 -0
  306. package/src/drizzle/d1-passkey.ts +373 -0
  307. package/src/drizzle/d1-password-prepared.ts +1270 -0
  308. package/src/drizzle/d1-passwords.ts +2656 -0
  309. package/src/drizzle/d1-phone.ts +96 -0
  310. package/src/drizzle/d1-planning.ts +104 -0
  311. package/src/drizzle/d1-proofs.ts +2305 -0
  312. package/src/drizzle/d1-sessions.ts +2857 -0
  313. package/src/drizzle/d1-totp.ts +78 -0
  314. package/src/drizzle/email-model.ts +202 -0
  315. package/src/drizzle/email-registration.ts +698 -0
  316. package/src/drizzle/email-sql.ts +25 -0
  317. package/src/drizzle/email-target.ts +243 -0
  318. package/src/drizzle/model.ts +459 -0
  319. package/src/drizzle/mysql-emails.ts +321 -0
  320. package/src/drizzle/mysql-identity.ts +324 -0
  321. package/src/drizzle/mysql-password-prepared.ts +204 -0
  322. package/src/drizzle/mysql-passwords.ts +339 -0
  323. package/src/drizzle/mysql-proofs.ts +181 -0
  324. package/src/drizzle/mysql-sessions.ts +741 -0
  325. package/src/drizzle/mysql.ts +687 -0
  326. package/src/drizzle/oauth-accounts.ts +804 -0
  327. package/src/drizzle/oauth-connected-access.ts +354 -0
  328. package/src/drizzle/oauth-connected-collection.ts +324 -0
  329. package/src/drizzle/oauth-connected-custody.ts +277 -0
  330. package/src/drizzle/oauth-connected-drivers.ts +465 -0
  331. package/src/drizzle/oauth-connected-flow.ts +441 -0
  332. package/src/drizzle/oauth-connected-input.ts +127 -0
  333. package/src/drizzle/oauth-connected-maintenance.ts +345 -0
  334. package/src/drizzle/oauth-connected-management.ts +365 -0
  335. package/src/drizzle/oauth-connected-model.ts +347 -0
  336. package/src/drizzle/oauth-connected-reference.ts +112 -0
  337. package/src/drizzle/oauth-connected-settlement.ts +226 -0
  338. package/src/drizzle/oauth-connected-state.ts +845 -0
  339. package/src/drizzle/oauth-connected-target.ts +264 -0
  340. package/src/drizzle/oauth-drivers.ts +569 -0
  341. package/src/drizzle/oauth-flow.ts +462 -0
  342. package/src/drizzle/oauth-input.ts +201 -0
  343. package/src/drizzle/oauth-model.ts +617 -0
  344. package/src/drizzle/oauth-mysql.ts +10 -0
  345. package/src/drizzle/oauth-owner.ts +29 -0
  346. package/src/drizzle/oauth-registration.ts +640 -0
  347. package/src/drizzle/oauth-state.ts +215 -0
  348. package/src/drizzle/oauth-target.ts +750 -0
  349. package/src/drizzle/passkey-drivers.ts +385 -0
  350. package/src/drizzle/passkey-kernel.ts +4 -0
  351. package/src/drizzle/passkey-model.ts +153 -0
  352. package/src/drizzle/passkey-registration-ceremony-model.ts +32 -0
  353. package/src/drizzle/passkey-state.ts +3 -0
  354. package/src/drizzle/passkey-target.ts +23 -0
  355. package/src/drizzle/passkey-write-drivers.ts +395 -0
  356. package/src/drizzle/passkey-write-model.ts +103 -0
  357. package/src/drizzle/passkey-write-target.ts +9 -0
  358. package/src/drizzle/password-model.ts +169 -0
  359. package/src/drizzle/password-prepared-model.ts +259 -0
  360. package/src/drizzle/password-prepared-sql.ts +1191 -0
  361. package/src/drizzle/password-prepared-state.ts +231 -0
  362. package/src/drizzle/password-prepared-target.ts +160 -0
  363. package/src/drizzle/password-registration.ts +363 -0
  364. package/src/drizzle/password-sql.ts +13 -0
  365. package/src/drizzle/password-target.ts +224 -0
  366. package/src/drizzle/pg-emails.ts +321 -0
  367. package/src/drizzle/pg-password-prepared.ts +205 -0
  368. package/src/drizzle/pg-passwords.ts +338 -0
  369. package/src/drizzle/pg-proofs.ts +191 -0
  370. package/src/drizzle/pg-sessions.ts +750 -0
  371. package/src/drizzle/pg.ts +984 -0
  372. package/src/drizzle/phone-model.ts +190 -0
  373. package/src/drizzle/phone-state.ts +21 -0
  374. package/src/drizzle/phone-target.ts +472 -0
  375. package/src/drizzle/proof-model.ts +139 -0
  376. package/src/drizzle/proof-sql.ts +10 -0
  377. package/src/drizzle/proof-target.ts +122 -0
  378. package/src/drizzle/query-operations.ts +43 -0
  379. package/src/drizzle/session-model.ts +215 -0
  380. package/src/drizzle/session-sql.ts +14 -0
  381. package/src/drizzle/session-target.ts +338 -0
  382. package/src/drizzle/sqlite-emails.ts +366 -0
  383. package/src/drizzle/sqlite-identity.ts +344 -0
  384. package/src/drizzle/sqlite-password-prepared.ts +260 -0
  385. package/src/drizzle/sqlite-passwords.ts +497 -0
  386. package/src/drizzle/sqlite-proofs.ts +202 -0
  387. package/src/drizzle/sqlite-sessions.ts +971 -0
  388. package/src/drizzle/sqlite.ts +705 -0
  389. package/src/drizzle/standalone-guard.ts +32 -0
  390. package/src/drizzle/step-up-model.ts +73 -0
  391. package/src/drizzle/table-model.ts +9 -0
  392. package/src/drizzle/totp-model.ts +92 -0
  393. package/src/drizzle/totp-state.ts +525 -0
  394. package/src/drizzle/totp-target.ts +308 -0
  395. package/src/drizzle/transaction-execution.ts +13 -0
  396. package/src/drizzle/transaction-mysql.ts +106 -0
  397. package/src/drizzle/transaction-owner.ts +11 -0
  398. package/src/index.ts +378 -0
  399. package/src/internal/drizzle-migrations.ts +29 -0
  400. package/src/internal/drizzle-postgres.ts +83 -0
  401. package/src/internal/drizzle-sqlite.ts +81 -0
@@ -0,0 +1,129 @@
1
+ import { sql, type SQL } from "drizzle-orm";
2
+ import { Schema } from "effect";
3
+ import type { Statement } from "effect/unstable/sql/Statement";
4
+
5
+ // oxlint-disable-next-line no-restricted-properties -- Statement.compile exposes untyped native SQL parameters.
6
+ const valuesJson = Schema.encodeUnknownSync(
7
+ Schema.fromJsonString(
8
+ Schema.Array(Schema.Union([Schema.String, Schema.Finite, Schema.Boolean, Schema.Null])),
9
+ ),
10
+ );
11
+
12
+ const hex = Schema.encodeSync(Schema.Uint8ArrayFromHex);
13
+ // oxlint-disable-next-line no-restricted-properties -- D1 binding parameters are untyped native views.
14
+ const viewElements = Schema.decodeUnknownSync(Schema.Array(Schema.Finite));
15
+
16
+ // oxlint-disable-next-line no-restricted-properties -- D1 also accepts untyped byte-array parameters.
17
+ const byteElements = Schema.decodeUnknownSync(
18
+ Schema.Array(Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(256))),
19
+ );
20
+
21
+ /** Private compiler boundary for generated statements only. SQLite numbered
22
+ * parameters let every JSON lookup share one binding without a CTE name. */
23
+ export const compactD1GeneratedStatement = <A extends object>(
24
+ client: {
25
+ readonly unsafe: <Row extends object>(
26
+ sql: string,
27
+ params?: ReadonlyArray<unknown>,
28
+ ) => Statement<Row>;
29
+ },
30
+ statement: Statement<A>,
31
+ invalid: () => unknown,
32
+ ): Statement<A> => {
33
+ const [source, parameters] = statement.compile();
34
+
35
+ if (parameters.length <= 100 && new TextEncoder().encode(source).length <= 100_000)
36
+ return statement;
37
+ const blobs = new Set<number>();
38
+ const numbers = new Set<number>();
39
+
40
+ const values = parameters.map((value, index) => {
41
+ if (typeof value === "number" || typeof value === "boolean") numbers.add(index);
42
+
43
+ const bytes =
44
+ value instanceof ArrayBuffer
45
+ ? new Uint8Array(value)
46
+ : ArrayBuffer.isView(value)
47
+ ? // Match D1's Array.from(view) conversion, including empty DataView.
48
+ Uint8Array.from(viewElements(Array.from(value as unknown as ArrayLike<unknown>)))
49
+ : Array.isArray(value)
50
+ ? Uint8Array.from(byteElements(value))
51
+ : undefined;
52
+
53
+ if (bytes === undefined) return value;
54
+ blobs.add(index);
55
+
56
+ return hex(bytes);
57
+ });
58
+
59
+ const encoded = valuesJson(values);
60
+
61
+ let index = 0,
62
+ result = "";
63
+
64
+ let quote: "'" | '"' | "`" | "]" | undefined;
65
+ let comment: "line" | "block" | undefined;
66
+
67
+ for (let offset = 0; offset < source.length; offset++) {
68
+ const char = source[offset]!,
69
+ next = source[offset + 1];
70
+
71
+ if (comment !== undefined) {
72
+ result += char;
73
+ if (comment === "line" && char === "\n") comment = undefined;
74
+ else if (comment === "block" && char === "*" && next === "/") {
75
+ result += next;
76
+ offset++;
77
+ comment = undefined;
78
+ }
79
+ } else if (quote !== undefined) {
80
+ result += char;
81
+ if (char === quote) {
82
+ if (next === quote && quote !== "]") {
83
+ result += next;
84
+ offset++;
85
+ } else quote = undefined;
86
+ }
87
+ } else if (char === "'" || char === '"' || char === "`" || char === "[") {
88
+ quote = char === "[" ? "]" : char;
89
+ result += char;
90
+ } else if ((char === "-" && next === "-") || (char === "/" && next === "*")) {
91
+ comment = char === "-" ? "line" : "block";
92
+ result += char + next;
93
+ offset++;
94
+ } else if (char === "?") {
95
+ if (next !== undefined && next >= "0" && next <= "9") throw invalid();
96
+ const lookup = `json_extract(?1, '$[${index}]')`;
97
+
98
+ result += blobs.has(index)
99
+ ? `unhex(${lookup})`
100
+ : numbers.has(index)
101
+ ? `cast(${lookup} as real)`
102
+ : lookup;
103
+ index++;
104
+ } else result += char;
105
+ }
106
+ if (
107
+ index !== parameters.length ||
108
+ quote !== undefined ||
109
+ comment === "block" ||
110
+ new TextEncoder().encode(result).length > 100_000
111
+ )
112
+ throw invalid();
113
+
114
+ return client.unsafe<A>(result, [encoded]);
115
+ };
116
+
117
+ /** Keep bounded credential vectors below D1's expression-tree depth ceiling. */
118
+ export const balancedD1And = (...conditions: ReadonlyArray<SQL | undefined>): SQL | undefined => {
119
+ const parts = conditions.filter((condition) => condition !== undefined);
120
+
121
+ const join = (start: number, end: number): SQL => {
122
+ if (end - start === 1) return sql`(${parts[start]!})`;
123
+ const middle = start + Math.floor((end - start) / 2);
124
+
125
+ return sql`(${join(start, middle)} and ${join(middle, end)})`;
126
+ };
127
+
128
+ return parts.length === 0 ? undefined : join(0, parts.length);
129
+ };
@@ -0,0 +1,375 @@
1
+ import type { D1Client } from "@effect/sql-d1/D1Client";
2
+ import {
3
+ ExternalIdentityMutation,
4
+ type ExternalIdentity,
5
+ IdentityConflict,
6
+ IdentityUnavailable,
7
+ SubjectProvisioned,
8
+ SubjectProvisioner,
9
+ type SubjectProvisioningInput,
10
+ } from "@yielded/auth/Identity";
11
+ import { reportPersistenceFailure } from "@yielded/auth/Persistence";
12
+ import type { SubjectId } from "@yielded/auth/Schema";
13
+ /* oxlint-disable no-explicit-any -- D1 batch bridges Drizzle SQL objects to Effect SQL Statements at this adapter boundary. */
14
+ import {
15
+ and,
16
+ eq,
17
+ getTableColumns,
18
+ is,
19
+ sql,
20
+ SQL,
21
+ type AnyRelations,
22
+ type InferInsertModel,
23
+ type Table,
24
+ } from "drizzle-orm";
25
+ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
26
+ import type { AnySQLiteTable, SQLiteColumn } from "drizzle-orm/sqlite-core";
27
+ import { Cause, Effect, Schema } from "effect";
28
+
29
+ import {
30
+ column,
31
+ isMappedConstraintConflict,
32
+ provisioningFingerprint,
33
+ type D1ExternalIdentityMapping,
34
+ type D1GeneratedIdentityMapping,
35
+ type D1SubjectProvisioningMapping,
36
+ } from "./model";
37
+
38
+ type RuntimeDatabase = EffectSQLiteD1Database<any> & { readonly $client: D1Client };
39
+ const unavailable = () => IdentityUnavailable.make();
40
+ const isIdentityFailure = Schema.is(Schema.Union([IdentityConflict, IdentityUnavailable]));
41
+
42
+ const mapUnavailable = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
43
+ reportPersistenceFailure(effect, isIdentityFailure).pipe(
44
+ Effect.catchCause((cause) =>
45
+ Effect.failCause(
46
+ Cause.map(cause, (error) => (isIdentityFailure(error) ? error : unavailable())),
47
+ ),
48
+ ),
49
+ );
50
+
51
+ const selectFields = <T extends Table>(
52
+ table: T,
53
+ values: InferInsertModel<T>,
54
+ ): Record<string, unknown> => {
55
+ const columns = getTableColumns(table) as Record<string, SQLiteColumn>;
56
+
57
+ const fields = Object.fromEntries(
58
+ Object.entries(values)
59
+ .filter(([, value]) => value !== undefined)
60
+ .map(([key, value]) => [
61
+ key,
62
+ is(value, SQL) ? value : sql`${sql.param(value, columns[key] as SQLiteColumn)}`,
63
+ ]),
64
+ );
65
+
66
+ for (const [key, mapped] of Object.entries(columns)) {
67
+ if (
68
+ fields[key] !== undefined ||
69
+ (
70
+ mapped as SQLiteColumn & { readonly shouldDisableInsert: () => boolean }
71
+ ).shouldDisableInsert()
72
+ )
73
+ continue;
74
+ if (mapped.default !== null && mapped.default !== undefined) continue;
75
+
76
+ const value =
77
+ mapped.defaultFn !== undefined
78
+ ? mapped.defaultFn()
79
+ : !mapped.default && mapped.onUpdateFn !== undefined
80
+ ? mapped.onUpdateFn()
81
+ : undefined;
82
+
83
+ if (value !== undefined || mapped.defaultFn !== undefined || mapped.onUpdateFn !== undefined)
84
+ fields[key] = is(value, SQL) ? value : sql`${sql.param(value, mapped)}`;
85
+ }
86
+
87
+ return fields;
88
+ };
89
+
90
+ /**
91
+ * D1 provisioning is an ordered atomic batch. The receipt captures the
92
+ * database-generated subject id from the first insert via last_insert_rowid;
93
+ * the optional identifier then reads that stable id from the receipt.
94
+ */
95
+ export const makeD1SubjectProvisioningServices = <
96
+ Subject extends AnySQLiteTable,
97
+ Identifier extends AnySQLiteTable,
98
+ Request extends AnySQLiteTable,
99
+ NativeId,
100
+ >(
101
+ database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
102
+ mapping: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>,
103
+ ) => {
104
+ const db = database as RuntimeDatabase;
105
+ const requestTable = mapping.provisioningRequest.table;
106
+
107
+ const requestIdColumn = column(
108
+ requestTable,
109
+ mapping.provisioningRequest.requestId,
110
+ ) as SQLiteColumn;
111
+
112
+ const requestFingerprintColumn = column(
113
+ requestTable,
114
+ mapping.provisioningRequest.fingerprint,
115
+ ) as SQLiteColumn;
116
+
117
+ const requestSubjectColumn = column(
118
+ requestTable,
119
+ mapping.provisioningRequest.subjectId,
120
+ ) as SQLiteColumn;
121
+
122
+ const findReceipt = Effect.fn("DrizzleD1Identity.findReceipt")(function* (requestId: string) {
123
+ const rows = yield* db
124
+ .select({ fingerprint: requestFingerprintColumn, subjectId: requestSubjectColumn })
125
+ .from(requestTable as any)
126
+ .where(eq(requestIdColumn, requestId))
127
+ .limit(1);
128
+
129
+ return rows[0];
130
+ });
131
+
132
+ const provision = Effect.fn("DrizzleD1Identity.provision")(function* (
133
+ input: SubjectProvisioningInput,
134
+ ) {
135
+ const fingerprint = provisioningFingerprint(input);
136
+ const existing = yield* findReceipt(input.requestId);
137
+
138
+ if (existing !== undefined) {
139
+ if (existing.fingerprint !== fingerprint) return yield* IdentityConflict.make();
140
+ const subjectId = yield* mapping.subjectId.toSubject(existing.subjectId as NativeId);
141
+
142
+ return SubjectProvisioned.make({ subjectId });
143
+ }
144
+
145
+ const allocated =
146
+ mapping.subject.allocateId === undefined
147
+ ? mapping.subject.allocateIdSync?.()
148
+ : yield* mapping.subject.allocateId;
149
+
150
+ const subjectQuery = db
151
+ .insert(mapping.subject.table as any)
152
+ .values(mapping.subject.encodeInsert(input, allocated) as any)
153
+ .toSQL();
154
+
155
+ const statements = [db.$client.unsafe(subjectQuery.sql, subjectQuery.params)];
156
+
157
+ if (allocated !== undefined) {
158
+ const requestQuery = db
159
+ .insert(requestTable as any)
160
+ .values(
161
+ mapping.provisioningRequest.encodeInsert(input.requestId, fingerprint, allocated) as any,
162
+ )
163
+ .toSQL();
164
+
165
+ statements.push(db.$client.unsafe(requestQuery.sql, requestQuery.params));
166
+
167
+ if (input.identifier !== undefined) {
168
+ const identifierQuery = db
169
+ .insert(mapping.identifier.table as any)
170
+ .values(
171
+ mapping.identifier.encodeInsert(input.identifier, allocated, input.verifiedAt) as any,
172
+ )
173
+ .toSQL();
174
+
175
+ statements.push(db.$client.unsafe(identifierQuery.sql, identifierQuery.params));
176
+ }
177
+ } else {
178
+ if (mapping.d1.generatedRowIdAlias === undefined) return yield* unavailable();
179
+
180
+ const mappedColumnNames = Object.values(getTableColumns(mapping.subject.table)).map((value) =>
181
+ value.name.toLowerCase(),
182
+ );
183
+
184
+ if (mappedColumnNames.includes(mapping.d1.generatedRowIdAlias.toLowerCase()))
185
+ return yield* unavailable();
186
+ const subjectIdColumn = column(mapping.subject.table, mapping.subject.id);
187
+ const rowId = sql.identifier(mapping.d1.generatedRowIdAlias);
188
+
189
+ const requestQuery = db
190
+ .insert(requestTable as any)
191
+ .values({
192
+ ...mapping.d1.requestInsertWithoutSubject(input.requestId, fingerprint),
193
+ [mapping.provisioningRequest.subjectId]:
194
+ sql`(select ${subjectIdColumn} from ${mapping.subject.table} where ${rowId} = last_insert_rowid())`,
195
+ } as any)
196
+ .toSQL();
197
+
198
+ statements.push(db.$client.unsafe(requestQuery.sql, requestQuery.params));
199
+ }
200
+
201
+ if (allocated === undefined && input.identifier !== undefined) {
202
+ const requestIdParam = sql.param(input.requestId, requestIdColumn);
203
+
204
+ const identifierQuery = db
205
+ .insert(mapping.identifier.table as any)
206
+ .values({
207
+ ...mapping.d1.identifierInsertWithoutSubject(input.identifier, input.verifiedAt),
208
+ [mapping.identifier.subjectId]:
209
+ sql`(select ${requestSubjectColumn} from ${requestTable} where ${requestIdColumn} = ${requestIdParam})`,
210
+ } as any)
211
+ .toSQL();
212
+
213
+ statements.push(db.$client.unsafe(identifierQuery.sql, identifierQuery.params));
214
+ }
215
+ const attempt = db.$client.batch(statements);
216
+
217
+ yield* attempt.pipe(
218
+ Effect.catchCause(
219
+ (
220
+ cause,
221
+ ): Effect.Effect<
222
+ void,
223
+ | Effect.Error<typeof attempt>
224
+ | Effect.Error<ReturnType<typeof findReceipt>>
225
+ | IdentityConflict
226
+ > => {
227
+ if (
228
+ cause.reasons.length === 0 ||
229
+ !cause.reasons.every(
230
+ (reason) =>
231
+ Cause.isFailReason(reason) &&
232
+ isMappedConstraintConflict(mapping.isConstraintConflict, reason.error),
233
+ )
234
+ )
235
+ return Effect.failCause(cause);
236
+
237
+ return findReceipt(input.requestId).pipe(
238
+ Effect.flatMap((receipt) =>
239
+ receipt !== undefined && receipt.fingerprint === fingerprint
240
+ ? Effect.void
241
+ : IdentityConflict.make(),
242
+ ),
243
+ );
244
+ },
245
+ ),
246
+ );
247
+ const receipt = yield* findReceipt(input.requestId);
248
+
249
+ if (receipt === undefined || receipt.fingerprint !== fingerprint)
250
+ return yield* IdentityConflict.make();
251
+ const subjectId = yield* mapping.subjectId.toSubject(receipt.subjectId as NativeId);
252
+
253
+ return SubjectProvisioned.make({ subjectId });
254
+ }, mapUnavailable);
255
+
256
+ return { subjectProvisioner: SubjectProvisioner.of({ provision }) } as const;
257
+ };
258
+
259
+ export const makeD1ExternalIdentityServices = <
260
+ Subject extends AnySQLiteTable,
261
+ External extends AnySQLiteTable,
262
+ NativeId,
263
+ >(
264
+ database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
265
+ mapping: D1ExternalIdentityMapping<Subject, External, NativeId>,
266
+ ) => {
267
+ const db = database as RuntimeDatabase;
268
+ const externalTable = mapping.externalIdentity.table;
269
+
270
+ const externalSubjectIdColumn = column(
271
+ externalTable,
272
+ mapping.externalIdentity.subjectId,
273
+ ) as SQLiteColumn;
274
+
275
+ const externalProviderColumn = column(
276
+ externalTable,
277
+ mapping.externalIdentity.provider,
278
+ ) as SQLiteColumn;
279
+
280
+ const externalIssuerColumn = column(
281
+ externalTable,
282
+ mapping.externalIdentity.issuer,
283
+ ) as SQLiteColumn;
284
+
285
+ const externalSubjectColumn = column(
286
+ externalTable,
287
+ mapping.externalIdentity.subject,
288
+ ) as SQLiteColumn;
289
+
290
+ const bind = Effect.fn("DrizzleD1Identity.bindExternalIdentity")(function* (
291
+ subjectId: SubjectId,
292
+ identity: ExternalIdentity,
293
+ ) {
294
+ const nativeId = yield* mapping.subjectId.toNative(subjectId);
295
+ const subjectIdColumn = column(mapping.subject.table, mapping.subject.id);
296
+ const subjectStatusColumn = column(mapping.subject.table, mapping.subject.status);
297
+ const nativeIdParam = sql.param(nativeId, subjectIdColumn);
298
+ const activeStatusParam = sql.param(mapping.d1.activeStatusValue, subjectStatusColumn);
299
+
300
+ const selection = selectFields(
301
+ externalTable,
302
+ mapping.externalIdentity.encodeInsert(identity, nativeId),
303
+ );
304
+
305
+ selection[mapping.externalIdentity.subjectId] = subjectIdColumn;
306
+
307
+ const inserted = yield* db
308
+ .insert(externalTable as any)
309
+ .select(
310
+ db
311
+ .select(selection as any)
312
+ .from(mapping.subject.table as any)
313
+ .where(
314
+ and(eq(subjectIdColumn, nativeIdParam), eq(subjectStatusColumn, activeStatusParam)),
315
+ ) as any,
316
+ )
317
+ .returning({ subjectId: externalSubjectIdColumn })
318
+ .pipe(
319
+ Effect.catchCause((cause) => {
320
+ if (
321
+ cause.reasons.length === 0 ||
322
+ !cause.reasons.every(
323
+ (reason) =>
324
+ Cause.isFailReason(reason) &&
325
+ isMappedConstraintConflict(mapping.isConstraintConflict, reason.error),
326
+ )
327
+ )
328
+ return Effect.failCause(cause);
329
+
330
+ return db
331
+ .select({ subjectId: externalSubjectIdColumn })
332
+ .from(externalTable as any)
333
+ .innerJoin(
334
+ mapping.subject.table as any,
335
+ and(
336
+ eq(externalSubjectIdColumn, subjectIdColumn),
337
+ eq(subjectStatusColumn, mapping.d1.activeStatusValue),
338
+ ),
339
+ )
340
+ .where(
341
+ and(
342
+ eq(externalProviderColumn, identity.provider),
343
+ eq(externalIssuerColumn, identity.issuer),
344
+ eq(externalSubjectColumn, identity.subject),
345
+ eq(externalSubjectIdColumn, nativeId),
346
+ ),
347
+ )
348
+ .limit(1);
349
+ }),
350
+ );
351
+
352
+ const row = inserted[0];
353
+
354
+ if (row === undefined) return yield* IdentityConflict.make();
355
+ const linked = row.subjectId as NativeId;
356
+
357
+ if (!mapping.subjectId.equals(linked, nativeId)) return yield* IdentityConflict.make();
358
+ }, mapUnavailable);
359
+
360
+ return { externalIdentityMutation: ExternalIdentityMutation.of({ bind }) } as const;
361
+ };
362
+
363
+ export const makeD1IdentityServices = <
364
+ Subject extends AnySQLiteTable,
365
+ Identifier extends AnySQLiteTable,
366
+ External extends AnySQLiteTable,
367
+ Request extends AnySQLiteTable,
368
+ NativeId,
369
+ >(
370
+ database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
371
+ mapping: D1GeneratedIdentityMapping<Subject, Identifier, External, Request, NativeId>,
372
+ ) => ({
373
+ ...makeD1SubjectProvisioningServices(database, mapping),
374
+ ...makeD1ExternalIdentityServices(database, mapping),
375
+ });