@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,463 @@
1
+ import { AuthStore } from "@yielded/auth/AuthStore";
2
+ import { AuthStoreError } from "@yielded/auth/Errors";
3
+ import {
4
+ ExternalIdentityMutation,
5
+ SubjectProvisioner,
6
+ type SubjectProvisioningInput,
7
+ type ExternalIdentity,
8
+ type LoginIdentifier,
9
+ } from "@yielded/auth/Identity";
10
+ import { OAuthStateStore, type OAuthState } from "@yielded/auth/OAuth";
11
+ import {
12
+ type ConsumeChallenge,
13
+ type NewChallenge,
14
+ type NewRegistration,
15
+ type PendingRegistration,
16
+ type SubjectId,
17
+ } from "@yielded/auth/Schema";
18
+ import {
19
+ getTableColumns,
20
+ type AnyColumn,
21
+ type InferInsertModel,
22
+ type InferSelectModel,
23
+ type Table,
24
+ } from "drizzle-orm";
25
+ import { Context, DateTime, Effect, Layer, Option } from "effect";
26
+ import type * as SqlClient from "effect/unstable/sql/SqlClient";
27
+
28
+ export type CommitMode = "interactive" | "synchronous" | "batch";
29
+
30
+ /**
31
+ * Ordinary error-channel consumes must own their commit. Coordinated callers
32
+ * use the decision methods inside their outer transaction and translate only
33
+ * after that owner commits.
34
+ */
35
+ export interface SqlClientTransactionDatabase {
36
+ readonly $client: Pick<SqlClient.SqlClient, "transactionService">;
37
+ }
38
+
39
+ export const requireStandaloneConsume = (
40
+ database: SqlClientTransactionDatabase,
41
+ ): Effect.Effect<void, AuthStoreError> =>
42
+ Effect.serviceOption(database.$client.transactionService).pipe(
43
+ Effect.flatMap(
44
+ Option.match({
45
+ onNone: () => Effect.void,
46
+ onSome: () =>
47
+ AuthStoreError.make({
48
+ message: "Use the decision consume API inside an outer database transaction",
49
+ }),
50
+ }),
51
+ ),
52
+ );
53
+
54
+ export type { ChallengeConsumeDecision } from "@yielded/auth/Persistence";
55
+ export type { ConsumeDecision } from "@yielded/auth/AuthStore";
56
+
57
+ export { PersistenceMappingError, isMappedConstraintConflict } from "../internal/mapping-error";
58
+ import type { PersistenceMappingError } from "../internal/mapping-error";
59
+
60
+ export interface InstantCodec<NativeInstant> {
61
+ readonly encode: (instant: DateTime.Utc) => NativeInstant;
62
+ readonly decode: (native: NativeInstant) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
63
+ }
64
+
65
+ export interface RequiredAuthStoreConstraints {
66
+ readonly series: "unique(namespace,value,purpose)";
67
+ readonly challengeDigest: "unique(tokenDigest)";
68
+ readonly registrationDigest: "unique(tokenDigest)";
69
+ }
70
+
71
+ export interface RequiredOAuthStateConstraints {
72
+ readonly oauthStateDigest: "unique(stateDigest)";
73
+ }
74
+
75
+ export interface RequiredAuthConstraints
76
+ extends RequiredAuthStoreConstraints, RequiredOAuthStateConstraints {}
77
+
78
+ export const requiredAuthConstraints: RequiredAuthConstraints = {
79
+ series: "unique(namespace,value,purpose)",
80
+ challengeDigest: "unique(tokenDigest)",
81
+ registrationDigest: "unique(tokenDigest)",
82
+ oauthStateDigest: "unique(stateDigest)",
83
+ };
84
+
85
+ export const requiredAuthStoreConstraints: RequiredAuthStoreConstraints = {
86
+ series: "unique(namespace,value,purpose)",
87
+ challengeDigest: "unique(tokenDigest)",
88
+ registrationDigest: "unique(tokenDigest)",
89
+ };
90
+
91
+ export const requiredOAuthStateConstraints: RequiredOAuthStateConstraints = {
92
+ oauthStateDigest: "unique(stateDigest)",
93
+ };
94
+
95
+ type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
96
+
97
+ export interface ChallengeRecord {
98
+ readonly challenge: NewChallenge;
99
+ readonly namespace: string;
100
+ readonly failedAttempts: number;
101
+ readonly consumed: boolean;
102
+ }
103
+
104
+ export interface ChallengeColumns<T extends Table> {
105
+ readonly challengeId: ColumnKey<T>;
106
+ readonly tokenDigest: ColumnKey<T>;
107
+ readonly namespace: ColumnKey<T>;
108
+ readonly value: ColumnKey<T>;
109
+ readonly purpose: ColumnKey<T>;
110
+ readonly otpKeyId: ColumnKey<T>;
111
+ readonly otpDigest: ColumnKey<T>;
112
+ readonly issuedAt: ColumnKey<T>;
113
+ readonly expiresAt: ColumnKey<T>;
114
+ readonly attemptLimit: ColumnKey<T>;
115
+ readonly failedAttempts: ColumnKey<T>;
116
+ readonly consumed: ColumnKey<T>;
117
+ }
118
+
119
+ /**
120
+ * Inputs are immutable server-created issuances. Replacements must advance
121
+ * issuedAt; equal or older issuances fail even after consumption or expiry.
122
+ * Instant encoding must preserve this ordering. Retain the series row as an
123
+ * issuance watermark until every previously accepted issuance has expired;
124
+ * current-row expiry alone is insufficient if historical lifetimes were longer.
125
+ */
126
+ export interface ChallengeTableMapping<T extends Table> {
127
+ readonly table: T;
128
+ readonly columns: ChallengeColumns<T>;
129
+ readonly identifierNamespace: string;
130
+ readonly encodeInstant: (instant: DateTime.Utc) => unknown;
131
+ readonly encodeInsert: (
132
+ input: NewChallenge,
133
+ state: {
134
+ readonly namespace: string;
135
+ readonly failedAttempts: number;
136
+ readonly consumed: false;
137
+ },
138
+ ) => InferInsertModel<T>;
139
+ readonly encodeUpdate: (
140
+ input: NewChallenge,
141
+ state: {
142
+ readonly namespace: string;
143
+ readonly failedAttempts: unknown;
144
+ readonly consumed: false;
145
+ },
146
+ ) => Readonly<Record<string, unknown>>;
147
+ readonly decode: (
148
+ row: InferSelectModel<T>,
149
+ ) => Effect.Effect<ChallengeRecord, PersistenceMappingError>;
150
+ }
151
+
152
+ export interface RegistrationRecord {
153
+ readonly registration: PendingRegistration;
154
+ readonly consumed: boolean;
155
+ }
156
+
157
+ export interface RegistrationColumns<T extends Table> {
158
+ readonly registrationId: ColumnKey<T>;
159
+ readonly tokenDigest: ColumnKey<T>;
160
+ readonly expiresAt: ColumnKey<T>;
161
+ readonly consumed: ColumnKey<T>;
162
+ }
163
+
164
+ export interface RegistrationTableMapping<T extends Table> {
165
+ readonly table: T;
166
+ readonly columns: RegistrationColumns<T>;
167
+ readonly encodeInstant: (instant: DateTime.Utc) => unknown;
168
+ readonly encodeInsert: (input: NewRegistration, consumed: false) => InferInsertModel<T>;
169
+ readonly decode: (
170
+ row: InferSelectModel<T>,
171
+ ) => Effect.Effect<RegistrationRecord, PersistenceMappingError>;
172
+ }
173
+
174
+ export interface OAuthStateColumns<T extends Table> {
175
+ readonly stateDigest: ColumnKey<T>;
176
+ readonly expiresAt: ColumnKey<T>;
177
+ readonly consumed: ColumnKey<T>;
178
+ }
179
+
180
+ export interface OAuthStateTableMapping<T extends Table> {
181
+ readonly table: T;
182
+ readonly columns: OAuthStateColumns<T>;
183
+ readonly encodeInstant: (instant: DateTime.Utc) => unknown;
184
+ readonly encodeInsert: (state: OAuthState, consumed: false) => InferInsertModel<T>;
185
+ readonly decode: (
186
+ row: InferSelectModel<T>,
187
+ ) => Effect.Effect<
188
+ { readonly state: OAuthState; readonly consumed: boolean },
189
+ PersistenceMappingError
190
+ >;
191
+ }
192
+
193
+ export interface AuthStoreTables<Challenge extends Table, Registration extends Table> {
194
+ readonly constraints: RequiredAuthStoreConstraints;
195
+ readonly challenge: ChallengeTableMapping<Challenge>;
196
+ readonly registration: RegistrationTableMapping<Registration>;
197
+ }
198
+
199
+ export interface OAuthStateTables<State extends Table> {
200
+ readonly constraints: RequiredOAuthStateConstraints;
201
+ readonly oauthState: OAuthStateTableMapping<State>;
202
+ }
203
+
204
+ export interface AuthTables<
205
+ Challenge extends Table,
206
+ Registration extends Table,
207
+ State extends Table,
208
+ > {
209
+ readonly constraints: RequiredAuthConstraints;
210
+ readonly challenge: ChallengeTableMapping<Challenge>;
211
+ readonly registration: RegistrationTableMapping<Registration>;
212
+ readonly oauthState: OAuthStateTableMapping<State>;
213
+ }
214
+
215
+ export interface RequiredIdentityConstraints {
216
+ readonly identifier: "unique(namespace,value)";
217
+ readonly externalIdentity: "unique(provider,issuer,subject)";
218
+ readonly provisioningRequest: "unique(requestId)";
219
+ readonly provisioningSubject: "notNull(provisioningRequest.subjectId)";
220
+ }
221
+
222
+ export interface RequiredSubjectProvisioningConstraints {
223
+ readonly identifier: "unique(namespace,value)";
224
+ readonly provisioningRequest: "unique(requestId)";
225
+ readonly provisioningSubject: "notNull(provisioningRequest.subjectId)";
226
+ }
227
+
228
+ export interface RequiredExternalIdentityConstraints {
229
+ readonly externalIdentity: "unique(provider,issuer,subject)";
230
+ }
231
+
232
+ export const requiredIdentityConstraints: RequiredIdentityConstraints = {
233
+ identifier: "unique(namespace,value)",
234
+ externalIdentity: "unique(provider,issuer,subject)",
235
+ provisioningRequest: "unique(requestId)",
236
+ provisioningSubject: "notNull(provisioningRequest.subjectId)",
237
+ };
238
+
239
+ export const requiredSubjectProvisioningConstraints: RequiredSubjectProvisioningConstraints = {
240
+ identifier: "unique(namespace,value)",
241
+ provisioningRequest: "unique(requestId)",
242
+ provisioningSubject: "notNull(provisioningRequest.subjectId)",
243
+ };
244
+
245
+ export const requiredExternalIdentityConstraints: RequiredExternalIdentityConstraints = {
246
+ externalIdentity: "unique(provider,issuer,subject)",
247
+ };
248
+
249
+ export interface SubjectIdCodec<NativeId> {
250
+ readonly toNative: (id: SubjectId) => Effect.Effect<NativeId, PersistenceMappingError>;
251
+ readonly toSubject: (id: NativeId) => Effect.Effect<SubjectId, PersistenceMappingError>;
252
+ readonly equals: (left: NativeId, right: NativeId) => boolean;
253
+ }
254
+
255
+ export interface SubjectProvisioningTables<
256
+ Subject extends Table,
257
+ Identifier extends Table,
258
+ Request extends Table,
259
+ NativeId,
260
+ > {
261
+ readonly constraints: RequiredSubjectProvisioningConstraints;
262
+ readonly subject: {
263
+ readonly table: Subject;
264
+ readonly id: ColumnKey<Subject>;
265
+ readonly status: ColumnKey<Subject>;
266
+ readonly isActiveStatus: (value: unknown) => boolean;
267
+ readonly encodeInsert: (
268
+ input: SubjectProvisioningInput,
269
+ allocatedId: NativeId | undefined,
270
+ ) => InferInsertModel<Subject>;
271
+ readonly allocateId?: Effect.Effect<NativeId, PersistenceMappingError>;
272
+ /** Required instead of allocateId when a synchronous-only DO transaction preallocates IDs. */
273
+ readonly allocateIdSync?: () => NativeId;
274
+ /** Decodes MySQL `$returningId()` for an autoincrement/runtime-default key. */
275
+ readonly decodeGeneratedId?: (
276
+ rows: ReadonlyArray<unknown>,
277
+ ) => Effect.Effect<NativeId, PersistenceMappingError>;
278
+ };
279
+ readonly identifier: {
280
+ readonly table: Identifier;
281
+ readonly namespace: ColumnKey<Identifier>;
282
+ readonly value: ColumnKey<Identifier>;
283
+ readonly subjectId: ColumnKey<Identifier>;
284
+ readonly encodeInsert: (
285
+ identifier: LoginIdentifier,
286
+ subjectId: NativeId,
287
+ verifiedAt: DateTime.Utc | undefined,
288
+ ) => InferInsertModel<Identifier>;
289
+ };
290
+ readonly provisioningRequest: {
291
+ readonly table: Request;
292
+ readonly requestId: ColumnKey<Request>;
293
+ readonly fingerprint: ColumnKey<Request>;
294
+ readonly subjectId: ColumnKey<Request>;
295
+ readonly encodeInsert: (
296
+ requestId: string,
297
+ fingerprint: string,
298
+ subjectId: NativeId,
299
+ ) => InferInsertModel<Request>;
300
+ };
301
+ readonly subjectId: SubjectIdCodec<NativeId>;
302
+ /** Narrows only database constraint failures; every other cause is unavailable. */
303
+ readonly isConstraintConflict: (cause: unknown) => boolean;
304
+ }
305
+
306
+ export interface ExternalIdentityTables<Subject extends Table, External extends Table, NativeId> {
307
+ readonly constraints: RequiredExternalIdentityConstraints;
308
+ readonly subject: {
309
+ readonly table: Subject;
310
+ readonly id: ColumnKey<Subject>;
311
+ readonly status: ColumnKey<Subject>;
312
+ readonly isActiveStatus: (value: unknown) => boolean;
313
+ };
314
+ readonly externalIdentity: {
315
+ readonly table: External;
316
+ readonly provider: ColumnKey<External>;
317
+ readonly issuer: ColumnKey<External>;
318
+ readonly subject: ColumnKey<External>;
319
+ readonly subjectId: ColumnKey<External>;
320
+ readonly encodeInsert: (
321
+ identity: ExternalIdentity,
322
+ subjectId: NativeId,
323
+ ) => InferInsertModel<External>;
324
+ };
325
+ readonly subjectId: SubjectIdCodec<NativeId>;
326
+ readonly isConstraintConflict: (cause: unknown) => boolean;
327
+ }
328
+
329
+ export interface IdentityTables<
330
+ Subject extends Table,
331
+ Identifier extends Table,
332
+ External extends Table,
333
+ Request extends Table,
334
+ NativeId,
335
+ > {
336
+ readonly constraints: RequiredIdentityConstraints;
337
+ readonly subject: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>["subject"];
338
+ readonly identifier: SubjectProvisioningTables<
339
+ Subject,
340
+ Identifier,
341
+ Request,
342
+ NativeId
343
+ >["identifier"];
344
+ readonly externalIdentity: ExternalIdentityTables<
345
+ Subject,
346
+ External,
347
+ NativeId
348
+ >["externalIdentity"];
349
+ readonly provisioningRequest: SubjectProvisioningTables<
350
+ Subject,
351
+ Identifier,
352
+ Request,
353
+ NativeId
354
+ >["provisioningRequest"];
355
+ readonly subjectId: SubjectIdCodec<NativeId>;
356
+ readonly isConstraintConflict: (cause: unknown) => boolean;
357
+ }
358
+
359
+ /** Extra encoders used by D1's ordered batch when the subject id is database-generated. */
360
+ export interface D1SubjectProvisioningMapping<
361
+ Subject extends Table,
362
+ Identifier extends Table,
363
+ Request extends Table,
364
+ NativeId,
365
+ > extends SubjectProvisioningTables<Subject, Identifier, Request, NativeId> {
366
+ readonly d1: {
367
+ readonly requestInsertWithoutSubject: (
368
+ requestId: string,
369
+ fingerprint: string,
370
+ ) => Partial<InferInsertModel<Request>>;
371
+ readonly identifierInsertWithoutSubject: (
372
+ identifier: LoginIdentifier,
373
+ verifiedAt: DateTime.Utc | undefined,
374
+ ) => Partial<InferInsertModel<Identifier>>;
375
+ /** Unshadowed hidden-rowid alias; omit for WITHOUT ROWID or preallocated IDs. */
376
+ readonly generatedRowIdAlias?: "rowid" | "_rowid_" | "oid";
377
+ };
378
+ }
379
+
380
+ export interface D1ExternalIdentityMapping<
381
+ Subject extends Table,
382
+ External extends Table,
383
+ NativeId,
384
+ > extends ExternalIdentityTables<Subject, External, NativeId> {
385
+ readonly d1: {
386
+ readonly activeStatusValue: unknown;
387
+ };
388
+ }
389
+
390
+ export interface D1GeneratedIdentityMapping<
391
+ Subject extends Table,
392
+ Identifier extends Table,
393
+ External extends Table,
394
+ Request extends Table,
395
+ NativeId,
396
+ > extends IdentityTables<Subject, Identifier, External, Request, NativeId> {
397
+ readonly d1: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>["d1"] &
398
+ D1ExternalIdentityMapping<Subject, External, NativeId>["d1"];
399
+ }
400
+
401
+ export const provisioningFingerprint = (input: SubjectProvisioningInput): string =>
402
+ // oxlint-disable-next-line no-restricted-properties -- stable internal provisioning fingerprint, never external JSON.
403
+ JSON.stringify(
404
+ input.identifier === undefined
405
+ ? ["v1", null]
406
+ : [
407
+ "v1",
408
+ input.identifier.namespace,
409
+ input.identifier.value,
410
+ input.verifiedAt === undefined ? null : DateTime.toEpochMillis(input.verifiedAt),
411
+ ],
412
+ );
413
+
414
+ /**
415
+ * Drizzle wraps Effect SQL failures before adapters observe them. Give the
416
+ * consumer classifier each semantic wrapper in the short `cause`/`reason`
417
+ * chain without exposing query text or bound parameters through public errors.
418
+ */
419
+
420
+ export const column = <T extends Table>(table: T, key: ColumnKey<T>): AnyColumn =>
421
+ getTableColumns(table)[key] as AnyColumn;
422
+
423
+ export const updateValues = <T extends Table>(
424
+ entries: ReadonlyArray<readonly [ColumnKey<T>, unknown]>,
425
+ ): Partial<InferInsertModel<T>> => Object.fromEntries(entries) as Partial<InferInsertModel<T>>;
426
+
427
+ export type ChallengeInput = ConsumeChallenge;
428
+
429
+ /** Acquire an application database in Effect and expose the auth stores as one layer. */
430
+ export const authServicesLayer = <E, R>(
431
+ acquire: Effect.Effect<
432
+ {
433
+ readonly authStore: AuthStore["Service"];
434
+ readonly oauthStateStore: OAuthStateStore["Service"];
435
+ },
436
+ E,
437
+ R
438
+ >,
439
+ ) =>
440
+ Layer.effectContext(
441
+ Effect.map(acquire, ({ authStore, oauthStateStore }) =>
442
+ Context.make(AuthStore, authStore).pipe(Context.add(OAuthStateStore, oauthStateStore)),
443
+ ),
444
+ );
445
+
446
+ /** Acquire an application database in Effect and expose the identity services as one layer. */
447
+ export const identityServicesLayer = <E, R>(
448
+ acquire: Effect.Effect<
449
+ {
450
+ readonly subjectProvisioner: SubjectProvisioner["Service"];
451
+ readonly externalIdentityMutation: ExternalIdentityMutation["Service"];
452
+ },
453
+ E,
454
+ R
455
+ >,
456
+ ) =>
457
+ Layer.effectContext(
458
+ Effect.map(acquire, ({ subjectProvisioner, externalIdentityMutation }) =>
459
+ Context.make(SubjectProvisioner, subjectProvisioner).pipe(
460
+ Context.add(ExternalIdentityMutation, externalIdentityMutation),
461
+ ),
462
+ ),
463
+ );