@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,491 @@
1
+ import { type RecoveryReference, type LoginIdentifier } from "@yielded/auth/Identity";
2
+ import type {
3
+ PasswordAction,
4
+ PasswordAttemptId,
5
+ PasswordCredentialSnapshot,
6
+ PasswordReplacement,
7
+ PasswordRegistrationDecision,
8
+ EncodedPasswordHash,
9
+ } from "@yielded/auth/Password";
10
+ import type { AuthenticationRequirement, SecurityRevision } from "@yielded/auth/Sessions";
11
+ import type { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
12
+ import type { Effect, Redacted } from "effect";
13
+
14
+ import type { PersistenceMappingError, SubjectIdCodec } from "./model";
15
+
16
+ type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
17
+
18
+ export type PasswordAttemptAction = "sign-in" | "change";
19
+ export type PasswordAttemptState = "pending" | "verified" | "rejected";
20
+ export type PasswordRateScopeKind = "action" | "identifier" | "subject";
21
+
22
+ export interface PasswordScopeKeys {
23
+ readonly action: string;
24
+ readonly identifier: string;
25
+ readonly subject?: string;
26
+ }
27
+
28
+ export interface PasswordSubjectTable<Subject extends Table, _NativeSubjectId> {
29
+ readonly table: Subject;
30
+ readonly id: ColumnKey<Subject>;
31
+ readonly status: ColumnKey<Subject>;
32
+ readonly securityRevision: ColumnKey<Subject>;
33
+ readonly isActiveStatus: (value: unknown) => boolean;
34
+ readonly decodeRequirement: (
35
+ row: InferSelectModel<Subject>,
36
+ ) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
37
+ /** Current policy for this exact credential mutation, decoded under the subject lock. */
38
+ readonly decodeActionRequirement: (
39
+ row: InferSelectModel<Subject>,
40
+ action: PasswordAction,
41
+ ) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
42
+ readonly nextSecurityRevision?: (
43
+ current: SecurityRevision,
44
+ ) => Effect.Effect<SecurityRevision, PersistenceMappingError>;
45
+ readonly nextSecurityRevisionSync?: (current: SecurityRevision) => SecurityRevision;
46
+ /** Required only by D1 conditional statements. */
47
+ readonly d1ActiveStatusValue?: unknown;
48
+ }
49
+
50
+ export interface PasswordIdentifierTable<Identifier extends Table, NativeSubjectId> {
51
+ readonly table: Identifier;
52
+ readonly namespace: ColumnKey<Identifier>;
53
+ readonly value: ColumnKey<Identifier>;
54
+ readonly subjectId: ColumnKey<Identifier>;
55
+ readonly verifiedAt: ColumnKey<Identifier>;
56
+ readonly bindingRevision: ColumnKey<Identifier>;
57
+ /** Consumer-owned current login/recovery eligibility, including row status. */
58
+ readonly isCurrent: (row: InferSelectModel<Identifier>) => boolean;
59
+ /** Required by D1 so current ownership/eligibility is rechecked in the batch. */
60
+ readonly d1CurrentCondition?: (input: {
61
+ readonly identifier: LoginIdentifier;
62
+ readonly nativeSubjectId: NativeSubjectId;
63
+ }) => SQL;
64
+ readonly encodeInitialInsert: (
65
+ identifier: LoginIdentifier,
66
+ subjectId: NativeSubjectId,
67
+ bindingRevision: SecurityRevision,
68
+ ) => InferInsertModel<Identifier>;
69
+ }
70
+
71
+ export interface PasswordAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
72
+ readonly table: Credential;
73
+ readonly subjectId: ColumnKey<Credential>;
74
+ readonly credentialId: ColumnKey<Credential>;
75
+ readonly revision: ColumnKey<Credential>;
76
+ readonly status?: ColumnKey<Credential>;
77
+ readonly isActiveStatus?: (value: unknown) => boolean;
78
+ readonly d1ActiveStatusValue?: unknown;
79
+ readonly encodeInsert: (input: {
80
+ readonly subjectId: NativeSubjectId;
81
+ readonly credentialId: string;
82
+ readonly revision: SecurityRevision;
83
+ }) => InferInsertModel<Credential>;
84
+ readonly encodeRevision: (revision: SecurityRevision) => Partial<InferInsertModel<Credential>>;
85
+ }
86
+
87
+ export interface PasswordCredentialTable<
88
+ Subject extends Table,
89
+ Identifier extends Table,
90
+ Credential extends Table,
91
+ NativeSubjectId,
92
+ > {
93
+ readonly table: Credential;
94
+ readonly moduleId: ColumnKey<Credential>;
95
+ readonly subjectId: ColumnKey<Credential>;
96
+ readonly credentialId: ColumnKey<Credential>;
97
+ readonly credentialRevision: ColumnKey<Credential>;
98
+ readonly verifierVersion: ColumnKey<Credential>;
99
+ readonly verifier: ColumnKey<Credential>;
100
+ readonly normalization: ColumnKey<Credential>;
101
+ readonly encodeInsert: (input: {
102
+ readonly moduleId: string;
103
+ readonly subjectId: NativeSubjectId;
104
+ readonly credentialId: string;
105
+ readonly credentialRevision: SecurityRevision;
106
+ readonly verifierVersion: SecurityRevision;
107
+ readonly replacement: PasswordReplacement;
108
+ }) => InferInsertModel<Credential>;
109
+ readonly encodeVerifier: (
110
+ verifier: Redacted.Redacted<EncodedPasswordHash>,
111
+ verifierVersion: SecurityRevision,
112
+ ) => Partial<InferInsertModel<Credential>>;
113
+ readonly encodeReplacement: (input: {
114
+ readonly replacement: PasswordReplacement;
115
+ readonly credentialRevision: SecurityRevision;
116
+ readonly verifierVersion: SecurityRevision;
117
+ }) => Partial<InferInsertModel<Credential>>;
118
+ readonly decode: (input: {
119
+ readonly moduleId: string;
120
+ readonly subject: InferSelectModel<Subject>;
121
+ readonly identifier: InferSelectModel<Identifier>;
122
+ readonly credential: InferSelectModel<Credential>;
123
+ }) => Effect.Effect<PasswordCredentialSnapshot, PersistenceMappingError>;
124
+ }
125
+
126
+ export interface PasswordAttemptRecord {
127
+ readonly moduleId: string;
128
+ readonly action: PasswordAttemptAction;
129
+ readonly attemptId: PasswordAttemptId;
130
+ readonly identifier: LoginIdentifier;
131
+ readonly subjectId?: string;
132
+ readonly credentialId?: string;
133
+ readonly securityRevision?: SecurityRevision;
134
+ readonly credentialRevision?: SecurityRevision;
135
+ readonly verifierVersion?: SecurityRevision;
136
+ readonly identifierBindingRevision?: SecurityRevision;
137
+ readonly admittedAtMillis: number;
138
+ readonly deadlineMillis: number;
139
+ readonly retentionUntilMillis: number;
140
+ }
141
+
142
+ export interface PasswordAttemptTable<Attempt extends Table, NativeSubjectId> {
143
+ readonly table: Attempt;
144
+ readonly moduleId: ColumnKey<Attempt>;
145
+ readonly action: ColumnKey<Attempt>;
146
+ readonly attemptId: ColumnKey<Attempt>;
147
+ readonly identifierNamespace: ColumnKey<Attempt>;
148
+ readonly identifierValue: ColumnKey<Attempt>;
149
+ readonly subjectId: ColumnKey<Attempt>;
150
+ readonly credentialId: ColumnKey<Attempt>;
151
+ readonly securityRevision: ColumnKey<Attempt>;
152
+ readonly credentialRevision: ColumnKey<Attempt>;
153
+ readonly verifierVersion: ColumnKey<Attempt>;
154
+ readonly identifierBindingRevision: ColumnKey<Attempt>;
155
+ readonly admittedAt: ColumnKey<Attempt>;
156
+ readonly deadline: ColumnKey<Attempt>;
157
+ readonly retentionUntil: ColumnKey<Attempt>;
158
+ readonly state: ColumnKey<Attempt>;
159
+ readonly encodeInsert: (
160
+ record: PasswordAttemptRecord,
161
+ input: { readonly nativeSubjectId?: NativeSubjectId; readonly state: "pending" },
162
+ ) => InferInsertModel<Attempt>;
163
+ }
164
+
165
+ export interface PasswordRateScopeTable<RateScope extends Table> {
166
+ readonly table: RateScope;
167
+ readonly moduleId: ColumnKey<RateScope>;
168
+ readonly action: ColumnKey<RateScope>;
169
+ readonly scopeKind: ColumnKey<RateScope>;
170
+ readonly scopeKey: ColumnKey<RateScope>;
171
+ readonly encodeInsert: (input: {
172
+ readonly moduleId: string;
173
+ readonly action: PasswordAttemptAction;
174
+ readonly scopeKind: PasswordRateScopeKind;
175
+ readonly scopeKey: string;
176
+ }) => InferInsertModel<RateScope>;
177
+ }
178
+
179
+ export interface PasswordChargeTable<Charge extends Table> {
180
+ readonly table: Charge;
181
+ readonly moduleId: ColumnKey<Charge>;
182
+ readonly action: ColumnKey<Charge>;
183
+ readonly scopeKind: ColumnKey<Charge>;
184
+ readonly scopeKey: ColumnKey<Charge>;
185
+ readonly attemptId: ColumnKey<Charge>;
186
+ readonly occurredAt: ColumnKey<Charge>;
187
+ readonly retentionUntil: ColumnKey<Charge>;
188
+ readonly encodeInsert: (input: {
189
+ readonly moduleId: string;
190
+ readonly action: PasswordAttemptAction;
191
+ readonly scopeKind: PasswordRateScopeKind;
192
+ readonly scopeKey: string;
193
+ readonly attemptId: PasswordAttemptId;
194
+ readonly occurredAtMillis: number;
195
+ readonly retentionUntilMillis: number;
196
+ }) => InferInsertModel<Charge>;
197
+ }
198
+
199
+ export interface PasswordCommandTable<Command extends Table> {
200
+ readonly table: Command;
201
+ readonly moduleId: ColumnKey<Command>;
202
+ readonly commandId: ColumnKey<Command>;
203
+ readonly action: ColumnKey<Command>;
204
+ readonly bindingDigest: ColumnKey<Command>;
205
+ readonly decision: ColumnKey<Command>;
206
+ readonly retentionUntil: ColumnKey<Command>;
207
+ readonly encodeInsert: (input: {
208
+ readonly moduleId: string;
209
+ readonly commandId: string;
210
+ readonly action: string;
211
+ readonly bindingDigest: string;
212
+ readonly decision: "changed";
213
+ readonly retentionUntilMillis: number;
214
+ }) => InferInsertModel<Command>;
215
+ }
216
+
217
+ export interface RequiredPasswordConstraints {
218
+ readonly identifier: "unique(identifier.namespace,identifier.value)";
219
+ readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
220
+ readonly credentialSubject: "unique(credential.moduleId,credential.subjectId)";
221
+ readonly credentialId: "unique(credential.moduleId,credential.credentialId)";
222
+ readonly attempt: "unique(attempt.moduleId,attempt.attemptId)";
223
+ readonly rateScope: "unique(rateScope.moduleId,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)";
224
+ readonly charge: "unique(charge.moduleId,charge.action,charge.scopeKind,charge.scopeKey,charge.attemptId)";
225
+ readonly command: "unique(command.moduleId,command.commandId)";
226
+ }
227
+
228
+ export const requiredPasswordConstraints: RequiredPasswordConstraints = {
229
+ identifier: "unique(identifier.namespace,identifier.value)",
230
+ authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)",
231
+ credentialSubject: "unique(credential.moduleId,credential.subjectId)",
232
+ credentialId: "unique(credential.moduleId,credential.credentialId)",
233
+ attempt: "unique(attempt.moduleId,attempt.attemptId)",
234
+ rateScope: "unique(rateScope.moduleId,rateScope.action,rateScope.scopeKind,rateScope.scopeKey)",
235
+ charge: "unique(charge.moduleId,charge.action,charge.scopeKind,charge.scopeKey,charge.attemptId)",
236
+ command: "unique(command.moduleId,command.commandId)",
237
+ };
238
+
239
+ export interface PasswordConstraintClassifier {
240
+ /** Match only the mapped command uniqueness constraint. */
241
+ readonly isCommandConflict: (cause: unknown) => boolean;
242
+ /** Match only the mapped rate-scope uniqueness constraint. */
243
+ readonly isRateScopeConflict: (cause: unknown) => boolean;
244
+ }
245
+
246
+ export interface PasswordD1Clock {
247
+ readonly engineNow: SQL;
248
+ readonly engineNowMillis: SQL;
249
+ readonly engineInstantMinus: (millis: number) => SQL;
250
+ readonly engineInstantPlus: (millis: number) => SQL;
251
+ }
252
+
253
+ export interface PasswordPersistenceMapping<
254
+ Subject extends Table,
255
+ Identifier extends Table,
256
+ Credential extends Table,
257
+ AuthorityCredential extends Table,
258
+ Attempt extends Table,
259
+ RateScope extends Table,
260
+ Charge extends Table,
261
+ Command extends Table,
262
+ NativeSubjectId,
263
+ > extends PasswordConstraintClassifier {
264
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId>;
265
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId>;
266
+ readonly credential: PasswordCredentialTable<Subject, Identifier, Credential, NativeSubjectId>;
267
+ /** Every factor revision named by action evidence, including non-password factors. */
268
+ readonly authorityCredential: PasswordAuthorityCredentialTable<
269
+ AuthorityCredential,
270
+ NativeSubjectId
271
+ >;
272
+ readonly attempt: PasswordAttemptTable<Attempt, NativeSubjectId>;
273
+ readonly rateScope: PasswordRateScopeTable<RateScope>;
274
+ readonly charge: PasswordChargeTable<Charge>;
275
+ readonly command: PasswordCommandTable<Command>;
276
+ readonly subjectId: SubjectIdCodec<NativeSubjectId>;
277
+ readonly constraints: RequiredPasswordConstraints;
278
+ readonly scopeKeys: (input: {
279
+ readonly moduleId: string;
280
+ readonly action: PasswordAttemptAction;
281
+ readonly identifier: LoginIdentifier;
282
+ readonly subjectId?: string;
283
+ }) => PasswordScopeKeys;
284
+ readonly encodeInstant: (epochMillis: number) => unknown;
285
+ readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;
286
+ readonly allocateAttemptId?: Effect.Effect<PasswordAttemptId, PersistenceMappingError>;
287
+ readonly allocateAttemptIdSync?: () => PasswordAttemptId;
288
+ readonly allocateCredentialId?: Effect.Effect<string, PersistenceMappingError>;
289
+ readonly allocateCredentialIdSync?: () => string;
290
+ readonly allocateRevision?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
291
+ readonly allocateRevisionSync?: () => SecurityRevision;
292
+ readonly commandRetentionMillis: number;
293
+ /** All semantic replacements still bump subject revision. This flag only declares bearer invalidation latency. */
294
+ readonly sessionInvalidation: "same-authority-immediate" | "original-absolute-expiry";
295
+ readonly d1?: PasswordD1Clock;
296
+ }
297
+
298
+ export type D1PasswordPersistenceMapping<
299
+ Subject extends Table,
300
+ Identifier extends Table,
301
+ Credential extends Table,
302
+ AuthorityCredential extends Table,
303
+ Attempt extends Table,
304
+ RateScope extends Table,
305
+ Charge extends Table,
306
+ Command extends Table,
307
+ NativeSubjectId,
308
+ > = PasswordPersistenceMapping<
309
+ Subject,
310
+ Identifier,
311
+ Credential,
312
+ AuthorityCredential,
313
+ Attempt,
314
+ RateScope,
315
+ Charge,
316
+ Command,
317
+ NativeSubjectId
318
+ > & {
319
+ readonly d1: PasswordD1Clock;
320
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId> & {
321
+ readonly d1ActiveStatusValue: unknown;
322
+ };
323
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId> & {
324
+ readonly d1CurrentCondition: (input: {
325
+ readonly identifier: LoginIdentifier;
326
+ readonly nativeSubjectId: NativeSubjectId;
327
+ }) => SQL;
328
+ };
329
+ readonly authorityCredential: PasswordAuthorityCredentialTable<
330
+ AuthorityCredential,
331
+ NativeSubjectId
332
+ > & {
333
+ readonly d1ActiveStatusValue: unknown;
334
+ };
335
+ };
336
+
337
+ export type PasswordRegistrationState = "pending" | "created";
338
+
339
+ export interface PasswordRegistrationIntent<Registration> {
340
+ readonly moduleId: string;
341
+ readonly requestId: string;
342
+ readonly identifier: LoginIdentifier;
343
+ readonly registration: Registration;
344
+ readonly replacement: PasswordReplacement;
345
+ }
346
+
347
+ export interface PasswordRegistrationTable<Registration, Request extends Table, NativeSubjectId> {
348
+ readonly table: Request;
349
+ readonly moduleId: ColumnKey<Request>;
350
+ readonly requestId: ColumnKey<Request>;
351
+ readonly state: ColumnKey<Request>;
352
+ readonly subjectId: ColumnKey<Request>;
353
+ readonly recoveryReference: ColumnKey<Request>;
354
+ readonly encodeInsert: (
355
+ input: PasswordRegistrationIntent<Registration>,
356
+ state: {
357
+ readonly state: PasswordRegistrationState;
358
+ readonly nativeSubjectId?: NativeSubjectId;
359
+ readonly recoveryReference?: typeof RecoveryReference.Type;
360
+ },
361
+ ) => InferInsertModel<Request>;
362
+ /** Replay projection must never expose a stored subject or decode protected intent. */
363
+ readonly decodeReplay: (
364
+ row: InferSelectModel<Request>,
365
+ ) => Effect.Effect<
366
+ Exclude<PasswordRegistrationDecision, { readonly _tag: "Created" }>,
367
+ PersistenceMappingError
368
+ >;
369
+ }
370
+
371
+ export interface PasswordRegistrationProvisioning<
372
+ Registration,
373
+ Subject extends Table,
374
+ NativeSubjectId,
375
+ > {
376
+ readonly encodeSubjectInsert: (
377
+ input: PasswordRegistrationIntent<Registration>,
378
+ values: {
379
+ readonly nativeSubjectId: NativeSubjectId | undefined;
380
+ readonly securityRevision: SecurityRevision;
381
+ },
382
+ ) => InferInsertModel<Subject>;
383
+ readonly allocateSubjectId?: Effect.Effect<NativeSubjectId, PersistenceMappingError>;
384
+ readonly allocateSubjectIdSync?: () => NativeSubjectId;
385
+ /** Interactive targets use this for database-generated/autoincrement keys. */
386
+ readonly decodeGeneratedId?: (
387
+ rows: ReadonlyArray<unknown>,
388
+ ) => Effect.Effect<NativeSubjectId, PersistenceMappingError>;
389
+ }
390
+
391
+ export interface RequiredPasswordRegistrationConstraints {
392
+ readonly request: "unique(registration.moduleId,registration.requestId)";
393
+ readonly recoveryReference: "unique(registration.recoveryReference)";
394
+ readonly identifier: "unique(identifier.namespace,identifier.value)";
395
+ readonly credentialSubject: "unique(credential.moduleId,credential.subjectId)";
396
+ readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
397
+ }
398
+
399
+ export const requiredPasswordRegistrationConstraints: RequiredPasswordRegistrationConstraints = {
400
+ request: "unique(registration.moduleId,registration.requestId)",
401
+ recoveryReference: "unique(registration.recoveryReference)",
402
+ identifier: "unique(identifier.namespace,identifier.value)",
403
+ credentialSubject: "unique(credential.moduleId,credential.subjectId)",
404
+ authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)",
405
+ };
406
+
407
+ export interface PasswordRegistrationConstraintClassifier {
408
+ readonly isRequestConflict: (cause: unknown) => boolean;
409
+ readonly isIdentifierConflict: (cause: unknown) => boolean;
410
+ readonly isCredentialConflict: (cause: unknown) => boolean;
411
+ }
412
+
413
+ export type PasswordRegistrationMapping<
414
+ Registration,
415
+ Subject extends Table,
416
+ Identifier extends Table,
417
+ Credential extends Table,
418
+ AuthorityCredential extends Table,
419
+ Request extends Table,
420
+ NativeSubjectId,
421
+ > = PasswordRegistrationConstraintClassifier & {
422
+ readonly subject: PasswordSubjectTable<Subject, NativeSubjectId>;
423
+ readonly identifier: PasswordIdentifierTable<Identifier, NativeSubjectId>;
424
+ readonly credential: PasswordCredentialTable<Subject, Identifier, Credential, NativeSubjectId>;
425
+ readonly authorityCredential: PasswordAuthorityCredentialTable<
426
+ AuthorityCredential,
427
+ NativeSubjectId
428
+ >;
429
+ readonly registration: PasswordRegistrationTable<Registration, Request, NativeSubjectId>;
430
+ readonly subjectId: SubjectIdCodec<NativeSubjectId>;
431
+ readonly constraints: RequiredPasswordRegistrationConstraints;
432
+ readonly allocateCredentialId?: Effect.Effect<string, PersistenceMappingError>;
433
+ readonly allocateCredentialIdSync?: () => string;
434
+ readonly allocateRevision?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
435
+ readonly allocateRevisionSync?: () => SecurityRevision;
436
+ } & (
437
+ | {
438
+ readonly mode: "atomic";
439
+ readonly provisioning: PasswordRegistrationProvisioning<
440
+ Registration,
441
+ Subject,
442
+ NativeSubjectId
443
+ > &
444
+ (
445
+ | {
446
+ readonly idMode: "allocated";
447
+ readonly allocateSubjectId: Effect.Effect<NativeSubjectId, PersistenceMappingError>;
448
+ }
449
+ | {
450
+ readonly idMode: "synchronous";
451
+ readonly allocateSubjectIdSync: () => NativeSubjectId;
452
+ }
453
+ | {
454
+ readonly idMode: "generated";
455
+ readonly decodeGeneratedId: (
456
+ rows: ReadonlyArray<unknown>,
457
+ ) => Effect.Effect<NativeSubjectId, PersistenceMappingError>;
458
+ }
459
+ );
460
+ }
461
+ | {
462
+ readonly mode: "pending";
463
+ readonly allocateRecoveryReference?: Effect.Effect<
464
+ typeof RecoveryReference.Type,
465
+ PersistenceMappingError
466
+ >;
467
+ readonly allocateRecoveryReferenceSync?: () => typeof RecoveryReference.Type;
468
+ }
469
+ );
470
+
471
+ export type AnyPasswordPersistenceMapping = PasswordPersistenceMapping<
472
+ Table,
473
+ Table,
474
+ Table,
475
+ Table,
476
+ Table,
477
+ Table,
478
+ Table,
479
+ Table,
480
+ unknown
481
+ >;
482
+
483
+ export type AnyPasswordRegistrationMapping<Registration = unknown> = PasswordRegistrationMapping<
484
+ Registration,
485
+ Table,
486
+ Table,
487
+ Table,
488
+ Table,
489
+ Table,
490
+ unknown
491
+ >;