@yielded/auth-persistence 0.1.0-beta.7

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 (526) hide show
  1. package/README.md +21 -0
  2. package/dist/Drizzle.d.mts +28 -0
  3. package/dist/Drizzle.mjs +28 -0
  4. package/dist/DrizzleD1.d.mts +963 -0
  5. package/dist/DrizzleD1.mjs +29 -0
  6. package/dist/DrizzleD1.mjs.map +1 -0
  7. package/dist/DrizzleLibsql.d.mts +2284 -0
  8. package/dist/DrizzleLibsql.mjs +92 -0
  9. package/dist/DrizzleLibsql.mjs.map +1 -0
  10. package/dist/DrizzleMysql2.d.mts +1820 -0
  11. package/dist/DrizzleMysql2.mjs +55 -0
  12. package/dist/DrizzleMysql2.mjs.map +1 -0
  13. package/dist/DrizzlePglite.d.mts +1826 -0
  14. package/dist/DrizzlePglite.mjs +53 -0
  15. package/dist/DrizzlePglite.mjs.map +1 -0
  16. package/dist/DrizzlePostgres.d.mts +1826 -0
  17. package/dist/DrizzlePostgres.mjs +53 -0
  18. package/dist/DrizzlePostgres.mjs.map +1 -0
  19. package/dist/DrizzleSqliteBun.d.mts +2279 -0
  20. package/dist/DrizzleSqliteBun.mjs +70 -0
  21. package/dist/DrizzleSqliteBun.mjs.map +1 -0
  22. package/dist/DrizzleSqliteDo.d.mts +2329 -0
  23. package/dist/DrizzleSqliteDo.mjs +105 -0
  24. package/dist/DrizzleSqliteDo.mjs.map +1 -0
  25. package/dist/DrizzleSqliteNode.d.mts +2279 -0
  26. package/dist/DrizzleSqliteNode.mjs +70 -0
  27. package/dist/DrizzleSqliteNode.mjs.map +1 -0
  28. package/dist/DrizzleSqliteWasm.d.mts +2282 -0
  29. package/dist/DrizzleSqliteWasm.mjs +70 -0
  30. package/dist/DrizzleSqliteWasm.mjs.map +1 -0
  31. package/dist/drizzle/D1BatchStatements.d.mts +11 -0
  32. package/dist/drizzle/D1BatchStatements.mjs +8 -0
  33. package/dist/drizzle/D1BatchStatements.mjs.map +1 -0
  34. package/dist/drizzle/PasswordPreparedPostconditions.mjs +12 -0
  35. package/dist/drizzle/PasswordPreparedPostconditions.mjs.map +1 -0
  36. package/dist/drizzle/SuppliedService.d.mts +10 -0
  37. package/dist/drizzle/d1-emails.d.mts +62 -0
  38. package/dist/drizzle/d1-emails.mjs +580 -0
  39. package/dist/drizzle/d1-emails.mjs.map +1 -0
  40. package/dist/drizzle/d1-generated-statement.d.mts +2 -0
  41. package/dist/drizzle/d1-generated-statement.mjs +79 -0
  42. package/dist/drizzle/d1-generated-statement.mjs.map +1 -0
  43. package/dist/drizzle/d1-identity.d.mts +31 -0
  44. package/dist/drizzle/d1-identity.mjs +119 -0
  45. package/dist/drizzle/d1-identity.mjs.map +1 -0
  46. package/dist/drizzle/d1-oauth.d.mts +301 -0
  47. package/dist/drizzle/d1-oauth.mjs +76 -0
  48. package/dist/drizzle/d1-oauth.mjs.map +1 -0
  49. package/dist/drizzle/d1-passkey.d.mts +51 -0
  50. package/dist/drizzle/d1-passkey.mjs +95 -0
  51. package/dist/drizzle/d1-passkey.mjs.map +1 -0
  52. package/dist/drizzle/d1-password-prepared.d.mts +25 -0
  53. package/dist/drizzle/d1-password-prepared.mjs +461 -0
  54. package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
  55. package/dist/drizzle/d1-passwords.d.mts +87 -0
  56. package/dist/drizzle/d1-passwords.mjs +1004 -0
  57. package/dist/drizzle/d1-passwords.mjs.map +1 -0
  58. package/dist/drizzle/d1-phone.d.mts +26 -0
  59. package/dist/drizzle/d1-phone.mjs +30 -0
  60. package/dist/drizzle/d1-phone.mjs.map +1 -0
  61. package/dist/drizzle/d1-planning.d.mts +12 -0
  62. package/dist/drizzle/d1-planning.mjs +43 -0
  63. package/dist/drizzle/d1-planning.mjs.map +1 -0
  64. package/dist/drizzle/d1-proofs.d.mts +80 -0
  65. package/dist/drizzle/d1-proofs.mjs +830 -0
  66. package/dist/drizzle/d1-proofs.mjs.map +1 -0
  67. package/dist/drizzle/d1-sessions.d.mts +67 -0
  68. package/dist/drizzle/d1-sessions.mjs +966 -0
  69. package/dist/drizzle/d1-sessions.mjs.map +1 -0
  70. package/dist/drizzle/d1-totp.d.mts +26 -0
  71. package/dist/drizzle/d1-totp.mjs +27 -0
  72. package/dist/drizzle/d1-totp.mjs.map +1 -0
  73. package/dist/drizzle/email-model.d.mts +354 -0
  74. package/dist/drizzle/email-model.mjs +21 -0
  75. package/dist/drizzle/email-model.mjs.map +1 -0
  76. package/dist/drizzle/email-registration.d.mts +30 -0
  77. package/dist/drizzle/email-registration.mjs +238 -0
  78. package/dist/drizzle/email-registration.mjs.map +1 -0
  79. package/dist/drizzle/email-sql.d.mts +4 -0
  80. package/dist/drizzle/email-sql.mjs +9 -0
  81. package/dist/drizzle/email-sql.mjs.map +1 -0
  82. package/dist/drizzle/email-target.d.mts +20 -0
  83. package/dist/drizzle/email-target.mjs +72 -0
  84. package/dist/drizzle/email-target.mjs.map +1 -0
  85. package/dist/drizzle/model.d.mts +250 -0
  86. package/dist/drizzle/model.mjs +58 -0
  87. package/dist/drizzle/model.mjs.map +1 -0
  88. package/dist/drizzle/mysql-emails.d.mts +71 -0
  89. package/dist/drizzle/mysql-emails.mjs +38 -0
  90. package/dist/drizzle/mysql-emails.mjs.map +1 -0
  91. package/dist/drizzle/mysql-identity.d.mts +22 -0
  92. package/dist/drizzle/mysql-identity.mjs +94 -0
  93. package/dist/drizzle/mysql-identity.mjs.map +1 -0
  94. package/dist/drizzle/mysql-password-prepared.d.mts +30 -0
  95. package/dist/drizzle/mysql-password-prepared.mjs +16 -0
  96. package/dist/drizzle/mysql-password-prepared.mjs.map +1 -0
  97. package/dist/drizzle/mysql-passwords.d.mts +86 -0
  98. package/dist/drizzle/mysql-passwords.mjs +38 -0
  99. package/dist/drizzle/mysql-passwords.mjs.map +1 -0
  100. package/dist/drizzle/mysql-proofs.d.mts +75 -0
  101. package/dist/drizzle/mysql-proofs.mjs +23 -0
  102. package/dist/drizzle/mysql-proofs.mjs.map +1 -0
  103. package/dist/drizzle/mysql-sessions.d.mts +237 -0
  104. package/dist/drizzle/mysql-sessions.mjs +53 -0
  105. package/dist/drizzle/mysql-sessions.mjs.map +1 -0
  106. package/dist/drizzle/mysql.d.mts +70 -0
  107. package/dist/drizzle/mysql.mjs +218 -0
  108. package/dist/drizzle/mysql.mjs.map +1 -0
  109. package/dist/drizzle/oauth-accounts.mjs +358 -0
  110. package/dist/drizzle/oauth-accounts.mjs.map +1 -0
  111. package/dist/drizzle/oauth-connected-access.mjs +210 -0
  112. package/dist/drizzle/oauth-connected-access.mjs.map +1 -0
  113. package/dist/drizzle/oauth-connected-collection.mjs +202 -0
  114. package/dist/drizzle/oauth-connected-collection.mjs.map +1 -0
  115. package/dist/drizzle/oauth-connected-custody.mjs +146 -0
  116. package/dist/drizzle/oauth-connected-custody.mjs.map +1 -0
  117. package/dist/drizzle/oauth-connected-drivers.mjs +76 -0
  118. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
  119. package/dist/drizzle/oauth-connected-flow.mjs +247 -0
  120. package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
  121. package/dist/drizzle/oauth-connected-input.mjs +103 -0
  122. package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
  123. package/dist/drizzle/oauth-connected-maintenance.mjs +214 -0
  124. package/dist/drizzle/oauth-connected-maintenance.mjs.map +1 -0
  125. package/dist/drizzle/oauth-connected-management.mjs +228 -0
  126. package/dist/drizzle/oauth-connected-management.mjs.map +1 -0
  127. package/dist/drizzle/oauth-connected-model.d.mts +278 -0
  128. package/dist/drizzle/oauth-connected-model.mjs +22 -0
  129. package/dist/drizzle/oauth-connected-model.mjs.map +1 -0
  130. package/dist/drizzle/oauth-connected-reference.d.mts +17 -0
  131. package/dist/drizzle/oauth-connected-reference.mjs +53 -0
  132. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -0
  133. package/dist/drizzle/oauth-connected-settlement.mjs +117 -0
  134. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -0
  135. package/dist/drizzle/oauth-connected-state.d.mts +14 -0
  136. package/dist/drizzle/oauth-connected-state.mjs +422 -0
  137. package/dist/drizzle/oauth-connected-state.mjs.map +1 -0
  138. package/dist/drizzle/oauth-connected-target.d.mts +753 -0
  139. package/dist/drizzle/oauth-connected-target.mjs +91 -0
  140. package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
  141. package/dist/drizzle/oauth-drivers.mjs +51 -0
  142. package/dist/drizzle/oauth-drivers.mjs.map +1 -0
  143. package/dist/drizzle/oauth-flow.d.mts +5 -0
  144. package/dist/drizzle/oauth-flow.mjs +253 -0
  145. package/dist/drizzle/oauth-flow.mjs.map +1 -0
  146. package/dist/drizzle/oauth-input.mjs +127 -0
  147. package/dist/drizzle/oauth-input.mjs.map +1 -0
  148. package/dist/drizzle/oauth-model.d.mts +463 -0
  149. package/dist/drizzle/oauth-model.mjs +49 -0
  150. package/dist/drizzle/oauth-model.mjs.map +1 -0
  151. package/dist/drizzle/oauth-mysql.mjs +8 -0
  152. package/dist/drizzle/oauth-mysql.mjs.map +1 -0
  153. package/dist/drizzle/oauth-owner.d.mts +4 -0
  154. package/dist/drizzle/oauth-owner.mjs +10 -0
  155. package/dist/drizzle/oauth-owner.mjs.map +1 -0
  156. package/dist/drizzle/oauth-registration.d.mts +6 -0
  157. package/dist/drizzle/oauth-registration.mjs +374 -0
  158. package/dist/drizzle/oauth-registration.mjs.map +1 -0
  159. package/dist/drizzle/oauth-state.mjs +107 -0
  160. package/dist/drizzle/oauth-state.mjs.map +1 -0
  161. package/dist/drizzle/oauth-target.d.mts +111 -0
  162. package/dist/drizzle/oauth-target.mjs +246 -0
  163. package/dist/drizzle/oauth-target.mjs.map +1 -0
  164. package/dist/drizzle/passkey-drivers.mjs +34 -0
  165. package/dist/drizzle/passkey-drivers.mjs.map +1 -0
  166. package/dist/drizzle/passkey-kernel.mjs +8 -0
  167. package/dist/drizzle/passkey-kernel.mjs.map +1 -0
  168. package/dist/drizzle/passkey-model.d.mts +272 -0
  169. package/dist/drizzle/passkey-model.mjs +34 -0
  170. package/dist/drizzle/passkey-model.mjs.map +1 -0
  171. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +50 -0
  172. package/dist/drizzle/passkey-registration-ceremony-model.mjs +18 -0
  173. package/dist/drizzle/passkey-registration-ceremony-model.mjs.map +1 -0
  174. package/dist/drizzle/passkey-state.mjs +7 -0
  175. package/dist/drizzle/passkey-state.mjs.map +1 -0
  176. package/dist/drizzle/passkey-target.d.mts +9 -0
  177. package/dist/drizzle/passkey-target.mjs +7 -0
  178. package/dist/drizzle/passkey-target.mjs.map +1 -0
  179. package/dist/drizzle/passkey-write-drivers.mjs +32 -0
  180. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
  181. package/dist/drizzle/passkey-write-model.d.mts +190 -0
  182. package/dist/drizzle/passkey-write-model.mjs +13 -0
  183. package/dist/drizzle/passkey-write-model.mjs.map +1 -0
  184. package/dist/drizzle/passkey-write-target.d.mts +11 -0
  185. package/dist/drizzle/passkey-write-target.mjs +7 -0
  186. package/dist/drizzle/passkey-write-target.mjs.map +1 -0
  187. package/dist/drizzle/password-model.d.mts +329 -0
  188. package/dist/drizzle/password-model.mjs +23 -0
  189. package/dist/drizzle/password-model.mjs.map +1 -0
  190. package/dist/drizzle/password-prepared-model.d.mts +94 -0
  191. package/dist/drizzle/password-prepared-model.mjs +11 -0
  192. package/dist/drizzle/password-prepared-model.mjs.map +1 -0
  193. package/dist/drizzle/password-prepared-sql.mjs +390 -0
  194. package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
  195. package/dist/drizzle/password-prepared-state.mjs +104 -0
  196. package/dist/drizzle/password-prepared-state.mjs.map +1 -0
  197. package/dist/drizzle/password-prepared-target.d.mts +12 -0
  198. package/dist/drizzle/password-prepared-target.mjs +56 -0
  199. package/dist/drizzle/password-prepared-target.mjs.map +1 -0
  200. package/dist/drizzle/password-registration.d.mts +19 -0
  201. package/dist/drizzle/password-registration.mjs +135 -0
  202. package/dist/drizzle/password-registration.mjs.map +1 -0
  203. package/dist/drizzle/password-sql.d.mts +5 -0
  204. package/dist/drizzle/password-sql.mjs +9 -0
  205. package/dist/drizzle/password-sql.mjs.map +1 -0
  206. package/dist/drizzle/password-target.d.mts +17 -0
  207. package/dist/drizzle/password-target.mjs +61 -0
  208. package/dist/drizzle/password-target.mjs.map +1 -0
  209. package/dist/drizzle/pg-emails.d.mts +72 -0
  210. package/dist/drizzle/pg-emails.mjs +38 -0
  211. package/dist/drizzle/pg-emails.mjs.map +1 -0
  212. package/dist/drizzle/pg-password-prepared.d.mts +31 -0
  213. package/dist/drizzle/pg-password-prepared.mjs +16 -0
  214. package/dist/drizzle/pg-password-prepared.mjs.map +1 -0
  215. package/dist/drizzle/pg-passwords.d.mts +87 -0
  216. package/dist/drizzle/pg-passwords.mjs +38 -0
  217. package/dist/drizzle/pg-passwords.mjs.map +1 -0
  218. package/dist/drizzle/pg-proofs.d.mts +76 -0
  219. package/dist/drizzle/pg-proofs.mjs +22 -0
  220. package/dist/drizzle/pg-proofs.mjs.map +1 -0
  221. package/dist/drizzle/pg-sessions.d.mts +238 -0
  222. package/dist/drizzle/pg-sessions.mjs +53 -0
  223. package/dist/drizzle/pg-sessions.mjs.map +1 -0
  224. package/dist/drizzle/pg.d.mts +81 -0
  225. package/dist/drizzle/pg.mjs +290 -0
  226. package/dist/drizzle/pg.mjs.map +1 -0
  227. package/dist/drizzle/phone-model.d.mts +115 -0
  228. package/dist/drizzle/phone-model.mjs +39 -0
  229. package/dist/drizzle/phone-model.mjs.map +1 -0
  230. package/dist/drizzle/phone-state.mjs +16 -0
  231. package/dist/drizzle/phone-state.mjs.map +1 -0
  232. package/dist/drizzle/phone-target.d.mts +17 -0
  233. package/dist/drizzle/phone-target.mjs +170 -0
  234. package/dist/drizzle/phone-target.mjs.map +1 -0
  235. package/dist/drizzle/proof-model.d.mts +286 -0
  236. package/dist/drizzle/proof-model.mjs +17 -0
  237. package/dist/drizzle/proof-model.mjs.map +1 -0
  238. package/dist/drizzle/proof-sql.d.mts +4 -0
  239. package/dist/drizzle/proof-sql.mjs +8 -0
  240. package/dist/drizzle/proof-sql.mjs.map +1 -0
  241. package/dist/drizzle/proof-target.d.mts +12 -0
  242. package/dist/drizzle/proof-target.mjs +36 -0
  243. package/dist/drizzle/proof-target.mjs.map +1 -0
  244. package/dist/drizzle/query-operations.mjs +26 -0
  245. package/dist/drizzle/query-operations.mjs.map +1 -0
  246. package/dist/drizzle/session-model.d.mts +200 -0
  247. package/dist/drizzle/session-model.mjs +20 -0
  248. package/dist/drizzle/session-model.mjs.map +1 -0
  249. package/dist/drizzle/session-sql.mjs +8 -0
  250. package/dist/drizzle/session-sql.mjs.map +1 -0
  251. package/dist/drizzle/session-target.d.mts +28 -0
  252. package/dist/drizzle/session-target.mjs +47 -0
  253. package/dist/drizzle/session-target.mjs.map +1 -0
  254. package/dist/drizzle/sqlite-emails.mjs +45 -0
  255. package/dist/drizzle/sqlite-emails.mjs.map +1 -0
  256. package/dist/drizzle/sqlite-identity.mjs +91 -0
  257. package/dist/drizzle/sqlite-identity.mjs.map +1 -0
  258. package/dist/drizzle/sqlite-password-prepared.mjs +21 -0
  259. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -0
  260. package/dist/drizzle/sqlite-passwords.mjs +49 -0
  261. package/dist/drizzle/sqlite-passwords.mjs.map +1 -0
  262. package/dist/drizzle/sqlite-proofs.mjs +29 -0
  263. package/dist/drizzle/sqlite-proofs.mjs.map +1 -0
  264. package/dist/drizzle/sqlite-sessions.mjs +74 -0
  265. package/dist/drizzle/sqlite-sessions.mjs.map +1 -0
  266. package/dist/drizzle/sqlite.d.mts +78 -0
  267. package/dist/drizzle/sqlite.mjs +217 -0
  268. package/dist/drizzle/sqlite.mjs.map +1 -0
  269. package/dist/drizzle/standalone-guard.mjs +19 -0
  270. package/dist/drizzle/standalone-guard.mjs.map +1 -0
  271. package/dist/drizzle/step-up-model.d.mts +65 -0
  272. package/dist/drizzle/step-up-model.mjs +9 -0
  273. package/dist/drizzle/step-up-model.mjs.map +1 -0
  274. package/dist/drizzle/step-up-state.mjs +32 -0
  275. package/dist/drizzle/step-up-state.mjs.map +1 -0
  276. package/dist/drizzle/totp-model.d.mts +84 -0
  277. package/dist/drizzle/totp-model.mjs +13 -0
  278. package/dist/drizzle/totp-model.mjs.map +1 -0
  279. package/dist/drizzle/totp-state.d.mts +38 -0
  280. package/dist/drizzle/totp-state.mjs +287 -0
  281. package/dist/drizzle/totp-state.mjs.map +1 -0
  282. package/dist/drizzle/totp-target.d.mts +17 -0
  283. package/dist/drizzle/totp-target.mjs +81 -0
  284. package/dist/drizzle/totp-target.mjs.map +1 -0
  285. package/dist/drizzle/transaction-execution.d.mts +4 -0
  286. package/dist/drizzle/transaction-execution.mjs +11 -0
  287. package/dist/drizzle/transaction-execution.mjs.map +1 -0
  288. package/dist/drizzle/transaction-mysql.mjs +46 -0
  289. package/dist/drizzle/transaction-mysql.mjs.map +1 -0
  290. package/dist/drizzle/transaction-owner.d.mts +2 -0
  291. package/dist/drizzle/transaction-owner.mjs +8 -0
  292. package/dist/drizzle/transaction-owner.mjs.map +1 -0
  293. package/dist/index.d.mts +5 -0
  294. package/dist/index.mjs +5 -0
  295. package/dist/internal/configuration.d.mts +174 -0
  296. package/dist/internal/configuration.mjs +7 -0
  297. package/dist/internal/configuration.mjs.map +1 -0
  298. package/dist/internal/drizzle-migrations.mjs +19 -0
  299. package/dist/internal/drizzle-migrations.mjs.map +1 -0
  300. package/dist/internal/drizzle-postgres.mjs +39 -0
  301. package/dist/internal/drizzle-postgres.mjs.map +1 -0
  302. package/dist/internal/drizzle-sqlite.mjs +37 -0
  303. package/dist/internal/drizzle-sqlite.mjs.map +1 -0
  304. package/dist/internal/email-kernel.d.mts +13 -0
  305. package/dist/internal/email-kernel.mjs +487 -0
  306. package/dist/internal/email-kernel.mjs.map +1 -0
  307. package/dist/internal/mapping-error.d.mts +11 -0
  308. package/dist/internal/mapping-error.mjs +30 -0
  309. package/dist/internal/mapping-error.mjs.map +1 -0
  310. package/dist/internal/passkey/admission.d.mts +7 -0
  311. package/dist/internal/passkey/admission.mjs +216 -0
  312. package/dist/internal/passkey/admission.mjs.map +1 -0
  313. package/dist/internal/passkey/credentials.d.mts +6 -0
  314. package/dist/internal/passkey/credentials.mjs +249 -0
  315. package/dist/internal/passkey/credentials.mjs.map +1 -0
  316. package/dist/internal/passkey/enrollment.mjs +138 -0
  317. package/dist/internal/passkey/enrollment.mjs.map +1 -0
  318. package/dist/internal/passkey/flow.d.mts +10 -0
  319. package/dist/internal/passkey/flow.mjs +452 -0
  320. package/dist/internal/passkey/flow.mjs.map +1 -0
  321. package/dist/internal/passkey/management.mjs +231 -0
  322. package/dist/internal/passkey/management.mjs.map +1 -0
  323. package/dist/internal/passkey/registration-ceremony.d.mts +9 -0
  324. package/dist/internal/passkey/registration-ceremony.mjs +129 -0
  325. package/dist/internal/passkey/registration-ceremony.mjs.map +1 -0
  326. package/dist/internal/passkey/registration-custody.d.mts +2 -0
  327. package/dist/internal/passkey/registration-custody.mjs +52 -0
  328. package/dist/internal/passkey/registration-custody.mjs.map +1 -0
  329. package/dist/internal/passkey/registration-write.mjs +211 -0
  330. package/dist/internal/passkey/registration-write.mjs.map +1 -0
  331. package/dist/internal/passkey/state.d.mts +5 -0
  332. package/dist/internal/passkey/state.mjs +234 -0
  333. package/dist/internal/passkey/state.mjs.map +1 -0
  334. package/dist/internal/passkey/target.d.mts +19 -0
  335. package/dist/internal/passkey/target.mjs +190 -0
  336. package/dist/internal/passkey/target.mjs.map +1 -0
  337. package/dist/internal/passkey/write-state.mjs +345 -0
  338. package/dist/internal/passkey/write-state.mjs.map +1 -0
  339. package/dist/internal/passkey/write-target.mjs +192 -0
  340. package/dist/internal/passkey/write-target.mjs.map +1 -0
  341. package/dist/internal/passkey-kernel.mjs +49 -0
  342. package/dist/internal/passkey-kernel.mjs.map +1 -0
  343. package/dist/internal/passkeys.mjs +367 -0
  344. package/dist/internal/passkeys.mjs.map +1 -0
  345. package/dist/internal/password-kernel.d.mts +13 -0
  346. package/dist/internal/password-kernel.mjs +704 -0
  347. package/dist/internal/password-kernel.mjs.map +1 -0
  348. package/dist/internal/persistence.mjs +289 -0
  349. package/dist/internal/persistence.mjs.map +1 -0
  350. package/dist/internal/phone-kernel.mjs +434 -0
  351. package/dist/internal/phone-kernel.mjs.map +1 -0
  352. package/dist/internal/proof-kernel.d.mts +9 -0
  353. package/dist/internal/proof-kernel.mjs +619 -0
  354. package/dist/internal/proof-kernel.mjs.map +1 -0
  355. package/dist/internal/query-operations.d.mts +3 -0
  356. package/dist/internal/registration.mjs +65 -0
  357. package/dist/internal/registration.mjs.map +1 -0
  358. package/dist/internal/session-kernel.mjs +737 -0
  359. package/dist/internal/session-kernel.mjs.map +1 -0
  360. package/dist/internal/sql-persistence.d.mts +11 -0
  361. package/dist/internal/sql-persistence.mjs +37 -0
  362. package/dist/internal/sql-persistence.mjs.map +1 -0
  363. package/dist/internal/sql-query.mjs +207 -0
  364. package/dist/internal/sql-query.mjs.map +1 -0
  365. package/dist/internal/sql-table.d.mts +37 -0
  366. package/dist/internal/sql-table.mjs +71 -0
  367. package/dist/internal/sql-table.mjs.map +1 -0
  368. package/dist/internal/storage-mapping.mjs +687 -0
  369. package/dist/internal/storage-mapping.mjs.map +1 -0
  370. package/dist/internal/storage-tables.d.mts +914 -0
  371. package/dist/internal/storage-tables.mjs +387 -0
  372. package/dist/internal/storage-tables.mjs.map +1 -0
  373. package/dist/internal/storage-validation.mjs +58 -0
  374. package/dist/internal/storage-validation.mjs.map +1 -0
  375. package/dist/internal/transaction-execution-kernel.d.mts +18 -0
  376. package/dist/internal/transaction-execution-kernel.mjs +118 -0
  377. package/dist/internal/transaction-execution-kernel.mjs.map +1 -0
  378. package/dist/internal/transaction-kernel.d.mts +7 -0
  379. package/dist/internal/transaction-kernel.mjs +260 -0
  380. package/dist/internal/transaction-kernel.mjs.map +1 -0
  381. package/package.json +1 -0
  382. package/src/Drizzle.ts +378 -0
  383. package/src/DrizzleD1.ts +136 -0
  384. package/src/DrizzleLibsql.ts +301 -0
  385. package/src/DrizzleMysql2.ts +184 -0
  386. package/src/DrizzlePglite.ts +174 -0
  387. package/src/DrizzlePostgres.ts +174 -0
  388. package/src/DrizzleSqliteBun.ts +258 -0
  389. package/src/DrizzleSqliteDo.ts +473 -0
  390. package/src/DrizzleSqliteNode.ts +259 -0
  391. package/src/DrizzleSqliteWasm.ts +263 -0
  392. package/src/drizzle/D1BatchStatements.ts +10 -0
  393. package/src/drizzle/PasswordPreparedPostconditions.ts +30 -0
  394. package/src/drizzle/SuppliedService.ts +10 -0
  395. package/src/drizzle/d1-emails.ts +1829 -0
  396. package/src/drizzle/d1-generated-statement.ts +129 -0
  397. package/src/drizzle/d1-identity.ts +375 -0
  398. package/src/drizzle/d1-oauth.ts +340 -0
  399. package/src/drizzle/d1-passkey.ts +373 -0
  400. package/src/drizzle/d1-password-prepared.ts +1270 -0
  401. package/src/drizzle/d1-passwords.ts +2656 -0
  402. package/src/drizzle/d1-phone.ts +96 -0
  403. package/src/drizzle/d1-planning.ts +104 -0
  404. package/src/drizzle/d1-proofs.ts +2305 -0
  405. package/src/drizzle/d1-sessions.ts +2857 -0
  406. package/src/drizzle/d1-totp.ts +78 -0
  407. package/src/drizzle/email-model.ts +516 -0
  408. package/src/drizzle/email-registration.ts +698 -0
  409. package/src/drizzle/email-sql.ts +24 -0
  410. package/src/drizzle/email-target.ts +243 -0
  411. package/src/drizzle/model.ts +463 -0
  412. package/src/drizzle/mysql-emails.ts +321 -0
  413. package/src/drizzle/mysql-identity.ts +324 -0
  414. package/src/drizzle/mysql-password-prepared.ts +204 -0
  415. package/src/drizzle/mysql-passwords.ts +339 -0
  416. package/src/drizzle/mysql-proofs.ts +181 -0
  417. package/src/drizzle/mysql-sessions.ts +741 -0
  418. package/src/drizzle/mysql.ts +687 -0
  419. package/src/drizzle/oauth-accounts.ts +804 -0
  420. package/src/drizzle/oauth-connected-access.ts +354 -0
  421. package/src/drizzle/oauth-connected-collection.ts +324 -0
  422. package/src/drizzle/oauth-connected-custody.ts +277 -0
  423. package/src/drizzle/oauth-connected-drivers.ts +465 -0
  424. package/src/drizzle/oauth-connected-flow.ts +441 -0
  425. package/src/drizzle/oauth-connected-input.ts +127 -0
  426. package/src/drizzle/oauth-connected-maintenance.ts +345 -0
  427. package/src/drizzle/oauth-connected-management.ts +365 -0
  428. package/src/drizzle/oauth-connected-model.ts +347 -0
  429. package/src/drizzle/oauth-connected-reference.ts +112 -0
  430. package/src/drizzle/oauth-connected-settlement.ts +226 -0
  431. package/src/drizzle/oauth-connected-state.ts +845 -0
  432. package/src/drizzle/oauth-connected-target.ts +264 -0
  433. package/src/drizzle/oauth-drivers.ts +569 -0
  434. package/src/drizzle/oauth-flow.ts +462 -0
  435. package/src/drizzle/oauth-input.ts +201 -0
  436. package/src/drizzle/oauth-model.ts +617 -0
  437. package/src/drizzle/oauth-mysql.ts +10 -0
  438. package/src/drizzle/oauth-owner.ts +29 -0
  439. package/src/drizzle/oauth-registration.ts +640 -0
  440. package/src/drizzle/oauth-state.ts +215 -0
  441. package/src/drizzle/oauth-target.ts +750 -0
  442. package/src/drizzle/passkey-drivers.ts +385 -0
  443. package/src/drizzle/passkey-kernel.ts +3 -0
  444. package/src/drizzle/passkey-model.ts +353 -0
  445. package/src/drizzle/passkey-registration-ceremony-model.ts +69 -0
  446. package/src/drizzle/passkey-state.ts +3 -0
  447. package/src/drizzle/passkey-target.ts +23 -0
  448. package/src/drizzle/passkey-write-drivers.ts +395 -0
  449. package/src/drizzle/passkey-write-model.ts +271 -0
  450. package/src/drizzle/passkey-write-target.ts +9 -0
  451. package/src/drizzle/password-model.ts +491 -0
  452. package/src/drizzle/password-prepared-model.ts +259 -0
  453. package/src/drizzle/password-prepared-sql.ts +1191 -0
  454. package/src/drizzle/password-prepared-state.ts +231 -0
  455. package/src/drizzle/password-prepared-target.ts +160 -0
  456. package/src/drizzle/password-registration.ts +374 -0
  457. package/src/drizzle/password-sql.ts +12 -0
  458. package/src/drizzle/password-target.ts +224 -0
  459. package/src/drizzle/pg-emails.ts +321 -0
  460. package/src/drizzle/pg-password-prepared.ts +205 -0
  461. package/src/drizzle/pg-passwords.ts +338 -0
  462. package/src/drizzle/pg-proofs.ts +191 -0
  463. package/src/drizzle/pg-sessions.ts +750 -0
  464. package/src/drizzle/pg.ts +984 -0
  465. package/src/drizzle/phone-model.ts +190 -0
  466. package/src/drizzle/phone-state.ts +21 -0
  467. package/src/drizzle/phone-target.ts +472 -0
  468. package/src/drizzle/proof-model.ts +398 -0
  469. package/src/drizzle/proof-sql.ts +9 -0
  470. package/src/drizzle/proof-target.ts +122 -0
  471. package/src/drizzle/query-operations.ts +37 -0
  472. package/src/drizzle/session-model.ts +370 -0
  473. package/src/drizzle/session-sql.ts +13 -0
  474. package/src/drizzle/session-target.ts +338 -0
  475. package/src/drizzle/sqlite-emails.ts +366 -0
  476. package/src/drizzle/sqlite-identity.ts +344 -0
  477. package/src/drizzle/sqlite-password-prepared.ts +260 -0
  478. package/src/drizzle/sqlite-passwords.ts +497 -0
  479. package/src/drizzle/sqlite-proofs.ts +202 -0
  480. package/src/drizzle/sqlite-sessions.ts +971 -0
  481. package/src/drizzle/sqlite.ts +705 -0
  482. package/src/drizzle/standalone-guard.ts +38 -0
  483. package/src/drizzle/step-up-model.ts +128 -0
  484. package/src/drizzle/step-up-state.ts +139 -0
  485. package/src/drizzle/totp-model.ts +92 -0
  486. package/src/drizzle/totp-state.ts +525 -0
  487. package/src/drizzle/totp-target.ts +308 -0
  488. package/src/drizzle/transaction-execution.ts +12 -0
  489. package/src/drizzle/transaction-mysql.ts +104 -0
  490. package/src/drizzle/transaction-owner.ts +10 -0
  491. package/src/index.ts +4 -0
  492. package/src/internal/configuration.ts +282 -0
  493. package/src/internal/drizzle-migrations.ts +30 -0
  494. package/src/internal/drizzle-postgres.ts +81 -0
  495. package/src/internal/drizzle-sqlite.ts +79 -0
  496. package/src/internal/email-kernel.ts +1532 -0
  497. package/src/internal/mapping-error.ts +36 -0
  498. package/src/internal/passkey/admission.ts +362 -0
  499. package/src/internal/passkey/credentials.ts +511 -0
  500. package/src/internal/passkey/enrollment.ts +326 -0
  501. package/src/internal/passkey/flow.ts +1062 -0
  502. package/src/internal/passkey/management.ts +422 -0
  503. package/src/internal/passkey/registration-ceremony.ts +283 -0
  504. package/src/internal/passkey/registration-custody.ts +91 -0
  505. package/src/internal/passkey/registration-write.ts +426 -0
  506. package/src/internal/passkey/state.ts +354 -0
  507. package/src/internal/passkey/target.ts +586 -0
  508. package/src/internal/passkey/write-state.ts +681 -0
  509. package/src/internal/passkey/write-target.ts +452 -0
  510. package/src/internal/passkey-kernel.ts +102 -0
  511. package/src/internal/passkeys.ts +597 -0
  512. package/src/internal/password-kernel.ts +2122 -0
  513. package/src/internal/persistence.ts +590 -0
  514. package/src/internal/phone-kernel.ts +843 -0
  515. package/src/internal/proof-kernel.ts +1949 -0
  516. package/src/internal/query-operations.ts +26 -0
  517. package/src/internal/registration.ts +160 -0
  518. package/src/internal/session-kernel.ts +2210 -0
  519. package/src/internal/sql-persistence.ts +45 -0
  520. package/src/internal/sql-query.ts +298 -0
  521. package/src/internal/sql-table.ts +89 -0
  522. package/src/internal/storage-mapping.ts +706 -0
  523. package/src/internal/storage-tables.ts +408 -0
  524. package/src/internal/storage-validation.ts +117 -0
  525. package/src/internal/transaction-execution-kernel.ts +317 -0
  526. package/src/internal/transaction-kernel.ts +582 -0
@@ -0,0 +1,395 @@
1
+ import type { LifecycleHooks } from "@yielded/auth/Hooks";
2
+ import { PasskeyManagementPersistence, PasskeyPersistence } from "@yielded/auth/Passkey";
3
+ import type { Table } from "drizzle-orm";
4
+ import { Context, Effect } from "effect";
5
+
6
+ import type { PasskeyMappingSource } from "./passkey-model";
7
+ import type { PasskeyCoordinatorError, PasskeyTargetConfiguration } from "./passkey-target";
8
+ import type {
9
+ PasskeyManagementMapping,
10
+ PasskeyRegistrationMapping,
11
+ PasskeyRegistrationWriter,
12
+ } from "./passkey-write-model";
13
+ import {
14
+ coordinateTargetPasskeyManagement,
15
+ coordinateTargetPasskeyRegistrationWriter,
16
+ makeTargetPasskeyManagement,
17
+ makeTargetPasskeyRegistrationWriter,
18
+ } from "./passkey-write-target";
19
+ import type { SuppliedService } from "./SuppliedService";
20
+ // oxlint-disable-next-line no-explicit-any -- inspect the installed concrete transaction callback.
21
+ type TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }
22
+ ? Parameters<Parameters<D["transaction"]>[0]>[0]
23
+ : never;
24
+
25
+ export const makePasskeyWriteTarget = <
26
+ D,
27
+ T extends Table,
28
+ Extra = unknown,
29
+ Synchronous extends boolean = false,
30
+ >(
31
+ configuration: PasskeyTargetConfiguration,
32
+ ) => {
33
+ function coordinatePasskeyManagement<
34
+ Database extends D,
35
+ S extends T,
36
+ C extends T,
37
+ F extends T,
38
+ O extends T,
39
+ H extends T,
40
+ M extends T,
41
+ Flow extends T,
42
+ Admission extends T,
43
+ Charge extends T,
44
+ Command extends T,
45
+ N,
46
+ A,
47
+ E,
48
+ R,
49
+ RSetup = never,
50
+ DatabaseError = never,
51
+ DatabaseRequirements = never,
52
+ >(
53
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
54
+ options: {
55
+ readonly mapping: PasskeyMappingSource<
56
+ PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,
57
+ RSetup
58
+ >;
59
+ readonly transaction?: never;
60
+ },
61
+ body: Effect.Effect<
62
+ A,
63
+ E,
64
+ Synchronous extends true ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence> : R
65
+ >,
66
+ ): Effect.Effect<
67
+ A,
68
+ PasskeyCoordinatorError<E> | DatabaseError,
69
+ | (Synchronous extends true
70
+ ? never
71
+ : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>)
72
+ | LifecycleHooks
73
+ | RSetup
74
+ | DatabaseRequirements
75
+ >;
76
+ function coordinatePasskeyManagement<
77
+ Database extends D,
78
+ S extends T,
79
+ C extends T,
80
+ F extends T,
81
+ O extends T,
82
+ H extends T,
83
+ M extends T,
84
+ Flow extends T,
85
+ Admission extends T,
86
+ Charge extends T,
87
+ Command extends T,
88
+ N,
89
+ A,
90
+ E,
91
+ R,
92
+ TxId,
93
+ TxShape,
94
+ RSetup = never,
95
+ DatabaseError = never,
96
+ DatabaseRequirements = never,
97
+ >(
98
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
99
+ options: {
100
+ readonly mapping: PasskeyMappingSource<
101
+ PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,
102
+ RSetup
103
+ >;
104
+ readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
105
+ },
106
+ body: Effect.Effect<
107
+ A,
108
+ E,
109
+ Synchronous extends true
110
+ ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence | TxId>
111
+ : R
112
+ >,
113
+ ): Effect.Effect<
114
+ A,
115
+ PasskeyCoordinatorError<E> | DatabaseError,
116
+ | (Synchronous extends true
117
+ ? never
118
+ : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence | TxId>)
119
+ | LifecycleHooks
120
+ | RSetup
121
+ | DatabaseRequirements
122
+ >;
123
+ function coordinatePasskeyManagement<
124
+ Database extends D,
125
+ S extends T,
126
+ C extends T,
127
+ F extends T,
128
+ O extends T,
129
+ H extends T,
130
+ M extends T,
131
+ Flow extends T,
132
+ Admission extends T,
133
+ Charge extends T,
134
+ Command extends T,
135
+ N,
136
+ A,
137
+ E,
138
+ R,
139
+ TxId,
140
+ TxShape,
141
+ RSetup = never,
142
+ DatabaseError = never,
143
+ DatabaseRequirements = never,
144
+ >(
145
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
146
+ options: {
147
+ readonly mapping: PasskeyMappingSource<
148
+ PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,
149
+ RSetup
150
+ >;
151
+ readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
152
+ },
153
+ body: Effect.Effect<A, E, R>,
154
+ ): Effect.Effect<
155
+ A,
156
+ PasskeyCoordinatorError<E> | DatabaseError,
157
+ | Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>
158
+ | LifecycleHooks
159
+ | RSetup
160
+ | DatabaseRequirements
161
+ > {
162
+ return Effect.flatMap(acquire, (database) =>
163
+ coordinateTargetPasskeyManagement(
164
+ database,
165
+ options.mapping,
166
+ configuration,
167
+ (transaction: TransactionOf<Database>, services) => {
168
+ const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(
169
+ Context.add(PasskeyManagementPersistence, services.passkeyManagementPersistence),
170
+ );
171
+
172
+ const work = Effect.provideContext(body, context);
173
+
174
+ return options.transaction === undefined
175
+ ? work
176
+ : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
177
+ },
178
+ ),
179
+ );
180
+ }
181
+
182
+ const makePasskeyManagementServices = <
183
+ Database extends D,
184
+ S extends T,
185
+ C extends T,
186
+ F extends T,
187
+ O extends T,
188
+ H extends T,
189
+ M extends T,
190
+ Flow extends T,
191
+ Admission extends T,
192
+ Charge extends T,
193
+ Command extends T,
194
+ N,
195
+ RSetup = never,
196
+ >(
197
+ database: Database,
198
+ mapping: PasskeyMappingSource<
199
+ PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,
200
+ RSetup
201
+ >,
202
+ ) => makeTargetPasskeyManagement(database, mapping, configuration);
203
+
204
+ function coordinatePasskeyRegistration<
205
+ Database extends D,
206
+ S extends T,
207
+ C extends T,
208
+ F extends T,
209
+ O extends T,
210
+ H extends T,
211
+ M extends T,
212
+ Flow extends T,
213
+ Admission extends T,
214
+ Charge extends T,
215
+ Intent extends T,
216
+ N,
217
+ Value,
218
+ A,
219
+ E,
220
+ R,
221
+ AuthorityId,
222
+ RSetup = never,
223
+ DatabaseError = never,
224
+ DatabaseRequirements = never,
225
+ >(
226
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
227
+ options: {
228
+ readonly mapping: PasskeyMappingSource<
229
+ PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &
230
+ Extra,
231
+ RSetup
232
+ >;
233
+ readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;
234
+ readonly transaction?: never;
235
+ },
236
+ body: Effect.Effect<
237
+ A,
238
+ E,
239
+ Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId> : R
240
+ >,
241
+ ): Effect.Effect<
242
+ A,
243
+ PasskeyCoordinatorError<E> | DatabaseError,
244
+ | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId>)
245
+ | LifecycleHooks
246
+ | RSetup
247
+ | DatabaseRequirements
248
+ >;
249
+ function coordinatePasskeyRegistration<
250
+ Database extends D,
251
+ S extends T,
252
+ C extends T,
253
+ F extends T,
254
+ O extends T,
255
+ H extends T,
256
+ M extends T,
257
+ Flow extends T,
258
+ Admission extends T,
259
+ Charge extends T,
260
+ Intent extends T,
261
+ N,
262
+ Value,
263
+ A,
264
+ E,
265
+ R,
266
+ AuthorityId,
267
+ TxId,
268
+ TxShape,
269
+ RSetup = never,
270
+ DatabaseError = never,
271
+ DatabaseRequirements = never,
272
+ >(
273
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
274
+ options: {
275
+ readonly mapping: PasskeyMappingSource<
276
+ PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &
277
+ Extra,
278
+ RSetup
279
+ >;
280
+ readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;
281
+ readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
282
+ },
283
+ body: Effect.Effect<
284
+ A,
285
+ E,
286
+ Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId | TxId> : R
287
+ >,
288
+ ): Effect.Effect<
289
+ A,
290
+ PasskeyCoordinatorError<E> | DatabaseError,
291
+ | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId | TxId>)
292
+ | LifecycleHooks
293
+ | RSetup
294
+ | DatabaseRequirements
295
+ >;
296
+ function coordinatePasskeyRegistration<
297
+ Database extends D,
298
+ S extends T,
299
+ C extends T,
300
+ F extends T,
301
+ O extends T,
302
+ H extends T,
303
+ M extends T,
304
+ Flow extends T,
305
+ Admission extends T,
306
+ Charge extends T,
307
+ Intent extends T,
308
+ N,
309
+ Value,
310
+ A,
311
+ E,
312
+ R,
313
+ AuthorityId,
314
+ TxId,
315
+ TxShape,
316
+ RSetup = never,
317
+ DatabaseError = never,
318
+ DatabaseRequirements = never,
319
+ >(
320
+ acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,
321
+ options: {
322
+ readonly mapping: PasskeyMappingSource<
323
+ PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &
324
+ Extra,
325
+ RSetup
326
+ >;
327
+ readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;
328
+ readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;
329
+ },
330
+ body: Effect.Effect<A, E, R>,
331
+ ): Effect.Effect<
332
+ A,
333
+ PasskeyCoordinatorError<E> | DatabaseError,
334
+ Exclude<R, PasskeyPersistence | AuthorityId> | LifecycleHooks | RSetup | DatabaseRequirements
335
+ > {
336
+ return Effect.flatMap(acquire, (database) =>
337
+ coordinateTargetPasskeyRegistrationWriter(
338
+ database,
339
+ options.mapping,
340
+ configuration,
341
+ (
342
+ transaction: TransactionOf<Database>,
343
+ services: import("./passkey-write-model").PasskeyRegistrationServices<Value>,
344
+ ) => {
345
+ const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(
346
+ Context.add(options.authority, services.passkeyRegistrationAuthority),
347
+ );
348
+
349
+ const work = Effect.provideContext(body, context);
350
+
351
+ return options.transaction === undefined
352
+ ? work
353
+ : Effect.provideService(work, options.transaction, options.transaction.of(transaction));
354
+ },
355
+ ),
356
+ );
357
+ }
358
+
359
+ const makePasskeyRegistrationServices = <
360
+ Database extends D,
361
+ S extends T,
362
+ C extends T,
363
+ F extends T,
364
+ O extends T,
365
+ H extends T,
366
+ M extends T,
367
+ Flow extends T,
368
+ Admission extends T,
369
+ Charge extends T,
370
+ Intent extends T,
371
+ N,
372
+ Value,
373
+ RSetup = never,
374
+ >(
375
+ database: Database,
376
+ mapping: PasskeyMappingSource<
377
+ PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &
378
+ Extra,
379
+ RSetup
380
+ >,
381
+ ) =>
382
+ makeTargetPasskeyRegistrationWriter<
383
+ PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &
384
+ Extra,
385
+ Value,
386
+ RSetup
387
+ >(database, mapping, configuration);
388
+
389
+ return {
390
+ makePasskeyManagementServices,
391
+ makePasskeyRegistrationServices,
392
+ coordinatePasskeyManagement,
393
+ coordinatePasskeyRegistration,
394
+ };
395
+ };
@@ -0,0 +1,271 @@
1
+ import type { PreparedCommit } from "@yielded/auth/Hooks";
2
+ import type {
3
+ PasskeyUnavailable,
4
+ PasskeyActionAuthorization,
5
+ PasskeyCeremony,
6
+ PasskeyClaim,
7
+ PasskeyCredential,
8
+ PasskeyCredentialSummary,
9
+ PasskeyIssueDecision,
10
+ PasskeyRegistrationResult,
11
+ PasskeyRegistrationVerified,
12
+ PasskeyRequirement,
13
+ PasskeyRevision,
14
+ PasskeyManagementPersistence,
15
+ PreparePasskeyCommit,
16
+ PasskeyManagementPolicy,
17
+ PasskeyMethodPolicy,
18
+ } from "@yielded/auth/Passkey";
19
+ import type { TokenDigest } from "@yielded/auth/Schema";
20
+ import type { SessionInvalidationWindow } from "@yielded/auth/Sessions";
21
+ import type { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
22
+ import type { Effect, Schema } from "effect";
23
+
24
+ import type { PersistenceMappingError } from "./model";
25
+ import type {
26
+ PasskeyColumn,
27
+ PasskeyCredentialMapping,
28
+ PasskeyFlowTable,
29
+ PasskeyHandleReservationTable,
30
+ PasskeyPersistenceMapping,
31
+ PasskeyPersistenceServices,
32
+ } from "./passkey-model";
33
+ import type { PasskeyRegistrationIntentReadTable } from "./passkey-registration-ceremony-model";
34
+
35
+ export interface PasskeyCredentialInsert<N> {
36
+ readonly subjectId: N;
37
+ readonly credential: PasskeyCredential;
38
+ readonly summary: PasskeyCredentialSummary;
39
+ readonly marker: string;
40
+ }
41
+
42
+ export interface PasskeyWriteTables<
43
+ S extends Table,
44
+ C extends Table,
45
+ F extends Table,
46
+ O extends Table,
47
+ H extends Table,
48
+ N,
49
+ > {
50
+ readonly credential: {
51
+ readonly name: PasskeyColumn<C>;
52
+ readonly createdAt: PasskeyColumn<C>;
53
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<C>;
54
+ readonly encodePrimarySignIn: (value: boolean) => unknown;
55
+ readonly encodeEnrollmentUserVerified: (value: boolean) => unknown;
56
+ readonly encodeBackupEligible: (value: boolean) => unknown;
57
+ readonly activeStatus: unknown;
58
+ readonly removedStatus: unknown;
59
+ };
60
+ readonly authority: {
61
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<F>;
62
+ readonly activeStatus: unknown;
63
+ readonly removedStatus: unknown;
64
+ };
65
+ readonly credentialOwnership: {
66
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<O>;
67
+ readonly ownedState: unknown;
68
+ readonly removedState: unknown;
69
+ };
70
+ readonly handleOwnership: {
71
+ readonly encodeInsert: (input: {
72
+ readonly subjectId: N;
73
+ readonly rpId: string;
74
+ readonly userHandle: string;
75
+ readonly marker: string;
76
+ }) => InferInsertModel<H>;
77
+ readonly ownedState: unknown;
78
+ };
79
+ /** All mutable policy dependencies must be subject columns or declared module guards. */
80
+ readonly policy: {
81
+ readonly subjectColumns: ReadonlyArray<PasskeyColumn<S>>;
82
+ readonly management: (row: Readonly<Partial<InferSelectModel<S>>>) => PasskeyManagementPolicy;
83
+ readonly requirement: (
84
+ row: Readonly<Partial<InferSelectModel<S>>>,
85
+ action: PasskeyActionAuthorization["challenge"]["action"],
86
+ ) => Effect.Effect<typeof PasskeyRequirement.Type, PersistenceMappingError>;
87
+ readonly metadata: (subjectId: N) => SQL;
88
+ readonly action: (subjectId: N, authorization: PasskeyActionAuthorization) => SQL;
89
+ /** Usable primary/recovery path AND required remaining factors. Evaluated with the target excluded, before and after removal. Connected grants/factor-only credentials are not primary paths. */
90
+ readonly remainingSignIn: (
91
+ subjectId: N,
92
+ removedCredentialId: string,
93
+ row: Readonly<Partial<InferSelectModel<S>>>,
94
+ ) => Effect.Effect<SQL, PersistenceMappingError>;
95
+ };
96
+ }
97
+
98
+ export interface PasskeyInvalidationInput<N> {
99
+ readonly subjectId: N;
100
+ readonly previousRevision: typeof PasskeyRevision.Type.securityRevision;
101
+ readonly securityRevision: typeof PasskeyRevision.Type.securityRevision;
102
+ readonly invalidation: SessionInvalidationWindow;
103
+ }
104
+
105
+ export interface PasskeyInvalidationMutation<N> {
106
+ readonly table: Table;
107
+ readonly where: (input: PasskeyInvalidationInput<N>) => SQL;
108
+ readonly values: (input: PasskeyInvalidationInput<N>) => Readonly<Record<string, unknown>>;
109
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
110
+ }
111
+
112
+ /** Same-owner updates for consumer session/pending tables. No external effects or callbacks after commit. */
113
+ export const passkeyInvalidationMutation = <T extends Table, N>(input: {
114
+ readonly table: T;
115
+ readonly where: (input: PasskeyInvalidationInput<N>) => SQL;
116
+ readonly values: (input: PasskeyInvalidationInput<N>) => Partial<InferInsertModel<T>>;
117
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
118
+ }): PasskeyInvalidationMutation<N> => input;
119
+
120
+ export interface PasskeyCommandTable<T extends Table, N> {
121
+ readonly table: T;
122
+ readonly moduleId: PasskeyColumn<T>;
123
+ readonly commandId: PasskeyColumn<T>;
124
+ readonly subjectId: PasskeyColumn<T>;
125
+ readonly credentialId: PasskeyColumn<T>;
126
+ readonly intent: PasskeyColumn<T>;
127
+ readonly decision: PasskeyColumn<T>;
128
+ readonly retentionUntil: PasskeyColumn<T>;
129
+ readonly version: PasskeyColumn<T>;
130
+ readonly encodeInsert: (input: {
131
+ readonly moduleId: string;
132
+ readonly commandId: string;
133
+ readonly subjectId: N;
134
+ readonly credentialId: string;
135
+ }) => InferInsertModel<T>;
136
+ }
137
+
138
+ export interface PasskeyManagementMapping<
139
+ S extends Table,
140
+ C extends Table,
141
+ F extends Table,
142
+ O extends Table,
143
+ H extends Table,
144
+ M extends Table,
145
+ Flow extends Table,
146
+ A extends Table,
147
+ Charge extends Table,
148
+ Command extends Table,
149
+ N,
150
+ > extends PasskeyPersistenceMapping<
151
+ PasskeyCredentialMapping<S, C, F, O, H, N>,
152
+ M,
153
+ Flow,
154
+ A,
155
+ Charge,
156
+ N
157
+ > {
158
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N>;
159
+ readonly command: PasskeyCommandTable<Command, N>;
160
+ readonly managementConstraints: typeof requiredPasskeyManagementConstraints;
161
+ /** Removal must match the installed session strategy and change the subject revision; immediate sessions must consult that authority or be updated here. Enrollment preserves existing authentication. */
162
+ readonly invalidation: {
163
+ readonly window: SessionInvalidationWindow;
164
+ readonly mutations: ReadonlyArray<PasskeyInvalidationMutation<N>>;
165
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
166
+ };
167
+ }
168
+
169
+ export const requiredPasskeyManagementConstraints = { command: ["moduleId", "commandId"] } as const;
170
+
171
+ export interface PasskeyManagementServices extends PasskeyPersistenceServices {
172
+ readonly passkeyManagementPersistence: PasskeyManagementPersistence["Service"];
173
+ }
174
+
175
+ export interface PasskeyRegistrationWriter<R> {
176
+ readonly inspect: (registration: R) => Effect.Effect<
177
+ {
178
+ readonly fingerprint: TokenDigest;
179
+ readonly eligible: boolean;
180
+ readonly name: string;
181
+ readonly displayName: string;
182
+ },
183
+ PasskeyUnavailable
184
+ >;
185
+ readonly issueRegistration: <A>(
186
+ input: {
187
+ readonly ceremony: PasskeyCeremony;
188
+ readonly policy: PasskeyMethodPolicy;
189
+ readonly registration: R;
190
+ },
191
+ prepare: PreparePasskeyCommit<PasskeyIssueDecision, A>,
192
+ ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
193
+ readonly completeRegistration: <A>(
194
+ input: {
195
+ readonly claim: PasskeyClaim;
196
+ readonly verified: PasskeyRegistrationVerified;
197
+ readonly nowMillis: number;
198
+ },
199
+ prepare: PreparePasskeyCommit<PasskeyRegistrationResult | { readonly _tag: "Rejected" }, A>,
200
+ ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
201
+ }
202
+
203
+ export interface PasskeyRegistrationServices<R> extends PasskeyPersistenceServices {
204
+ readonly passkeyRegistrationAuthority: PasskeyRegistrationWriter<R>;
205
+ }
206
+
207
+ export interface PasskeyRegistrationMapping<
208
+ S extends Table,
209
+ C extends Table,
210
+ F extends Table,
211
+ O extends Table,
212
+ H extends Table,
213
+ M extends Table,
214
+ Flow extends Table,
215
+ A extends Table,
216
+ Charge extends Table,
217
+ Intent extends Table,
218
+ N,
219
+ R,
220
+ > extends PasskeyPersistenceMapping<
221
+ PasskeyCredentialMapping<S, C, F, O, H, N>,
222
+ M,
223
+ Flow,
224
+ A,
225
+ Charge,
226
+ N
227
+ > {
228
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N>;
229
+ readonly flow: PasskeyFlowTable<Flow>;
230
+ readonly handle: PasskeyHandleReservationTable<H> & {
231
+ readonly reservedState: unknown;
232
+ readonly encodeInsert: (input: {
233
+ readonly ceremony: PasskeyCeremony;
234
+ readonly reservationId: string;
235
+ }) => InferInsertModel<H>;
236
+ };
237
+ readonly intent: PasskeyRegistrationIntentReadTable<Intent> & {
238
+ readonly pendingState: unknown;
239
+ readonly acceptedState: unknown;
240
+ readonly rejectedState: unknown;
241
+ readonly encodeInsert: (input: {
242
+ readonly ceremony: PasskeyCeremony;
243
+ readonly registration: R;
244
+ readonly reservationId: string;
245
+ }) => InferInsertModel<Intent>;
246
+ };
247
+ /** Consumer-owned data and identity, synchronously encoded inside the owner. A SQL-local registration creates no session and needs no email address. */
248
+ readonly registration: {
249
+ readonly schema: Schema.Codec<R, unknown, never, never>;
250
+ readonly describe: (registration: R) => { readonly name: string; readonly displayName: string };
251
+ readonly eligible: (registration: R) => SQL;
252
+ /** Commit-time application policy after provisioning. Unlike `eligible`, this
253
+ * must permit the newly created subject and retain every mutable prerequisite.
254
+ * Declare mutable external policy rows in module.guards so native locking
255
+ * owners serialize revocation through commit; this predicate alone is not a lock. */
256
+ readonly finalEligibility: (input: { readonly registration: R; readonly subjectId: N }) => SQL;
257
+ readonly subject: (input: {
258
+ readonly registration: R;
259
+ readonly ceremony: PasskeyCeremony;
260
+ readonly marker: string;
261
+ }) => { readonly subjectId: N; readonly values: InferInsertModel<S> };
262
+ readonly activeStatus: unknown;
263
+ };
264
+ readonly registrationConstraints: typeof requiredPasskeyRegistrationWriteConstraints;
265
+ }
266
+
267
+ export const requiredPasskeyRegistrationWriteConstraints = {
268
+ intentFlow: ["moduleId", "flowId"],
269
+ intentCommand: ["moduleId", "commandId"],
270
+ handle: ["handleKey"],
271
+ } as const;
@@ -0,0 +1,9 @@
1
+ import { passkeyKernel } from "./passkey-kernel";
2
+
3
+ export const {
4
+ passkeyManagementPersistenceLayer,
5
+ makeTargetPasskeyManagement,
6
+ makeTargetPasskeyRegistrationWriter,
7
+ coordinateTargetPasskeyManagement,
8
+ coordinateTargetPasskeyRegistrationWriter,
9
+ } = passkeyKernel.writeTarget;