@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,113 @@
1
+ import { PersistenceMappingError } from "./model.mjs";
2
+ import { AnyProofPersistenceMapping, ProofPersistenceMapping } from "./proof-model.mjs";
3
+ import { SubjectId } from "@yielded/auth/Schema";
4
+ import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
5
+ import { Effect, Layer } from "effect";
6
+ import { AuthenticationRequirement } from "@yielded/auth/Sessions";
7
+ import { PhoneAdmission, PhoneAdmissionPolicy, PhoneLifecyclePolicy, PhoneNumber, PhonePersistence, PhoneSignInTargets } from "@yielded/auth/PhoneOtp";
8
+ //#region src/drizzle/phone-model.d.ts
9
+ declare const proofMapping: unique symbol;
10
+ /** Opaque same-owner proof mapping. The builder preserves the consumer's table codecs. */
11
+ export interface PhoneProofCompletionMapping {
12
+ readonly [proofMapping]: AnyProofPersistenceMapping;
13
+ }
14
+ export declare const phoneProofCompletionMapping: <Rq extends Table, S extends Table, G extends Table, Cn extends Table, Rs extends Table, A extends Table, F extends Table, C extends Table, Sub extends Table, I extends Table, Cr extends Table, N>(mapping: ProofPersistenceMapping<Rq, S, G, Cn, Rs, A, F, C, Sub, I, Cr, N>) => PhoneProofCompletionMapping;
15
+ export type PhoneColumn<T extends Table> = Extract<keyof T["_"]["columns"], string>;
16
+ export type PhoneMappingSource<M, R = never> = M | Effect.Effect<M, PersistenceMappingError, R>;
17
+ export declare const requiredPhoneConstraints: {
18
+ readonly subject: "unique(id)";
19
+ readonly identifier: "unique(namespace,value)";
20
+ readonly credential: "unique(credentialId)";
21
+ readonly state: "unique(scope)";
22
+ };
23
+ /** Consumer-owned schema; encoders and allocators are synchronous and side-effect free.
24
+ * State stores permanent number custody and command tombstones, plus bounded admission
25
+ * counters. Never delete custody rows to make a recycled number eligible. A consumer's
26
+ * explicit recovery workflow may resolve custody only after independent authentication.
27
+ * Subject defaults own account provisioning; no email/profile schema is prescribed. */
28
+ export interface PhoneMapping<S extends Table, I extends Table, C extends Table, T extends Table, N> {
29
+ readonly moduleId: string;
30
+ readonly policy: PhoneLifecyclePolicy;
31
+ readonly admission: PhoneAdmissionPolicy;
32
+ readonly constraints: typeof requiredPhoneConstraints;
33
+ readonly proofs: PhoneProofCompletionMapping;
34
+ readonly subjectIds: {
35
+ readonly toNative: (id: SubjectId) => N;
36
+ readonly toSubject: (id: N) => SubjectId;
37
+ readonly allocate: () => N;
38
+ };
39
+ readonly subject: {
40
+ readonly table: S;
41
+ readonly id: PhoneColumn<S>;
42
+ readonly securityRevision: PhoneColumn<S>;
43
+ readonly activeCondition: SQL;
44
+ readonly decodeRequirement: (row: InferSelectModel<S>) => AuthenticationRequirement;
45
+ /** Current action policy, independently from primary sign-in assurance. */
46
+ readonly decodeActionRequirement?: (row: InferSelectModel<S>, action: "verify" | "change") => AuthenticationRequirement;
47
+ readonly encodeInsert: (input: {
48
+ readonly id: N;
49
+ readonly securityRevision: string;
50
+ readonly phoneNumber: PhoneNumber;
51
+ }) => InferInsertModel<S>;
52
+ };
53
+ readonly identifier: {
54
+ readonly table: I;
55
+ readonly namespace: PhoneColumn<I>;
56
+ readonly value: PhoneColumn<I>;
57
+ readonly subjectId: PhoneColumn<I>;
58
+ readonly revision: PhoneColumn<I>;
59
+ readonly verifiedAt: PhoneColumn<I>;
60
+ readonly status: PhoneColumn<I>;
61
+ readonly activeCondition: SQL;
62
+ readonly encodeStatus: (active: boolean) => unknown;
63
+ readonly encodeInsert: (input: {
64
+ readonly phoneNumber: PhoneNumber;
65
+ readonly subjectId: N;
66
+ readonly revision: string;
67
+ readonly verifiedAtMillis: number;
68
+ readonly active: boolean;
69
+ }) => InferInsertModel<I>;
70
+ };
71
+ readonly credential: {
72
+ readonly table: C;
73
+ readonly id: PhoneColumn<C>;
74
+ readonly subjectId: PhoneColumn<C>;
75
+ readonly revision: PhoneColumn<C>;
76
+ readonly status: PhoneColumn<C>;
77
+ readonly activeCondition: SQL;
78
+ readonly encodeStatus: (active: boolean) => unknown;
79
+ readonly encodeInsert: (input: {
80
+ readonly credentialId: string;
81
+ readonly subjectId: N;
82
+ readonly revision: string;
83
+ readonly active: boolean;
84
+ }) => InferInsertModel<C>;
85
+ };
86
+ readonly state: {
87
+ readonly table: T;
88
+ readonly scope: PhoneColumn<T>;
89
+ readonly state: PhoneColumn<T>;
90
+ readonly version: PhoneColumn<T>;
91
+ readonly encodeInsert: (input: {
92
+ readonly scope: string;
93
+ readonly state: string;
94
+ readonly version: string;
95
+ }) => InferInsertModel<T>;
96
+ };
97
+ readonly encodeInstant: (millis: number) => unknown;
98
+ readonly engineNowMillis: SQL;
99
+ }
100
+ export interface D1PhoneMapping {
101
+ readonly d1: {
102
+ readonly primary: true;
103
+ };
104
+ }
105
+ export interface PhonePersistenceServices {
106
+ readonly phonePersistence: PhonePersistence["Service"];
107
+ readonly phoneAdmission: PhoneAdmission["Service"];
108
+ readonly phoneSignInTargets: PhoneSignInTargets["Service"];
109
+ }
110
+ /** Bundle phone storage, admission, and lookup with overridable crypto and hook defaults. */
111
+ export declare const phonePersistenceLayer: <E, R>(services: Effect.Effect<PhonePersistenceServices, E, R>) => Layer.Layer<PhoneAdmission | PhonePersistence | PhoneSignInTargets, E, Exclude<Exclude<R, import("effect/Scope").Scope>, import("effect/Crypto").Crypto | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth/WebCrypto").SubtleCrypto>>;
112
+ //#endregion
113
+ //# sourceMappingURL=phone-model.d.mts.map
@@ -0,0 +1,39 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { cryptoLayer, hooksLayer } from "@yielded/auth/Persistence";
3
+ import { PhoneAdmission, PhonePersistence, PhoneSignInTargets } from "@yielded/auth/PhoneOtp";
4
+ //#region src/drizzle/phone-model.ts
5
+ const proofMapping = Symbol("effect-auth/phone/proofs");
6
+ const phoneProofCompletionMapping = (mapping) => Object.freeze({ [proofMapping]: Object.freeze({
7
+ ...mapping,
8
+ request: Object.freeze({ ...mapping.request }),
9
+ series: Object.freeze({ ...mapping.series }),
10
+ generation: Object.freeze({ ...mapping.generation }),
11
+ continuation: Object.freeze({ ...mapping.continuation }),
12
+ rateScope: Object.freeze({ ...mapping.rateScope }),
13
+ abuseEvent: Object.freeze({ ...mapping.abuseEvent }),
14
+ failureEvent: Object.freeze({ ...mapping.failureEvent }),
15
+ command: Object.freeze({ ...mapping.command }),
16
+ constraints: Object.freeze({ ...mapping.constraints }),
17
+ authority: Object.freeze({
18
+ ...mapping.authority,
19
+ identifier: Object.freeze({ ...mapping.authority.identifier }),
20
+ ...mapping.authority.subject === void 0 ? {} : { subject: Object.freeze({ ...mapping.authority.subject }) },
21
+ ...mapping.authority.credential === void 0 ? {} : { credential: Object.freeze({ ...mapping.authority.credential }) },
22
+ ...mapping.authority.subjectId === void 0 ? {} : { subjectId: Object.freeze({ ...mapping.authority.subjectId }) }
23
+ }),
24
+ ...mapping.d1 === void 0 ? {} : { d1: Object.freeze({ ...mapping.d1 }) }
25
+ }) });
26
+ /** @internal */
27
+ const phoneProofs = (mapping) => mapping[proofMapping];
28
+ const requiredPhoneConstraints = {
29
+ subject: "unique(id)",
30
+ identifier: "unique(namespace,value)",
31
+ credential: "unique(credentialId)",
32
+ state: "unique(scope)"
33
+ };
34
+ /** Bundle phone storage, admission, and lookup with overridable crypto and hook defaults. */
35
+ const phonePersistenceLayer = (services) => Layer.unwrap(Effect.map(services, (value) => Layer.mergeAll(Layer.succeed(PhonePersistence, value.phonePersistence), Layer.succeed(PhoneAdmission, value.phoneAdmission), Layer.succeed(PhoneSignInTargets, value.phoneSignInTargets)))).pipe(Layer.provide([cryptoLayer, hooksLayer]));
36
+ //#endregion
37
+ export { phonePersistenceLayer, phoneProofCompletionMapping, phoneProofs, requiredPhoneConstraints };
38
+
39
+ //# sourceMappingURL=phone-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-model.mjs","names":[],"sources":["../../src/drizzle/phone-model.ts"],"sourcesContent":["import { cryptoLayer, hooksLayer } from \"@yielded/auth/Persistence\";\nimport {\n type PhoneAdmissionPolicy,\n type PhoneLifecyclePolicy,\n type PhoneNumber,\n PhoneAdmission,\n PhonePersistence,\n PhoneSignInTargets,\n} from \"@yielded/auth/PhoneOtp\";\nimport type { SubjectId } from \"@yielded/auth/Schema\";\nimport type { AuthenticationRequirement } from \"@yielded/auth/Sessions\";\nimport type { InferInsertModel, InferSelectModel, SQL, Table } from \"drizzle-orm\";\nimport { Effect, Layer } from \"effect\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport type { AnyProofPersistenceMapping, ProofPersistenceMapping } from \"./proof-model\";\nconst proofMapping = Symbol(\"effect-auth/phone/proofs\");\n\n/** Opaque same-owner proof mapping. The builder preserves the consumer's table codecs. */\nexport interface PhoneProofCompletionMapping {\n readonly [proofMapping]: AnyProofPersistenceMapping;\n}\n\nexport const phoneProofCompletionMapping = <\n Rq extends Table,\n S extends Table,\n G extends Table,\n Cn extends Table,\n Rs extends Table,\n A extends Table,\n F extends Table,\n C extends Table,\n Sub extends Table,\n I extends Table,\n Cr extends Table,\n N,\n>(\n mapping: ProofPersistenceMapping<Rq, S, G, Cn, Rs, A, F, C, Sub, I, Cr, N>,\n): PhoneProofCompletionMapping =>\n Object.freeze({\n [proofMapping]: Object.freeze({\n ...mapping,\n request: Object.freeze({ ...mapping.request }),\n series: Object.freeze({ ...mapping.series }),\n generation: Object.freeze({ ...mapping.generation }),\n continuation: Object.freeze({ ...mapping.continuation }),\n rateScope: Object.freeze({ ...mapping.rateScope }),\n abuseEvent: Object.freeze({ ...mapping.abuseEvent }),\n failureEvent: Object.freeze({ ...mapping.failureEvent }),\n command: Object.freeze({ ...mapping.command }),\n constraints: Object.freeze({ ...mapping.constraints }),\n authority: Object.freeze({\n ...mapping.authority,\n identifier: Object.freeze({ ...mapping.authority.identifier }),\n ...(mapping.authority.subject === undefined\n ? {}\n : { subject: Object.freeze({ ...mapping.authority.subject }) }),\n ...(mapping.authority.credential === undefined\n ? {}\n : { credential: Object.freeze({ ...mapping.authority.credential }) }),\n ...(mapping.authority.subjectId === undefined\n ? {}\n : { subjectId: Object.freeze({ ...mapping.authority.subjectId }) }),\n }),\n ...(mapping.d1 === undefined ? {} : { d1: Object.freeze({ ...mapping.d1 }) }),\n }) as unknown as AnyProofPersistenceMapping,\n });\n\n/** @internal */\nexport const phoneProofs = (mapping: PhoneProofCompletionMapping) => mapping[proofMapping];\nexport type PhoneColumn<T extends Table> = Extract<keyof T[\"_\"][\"columns\"], string>;\nexport type PhoneMappingSource<M, R = never> = M | Effect.Effect<M, PersistenceMappingError, R>;\n\nexport const requiredPhoneConstraints = {\n subject: \"unique(id)\",\n identifier: \"unique(namespace,value)\",\n credential: \"unique(credentialId)\",\n state: \"unique(scope)\",\n} as const;\n\n/** Consumer-owned schema; encoders and allocators are synchronous and side-effect free.\n * State stores permanent number custody and command tombstones, plus bounded admission\n * counters. Never delete custody rows to make a recycled number eligible. A consumer's\n * explicit recovery workflow may resolve custody only after independent authentication.\n * Subject defaults own account provisioning; no email/profile schema is prescribed. */\nexport interface PhoneMapping<\n S extends Table,\n I extends Table,\n C extends Table,\n T extends Table,\n N,\n> {\n readonly moduleId: string;\n readonly policy: PhoneLifecyclePolicy;\n readonly admission: PhoneAdmissionPolicy;\n readonly constraints: typeof requiredPhoneConstraints;\n readonly proofs: PhoneProofCompletionMapping;\n readonly subjectIds: {\n readonly toNative: (id: SubjectId) => N;\n readonly toSubject: (id: N) => SubjectId;\n readonly allocate: () => N;\n };\n readonly subject: {\n readonly table: S;\n readonly id: PhoneColumn<S>;\n readonly securityRevision: PhoneColumn<S>;\n readonly activeCondition: SQL;\n readonly decodeRequirement: (row: InferSelectModel<S>) => AuthenticationRequirement;\n /** Current action policy, independently from primary sign-in assurance. */\n readonly decodeActionRequirement?: (\n row: InferSelectModel<S>,\n action: \"verify\" | \"change\",\n ) => AuthenticationRequirement;\n readonly encodeInsert: (input: {\n readonly id: N;\n readonly securityRevision: string;\n readonly phoneNumber: PhoneNumber;\n }) => InferInsertModel<S>;\n };\n readonly identifier: {\n readonly table: I;\n readonly namespace: PhoneColumn<I>;\n readonly value: PhoneColumn<I>;\n readonly subjectId: PhoneColumn<I>;\n readonly revision: PhoneColumn<I>;\n readonly verifiedAt: PhoneColumn<I>;\n readonly status: PhoneColumn<I>;\n readonly activeCondition: SQL;\n readonly encodeStatus: (active: boolean) => unknown;\n readonly encodeInsert: (input: {\n readonly phoneNumber: PhoneNumber;\n readonly subjectId: N;\n readonly revision: string;\n readonly verifiedAtMillis: number;\n readonly active: boolean;\n }) => InferInsertModel<I>;\n };\n readonly credential: {\n readonly table: C;\n readonly id: PhoneColumn<C>;\n readonly subjectId: PhoneColumn<C>;\n readonly revision: PhoneColumn<C>;\n readonly status: PhoneColumn<C>;\n readonly activeCondition: SQL;\n readonly encodeStatus: (active: boolean) => unknown;\n readonly encodeInsert: (input: {\n readonly credentialId: string;\n readonly subjectId: N;\n readonly revision: string;\n readonly active: boolean;\n }) => InferInsertModel<C>;\n };\n readonly state: {\n readonly table: T;\n readonly scope: PhoneColumn<T>;\n readonly state: PhoneColumn<T>;\n readonly version: PhoneColumn<T>;\n readonly encodeInsert: (input: {\n readonly scope: string;\n readonly state: string;\n readonly version: string;\n }) => InferInsertModel<T>;\n };\n readonly encodeInstant: (millis: number) => unknown;\n readonly engineNowMillis: SQL;\n}\n\nexport interface D1PhoneMapping {\n readonly d1: { readonly primary: true };\n}\n\nexport interface PhonePersistenceServices {\n readonly phonePersistence: PhonePersistence[\"Service\"];\n readonly phoneAdmission: PhoneAdmission[\"Service\"];\n readonly phoneSignInTargets: PhoneSignInTargets[\"Service\"];\n}\n\n/** Bundle phone storage, admission, and lookup with overridable crypto and hook defaults. */\nexport const phonePersistenceLayer = <E, R>(\n services: Effect.Effect<PhonePersistenceServices, E, R>,\n) =>\n Layer.unwrap(\n Effect.map(services, (value) =>\n Layer.mergeAll(\n Layer.succeed(PhonePersistence, value.phonePersistence),\n Layer.succeed(PhoneAdmission, value.phoneAdmission),\n Layer.succeed(PhoneSignInTargets, value.phoneSignInTargets),\n ),\n ),\n ).pipe(Layer.provide([cryptoLayer, hooksLayer]));\n"],"mappings":";;;;AAgBA,MAAM,eAAe,OAAO,0BAA0B;AAOtD,MAAa,+BAcX,YAEA,OAAO,OAAO,GACX,eAAe,OAAO,OAAO;CAC5B,GAAG;CACH,SAAS,OAAO,OAAO,EAAE,GAAG,QAAQ,QAAQ,CAAC;CAC7C,QAAQ,OAAO,OAAO,EAAE,GAAG,QAAQ,OAAO,CAAC;CAC3C,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,WAAW,CAAC;CACnD,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,aAAa,CAAC;CACvD,WAAW,OAAO,OAAO,EAAE,GAAG,QAAQ,UAAU,CAAC;CACjD,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,WAAW,CAAC;CACnD,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,aAAa,CAAC;CACvD,SAAS,OAAO,OAAO,EAAE,GAAG,QAAQ,QAAQ,CAAC;CAC7C,aAAa,OAAO,OAAO,EAAE,GAAG,QAAQ,YAAY,CAAC;CACrD,WAAW,OAAO,OAAO;EACvB,GAAG,QAAQ;EACX,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,UAAU,WAAW,CAAC;EAC7D,GAAI,QAAQ,UAAU,YAAY,KAAA,IAC9B,CAAC,IACD,EAAE,SAAS,OAAO,OAAO,EAAE,GAAG,QAAQ,UAAU,QAAQ,CAAC,EAAE;EAC/D,GAAI,QAAQ,UAAU,eAAe,KAAA,IACjC,CAAC,IACD,EAAE,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,UAAU,WAAW,CAAC,EAAE;EACrE,GAAI,QAAQ,UAAU,cAAc,KAAA,IAChC,CAAC,IACD,EAAE,WAAW,OAAO,OAAO,EAAE,GAAG,QAAQ,UAAU,UAAU,CAAC,EAAE;CACrE,CAAC;CACD,GAAI,QAAQ,OAAO,KAAA,IAAY,CAAC,IAAI,EAAE,IAAI,OAAO,OAAO,EAAE,GAAG,QAAQ,GAAG,CAAC,EAAE;AAC7E,CAAC,EACH,CAAC;;AAGH,MAAa,eAAe,YAAyC,QAAQ;AAI7E,MAAa,2BAA2B;CACtC,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,OAAO;AACT;;AAoGA,MAAa,yBACX,aAEA,MAAM,OACJ,OAAO,IAAI,WAAW,UACpB,MAAM,SACJ,MAAM,QAAQ,kBAAkB,MAAM,gBAAgB,GACtD,MAAM,QAAQ,gBAAgB,MAAM,cAAc,GAClD,MAAM,QAAQ,oBAAoB,MAAM,kBAAkB,CAC5D,CACF,CACF,CAAC,CAAC,KAAK,MAAM,QAAQ,CAAC,aAAa,UAAU,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { drizzleQueryOperations } from "./query-operations.mjs";
2
+ import { both, makeTransactionRows } from "./transaction-owner.mjs";
3
+ import { CurrentPhoneTransaction, makePhoneKernel } from "@yielded/auth-persistence/Adapter";
4
+ //#region src/drizzle/phone-state.ts
5
+ const kernel = makePhoneKernel(drizzleQueryOperations, {
6
+ both,
7
+ makeTransactionRows
8
+ });
9
+ const { unavailable, equal, copiedRow, col, capturePhone, lookupPhone, admitPhone, preparePhoneMutation, cleanupPhoneAdmission } = kernel;
10
+ const invariant = kernel.invariant;
11
+ //#endregion
12
+ export { CurrentPhoneTransaction, admitPhone, capturePhone, cleanupPhoneAdmission, equal, invariant, lookupPhone, preparePhoneMutation, unavailable };
13
+
14
+ //# sourceMappingURL=phone-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-state.mjs","names":[],"sources":["../../src/drizzle/phone-state.ts"],"sourcesContent":["import { makePhoneKernel } from \"@yielded/auth-persistence/Adapter\";\n\nimport { drizzleQueryOperations } from \"./query-operations\";\nimport { both, makeTransactionRows } from \"./transaction-owner\";\nexport { CurrentPhoneTransaction } from \"@yielded/auth-persistence/Adapter\";\n\nconst kernel = makePhoneKernel(drizzleQueryOperations, { both, makeTransactionRows });\n\nexport const {\n unavailable,\n equal,\n copiedRow,\n col,\n capturePhone,\n lookupPhone,\n admitPhone,\n preparePhoneMutation,\n cleanupPhoneAdmission,\n} = kernel;\n\nexport const invariant: (value: unknown) => asserts value = kernel.invariant;\n"],"mappings":";;;;AAMA,MAAM,SAAS,gBAAgB,wBAAwB;CAAE;CAAM;AAAoB,CAAC;AAEpF,MAAa,EACX,aACA,OACA,WACA,KACA,cACA,aACA,YACA,sBACA,0BACE;AAEJ,MAAa,YAA+C,OAAO"}
@@ -0,0 +1,14 @@
1
+ import { PersistenceMappingError } from "./model.mjs";
2
+ import "./transaction-owner.mjs";
3
+ import { TransactionCoordinatorError } from "./transaction-execution.mjs";
4
+ import "./phone-model.mjs";
5
+ import "./SuppliedService.mjs";
6
+ import { Table } from "drizzle-orm";
7
+ import { Effect } from "effect";
8
+ import { LifecycleHooks } from "@yielded/auth/Hooks";
9
+ import { PhoneAdmission, PhoneConfigurationError, PhoneOtpUnavailable, PhonePersistence, PhoneSignInTargets } from "@yielded/auth/PhoneOtp";
10
+ import { Statement } from "effect/unstable/sql/Statement";
11
+ //#region src/drizzle/phone-target.d.ts
12
+ export type PhoneCoordinatorError<E> = TransactionCoordinatorError<E, PhoneOtpUnavailable> | PhoneConfigurationError | PersistenceMappingError;
13
+ //#endregion
14
+ //# sourceMappingURL=phone-target.d.mts.map
@@ -0,0 +1,168 @@
1
+ import { requiredProofConstraints } from "./proof-model.mjs";
2
+ import { CurrentProofSql, completeProofPlanIn } from "./proof-sql.mjs";
3
+ import { coordinateTransactionOwner, makeTransactionExecution, sqlClientTransactionStandaloneGuard } from "./transaction-execution.mjs";
4
+ import { phoneProofs, requiredPhoneConstraints } from "./phone-model.mjs";
5
+ import { CurrentD1PlanningDatabase } from "./d1-planning.mjs";
6
+ import { compileD1ProofCompletionPlan } from "./d1-proofs.mjs";
7
+ import { CurrentPhoneTransaction, admitPhone, capturePhone, cleanupPhoneAdmission, equal, invariant, lookupPhone, preparePhoneMutation, unavailable } from "./phone-state.mjs";
8
+ import { sql } from "drizzle-orm";
9
+ import { Context, Effect, Schema } from "effect";
10
+ import { LifecycleHooks } from "@yielded/auth/Hooks";
11
+ import { ProofBinding } from "@yielded/auth/Proofs";
12
+ import { randomId } from "@yielded/auth-crypto";
13
+ import { PhoneActionAuthorization, PhoneAdmission, PhoneAdmissionPolicy, PhoneConfigurationError, PhoneLifecyclePolicy, PhoneLifecycleTarget, PhonePersistence, PhoneSignInTargets } from "@yielded/auth/PhoneOtp";
14
+ //#region src/drizzle/phone-target.ts
15
+ const sqlClientPhoneStandaloneGuard = (database) => sqlClientTransactionStandaloneGuard(unavailable, database);
16
+ const validateMapping = (original, configuration) => {
17
+ const mapping = original;
18
+ invariant(mapping.moduleId.length > 0);
19
+ Schema.decodeSync(PhoneLifecyclePolicy)(mapping.policy);
20
+ Schema.decodeSync(PhoneAdmissionPolicy)(mapping.admission);
21
+ invariant(mapping.admission.requestRetentionMillis >= mapping.admission.windowMillis);
22
+ const proofs = phoneProofs(mapping.proofs);
23
+ invariant(proofs !== void 0);
24
+ for (const [key, value] of Object.entries(requiredProofConstraints)) invariant(proofs.constraints?.[key] === value);
25
+ if (configuration.mode === "synchronous") invariant(proofs.allocateVersionSync !== void 0);
26
+ if (configuration.mode === "batch") invariant(proofs.d1 !== void 0 && proofs.authority.identifier.d1CurrentCondition !== void 0);
27
+ for (const [key, value] of Object.entries(requiredPhoneConstraints)) invariant(mapping.constraints?.[key] === value);
28
+ if (configuration.mode === "batch") invariant(mapping.d1?.primary === true);
29
+ return Object.freeze({
30
+ ...mapping,
31
+ policy: Object.freeze({ ...mapping.policy }),
32
+ subject: Object.freeze({ ...mapping.subject }),
33
+ state: Object.freeze({ ...mapping.state }),
34
+ identifier: Object.freeze({ ...mapping.identifier }),
35
+ admission: Object.freeze({ ...mapping.admission }),
36
+ credential: Object.freeze({ ...mapping.credential }),
37
+ subjectIds: Object.freeze({ ...mapping.subjectIds })
38
+ });
39
+ };
40
+ const services = (mapping, execution, hooks, configuration) => {
41
+ const run = (effect, mutation = true) => execution.admit.pipe(Effect.andThen(execution.run(effect, mutation)), Effect.provideService(LifecycleHooks, hooks));
42
+ return {
43
+ phoneAdmission: PhoneAdmission.of({
44
+ admit: (input) => run(admitPhone(mapping, { ...input })),
45
+ cleanup: (input) => run(cleanupPhoneAdmission(mapping, { ...input }))
46
+ }),
47
+ phoneSignInTargets: PhoneSignInTargets.of({ lookup: (input) => run(lookupPhone(mapping, { ...input }), false) }),
48
+ phonePersistence: PhonePersistence.of({
49
+ target: (input) => run(Effect.gen(function* () {
50
+ invariant(input.moduleId === mapping.moduleId);
51
+ return (yield* capturePhone(mapping, { ...input })).target;
52
+ }), false),
53
+ mutate: (original, prepare) => Effect.suspend(() => {
54
+ const input = {
55
+ ...original,
56
+ target: Schema.decodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(Schema.encodeSync(Schema.toCodecIso(PhoneLifecycleTarget))(original.target)),
57
+ policy: { ...original.policy },
58
+ ...original.authorization === void 0 ? {} : { authorization: Schema.decodeSync(Schema.toCodecIso(PhoneActionAuthorization))(Schema.encodeSync(Schema.toCodecIso(PhoneActionAuthorization))(original.authorization)) },
59
+ completion: {
60
+ input: {
61
+ ...original.completion.input,
62
+ binding: Schema.decodeSync(Schema.toCodecIso(ProofBinding))(Schema.encodeSync(Schema.toCodecIso(ProofBinding))(original.completion.input.binding))
63
+ },
64
+ prepare: original.completion.prepare
65
+ }
66
+ };
67
+ return run(Effect.gen(function* () {
68
+ const owner = yield* CurrentPhoneTransaction, candidate = yield* preparePhoneMutation(mapping, input);
69
+ if (candidate.mutate === void 0) {
70
+ const receipt = prepare(candidate.decision, owner.journal);
71
+ owner.guards.push(receipt);
72
+ return receipt;
73
+ }
74
+ const cn = phoneProofs(mapping.proofs).continuation;
75
+ const observed = yield* owner.read(cn.table, equal(cn.table, {
76
+ [cn.moduleId]: input.completion.input.moduleId,
77
+ [cn.continuationId]: input.completion.input.continuationId
78
+ }), { limit: 1 });
79
+ let completed = false;
80
+ const plan = {
81
+ ...input.completion,
82
+ prepare: (decision, journal) => {
83
+ completed = decision === "completed";
84
+ const proofReceipt = input.completion.prepare(decision, journal, () => void 0);
85
+ owner.guards.push(proofReceipt);
86
+ return prepare(decision === "completed" ? candidate.decision : { _tag: "Rejected" }, journal);
87
+ }
88
+ };
89
+ let receipt;
90
+ if (owner.batch) {
91
+ const offset = owner.statements.length;
92
+ yield* candidate.mutate;
93
+ const statements = owner.statements.splice(offset);
94
+ const compiled = yield* compileD1ProofCompletionPlan(phoneProofs(mapping.proofs), plan, {
95
+ statements,
96
+ appliedCondition: candidate.appliedCondition
97
+ }, (x) => x).pipe(Effect.provideService(CurrentD1PlanningDatabase, owner.database));
98
+ invariant(compiled.statements.length !== 0);
99
+ owner.statements.push(...compiled.statements, ...compiled.postconditions ?? []);
100
+ receipt = compiled.receipt;
101
+ } else receipt = yield* completeProofPlanIn(phoneProofs(mapping.proofs), {
102
+ mode: configuration.mode === "synchronous" ? "synchronous" : "interactive",
103
+ locking: configuration.locking,
104
+ standaloneGuard: Effect.void,
105
+ coordinated: true,
106
+ insertIfAbsent: (query, key, value) => configuration.dialect === "mysql" ? query.onDuplicateKeyUpdate({ set: { [key]: value } }) : query.onConflictDoNothing()
107
+ }, plan, candidate.mutate, (x) => x).pipe(Effect.provideService(CurrentProofSql, owner.database));
108
+ if (completed) {
109
+ invariant(observed.rows.length === 1);
110
+ const record = yield* cn.decode(observed.rows[0]);
111
+ observed.rows = observed.rows.map((row) => ({
112
+ ...row,
113
+ [cn.consumed]: true
114
+ }));
115
+ const command = phoneProofs(mapping.proofs).command;
116
+ owner.postconditions.push(sql`${mapping.engineNowMillis} < ${record.expiresAtMillis}`, sql`exists(select 1 from ${command.table} where ${equal(command.table, {
117
+ [command.moduleId]: input.completion.input.moduleId,
118
+ [command.commandId]: input.completion.input.continuationDigest,
119
+ [command.kind]: "complete",
120
+ [command.decision]: "completed",
121
+ [command.retentionUntil]: phoneProofs(mapping.proofs).encodeInstant(record.expiresAtMillis)
122
+ })})`);
123
+ }
124
+ invariant(receipt?._tag === "PreparedCommit");
125
+ owner.guards.push(receipt);
126
+ return receipt;
127
+ }));
128
+ }).pipe(Effect.catchDefect(() => Effect.fail(unavailable())))
129
+ })
130
+ };
131
+ };
132
+ const makeTargetPhonePersistence = (database, source, configuration) => Effect.gen(function* () {
133
+ const hooks = yield* LifecycleHooks;
134
+ const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
135
+ const mapping = yield* Effect.try({
136
+ try: () => validateMapping(original, configuration),
137
+ catch: () => PhoneConfigurationError.make({})
138
+ });
139
+ const execution = makeTransactionExecution(CurrentPhoneTransaction, database, configuration, unavailable, randomId);
140
+ return services(mapping, execution, hooks, configuration);
141
+ });
142
+ const coordinateTargetPhone = (database, source, configuration, body) => Effect.gen(function* () {
143
+ const hooks = yield* LifecycleHooks;
144
+ const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
145
+ const mapping = yield* Effect.try({
146
+ try: () => validateMapping(original, configuration),
147
+ catch: () => PhoneConfigurationError.make({})
148
+ });
149
+ return yield* coordinateTransactionOwner(database, CurrentPhoneTransaction, configuration, Effect.void, unavailable, randomId, (execution) => services(mapping, execution, hooks, configuration), body);
150
+ });
151
+ /** Concrete driver wrappers select transaction mode; cryptography always precedes these owners. */
152
+ const makePhoneTarget = (configuration) => {
153
+ function coordinatePhonePersistence(acquire, options, body) {
154
+ return Effect.flatMap(acquire, (database) => coordinateTargetPhone(database, options.mapping, configuration, (transaction, services) => {
155
+ const provided = Context.make(PhonePersistence, services.phonePersistence).pipe(Context.add(PhoneAdmission, services.phoneAdmission), Context.add(PhoneSignInTargets, services.phoneSignInTargets));
156
+ const work = Effect.provideContext(body, provided);
157
+ return options.transaction === void 0 ? work : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
158
+ }));
159
+ }
160
+ return {
161
+ makePhonePersistenceServices: (database, mapping) => makeTargetPhonePersistence(database, mapping, configuration),
162
+ coordinatePhonePersistence
163
+ };
164
+ };
165
+ //#endregion
166
+ export { coordinateTargetPhone, makePhoneTarget, makeTargetPhonePersistence, sqlClientPhoneStandaloneGuard };
167
+
168
+ //# sourceMappingURL=phone-target.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-target.mjs","names":[],"sources":["../../src/drizzle/phone-target.ts"],"sourcesContent":["import { randomId } from \"@yielded/auth-crypto\";\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 { Context, Effect, Schema } from \"effect\";\nimport type { Statement } from \"effect/unstable/sql/Statement\";\n\nimport { CurrentD1PlanningDatabase } from \"./d1-planning\";\nimport { compileD1ProofCompletionPlan } from \"./d1-proofs\";\nimport type { PersistenceMappingError } from \"./model\";\nimport {\n phoneProofs,\n type PhoneMapping,\n type PhoneMappingSource,\n type PhonePersistenceServices,\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 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 database: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, database);\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 = (\n mapping: any,\n execution: TransactionExecution<PhoneUnavailable, CurrentPhoneTransaction>,\n hooks: LifecycleHooks[\"Service\"],\n configuration: PhoneTargetConfiguration,\n): PhonePersistenceServices => {\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 database: TransactionNativeDatabase,\n source: PhoneMappingSource<PhoneMapping<S, I, C, F, N>, RSetup>,\n configuration: PhoneTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const hooks = yield* LifecycleHooks;\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 const execution = makeTransactionExecution(\n CurrentPhoneTransaction,\n database,\n configuration,\n unavailable,\n randomId,\n );\n\n return services(mapping, execution, hooks, configuration);\n });\n\nexport const coordinateTargetPhone = <M, A, E, R, RSetup = never>(\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<A, PhoneCoordinatorError<E>, R | RSetup | LifecycleHooks> =>\n Effect.gen(function* () {\n const hooks = yield* LifecycleHooks;\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 return yield* coordinateTransactionOwner(\n database,\n CurrentPhoneTransaction,\n configuration,\n Effect.void,\n unavailable,\n randomId,\n (execution) => services(mapping, execution, hooks, configuration),\n body,\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; cryptography always precedes these owners. */\nexport const makePhoneTarget = <\n D extends { readonly transaction: any },\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\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 | 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 | 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 | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateTargetPhone(\n database as any,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services) => {\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 ),\n );\n }\n\n return {\n makePhonePersistenceServices: <\n Database extends D,\n S extends T,\n I extends T,\n F extends T,\n C extends T,\n N,\n RSetup = never,\n >(\n database: Database,\n mapping: PhoneMappingSource<PhoneMapping<S, I, C, F, N> & Extra, RSetup>,\n ) => makeTargetPhonePersistence(database as any, mapping, configuration),\n coordinatePhonePersistence,\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { DrizzleTableModel } from "./table-model.mjs";
2
+ 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 { SQL, Table } from "drizzle-orm";
5
+ //#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>;
19
+ //#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 };
21
+ //# sourceMappingURL=proof-model.d.mts.map
@@ -0,0 +1,2 @@
1
+ import { requiredProofConstraints } from "@yielded/auth-persistence/Adapter";
2
+ export { requiredProofConstraints };
@@ -0,0 +1 @@
1
+ import "@yielded/auth-persistence/Adapter";
@@ -0,0 +1,8 @@
1
+ import { drizzleQueryOperations } from "./query-operations.mjs";
2
+ import { CurrentProofSql, makeProofKernel } from "@yielded/auth-persistence/Adapter";
3
+ //#region src/drizzle/proof-sql.ts
4
+ const { makeSqlProofPersistence, checkProofCompletionIn, completeProofPlanIn } = makeProofKernel(drizzleQueryOperations);
5
+ //#endregion
6
+ export { CurrentProofSql, checkProofCompletionIn, completeProofPlanIn, makeSqlProofPersistence };
7
+
8
+ //# sourceMappingURL=proof-sql.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-sql.mjs","names":[],"sources":["../../src/drizzle/proof-sql.ts"],"sourcesContent":["import { makeProofKernel } from \"@yielded/auth-persistence/Adapter\";\n\nimport { drizzleQueryOperations } from \"./query-operations\";\nexport type { ProofSqlQuery } from \"@yielded/auth-persistence/Adapter\";\nexport type { ProofSqlDatabase } from \"@yielded/auth-persistence/Adapter\";\nexport { CurrentProofSql } from \"@yielded/auth-persistence/Adapter\";\nexport type { ProofSqlConfiguration } from \"@yielded/auth-persistence/Adapter\";\n\nexport const { makeSqlProofPersistence, checkProofCompletionIn, completeProofPlanIn } =\n makeProofKernel(drizzleQueryOperations);\n"],"mappings":";;;AAQA,MAAa,EAAE,yBAAyB,wBAAwB,wBAC9D,gBAAgB,sBAAsB"}
@@ -0,0 +1,11 @@
1
+ import "./proof-sql.mjs";
2
+ import { Effect, Layer } from "effect";
3
+ import { HookConfigurationError, LifecycleHooks } from "@yielded/auth/Hooks";
4
+ import { ProofPersistence, ProofUnavailable } from "@yielded/auth/Proofs";
5
+ import "effect/unstable/sql/SqlError";
6
+ //#region src/drizzle/proof-target.d.ts
7
+ export declare const proofPersistenceLayer: (services: Effect.Effect<{
8
+ readonly proofPersistence: ProofPersistence["Service"];
9
+ }, never, LifecycleHooks>) => Layer.Layer<ProofPersistence, never, LifecycleHooks>;
10
+ //#endregion
11
+ //# sourceMappingURL=proof-target.d.mts.map
@@ -0,0 +1,36 @@
1
+ import { sqlClientStandaloneGuard } from "./standalone-guard.mjs";
2
+ import { makeSqlProofPersistence } from "./proof-sql.mjs";
3
+ import { Effect, Layer } from "effect";
4
+ import { LifecycleHooks, coordinateCommit, hasCommitScope } from "@yielded/auth/Hooks";
5
+ import { ProofPersistence, ProofUnavailable } from "@yielded/auth/Proofs";
6
+ //#region src/drizzle/proof-target.ts
7
+ const sqlClientProofStandaloneGuard = (database) => sqlClientStandaloneGuard(database, () => ProofUnavailable.make({}));
8
+ const options = (configuration, coordinated = false) => ({
9
+ mode: configuration.mode,
10
+ locking: configuration.locking,
11
+ standaloneGuard: !coordinated ? configuration.standaloneGuard : Effect.void,
12
+ insertIfAbsent: configuration.insertIfAbsent,
13
+ coordinated
14
+ });
15
+ const makeTargetProofPersistenceServices = (database, mapping, configuration) => Effect.gen(function* () {
16
+ return { proofPersistence: yield* makeSqlProofPersistence(database, mapping, options(configuration)) };
17
+ });
18
+ /**
19
+ * The native transaction is the root commit owner. Interruption or owner failure
20
+ * rolls it back and discards the journal. No owner effect is retried. Native
21
+ * transaction-acquisition `SqlError`s are exposed; caller errors, including
22
+ * Drizzle query wrappers, propagate unchanged.
23
+ */
24
+ const coordinateTargetProofPersistence = (database, mapping, configuration, owner) => Effect.gen(function* () {
25
+ const hooks = yield* LifecycleHooks;
26
+ if (yield* hasCommitScope) return yield* ProofUnavailable.make({});
27
+ yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;
28
+ return (yield* coordinateCommit(() => database.transaction((transaction) => Effect.gen(function* () {
29
+ return yield* owner(transaction, { proofPersistence: yield* makeSqlProofPersistence(transaction, mapping, options(configuration, true)) });
30
+ })), { mode: configuration.mode }).pipe(Effect.provideService(LifecycleHooks, hooks))).value;
31
+ });
32
+ const proofPersistenceLayer = (services) => Layer.effect(ProofPersistence, Effect.map(services, (value) => value.proofPersistence));
33
+ //#endregion
34
+ export { coordinateTargetProofPersistence, makeTargetProofPersistenceServices, proofPersistenceLayer, sqlClientProofStandaloneGuard };
35
+
36
+ //# sourceMappingURL=proof-target.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-target.mjs","names":[],"sources":["../../src/drizzle/proof-target.ts"],"sourcesContent":["import {\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/unstable/sql/SqlError\";\n\nimport {\n makeSqlProofPersistence,\n type ProofSqlConfiguration,\n type ProofSqlDatabase,\n type ProofSqlQuery,\n} from \"./proof-sql\";\nimport { sqlClientStandaloneGuard } from \"./standalone-guard\";\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 database: unknown,\n): Effect.Effect<void, ProofUnavailable> =>\n sqlClientStandaloneGuard(database, () => 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 database: any,\n mapping: any,\n configuration: ProofTargetConfiguration,\n) =>\n Effect.gen(function* () {\n return {\n proofPersistence: yield* makeSqlProofPersistence(database, 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> =>\n Effect.gen(function* (): Effect.fn.Return<A, ProofCoordinatorError<E>, R | LifecycleHooks> {\n const hooks = yield* LifecycleHooks;\n\n if (yield* hasCommitScope) return yield* ProofUnavailable.make({});\n yield* configuration.coordinatorGuard ?? configuration.standaloneGuard;\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 transaction as unknown as ProofSqlDatabase,\n mapping,\n options(configuration, true),\n ),\n });\n }),\n ),\n { mode: configuration.mode },\n ).pipe(Effect.provideService(LifecycleHooks, hooks));\n\n return result.value;\n });\n\nexport const proofPersistenceLayer = (\n services: Effect.Effect<\n { readonly proofPersistence: ProofPersistence[\"Service\"] },\n never,\n LifecycleHooks\n >,\n) =>\n Layer.effect(\n ProofPersistence,\n Effect.map(services, (value) => value.proofPersistence),\n );\n"],"mappings":";;;;;;AA2CA,MAAa,iCACX,aAEA,yBAAyB,gBAAgB,iBAAiB,KAAK,CAAC,CAAC,CAAC;AAEpE,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,UACA,SACA,kBAEA,OAAO,IAAI,aAAa;CACtB,OAAO,EACL,kBAAkB,OAAO,wBAAwB,UAAU,SAAS,QAAQ,aAAa,CAAC,EAC5F;AACF,CAAC;;;;;;;AAQH,MAAa,oCACX,UACA,SACA,eACA,UAKA,OAAO,IAAI,aAAgF;CACzF,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,gBAAgB,OAAO,OAAO,iBAAiB,KAAK,CAAC,CAAC;CACjE,OAAO,cAAc,oBAAoB,cAAc;CAkBvD,QAAO,OAhBe,uBAElB,SAAS,aAAa,gBACpB,OAAO,IAAI,aAAa;EACtB,OAAO,OAAO,MAAM,aAAa,EAC/B,kBAAkB,OAAO,wBACvB,aACA,SACA,QAAQ,eAAe,IAAI,CAC7B,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,aAMA,MAAM,OACJ,kBACA,OAAO,IAAI,WAAW,UAAU,MAAM,gBAAgB,CACxD"}
@@ -0,0 +1,27 @@
1
+ import { column, updateValues } from "./model.mjs";
2
+ import { balancedD1And, compactD1GeneratedStatement } from "./d1-generated-statement.mjs";
3
+ import { and, asc, eq, getTableColumns, gt, gte, inArray, isNull, lte, notExists, or, sql } from "drizzle-orm";
4
+ /** The shared kernel only passes tables and expressions from this compiler.
5
+ * Erasure stops at query shapes; row codecs and Effect errors remain explicit. */
6
+ const drizzleQueryOperations = {
7
+ and,
8
+ asc,
9
+ or,
10
+ eq,
11
+ gt,
12
+ gte,
13
+ lte,
14
+ inArray,
15
+ isNull,
16
+ notExists,
17
+ sql,
18
+ getTableColumns,
19
+ column,
20
+ updateValues,
21
+ balancedD1And,
22
+ compactD1GeneratedStatement
23
+ };
24
+ //#endregion
25
+ export { drizzleQueryOperations };
26
+
27
+ //# sourceMappingURL=query-operations.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-operations.mjs","names":[],"sources":["../../src/drizzle/query-operations.ts"],"sourcesContent":["import type { QueryOperations } from \"@yielded/auth-persistence/Adapter\";\nimport {\n type SQL,\n type AnyColumn,\n and,\n asc,\n or,\n eq,\n gt,\n gte,\n lte,\n inArray,\n isNull,\n notExists,\n sql,\n getTableColumns,\n} from \"drizzle-orm\";\n\nimport { balancedD1And, compactD1GeneratedStatement } from \"./d1-generated-statement\";\nimport { column, updateValues } from \"./model\";\n\nconst operations = {\n and,\n asc,\n or,\n eq,\n gt,\n gte,\n lte,\n inArray,\n isNull,\n notExists,\n sql,\n getTableColumns,\n column,\n updateValues,\n balancedD1And,\n compactD1GeneratedStatement,\n};\n\n/** The shared kernel only passes tables and expressions from this compiler.\n * Erasure stops at query shapes; row codecs and Effect errors remain explicit. */\nexport const drizzleQueryOperations = operations as unknown as QueryOperations<SQL, AnyColumn>;\n"],"mappings":";;;;;AA0CA,MAAa,yBAAyB;CApBpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAKoC"}
@@ -0,0 +1,31 @@
1
+ import { DrizzleTableModel } from "./table-model.mjs";
2
+ import * as Shared from "@yielded/auth-persistence/Adapter";
3
+ import { RequiredPendingAuthenticationConstraints, RequiredSessionConstraints, RequiredSignedValidityConstraints, RequiredStatefulPendingConstraints, SessionConstraintClassifier, SessionIdCodec, requiredPendingAuthenticationConstraints, requiredSessionConstraints, requiredSignedValidityConstraints, requiredStatefulPendingConstraints } from "@yielded/auth-persistence/Adapter";
4
+ import { SQL, Table } from "drizzle-orm";
5
+ //#region src/drizzle/session-model.d.ts
6
+ export type SessionSubjectTables<Subject extends Table, NativeId> = Shared.SessionSubjectTables<DrizzleTableModel<Subject>, NativeId>;
7
+ export type SessionAuthorityTables<Subject extends Table, Credential extends Table, NativeId> = Shared.SessionAuthorityTables<DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, NativeId>;
8
+ export type SessionFlowTables<Flow extends Table, NativeSubjectId> = Shared.SessionFlowTables<DrizzleTableModel<Flow>, NativeSubjectId>;
9
+ export type StatefulSessionTables<Claims, Session extends Table, Flow extends Table, NativeSubjectId, NativeSessionId> = Shared.StatefulSessionTables<Claims, DrizzleTableModel<Session>, DrizzleTableModel<Flow>, NativeSubjectId, NativeSessionId>;
10
+ export type PendingAuthenticationTables<Claims, Pending extends Table, Flow extends Table, NativeSubjectId> = Shared.PendingAuthenticationTables<Claims, DrizzleTableModel<Pending>, DrizzleTableModel<Flow>, NativeSubjectId>;
11
+ export type SignedSessionValidityTables<Tombstone extends Table, NativeSubjectId, NativeSessionId> = Shared.SignedSessionValidityTables<DrizzleTableModel<Tombstone>, NativeSubjectId, NativeSessionId>;
12
+ export type AuthenticationAuthorityMapping<Claims, Subject extends Table, Credential extends Table, Flow extends Table, Pending extends Table, NativeSubjectId> = Shared.AuthenticationAuthorityMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Flow>, DrizzleTableModel<Pending>, NativeSubjectId>;
13
+ export type StatefulSessionMapping<Claims, Subject extends Table, Credential extends Table, Session extends Table, Flow extends Table, Pending extends Table, NativeSubjectId, NativeSessionId> = Shared.StatefulSessionMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Session>, DrizzleTableModel<Flow>, DrizzleTableModel<Pending>, NativeSubjectId, NativeSessionId>;
14
+ export type PendingAuthenticationMapping<Claims, Subject extends Table, Credential extends Table, Pending extends Table, Flow extends Table, NativeSubjectId> = Shared.PendingAuthenticationMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Pending>, DrizzleTableModel<Flow>, NativeSubjectId>;
15
+ export type SignedSessionValidityMapping<Subject extends Table, Tombstone extends Table, NativeSubjectId, NativeSessionId> = Shared.SignedSessionValidityMapping<DrizzleTableModel<Subject>, DrizzleTableModel<Tombstone>, NativeSubjectId, NativeSessionId>;
16
+ /** D1 evaluates these expressions inside the atomic batch, after queueing delay.
17
+ * `engineNow` must use the exact native representation of every mapped instant
18
+ * column. `engineNowMillis` is Unix epoch milliseconds for proof freshness.
19
+ * Changes to the consumer's factor policy MUST bump subject.securityRevision.
20
+ * Supply the authoritative primary D1 database, never a replica-affined
21
+ * `withSession` handle, because verification and security revision reads must
22
+ * observe completed revocation writes across clients.
23
+ */
24
+ export type D1SessionClockMapping = Shared.D1SessionClockMapping<SQL>;
25
+ export type D1AuthenticationAuthorityMapping<Claims, Subject extends Table, Credential extends Table, Flow extends Table, Pending extends Table, NativeSubjectId> = Shared.D1AuthenticationAuthorityMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Flow>, DrizzleTableModel<Pending>, NativeSubjectId, SQL>;
26
+ export type D1PendingAuthenticationMapping<Claims, Subject extends Table, Credential extends Table, Pending extends Table, Flow extends Table, NativeSubjectId> = Shared.D1PendingAuthenticationMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Pending>, DrizzleTableModel<Flow>, NativeSubjectId, SQL>;
27
+ export type D1StatefulSessionMapping<Claims, Subject extends Table, Credential extends Table, Session extends Table, Flow extends Table, Pending extends Table, NativeSubjectId, NativeSessionId> = Shared.D1StatefulSessionMapping<Claims, DrizzleTableModel<Subject>, DrizzleTableModel<Credential>, DrizzleTableModel<Session>, DrizzleTableModel<Flow>, DrizzleTableModel<Pending>, NativeSubjectId, NativeSessionId, SQL>;
28
+ export type D1SignedSessionValidityMapping<Subject extends Table, Tombstone extends Table, NativeSubjectId, NativeSessionId> = Shared.D1SignedSessionValidityMapping<DrizzleTableModel<Subject>, DrizzleTableModel<Tombstone>, NativeSubjectId, NativeSessionId, SQL>;
29
+ //#endregion
30
+ export { type RequiredPendingAuthenticationConstraints, type RequiredSessionConstraints, type RequiredSignedValidityConstraints, type RequiredStatefulPendingConstraints, type SessionConstraintClassifier, type SessionIdCodec, requiredPendingAuthenticationConstraints, requiredSessionConstraints, requiredSignedValidityConstraints, requiredStatefulPendingConstraints };
31
+ //# sourceMappingURL=session-model.d.mts.map
@@ -0,0 +1,2 @@
1
+ import { requiredPendingAuthenticationConstraints, requiredSessionConstraints, requiredSignedValidityConstraints, requiredStatefulPendingConstraints } from "@yielded/auth-persistence/Adapter";
2
+ export { requiredPendingAuthenticationConstraints, requiredSessionConstraints, requiredSignedValidityConstraints, requiredStatefulPendingConstraints };