@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,190 @@
1
+ import { PersistenceMappingError } from "../internal/mapping-error.mjs";
2
+ import "./model.mjs";
3
+ import { PasskeyColumn, PasskeyCredentialMapping, PasskeyFlowTable, PasskeyHandleReservationTable, PasskeyPersistenceMapping, PasskeyPersistenceServices } from "./passkey-model.mjs";
4
+ import { PasskeyRegistrationIntentReadTable } from "./passkey-registration-ceremony-model.mjs";
5
+ import { Effect, Schema } from "effect";
6
+ import { PasskeyActionAuthorization, PasskeyCeremony, PasskeyClaim, PasskeyCredential, PasskeyCredentialSummary, PasskeyIssueDecision, PasskeyManagementPersistence, PasskeyManagementPolicy, PasskeyMethodPolicy, PasskeyRegistrationResult, PasskeyRegistrationVerified, PasskeyRequirement, PasskeyRevision, PasskeyUnavailable, PreparePasskeyCommit } from "@yielded/auth/Passkey";
7
+ import { TokenDigest } from "@yielded/auth/Schema";
8
+ import { PreparedCommit } from "@yielded/auth/Hooks";
9
+ import { SessionInvalidationWindow } from "@yielded/auth/Sessions";
10
+ import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
11
+ //#region src/drizzle/passkey-write-model.d.ts
12
+ interface PasskeyCredentialInsert<N> {
13
+ readonly subjectId: N;
14
+ readonly credential: PasskeyCredential;
15
+ readonly summary: PasskeyCredentialSummary;
16
+ readonly marker: string;
17
+ }
18
+ interface PasskeyWriteTables<S extends Table, C extends Table, F extends Table, O extends Table, H extends Table, N> {
19
+ readonly credential: {
20
+ readonly name: PasskeyColumn<C>;
21
+ readonly createdAt: PasskeyColumn<C>;
22
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<C>;
23
+ readonly encodePrimarySignIn: (value: boolean) => unknown;
24
+ readonly encodeEnrollmentUserVerified: (value: boolean) => unknown;
25
+ readonly encodeBackupEligible: (value: boolean) => unknown;
26
+ readonly activeStatus: unknown;
27
+ readonly removedStatus: unknown;
28
+ };
29
+ readonly authority: {
30
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<F>;
31
+ readonly activeStatus: unknown;
32
+ readonly removedStatus: unknown;
33
+ };
34
+ readonly credentialOwnership: {
35
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<O>;
36
+ readonly ownedState: unknown;
37
+ readonly removedState: unknown;
38
+ };
39
+ readonly handleOwnership: {
40
+ readonly encodeInsert: (input: {
41
+ readonly subjectId: N;
42
+ readonly rpId: string;
43
+ readonly userHandle: string;
44
+ readonly marker: string;
45
+ }) => InferInsertModel<H>;
46
+ readonly ownedState: unknown;
47
+ };
48
+ /** All mutable policy dependencies must be subject columns or declared module guards. */
49
+ readonly policy: {
50
+ readonly subjectColumns: ReadonlyArray<PasskeyColumn<S>>;
51
+ readonly management: (row: Readonly<Partial<InferSelectModel<S>>>) => PasskeyManagementPolicy;
52
+ readonly requirement: (row: Readonly<Partial<InferSelectModel<S>>>, action: PasskeyActionAuthorization["challenge"]["action"]) => Effect.Effect<typeof PasskeyRequirement.Type, PersistenceMappingError>;
53
+ readonly metadata: (subjectId: N) => SQL;
54
+ readonly action: (subjectId: N, authorization: PasskeyActionAuthorization) => SQL;
55
+ /** 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. */
56
+ readonly remainingSignIn: (subjectId: N, removedCredentialId: string, row: Readonly<Partial<InferSelectModel<S>>>) => Effect.Effect<SQL, PersistenceMappingError>;
57
+ };
58
+ }
59
+ interface PasskeyInvalidationInput<N> {
60
+ readonly subjectId: N;
61
+ readonly previousRevision: typeof PasskeyRevision.Type.securityRevision;
62
+ readonly securityRevision: typeof PasskeyRevision.Type.securityRevision;
63
+ readonly invalidation: SessionInvalidationWindow;
64
+ }
65
+ interface PasskeyInvalidationMutation<N> {
66
+ readonly table: Table;
67
+ readonly where: (input: PasskeyInvalidationInput<N>) => SQL;
68
+ readonly values: (input: PasskeyInvalidationInput<N>) => Readonly<Record<string, unknown>>;
69
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
70
+ }
71
+ /** Same-owner updates for consumer session/pending tables. No external effects or callbacks after commit. */
72
+ declare const passkeyInvalidationMutation: <T extends Table, N>(input: {
73
+ readonly table: T;
74
+ readonly where: (input: PasskeyInvalidationInput<N>) => SQL;
75
+ readonly values: (input: PasskeyInvalidationInput<N>) => Partial<InferInsertModel<T>>;
76
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
77
+ }) => PasskeyInvalidationMutation<N>;
78
+ interface PasskeyCommandTable<T extends Table, N> {
79
+ readonly table: T;
80
+ readonly moduleId: PasskeyColumn<T>;
81
+ readonly commandId: PasskeyColumn<T>;
82
+ readonly subjectId: PasskeyColumn<T>;
83
+ readonly credentialId: PasskeyColumn<T>;
84
+ readonly intent: PasskeyColumn<T>;
85
+ readonly decision: PasskeyColumn<T>;
86
+ readonly retentionUntil: PasskeyColumn<T>;
87
+ readonly version: PasskeyColumn<T>;
88
+ readonly encodeInsert: (input: {
89
+ readonly moduleId: string;
90
+ readonly commandId: string;
91
+ readonly subjectId: N;
92
+ readonly credentialId: string;
93
+ }) => InferInsertModel<T>;
94
+ }
95
+ interface PasskeyManagementMapping<S extends Table, C extends Table, F extends Table, O extends Table, H extends Table, M extends Table, Flow extends Table, A extends Table, Charge extends Table, Command extends Table, N> extends PasskeyPersistenceMapping<PasskeyCredentialMapping<S, C, F, O, H, N>, M, Flow, A, Charge, N> {
96
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N>;
97
+ readonly command: PasskeyCommandTable<Command, N>;
98
+ readonly managementConstraints: typeof requiredPasskeyManagementConstraints;
99
+ /** 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. */
100
+ readonly invalidation: {
101
+ readonly window: SessionInvalidationWindow;
102
+ readonly mutations: ReadonlyArray<PasskeyInvalidationMutation<N>>;
103
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;
104
+ };
105
+ }
106
+ declare const requiredPasskeyManagementConstraints: {
107
+ readonly command: readonly ["moduleId", "commandId"];
108
+ };
109
+ interface PasskeyManagementServices extends PasskeyPersistenceServices {
110
+ readonly passkeyManagementPersistence: PasskeyManagementPersistence["Service"];
111
+ }
112
+ interface PasskeyRegistrationWriter<R> {
113
+ readonly inspect: (registration: R) => Effect.Effect<{
114
+ readonly fingerprint: TokenDigest;
115
+ readonly eligible: boolean;
116
+ readonly name: string;
117
+ readonly displayName: string;
118
+ }, PasskeyUnavailable>;
119
+ readonly issueRegistration: <A>(input: {
120
+ readonly ceremony: PasskeyCeremony;
121
+ readonly policy: PasskeyMethodPolicy;
122
+ readonly registration: R;
123
+ }, prepare: PreparePasskeyCommit<PasskeyIssueDecision, A>) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
124
+ readonly completeRegistration: <A>(input: {
125
+ readonly claim: PasskeyClaim;
126
+ readonly verified: PasskeyRegistrationVerified;
127
+ readonly nowMillis: number;
128
+ }, prepare: PreparePasskeyCommit<PasskeyRegistrationResult | {
129
+ readonly _tag: "Rejected";
130
+ }, A>) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
131
+ }
132
+ interface PasskeyRegistrationServices<R> extends PasskeyPersistenceServices {
133
+ readonly passkeyRegistrationAuthority: PasskeyRegistrationWriter<R>;
134
+ }
135
+ interface PasskeyRegistrationMapping<S extends Table, C extends Table, F extends Table, O extends Table, H extends Table, M extends Table, Flow extends Table, A extends Table, Charge extends Table, Intent extends Table, N, R> extends PasskeyPersistenceMapping<PasskeyCredentialMapping<S, C, F, O, H, N>, M, Flow, A, Charge, N> {
136
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N>;
137
+ readonly flow: PasskeyFlowTable<Flow>;
138
+ readonly handle: PasskeyHandleReservationTable<H> & {
139
+ readonly reservedState: unknown;
140
+ readonly encodeInsert: (input: {
141
+ readonly ceremony: PasskeyCeremony;
142
+ readonly reservationId: string;
143
+ }) => InferInsertModel<H>;
144
+ };
145
+ readonly intent: PasskeyRegistrationIntentReadTable<Intent> & {
146
+ readonly pendingState: unknown;
147
+ readonly acceptedState: unknown;
148
+ readonly rejectedState: unknown;
149
+ readonly encodeInsert: (input: {
150
+ readonly ceremony: PasskeyCeremony;
151
+ readonly registration: R;
152
+ readonly reservationId: string;
153
+ }) => InferInsertModel<Intent>;
154
+ };
155
+ /** Consumer-owned data and identity, synchronously encoded inside the owner. A SQL-local registration creates no session and needs no email address. */
156
+ readonly registration: {
157
+ readonly schema: Schema.Codec<R, unknown, never, never>;
158
+ readonly describe: (registration: R) => {
159
+ readonly name: string;
160
+ readonly displayName: string;
161
+ };
162
+ readonly eligible: (registration: R) => SQL;
163
+ /** Commit-time application policy after provisioning. Unlike `eligible`, this
164
+ * must permit the newly created subject and retain every mutable prerequisite.
165
+ * Declare mutable external policy rows in module.guards so native locking
166
+ * owners serialize revocation through commit; this predicate alone is not a lock. */
167
+ readonly finalEligibility: (input: {
168
+ readonly registration: R;
169
+ readonly subjectId: N;
170
+ }) => SQL;
171
+ readonly subject: (input: {
172
+ readonly registration: R;
173
+ readonly ceremony: PasskeyCeremony;
174
+ readonly marker: string;
175
+ }) => {
176
+ readonly subjectId: N;
177
+ readonly values: InferInsertModel<S>;
178
+ };
179
+ readonly activeStatus: unknown;
180
+ };
181
+ readonly registrationConstraints: typeof requiredPasskeyRegistrationWriteConstraints;
182
+ }
183
+ declare const requiredPasskeyRegistrationWriteConstraints: {
184
+ readonly intentFlow: readonly ["moduleId", "flowId"];
185
+ readonly intentCommand: readonly ["moduleId", "commandId"];
186
+ readonly handle: readonly ["handleKey"];
187
+ };
188
+ //#endregion
189
+ export { PasskeyCommandTable, PasskeyCredentialInsert, PasskeyInvalidationInput, PasskeyInvalidationMutation, PasskeyManagementMapping, PasskeyManagementServices, PasskeyRegistrationMapping, PasskeyRegistrationServices, PasskeyRegistrationWriter, PasskeyWriteTables, passkeyInvalidationMutation, requiredPasskeyManagementConstraints, requiredPasskeyRegistrationWriteConstraints };
190
+ //# sourceMappingURL=passkey-write-model.d.mts.map
@@ -0,0 +1,13 @@
1
+ //#region src/drizzle/passkey-write-model.ts
2
+ /** Same-owner updates for consumer session/pending tables. No external effects or callbacks after commit. */
3
+ const passkeyInvalidationMutation = (input) => input;
4
+ const requiredPasskeyManagementConstraints = { command: ["moduleId", "commandId"] };
5
+ const requiredPasskeyRegistrationWriteConstraints = {
6
+ intentFlow: ["moduleId", "flowId"],
7
+ intentCommand: ["moduleId", "commandId"],
8
+ handle: ["handleKey"]
9
+ };
10
+ //#endregion
11
+ export { passkeyInvalidationMutation, requiredPasskeyManagementConstraints, requiredPasskeyRegistrationWriteConstraints };
12
+
13
+ //# sourceMappingURL=passkey-write-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey-write-model.mjs","names":[],"sources":["../../src/drizzle/passkey-write-model.ts"],"sourcesContent":["import type { PreparedCommit } from \"@yielded/auth/Hooks\";\nimport type {\n PasskeyUnavailable,\n PasskeyActionAuthorization,\n PasskeyCeremony,\n PasskeyClaim,\n PasskeyCredential,\n PasskeyCredentialSummary,\n PasskeyIssueDecision,\n PasskeyRegistrationResult,\n PasskeyRegistrationVerified,\n PasskeyRequirement,\n PasskeyRevision,\n PasskeyManagementPersistence,\n PreparePasskeyCommit,\n PasskeyManagementPolicy,\n PasskeyMethodPolicy,\n} from \"@yielded/auth/Passkey\";\nimport type { TokenDigest } from \"@yielded/auth/Schema\";\nimport type { SessionInvalidationWindow } from \"@yielded/auth/Sessions\";\nimport type { InferInsertModel, InferSelectModel, SQL, Table } from \"drizzle-orm\";\nimport type { Effect, Schema } from \"effect\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport type {\n PasskeyColumn,\n PasskeyCredentialMapping,\n PasskeyFlowTable,\n PasskeyHandleReservationTable,\n PasskeyPersistenceMapping,\n PasskeyPersistenceServices,\n} from \"./passkey-model\";\nimport type { PasskeyRegistrationIntentReadTable } from \"./passkey-registration-ceremony-model\";\n\nexport interface PasskeyCredentialInsert<N> {\n readonly subjectId: N;\n readonly credential: PasskeyCredential;\n readonly summary: PasskeyCredentialSummary;\n readonly marker: string;\n}\n\nexport interface PasskeyWriteTables<\n S extends Table,\n C extends Table,\n F extends Table,\n O extends Table,\n H extends Table,\n N,\n> {\n readonly credential: {\n readonly name: PasskeyColumn<C>;\n readonly createdAt: PasskeyColumn<C>;\n readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<C>;\n readonly encodePrimarySignIn: (value: boolean) => unknown;\n readonly encodeEnrollmentUserVerified: (value: boolean) => unknown;\n readonly encodeBackupEligible: (value: boolean) => unknown;\n readonly activeStatus: unknown;\n readonly removedStatus: unknown;\n };\n readonly authority: {\n readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<F>;\n readonly activeStatus: unknown;\n readonly removedStatus: unknown;\n };\n readonly credentialOwnership: {\n readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => InferInsertModel<O>;\n readonly ownedState: unknown;\n readonly removedState: unknown;\n };\n readonly handleOwnership: {\n readonly encodeInsert: (input: {\n readonly subjectId: N;\n readonly rpId: string;\n readonly userHandle: string;\n readonly marker: string;\n }) => InferInsertModel<H>;\n readonly ownedState: unknown;\n };\n /** All mutable policy dependencies must be subject columns or declared module guards. */\n readonly policy: {\n readonly subjectColumns: ReadonlyArray<PasskeyColumn<S>>;\n readonly management: (row: Readonly<Partial<InferSelectModel<S>>>) => PasskeyManagementPolicy;\n readonly requirement: (\n row: Readonly<Partial<InferSelectModel<S>>>,\n action: PasskeyActionAuthorization[\"challenge\"][\"action\"],\n ) => Effect.Effect<typeof PasskeyRequirement.Type, PersistenceMappingError>;\n readonly metadata: (subjectId: N) => SQL;\n readonly action: (subjectId: N, authorization: PasskeyActionAuthorization) => SQL;\n /** 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. */\n readonly remainingSignIn: (\n subjectId: N,\n removedCredentialId: string,\n row: Readonly<Partial<InferSelectModel<S>>>,\n ) => Effect.Effect<SQL, PersistenceMappingError>;\n };\n}\n\nexport interface PasskeyInvalidationInput<N> {\n readonly subjectId: N;\n readonly previousRevision: typeof PasskeyRevision.Type.securityRevision;\n readonly securityRevision: typeof PasskeyRevision.Type.securityRevision;\n readonly invalidation: SessionInvalidationWindow;\n}\n\nexport interface PasskeyInvalidationMutation<N> {\n readonly table: Table;\n readonly where: (input: PasskeyInvalidationInput<N>) => SQL;\n readonly values: (input: PasskeyInvalidationInput<N>) => Readonly<Record<string, unknown>>;\n readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;\n}\n\n/** Same-owner updates for consumer session/pending tables. No external effects or callbacks after commit. */\nexport const passkeyInvalidationMutation = <T extends Table, N>(input: {\n readonly table: T;\n readonly where: (input: PasskeyInvalidationInput<N>) => SQL;\n readonly values: (input: PasskeyInvalidationInput<N>) => Partial<InferInsertModel<T>>;\n readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;\n}): PasskeyInvalidationMutation<N> => input;\n\nexport interface PasskeyCommandTable<T extends Table, N> {\n readonly table: T;\n readonly moduleId: PasskeyColumn<T>;\n readonly commandId: PasskeyColumn<T>;\n readonly subjectId: PasskeyColumn<T>;\n readonly credentialId: PasskeyColumn<T>;\n readonly intent: PasskeyColumn<T>;\n readonly decision: PasskeyColumn<T>;\n readonly retentionUntil: PasskeyColumn<T>;\n readonly version: PasskeyColumn<T>;\n readonly encodeInsert: (input: {\n readonly moduleId: string;\n readonly commandId: string;\n readonly subjectId: N;\n readonly credentialId: string;\n }) => InferInsertModel<T>;\n}\n\nexport interface PasskeyManagementMapping<\n S extends Table,\n C extends Table,\n F extends Table,\n O extends Table,\n H extends Table,\n M extends Table,\n Flow extends Table,\n A extends Table,\n Charge extends Table,\n Command extends Table,\n N,\n> extends PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n A,\n Charge,\n N\n> {\n readonly write: PasskeyWriteTables<S, C, F, O, H, N>;\n readonly command: PasskeyCommandTable<Command, N>;\n readonly managementConstraints: typeof requiredPasskeyManagementConstraints;\n /** 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. */\n readonly invalidation: {\n readonly window: SessionInvalidationWindow;\n readonly mutations: ReadonlyArray<PasskeyInvalidationMutation<N>>;\n readonly postcondition: (input: PasskeyInvalidationInput<N>) => SQL;\n };\n}\n\nexport const requiredPasskeyManagementConstraints = { command: [\"moduleId\", \"commandId\"] } as const;\n\nexport interface PasskeyManagementServices extends PasskeyPersistenceServices {\n readonly passkeyManagementPersistence: PasskeyManagementPersistence[\"Service\"];\n}\n\nexport interface PasskeyRegistrationWriter<R> {\n readonly inspect: (registration: R) => Effect.Effect<\n {\n readonly fingerprint: TokenDigest;\n readonly eligible: boolean;\n readonly name: string;\n readonly displayName: string;\n },\n PasskeyUnavailable\n >;\n readonly issueRegistration: <A>(\n input: {\n readonly ceremony: PasskeyCeremony;\n readonly policy: PasskeyMethodPolicy;\n readonly registration: R;\n },\n prepare: PreparePasskeyCommit<PasskeyIssueDecision, A>,\n ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;\n readonly completeRegistration: <A>(\n input: {\n readonly claim: PasskeyClaim;\n readonly verified: PasskeyRegistrationVerified;\n readonly nowMillis: number;\n },\n prepare: PreparePasskeyCommit<PasskeyRegistrationResult | { readonly _tag: \"Rejected\" }, A>,\n ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;\n}\n\nexport interface PasskeyRegistrationServices<R> extends PasskeyPersistenceServices {\n readonly passkeyRegistrationAuthority: PasskeyRegistrationWriter<R>;\n}\n\nexport interface PasskeyRegistrationMapping<\n S extends Table,\n C extends Table,\n F extends Table,\n O extends Table,\n H extends Table,\n M extends Table,\n Flow extends Table,\n A extends Table,\n Charge extends Table,\n Intent extends Table,\n N,\n R,\n> extends PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n A,\n Charge,\n N\n> {\n readonly write: PasskeyWriteTables<S, C, F, O, H, N>;\n readonly flow: PasskeyFlowTable<Flow>;\n readonly handle: PasskeyHandleReservationTable<H> & {\n readonly reservedState: unknown;\n readonly encodeInsert: (input: {\n readonly ceremony: PasskeyCeremony;\n readonly reservationId: string;\n }) => InferInsertModel<H>;\n };\n readonly intent: PasskeyRegistrationIntentReadTable<Intent> & {\n readonly pendingState: unknown;\n readonly acceptedState: unknown;\n readonly rejectedState: unknown;\n readonly encodeInsert: (input: {\n readonly ceremony: PasskeyCeremony;\n readonly registration: R;\n readonly reservationId: string;\n }) => InferInsertModel<Intent>;\n };\n /** Consumer-owned data and identity, synchronously encoded inside the owner. A SQL-local registration creates no session and needs no email address. */\n readonly registration: {\n readonly schema: Schema.Codec<R, unknown, never, never>;\n readonly describe: (registration: R) => { readonly name: string; readonly displayName: string };\n readonly eligible: (registration: R) => SQL;\n /** Commit-time application policy after provisioning. Unlike `eligible`, this\n * must permit the newly created subject and retain every mutable prerequisite.\n * Declare mutable external policy rows in module.guards so native locking\n * owners serialize revocation through commit; this predicate alone is not a lock. */\n readonly finalEligibility: (input: { readonly registration: R; readonly subjectId: N }) => SQL;\n readonly subject: (input: {\n readonly registration: R;\n readonly ceremony: PasskeyCeremony;\n readonly marker: string;\n }) => { readonly subjectId: N; readonly values: InferInsertModel<S> };\n readonly activeStatus: unknown;\n };\n readonly registrationConstraints: typeof requiredPasskeyRegistrationWriteConstraints;\n}\n\nexport const requiredPasskeyRegistrationWriteConstraints = {\n intentFlow: [\"moduleId\", \"flowId\"],\n intentCommand: [\"moduleId\", \"commandId\"],\n handle: [\"handleKey\"],\n} as const;\n"],"mappings":";;AAgHA,MAAa,+BAAmD,UAK1B;AAmDtC,MAAa,uCAAuC,EAAE,SAAS,CAAC,YAAY,WAAW,EAAE;AAkGzF,MAAa,8CAA8C;CACzD,YAAY,CAAC,YAAY,QAAQ;CACjC,eAAe,CAAC,YAAY,WAAW;CACvC,QAAQ,CAAC,WAAW;AACtB"}
@@ -0,0 +1,11 @@
1
+ import { PersistenceMappingError } from "../internal/mapping-error.mjs";
2
+ import "./model.mjs";
3
+ import { PasskeyMappingSource } from "./passkey-model.mjs";
4
+ import { PasskeyManagementServices, PasskeyRegistrationServices } from "./passkey-write-model.mjs";
5
+ import { PasskeyCoordinatorError, PasskeyTargetConfiguration } from "../internal/passkey/target.mjs";
6
+ import "./passkey-target.mjs";
7
+ //#region src/drizzle/passkey-write-target.d.ts
8
+ declare const passkeyManagementPersistenceLayer: <E, R>(services: import("effect/Effect").Effect<PasskeyManagementServices, E, R>) => import("effect/Layer").Layer<import("@yielded/auth/Passkey").PasskeyManagementPersistence, E, Exclude<R, import("effect/Scope").Scope>>, makeTargetPasskeyManagement: <M, RSetup>(database: any, source: PasskeyMappingSource<M, RSetup>, configuration: PasskeyTargetConfiguration) => import("effect/Effect").Effect<PasskeyManagementServices, import("@yielded/auth/Passkey").PasskeyConfigurationError | PersistenceMappingError, RSetup | import("@yielded/auth/Hooks").LifecycleHooks>, makeTargetPasskeyRegistrationWriter: <M, R, RSetup>(database: any, source: PasskeyMappingSource<M, RSetup>, configuration: PasskeyTargetConfiguration) => import("effect/Effect").Effect<PasskeyRegistrationServices<R>, import("@yielded/auth/Passkey").PasskeyConfigurationError | PersistenceMappingError, RSetup | import("@yielded/auth/Hooks").LifecycleHooks>, coordinateTargetPasskeyManagement: <M, RSetup, Transaction, A, E, R>(database: any, source: PasskeyMappingSource<M, RSetup>, configuration: PasskeyTargetConfiguration, body: (transaction: Transaction, services: PasskeyManagementServices, append: (statement: import("effect/unstable/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks>, coordinateTargetPasskeyRegistrationWriter: <M, Value, RSetup, Transaction, A, E, R>(database: any, source: PasskeyMappingSource<M, RSetup>, configuration: PasskeyTargetConfiguration, body: (transaction: Transaction, services: PasskeyRegistrationServices<Value>, append: (statement: import("effect/unstable/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks>;
9
+ //#endregion
10
+ export { passkeyManagementPersistenceLayer };
11
+ //# sourceMappingURL=passkey-write-target.d.mts.map
@@ -0,0 +1,7 @@
1
+ import { passkeyKernel } from "./passkey-kernel.mjs";
2
+ //#region src/drizzle/passkey-write-target.ts
3
+ const { passkeyManagementPersistenceLayer, makeTargetPasskeyManagement, makeTargetPasskeyRegistrationWriter, coordinateTargetPasskeyManagement, coordinateTargetPasskeyRegistrationWriter } = passkeyKernel.writeTarget;
4
+ //#endregion
5
+ export { coordinateTargetPasskeyManagement, coordinateTargetPasskeyRegistrationWriter, makeTargetPasskeyManagement, makeTargetPasskeyRegistrationWriter, passkeyManagementPersistenceLayer };
6
+
7
+ //# sourceMappingURL=passkey-write-target.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey-write-target.mjs","names":[],"sources":["../../src/drizzle/passkey-write-target.ts"],"sourcesContent":["import { passkeyKernel } from \"./passkey-kernel\";\n\nexport const {\n passkeyManagementPersistenceLayer,\n makeTargetPasskeyManagement,\n makeTargetPasskeyRegistrationWriter,\n coordinateTargetPasskeyManagement,\n coordinateTargetPasskeyRegistrationWriter,\n} = passkeyKernel.writeTarget;\n"],"mappings":";;AAEA,MAAa,EACX,mCACA,6BACA,qCACA,mCACA,8CACE,cAAc"}
@@ -0,0 +1,329 @@
1
+ import { PersistenceMappingError } from "../internal/mapping-error.mjs";
2
+ import { SubjectIdCodec } from "./model.mjs";
3
+ import { Effect, Redacted } from "effect";
4
+ import { AuthenticationRequirement, SecurityRevision } from "@yielded/auth/Sessions";
5
+ import { EncodedPasswordHash, PasswordAction, PasswordAttemptId, PasswordCredentialSnapshot, PasswordRegistrationDecision, PasswordReplacement } from "@yielded/auth/Password";
6
+ import { LoginIdentifier, RecoveryReference } from "@yielded/auth/Identity";
7
+ import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
8
+ //#region src/drizzle/password-model.d.ts
9
+ type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
10
+ type PasswordAttemptAction = "sign-in" | "change";
11
+ type PasswordAttemptState = "pending" | "verified" | "rejected";
12
+ type PasswordRateScopeKind = "action" | "identifier" | "subject";
13
+ interface PasswordScopeKeys {
14
+ readonly action: string;
15
+ readonly identifier: string;
16
+ readonly subject?: string;
17
+ }
18
+ interface PasswordSubjectTable<Subject extends Table, _NativeSubjectId> {
19
+ readonly table: Subject;
20
+ readonly id: ColumnKey<Subject>;
21
+ readonly status: ColumnKey<Subject>;
22
+ readonly securityRevision: ColumnKey<Subject>;
23
+ readonly isActiveStatus: (value: unknown) => boolean;
24
+ readonly decodeRequirement: (row: InferSelectModel<Subject>) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
25
+ /** Current policy for this exact credential mutation, decoded under the subject lock. */
26
+ readonly decodeActionRequirement: (row: InferSelectModel<Subject>, action: PasswordAction) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
27
+ readonly nextSecurityRevision?: (current: SecurityRevision) => Effect.Effect<SecurityRevision, PersistenceMappingError>;
28
+ readonly nextSecurityRevisionSync?: (current: SecurityRevision) => SecurityRevision;
29
+ /** Required only by D1 conditional statements. */
30
+ readonly d1ActiveStatusValue?: unknown;
31
+ }
32
+ interface PasswordIdentifierTable<Identifier extends Table, NativeSubjectId> {
33
+ readonly table: Identifier;
34
+ readonly namespace: ColumnKey<Identifier>;
35
+ readonly value: ColumnKey<Identifier>;
36
+ readonly subjectId: ColumnKey<Identifier>;
37
+ readonly verifiedAt: ColumnKey<Identifier>;
38
+ readonly bindingRevision: ColumnKey<Identifier>;
39
+ /** Consumer-owned current login/recovery eligibility, including row status. */
40
+ readonly isCurrent: (row: InferSelectModel<Identifier>) => boolean;
41
+ /** Required by D1 so current ownership/eligibility is rechecked in the batch. */
42
+ readonly d1CurrentCondition?: (input: {
43
+ readonly identifier: LoginIdentifier;
44
+ readonly nativeSubjectId: NativeSubjectId;
45
+ }) => SQL;
46
+ readonly encodeInitialInsert: (identifier: LoginIdentifier, subjectId: NativeSubjectId, bindingRevision: SecurityRevision) => InferInsertModel<Identifier>;
47
+ }
48
+ interface PasswordAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
49
+ readonly table: Credential;
50
+ readonly subjectId: ColumnKey<Credential>;
51
+ readonly credentialId: ColumnKey<Credential>;
52
+ readonly revision: ColumnKey<Credential>;
53
+ readonly status?: ColumnKey<Credential>;
54
+ readonly isActiveStatus?: (value: unknown) => boolean;
55
+ readonly d1ActiveStatusValue?: unknown;
56
+ readonly encodeInsert: (input: {
57
+ readonly subjectId: NativeSubjectId;
58
+ readonly credentialId: string;
59
+ readonly revision: SecurityRevision;
60
+ }) => InferInsertModel<Credential>;
61
+ readonly encodeRevision: (revision: SecurityRevision) => Partial<InferInsertModel<Credential>>;
62
+ }
63
+ interface PasswordCredentialTable<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> {
64
+ readonly table: Credential;
65
+ readonly moduleId: ColumnKey<Credential>;
66
+ readonly subjectId: ColumnKey<Credential>;
67
+ readonly credentialId: ColumnKey<Credential>;
68
+ readonly credentialRevision: ColumnKey<Credential>;
69
+ readonly verifierVersion: ColumnKey<Credential>;
70
+ readonly verifier: ColumnKey<Credential>;
71
+ readonly normalization: ColumnKey<Credential>;
72
+ readonly encodeInsert: (input: {
73
+ readonly moduleId: string;
74
+ readonly subjectId: NativeSubjectId;
75
+ readonly credentialId: string;
76
+ readonly credentialRevision: SecurityRevision;
77
+ readonly verifierVersion: SecurityRevision;
78
+ readonly replacement: PasswordReplacement;
79
+ }) => InferInsertModel<Credential>;
80
+ readonly encodeVerifier: (verifier: Redacted.Redacted<EncodedPasswordHash>, verifierVersion: SecurityRevision) => Partial<InferInsertModel<Credential>>;
81
+ readonly encodeReplacement: (input: {
82
+ readonly replacement: PasswordReplacement;
83
+ readonly credentialRevision: SecurityRevision;
84
+ readonly verifierVersion: SecurityRevision;
85
+ }) => Partial<InferInsertModel<Credential>>;
86
+ readonly decode: (input: {
87
+ readonly moduleId: string;
88
+ readonly subject: InferSelectModel<Subject>;
89
+ readonly identifier: InferSelectModel<Identifier>;
90
+ readonly credential: InferSelectModel<Credential>;
91
+ }) => Effect.Effect<PasswordCredentialSnapshot, PersistenceMappingError>;
92
+ }
93
+ interface PasswordAttemptRecord {
94
+ readonly moduleId: string;
95
+ readonly action: PasswordAttemptAction;
96
+ readonly attemptId: PasswordAttemptId;
97
+ readonly identifier: LoginIdentifier;
98
+ readonly subjectId?: string;
99
+ readonly credentialId?: string;
100
+ readonly securityRevision?: SecurityRevision;
101
+ readonly credentialRevision?: SecurityRevision;
102
+ readonly verifierVersion?: SecurityRevision;
103
+ readonly identifierBindingRevision?: SecurityRevision;
104
+ readonly admittedAtMillis: number;
105
+ readonly deadlineMillis: number;
106
+ readonly retentionUntilMillis: number;
107
+ }
108
+ interface PasswordAttemptTable<Attempt extends Table, NativeSubjectId> {
109
+ readonly table: Attempt;
110
+ readonly moduleId: ColumnKey<Attempt>;
111
+ readonly action: ColumnKey<Attempt>;
112
+ readonly attemptId: ColumnKey<Attempt>;
113
+ readonly identifierNamespace: ColumnKey<Attempt>;
114
+ readonly identifierValue: ColumnKey<Attempt>;
115
+ readonly subjectId: ColumnKey<Attempt>;
116
+ readonly credentialId: ColumnKey<Attempt>;
117
+ readonly securityRevision: ColumnKey<Attempt>;
118
+ readonly credentialRevision: ColumnKey<Attempt>;
119
+ readonly verifierVersion: ColumnKey<Attempt>;
120
+ readonly identifierBindingRevision: ColumnKey<Attempt>;
121
+ readonly admittedAt: ColumnKey<Attempt>;
122
+ readonly deadline: ColumnKey<Attempt>;
123
+ readonly retentionUntil: ColumnKey<Attempt>;
124
+ readonly state: ColumnKey<Attempt>;
125
+ readonly encodeInsert: (record: PasswordAttemptRecord, input: {
126
+ readonly nativeSubjectId?: NativeSubjectId;
127
+ readonly state: "pending";
128
+ }) => InferInsertModel<Attempt>;
129
+ }
130
+ interface PasswordRateScopeTable<RateScope extends Table> {
131
+ readonly table: RateScope;
132
+ readonly moduleId: ColumnKey<RateScope>;
133
+ readonly action: ColumnKey<RateScope>;
134
+ readonly scopeKind: ColumnKey<RateScope>;
135
+ readonly scopeKey: ColumnKey<RateScope>;
136
+ readonly encodeInsert: (input: {
137
+ readonly moduleId: string;
138
+ readonly action: PasswordAttemptAction;
139
+ readonly scopeKind: PasswordRateScopeKind;
140
+ readonly scopeKey: string;
141
+ }) => InferInsertModel<RateScope>;
142
+ }
143
+ interface PasswordChargeTable<Charge extends Table> {
144
+ readonly table: Charge;
145
+ readonly moduleId: ColumnKey<Charge>;
146
+ readonly action: ColumnKey<Charge>;
147
+ readonly scopeKind: ColumnKey<Charge>;
148
+ readonly scopeKey: ColumnKey<Charge>;
149
+ readonly attemptId: ColumnKey<Charge>;
150
+ readonly occurredAt: ColumnKey<Charge>;
151
+ readonly retentionUntil: ColumnKey<Charge>;
152
+ readonly encodeInsert: (input: {
153
+ readonly moduleId: string;
154
+ readonly action: PasswordAttemptAction;
155
+ readonly scopeKind: PasswordRateScopeKind;
156
+ readonly scopeKey: string;
157
+ readonly attemptId: PasswordAttemptId;
158
+ readonly occurredAtMillis: number;
159
+ readonly retentionUntilMillis: number;
160
+ }) => InferInsertModel<Charge>;
161
+ }
162
+ interface PasswordCommandTable<Command extends Table> {
163
+ readonly table: Command;
164
+ readonly moduleId: ColumnKey<Command>;
165
+ readonly commandId: ColumnKey<Command>;
166
+ readonly action: ColumnKey<Command>;
167
+ readonly bindingDigest: ColumnKey<Command>;
168
+ readonly decision: ColumnKey<Command>;
169
+ readonly retentionUntil: ColumnKey<Command>;
170
+ readonly encodeInsert: (input: {
171
+ readonly moduleId: string;
172
+ readonly commandId: string;
173
+ readonly action: string;
174
+ readonly bindingDigest: string;
175
+ readonly decision: "changed";
176
+ readonly retentionUntilMillis: number;
177
+ }) => InferInsertModel<Command>;
178
+ }
179
+ interface RequiredPasswordConstraints {
180
+ readonly identifier: "unique(identifier.namespace,identifier.value)";
181
+ readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
182
+ readonly credentialSubject: "unique(credential.moduleId,credential.subjectId)";
183
+ readonly credentialId: "unique(credential.moduleId,credential.credentialId)";
184
+ readonly attempt: "unique(attempt.moduleId,attempt.attemptId)";
185
+ readonly rateScope: "unique(rateScope.moduleId,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)";
186
+ readonly charge: "unique(charge.moduleId,charge.action,charge.scopeKind,charge.scopeKey,charge.attemptId)";
187
+ readonly command: "unique(command.moduleId,command.commandId)";
188
+ }
189
+ declare const requiredPasswordConstraints: RequiredPasswordConstraints;
190
+ interface PasswordConstraintClassifier {
191
+ /** Match only the mapped command uniqueness constraint. */
192
+ readonly isCommandConflict: (cause: unknown) => boolean;
193
+ /** Match only the mapped rate-scope uniqueness constraint. */
194
+ readonly isRateScopeConflict: (cause: unknown) => boolean;
195
+ }
196
+ interface PasswordD1Clock {
197
+ readonly engineNow: SQL;
198
+ readonly engineNowMillis: SQL;
199
+ readonly engineInstantMinus: (millis: number) => SQL;
200
+ readonly engineInstantPlus: (millis: number) => SQL;
201
+ }
202
+ interface PasswordPersistenceMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Attempt extends Table, RateScope extends Table, Charge extends Table, Command extends Table, NativeSubjectId> extends PasswordConstraintClassifier {
203
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId>;
204
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId>;
205
+ readonly credential: PasswordCredentialTable<Subject, Identifier, Credential, NativeSubjectId>;
206
+ /** Every factor revision named by action evidence, including non-password factors. */
207
+ readonly authorityCredential: PasswordAuthorityCredentialTable<AuthorityCredential, NativeSubjectId>;
208
+ readonly attempt: PasswordAttemptTable<Attempt, NativeSubjectId>;
209
+ readonly rateScope: PasswordRateScopeTable<RateScope>;
210
+ readonly charge: PasswordChargeTable<Charge>;
211
+ readonly command: PasswordCommandTable<Command>;
212
+ readonly subjectId: SubjectIdCodec<NativeSubjectId>;
213
+ readonly constraints: RequiredPasswordConstraints;
214
+ readonly scopeKeys: (input: {
215
+ readonly moduleId: string;
216
+ readonly action: PasswordAttemptAction;
217
+ readonly identifier: LoginIdentifier;
218
+ readonly subjectId?: string;
219
+ }) => PasswordScopeKeys;
220
+ readonly encodeInstant: (epochMillis: number) => unknown;
221
+ readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;
222
+ readonly allocateAttemptId?: Effect.Effect<PasswordAttemptId, PersistenceMappingError>;
223
+ readonly allocateAttemptIdSync?: () => PasswordAttemptId;
224
+ readonly allocateCredentialId?: Effect.Effect<string, PersistenceMappingError>;
225
+ readonly allocateCredentialIdSync?: () => string;
226
+ readonly allocateRevision?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
227
+ readonly allocateRevisionSync?: () => SecurityRevision;
228
+ readonly commandRetentionMillis: number;
229
+ /** All semantic replacements still bump subject revision. This flag only declares bearer invalidation latency. */
230
+ readonly sessionInvalidation: "same-authority-immediate" | "original-absolute-expiry";
231
+ readonly d1?: PasswordD1Clock;
232
+ }
233
+ type D1PasswordPersistenceMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Attempt extends Table, RateScope extends Table, Charge extends Table, Command extends Table, NativeSubjectId> = PasswordPersistenceMapping<Subject, Identifier, Credential, AuthorityCredential, Attempt, RateScope, Charge, Command, NativeSubjectId> & {
234
+ readonly d1: PasswordD1Clock;
235
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId> & {
236
+ readonly d1ActiveStatusValue: unknown;
237
+ };
238
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId> & {
239
+ readonly d1CurrentCondition: (input: {
240
+ readonly identifier: LoginIdentifier;
241
+ readonly nativeSubjectId: NativeSubjectId;
242
+ }) => SQL;
243
+ };
244
+ readonly authorityCredential: PasswordAuthorityCredentialTable<AuthorityCredential, NativeSubjectId> & {
245
+ readonly d1ActiveStatusValue: unknown;
246
+ };
247
+ };
248
+ type PasswordRegistrationState = "pending" | "created";
249
+ interface PasswordRegistrationIntent<Registration> {
250
+ readonly moduleId: string;
251
+ readonly requestId: string;
252
+ readonly identifier: LoginIdentifier;
253
+ readonly registration: Registration;
254
+ readonly replacement: PasswordReplacement;
255
+ }
256
+ interface PasswordRegistrationTable<Registration, Request extends Table, NativeSubjectId> {
257
+ readonly table: Request;
258
+ readonly moduleId: ColumnKey<Request>;
259
+ readonly requestId: ColumnKey<Request>;
260
+ readonly state: ColumnKey<Request>;
261
+ readonly subjectId: ColumnKey<Request>;
262
+ readonly recoveryReference: ColumnKey<Request>;
263
+ readonly encodeInsert: (input: PasswordRegistrationIntent<Registration>, state: {
264
+ readonly state: PasswordRegistrationState;
265
+ readonly nativeSubjectId?: NativeSubjectId;
266
+ readonly recoveryReference?: typeof RecoveryReference.Type;
267
+ }) => InferInsertModel<Request>;
268
+ /** Replay projection must never expose a stored subject or decode protected intent. */
269
+ readonly decodeReplay: (row: InferSelectModel<Request>) => Effect.Effect<Exclude<PasswordRegistrationDecision, {
270
+ readonly _tag: "Created";
271
+ }>, PersistenceMappingError>;
272
+ }
273
+ interface PasswordRegistrationProvisioning<Registration, Subject extends Table, NativeSubjectId> {
274
+ readonly encodeSubjectInsert: (input: PasswordRegistrationIntent<Registration>, values: {
275
+ readonly nativeSubjectId: NativeSubjectId | undefined;
276
+ readonly securityRevision: SecurityRevision;
277
+ }) => InferInsertModel<Subject>;
278
+ readonly allocateSubjectId?: Effect.Effect<NativeSubjectId, PersistenceMappingError>;
279
+ readonly allocateSubjectIdSync?: () => NativeSubjectId;
280
+ /** Interactive targets use this for database-generated/autoincrement keys. */
281
+ readonly decodeGeneratedId?: (rows: ReadonlyArray<unknown>) => Effect.Effect<NativeSubjectId, PersistenceMappingError>;
282
+ }
283
+ interface RequiredPasswordRegistrationConstraints {
284
+ readonly request: "unique(registration.moduleId,registration.requestId)";
285
+ readonly recoveryReference: "unique(registration.recoveryReference)";
286
+ readonly identifier: "unique(identifier.namespace,identifier.value)";
287
+ readonly credentialSubject: "unique(credential.moduleId,credential.subjectId)";
288
+ readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
289
+ }
290
+ declare const requiredPasswordRegistrationConstraints: RequiredPasswordRegistrationConstraints;
291
+ interface PasswordRegistrationConstraintClassifier {
292
+ readonly isRequestConflict: (cause: unknown) => boolean;
293
+ readonly isIdentifierConflict: (cause: unknown) => boolean;
294
+ readonly isCredentialConflict: (cause: unknown) => boolean;
295
+ }
296
+ type PasswordRegistrationMapping<Registration, Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Request extends Table, NativeSubjectId> = PasswordRegistrationConstraintClassifier & {
297
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId>;
298
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId>;
299
+ readonly credential: PasswordCredentialTable<Subject, Identifier, Credential, NativeSubjectId>;
300
+ readonly authorityCredential: PasswordAuthorityCredentialTable<AuthorityCredential, NativeSubjectId>;
301
+ readonly registration: PasswordRegistrationTable<Registration, Request, NativeSubjectId>;
302
+ readonly subjectId: SubjectIdCodec<NativeSubjectId>;
303
+ readonly constraints: RequiredPasswordRegistrationConstraints;
304
+ readonly allocateCredentialId?: Effect.Effect<string, PersistenceMappingError>;
305
+ readonly allocateCredentialIdSync?: () => string;
306
+ readonly allocateRevision?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
307
+ readonly allocateRevisionSync?: () => SecurityRevision;
308
+ } & ({
309
+ readonly mode: "atomic";
310
+ readonly provisioning: PasswordRegistrationProvisioning<Registration, Subject, NativeSubjectId> & ({
311
+ readonly idMode: "allocated";
312
+ readonly allocateSubjectId: Effect.Effect<NativeSubjectId, PersistenceMappingError>;
313
+ } | {
314
+ readonly idMode: "synchronous";
315
+ readonly allocateSubjectIdSync: () => NativeSubjectId;
316
+ } | {
317
+ readonly idMode: "generated";
318
+ readonly decodeGeneratedId: (rows: ReadonlyArray<unknown>) => Effect.Effect<NativeSubjectId, PersistenceMappingError>;
319
+ });
320
+ } | {
321
+ readonly mode: "pending";
322
+ readonly allocateRecoveryReference?: Effect.Effect<typeof RecoveryReference.Type, PersistenceMappingError>;
323
+ readonly allocateRecoveryReferenceSync?: () => typeof RecoveryReference.Type;
324
+ });
325
+ type AnyPasswordPersistenceMapping = PasswordPersistenceMapping<Table, Table, Table, Table, Table, Table, Table, Table, unknown>;
326
+ type AnyPasswordRegistrationMapping<Registration = unknown> = PasswordRegistrationMapping<Registration, Table, Table, Table, Table, Table, unknown>;
327
+ //#endregion
328
+ export { AnyPasswordPersistenceMapping, AnyPasswordRegistrationMapping, D1PasswordPersistenceMapping, PasswordAttemptAction, PasswordAttemptRecord, PasswordAttemptState, PasswordAttemptTable, PasswordAuthorityCredentialTable, PasswordChargeTable, PasswordCommandTable, PasswordConstraintClassifier, PasswordCredentialTable, PasswordD1Clock, PasswordIdentifierTable, PasswordPersistenceMapping, PasswordRateScopeKind, PasswordRateScopeTable, PasswordRegistrationConstraintClassifier, PasswordRegistrationIntent, PasswordRegistrationMapping, PasswordRegistrationProvisioning, PasswordRegistrationState, PasswordRegistrationTable, PasswordScopeKeys, PasswordSubjectTable, RequiredPasswordConstraints, RequiredPasswordRegistrationConstraints, requiredPasswordConstraints, requiredPasswordRegistrationConstraints };
329
+ //# sourceMappingURL=password-model.d.mts.map
@@ -0,0 +1,23 @@
1
+ import "@yielded/auth/Identity";
2
+ //#region src/drizzle/password-model.ts
3
+ const requiredPasswordConstraints = {
4
+ identifier: "unique(identifier.namespace,identifier.value)",
5
+ authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)",
6
+ credentialSubject: "unique(credential.moduleId,credential.subjectId)",
7
+ credentialId: "unique(credential.moduleId,credential.credentialId)",
8
+ attempt: "unique(attempt.moduleId,attempt.attemptId)",
9
+ rateScope: "unique(rateScope.moduleId,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)",
10
+ charge: "unique(charge.moduleId,charge.action,charge.scopeKind,charge.scopeKey,charge.attemptId)",
11
+ command: "unique(command.moduleId,command.commandId)"
12
+ };
13
+ const requiredPasswordRegistrationConstraints = {
14
+ request: "unique(registration.moduleId,registration.requestId)",
15
+ recoveryReference: "unique(registration.recoveryReference)",
16
+ identifier: "unique(identifier.namespace,identifier.value)",
17
+ credentialSubject: "unique(credential.moduleId,credential.subjectId)",
18
+ authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)"
19
+ };
20
+ //#endregion
21
+ export { requiredPasswordConstraints, requiredPasswordRegistrationConstraints };
22
+
23
+ //# sourceMappingURL=password-model.mjs.map