@yielded/auth 0.1.0-beta.1

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 (1466) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/dist/Atom.d.mts +5 -0
  4. package/dist/Atom.mjs +5 -0
  5. package/dist/Auth.d.mts +9 -0
  6. package/dist/Auth.mjs +7 -0
  7. package/dist/AuthContract.d.mts +4 -0
  8. package/dist/AuthContract.mjs +4 -0
  9. package/dist/AuthSession.d.mts +82 -0
  10. package/dist/AuthSession.mjs +138 -0
  11. package/dist/AuthSession.mjs.map +1 -0
  12. package/dist/AuthStore.d.mts +68 -0
  13. package/dist/AuthStore.mjs +194 -0
  14. package/dist/AuthStore.mjs.map +1 -0
  15. package/dist/AuthTokenCodec.d.mts +40 -0
  16. package/dist/AuthTokenCodec.mjs +104 -0
  17. package/dist/AuthTokenCodec.mjs.map +1 -0
  18. package/dist/Client.d.mts +2 -0
  19. package/dist/Client.mjs +2 -0
  20. package/dist/Cloudflare.d.mts +89 -0
  21. package/dist/Cloudflare.mjs +166 -0
  22. package/dist/Cloudflare.mjs.map +1 -0
  23. package/dist/Drizzle.d.mts +28 -0
  24. package/dist/Drizzle.mjs +27 -0
  25. package/dist/DrizzleD1.d.mts +935 -0
  26. package/dist/DrizzleD1.mjs +29 -0
  27. package/dist/DrizzleD1.mjs.map +1 -0
  28. package/dist/DrizzleLibsql.d.mts +2288 -0
  29. package/dist/DrizzleLibsql.mjs +85 -0
  30. package/dist/DrizzleLibsql.mjs.map +1 -0
  31. package/dist/DrizzleMysql2.d.mts +1809 -0
  32. package/dist/DrizzleMysql2.mjs +55 -0
  33. package/dist/DrizzleMysql2.mjs.map +1 -0
  34. package/dist/DrizzlePglite.d.mts +1808 -0
  35. package/dist/DrizzlePglite.mjs +45 -0
  36. package/dist/DrizzlePglite.mjs.map +1 -0
  37. package/dist/DrizzlePostgres.d.mts +1808 -0
  38. package/dist/DrizzlePostgres.mjs +45 -0
  39. package/dist/DrizzlePostgres.mjs.map +1 -0
  40. package/dist/DrizzleSqliteBun.d.mts +2287 -0
  41. package/dist/DrizzleSqliteBun.mjs +62 -0
  42. package/dist/DrizzleSqliteBun.mjs.map +1 -0
  43. package/dist/DrizzleSqliteDo.d.mts +2343 -0
  44. package/dist/DrizzleSqliteDo.mjs +105 -0
  45. package/dist/DrizzleSqliteDo.mjs.map +1 -0
  46. package/dist/DrizzleSqliteNode.d.mts +2287 -0
  47. package/dist/DrizzleSqliteNode.mjs +62 -0
  48. package/dist/DrizzleSqliteNode.mjs.map +1 -0
  49. package/dist/DrizzleSqliteWasm.d.mts +2287 -0
  50. package/dist/DrizzleSqliteWasm.mjs +62 -0
  51. package/dist/DrizzleSqliteWasm.mjs.map +1 -0
  52. package/dist/Email.d.mts +12 -0
  53. package/dist/Email.mjs +11 -0
  54. package/dist/EmailOtp.d.mts +42 -0
  55. package/dist/EmailOtp.mjs +120 -0
  56. package/dist/EmailOtp.mjs.map +1 -0
  57. package/dist/EmailOtpSender.d.mts +22 -0
  58. package/dist/EmailOtpSender.mjs +18 -0
  59. package/dist/EmailOtpSender.mjs.map +1 -0
  60. package/dist/Errors.d.mts +55 -0
  61. package/dist/Errors.mjs +31 -0
  62. package/dist/Errors.mjs.map +1 -0
  63. package/dist/GitHub.d.mts +5 -0
  64. package/dist/GitHub.mjs +4 -0
  65. package/dist/Hooks.d.mts +6 -0
  66. package/dist/Hooks.mjs +6 -0
  67. package/dist/Http.d.mts +12 -0
  68. package/dist/Http.mjs +12 -0
  69. package/dist/HttpServer.d.mts +103 -0
  70. package/dist/HttpServer.mjs +326 -0
  71. package/dist/HttpServer.mjs.map +1 -0
  72. package/dist/Identity.d.mts +9 -0
  73. package/dist/Identity.mjs +9 -0
  74. package/dist/IdentityResolver.d.mts +16 -0
  75. package/dist/IdentityResolver.mjs +12 -0
  76. package/dist/IdentityResolver.mjs.map +1 -0
  77. package/dist/OAuth.d.mts +36 -0
  78. package/dist/OAuth.mjs +35 -0
  79. package/dist/OpenIdClient.d.mts +3 -0
  80. package/dist/OpenIdClient.mjs +3 -0
  81. package/dist/OpenIdClientConnected.d.mts +4 -0
  82. package/dist/OpenIdClientConnected.mjs +3 -0
  83. package/dist/OperationHttp.d.mts +3 -0
  84. package/dist/OperationHttp.mjs +3 -0
  85. package/dist/OperationHttpClient.d.mts +2 -0
  86. package/dist/OperationHttpClient.mjs +2 -0
  87. package/dist/OperationHttpServer.d.mts +5 -0
  88. package/dist/OperationHttpServer.mjs +4 -0
  89. package/dist/Operations.d.mts +8 -0
  90. package/dist/Operations.mjs +8 -0
  91. package/dist/Passkey.d.mts +12 -0
  92. package/dist/Passkey.mjs +12 -0
  93. package/dist/PasskeyBrowser.d.mts +4 -0
  94. package/dist/PasskeyBrowser.mjs +4 -0
  95. package/dist/PasskeyContract.d.mts +641 -0
  96. package/dist/PasskeyContract.mjs +174 -0
  97. package/dist/PasskeyContract.mjs.map +1 -0
  98. package/dist/PasskeyPassword.d.mts +412 -0
  99. package/dist/PasskeyPassword.mjs +174 -0
  100. package/dist/PasskeyPassword.mjs.map +1 -0
  101. package/dist/PasskeySimpleWebAuthn.d.mts +3 -0
  102. package/dist/PasskeySimpleWebAuthn.mjs +3 -0
  103. package/dist/Password.d.mts +19 -0
  104. package/dist/Password.mjs +17 -0
  105. package/dist/PasswordAuth.d.mts +45 -0
  106. package/dist/PasswordAuth.mjs +79 -0
  107. package/dist/PasswordAuth.mjs.map +1 -0
  108. package/dist/PasswordCredentialStore.d.mts +46 -0
  109. package/dist/PasswordCredentialStore.mjs +62 -0
  110. package/dist/PasswordCredentialStore.mjs.map +1 -0
  111. package/dist/PasswordHasher.d.mts +31 -0
  112. package/dist/PasswordHasher.mjs +76 -0
  113. package/dist/PasswordHasher.mjs.map +1 -0
  114. package/dist/PhoneOtp.d.mts +11 -0
  115. package/dist/PhoneOtp.mjs +11 -0
  116. package/dist/Policy.d.mts +52 -0
  117. package/dist/Policy.mjs +36 -0
  118. package/dist/Policy.mjs.map +1 -0
  119. package/dist/Proofs.d.mts +14 -0
  120. package/dist/Proofs.mjs +13 -0
  121. package/dist/Rpc.d.mts +12 -0
  122. package/dist/Rpc.mjs +11 -0
  123. package/dist/Rpc.mjs.map +1 -0
  124. package/dist/Schema.d.mts +160 -0
  125. package/dist/Schema.mjs +141 -0
  126. package/dist/Schema.mjs.map +1 -0
  127. package/dist/SessionContract.d.mts +3 -0
  128. package/dist/SessionContract.mjs +3 -0
  129. package/dist/Sessions.d.mts +14 -0
  130. package/dist/Sessions.mjs +12 -0
  131. package/dist/Testing.d.mts +7 -0
  132. package/dist/Testing.mjs +7 -0
  133. package/dist/Totp.d.mts +8 -0
  134. package/dist/Totp.mjs +8 -0
  135. package/dist/TotpContract.d.mts +318 -0
  136. package/dist/TotpContract.mjs +119 -0
  137. package/dist/TotpContract.mjs.map +1 -0
  138. package/dist/WebCrypto.d.mts +28 -0
  139. package/dist/WebCrypto.mjs +42 -0
  140. package/dist/WebCrypto.mjs.map +1 -0
  141. package/dist/Workflows.d.mts +16 -0
  142. package/dist/Workflows.mjs +11 -0
  143. package/dist/Workflows.mjs.map +1 -0
  144. package/dist/atom/AuthAtomLifetime.d.mts +35 -0
  145. package/dist/atom/AuthAtomLifetime.mjs +50 -0
  146. package/dist/atom/AuthAtomLifetime.mjs.map +1 -0
  147. package/dist/atom/AuthAtomWorkflow.d.mts +17 -0
  148. package/dist/atom/AuthAtomWorkflow.mjs +9 -0
  149. package/dist/atom/AuthAtomWorkflow.mjs.map +1 -0
  150. package/dist/atom/client.d.mts +43 -0
  151. package/dist/atom/client.mjs +168 -0
  152. package/dist/atom/client.mjs.map +1 -0
  153. package/dist/atom/operations.d.mts +35 -0
  154. package/dist/atom/operations.mjs +58 -0
  155. package/dist/atom/operations.mjs.map +1 -0
  156. package/dist/atom/scoped-runtime.mjs +151 -0
  157. package/dist/atom/scoped-runtime.mjs.map +1 -0
  158. package/dist/auth/Auth.d.mts +7806 -0
  159. package/dist/auth/Auth.mjs +141 -0
  160. package/dist/auth/Auth.mjs.map +1 -0
  161. package/dist/auth/AuthConfigurationError.d.mts +10 -0
  162. package/dist/auth/AuthConfigurationError.mjs +14 -0
  163. package/dist/auth/AuthConfigurationError.mjs.map +1 -0
  164. package/dist/auth/AuthRequest.d.mts +21 -0
  165. package/dist/auth/AuthRequest.mjs +10 -0
  166. package/dist/auth/AuthRequest.mjs.map +1 -0
  167. package/dist/auth/AuthStrategy.d.mts +23 -0
  168. package/dist/auth/AuthStrategy.mjs +33 -0
  169. package/dist/auth/AuthStrategy.mjs.map +1 -0
  170. package/dist/auth/ConsumeDecision.d.mts +11 -0
  171. package/dist/auth/actions.d.mts +18 -0
  172. package/dist/auth/actions.mjs +70 -0
  173. package/dist/auth/actions.mjs.map +1 -0
  174. package/dist/auth/defaults.mjs +12 -0
  175. package/dist/auth/defaults.mjs.map +1 -0
  176. package/dist/auth/definition.d.mts +46 -0
  177. package/dist/auth/session.d.mts +27 -0
  178. package/dist/auth/session.mjs +56 -0
  179. package/dist/auth/session.mjs.map +1 -0
  180. package/dist/drizzle/D1BatchStatements.d.mts +11 -0
  181. package/dist/drizzle/D1BatchStatements.mjs +8 -0
  182. package/dist/drizzle/D1BatchStatements.mjs.map +1 -0
  183. package/dist/drizzle/PasswordPreparedPostconditions.mjs +12 -0
  184. package/dist/drizzle/PasswordPreparedPostconditions.mjs.map +1 -0
  185. package/dist/drizzle/SuppliedService.d.mts +10 -0
  186. package/dist/drizzle/d1-emails.d.mts +68 -0
  187. package/dist/drizzle/d1-emails.mjs +580 -0
  188. package/dist/drizzle/d1-emails.mjs.map +1 -0
  189. package/dist/drizzle/d1-generated-statement.mjs +79 -0
  190. package/dist/drizzle/d1-generated-statement.mjs.map +1 -0
  191. package/dist/drizzle/d1-identity.d.mts +33 -0
  192. package/dist/drizzle/d1-identity.mjs +120 -0
  193. package/dist/drizzle/d1-identity.mjs.map +1 -0
  194. package/dist/drizzle/d1-oauth.d.mts +316 -0
  195. package/dist/drizzle/d1-oauth.mjs +79 -0
  196. package/dist/drizzle/d1-oauth.mjs.map +1 -0
  197. package/dist/drizzle/d1-passkey.d.mts +52 -0
  198. package/dist/drizzle/d1-passkey.mjs +97 -0
  199. package/dist/drizzle/d1-passkey.mjs.map +1 -0
  200. package/dist/drizzle/d1-password-prepared.d.mts +27 -0
  201. package/dist/drizzle/d1-password-prepared.mjs +464 -0
  202. package/dist/drizzle/d1-password-prepared.mjs.map +1 -0
  203. package/dist/drizzle/d1-passwords.d.mts +96 -0
  204. package/dist/drizzle/d1-passwords.mjs +1008 -0
  205. package/dist/drizzle/d1-passwords.mjs.map +1 -0
  206. package/dist/drizzle/d1-phone.d.mts +29 -0
  207. package/dist/drizzle/d1-phone.mjs +33 -0
  208. package/dist/drizzle/d1-phone.mjs.map +1 -0
  209. package/dist/drizzle/d1-planning.d.mts +12 -0
  210. package/dist/drizzle/d1-planning.mjs +43 -0
  211. package/dist/drizzle/d1-planning.mjs.map +1 -0
  212. package/dist/drizzle/d1-proofs.d.mts +88 -0
  213. package/dist/drizzle/d1-proofs.mjs +833 -0
  214. package/dist/drizzle/d1-proofs.mjs.map +1 -0
  215. package/dist/drizzle/d1-sessions.d.mts +77 -0
  216. package/dist/drizzle/d1-sessions.mjs +970 -0
  217. package/dist/drizzle/d1-sessions.mjs.map +1 -0
  218. package/dist/drizzle/d1-totp.d.mts +27 -0
  219. package/dist/drizzle/d1-totp.mjs +28 -0
  220. package/dist/drizzle/d1-totp.mjs.map +1 -0
  221. package/dist/drizzle/email-model.d.mts +352 -0
  222. package/dist/drizzle/email-model.mjs +21 -0
  223. package/dist/drizzle/email-model.mjs.map +1 -0
  224. package/dist/drizzle/email-registration.d.mts +33 -0
  225. package/dist/drizzle/email-registration.mjs +238 -0
  226. package/dist/drizzle/email-registration.mjs.map +1 -0
  227. package/dist/drizzle/email-sql.d.mts +18 -0
  228. package/dist/drizzle/email-sql.mjs +473 -0
  229. package/dist/drizzle/email-sql.mjs.map +1 -0
  230. package/dist/drizzle/email-target.d.mts +28 -0
  231. package/dist/drizzle/email-target.mjs +75 -0
  232. package/dist/drizzle/email-target.mjs.map +1 -0
  233. package/dist/drizzle/model.d.mts +259 -0
  234. package/dist/drizzle/model.mjs +81 -0
  235. package/dist/drizzle/model.mjs.map +1 -0
  236. package/dist/drizzle/mysql-emails.d.mts +82 -0
  237. package/dist/drizzle/mysql-emails.mjs +38 -0
  238. package/dist/drizzle/mysql-emails.mjs.map +1 -0
  239. package/dist/drizzle/mysql-identity.d.mts +24 -0
  240. package/dist/drizzle/mysql-identity.mjs +95 -0
  241. package/dist/drizzle/mysql-identity.mjs.map +1 -0
  242. package/dist/drizzle/mysql-password-prepared.d.mts +32 -0
  243. package/dist/drizzle/mysql-password-prepared.mjs +16 -0
  244. package/dist/drizzle/mysql-password-prepared.mjs.map +1 -0
  245. package/dist/drizzle/mysql-passwords.d.mts +102 -0
  246. package/dist/drizzle/mysql-passwords.mjs +38 -0
  247. package/dist/drizzle/mysql-passwords.mjs.map +1 -0
  248. package/dist/drizzle/mysql-proofs.d.mts +83 -0
  249. package/dist/drizzle/mysql-proofs.mjs +23 -0
  250. package/dist/drizzle/mysql-proofs.mjs.map +1 -0
  251. package/dist/drizzle/mysql-sessions.d.mts +250 -0
  252. package/dist/drizzle/mysql-sessions.mjs +53 -0
  253. package/dist/drizzle/mysql-sessions.mjs.map +1 -0
  254. package/dist/drizzle/mysql.d.mts +73 -0
  255. package/dist/drizzle/mysql.mjs +221 -0
  256. package/dist/drizzle/mysql.mjs.map +1 -0
  257. package/dist/drizzle/oauth-accounts.mjs +361 -0
  258. package/dist/drizzle/oauth-accounts.mjs.map +1 -0
  259. package/dist/drizzle/oauth-connected-access.mjs +210 -0
  260. package/dist/drizzle/oauth-connected-access.mjs.map +1 -0
  261. package/dist/drizzle/oauth-connected-collection.mjs +202 -0
  262. package/dist/drizzle/oauth-connected-collection.mjs.map +1 -0
  263. package/dist/drizzle/oauth-connected-custody.mjs +146 -0
  264. package/dist/drizzle/oauth-connected-custody.mjs.map +1 -0
  265. package/dist/drizzle/oauth-connected-drivers.mjs +78 -0
  266. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -0
  267. package/dist/drizzle/oauth-connected-flow.mjs +248 -0
  268. package/dist/drizzle/oauth-connected-flow.mjs.map +1 -0
  269. package/dist/drizzle/oauth-connected-input.mjs +105 -0
  270. package/dist/drizzle/oauth-connected-input.mjs.map +1 -0
  271. package/dist/drizzle/oauth-connected-maintenance.mjs +215 -0
  272. package/dist/drizzle/oauth-connected-maintenance.mjs.map +1 -0
  273. package/dist/drizzle/oauth-connected-management.mjs +228 -0
  274. package/dist/drizzle/oauth-connected-management.mjs.map +1 -0
  275. package/dist/drizzle/oauth-connected-model.d.mts +278 -0
  276. package/dist/drizzle/oauth-connected-model.mjs +22 -0
  277. package/dist/drizzle/oauth-connected-model.mjs.map +1 -0
  278. package/dist/drizzle/oauth-connected-reference.d.mts +17 -0
  279. package/dist/drizzle/oauth-connected-reference.mjs +53 -0
  280. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -0
  281. package/dist/drizzle/oauth-connected-settlement.mjs +117 -0
  282. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -0
  283. package/dist/drizzle/oauth-connected-state.d.mts +16 -0
  284. package/dist/drizzle/oauth-connected-state.mjs +422 -0
  285. package/dist/drizzle/oauth-connected-state.mjs.map +1 -0
  286. package/dist/drizzle/oauth-connected-target.d.mts +114 -0
  287. package/dist/drizzle/oauth-connected-target.mjs +94 -0
  288. package/dist/drizzle/oauth-connected-target.mjs.map +1 -0
  289. package/dist/drizzle/oauth-drivers.mjs +53 -0
  290. package/dist/drizzle/oauth-drivers.mjs.map +1 -0
  291. package/dist/drizzle/oauth-flow.d.mts +7 -0
  292. package/dist/drizzle/oauth-flow.mjs +255 -0
  293. package/dist/drizzle/oauth-flow.mjs.map +1 -0
  294. package/dist/drizzle/oauth-input.mjs +130 -0
  295. package/dist/drizzle/oauth-input.mjs.map +1 -0
  296. package/dist/drizzle/oauth-model.d.mts +468 -0
  297. package/dist/drizzle/oauth-model.mjs +49 -0
  298. package/dist/drizzle/oauth-model.mjs.map +1 -0
  299. package/dist/drizzle/oauth-mysql.mjs +8 -0
  300. package/dist/drizzle/oauth-mysql.mjs.map +1 -0
  301. package/dist/drizzle/oauth-owner.d.mts +4 -0
  302. package/dist/drizzle/oauth-owner.mjs +10 -0
  303. package/dist/drizzle/oauth-owner.mjs.map +1 -0
  304. package/dist/drizzle/oauth-registration.d.mts +8 -0
  305. package/dist/drizzle/oauth-registration.mjs +375 -0
  306. package/dist/drizzle/oauth-registration.mjs.map +1 -0
  307. package/dist/drizzle/oauth-state.mjs +109 -0
  308. package/dist/drizzle/oauth-state.mjs.map +1 -0
  309. package/dist/drizzle/oauth-target.d.mts +125 -0
  310. package/dist/drizzle/oauth-target.mjs +252 -0
  311. package/dist/drizzle/oauth-target.mjs.map +1 -0
  312. package/dist/drizzle/passkey-admission.mjs +203 -0
  313. package/dist/drizzle/passkey-admission.mjs.map +1 -0
  314. package/dist/drizzle/passkey-credentials.mjs +239 -0
  315. package/dist/drizzle/passkey-credentials.mjs.map +1 -0
  316. package/dist/drizzle/passkey-drivers.mjs +34 -0
  317. package/dist/drizzle/passkey-drivers.mjs.map +1 -0
  318. package/dist/drizzle/passkey-enrollment.mjs +132 -0
  319. package/dist/drizzle/passkey-enrollment.mjs.map +1 -0
  320. package/dist/drizzle/passkey-flow.mjs +436 -0
  321. package/dist/drizzle/passkey-flow.mjs.map +1 -0
  322. package/dist/drizzle/passkey-management.mjs +225 -0
  323. package/dist/drizzle/passkey-management.mjs.map +1 -0
  324. package/dist/drizzle/passkey-model.d.mts +275 -0
  325. package/dist/drizzle/passkey-model.mjs +36 -0
  326. package/dist/drizzle/passkey-model.mjs.map +1 -0
  327. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +50 -0
  328. package/dist/drizzle/passkey-registration-ceremony-model.mjs +18 -0
  329. package/dist/drizzle/passkey-registration-ceremony-model.mjs.map +1 -0
  330. package/dist/drizzle/passkey-registration-ceremony.mjs +124 -0
  331. package/dist/drizzle/passkey-registration-ceremony.mjs.map +1 -0
  332. package/dist/drizzle/passkey-registration-custody.mjs +51 -0
  333. package/dist/drizzle/passkey-registration-custody.mjs.map +1 -0
  334. package/dist/drizzle/passkey-registration-write.mjs +205 -0
  335. package/dist/drizzle/passkey-registration-write.mjs.map +1 -0
  336. package/dist/drizzle/passkey-state.d.mts +5 -0
  337. package/dist/drizzle/passkey-state.mjs +207 -0
  338. package/dist/drizzle/passkey-state.mjs.map +1 -0
  339. package/dist/drizzle/passkey-target.d.mts +16 -0
  340. package/dist/drizzle/passkey-target.mjs +174 -0
  341. package/dist/drizzle/passkey-target.mjs.map +1 -0
  342. package/dist/drizzle/passkey-write-drivers.mjs +33 -0
  343. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -0
  344. package/dist/drizzle/passkey-write-model.d.mts +192 -0
  345. package/dist/drizzle/passkey-write-model.mjs +13 -0
  346. package/dist/drizzle/passkey-write-model.mjs.map +1 -0
  347. package/dist/drizzle/passkey-write-state.mjs +326 -0
  348. package/dist/drizzle/passkey-write-state.mjs.map +1 -0
  349. package/dist/drizzle/passkey-write-target.d.mts +14 -0
  350. package/dist/drizzle/passkey-write-target.mjs +185 -0
  351. package/dist/drizzle/passkey-write-target.mjs.map +1 -0
  352. package/dist/drizzle/password-model.d.mts +330 -0
  353. package/dist/drizzle/password-model.mjs +22 -0
  354. package/dist/drizzle/password-model.mjs.map +1 -0
  355. package/dist/drizzle/password-prepared-model.d.mts +93 -0
  356. package/dist/drizzle/password-prepared-model.mjs +11 -0
  357. package/dist/drizzle/password-prepared-model.mjs.map +1 -0
  358. package/dist/drizzle/password-prepared-sql.mjs +394 -0
  359. package/dist/drizzle/password-prepared-sql.mjs.map +1 -0
  360. package/dist/drizzle/password-prepared-state.mjs +107 -0
  361. package/dist/drizzle/password-prepared-state.mjs.map +1 -0
  362. package/dist/drizzle/password-prepared-target.d.mts +12 -0
  363. package/dist/drizzle/password-prepared-target.mjs +57 -0
  364. package/dist/drizzle/password-prepared-target.mjs.map +1 -0
  365. package/dist/drizzle/password-registration.d.mts +23 -0
  366. package/dist/drizzle/password-registration.mjs +136 -0
  367. package/dist/drizzle/password-registration.mjs.map +1 -0
  368. package/dist/drizzle/password-sql.d.mts +20 -0
  369. package/dist/drizzle/password-sql.mjs +702 -0
  370. package/dist/drizzle/password-sql.mjs.map +1 -0
  371. package/dist/drizzle/password-target.d.mts +25 -0
  372. package/dist/drizzle/password-target.mjs +63 -0
  373. package/dist/drizzle/password-target.mjs.map +1 -0
  374. package/dist/drizzle/pg-emails.d.mts +83 -0
  375. package/dist/drizzle/pg-emails.mjs +38 -0
  376. package/dist/drizzle/pg-emails.mjs.map +1 -0
  377. package/dist/drizzle/pg-password-prepared.d.mts +33 -0
  378. package/dist/drizzle/pg-password-prepared.mjs +16 -0
  379. package/dist/drizzle/pg-password-prepared.mjs.map +1 -0
  380. package/dist/drizzle/pg-passwords.d.mts +103 -0
  381. package/dist/drizzle/pg-passwords.mjs +38 -0
  382. package/dist/drizzle/pg-passwords.mjs.map +1 -0
  383. package/dist/drizzle/pg-proofs.d.mts +84 -0
  384. package/dist/drizzle/pg-proofs.mjs +22 -0
  385. package/dist/drizzle/pg-proofs.mjs.map +1 -0
  386. package/dist/drizzle/pg-sessions.d.mts +251 -0
  387. package/dist/drizzle/pg-sessions.mjs +53 -0
  388. package/dist/drizzle/pg-sessions.mjs.map +1 -0
  389. package/dist/drizzle/pg.d.mts +88 -0
  390. package/dist/drizzle/pg.mjs +294 -0
  391. package/dist/drizzle/pg.mjs.map +1 -0
  392. package/dist/drizzle/phone-model.d.mts +117 -0
  393. package/dist/drizzle/phone-model.mjs +39 -0
  394. package/dist/drizzle/phone-model.mjs.map +1 -0
  395. package/dist/drizzle/phone-state.mjs +426 -0
  396. package/dist/drizzle/phone-state.mjs.map +1 -0
  397. package/dist/drizzle/phone-target.d.mts +19 -0
  398. package/dist/drizzle/phone-target.mjs +171 -0
  399. package/dist/drizzle/phone-target.mjs.map +1 -0
  400. package/dist/drizzle/proof-model.d.mts +287 -0
  401. package/dist/drizzle/proof-model.mjs +17 -0
  402. package/dist/drizzle/proof-model.mjs.map +1 -0
  403. package/dist/drizzle/proof-sql.d.mts +16 -0
  404. package/dist/drizzle/proof-sql.mjs +618 -0
  405. package/dist/drizzle/proof-sql.mjs.map +1 -0
  406. package/dist/drizzle/proof-target.d.mts +17 -0
  407. package/dist/drizzle/proof-target.mjs +38 -0
  408. package/dist/drizzle/proof-target.mjs.map +1 -0
  409. package/dist/drizzle/session-model.d.mts +201 -0
  410. package/dist/drizzle/session-model.mjs +19 -0
  411. package/dist/drizzle/session-model.mjs.map +1 -0
  412. package/dist/drizzle/session-sql.mjs +732 -0
  413. package/dist/drizzle/session-sql.mjs.map +1 -0
  414. package/dist/drizzle/session-target.d.mts +37 -0
  415. package/dist/drizzle/session-target.mjs +47 -0
  416. package/dist/drizzle/session-target.mjs.map +1 -0
  417. package/dist/drizzle/sqlite-emails.mjs +45 -0
  418. package/dist/drizzle/sqlite-emails.mjs.map +1 -0
  419. package/dist/drizzle/sqlite-identity.mjs +92 -0
  420. package/dist/drizzle/sqlite-identity.mjs.map +1 -0
  421. package/dist/drizzle/sqlite-password-prepared.mjs +21 -0
  422. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -0
  423. package/dist/drizzle/sqlite-passwords.mjs +49 -0
  424. package/dist/drizzle/sqlite-passwords.mjs.map +1 -0
  425. package/dist/drizzle/sqlite-proofs.mjs +29 -0
  426. package/dist/drizzle/sqlite-proofs.mjs.map +1 -0
  427. package/dist/drizzle/sqlite-sessions.mjs +74 -0
  428. package/dist/drizzle/sqlite-sessions.mjs.map +1 -0
  429. package/dist/drizzle/sqlite.d.mts +81 -0
  430. package/dist/drizzle/sqlite.mjs +220 -0
  431. package/dist/drizzle/sqlite.mjs.map +1 -0
  432. package/dist/drizzle/standalone-guard.mjs +19 -0
  433. package/dist/drizzle/standalone-guard.mjs.map +1 -0
  434. package/dist/drizzle/step-up-model.d.mts +65 -0
  435. package/dist/drizzle/step-up-model.mjs +9 -0
  436. package/dist/drizzle/step-up-model.mjs.map +1 -0
  437. package/dist/drizzle/step-up-state.mjs +34 -0
  438. package/dist/drizzle/step-up-state.mjs.map +1 -0
  439. package/dist/drizzle/totp-model.d.mts +85 -0
  440. package/dist/drizzle/totp-model.mjs +13 -0
  441. package/dist/drizzle/totp-model.mjs.map +1 -0
  442. package/dist/drizzle/totp-state.d.mts +39 -0
  443. package/dist/drizzle/totp-state.mjs +288 -0
  444. package/dist/drizzle/totp-state.mjs.map +1 -0
  445. package/dist/drizzle/totp-target.d.mts +16 -0
  446. package/dist/drizzle/totp-target.mjs +83 -0
  447. package/dist/drizzle/totp-target.mjs.map +1 -0
  448. package/dist/drizzle/transaction-execution.d.mts +20 -0
  449. package/dist/drizzle/transaction-execution.mjs +111 -0
  450. package/dist/drizzle/transaction-execution.mjs.map +1 -0
  451. package/dist/drizzle/transaction-mysql.mjs +46 -0
  452. package/dist/drizzle/transaction-mysql.mjs.map +1 -0
  453. package/dist/drizzle/transaction-owner.d.mts +6 -0
  454. package/dist/drizzle/transaction-owner.mjs +252 -0
  455. package/dist/drizzle/transaction-owner.mjs.map +1 -0
  456. package/dist/email/EmailActionEvidence.d.mts +33 -0
  457. package/dist/email/EmailActionEvidence.mjs +15 -0
  458. package/dist/email/EmailActionEvidence.mjs.map +1 -0
  459. package/dist/email/EmailAddressPersistence.d.mts +63 -0
  460. package/dist/email/EmailAddressPersistence.mjs +19 -0
  461. package/dist/email/EmailAddressPersistence.mjs.map +1 -0
  462. package/dist/email/EmailIdentifierNotifier.d.mts +30 -0
  463. package/dist/email/EmailIdentifierNotifier.mjs +31 -0
  464. package/dist/email/EmailIdentifierNotifier.mjs.map +1 -0
  465. package/dist/email/EmailReturnTargets.d.mts +19 -0
  466. package/dist/email/EmailReturnTargets.mjs +29 -0
  467. package/dist/email/EmailReturnTargets.mjs.map +1 -0
  468. package/dist/email/EmailSignInTargets.d.mts +20 -0
  469. package/dist/email/EmailSignInTargets.mjs +12 -0
  470. package/dist/email/EmailSignInTargets.mjs.map +1 -0
  471. package/dist/email/addresses.d.mts +33 -0
  472. package/dist/email/addresses.mjs +404 -0
  473. package/dist/email/addresses.mjs.map +1 -0
  474. package/dist/email/definition.d.mts +10153 -0
  475. package/dist/email/definition.mjs +111 -0
  476. package/dist/email/definition.mjs.map +1 -0
  477. package/dist/email/errors.d.mts +15 -0
  478. package/dist/email/errors.mjs +11 -0
  479. package/dist/email/errors.mjs.map +1 -0
  480. package/dist/email/magicLink.d.mts +33 -0
  481. package/dist/email/magicLink.mjs +58 -0
  482. package/dist/email/magicLink.mjs.map +1 -0
  483. package/dist/email/models.d.mts +56 -0
  484. package/dist/email/models.mjs +31 -0
  485. package/dist/email/models.mjs.map +1 -0
  486. package/dist/email/module.d.mts +22296 -0
  487. package/dist/email/module.mjs +415 -0
  488. package/dist/email/module.mjs.map +1 -0
  489. package/dist/email/registration.d.mts +28 -0
  490. package/dist/email/registration.mjs +243 -0
  491. package/dist/email/registration.mjs.map +1 -0
  492. package/dist/email/snapshot.mjs +37 -0
  493. package/dist/email/snapshot.mjs.map +1 -0
  494. package/dist/hooks/LifecycleHooks.d.mts +34 -0
  495. package/dist/hooks/LifecycleHooks.mjs +74 -0
  496. package/dist/hooks/LifecycleHooks.mjs.map +1 -0
  497. package/dist/hooks/commit.d.mts +66 -0
  498. package/dist/hooks/commit.mjs +136 -0
  499. package/dist/hooks/commit.mjs.map +1 -0
  500. package/dist/hooks/models.d.mts +51 -0
  501. package/dist/hooks/models.mjs +87 -0
  502. package/dist/hooks/models.mjs.map +1 -0
  503. package/dist/hooks/plugins.d.mts +36 -0
  504. package/dist/hooks/plugins.mjs +60 -0
  505. package/dist/hooks/plugins.mjs.map +1 -0
  506. package/dist/hooks/transactions.d.mts +31 -0
  507. package/dist/hooks/transactions.mjs +38 -0
  508. package/dist/hooks/transactions.mjs.map +1 -0
  509. package/dist/http/auth-api.d.mts +9 -0
  510. package/dist/http/auth-api.mjs +13 -0
  511. package/dist/http/auth-api.mjs.map +1 -0
  512. package/dist/http/auth-contract.d.mts +84 -0
  513. package/dist/http/auth-contract.mjs +75 -0
  514. package/dist/http/auth-contract.mjs.map +1 -0
  515. package/dist/http/auth-http.d.mts +216 -0
  516. package/dist/http/auth-http.mjs +184 -0
  517. package/dist/http/auth-http.mjs.map +1 -0
  518. package/dist/http/endpoints/get-session.d.mts +8 -0
  519. package/dist/http/endpoints/get-session.mjs +12 -0
  520. package/dist/http/endpoints/get-session.mjs.map +1 -0
  521. package/dist/http/endpoints/password-sign-in.d.mts +8 -0
  522. package/dist/http/endpoints/password-sign-in.mjs +18 -0
  523. package/dist/http/endpoints/password-sign-in.mjs.map +1 -0
  524. package/dist/http/endpoints/request-email-otp.d.mts +8 -0
  525. package/dist/http/endpoints/request-email-otp.mjs +17 -0
  526. package/dist/http/endpoints/request-email-otp.mjs.map +1 -0
  527. package/dist/http/endpoints/set-password.d.mts +9 -0
  528. package/dist/http/endpoints/set-password.mjs +19 -0
  529. package/dist/http/endpoints/set-password.mjs.map +1 -0
  530. package/dist/http/endpoints/sign-out.d.mts +6 -0
  531. package/dist/http/endpoints/sign-out.mjs +7 -0
  532. package/dist/http/endpoints/sign-out.mjs.map +1 -0
  533. package/dist/http/endpoints/verify-email-otp.d.mts +9 -0
  534. package/dist/http/endpoints/verify-email-otp.mjs +18 -0
  535. package/dist/http/endpoints/verify-email-otp.mjs.map +1 -0
  536. package/dist/http/models.d.mts +49 -0
  537. package/dist/http/models.mjs +35 -0
  538. package/dist/http/models.mjs.map +1 -0
  539. package/dist/http/security.d.mts +91 -0
  540. package/dist/http/security.mjs +77 -0
  541. package/dist/http/security.mjs.map +1 -0
  542. package/dist/http/session-contract.d.mts +303 -0
  543. package/dist/http/session-contract.mjs +38 -0
  544. package/dist/http/session-contract.mjs.map +1 -0
  545. package/dist/http-operation/OperationHttpInvocation.d.mts +16 -0
  546. package/dist/http-operation/OperationHttpInvocation.mjs +11 -0
  547. package/dist/http-operation/OperationHttpInvocation.mjs.map +1 -0
  548. package/dist/http-operation/OperationHttpServerConfig.d.mts +18 -0
  549. package/dist/http-operation/OperationHttpServerConfig.mjs +72 -0
  550. package/dist/http-operation/OperationHttpServerConfig.mjs.map +1 -0
  551. package/dist/http-operation/auth-client.d.mts +75 -0
  552. package/dist/http-operation/auth-client.mjs +116 -0
  553. package/dist/http-operation/auth-client.mjs.map +1 -0
  554. package/dist/http-operation/client.d.mts +50 -0
  555. package/dist/http-operation/client.mjs +188 -0
  556. package/dist/http-operation/client.mjs.map +1 -0
  557. package/dist/http-operation/configuration-schema.mjs +19 -0
  558. package/dist/http-operation/configuration-schema.mjs.map +1 -0
  559. package/dist/http-operation/contract.d.mts +40 -0
  560. package/dist/http-operation/contract.mjs +37 -0
  561. package/dist/http-operation/contract.mjs.map +1 -0
  562. package/dist/http-operation/errors.d.mts +13 -0
  563. package/dist/http-operation/errors.mjs +31 -0
  564. package/dist/http-operation/errors.mjs.map +1 -0
  565. package/dist/http-operation/models.d.mts +32 -0
  566. package/dist/http-operation/models.mjs +14 -0
  567. package/dist/http-operation/models.mjs.map +1 -0
  568. package/dist/http-operation/private.mjs +35 -0
  569. package/dist/http-operation/private.mjs.map +1 -0
  570. package/dist/http-operation/security.mjs +58 -0
  571. package/dist/http-operation/security.mjs.map +1 -0
  572. package/dist/http-operation/server.d.mts +33 -0
  573. package/dist/http-operation/server.mjs +268 -0
  574. package/dist/http-operation/server.mjs.map +1 -0
  575. package/dist/identity/ExternalIdentityMutation.d.mts +15 -0
  576. package/dist/identity/ExternalIdentityMutation.mjs +11 -0
  577. package/dist/identity/ExternalIdentityMutation.mjs.map +1 -0
  578. package/dist/identity/IdentityMutation.d.mts +22 -0
  579. package/dist/identity/IdentityMutation.mjs +17 -0
  580. package/dist/identity/IdentityMutation.mjs.map +1 -0
  581. package/dist/identity/IdentityRepository.d.mts +20 -0
  582. package/dist/identity/IdentityRepository.mjs +11 -0
  583. package/dist/identity/IdentityRepository.mjs.map +1 -0
  584. package/dist/identity/SubjectLifecycle.d.mts +58 -0
  585. package/dist/identity/SubjectLifecycle.mjs +43 -0
  586. package/dist/identity/SubjectLifecycle.mjs.map +1 -0
  587. package/dist/identity/SubjectProvisioner.d.mts +37 -0
  588. package/dist/identity/SubjectProvisioner.mjs +20 -0
  589. package/dist/identity/SubjectProvisioner.mjs.map +1 -0
  590. package/dist/identity/codecs.d.mts +34 -0
  591. package/dist/identity/codecs.mjs +40 -0
  592. package/dist/identity/codecs.mjs.map +1 -0
  593. package/dist/identity/models.d.mts +62 -0
  594. package/dist/identity/models.mjs +51 -0
  595. package/dist/identity/models.mjs.map +1 -0
  596. package/dist/identity/operations.d.mts +118 -0
  597. package/dist/identity/operations.mjs +124 -0
  598. package/dist/identity/operations.mjs.map +1 -0
  599. package/dist/index.d.mts +23 -0
  600. package/dist/index.mjs +23 -0
  601. package/dist/internal/AuthStoreDecisions.d.mts +22 -0
  602. package/dist/internal/AuthStoreDecisions.mjs +8 -0
  603. package/dist/internal/AuthStoreDecisions.mjs.map +1 -0
  604. package/dist/internal/CurrentSession.d.mts +9 -0
  605. package/dist/internal/CurrentSession.mjs +8 -0
  606. package/dist/internal/CurrentSession.mjs.map +1 -0
  607. package/dist/internal/diagnostics.mjs +23 -0
  608. package/dist/internal/diagnostics.mjs.map +1 -0
  609. package/dist/oauth/GithubOAuthProvider.d.mts +43 -0
  610. package/dist/oauth/GithubOAuthProvider.mjs +66 -0
  611. package/dist/oauth/GithubOAuthProvider.mjs.map +1 -0
  612. package/dist/oauth/OAuth.d.mts +73 -0
  613. package/dist/oauth/OAuth.mjs +180 -0
  614. package/dist/oauth/OAuth.mjs.map +1 -0
  615. package/dist/oauth/OAuthAccountsPersistence.d.mts +109 -0
  616. package/dist/oauth/OAuthAccountsPersistence.mjs +12 -0
  617. package/dist/oauth/OAuthAccountsPersistence.mjs.map +1 -0
  618. package/dist/oauth/OAuthActionEvidence.d.mts +28 -0
  619. package/dist/oauth/OAuthActionEvidence.mjs +15 -0
  620. package/dist/oauth/OAuthActionEvidence.mjs.map +1 -0
  621. package/dist/oauth/OAuthConnectedActionEvidence.d.mts +22 -0
  622. package/dist/oauth/OAuthConnectedActionEvidence.mjs +9 -0
  623. package/dist/oauth/OAuthConnectedActionEvidence.mjs.map +1 -0
  624. package/dist/oauth/OAuthConnectedPersistence.d.mts +129 -0
  625. package/dist/oauth/OAuthConnectedPersistence.mjs +12 -0
  626. package/dist/oauth/OAuthConnectedPersistence.mjs.map +1 -0
  627. package/dist/oauth/OAuthConnectedProtocol.d.mts +41 -0
  628. package/dist/oauth/OAuthConnectedProtocol.mjs +13 -0
  629. package/dist/oauth/OAuthConnectedProtocol.mjs.map +1 -0
  630. package/dist/oauth/OAuthConnectedRevocations.d.mts +167 -0
  631. package/dist/oauth/OAuthConnectedRevocations.mjs +21 -0
  632. package/dist/oauth/OAuthConnectedRevocations.mjs.map +1 -0
  633. package/dist/oauth/OAuthConnectedTokenProtector.d.mts +24 -0
  634. package/dist/oauth/OAuthConnectedTokenProtector.mjs +153 -0
  635. package/dist/oauth/OAuthConnectedTokenProtector.mjs.map +1 -0
  636. package/dist/oauth/OAuthConnectedTransactionProtector.d.mts +23 -0
  637. package/dist/oauth/OAuthConnectedTransactionProtector.mjs +37 -0
  638. package/dist/oauth/OAuthConnectedTransactionProtector.mjs.map +1 -0
  639. package/dist/oauth/OAuthConnectedUseAuthority.d.mts +22 -0
  640. package/dist/oauth/OAuthConnectedUseAuthority.mjs +10 -0
  641. package/dist/oauth/OAuthConnectedUseAuthority.mjs.map +1 -0
  642. package/dist/oauth/OAuthConnectionStore.d.mts +33 -0
  643. package/dist/oauth/OAuthConnectionStore.mjs +38 -0
  644. package/dist/oauth/OAuthConnectionStore.mjs.map +1 -0
  645. package/dist/oauth/OAuthLinkTransactionProtector.d.mts +25 -0
  646. package/dist/oauth/OAuthLinkTransactionProtector.mjs +39 -0
  647. package/dist/oauth/OAuthLinkTransactionProtector.mjs.map +1 -0
  648. package/dist/oauth/OAuthProtocol.d.mts +33 -0
  649. package/dist/oauth/OAuthProtocol.mjs +16 -0
  650. package/dist/oauth/OAuthProtocol.mjs.map +1 -0
  651. package/dist/oauth/OAuthProvider.d.mts +70 -0
  652. package/dist/oauth/OAuthProvider.mjs +39 -0
  653. package/dist/oauth/OAuthProvider.mjs.map +1 -0
  654. package/dist/oauth/OAuthProviders.d.mts +27 -0
  655. package/dist/oauth/OAuthProviders.mjs +33 -0
  656. package/dist/oauth/OAuthProviders.mjs.map +1 -0
  657. package/dist/oauth/OAuthRegistrationIntents.d.mts +87 -0
  658. package/dist/oauth/OAuthRegistrationIntents.mjs +19 -0
  659. package/dist/oauth/OAuthRegistrationIntents.mjs.map +1 -0
  660. package/dist/oauth/OAuthReturnTargets.d.mts +15 -0
  661. package/dist/oauth/OAuthReturnTargets.mjs +24 -0
  662. package/dist/oauth/OAuthReturnTargets.mjs.map +1 -0
  663. package/dist/oauth/OAuthSignInPersistence.d.mts +68 -0
  664. package/dist/oauth/OAuthSignInPersistence.mjs +12 -0
  665. package/dist/oauth/OAuthSignInPersistence.mjs.map +1 -0
  666. package/dist/oauth/OAuthStateDecisions.d.mts +14 -0
  667. package/dist/oauth/OAuthStateDecisions.mjs +8 -0
  668. package/dist/oauth/OAuthStateDecisions.mjs.map +1 -0
  669. package/dist/oauth/OAuthStateStore.d.mts +35 -0
  670. package/dist/oauth/OAuthStateStore.mjs +64 -0
  671. package/dist/oauth/OAuthStateStore.mjs.map +1 -0
  672. package/dist/oauth/OAuthTransactionProtector.d.mts +26 -0
  673. package/dist/oauth/OAuthTransactionProtector.mjs +78 -0
  674. package/dist/oauth/OAuthTransactionProtector.mjs.map +1 -0
  675. package/dist/oauth/accounts.d.mts +29 -0
  676. package/dist/oauth/accounts.mjs +515 -0
  677. package/dist/oauth/accounts.mjs.map +1 -0
  678. package/dist/oauth/accountsModels.d.mts +463 -0
  679. package/dist/oauth/accountsModels.mjs +155 -0
  680. package/dist/oauth/accountsModels.mjs.map +1 -0
  681. package/dist/oauth/connected.d.mts +442 -0
  682. package/dist/oauth/connected.mjs +526 -0
  683. package/dist/oauth/connected.mjs.map +1 -0
  684. package/dist/oauth/connectedAccess.d.mts +20 -0
  685. package/dist/oauth/connectedAccess.mjs +279 -0
  686. package/dist/oauth/connectedAccess.mjs.map +1 -0
  687. package/dist/oauth/connectedMaintenance.d.mts +19 -0
  688. package/dist/oauth/connectedMaintenance.mjs +133 -0
  689. package/dist/oauth/connectedMaintenance.mjs.map +1 -0
  690. package/dist/oauth/connectedModels.d.mts +2023 -0
  691. package/dist/oauth/connectedModels.mjs +375 -0
  692. package/dist/oauth/connectedModels.mjs.map +1 -0
  693. package/dist/oauth/definition.d.mts +4396 -0
  694. package/dist/oauth/definition.mjs +120 -0
  695. package/dist/oauth/definition.mjs.map +1 -0
  696. package/dist/oauth/errors.d.mts +49 -0
  697. package/dist/oauth/errors.mjs +42 -0
  698. package/dist/oauth/errors.mjs.map +1 -0
  699. package/dist/oauth/github/identity.d.mts +8 -0
  700. package/dist/oauth/github/identity.mjs +24 -0
  701. package/dist/oauth/github/identity.mjs.map +1 -0
  702. package/dist/oauth/github/models.d.mts +34 -0
  703. package/dist/oauth/github/protocol.d.mts +54 -0
  704. package/dist/oauth/github/protocol.mjs +204 -0
  705. package/dist/oauth/github/protocol.mjs.map +1 -0
  706. package/dist/oauth/openid-client/ProviderRevocation.d.mts +4 -0
  707. package/dist/oauth/openid-client/ProviderRevocation.mjs +11 -0
  708. package/dist/oauth/openid-client/ProviderRevocation.mjs.map +1 -0
  709. package/dist/oauth/openid-client/compatibility.d.mts +1 -0
  710. package/dist/oauth/openid-client/compatibility.mjs +6 -0
  711. package/dist/oauth/openid-client/compatibility.mjs.map +1 -0
  712. package/dist/oauth/openid-client/configuration.mjs +305 -0
  713. package/dist/oauth/openid-client/configuration.mjs.map +1 -0
  714. package/dist/oauth/openid-client/connected/configuration.mjs +338 -0
  715. package/dist/oauth/openid-client/connected/configuration.mjs.map +1 -0
  716. package/dist/oauth/openid-client/connected/models.d.mts +42 -0
  717. package/dist/oauth/openid-client/connected/protocol.d.mts +16 -0
  718. package/dist/oauth/openid-client/connected/protocol.mjs +402 -0
  719. package/dist/oauth/openid-client/connected/protocol.mjs.map +1 -0
  720. package/dist/oauth/openid-client/models.d.mts +67 -0
  721. package/dist/oauth/openid-client/models.mjs +16 -0
  722. package/dist/oauth/openid-client/models.mjs.map +1 -0
  723. package/dist/oauth/openid-client/protocol.d.mts +27 -0
  724. package/dist/oauth/openid-client/protocol.mjs +218 -0
  725. package/dist/oauth/openid-client/protocol.mjs.map +1 -0
  726. package/dist/oauth/openid-client/transport.mjs +59 -0
  727. package/dist/oauth/openid-client/transport.mjs.map +1 -0
  728. package/dist/oauth/policy.d.mts +18 -0
  729. package/dist/oauth/policy.mjs +16 -0
  730. package/dist/oauth/policy.mjs.map +1 -0
  731. package/dist/oauth/registration.d.mts +24 -0
  732. package/dist/oauth/registration.mjs +177 -0
  733. package/dist/oauth/registration.mjs.map +1 -0
  734. package/dist/oauth/registrationModels.d.mts +152 -0
  735. package/dist/oauth/registrationModels.mjs +93 -0
  736. package/dist/oauth/registrationModels.mjs.map +1 -0
  737. package/dist/oauth/registrationSecrets.mjs +70 -0
  738. package/dist/oauth/registrationSecrets.mjs.map +1 -0
  739. package/dist/oauth/schema.d.mts +86 -0
  740. package/dist/oauth/schema.mjs +81 -0
  741. package/dist/oauth/schema.mjs.map +1 -0
  742. package/dist/oauth/signInErrors.d.mts +17 -0
  743. package/dist/oauth/signInErrors.mjs +16 -0
  744. package/dist/oauth/signInErrors.mjs.map +1 -0
  745. package/dist/oauth/signInModels.d.mts +343 -0
  746. package/dist/oauth/signInModels.mjs +181 -0
  747. package/dist/oauth/signInModels.mjs.map +1 -0
  748. package/dist/oauth/signInModule.d.mts +1546 -0
  749. package/dist/oauth/signInModule.mjs +430 -0
  750. package/dist/oauth/signInModule.mjs.map +1 -0
  751. package/dist/oauth/signInSnapshot.mjs +29 -0
  752. package/dist/oauth/signInSnapshot.mjs.map +1 -0
  753. package/dist/oauth/transactionEncryption.d.mts +14 -0
  754. package/dist/oauth/transactionEncryption.mjs +129 -0
  755. package/dist/oauth/transactionEncryption.mjs.map +1 -0
  756. package/dist/operations/RequestBindingConfig.d.mts +11 -0
  757. package/dist/operations/RequestBindingConfig.mjs +10 -0
  758. package/dist/operations/RequestBindingConfig.mjs.map +1 -0
  759. package/dist/operations/actions.d.mts +947 -0
  760. package/dist/operations/actions.mjs +148 -0
  761. package/dist/operations/actions.mjs.map +1 -0
  762. package/dist/operations/context.d.mts +63 -0
  763. package/dist/operations/context.mjs +55 -0
  764. package/dist/operations/context.mjs.map +1 -0
  765. package/dist/operations/credentials.d.mts +39 -0
  766. package/dist/operations/credentials.mjs +60 -0
  767. package/dist/operations/credentials.mjs.map +1 -0
  768. package/dist/operations/errors.d.mts +24 -0
  769. package/dist/operations/errors.mjs +31 -0
  770. package/dist/operations/errors.mjs.map +1 -0
  771. package/dist/operations/operation.d.mts +124 -0
  772. package/dist/operations/operation.mjs +220 -0
  773. package/dist/operations/operation.mjs.map +1 -0
  774. package/dist/operations/requestBinding.d.mts +46 -0
  775. package/dist/operations/requestBinding.mjs +130 -0
  776. package/dist/operations/requestBinding.mjs.map +1 -0
  777. package/dist/operations/requestBindingModels.d.mts +13 -0
  778. package/dist/operations/requestBindingModels.mjs +12 -0
  779. package/dist/operations/requestBindingModels.mjs.map +1 -0
  780. package/dist/operations/reveals.d.mts +28 -0
  781. package/dist/operations/reveals.mjs +88 -0
  782. package/dist/operations/reveals.mjs.map +1 -0
  783. package/dist/passkey/PasskeyActionEvidence.d.mts +22 -0
  784. package/dist/passkey/PasskeyActionEvidence.mjs +9 -0
  785. package/dist/passkey/PasskeyActionEvidence.mjs.map +1 -0
  786. package/dist/passkey/PasskeyCredentials.d.mts +16 -0
  787. package/dist/passkey/PasskeyCredentials.mjs +9 -0
  788. package/dist/passkey/PasskeyCredentials.mjs.map +1 -0
  789. package/dist/passkey/PasskeyEnrollmentContext.d.mts +22 -0
  790. package/dist/passkey/PasskeyEnrollmentContext.mjs +9 -0
  791. package/dist/passkey/PasskeyEnrollmentContext.mjs.map +1 -0
  792. package/dist/passkey/PasskeyManagementPersistence.d.mts +106 -0
  793. package/dist/passkey/PasskeyManagementPersistence.mjs +9 -0
  794. package/dist/passkey/PasskeyManagementPersistence.mjs.map +1 -0
  795. package/dist/passkey/PasskeyPersistence.d.mts +63 -0
  796. package/dist/passkey/PasskeyPersistence.mjs +10 -0
  797. package/dist/passkey/PasskeyPersistence.mjs.map +1 -0
  798. package/dist/passkey/PasskeyProtocol.d.mts +38 -0
  799. package/dist/passkey/PasskeyProtocol.mjs +11 -0
  800. package/dist/passkey/PasskeyProtocol.mjs.map +1 -0
  801. package/dist/passkey/actions.d.mts +50 -0
  802. package/dist/passkey/actions.mjs +376 -0
  803. package/dist/passkey/actions.mjs.map +1 -0
  804. package/dist/passkey/browser/PasskeyBrowser.d.mts +18 -0
  805. package/dist/passkey/browser/PasskeyBrowser.mjs +9 -0
  806. package/dist/passkey/browser/PasskeyBrowser.mjs.map +1 -0
  807. package/dist/passkey/browser/models.d.mts +38 -0
  808. package/dist/passkey/browser/models.mjs +41 -0
  809. package/dist/passkey/browser/models.mjs.map +1 -0
  810. package/dist/passkey/browser/simplewebauthn.d.mts +17 -0
  811. package/dist/passkey/browser/simplewebauthn.mjs +411 -0
  812. package/dist/passkey/browser/simplewebauthn.mjs.map +1 -0
  813. package/dist/passkey/definition.d.mts +5626 -0
  814. package/dist/passkey/definition.mjs +114 -0
  815. package/dist/passkey/definition.mjs.map +1 -0
  816. package/dist/passkey/errors.d.mts +20 -0
  817. package/dist/passkey/errors.mjs +20 -0
  818. package/dist/passkey/errors.mjs.map +1 -0
  819. package/dist/passkey/management.mjs +276 -0
  820. package/dist/passkey/management.mjs.map +1 -0
  821. package/dist/passkey/models.d.mts +1245 -0
  822. package/dist/passkey/models.mjs +301 -0
  823. package/dist/passkey/models.mjs.map +1 -0
  824. package/dist/passkey/module.d.mts +2132 -0
  825. package/dist/passkey/module.mjs +174 -0
  826. package/dist/passkey/module.mjs.map +1 -0
  827. package/dist/passkey/pending.mjs +99 -0
  828. package/dist/passkey/pending.mjs.map +1 -0
  829. package/dist/passkey/policy.d.mts +48 -0
  830. package/dist/passkey/policy.mjs +77 -0
  831. package/dist/passkey/policy.mjs.map +1 -0
  832. package/dist/passkey/registration.mjs +107 -0
  833. package/dist/passkey/registration.mjs.map +1 -0
  834. package/dist/passkey/simplewebauthn/configuration.mjs +45 -0
  835. package/dist/passkey/simplewebauthn/configuration.mjs.map +1 -0
  836. package/dist/passkey/simplewebauthn/models.d.mts +21 -0
  837. package/dist/passkey/simplewebauthn/models.mjs +8 -0
  838. package/dist/passkey/simplewebauthn/models.mjs.map +1 -0
  839. package/dist/passkey/simplewebauthn/protocol.d.mts +62 -0
  840. package/dist/passkey/simplewebauthn/protocol.mjs +402 -0
  841. package/dist/passkey/simplewebauthn/protocol.mjs.map +1 -0
  842. package/dist/passkey/snapshot.mjs +31 -0
  843. package/dist/passkey/snapshot.mjs.map +1 -0
  844. package/dist/passkey/stepUp.mjs +101 -0
  845. package/dist/passkey/stepUp.mjs.map +1 -0
  846. package/dist/password/CompromisedPasswords.d.mts +26 -0
  847. package/dist/password/CompromisedPasswords.mjs +23 -0
  848. package/dist/password/CompromisedPasswords.mjs.map +1 -0
  849. package/dist/password/NewPasswordCheck.d.mts +21 -0
  850. package/dist/password/NewPasswordCheck.mjs +39 -0
  851. package/dist/password/NewPasswordCheck.mjs.map +1 -0
  852. package/dist/password/PasswordHashing.d.mts +24 -0
  853. package/dist/password/PasswordHashing.mjs +96 -0
  854. package/dist/password/PasswordHashing.mjs.map +1 -0
  855. package/dist/password/PasswordKdfAdmission.d.mts +19 -0
  856. package/dist/password/PasswordKdfAdmission.mjs +25 -0
  857. package/dist/password/PasswordKdfAdmission.mjs.map +1 -0
  858. package/dist/password/configuration.d.mts +43 -0
  859. package/dist/password/configuration.mjs +64 -0
  860. package/dist/password/configuration.mjs.map +1 -0
  861. package/dist/password/defaults.mjs +13 -0
  862. package/dist/password/defaults.mjs.map +1 -0
  863. package/dist/password/encoding.mjs +64 -0
  864. package/dist/password/encoding.mjs.map +1 -0
  865. package/dist/password/errors.d.mts +28 -0
  866. package/dist/password/errors.mjs +25 -0
  867. package/dist/password/errors.mjs.map +1 -0
  868. package/dist/password/methods/PasswordActionEvidence.d.mts +38 -0
  869. package/dist/password/methods/PasswordActionEvidence.mjs +22 -0
  870. package/dist/password/methods/PasswordActionEvidence.mjs.map +1 -0
  871. package/dist/password/methods/PasswordPersistence.d.mts +102 -0
  872. package/dist/password/methods/PasswordPersistence.mjs +13 -0
  873. package/dist/password/methods/PasswordPersistence.mjs.map +1 -0
  874. package/dist/password/methods/PasswordPreparedPersistence.d.mts +111 -0
  875. package/dist/password/methods/contracts.d.mts +43 -0
  876. package/dist/password/methods/contracts.mjs +33 -0
  877. package/dist/password/methods/contracts.mjs.map +1 -0
  878. package/dist/password/methods/definition.d.mts +3813 -0
  879. package/dist/password/methods/definition.mjs +56 -0
  880. package/dist/password/methods/definition.mjs.map +1 -0
  881. package/dist/password/methods/errors.d.mts +15 -0
  882. package/dist/password/methods/errors.mjs +11 -0
  883. package/dist/password/methods/errors.mjs.map +1 -0
  884. package/dist/password/methods/models.d.mts +70 -0
  885. package/dist/password/methods/models.mjs +44 -0
  886. package/dist/password/methods/models.mjs.map +1 -0
  887. package/dist/password/methods/module.d.mts +3567 -0
  888. package/dist/password/methods/module.mjs +553 -0
  889. package/dist/password/methods/module.mjs.map +1 -0
  890. package/dist/password/methods/policy.d.mts +84 -0
  891. package/dist/password/methods/policy.mjs +80 -0
  892. package/dist/password/methods/policy.mjs.map +1 -0
  893. package/dist/password/methods/preparation.mjs +54 -0
  894. package/dist/password/methods/preparation.mjs.map +1 -0
  895. package/dist/password/methods/prepared.d.mts +53 -0
  896. package/dist/password/methods/prepared.mjs +610 -0
  897. package/dist/password/methods/prepared.mjs.map +1 -0
  898. package/dist/password/methods/preparedModels.d.mts +1295 -0
  899. package/dist/password/methods/preparedModels.mjs +278 -0
  900. package/dist/password/methods/preparedModels.mjs.map +1 -0
  901. package/dist/password/methods/signIn.d.mts +180 -0
  902. package/dist/password/methods/signIn.mjs +73 -0
  903. package/dist/password/methods/signIn.mjs.map +1 -0
  904. package/dist/password/methods/snapshot.mjs +38 -0
  905. package/dist/password/methods/snapshot.mjs.map +1 -0
  906. package/dist/password/methods/verification.mjs +138 -0
  907. package/dist/password/methods/verification.mjs.map +1 -0
  908. package/dist/password/models.d.mts +13 -0
  909. package/dist/password/models.mjs +12 -0
  910. package/dist/password/models.mjs.map +1 -0
  911. package/dist/password/policy.d.mts +33 -0
  912. package/dist/password/policy.mjs +37 -0
  913. package/dist/password/policy.mjs.map +1 -0
  914. package/dist/phone/PhoneActionEvidence.d.mts +23 -0
  915. package/dist/phone/PhoneActionEvidence.mjs +10 -0
  916. package/dist/phone/PhoneActionEvidence.mjs.map +1 -0
  917. package/dist/phone/PhoneAdmission.d.mts +29 -0
  918. package/dist/phone/PhoneAdmission.mjs +10 -0
  919. package/dist/phone/PhoneAdmission.mjs.map +1 -0
  920. package/dist/phone/PhoneDeliveryEligibility.d.mts +11 -0
  921. package/dist/phone/PhoneDeliveryEligibility.mjs +8 -0
  922. package/dist/phone/PhoneDeliveryEligibility.mjs.map +1 -0
  923. package/dist/phone/PhonePersistence.d.mts +33 -0
  924. package/dist/phone/PhonePersistence.mjs +10 -0
  925. package/dist/phone/PhonePersistence.mjs.map +1 -0
  926. package/dist/phone/PhoneRequestContext.d.mts +10 -0
  927. package/dist/phone/PhoneRequestContext.mjs +8 -0
  928. package/dist/phone/PhoneRequestContext.mjs.map +1 -0
  929. package/dist/phone/PhoneSignInTargets.d.mts +19 -0
  930. package/dist/phone/PhoneSignInTargets.mjs +13 -0
  931. package/dist/phone/PhoneSignInTargets.mjs.map +1 -0
  932. package/dist/phone/definition.d.mts +7190 -0
  933. package/dist/phone/definition.mjs +28 -0
  934. package/dist/phone/definition.mjs.map +1 -0
  935. package/dist/phone/failure.mjs +23 -0
  936. package/dist/phone/failure.mjs.map +1 -0
  937. package/dist/phone/lifecycle.mjs +427 -0
  938. package/dist/phone/lifecycle.mjs.map +1 -0
  939. package/dist/phone/lifecycleModels.d.mts +164 -0
  940. package/dist/phone/lifecycleModels.mjs +91 -0
  941. package/dist/phone/lifecycleModels.mjs.map +1 -0
  942. package/dist/phone/models.d.mts +41 -0
  943. package/dist/phone/models.mjs +29 -0
  944. package/dist/phone/models.mjs.map +1 -0
  945. package/dist/phone/module.d.mts +6027 -0
  946. package/dist/phone/module.mjs +293 -0
  947. package/dist/phone/module.mjs.map +1 -0
  948. package/dist/proofs/EmailProofDelivery.d.mts +13 -0
  949. package/dist/proofs/EmailProofDelivery.mjs +11 -0
  950. package/dist/proofs/EmailProofDelivery.mjs.map +1 -0
  951. package/dist/proofs/HostIngressLimiter.d.mts +20 -0
  952. package/dist/proofs/HostIngressLimiter.mjs +13 -0
  953. package/dist/proofs/HostIngressLimiter.mjs.map +1 -0
  954. package/dist/proofs/ProofPersistence.d.mts +140 -0
  955. package/dist/proofs/ProofPersistence.mjs +13 -0
  956. package/dist/proofs/ProofPersistence.mjs.map +1 -0
  957. package/dist/proofs/SmsProofDelivery.d.mts +13 -0
  958. package/dist/proofs/SmsProofDelivery.mjs +11 -0
  959. package/dist/proofs/SmsProofDelivery.mjs.map +1 -0
  960. package/dist/proofs/abuse.d.mts +15 -0
  961. package/dist/proofs/abuse.mjs +12 -0
  962. package/dist/proofs/abuse.mjs.map +1 -0
  963. package/dist/proofs/completion.d.mts +22 -0
  964. package/dist/proofs/crypto.d.mts +196 -0
  965. package/dist/proofs/crypto.mjs +189 -0
  966. package/dist/proofs/crypto.mjs.map +1 -0
  967. package/dist/proofs/definition.d.mts +335 -0
  968. package/dist/proofs/definition.mjs +10 -0
  969. package/dist/proofs/definition.mjs.map +1 -0
  970. package/dist/proofs/delivery.d.mts +30 -0
  971. package/dist/proofs/delivery.mjs +26 -0
  972. package/dist/proofs/delivery.mjs.map +1 -0
  973. package/dist/proofs/dispatch.d.mts +20 -0
  974. package/dist/proofs/dispatch.mjs +54 -0
  975. package/dist/proofs/dispatch.mjs.map +1 -0
  976. package/dist/proofs/errors.d.mts +21 -0
  977. package/dist/proofs/errors.mjs +25 -0
  978. package/dist/proofs/errors.mjs.map +1 -0
  979. package/dist/proofs/models.d.mts +141 -0
  980. package/dist/proofs/models.mjs +93 -0
  981. package/dist/proofs/models.mjs.map +1 -0
  982. package/dist/proofs/module.d.mts +344 -0
  983. package/dist/proofs/module.mjs +350 -0
  984. package/dist/proofs/module.mjs.map +1 -0
  985. package/dist/proofs/policy.d.mts +152 -0
  986. package/dist/proofs/policy.mjs +51 -0
  987. package/dist/proofs/policy.mjs.map +1 -0
  988. package/dist/sessions/AuthenticationAuthority.d.mts +31 -0
  989. package/dist/sessions/AuthenticationAuthority.mjs +8 -0
  990. package/dist/sessions/AuthenticationAuthority.mjs.map +1 -0
  991. package/dist/sessions/PendingAuthentication.d.mts +108 -0
  992. package/dist/sessions/PendingAuthentication.mjs +40 -0
  993. package/dist/sessions/PendingAuthentication.mjs.map +1 -0
  994. package/dist/sessions/SessionStepUpPersistence.d.mts +152 -0
  995. package/dist/sessions/SessionStepUpPersistence.mjs +63 -0
  996. package/dist/sessions/SessionStepUpPersistence.mjs.map +1 -0
  997. package/dist/sessions/assurance.d.mts +163 -0
  998. package/dist/sessions/assurance.mjs +95 -0
  999. package/dist/sessions/assurance.mjs.map +1 -0
  1000. package/dist/sessions/commit.d.mts +13 -0
  1001. package/dist/sessions/configuration.d.mts +46 -0
  1002. package/dist/sessions/configuration.mjs +55 -0
  1003. package/dist/sessions/configuration.mjs.map +1 -0
  1004. package/dist/sessions/contract.d.mts +663 -0
  1005. package/dist/sessions/contract.mjs +174 -0
  1006. package/dist/sessions/contract.mjs.map +1 -0
  1007. package/dist/sessions/crypto.d.mts +24 -0
  1008. package/dist/sessions/crypto.mjs +106 -0
  1009. package/dist/sessions/crypto.mjs.map +1 -0
  1010. package/dist/sessions/definition.d.mts +11 -0
  1011. package/dist/sessions/definition.mjs +10 -0
  1012. package/dist/sessions/definition.mjs.map +1 -0
  1013. package/dist/sessions/errors.d.mts +35 -0
  1014. package/dist/sessions/errors.mjs +34 -0
  1015. package/dist/sessions/errors.mjs.map +1 -0
  1016. package/dist/sessions/invalidation.d.mts +23 -0
  1017. package/dist/sessions/invalidation.mjs +33 -0
  1018. package/dist/sessions/invalidation.mjs.map +1 -0
  1019. package/dist/sessions/models.d.mts +143 -0
  1020. package/dist/sessions/models.mjs +94 -0
  1021. package/dist/sessions/models.mjs.map +1 -0
  1022. package/dist/sessions/module.d.mts +1091 -0
  1023. package/dist/sessions/module.mjs +943 -0
  1024. package/dist/sessions/module.mjs.map +1 -0
  1025. package/dist/sessions/persistence.d.mts +93 -0
  1026. package/dist/sessions/policy.d.mts +80 -0
  1027. package/dist/sessions/policy.mjs +66 -0
  1028. package/dist/sessions/policy.mjs.map +1 -0
  1029. package/dist/testing/conformance/AuthStore.d.mts +11 -0
  1030. package/dist/testing/conformance/AuthStore.mjs +173 -0
  1031. package/dist/testing/conformance/AuthStore.mjs.map +1 -0
  1032. package/dist/testing/conformance/OAuthConnectionStore.d.mts +11 -0
  1033. package/dist/testing/conformance/OAuthConnectionStore.mjs +102 -0
  1034. package/dist/testing/conformance/OAuthConnectionStore.mjs.map +1 -0
  1035. package/dist/testing/conformance/OAuthStateStore.d.mts +11 -0
  1036. package/dist/testing/conformance/OAuthStateStore.mjs +45 -0
  1037. package/dist/testing/conformance/OAuthStateStore.mjs.map +1 -0
  1038. package/dist/testing/conformance/PasswordCredentialStore.d.mts +20 -0
  1039. package/dist/testing/conformance/PasswordCredentialStore.mjs +103 -0
  1040. package/dist/testing/conformance/PasswordCredentialStore.mjs.map +1 -0
  1041. package/dist/testing/conformance/support.mjs +17 -0
  1042. package/dist/testing/conformance/support.mjs.map +1 -0
  1043. package/dist/testing/crypto.d.mts +11 -0
  1044. package/dist/testing/crypto.mjs +41 -0
  1045. package/dist/testing/crypto.mjs.map +1 -0
  1046. package/dist/testing/keyring.d.mts +9 -0
  1047. package/dist/testing/keyring.mjs +17 -0
  1048. package/dist/testing/keyring.mjs.map +1 -0
  1049. package/dist/totp/TotpActionEvidence.d.mts +18 -0
  1050. package/dist/totp/TotpActionEvidence.mjs +8 -0
  1051. package/dist/totp/TotpActionEvidence.mjs.map +1 -0
  1052. package/dist/totp/TotpPersistence.d.mts +19 -0
  1053. package/dist/totp/TotpPersistence.mjs +8 -0
  1054. package/dist/totp/TotpPersistence.mjs.map +1 -0
  1055. package/dist/totp/TotpSecretKeys.d.mts +15 -0
  1056. package/dist/totp/TotpSecretKeys.mjs +8 -0
  1057. package/dist/totp/TotpSecretKeys.mjs.map +1 -0
  1058. package/dist/totp/crypto.mjs +96 -0
  1059. package/dist/totp/crypto.mjs.map +1 -0
  1060. package/dist/totp/definition.d.mts +764 -0
  1061. package/dist/totp/definition.mjs +24 -0
  1062. package/dist/totp/definition.mjs.map +1 -0
  1063. package/dist/totp/errors.d.mts +16 -0
  1064. package/dist/totp/errors.mjs +18 -0
  1065. package/dist/totp/errors.mjs.map +1 -0
  1066. package/dist/totp/models.d.mts +377 -0
  1067. package/dist/totp/models.mjs +137 -0
  1068. package/dist/totp/models.mjs.map +1 -0
  1069. package/dist/totp/module.d.mts +737 -0
  1070. package/dist/totp/module.mjs +355 -0
  1071. package/dist/totp/module.mjs.map +1 -0
  1072. package/package.json +1 -0
  1073. package/src/Atom.ts +4 -0
  1074. package/src/Auth.ts +16 -0
  1075. package/src/AuthContract.ts +17 -0
  1076. package/src/AuthSession.ts +298 -0
  1077. package/src/AuthStore.ts +367 -0
  1078. package/src/AuthTokenCodec.ts +226 -0
  1079. package/src/Client.ts +9 -0
  1080. package/src/Cloudflare.ts +345 -0
  1081. package/src/Drizzle.ts +378 -0
  1082. package/src/DrizzleD1.ts +136 -0
  1083. package/src/DrizzleLibsql.ts +288 -0
  1084. package/src/DrizzleMysql2.ts +184 -0
  1085. package/src/DrizzlePglite.ts +160 -0
  1086. package/src/DrizzlePostgres.ts +160 -0
  1087. package/src/DrizzleSqliteBun.ts +244 -0
  1088. package/src/DrizzleSqliteDo.ts +473 -0
  1089. package/src/DrizzleSqliteNode.ts +245 -0
  1090. package/src/DrizzleSqliteWasm.ts +245 -0
  1091. package/src/Email.ts +55 -0
  1092. package/src/EmailOtp.ts +250 -0
  1093. package/src/EmailOtpSender.ts +28 -0
  1094. package/src/Errors.ts +103 -0
  1095. package/src/GitHub.ts +16 -0
  1096. package/src/Hooks.ts +50 -0
  1097. package/src/Http.ts +47 -0
  1098. package/src/HttpServer.ts +742 -0
  1099. package/src/Identity.ts +53 -0
  1100. package/src/IdentityResolver.ts +18 -0
  1101. package/src/OAuth.ts +242 -0
  1102. package/src/OpenIdClient.ts +13 -0
  1103. package/src/OpenIdClientConnected.ts +18 -0
  1104. package/src/OperationHttp.ts +14 -0
  1105. package/src/OperationHttpClient.ts +6 -0
  1106. package/src/OperationHttpServer.ts +15 -0
  1107. package/src/Operations.ts +69 -0
  1108. package/src/Passkey.ts +81 -0
  1109. package/src/PasskeyBrowser.ts +19 -0
  1110. package/src/PasskeyContract.ts +212 -0
  1111. package/src/PasskeyPassword.ts +319 -0
  1112. package/src/PasskeySimpleWebAuthn.ts +6 -0
  1113. package/src/Password.ts +113 -0
  1114. package/src/PasswordAuth.ts +197 -0
  1115. package/src/PasswordCredentialStore.ts +140 -0
  1116. package/src/PasswordHasher.ts +147 -0
  1117. package/src/PhoneOtp.ts +32 -0
  1118. package/src/Policy.ts +95 -0
  1119. package/src/Proofs.ts +71 -0
  1120. package/src/Rpc.ts +15 -0
  1121. package/src/Schema.ts +235 -0
  1122. package/src/SessionContract.ts +2 -0
  1123. package/src/Sessions.ts +105 -0
  1124. package/src/Testing.ts +24 -0
  1125. package/src/Totp.ts +28 -0
  1126. package/src/TotpContract.ts +147 -0
  1127. package/src/WebCrypto.ts +61 -0
  1128. package/src/Workflows.ts +12 -0
  1129. package/src/atom/AuthAtomLifetime.ts +87 -0
  1130. package/src/atom/AuthAtomWorkflow.ts +27 -0
  1131. package/src/atom/client.ts +364 -0
  1132. package/src/atom/operations.ts +183 -0
  1133. package/src/atom/scoped-runtime.ts +249 -0
  1134. package/src/auth/Auth.ts +482 -0
  1135. package/src/auth/AuthConfigurationError.ts +9 -0
  1136. package/src/auth/AuthRequest.ts +21 -0
  1137. package/src/auth/AuthStrategy.ts +116 -0
  1138. package/src/auth/ConsumeDecision.ts +4 -0
  1139. package/src/auth/actions.ts +220 -0
  1140. package/src/auth/defaults.ts +23 -0
  1141. package/src/auth/definition.ts +88 -0
  1142. package/src/auth/session.ts +146 -0
  1143. package/src/drizzle/D1BatchStatements.ts +10 -0
  1144. package/src/drizzle/PasswordPreparedPostconditions.ts +30 -0
  1145. package/src/drizzle/SuppliedService.ts +10 -0
  1146. package/src/drizzle/d1-emails.ts +1808 -0
  1147. package/src/drizzle/d1-generated-statement.ts +129 -0
  1148. package/src/drizzle/d1-identity.ts +374 -0
  1149. package/src/drizzle/d1-oauth.ts +338 -0
  1150. package/src/drizzle/d1-passkey.ts +371 -0
  1151. package/src/drizzle/d1-password-prepared.ts +1273 -0
  1152. package/src/drizzle/d1-passwords.ts +2661 -0
  1153. package/src/drizzle/d1-phone.ts +94 -0
  1154. package/src/drizzle/d1-planning.ts +105 -0
  1155. package/src/drizzle/d1-proofs.ts +2305 -0
  1156. package/src/drizzle/d1-sessions.ts +2867 -0
  1157. package/src/drizzle/d1-totp.ts +79 -0
  1158. package/src/drizzle/email-model.ts +512 -0
  1159. package/src/drizzle/email-registration.ts +696 -0
  1160. package/src/drizzle/email-sql.ts +1468 -0
  1161. package/src/drizzle/email-target.ts +243 -0
  1162. package/src/drizzle/model.ts +492 -0
  1163. package/src/drizzle/mysql-emails.ts +323 -0
  1164. package/src/drizzle/mysql-identity.ts +323 -0
  1165. package/src/drizzle/mysql-password-prepared.ts +206 -0
  1166. package/src/drizzle/mysql-passwords.ts +341 -0
  1167. package/src/drizzle/mysql-proofs.ts +183 -0
  1168. package/src/drizzle/mysql-sessions.ts +742 -0
  1169. package/src/drizzle/mysql.ts +686 -0
  1170. package/src/drizzle/oauth-accounts.ts +801 -0
  1171. package/src/drizzle/oauth-connected-access.ts +354 -0
  1172. package/src/drizzle/oauth-connected-collection.ts +324 -0
  1173. package/src/drizzle/oauth-connected-custody.ts +277 -0
  1174. package/src/drizzle/oauth-connected-drivers.ts +463 -0
  1175. package/src/drizzle/oauth-connected-flow.ts +439 -0
  1176. package/src/drizzle/oauth-connected-input.ts +128 -0
  1177. package/src/drizzle/oauth-connected-maintenance.ts +345 -0
  1178. package/src/drizzle/oauth-connected-management.ts +365 -0
  1179. package/src/drizzle/oauth-connected-model.ts +347 -0
  1180. package/src/drizzle/oauth-connected-reference.ts +112 -0
  1181. package/src/drizzle/oauth-connected-settlement.ts +226 -0
  1182. package/src/drizzle/oauth-connected-state.ts +846 -0
  1183. package/src/drizzle/oauth-connected-target.ts +264 -0
  1184. package/src/drizzle/oauth-drivers.ts +567 -0
  1185. package/src/drizzle/oauth-flow.ts +461 -0
  1186. package/src/drizzle/oauth-input.ts +205 -0
  1187. package/src/drizzle/oauth-model.ts +610 -0
  1188. package/src/drizzle/oauth-mysql.ts +10 -0
  1189. package/src/drizzle/oauth-owner.ts +29 -0
  1190. package/src/drizzle/oauth-registration.ts +638 -0
  1191. package/src/drizzle/oauth-state.ts +213 -0
  1192. package/src/drizzle/oauth-target.ts +751 -0
  1193. package/src/drizzle/passkey-admission.ts +333 -0
  1194. package/src/drizzle/passkey-credentials.ts +465 -0
  1195. package/src/drizzle/passkey-drivers.ts +385 -0
  1196. package/src/drizzle/passkey-enrollment.ts +280 -0
  1197. package/src/drizzle/passkey-flow.ts +983 -0
  1198. package/src/drizzle/passkey-management.ts +369 -0
  1199. package/src/drizzle/passkey-model.ts +350 -0
  1200. package/src/drizzle/passkey-registration-ceremony-model.ts +69 -0
  1201. package/src/drizzle/passkey-registration-ceremony.ts +254 -0
  1202. package/src/drizzle/passkey-registration-custody.ts +82 -0
  1203. package/src/drizzle/passkey-registration-write.ts +378 -0
  1204. package/src/drizzle/passkey-state.ts +307 -0
  1205. package/src/drizzle/passkey-target.ts +528 -0
  1206. package/src/drizzle/passkey-write-drivers.ts +396 -0
  1207. package/src/drizzle/passkey-write-model.ts +265 -0
  1208. package/src/drizzle/passkey-write-state.ts +627 -0
  1209. package/src/drizzle/passkey-write-target.ts +406 -0
  1210. package/src/drizzle/password-model.ts +491 -0
  1211. package/src/drizzle/password-prepared-model.ts +259 -0
  1212. package/src/drizzle/password-prepared-sql.ts +1198 -0
  1213. package/src/drizzle/password-prepared-state.ts +232 -0
  1214. package/src/drizzle/password-prepared-target.ts +158 -0
  1215. package/src/drizzle/password-registration.ts +372 -0
  1216. package/src/drizzle/password-sql.ts +2082 -0
  1217. package/src/drizzle/password-target.ts +223 -0
  1218. package/src/drizzle/pg-emails.ts +323 -0
  1219. package/src/drizzle/pg-password-prepared.ts +207 -0
  1220. package/src/drizzle/pg-passwords.ts +340 -0
  1221. package/src/drizzle/pg-proofs.ts +193 -0
  1222. package/src/drizzle/pg-sessions.ts +751 -0
  1223. package/src/drizzle/pg.ts +982 -0
  1224. package/src/drizzle/phone-model.ts +185 -0
  1225. package/src/drizzle/phone-state.ts +802 -0
  1226. package/src/drizzle/phone-target.ts +471 -0
  1227. package/src/drizzle/proof-model.ts +398 -0
  1228. package/src/drizzle/proof-sql.ts +1912 -0
  1229. package/src/drizzle/proof-target.ts +120 -0
  1230. package/src/drizzle/session-model.ts +368 -0
  1231. package/src/drizzle/session-sql.ts +2152 -0
  1232. package/src/drizzle/session-target.ts +335 -0
  1233. package/src/drizzle/sqlite-emails.ts +368 -0
  1234. package/src/drizzle/sqlite-identity.ts +343 -0
  1235. package/src/drizzle/sqlite-password-prepared.ts +262 -0
  1236. package/src/drizzle/sqlite-passwords.ts +499 -0
  1237. package/src/drizzle/sqlite-proofs.ts +204 -0
  1238. package/src/drizzle/sqlite-sessions.ts +972 -0
  1239. package/src/drizzle/sqlite.ts +704 -0
  1240. package/src/drizzle/standalone-guard.ts +38 -0
  1241. package/src/drizzle/step-up-model.ts +129 -0
  1242. package/src/drizzle/step-up-state.ts +141 -0
  1243. package/src/drizzle/totp-model.ts +91 -0
  1244. package/src/drizzle/totp-state.ts +520 -0
  1245. package/src/drizzle/totp-target.ts +304 -0
  1246. package/src/drizzle/transaction-execution.ts +290 -0
  1247. package/src/drizzle/transaction-mysql.ts +104 -0
  1248. package/src/drizzle/transaction-owner.ts +570 -0
  1249. package/src/email/EmailActionEvidence.ts +37 -0
  1250. package/src/email/EmailAddressPersistence.ts +71 -0
  1251. package/src/email/EmailIdentifierNotifier.ts +48 -0
  1252. package/src/email/EmailReturnTargets.ts +50 -0
  1253. package/src/email/EmailSignInTargets.ts +20 -0
  1254. package/src/email/addresses.ts +630 -0
  1255. package/src/email/definition.ts +309 -0
  1256. package/src/email/errors.ts +23 -0
  1257. package/src/email/magicLink.ts +84 -0
  1258. package/src/email/models.ts +50 -0
  1259. package/src/email/module.ts +664 -0
  1260. package/src/email/registration.ts +415 -0
  1261. package/src/email/snapshot.ts +51 -0
  1262. package/src/hooks/LifecycleHooks.ts +136 -0
  1263. package/src/hooks/commit.ts +271 -0
  1264. package/src/hooks/models.ts +111 -0
  1265. package/src/hooks/plugins.ts +87 -0
  1266. package/src/hooks/transactions.ts +51 -0
  1267. package/src/http/auth-api.ts +17 -0
  1268. package/src/http/auth-contract.ts +148 -0
  1269. package/src/http/auth-http.ts +467 -0
  1270. package/src/http/endpoints/get-session.ts +9 -0
  1271. package/src/http/endpoints/password-sign-in.ts +19 -0
  1272. package/src/http/endpoints/request-email-otp.ts +10 -0
  1273. package/src/http/endpoints/set-password.ts +18 -0
  1274. package/src/http/endpoints/sign-out.ts +5 -0
  1275. package/src/http/endpoints/verify-email-otp.ts +15 -0
  1276. package/src/http/models.ts +80 -0
  1277. package/src/http/security.ts +102 -0
  1278. package/src/http/session-contract.ts +92 -0
  1279. package/src/http-operation/OperationHttpInvocation.ts +39 -0
  1280. package/src/http-operation/OperationHttpServerConfig.ts +124 -0
  1281. package/src/http-operation/auth-client.ts +273 -0
  1282. package/src/http-operation/client.ts +453 -0
  1283. package/src/http-operation/configuration-schema.ts +19 -0
  1284. package/src/http-operation/contract.ts +116 -0
  1285. package/src/http-operation/errors.ts +38 -0
  1286. package/src/http-operation/models.ts +42 -0
  1287. package/src/http-operation/private.ts +50 -0
  1288. package/src/http-operation/security.ts +93 -0
  1289. package/src/http-operation/server.ts +544 -0
  1290. package/src/identity/ExternalIdentityMutation.ts +18 -0
  1291. package/src/identity/IdentityMutation.ts +41 -0
  1292. package/src/identity/IdentityRepository.ts +37 -0
  1293. package/src/identity/SubjectLifecycle.ts +80 -0
  1294. package/src/identity/SubjectProvisioner.ts +40 -0
  1295. package/src/identity/codecs.ts +54 -0
  1296. package/src/identity/models.ts +82 -0
  1297. package/src/identity/operations.ts +182 -0
  1298. package/src/index.ts +23 -0
  1299. package/src/internal/AuthStoreDecisions.ts +23 -0
  1300. package/src/internal/CurrentSession.ts +8 -0
  1301. package/src/internal/diagnostics.ts +71 -0
  1302. package/src/oauth/GithubOAuthProvider.ts +106 -0
  1303. package/src/oauth/OAuth.ts +436 -0
  1304. package/src/oauth/OAuthAccountsPersistence.ts +142 -0
  1305. package/src/oauth/OAuthActionEvidence.ts +31 -0
  1306. package/src/oauth/OAuthConnectedActionEvidence.ts +28 -0
  1307. package/src/oauth/OAuthConnectedPersistence.ts +163 -0
  1308. package/src/oauth/OAuthConnectedProtocol.ts +54 -0
  1309. package/src/oauth/OAuthConnectedRevocations.ts +48 -0
  1310. package/src/oauth/OAuthConnectedTokenProtector.ts +240 -0
  1311. package/src/oauth/OAuthConnectedTransactionProtector.ts +56 -0
  1312. package/src/oauth/OAuthConnectedUseAuthority.ts +26 -0
  1313. package/src/oauth/OAuthConnectionStore.ts +59 -0
  1314. package/src/oauth/OAuthLinkTransactionProtector.ts +58 -0
  1315. package/src/oauth/OAuthProtocol.ts +39 -0
  1316. package/src/oauth/OAuthProvider.ts +126 -0
  1317. package/src/oauth/OAuthProviders.ts +53 -0
  1318. package/src/oauth/OAuthRegistrationIntents.ts +42 -0
  1319. package/src/oauth/OAuthReturnTargets.ts +44 -0
  1320. package/src/oauth/OAuthSignInPersistence.ts +91 -0
  1321. package/src/oauth/OAuthStateDecisions.ts +16 -0
  1322. package/src/oauth/OAuthStateStore.ts +102 -0
  1323. package/src/oauth/OAuthTransactionProtector.ts +103 -0
  1324. package/src/oauth/accounts.ts +987 -0
  1325. package/src/oauth/accountsModels.ts +214 -0
  1326. package/src/oauth/connected.ts +995 -0
  1327. package/src/oauth/connectedAccess.ts +644 -0
  1328. package/src/oauth/connectedMaintenance.ts +248 -0
  1329. package/src/oauth/connectedModels.ts +495 -0
  1330. package/src/oauth/definition.ts +414 -0
  1331. package/src/oauth/errors.ts +78 -0
  1332. package/src/oauth/github/identity.ts +26 -0
  1333. package/src/oauth/github/models.ts +37 -0
  1334. package/src/oauth/github/protocol.ts +329 -0
  1335. package/src/oauth/openid-client/ProviderRevocation.ts +22 -0
  1336. package/src/oauth/openid-client/compatibility.ts +47 -0
  1337. package/src/oauth/openid-client/configuration.ts +472 -0
  1338. package/src/oauth/openid-client/connected/configuration.ts +565 -0
  1339. package/src/oauth/openid-client/connected/models.ts +58 -0
  1340. package/src/oauth/openid-client/connected/protocol.ts +866 -0
  1341. package/src/oauth/openid-client/models.ts +78 -0
  1342. package/src/oauth/openid-client/protocol.ts +437 -0
  1343. package/src/oauth/openid-client/transport.ts +67 -0
  1344. package/src/oauth/policy.ts +26 -0
  1345. package/src/oauth/registration.ts +410 -0
  1346. package/src/oauth/registrationModels.ts +115 -0
  1347. package/src/oauth/registrationSecrets.ts +127 -0
  1348. package/src/oauth/schema.ts +102 -0
  1349. package/src/oauth/signInErrors.ts +23 -0
  1350. package/src/oauth/signInModels.ts +266 -0
  1351. package/src/oauth/signInModule.ts +875 -0
  1352. package/src/oauth/signInSnapshot.ts +37 -0
  1353. package/src/oauth/transactionEncryption.ts +198 -0
  1354. package/src/operations/RequestBindingConfig.ts +12 -0
  1355. package/src/operations/actions.ts +342 -0
  1356. package/src/operations/context.ts +130 -0
  1357. package/src/operations/credentials.ts +121 -0
  1358. package/src/operations/errors.ts +53 -0
  1359. package/src/operations/operation.ts +740 -0
  1360. package/src/operations/requestBinding.ts +237 -0
  1361. package/src/operations/requestBindingModels.ts +18 -0
  1362. package/src/operations/reveals.ts +147 -0
  1363. package/src/passkey/PasskeyActionEvidence.ts +25 -0
  1364. package/src/passkey/PasskeyCredentials.ts +16 -0
  1365. package/src/passkey/PasskeyEnrollmentContext.ts +26 -0
  1366. package/src/passkey/PasskeyManagementPersistence.ts +124 -0
  1367. package/src/passkey/PasskeyPersistence.ts +85 -0
  1368. package/src/passkey/PasskeyProtocol.ts +48 -0
  1369. package/src/passkey/actions.ts +905 -0
  1370. package/src/passkey/browser/PasskeyBrowser.ts +26 -0
  1371. package/src/passkey/browser/models.ts +67 -0
  1372. package/src/passkey/browser/simplewebauthn.ts +621 -0
  1373. package/src/passkey/definition.ts +386 -0
  1374. package/src/passkey/errors.ts +39 -0
  1375. package/src/passkey/management.ts +552 -0
  1376. package/src/passkey/models.ts +414 -0
  1377. package/src/passkey/module.ts +367 -0
  1378. package/src/passkey/pending.ts +203 -0
  1379. package/src/passkey/policy.ts +88 -0
  1380. package/src/passkey/registration.ts +251 -0
  1381. package/src/passkey/simplewebauthn/configuration.ts +97 -0
  1382. package/src/passkey/simplewebauthn/models.ts +9 -0
  1383. package/src/passkey/simplewebauthn/protocol.ts +729 -0
  1384. package/src/passkey/snapshot.ts +48 -0
  1385. package/src/passkey/stepUp.ts +212 -0
  1386. package/src/password/CompromisedPasswords.ts +36 -0
  1387. package/src/password/NewPasswordCheck.ts +89 -0
  1388. package/src/password/PasswordHashing.ts +209 -0
  1389. package/src/password/PasswordKdfAdmission.ts +44 -0
  1390. package/src/password/configuration.ts +52 -0
  1391. package/src/password/defaults.ts +15 -0
  1392. package/src/password/encoding.ts +137 -0
  1393. package/src/password/errors.ts +43 -0
  1394. package/src/password/methods/PasswordActionEvidence.ts +41 -0
  1395. package/src/password/methods/PasswordPersistence.ts +128 -0
  1396. package/src/password/methods/PasswordPreparedPersistence.ts +123 -0
  1397. package/src/password/methods/contracts.ts +47 -0
  1398. package/src/password/methods/definition.ts +199 -0
  1399. package/src/password/methods/errors.ts +26 -0
  1400. package/src/password/methods/models.ts +80 -0
  1401. package/src/password/methods/module.ts +986 -0
  1402. package/src/password/methods/policy.ts +68 -0
  1403. package/src/password/methods/preparation.ts +73 -0
  1404. package/src/password/methods/prepared.ts +1199 -0
  1405. package/src/password/methods/preparedModels.ts +496 -0
  1406. package/src/password/methods/signIn.ts +136 -0
  1407. package/src/password/methods/snapshot.ts +53 -0
  1408. package/src/password/methods/verification.ts +266 -0
  1409. package/src/password/models.ts +15 -0
  1410. package/src/password/policy.ts +41 -0
  1411. package/src/phone/PhoneActionEvidence.ts +26 -0
  1412. package/src/phone/PhoneAdmission.ts +29 -0
  1413. package/src/phone/PhoneDeliveryEligibility.ts +9 -0
  1414. package/src/phone/PhonePersistence.ts +43 -0
  1415. package/src/phone/PhoneRequestContext.ts +7 -0
  1416. package/src/phone/PhoneSignInTargets.ts +19 -0
  1417. package/src/phone/definition.ts +87 -0
  1418. package/src/phone/failure.ts +40 -0
  1419. package/src/phone/lifecycle.ts +662 -0
  1420. package/src/phone/lifecycleModels.ts +108 -0
  1421. package/src/phone/models.ts +41 -0
  1422. package/src/phone/module.ts +433 -0
  1423. package/src/proofs/EmailProofDelivery.ts +19 -0
  1424. package/src/proofs/HostIngressLimiter.ts +20 -0
  1425. package/src/proofs/ProofPersistence.ts +172 -0
  1426. package/src/proofs/SmsProofDelivery.ts +19 -0
  1427. package/src/proofs/abuse.ts +23 -0
  1428. package/src/proofs/completion.ts +23 -0
  1429. package/src/proofs/crypto.ts +326 -0
  1430. package/src/proofs/definition.ts +39 -0
  1431. package/src/proofs/delivery.ts +73 -0
  1432. package/src/proofs/dispatch.ts +99 -0
  1433. package/src/proofs/errors.ts +46 -0
  1434. package/src/proofs/models.ts +131 -0
  1435. package/src/proofs/module.ts +620 -0
  1436. package/src/proofs/policy.ts +77 -0
  1437. package/src/sessions/AuthenticationAuthority.ts +51 -0
  1438. package/src/sessions/PendingAuthentication.ts +121 -0
  1439. package/src/sessions/SessionStepUpPersistence.ts +164 -0
  1440. package/src/sessions/assurance.ts +192 -0
  1441. package/src/sessions/commit.ts +13 -0
  1442. package/src/sessions/configuration.ts +133 -0
  1443. package/src/sessions/contract.ts +203 -0
  1444. package/src/sessions/crypto.ts +181 -0
  1445. package/src/sessions/definition.ts +25 -0
  1446. package/src/sessions/errors.ts +68 -0
  1447. package/src/sessions/invalidation.ts +46 -0
  1448. package/src/sessions/models.ts +138 -0
  1449. package/src/sessions/module.ts +1991 -0
  1450. package/src/sessions/persistence.ts +135 -0
  1451. package/src/sessions/policy.ts +103 -0
  1452. package/src/testing/conformance/AuthStore.ts +314 -0
  1453. package/src/testing/conformance/OAuthConnectionStore.ts +167 -0
  1454. package/src/testing/conformance/OAuthStateStore.ts +105 -0
  1455. package/src/testing/conformance/PasswordCredentialStore.ts +205 -0
  1456. package/src/testing/conformance/support.ts +38 -0
  1457. package/src/testing/crypto.ts +55 -0
  1458. package/src/testing/keyring.ts +17 -0
  1459. package/src/totp/TotpActionEvidence.ts +18 -0
  1460. package/src/totp/TotpPersistence.ts +26 -0
  1461. package/src/totp/TotpSecretKeys.ts +15 -0
  1462. package/src/totp/crypto.ts +160 -0
  1463. package/src/totp/definition.ts +78 -0
  1464. package/src/totp/errors.ts +25 -0
  1465. package/src/totp/models.ts +164 -0
  1466. package/src/totp/module.ts +717 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.mjs","names":["EffectArray"],"sources":["../../src/sessions/module.ts"],"sourcesContent":["import {\n Array as EffectArray,\n Cause,\n Context,\n Crypto,\n DateTime,\n Effect,\n Encoding,\n Layer,\n Option,\n Redacted,\n Result,\n Schema,\n type Scope,\n type Types,\n} from \"effect\";\n\nimport { cryptoLayer, hooksLayer } from \"../auth/defaults\";\nimport { type PreparedCommit, hasCommitScope, coordinateCommit } from \"../hooks/commit\";\nimport { LifecycleHooks } from \"../hooks/LifecycleHooks\";\nimport type { HookDenied } from \"../hooks/models\";\nimport { LifecycleEventId, lifecycleEvent, lifecycleSnapshot } from \"../hooks/models\";\nimport { reportAuthFailure } from \"../internal/diagnostics\";\nimport {\n AuthenticationAssurance,\n type AssuranceRequirement,\n requireAssurance,\n requireAuthenticated,\n} from \"../operations/context\";\nimport { type AuthOperationResult } from \"../operations/credentials\";\nimport { TokenDigest } from \"../Schema\";\nimport {\n assessAuthentication,\n combineAuthenticationEvidence,\n snapshotAuthenticationEvidence,\n snapshotSessionAuthenticationProvenance,\n} from \"./assurance\";\nimport { AuthenticationAuthority } from \"./AuthenticationAuthority\";\nimport { makeSessionContract } from \"./contract\";\nimport { makeSessionSecrets, makeSessionSigningCodec, type SessionSigningKeyring } from \"./crypto\";\nimport type { SessionError } from \"./errors\";\nimport {\n SessionCapabilityUnsupported,\n SessionConfigurationError,\n SessionInvalid,\n SessionSignOutUnavailable,\n SessionUnavailable,\n SessionRenewalTooEarly,\n SessionStepUpInvalid,\n} from \"./errors\";\nimport { sessionInvalidationWindow } from \"./invalidation\";\nimport {\n type AuthenticationEvidence,\n type PendingConsumption,\n type SessionMetadata,\n AuthenticationFlowId,\n AuthenticationRequirement,\n SessionId,\n SessionAuthenticationProvenance,\n SessionCredentialVersion,\n type SessionCapabilities,\n type SessionInspection,\n} from \"./models\";\nimport {\n type PendingAuthentication as PendingPort,\n type PendingAuthenticationContext,\n snapshotPendingAuthenticationContext,\n} from \"./PendingAuthentication\";\nimport type {\n SessionRepository as RepositoryPort,\n SignedSessionValidity as ValidityPort,\n StatefulSessionPersistence as PersistencePort,\n} from \"./persistence\";\nimport {\n type SessionPolicy,\n stateAssistedCapabilities,\n statefulCapabilities,\n statelessCapabilities,\n validateSessionPolicy,\n validateSessionTimeline,\n} from \"./policy\";\nimport {\n type SessionStepUpProfileId,\n SessionStepUpIntent,\n SessionStepUpProfile,\n SessionStepUpRequirement,\n type StepUpPending,\n type SessionStepUpCompletionPlan,\n type SessionStepUpPersistence as StepUpPort,\n type SessionStepUpReplacement,\n type SessionStepUpSource,\n} from \"./SessionStepUpPersistence\";\n\nexport interface ModuleService<Id extends string, Kind extends string, Claims> {\n readonly moduleId: Id;\n readonly kind: Kind;\n readonly claims: Types.Invariant<Claims>;\n}\n\nconst reportSignOutFailure = <A, E extends { readonly _tag: string }, R>(\n effect: Effect.Effect<A, E, R>,\n) =>\n effect.pipe(\n Effect.tapCause((cause) =>\n reportAuthFailure(\n \"session-sign-out\",\n Cause.fromReasons(\n cause.reasons.filter(\n (reason) =>\n Cause.isFailReason(reason) &&\n reason.error._tag !== \"SessionInvalid\" &&\n reason.error._tag !== \"HookDenied\",\n ),\n ),\n ),\n ),\n );\n\n/** Stable module IDs isolate service keys and signed/digested credential namespaces. */\nexport type CompletionLayer<\n Id extends string,\n Claims extends Schema.Codec<unknown, unknown, unknown, unknown>,\n R = never,\n> = Layer.Layer<\n ModuleService<Id, \"completion\", Claims[\"Type\"]>,\n SessionConfigurationError,\n | ModuleService<Id, \"strategy\", Claims[\"Type\"]>\n | Crypto.Crypto\n | AuthenticationAuthority\n | Exclude<Claims[\"DecodingServices\"], Scope.Scope>\n | Exclude<Claims[\"EncodingServices\"], Scope.Scope>\n | Exclude<R, Scope.Scope>\n>;\n\nexport const makeSessionModule = <\n const Id extends string,\n Claims extends Schema.Codec<unknown, unknown, unknown, unknown>,\n>(\n moduleId: Id,\n claims: Claims,\n) => {\n const { Session, CompletionResult, operations, group, stepUpOperations, stepUpGroup } =\n makeSessionContract(moduleId, claims);\n\n const ClaimsCodec: Schema.Codec<\n Claims[\"Type\"],\n Claims[\"Encoded\"],\n Claims[\"DecodingServices\"],\n Claims[\"EncodingServices\"]\n > = Session.fields.claims;\n\n type Session = typeof Session.Type;\n type CompletionResult = typeof CompletionResult.Type;\n type SignOutResult = typeof operations.SignOut.rpc.successSchema.Type;\n type Failure = SessionError | HookDenied;\n type Prepared<A, R = never> = Effect.Effect<PreparedCommit<AuthOperationResult<A>>, Failure, R>;\n type Issuance = {\n readonly evidence: AuthenticationEvidence;\n readonly claims: Claims[\"Type\"];\n readonly pending?: PendingConsumption;\n };\n type Inspection = SessionInspection<Claims[\"Type\"]>;\n type Strategy = {\n readonly policy: SessionPolicy;\n readonly capabilities: SessionCapabilities;\n /** @effect-expect-leaking AuthenticationAuthority -- fresh issuance alone needs identity authority; verification does not. */\n readonly prepareEstablish: (input: Issuance) => Prepared<Session, AuthenticationAuthority>;\n /** Trusted method-only authentication source. Never expose through a public RPC. */\n readonly inspectForStepUp: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<SessionStepUpSource<Claims[\"Type\"]>, Failure>;\n readonly inspect: (credential: Redacted.Redacted<string>) => Effect.Effect<Inspection, Failure>;\n readonly verify: (credential: Redacted.Redacted<string>) => Effect.Effect<Session, Failure>;\n readonly prepareRenew: (credential: Redacted.Redacted<string>) => Prepared<Session>;\n readonly signOut: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<AuthOperationResult<SignOutResult>, Failure>;\n readonly list: (\n input: Parameters<RepositoryPort[\"list\"]>[0],\n ) => Effect.Effect<Effect.Success<ReturnType<RepositoryPort[\"list\"]>>, Failure>;\n readonly revoke: (session: Session, sessionId: SessionId) => Effect.Effect<void, Failure>;\n readonly revokeAll: (session: Session) => Effect.Effect<void, Failure>;\n };\n\n const SessionStrategy = Context.Service<ModuleService<Id, \"strategy\", Claims[\"Type\"]>, Strategy>(\n `effect-auth/sessions/${moduleId}/Strategy`,\n );\n\n // This tag is deliberately not returned by the module: no public precommit signer.\n const StepUpPlanner = Context.Service<\n ModuleService<Id, \"step-up-planner\", Claims[\"Type\"]>,\n {\n readonly plan: (\n source: SessionStepUpSource<Claims[\"Type\"]>,\n evidence: AuthenticationEvidence,\n assurance: AuthenticationAssurance,\n ) => Effect.Effect<\n {\n readonly replacement: SessionStepUpReplacement<Claims[\"Type\"]>;\n readonly credential: Redacted.Redacted<string>;\n },\n Failure\n >;\n }\n >(`effect-auth/sessions/${moduleId}/StepUpPlanner`);\n\n const SessionStepUpPersistence = Context.Service<\n ModuleService<Id, \"step-up-persistence\", Claims[\"Type\"]>,\n StepUpPort<Claims[\"Type\"]>\n >(`effect-auth/sessions/${moduleId}/StepUpPersistence`);\n\n const StatefulSessionPersistence = Context.Service<\n ModuleService<Id, \"persistence\", Claims[\"Type\"]>,\n PersistencePort<Claims[\"Type\"]>\n >(`effect-auth/sessions/${moduleId}/Persistence`);\n\n const SessionRepository = Context.Service<\n ModuleService<Id, \"repository\", Claims[\"Type\"]>,\n RepositoryPort\n >(`effect-auth/sessions/${moduleId}/Repository`);\n\n const SignedSessionValidity = Context.Service<\n ModuleService<Id, \"validity\", Claims[\"Type\"]>,\n ValidityPort\n >(`effect-auth/sessions/${moduleId}/Validity`);\n\n const PendingAuthentication = Context.Service<\n ModuleService<Id, \"pending\", Claims[\"Type\"]>,\n PendingPort<Claims[\"Type\"]>\n >(`effect-auth/sessions/${moduleId}/Pending`);\n\n const unsupported = (capability: string) =>\n Effect.fail(SessionCapabilityUnsupported.make({ capability }));\n\n const checkNoAmbientCommit = Effect.fn(\"Session.checkNoAmbientCommit\")(function* () {\n if (yield* hasCommitScope)\n return yield* SessionCapabilityUnsupported.make({\n capability: \"public-operation-inside-transaction; use prepared completion\",\n });\n });\n\n const checkRenewalDue = (session: SessionMetadata, now: DateTime.Utc, policy: SessionPolicy) => {\n const retryAt = DateTime.add(session.issuedAt, { milliseconds: policy.renewalIntervalMillis });\n\n return DateTime.toEpochMillis(now) < DateTime.toEpochMillis(retryAt)\n ? Effect.fail(SessionRenewalTooEarly.make({ retryAt }))\n : Effect.void;\n };\n\n const readCommitted = <A>(receipt: PreparedCommit<A>) =>\n receipt.read.pipe(Effect.mapError(() => SessionUnavailable.make({})));\n\n const prepareHooks = Effect.fn(\"Session.prepareHooks\")(function* (\n action: \"sign-in\" | \"session-creation\" | \"sign-out\",\n session?: Pick<SessionMetadata, \"subjectId\" | \"assurance\">,\n ) {\n const hooks = yield* LifecycleHooks;\n const secrets = yield* makeSessionSecrets(moduleId);\n\n const snapshot = lifecycleSnapshot({\n action,\n operation: `${moduleId}/session`,\n ...(session === undefined\n ? {}\n : { subjectId: session.subjectId, method: session.assurance.method }),\n identifiers: [],\n });\n\n yield* hooks.before(snapshot);\n const id = yield* secrets.generate();\n\n return lifecycleEvent({\n id: LifecycleEventId.make(Redacted.value(id)),\n occurredAtMillis: DateTime.toEpochMillis(yield* DateTime.now),\n snapshot,\n });\n });\n\n // Detach mutable date/collection declarations as well as projecting declared fields.\n // Work from the Type view so consumer wire transformations are not replayed.\n const publicSessionCodec = Schema.toCodecJson(Schema.toType(Session));\n\n const projectSession = (session: Session) =>\n Schema.encodeEffect(publicSessionCodec)(session).pipe(\n Effect.flatMap(Schema.decodeEffect(publicSessionCodec)),\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n const issue = (\n session: Session,\n credential: Redacted.Redacted<string>,\n ): AuthOperationResult<Session> => ({\n value: Schema.decodeSync(publicSessionCodec)(Schema.encodeSync(publicSessionCodec)(session)),\n credentialCommands: [\n {\n _tag: \"Issue\",\n slot: \"session\",\n credential,\n expiresAtMillis: DateTime.toEpochMillis(session.expiresAt),\n },\n ],\n });\n\n const inspectProvenance = Effect.fn(\"Session.inspectProvenance\")(function* (\n session: Session,\n input: SessionAuthenticationProvenance,\n version: SessionCredentialVersion,\n ) {\n const provenance = yield* snapshotSessionAuthenticationProvenance(input).pipe(\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n const credentialVersion = yield* Schema.decodeEffect(SessionCredentialVersion)(version).pipe(\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n const original = provenance.evidence;\n const publicProofs = session.assurance.evidence;\n const ordinals = new Map<string, number>();\n const revisions = new Set(original.revision.credentials.map((item) => item.credentialId));\n\n if (\n revisions.size !== original.revision.credentials.length ||\n original.proofs.some((proof) => !revisions.has(proof.credentialId))\n )\n return yield* SessionInvalid.make({});\n for (const proof of original.proofs)\n if (!ordinals.has(proof.credentialId)) ordinals.set(proof.credentialId, ordinals.size);\n if (\n session.subjectId !== original.revision.subjectId ||\n session.securityRevision !== original.revision.securityRevision ||\n publicProofs === undefined ||\n publicProofs.length !== original.proofs.length ||\n original.proofs.some((proof, index) => {\n const actual = publicProofs[index];\n\n return (\n actual.method !== proof.method ||\n actual.credentialOrdinal !== ordinals.get(proof.credentialId) ||\n actual.userVerified !== proof.userVerified ||\n actual.phishingResistant !== proof.phishingResistant ||\n DateTime.toEpochMillis(actual.verifiedAt) !== DateTime.toEpochMillis(proof.verifiedAt) ||\n actual.factors.length !== proof.factors.length ||\n actual.factors.some((factor, i) => factor !== proof.factors[i])\n );\n })\n )\n return yield* SessionInvalid.make({});\n\n return Object.freeze({ session, provenance, credentialVersion });\n });\n\n const replacementSession = Effect.fn(\"Session.replacementSession\")(function* (\n source: Session,\n evidence: AuthenticationEvidence,\n assurance: AuthenticationAssurance,\n policy: SessionPolicy,\n sessionId: SessionId,\n ) {\n const now = yield* DateTime.now;\n\n const session = yield* projectSession({\n ...source,\n sessionId,\n subjectId: evidence.revision.subjectId,\n securityRevision: evidence.revision.securityRevision,\n assurance: AuthenticationAssurance.make({\n ...assurance,\n authenticatedAt: source.assurance.authenticatedAt,\n }),\n issuedAt: now,\n expiresAt: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(source.absoluteExpiresAt),\n DateTime.toEpochMillis(now) + policy.idleLifetimeMillis,\n ),\n ),\n });\n\n yield* validateSessionTimeline(source, policy);\n yield* validateSessionTimeline(session, policy);\n\n return session;\n });\n\n const statefulLayer = (configured: SessionPolicy) =>\n Layer.effectContext(\n Effect.gen(function* () {\n const policy = yield* validateSessionPolicy(configured, statefulCapabilities);\n const store = yield* StatefulSessionPersistence;\n const repository = yield* SessionRepository;\n const secrets = yield* makeSessionSecrets(moduleId);\n\n const services = yield* Effect.context<\n | Claims[\"EncodingServices\"]\n | Claims[\"DecodingServices\"]\n | LifecycleHooks\n | Context.Service.Identifier<typeof import(\"effect\").Crypto.Crypto>\n >();\n\n const validate = (session: Session) =>\n projectSession(session).pipe(\n Effect.provide(services),\n Effect.flatMap((value) =>\n validateSessionTimeline(value, policy).pipe(Effect.as(value)),\n ),\n );\n\n const inspectForStepUp = Effect.fn(\"StatefulSession.inspectForStepUp\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const digest = yield* secrets.digest(credential, \"bearer\");\n const record = yield* store.verify({ digest, now: yield* DateTime.now });\n\n const inspection = yield* inspectProvenance(\n yield* validate(record),\n record.provenance,\n record.credentialVersion,\n );\n\n return Object.freeze({\n inspection,\n guard: Object.freeze({ _tag: \"Stateful\" as const, digest, rowVersion: record.version }),\n });\n });\n\n const inspect = Effect.fn(\"StatefulSession.inspect\")(\n (credential: Redacted.Redacted<string>) =>\n inspectForStepUp(credential).pipe(Effect.map((source) => source.inspection)),\n );\n\n const verify = Effect.fn(\"StatefulSession.verify\")(\n (credential: Redacted.Redacted<string>) =>\n inspect(credential).pipe(Effect.map((value) => value.session)),\n );\n\n const strategy = SessionStrategy.of({\n policy,\n capabilities: statefulCapabilities,\n inspectForStepUp,\n inspect,\n verify,\n prepareEstablish: Effect.fn(\"StatefulSession.prepareEstablish\")(function* (\n input: Issuance,\n ) {\n input = { ...input, evidence: yield* snapshotAuthenticationEvidence(input.evidence) };\n const authority = yield* AuthenticationAuthority;\n const requirement = yield* authority.requirements(input.evidence);\n\n const assessed = yield* assessAuthentication(input.evidence, requirement).pipe(\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n if (!assessed.satisfied) return yield* SessionInvalid.make({});\n const now = yield* DateTime.now;\n\n const absoluteExpiresAt = DateTime.add(assessed.assurance.authenticatedAt, {\n milliseconds: policy.absoluteLifetimeMillis,\n });\n\n const expiresAt = DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(absoluteExpiresAt),\n DateTime.toEpochMillis(now) + policy.idleLifetimeMillis,\n ),\n );\n\n const credential = yield* secrets.generate();\n const digest = yield* secrets.digest(credential, \"bearer\");\n\n const base = {\n subjectId: input.evidence.revision.subjectId,\n securityRevision: input.evidence.revision.securityRevision,\n assurance: assessed.assurance,\n issuedAt: now,\n expiresAt,\n absoluteExpiresAt,\n claims: input.claims,\n digest,\n provenance: yield* snapshotSessionAuthenticationProvenance({\n evidence: input.evidence,\n }),\n credentialVersion: SessionCredentialVersion.make(\n Redacted.value(yield* secrets.generate()),\n ),\n };\n\n yield* validateSessionTimeline(base, policy);\n const event = yield* prepareHooks(\"sign-in\", base).pipe(Effect.provide(services));\n\n const creation = yield* prepareHooks(\"session-creation\", base).pipe(\n Effect.provide(services),\n );\n\n yield* validateSessionTimeline(base, policy);\n const commitNow = yield* DateTime.now;\n\n return yield* store.establish(\n { session: base, evidence: input.evidence, pending: input.pending, now: commitNow },\n (record, journal) => {\n journal.stage(event);\n journal.stage(creation);\n\n return journal.prepare(issue(record, credential));\n },\n );\n }),\n prepareRenew: Effect.fn(\"StatefulSession.prepareRenew\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const digest = yield* secrets.digest(credential, \"bearer\");\n const now = yield* DateTime.now;\n const record = yield* store.verify({ digest, now });\n\n const inspected = yield* inspectProvenance(\n yield* validate(record),\n record.provenance,\n record.credentialVersion,\n );\n\n const session = inspected.session;\n\n yield* checkRenewalDue(session, now, policy);\n const next = yield* secrets.generate();\n const nextDigest = yield* secrets.digest(next, \"bearer\");\n\n const nextCredentialVersion = SessionCredentialVersion.make(\n Redacted.value(yield* secrets.generate()),\n );\n\n const event = yield* prepareHooks(\"session-creation\", session).pipe(\n Effect.provide(services),\n );\n\n yield* validateSessionTimeline(session, policy);\n const commitNow = yield* DateTime.now;\n\n const nextExpiresAt = DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(session.absoluteExpiresAt),\n DateTime.toEpochMillis(now) + policy.idleLifetimeMillis,\n ),\n );\n\n return yield* store.rotate(\n {\n sessionId: session.sessionId,\n expectedDigest: digest,\n expectedVersion: record.version,\n expectedSecurityRevision: session.securityRevision,\n nextDigest,\n nextCredentialVersion,\n nextExpiresAt,\n now: commitNow,\n },\n (rotated, journal) => {\n journal.stage(event);\n\n return journal.prepare(issue(rotated, next));\n },\n );\n }),\n signOut: Effect.fn(\"StatefulSession.signOut\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const result = yield* Effect.gen(function* () {\n const digest = yield* secrets.digest(credential, \"bearer\");\n const event = yield* prepareHooks(\"sign-out\").pipe(Effect.provide(services));\n\n const receipt = yield* store.revokeDigest(digest, (revoked, journal) => {\n journal.stage(event);\n\n return journal.prepare({\n clearCredential: true as const,\n invalidation: revoked ? (\"revoked\" as const) : (\"already-invalid\" as const),\n });\n });\n\n return yield* readCommitted(receipt);\n }).pipe(reportSignOutFailure, Effect.result);\n\n return {\n value:\n result._tag === \"Failure\"\n ? result.failure._tag === \"SessionInvalid\"\n ? { clearCredential: true as const, invalidation: \"already-invalid\" as const }\n : SessionSignOutUnavailable.make({ clearCredential: true })\n : result.success,\n credentialCommands: [{ _tag: \"Clear\" as const, slot: \"session\" as const }],\n };\n }),\n list: repository.list,\n revoke: Effect.fn(\"StatefulSession.revoke\")(function* (session, sessionId) {\n const event = yield* prepareHooks(\"sign-out\", session).pipe(Effect.provide(services));\n\n return yield* readCommitted(\n yield* store.revoke(\n {\n subjectId: session.subjectId,\n sessionId,\n expectedSecurityRevision: session.securityRevision,\n },\n (_, journal) => {\n journal.stage(event);\n\n return journal.prepare(undefined);\n },\n ),\n );\n }),\n revokeAll: Effect.fn(\"StatefulSession.revokeAll\")(function* (session) {\n const event = yield* prepareHooks(\"sign-out\", session).pipe(Effect.provide(services));\n\n return yield* readCommitted(\n yield* store.revokeAll(\n {\n subjectId: session.subjectId,\n expectedSecurityRevision: session.securityRevision,\n },\n (_, journal) => {\n journal.stage(event);\n\n return journal.prepare(undefined);\n },\n ),\n );\n }),\n });\n\n const plan = Effect.fn(\"StatefulSession.planStepUpReplacement\")(function* (\n source: SessionStepUpSource<Claims[\"Type\"]>,\n evidence: AuthenticationEvidence,\n assurance: AuthenticationAssurance,\n ) {\n if (source.guard._tag !== \"Stateful\") return yield* SessionStepUpInvalid.make({});\n const credential = yield* secrets.generate();\n const nextDigest = yield* secrets.digest(credential, \"bearer\");\n\n const session = yield* replacementSession(\n source.inspection.session,\n evidence,\n assurance,\n policy,\n source.inspection.session.sessionId,\n );\n\n const inspection = yield* inspectProvenance(\n session,\n { evidence },\n SessionCredentialVersion.make(Redacted.value(yield* secrets.generate())),\n );\n\n return {\n credential,\n replacement: Object.freeze({\n _tag: \"Stateful\" as const,\n inspection,\n expectedDigest: source.guard.digest,\n expectedRowVersion: source.guard.rowVersion,\n nextDigest,\n }),\n };\n });\n\n return Context.make(SessionStrategy, strategy).pipe(Context.add(StepUpPlanner, { plan }));\n }),\n );\n\n const signedLayer = <Mode extends \"stateless\" | \"state-assisted\">(\n configured: SessionPolicy,\n keyring: SessionSigningKeyring,\n mode: Mode,\n ) => {\n const layer = Layer.effectContext(\n Effect.gen(function* () {\n const validity =\n mode === \"state-assisted\"\n ? Option.some(yield* SignedSessionValidity)\n : Option.none<ValidityPort>();\n\n const capabilities = Option.isSome(validity)\n ? stateAssistedCapabilities\n : statelessCapabilities;\n\n const policy = yield* validateSessionPolicy(configured, capabilities);\n const hooks = yield* LifecycleHooks;\n const secrets = yield* makeSessionSecrets(moduleId);\n\n const services = yield* Effect.context<\n | Claims[\"EncodingServices\"]\n | Claims[\"DecodingServices\"]\n | LifecycleHooks\n | Context.Service.Identifier<typeof import(\"effect\").Crypto.Crypto>\n >();\n\n const Envelope = Schema.Struct({\n version: Schema.Literal(2),\n moduleId: Schema.Literal(moduleId),\n issuer: Schema.String,\n audience: Schema.String,\n generation: Schema.Natural,\n session: Session,\n provenance: SessionAuthenticationProvenance,\n credentialVersion: SessionCredentialVersion,\n });\n\n const signing = yield* makeSessionSigningCodec(Envelope, keyring, policy.maximumTokenBytes);\n\n const encode = (inspection: Inspection) =>\n signing.encode({\n version: 2,\n moduleId,\n issuer: policy.issuer,\n audience: policy.audience,\n generation: policy.generation,\n ...inspection,\n });\n\n const inspect = Effect.fn(\"SignedSession.inspect\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const envelope = yield* signing.decode(credential);\n\n if (\n envelope.issuer !== policy.issuer ||\n envelope.audience !== policy.audience ||\n envelope.generation !== policy.generation\n )\n return yield* SessionInvalid.make({});\n yield* validateSessionTimeline(envelope.session, policy);\n if (Option.isSome(validity))\n yield* validity.value.verify(envelope.session, yield* DateTime.now);\n\n return yield* inspectProvenance(\n yield* projectSession(envelope.session),\n envelope.provenance,\n envelope.credentialVersion,\n );\n });\n\n const inspectForStepUp = Effect.fn(\"SignedSession.inspectForStepUp\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n return Object.freeze({\n inspection: yield* inspect(credential),\n guard: Object.freeze(\n Option.isSome(validity)\n ? { _tag: \"StateAssistedSigned\" as const }\n : { _tag: \"StatelessSigned\" as const },\n ),\n });\n });\n\n const verify = Effect.fn(\"SignedSession.verify\")((credential: Redacted.Redacted<string>) =>\n inspect(credential).pipe(Effect.map((value) => value.session)),\n );\n\n const strategy = SessionStrategy.of({\n policy,\n capabilities,\n inspectForStepUp,\n inspect,\n verify,\n prepareEstablish: Effect.fn(\"SignedSession.prepareEstablish\")(function* (\n input: Issuance,\n ) {\n input = { ...input, evidence: yield* snapshotAuthenticationEvidence(input.evidence) };\n const authority = yield* AuthenticationAuthority;\n const requirement = yield* authority.requirements(input.evidence);\n\n const assessed = yield* assessAuthentication(input.evidence, requirement).pipe(\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n if (!assessed.satisfied) return yield* SessionInvalid.make({});\n const now = yield* DateTime.now;\n\n const absoluteExpiresAt = DateTime.add(assessed.assurance.authenticatedAt, {\n milliseconds: policy.absoluteLifetimeMillis,\n });\n\n const session: Session = {\n sessionId: SessionId.make(Redacted.value(yield* secrets.generate())),\n subjectId: input.evidence.revision.subjectId,\n securityRevision: input.evidence.revision.securityRevision,\n assurance: assessed.assurance,\n issuedAt: now,\n expiresAt: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(absoluteExpiresAt),\n DateTime.toEpochMillis(now) + policy.idleLifetimeMillis,\n ),\n ),\n absoluteExpiresAt,\n claims: input.claims,\n };\n\n yield* validateSessionTimeline(session, policy);\n\n const provenance = yield* snapshotSessionAuthenticationProvenance({\n evidence: input.evidence,\n });\n\n const credentialVersion = SessionCredentialVersion.make(\n Redacted.value(yield* secrets.generate()),\n );\n\n const credential = yield* encode({ session, provenance, credentialVersion });\n const event = yield* prepareHooks(\"sign-in\", session).pipe(Effect.provide(services));\n\n const creation = yield* prepareHooks(\"session-creation\", session).pipe(\n Effect.provide(services),\n );\n\n yield* validateSessionTimeline(session, policy);\n\n return yield* authority.approve(\n {\n evidence: input.evidence,\n pending: input.pending,\n now: yield* DateTime.now,\n expiresAt: session.expiresAt,\n absoluteExpiresAt: session.absoluteExpiresAt,\n },\n (_, journal) => {\n journal.stage(event);\n journal.stage(creation);\n\n return journal.prepare(issue(session, credential));\n },\n );\n }),\n prepareRenew: Effect.fn(\"SignedSession.prepareRenew\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const source = yield* inspect(credential);\n const session = source.session;\n const now = yield* DateTime.now;\n\n yield* checkRenewalDue(session, now, policy);\n\n const renewed = {\n ...session,\n issuedAt: now,\n expiresAt: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(session.absoluteExpiresAt),\n DateTime.toEpochMillis(now) + policy.idleLifetimeMillis,\n ),\n ),\n };\n\n const next = yield* encode({\n session: renewed,\n provenance: source.provenance,\n credentialVersion: SessionCredentialVersion.make(\n Redacted.value(yield* secrets.generate()),\n ),\n });\n\n const event = yield* prepareHooks(\"session-creation\", renewed).pipe(\n Effect.provide(services),\n );\n\n yield* validateSessionTimeline(session, policy);\n yield* validateSessionTimeline(renewed, policy);\n if (Option.isSome(validity)) yield* validity.value.verify(session, yield* DateTime.now);\n\n // Signed renewal has no write/transaction. The original absolute bound and authentication time survive replay.\n const result = yield* coordinateCommit(\n (journal) =>\n Effect.sync(() => {\n journal.stage(event);\n\n return journal.prepare(issue(renewed, next));\n }),\n { mode: \"interactive\" },\n ).pipe(\n Effect.provideService(LifecycleHooks, hooks),\n Effect.mapError(() => SessionUnavailable.make({})),\n );\n\n return result.value;\n }),\n signOut: Effect.fn(\"SignedSession.signOut\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n const outcome = yield* Effect.gen(function* () {\n const event = yield* prepareHooks(\"sign-out\").pipe(Effect.provide(services));\n\n if (Option.isSome(validity)) {\n const session = yield* verify(credential);\n\n const receipt = yield* validity.value.revoke(\n {\n subjectId: session.subjectId,\n sessionId: session.sessionId,\n absoluteExpiresAt: session.absoluteExpiresAt,\n expectedSecurityRevision: session.securityRevision,\n },\n (_, journal) => {\n journal.stage(event);\n\n return journal.prepare({\n clearCredential: true as const,\n invalidation: \"revoked\" as const,\n });\n },\n );\n\n return yield* readCommitted(receipt);\n }\n\n const result = yield* coordinateCommit(\n (journal) =>\n Effect.sync(() => {\n journal.stage(event);\n\n return journal.prepare({\n clearCredential: true as const,\n invalidation: \"client-only\" as const,\n });\n }),\n { mode: \"interactive\" },\n ).pipe(\n Effect.provideService(LifecycleHooks, hooks),\n Effect.mapError(() => SessionUnavailable.make({})),\n );\n\n return yield* readCommitted(result.value);\n }).pipe(reportSignOutFailure, Effect.result);\n\n const value: SignOutResult =\n outcome._tag === \"Failure\"\n ? outcome.failure._tag === \"SessionInvalid\"\n ? { clearCredential: true, invalidation: \"already-invalid\" }\n : SessionSignOutUnavailable.make({ clearCredential: true })\n : outcome.success;\n\n return {\n value,\n credentialCommands: [{ _tag: \"Clear\" as const, slot: \"session\" as const }],\n };\n }),\n list: () => unsupported(\"session-listing\"),\n revoke: Effect.fn(\"SignedSession.revoke\")(function* (session, sessionId) {\n if (Option.isNone(validity)) return yield* unsupported(\"per-session-revocation\");\n const event = yield* prepareHooks(\"sign-out\", session).pipe(Effect.provide(services));\n\n return yield* readCommitted(\n yield* validity.value.revoke(\n {\n subjectId: session.subjectId,\n sessionId,\n absoluteExpiresAt: DateTime.add(yield* DateTime.now, {\n milliseconds: policy.maximumIssuedAbsoluteLifetimeMillis,\n }),\n expectedSecurityRevision: session.securityRevision,\n },\n (_, journal) => {\n journal.stage(event);\n\n return journal.prepare(undefined);\n },\n ),\n );\n }),\n revokeAll: Effect.fn(\"SignedSession.revokeAll\")(function* (session) {\n if (Option.isNone(validity)) return yield* unsupported(\"subject-invalidation\");\n const event = yield* prepareHooks(\"sign-out\", session).pipe(Effect.provide(services));\n\n return yield* readCommitted(\n yield* validity.value.revokeAll(\n {\n subjectId: session.subjectId,\n expectedSecurityRevision: session.securityRevision,\n },\n (_, journal) => {\n journal.stage(event);\n\n return journal.prepare(undefined);\n },\n ),\n );\n }),\n });\n\n const plan = Effect.fn(\"SignedSession.planStepUpReplacement\")(function* (\n source: SessionStepUpSource<Claims[\"Type\"]>,\n evidence: AuthenticationEvidence,\n assurance: AuthenticationAssurance,\n ) {\n const expectedTag = Option.isSome(validity) ? \"StateAssistedSigned\" : \"StatelessSigned\";\n\n if (source.guard._tag !== expectedTag) return yield* SessionStepUpInvalid.make({});\n\n const session = yield* replacementSession(\n source.inspection.session,\n evidence,\n assurance,\n policy,\n SessionId.make(Redacted.value(yield* secrets.generate())),\n );\n\n const inspection = yield* inspectProvenance(\n session,\n { evidence },\n SessionCredentialVersion.make(Redacted.value(yield* secrets.generate())),\n );\n\n const credential = yield* encode(inspection);\n\n const replacement: SessionStepUpReplacement<Claims[\"Type\"]> = Option.isSome(validity)\n ? Object.freeze({\n _tag: \"StateAssistedSigned\",\n inspection,\n tombstoneSessionId: source.inspection.session.sessionId,\n tombstoneUntil: source.inspection.session.absoluteExpiresAt,\n })\n : Object.freeze({ _tag: \"StatelessSigned\", inspection });\n\n return { credential, replacement };\n });\n\n return Context.make(SessionStrategy, strategy).pipe(Context.add(StepUpPlanner, { plan }));\n }),\n );\n\n // Mode is the literal selected by the two public constructors below.\n // @effect-diagnostics-next-line unsafeEffectTypeAssertion:off\n return layer as Layer.Layer<\n Layer.Success<typeof layer>,\n Layer.Error<typeof layer>,\n | Exclude<\n Layer.Services<typeof layer>,\n Context.Service.Identifier<typeof SignedSessionValidity>\n >\n | (Mode extends \"state-assisted\"\n ? Context.Service.Identifier<typeof SignedSessionValidity>\n : never)\n >;\n };\n\n const statelessLayer = (policy: SessionPolicy, keyring: SessionSigningKeyring) =>\n signedLayer(policy, keyring, \"stateless\");\n\n const stateAssistedLayer = (policy: SessionPolicy, keyring: SessionSigningKeyring) =>\n signedLayer(policy, keyring, \"state-assisted\");\n\n const AuthenticationCompletion = Context.Service<\n ModuleService<Id, \"completion\", Claims[\"Type\"]>,\n {\n readonly prepare: (input: Issuance) => Prepared<CompletionResult>;\n /** Internal-only lookup authenticated by the private pending bearer. No claims\n * or normal session authority; final preparePending still rechecks/consumes. */\n readonly pendingContext: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<PendingAuthenticationContext, Failure>;\n /** Charge a rejected additional factor without caller-supplied binding data.\n * Read the returned receipt before reporting the rejection to its caller. */\n readonly rejectPendingCredential: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<PreparedCommit<{ readonly _tag: \"Rejected\" }>, Failure>;\n /** Only method implementations call this after independently verifying the next proof. */\n readonly preparePending: (input: {\n readonly credential: Redacted.Redacted<string>;\n readonly additional: AuthenticationEvidence;\n }) => Prepared<CompletionResult>;\n readonly rejectPending: (input: {\n readonly credential: Redacted.Redacted<string>;\n readonly bindingDigest: TokenDigest;\n }) => Effect.Effect<PreparedCommit<{ readonly _tag: \"Rejected\" }>, Failure>;\n }\n >(`effect-auth/sessions/${moduleId}/Completion`);\n\n type PendingConfiguration = {\n readonly pendingLifetimeMillis: number;\n readonly attemptLimit: number;\n };\n\n const makeCompletionLayer = <R>(\n inputConfiguration: PendingConfiguration | undefined,\n pending: Effect.Effect<Option.Option<PendingPort<Claims[\"Type\"]>>, never, R>,\n ): CompletionLayer<Id, Claims, R> =>\n Layer.effect(\n AuthenticationCompletion,\n Effect.gen(function* () {\n const configuration =\n inputConfiguration === undefined\n ? undefined\n : Object.freeze(\n yield* Schema.decodeEffect(\n Schema.Struct({\n pendingLifetimeMillis: Schema.Int.check(\n Schema.isBetween({ minimum: 1, maximum: 900000 }),\n ),\n attemptLimit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 })),\n }),\n )(inputConfiguration).pipe(\n Effect.mapError(() =>\n SessionConfigurationError.make({ reason: \"pending-authentication\" }),\n ),\n ),\n );\n\n const pendingPort = yield* pending;\n const strategy = yield* SessionStrategy;\n const authority = yield* AuthenticationAuthority;\n const secrets = yield* makeSessionSecrets(moduleId);\n\n const claimServices = yield* Effect.context<\n Claims[\"DecodingServices\"] | Claims[\"EncodingServices\"]\n >();\n\n const codec = Schema.toCodecIso(ClaimsCodec);\n\n const projectClaims = (value: Claims[\"Type\"]) =>\n Schema.encodeEffect(codec)(value).pipe(\n Effect.flatMap(Schema.decodeEffect(codec)),\n Effect.provide(claimServices),\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n const completed = (\n receipt: PreparedCommit<AuthOperationResult<Session>>,\n ): PreparedCommit<AuthOperationResult<CompletionResult>> => ({\n _tag: \"PreparedCommit\",\n read: receipt.read.pipe(\n Effect.map(({ value, credentialCommands }) => ({\n value: { _tag: \"Authenticated\" as const, session: value },\n credentialCommands,\n })),\n ),\n });\n\n const prepare: (input: Issuance) => Prepared<CompletionResult> = Effect.fn(\n \"AuthenticationCompletion.prepare\",\n )(function* (input: Issuance) {\n input = { ...input, evidence: yield* snapshotAuthenticationEvidence(input.evidence) };\n const checkedClaims = yield* projectClaims(input.claims);\n const requirement = yield* authority.requirements(input.evidence);\n\n const assessed = yield* assessAuthentication(input.evidence, requirement).pipe(\n Effect.mapError(() => SessionInvalid.make({})),\n );\n\n if (assessed.satisfied)\n return completed(\n yield* strategy\n .prepareEstablish({ ...input, claims: checkedClaims })\n .pipe(Effect.provideService(AuthenticationAuthority, authority)),\n );\n if (\n input.pending !== undefined ||\n configuration === undefined ||\n Option.isNone(pendingPort)\n )\n return yield* SessionCapabilityUnsupported.make({\n capability: \"required-additional-authentication\",\n });\n const now = yield* DateTime.now;\n\n const expiresAt = DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(now) + configuration.pendingLifetimeMillis,\n DateTime.toEpochMillis(assessed.assurance.authenticatedAt) +\n requirement.maximumAgeMillis,\n ),\n );\n\n const credential = yield* secrets.generate();\n const digest = yield* secrets.digest(credential, \"pending\");\n\n return yield* pendingPort.value.create(\n {\n digest,\n evidence: input.evidence,\n claims: checkedClaims,\n expiresAt,\n attemptLimit: configuration.attemptLimit,\n },\n now,\n (record, journal) =>\n journal.prepare({\n value: { _tag: \"PendingAuthentication\" as const, expiresAt: record.expiresAt },\n credentialCommands: [\n {\n _tag: \"Issue\" as const,\n slot: \"pending-proof\" as const,\n credential,\n expiresAtMillis: DateTime.toEpochMillis(record.expiresAt),\n },\n ],\n }),\n );\n });\n\n const pendingContext = Effect.fn(\"AuthenticationCompletion.pendingContext\")(function* (\n credential: Redacted.Redacted<string>,\n ) {\n if (Option.isNone(pendingPort))\n return yield* SessionCapabilityUnsupported.make({\n capability: \"pending-authentication\",\n });\n const digest = yield* secrets.digest(credential, \"pending\");\n\n return yield* snapshotPendingAuthenticationContext(\n yield* pendingPort.value.context({\n digest,\n now: yield* DateTime.now,\n }),\n );\n });\n\n return AuthenticationCompletion.of({\n prepare,\n pendingContext,\n rejectPendingCredential: Effect.fn(\"AuthenticationCompletion.rejectPendingCredential\")(\n function* (credential) {\n if (Option.isNone(pendingPort))\n return yield* SessionCapabilityUnsupported.make({\n capability: \"pending-authentication\",\n });\n const digest = yield* secrets.digest(credential, \"pending\");\n\n const context = yield* snapshotPendingAuthenticationContext(\n yield* pendingPort.value.context({ digest, now: yield* DateTime.now }),\n );\n\n return yield* pendingPort.value.reject(\n { digest, bindingDigest: context.bindingDigest, now: yield* DateTime.now },\n (decision, journal) => journal.prepare(decision),\n );\n },\n ),\n preparePending: Effect.fn(\"AuthenticationCompletion.preparePending\")(function* (input) {\n if (Option.isNone(pendingPort))\n return yield* SessionCapabilityUnsupported.make({\n capability: \"pending-authentication\",\n });\n const digest = yield* secrets.digest(input.credential, \"pending\");\n\n const record = yield* pendingPort.value.read({\n digest,\n bindingDigest: input.additional.bindingDigest,\n now: yield* DateTime.now,\n });\n\n const evidence = yield* combineAuthenticationEvidence(\n record.evidence,\n input.additional,\n );\n\n const receipt = yield* prepare({\n evidence,\n claims: record.claims,\n pending: {\n digest,\n bindingDigest: evidence.bindingDigest,\n flowId: evidence.flowId,\n version: record.version,\n },\n });\n\n return {\n _tag: \"PreparedCommit\" as const,\n read: receipt.read.pipe(\n Effect.map((result) => ({\n value: result.value,\n credentialCommands: [\n ...result.credentialCommands,\n { _tag: \"Clear\" as const, slot: \"pending-proof\" as const },\n ],\n })),\n ),\n };\n }),\n rejectPending: Effect.fn(\"AuthenticationCompletion.rejectPending\")(function* (input) {\n if (Option.isNone(pendingPort))\n return yield* SessionCapabilityUnsupported.make({\n capability: \"pending-authentication\",\n });\n\n return yield* pendingPort.value.reject(\n {\n digest: yield* secrets.digest(input.credential, \"pending\"),\n bindingDigest: input.bindingDigest,\n now: yield* DateTime.now,\n },\n (decision, journal) => journal.prepare(decision),\n );\n }),\n });\n }),\n );\n\n function completionLayer(): CompletionLayer<Id, Claims>;\n function completionLayer(\n configuration: PendingConfiguration,\n ): CompletionLayer<Id, Claims, ModuleService<Id, \"pending\", Claims[\"Type\"]>>;\n function completionLayer(configuration?: PendingConfiguration) {\n const captured = configuration === undefined ? undefined : Object.freeze({ ...configuration });\n\n return makeCompletionLayer(\n captured,\n captured === undefined\n ? Effect.serviceOption(PendingAuthentication)\n : Effect.map(PendingAuthentication, Option.some),\n );\n }\n\n const SessionStepUp = Context.Service<\n ModuleService<Id, \"step-up\", Claims[\"Type\"]>,\n {\n readonly prepareBegin: (input: {\n readonly sourceCredential: Redacted.Redacted<string>;\n readonly profileId: SessionStepUpProfileId;\n }) => Prepared<StepUpPending>;\n readonly context: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<PendingAuthenticationContext, Failure>;\n readonly rejectCredential: (\n credential: Redacted.Redacted<string>,\n ) => Effect.Effect<PreparedCommit<{ readonly _tag: \"Rejected\" }>, Failure>;\n readonly prepareComplete: (input: {\n readonly sourceCredential: Redacted.Redacted<string>;\n readonly stepUpCredential: Redacted.Redacted<string>;\n readonly additional: AuthenticationEvidence;\n }) => Prepared<Session>;\n }\n >(`effect-auth/sessions/${moduleId}/StepUp`);\n\n const freezeInstant = (input: DateTime.Utc) => {\n const copy = DateTime.makeUnsafe(DateTime.toEpochMillis(input));\n\n Object.freeze(DateTime.toPartsUtc(copy));\n\n return Object.freeze(copy);\n };\n\n const snapshotRequirement = (input: AuthenticationRequirement) =>\n Object.freeze({\n ...input,\n alternatives: Object.freeze(\n EffectArray.map(input.alternatives, (alternative) =>\n Object.freeze({\n ...alternative,\n factors: Object.freeze([...alternative.factors]),\n }),\n ),\n ),\n });\n\n const boundedRequirement = (input: AuthenticationRequirement) =>\n Array.isArray(input?.alternatives) &&\n input.alternatives.length > 0 &&\n input.alternatives.length <= 16 &&\n input.alternatives.every(\n (alternative) => Array.isArray(alternative?.factors) && alternative.factors.length <= 3,\n );\n\n const readRequirement = (input: AuthenticationRequirement) =>\n boundedRequirement(input)\n ? Schema.decodeEffect(SessionStepUpRequirement)(input).pipe(\n Effect.map(snapshotRequirement),\n Effect.mapError(() => SessionUnavailable.make({})),\n )\n : Effect.fail(SessionUnavailable.make({}));\n\n const intentCodec = Schema.toCodecJson(Schema.toType(SessionStepUpIntent));\n\n const snapshotIntent = Effect.fn(\"SessionStepUp.snapshotIntent\")(function* (\n input: SessionStepUpIntent,\n ) {\n if (\n !Array.isArray(input?.revision?.credentials) ||\n input.revision.credentials.length > 64 ||\n !boundedRequirement(input?.requirement)\n )\n return yield* SessionStepUpInvalid.make({});\n\n const value = yield* Schema.encodeEffect(intentCodec)(input).pipe(\n Effect.flatMap(Schema.decodeEffect(intentCodec)),\n Effect.mapError(() => SessionStepUpInvalid.make({})),\n );\n\n return Object.freeze({\n ...value,\n revision: Object.freeze({\n ...value.revision,\n credentials: Object.freeze(\n value.revision.credentials.map((item) => Object.freeze({ ...item })),\n ),\n }),\n requirement: snapshotRequirement(value.requirement),\n sourceAuthenticatedAt: freezeInstant(value.sourceAuthenticatedAt),\n sourceExpiresAt: freezeInstant(value.sourceExpiresAt),\n sourceAbsoluteExpiresAt: freezeInstant(value.sourceAbsoluteExpiresAt),\n expiresAt: freezeInstant(value.expiresAt),\n });\n });\n\n const inspectionCodec = Schema.toCodecJson(\n Schema.toType(\n Schema.Struct({\n session: Session,\n provenance: SessionAuthenticationProvenance,\n credentialVersion: SessionCredentialVersion,\n }),\n ),\n );\n\n // Only detached schema Type values reach this helper. DateTime caches must be\n // materialized before freezing; consumer collections are detached by the codec.\n const freezeGraph = <A>(value: A): A => {\n if (value !== null && typeof value === \"object\") {\n if (DateTime.isDateTime(value) && DateTime.isUtc(value)) {\n Object.freeze(DateTime.toPartsUtc(value));\n Object.freeze(value);\n } else if (\n Array.isArray(value) ||\n Object.getPrototypeOf(value) === Object.prototype ||\n Object.getPrototypeOf(value) === null ||\n Schema.is(AuthenticationAssurance)(value)\n ) {\n for (const child of Object.values(value)) freezeGraph(child);\n Object.freeze(value);\n }\n // Consumer typed arrays, collections and opaque class instances stay valid\n // Type values. Detachment, not Object.freeze, isolates their mutable storage.\n }\n\n return value;\n };\n\n const snapshotInspection = (input: Inspection) =>\n Schema.encodeEffect(inspectionCodec)(input).pipe(\n Effect.flatMap(Schema.decodeEffect(inspectionCodec)),\n Effect.map(freezeGraph),\n Effect.mapError(() => SessionStepUpInvalid.make({})),\n );\n\n const requirementEncoding = Schema.encodeSync(Schema.fromJsonString(AuthenticationRequirement));\n\n const profileEncoding = Schema.encodeSync(\n Schema.fromJsonString(\n Schema.Tuple([\n Schema.Literal(\"effect-auth/session-step-up/profile/v1\"),\n Schema.String,\n SessionStepUpProfile,\n ]),\n ),\n );\n\n /** Configuration is decoded and detached before asynchronous hashing or Layer building. */\n const stepUpLayer = (configured: ReadonlyArray<SessionStepUpProfile>) => {\n const decoded = Schema.decodeResult(\n Schema.Array(SessionStepUpProfile).check(Schema.isMinLength(1), Schema.isMaxLength(64)),\n )(\n Array.isArray(configured) &&\n configured.length <= 64 &&\n configured.every((profile) => boundedRequirement(profile?.requirement))\n ? configured\n : [],\n );\n\n const profiles = Result.isSuccess(decoded)\n ? Object.freeze(\n decoded.success.map((profile) =>\n Object.freeze({\n ...profile,\n requirement: snapshotRequirement(profile.requirement),\n }),\n ),\n )\n : undefined;\n\n return Layer.effect(\n SessionStepUp,\n Effect.gen(function* () {\n if (\n profiles === undefined ||\n new Set(profiles.map((profile) => profile.profileId)).size !== profiles.length\n )\n return yield* SessionConfigurationError.make({ reason: \"step-up\" });\n const store = yield* SessionStepUpPersistence;\n const strategy = yield* SessionStrategy;\n const planner = yield* StepUpPlanner;\n const authority = yield* AuthenticationAuthority;\n const crypto = yield* Crypto.Crypto;\n const secrets = yield* makeSessionSecrets(moduleId);\n const hooks = yield* Effect.context<LifecycleHooks | Crypto.Crypto>();\n\n const registry = new Map<\n SessionStepUpProfileId,\n { readonly profile: SessionStepUpProfile; readonly digest: TokenDigest }\n >();\n\n for (const profile of profiles) {\n const bytes = new TextEncoder().encode(\n profileEncoding([\"effect-auth/session-step-up/profile/v1\", moduleId, profile]),\n );\n\n const digest = yield* crypto\n .digest(\"SHA-256\", bytes)\n .pipe(Effect.mapError(() => SessionUnavailable.make({})));\n\n registry.set(\n profile.profileId,\n Object.freeze({ profile, digest: TokenDigest.make(Encoding.encodeBase64Url(digest)) }),\n );\n }\n\n const assess = (evidence: AuthenticationEvidence, requirement: AuthenticationRequirement) =>\n assessAuthentication(evidence, requirement).pipe(\n Effect.catchTag(\"SessionConfigurationError\", () =>\n Effect.fail(SessionUnavailable.make({})),\n ),\n );\n\n const digestCredential = (credential: Redacted.Redacted<string>) =>\n secrets\n .digest(credential, \"step-up\")\n .pipe(\n Effect.catchTag(\"SessionInvalid\", () => Effect.fail(SessionStepUpInvalid.make({}))),\n );\n\n const inspectSource = (credential: Redacted.Redacted<string>) =>\n strategy.inspectForStepUp(credential).pipe(\n Effect.flatMap((source) =>\n snapshotInspection(source.inspection).pipe(\n Effect.map((inspection) =>\n Object.freeze({ inspection, guard: Object.freeze({ ...source.guard }) }),\n ),\n ),\n ),\n Effect.catchTag(\"SessionInvalid\", () => Effect.fail(SessionStepUpInvalid.make({}))),\n );\n\n const readIntent = Effect.fn(\"SessionStepUp.readIntent\")(function* (\n digest: TokenDigest,\n bindingDigest: TokenDigest,\n ) {\n const intent = yield* snapshotIntent(\n yield* store.read({ digest, bindingDigest, now: yield* DateTime.now }),\n );\n\n const configured = registry.get(intent.profileId);\n const now = DateTime.toEpochMillis(yield* DateTime.now);\n\n if (\n intent.digest !== digest ||\n intent.bindingDigest !== bindingDigest ||\n configured === undefined ||\n intent.profileGeneration !== configured.profile.generation ||\n intent.profileDigest !== configured.digest ||\n requirementEncoding(intent.requirement) !==\n requirementEncoding(configured.profile.requirement) ||\n intent.attemptLimit !== configured.profile.attemptLimit ||\n now >= DateTime.toEpochMillis(intent.expiresAt) ||\n DateTime.toEpochMillis(intent.expiresAt) >\n DateTime.toEpochMillis(intent.sourceExpiresAt) ||\n DateTime.toEpochMillis(intent.sourceExpiresAt) >\n DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt)\n )\n return yield* SessionStepUpInvalid.make({});\n\n return intent;\n });\n\n const matchSource = (\n intent: SessionStepUpIntent,\n source: SessionStepUpSource<Claims[\"Type\"]>,\n ) => {\n const { session, credentialVersion, provenance } = source.inspection;\n const revision = provenance.evidence.revision;\n\n const sameRevisions =\n revision.credentials.length === intent.revision.credentials.length &&\n revision.credentials.every((item) =>\n intent.revision.credentials.some(\n (expected) =>\n expected.credentialId === item.credentialId &&\n expected.revision === item.revision,\n ),\n );\n\n return (\n intent.sourceKind === source.guard._tag &&\n intent.sourceSessionId === session.sessionId &&\n intent.sourceCredentialVersion === credentialVersion &&\n intent.revision.subjectId === revision.subjectId &&\n intent.revision.securityRevision === revision.securityRevision &&\n sameRevisions &&\n DateTime.toEpochMillis(intent.sourceAuthenticatedAt) ===\n DateTime.toEpochMillis(session.assurance.authenticatedAt) &&\n DateTime.toEpochMillis(intent.sourceExpiresAt) ===\n DateTime.toEpochMillis(session.expiresAt) &&\n DateTime.toEpochMillis(intent.sourceAbsoluteExpiresAt) ===\n DateTime.toEpochMillis(session.absoluteExpiresAt)\n );\n };\n\n return SessionStepUp.of({\n prepareBegin: Effect.fn(\"SessionStepUp.prepareBegin\")(function* (input) {\n const configured = registry.get(input.profileId);\n\n if (configured === undefined) return yield* SessionStepUpInvalid.make({});\n const source = yield* inspectSource(input.sourceCredential);\n const evidence = source.inspection.provenance.evidence;\n\n // requirements checks current status/revisions but does not require the\n // old source proofs to satisfy the new profile before requesting it.\n yield* readRequirement(yield* authority.requirements(evidence));\n const credential = yield* secrets.generate();\n const digest = yield* digestCredential(credential);\n\n const bindingDigest = yield* secrets.digest(\n yield* secrets.generate(),\n \"step-up-binding\",\n );\n\n const flowId = AuthenticationFlowId.make(Redacted.value(yield* secrets.generate()));\n const now = yield* DateTime.now;\n const session = source.inspection.session;\n\n yield* validateSessionTimeline(session, strategy.policy);\n\n const expiresAt = freezeInstant(\n DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(now) + configured.profile.lifetimeMillis,\n DateTime.toEpochMillis(session.expiresAt),\n DateTime.toEpochMillis(session.absoluteExpiresAt),\n ),\n ),\n );\n\n const intent: Omit<SessionStepUpIntent, \"version\"> = Object.freeze({\n _tag: \"SessionStepUpIntent\",\n digest,\n flowId,\n bindingDigest,\n revision: evidence.revision,\n sourceKind: source.guard._tag,\n sourceSessionId: session.sessionId,\n sourceCredentialVersion: source.inspection.credentialVersion,\n sourceAuthenticatedAt: freezeInstant(session.assurance.authenticatedAt),\n sourceExpiresAt: freezeInstant(session.expiresAt),\n sourceAbsoluteExpiresAt: freezeInstant(session.absoluteExpiresAt),\n profileId: configured.profile.profileId,\n profileGeneration: configured.profile.generation,\n profileDigest: configured.digest,\n requirement: configured.profile.requirement,\n expiresAt,\n attemptLimit: configured.profile.attemptLimit,\n });\n\n return yield* store.create(intent, now, (_, journal) =>\n journal.prepare({\n value: { _tag: \"StepUpPending\" as const, profileId: intent.profileId, expiresAt },\n credentialCommands: [\n {\n _tag: \"Issue\" as const,\n slot: \"session-step-up\" as const,\n credential,\n expiresAtMillis: DateTime.toEpochMillis(expiresAt),\n },\n ],\n }),\n );\n }),\n context: Effect.fn(\"SessionStepUp.context\")(function* (credential) {\n const digest = yield* digestCredential(credential);\n\n return yield* snapshotPendingAuthenticationContext(\n yield* store.context({ digest, now: yield* DateTime.now }),\n ).pipe(\n Effect.catchTag(\"PendingAuthenticationInvalid\", () =>\n Effect.fail(SessionStepUpInvalid.make({})),\n ),\n );\n }),\n rejectCredential: Effect.fn(\"SessionStepUp.rejectCredential\")(function* (credential) {\n const digest = yield* digestCredential(credential);\n\n return yield* store.reject({ digest, now: yield* DateTime.now }, (decision, journal) =>\n journal.prepare(decision),\n );\n }),\n prepareComplete: Effect.fn(\"SessionStepUp.prepareComplete\")(function* (input) {\n const additional = yield* snapshotAuthenticationEvidence(input.additional);\n const digest = yield* digestCredential(input.stepUpCredential);\n const intent = yield* readIntent(digest, additional.bindingDigest);\n const source = yield* inspectSource(input.sourceCredential);\n\n if (!matchSource(intent, source)) return yield* SessionStepUpInvalid.make({});\n const original = source.inspection.provenance.evidence;\n\n const evidence = yield* snapshotAuthenticationEvidence(\n yield* combineAuthenticationEvidence(\n {\n ...original,\n flowId: intent.flowId,\n bindingDigest: intent.bindingDigest,\n },\n additional,\n ).pipe(\n Effect.catchTag(\"PendingAuthenticationInvalid\", () =>\n Effect.fail(SessionStepUpInvalid.make({})),\n ),\n ),\n );\n\n const requirement = yield* readRequirement(yield* authority.requirements(evidence));\n const base = yield* assess(evidence, requirement);\n const profile = yield* assess(evidence, intent.requirement);\n\n if (!base.satisfied || !profile.satisfied) return yield* SessionStepUpInvalid.make({});\n const generated = yield* planner.plan(source, evidence, base.assurance);\n\n const replacement = Object.freeze({\n ...generated.replacement,\n inspection: yield* snapshotInspection(generated.replacement.inspection),\n });\n\n // Retain a separate private output graph: a consumer owner cannot alter\n // the credential's paired public value through its persistence plan.\n const output = yield* snapshotInspection(generated.replacement.inspection);\n const planned = { credential: generated.credential, replacement };\n\n if (planned.replacement._tag !== intent.sourceKind)\n return yield* SessionStepUpInvalid.make({});\n\n const event = yield* prepareHooks(\n \"session-creation\",\n planned.replacement.inspection.session,\n ).pipe(Effect.provide(hooks));\n\n // Hooks may suspend. Re-read source authority and assess both independent\n // policies again; the native owner must repeat them at its commit clock.\n const current = yield* inspectSource(input.sourceCredential);\n\n if (\n !matchSource(intent, current) ||\n (source.guard._tag === \"Stateful\" &&\n (current.guard._tag !== \"Stateful\" ||\n source.guard.digest !== current.guard.digest ||\n source.guard.rowVersion !== current.guard.rowVersion))\n )\n return yield* SessionStepUpInvalid.make({});\n\n const currentRequirement = yield* readRequirement(\n yield* authority.requirements(evidence),\n );\n\n if (\n !(yield* assess(evidence, currentRequirement)).satisfied ||\n !(yield* assess(evidence, intent.requirement)).satisfied\n )\n return yield* SessionStepUpInvalid.make({});\n yield* validateSessionTimeline(planned.replacement.inspection.session, strategy.policy);\n const now = yield* DateTime.now;\n\n if (DateTime.toEpochMillis(now) >= DateTime.toEpochMillis(intent.expiresAt))\n return yield* SessionStepUpInvalid.make({});\n\n const plan: SessionStepUpCompletionPlan<Claims[\"Type\"]> = Object.freeze({\n intent,\n source: current,\n evidence,\n baseRequirement: currentRequirement,\n profileRequirement: intent.requirement,\n now: freezeInstant(now),\n replacement: planned.replacement,\n });\n\n return yield* store.complete(plan, (_, journal) => {\n const result = issue(output.session, planned.credential);\n\n journal.stage(event);\n\n return journal.prepare({\n ...result,\n credentialCommands: [\n ...result.credentialCommands,\n { _tag: \"Clear\" as const, slot: \"session-step-up\" as const },\n ],\n });\n });\n }),\n });\n }),\n );\n };\n\n const { Begin: StepUpBegin, Complete: StepUpComplete, Reject: StepUpReject } = stepUpOperations;\n\n const stepUpHandlersLayer = Layer.mergeAll(\n StepUpBegin.credentialHandlerLayer(\n Effect.fn(\"SessionStepUp.Begin\")(function* (input, context) {\n yield* checkNoAmbientCommit();\n const caller = yield* requireAuthenticated(context);\n const source = yield* (yield* SessionStrategy).inspectForStepUp(input.sourceCredential);\n\n if (\n caller.subjectId !== source.inspection.session.subjectId ||\n caller.sessionId !== source.inspection.session.sessionId\n )\n return yield* SessionStepUpInvalid.make({});\n\n return yield* readCommitted(yield* (yield* SessionStepUp).prepareBegin(input));\n }),\n ),\n StepUpComplete.credentialHandlerLayer(\n Effect.fn(\"SessionStepUp.Complete\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(yield* (yield* SessionStepUp).prepareComplete(input));\n }),\n ),\n StepUpReject.handlerLayer(\n Effect.fn(\"SessionStepUp.Reject\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(\n yield* (yield* SessionStepUp).rejectCredential(input.stepUpCredential),\n );\n }),\n ),\n );\n\n const {\n Complete,\n CompletePending,\n RejectPending,\n Capabilities,\n Verify,\n Renew,\n SignOut,\n List,\n Revoke,\n RevokeAll,\n } = operations;\n\n const capabilitiesHandlerLayer = Capabilities.handlerLayer(\n Effect.fn(\"Session.Capabilities\")(function* () {\n return (yield* SessionStrategy).capabilities;\n }),\n );\n\n /** Verification, renewal and sign-out need no authentication-completion authority. */\n const sessionHandlersLayer = Layer.mergeAll(\n Verify.handlerLayer(\n Effect.fn(\"Session.Verify\")(function* (input) {\n return yield* (yield* SessionStrategy).verify(input.credential);\n }),\n ),\n Renew.credentialHandlerLayer(\n Effect.fn(\"Session.Renew\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(yield* (yield* SessionStrategy).prepareRenew(input.credential));\n }),\n ),\n SignOut.credentialHandlerLayer(\n Effect.fn(\"Session.SignOut\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* (yield* SessionStrategy).signOut(input.credential);\n }),\n ),\n );\n\n const handlersLayer = (management: AssuranceRequirement) => {\n management = Object.freeze({\n ...management,\n factors:\n management.factors === undefined ? undefined : Object.freeze([...management.factors]),\n });\n\n return Layer.mergeAll(\n capabilitiesHandlerLayer,\n Complete.credentialHandlerLayer(\n Effect.fn(\"Session.Complete\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(yield* (yield* AuthenticationCompletion).prepare(input));\n }),\n ),\n CompletePending.credentialHandlerLayer(\n Effect.fn(\"Session.CompletePending\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(\n yield* (yield* AuthenticationCompletion).preparePending(input),\n );\n }),\n ),\n RejectPending.handlerLayer(\n Effect.fn(\"Session.RejectPending\")(function* (input) {\n yield* checkNoAmbientCommit();\n\n return yield* readCommitted(\n yield* (yield* AuthenticationCompletion).rejectPending(input),\n );\n }),\n ),\n sessionHandlersLayer,\n List.handlerLayer(\n Effect.fn(\"Session.List\")(function* (input, context) {\n const caller = yield* requireAuthenticated(context);\n const strategy = yield* SessionStrategy;\n const session = yield* strategy.verify(input.credential);\n\n if (session.subjectId !== caller.subjectId) return yield* SessionInvalid.make({});\n\n return yield* strategy.list({\n cursor: input.cursor,\n limit: input.limit,\n subjectId: session.subjectId,\n now: yield* DateTime.now,\n });\n }),\n ),\n Revoke.handlerLayer(\n Effect.fn(\"Session.Revoke\")(function* (input, context) {\n yield* checkNoAmbientCommit();\n const caller = yield* requireAssurance(context, management);\n const strategy = yield* SessionStrategy;\n const session = yield* strategy.verify(input.credential);\n\n if (session.subjectId !== caller.subjectId) return yield* SessionInvalid.make({});\n\n return yield* strategy.revoke(session, input.sessionId);\n }),\n ),\n RevokeAll.handlerLayer(\n Effect.fn(\"Session.RevokeAll\")(function* (input, context) {\n yield* checkNoAmbientCommit();\n const caller = yield* requireAssurance(context, management);\n const strategy = yield* SessionStrategy;\n const session = yield* strategy.verify(input.credential);\n\n if (session.subjectId !== caller.subjectId) return yield* SessionInvalid.make({});\n yield* strategy.revokeAll(session);\n\n return sessionInvalidationWindow(\n \"all-session-revocation\",\n strategy.capabilities,\n strategy.policy,\n );\n }),\n ),\n );\n };\n\n return Object.freeze({\n moduleId,\n claims,\n /** Stateful sessions and authentication completion with portable defaults. */\n layer: (policy: SessionPolicy) =>\n completionLayer().pipe(\n Layer.provideMerge(statefulLayer(policy)),\n Layer.provide([cryptoLayer, hooksLayer]),\n ),\n Session,\n CompletionResult,\n SessionStrategy,\n SessionStepUp,\n SessionStepUpPersistence,\n stepUpLayer,\n stepUpHandlersLayer,\n stepUpOperations,\n stepUpGroup,\n AuthenticationCompletion,\n StatefulSessionPersistence,\n SessionRepository,\n SignedSessionValidity,\n PendingAuthentication,\n statefulLayer,\n statelessLayer,\n stateAssistedLayer,\n completionLayer,\n capabilitiesHandlerLayer,\n sessionHandlersLayer,\n handlersLayer,\n operations,\n group,\n });\n};\n"],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { SubjectId, TokenDigest } from "../Schema.mjs";
2
+ import { AuthenticationEvidence, PendingConsumption, SecurityRevision, SessionAuthenticationProvenance, SessionCredentialVersion, SessionId, SessionMetadata } from "./models.mjs";
3
+ import { PreparedCommit } from "../hooks/commit.mjs";
4
+ import { PrepareSessionCommit } from "./commit.mjs";
5
+ import { PendingAuthenticationInvalid, SessionConflict, SessionInvalid, SessionUnavailable, StaleAuthentication } from "./errors.mjs";
6
+ import { DateTime, Effect } from "effect";
7
+ //#region src/sessions/persistence.d.ts
8
+ interface StatefulSessionRecord<Claims> extends SessionMetadata {
9
+ readonly claims: Claims;
10
+ readonly digest: TokenDigest;
11
+ readonly version: SecurityRevision;
12
+ readonly provenance: SessionAuthenticationProvenance;
13
+ readonly credentialVersion: SessionCredentialVersion;
14
+ }
15
+ /** Consumer mapping owns IDs, digest uniqueness, native timestamps, and each atomic commit. */
16
+ interface StatefulSessionPersistence<Claims> {
17
+ /**
18
+ * Insert only if the subject is active and the SAME revision captured before
19
+ * credential verification still matches. Duplicate evidence.flowId before absoluteExpiresAt MUST fail SessionConflict.
20
+ * Interactive owners reject it before prepare. Ordered-batch owners may prepare
21
+ * a speculative value during a concurrent race, but MUST discard its receipt
22
+ * and events when the guarded batch loses. Never return an existing row: its digest cannot
23
+ * recover the original bearer and does not match this attempt's new secret. Pending consumption and insertion
24
+ * are one commit. Recheck current factor policy, proof freshness and both expiry
25
+ * bounds against the clock at the conditional commit. Never replace evidence with a newly read revision.
26
+ */
27
+ readonly establish: <A>(input: {
28
+ readonly session: Omit<StatefulSessionRecord<Claims>, "sessionId" | "version">;
29
+ readonly evidence: AuthenticationEvidence;
30
+ readonly pending?: PendingConsumption;
31
+ readonly now: DateTime.Utc;
32
+ }, prepare: PrepareSessionCommit<StatefulSessionRecord<Claims>, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | PendingAuthenticationInvalid | SessionConflict | SessionUnavailable>;
33
+ /** Check current digest, active subject/revision, revocation, and expiry authoritatively. */
34
+ readonly verify: (input: {
35
+ readonly digest: TokenDigest;
36
+ readonly now: DateTime.Utc;
37
+ }) => Effect.Effect<StatefulSessionRecord<Claims>, SessionInvalid | SessionUnavailable>;
38
+ /** One CAS winner; check live digest/version/revision and both expiry bounds against a fresh clock at the actual commit. Set issuedAt to that clock; preserve authenticatedAt/absoluteExpiresAt and exact private provenance. Rotate credentialVersion from the prepared input independently of the authority-allocated row version. No upsert. */
39
+ readonly rotate: <A>(input: {
40
+ readonly sessionId: SessionId;
41
+ readonly expectedDigest: TokenDigest;
42
+ readonly expectedVersion: SecurityRevision;
43
+ readonly expectedSecurityRevision: SecurityRevision;
44
+ readonly nextDigest: TokenDigest;
45
+ readonly nextCredentialVersion: SessionCredentialVersion;
46
+ readonly nextExpiresAt: DateTime.Utc;
47
+ readonly now: DateTime.Utc;
48
+ }, prepare: PrepareSessionCommit<StatefulSessionRecord<Claims>, A>) => Effect.Effect<PreparedCommit<A>, SessionConflict | SessionInvalid | SessionUnavailable>;
49
+ readonly revokeDigest: <A>(digest: TokenDigest, prepare: PrepareSessionCommit<boolean, A>) => Effect.Effect<PreparedCommit<A>, SessionUnavailable>;
50
+ readonly revoke: <A>(input: {
51
+ readonly subjectId: SubjectId;
52
+ readonly sessionId: SessionId;
53
+ readonly expectedSecurityRevision: SecurityRevision;
54
+ }, prepare: PrepareSessionCommit<void, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | SessionUnavailable>;
55
+ /** Bump subject security revision in the SAME authority as revocation and establishment. */
56
+ readonly revokeAll: <A>(input: {
57
+ readonly subjectId: SubjectId;
58
+ readonly expectedSecurityRevision: SecurityRevision;
59
+ }, prepare: PrepareSessionCommit<void, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | SessionUnavailable>;
60
+ }
61
+ interface SessionRepository {
62
+ /** Stable owner-scoped pagination; never return bearer digests or application rows. */
63
+ readonly list: (input: {
64
+ readonly subjectId: SubjectId;
65
+ readonly cursor?: string;
66
+ readonly limit: number;
67
+ readonly now: DateTime.Utc;
68
+ }) => Effect.Effect<{
69
+ readonly sessions: ReadonlyArray<SessionMetadata>;
70
+ readonly nextCursor?: string;
71
+ }, SessionUnavailable>;
72
+ }
73
+ /** Explicitly state-assisted signed sessions. No positive validity cache is permitted.
74
+ * Tombstones MUST be keyed by (subjectId, sessionId), or the authority must prove
75
+ * target ownership before any global sessionId mutation. The caller session alone
76
+ * does not prove ownership of an arbitrary management target.
77
+ */
78
+ interface SignedSessionValidity {
79
+ readonly verify: (session: SessionMetadata, now: DateTime.Utc) => Effect.Effect<void, SessionInvalid | SessionUnavailable>;
80
+ readonly revoke: <A>(input: {
81
+ readonly subjectId: SubjectId;
82
+ readonly sessionId: SessionId;
83
+ readonly absoluteExpiresAt: DateTime.Utc;
84
+ readonly expectedSecurityRevision: SecurityRevision;
85
+ }, prepare: PrepareSessionCommit<void, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | SessionUnavailable>;
86
+ readonly revokeAll: <A>(input: {
87
+ readonly subjectId: SubjectId;
88
+ readonly expectedSecurityRevision: SecurityRevision;
89
+ }, prepare: PrepareSessionCommit<void, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | SessionUnavailable>;
90
+ }
91
+ //#endregion
92
+ export { SessionRepository, SignedSessionValidity, StatefulSessionPersistence, StatefulSessionRecord };
93
+ //# sourceMappingURL=persistence.d.mts.map
@@ -0,0 +1,80 @@
1
+ import { AuthenticationAssurance } from "../operations/context.mjs";
2
+ import { SessionCapabilities } from "./models.mjs";
3
+ import { SessionConfigurationError, SessionInvalid } from "./errors.mjs";
4
+ import "../Operations.mjs";
5
+ import { DateTime, Effect, Schema } from "effect";
6
+ //#region src/sessions/policy.d.ts
7
+ declare const SessionPolicy: Schema.Struct<{
8
+ readonly issuer: Schema.NonEmptyString;
9
+ readonly audience: Schema.NonEmptyString;
10
+ readonly generation: Schema.Natural;
11
+ readonly idleLifetimeMillis: Schema.Int;
12
+ readonly absoluteLifetimeMillis: Schema.Int;
13
+ readonly renewalIntervalMillis: Schema.Int;
14
+ /** Deployment-wide upper bound including tokens issued under older policy versions. */
15
+ readonly maximumIssuedAbsoluteLifetimeMillis: Schema.Int;
16
+ readonly maximumTokenBytes: Schema.Int;
17
+ readonly requireImmediateInvalidation: Schema.Boolean;
18
+ }>;
19
+ type SessionPolicy = typeof SessionPolicy.Type;
20
+ declare const validateSessionPolicy: (input: {
21
+ readonly issuer: string;
22
+ readonly audience: string;
23
+ readonly generation: number;
24
+ readonly idleLifetimeMillis: number;
25
+ readonly absoluteLifetimeMillis: number;
26
+ readonly renewalIntervalMillis: number;
27
+ readonly maximumIssuedAbsoluteLifetimeMillis: number;
28
+ readonly maximumTokenBytes: number;
29
+ readonly requireImmediateInvalidation: boolean;
30
+ }, capabilities: {
31
+ readonly mode: "state-assisted" | "stateful" | "stateless";
32
+ readonly listing: boolean;
33
+ readonly perSessionRevocation: boolean;
34
+ readonly subjectInvalidation: "absolute-expiry" | "immediate";
35
+ readonly renewal: "replayable" | "single-winner";
36
+ readonly positiveCacheMillis: 0;
37
+ }) => Effect.Effect<Readonly<{
38
+ readonly issuer: string;
39
+ readonly audience: string;
40
+ readonly generation: number;
41
+ readonly idleLifetimeMillis: number;
42
+ readonly absoluteLifetimeMillis: number;
43
+ readonly renewalIntervalMillis: number;
44
+ readonly maximumIssuedAbsoluteLifetimeMillis: number;
45
+ readonly maximumTokenBytes: number;
46
+ readonly requireImmediateInvalidation: boolean;
47
+ }>, SessionConfigurationError, never>;
48
+ declare const validateSessionTimeline: (session: Pick<{
49
+ readonly sessionId: string & import("effect/Brand").Brand<"effect-auth/SessionId">;
50
+ readonly subjectId: string & import("effect/Brand").Brand<"effect-auth/SubjectId">;
51
+ readonly securityRevision: string & import("effect/Brand").Brand<"effect-auth/SecurityRevision">;
52
+ readonly assurance: AuthenticationAssurance;
53
+ readonly issuedAt: DateTime.Utc;
54
+ readonly expiresAt: DateTime.Utc;
55
+ readonly absoluteExpiresAt: DateTime.Utc;
56
+ }, "absoluteExpiresAt" | "assurance" | "expiresAt" | "issuedAt">, policy: {
57
+ readonly issuer: string;
58
+ readonly audience: string;
59
+ readonly generation: number;
60
+ readonly idleLifetimeMillis: number;
61
+ readonly absoluteLifetimeMillis: number;
62
+ readonly renewalIntervalMillis: number;
63
+ readonly maximumIssuedAbsoluteLifetimeMillis: number;
64
+ readonly maximumTokenBytes: number;
65
+ readonly requireImmediateInvalidation: boolean;
66
+ }) => Effect.Effect<Pick<{
67
+ readonly sessionId: string & import("effect/Brand").Brand<"effect-auth/SessionId">;
68
+ readonly subjectId: string & import("effect/Brand").Brand<"effect-auth/SubjectId">;
69
+ readonly securityRevision: string & import("effect/Brand").Brand<"effect-auth/SecurityRevision">;
70
+ readonly assurance: AuthenticationAssurance;
71
+ readonly issuedAt: DateTime.Utc;
72
+ readonly expiresAt: DateTime.Utc;
73
+ readonly absoluteExpiresAt: DateTime.Utc;
74
+ }, "absoluteExpiresAt" | "assurance" | "expiresAt" | "issuedAt">, SessionInvalid, never>;
75
+ declare const statefulCapabilities: SessionCapabilities;
76
+ declare const statelessCapabilities: SessionCapabilities;
77
+ declare const stateAssistedCapabilities: SessionCapabilities;
78
+ //#endregion
79
+ export { SessionPolicy, stateAssistedCapabilities, statefulCapabilities, statelessCapabilities, validateSessionPolicy, validateSessionTimeline };
80
+ //# sourceMappingURL=policy.d.mts.map
@@ -0,0 +1,66 @@
1
+ import { SessionConfigurationError, SessionInvalid } from "./errors.mjs";
2
+ import { DateTime, Effect, Schema } from "effect";
3
+ //#region src/sessions/policy.ts
4
+ const PositiveMillis = Schema.Int.check(Schema.isGreaterThan(0));
5
+ const SessionPolicy = Schema.Struct({
6
+ issuer: Schema.NonEmptyString,
7
+ audience: Schema.NonEmptyString,
8
+ generation: Schema.Natural,
9
+ idleLifetimeMillis: PositiveMillis,
10
+ absoluteLifetimeMillis: PositiveMillis,
11
+ renewalIntervalMillis: PositiveMillis,
12
+ /** Deployment-wide upper bound including tokens issued under older policy versions. */
13
+ maximumIssuedAbsoluteLifetimeMillis: PositiveMillis,
14
+ maximumTokenBytes: Schema.Int.check(Schema.isBetween({
15
+ minimum: 256,
16
+ maximum: 1048576
17
+ })),
18
+ requireImmediateInvalidation: Schema.Boolean
19
+ });
20
+ const validateSessionPolicy = Effect.fn("validateSessionPolicy")(function* (input, capabilities) {
21
+ const policy = yield* Schema.decodeEffect(SessionPolicy)(input).pipe(Effect.mapError(() => SessionConfigurationError.make({ reason: "policy" })));
22
+ if (policy.renewalIntervalMillis >= policy.idleLifetimeMillis || policy.idleLifetimeMillis > policy.absoluteLifetimeMillis || policy.absoluteLifetimeMillis > policy.maximumIssuedAbsoluteLifetimeMillis) return yield* SessionConfigurationError.make({ reason: "policy" });
23
+ if (policy.requireImmediateInvalidation && capabilities.subjectInvalidation !== "immediate") return yield* SessionConfigurationError.make({ reason: "capability" });
24
+ return Object.freeze(policy);
25
+ });
26
+ const validateSessionTimeline = Effect.fn("validateSessionTimeline")(function* (session, policy) {
27
+ const now = DateTime.toEpochMillis(yield* DateTime.now);
28
+ const authenticatedAt = DateTime.toEpochMillis(session.assurance.authenticatedAt);
29
+ const issuedAt = DateTime.toEpochMillis(session.issuedAt);
30
+ const expiresAt = DateTime.toEpochMillis(session.expiresAt);
31
+ const absoluteExpiresAt = DateTime.toEpochMillis(session.absoluteExpiresAt);
32
+ const evidence = session.assurance.evidence;
33
+ if (evidence === void 0 || !evidence.some((proof) => DateTime.toEpochMillis(proof.verifiedAt) === authenticatedAt) || evidence.some((proof) => {
34
+ return DateTime.toEpochMillis(proof.verifiedAt) > issuedAt;
35
+ })) return yield* SessionInvalid.make({});
36
+ if (authenticatedAt > issuedAt || issuedAt > now || now >= expiresAt || expiresAt > absoluteExpiresAt || expiresAt <= issuedAt || absoluteExpiresAt - authenticatedAt > policy.maximumIssuedAbsoluteLifetimeMillis) return yield* SessionInvalid.make({});
37
+ return session;
38
+ });
39
+ const statefulCapabilities = Object.freeze({
40
+ mode: "stateful",
41
+ listing: true,
42
+ perSessionRevocation: true,
43
+ subjectInvalidation: "immediate",
44
+ renewal: "single-winner",
45
+ positiveCacheMillis: 0
46
+ });
47
+ const statelessCapabilities = Object.freeze({
48
+ mode: "stateless",
49
+ listing: false,
50
+ perSessionRevocation: false,
51
+ subjectInvalidation: "absolute-expiry",
52
+ renewal: "replayable",
53
+ positiveCacheMillis: 0
54
+ });
55
+ const stateAssistedCapabilities = Object.freeze({
56
+ mode: "state-assisted",
57
+ listing: false,
58
+ perSessionRevocation: true,
59
+ subjectInvalidation: "immediate",
60
+ renewal: "replayable",
61
+ positiveCacheMillis: 0
62
+ });
63
+ //#endregion
64
+ export { SessionPolicy, stateAssistedCapabilities, statefulCapabilities, statelessCapabilities, validateSessionPolicy, validateSessionTimeline };
65
+
66
+ //# sourceMappingURL=policy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.mjs","names":[],"sources":["../../src/sessions/policy.ts"],"sourcesContent":["import { DateTime, Effect, Schema } from \"effect\";\n\nimport { SessionConfigurationError, SessionInvalid } from \"./errors\";\nimport type { SessionCapabilities, SessionMetadata } from \"./models\";\n\nconst PositiveMillis = Schema.Int.check(Schema.isGreaterThan(0));\n\nexport const SessionPolicy = Schema.Struct({\n issuer: Schema.NonEmptyString,\n audience: Schema.NonEmptyString,\n generation: Schema.Natural,\n idleLifetimeMillis: PositiveMillis,\n absoluteLifetimeMillis: PositiveMillis,\n renewalIntervalMillis: PositiveMillis,\n /** Deployment-wide upper bound including tokens issued under older policy versions. */\n maximumIssuedAbsoluteLifetimeMillis: PositiveMillis,\n maximumTokenBytes: Schema.Int.check(Schema.isBetween({ minimum: 256, maximum: 1048576 })),\n requireImmediateInvalidation: Schema.Boolean,\n});\n\nexport type SessionPolicy = typeof SessionPolicy.Type;\n\nexport const validateSessionPolicy = Effect.fn(\"validateSessionPolicy\")(function* (\n input: SessionPolicy,\n capabilities: SessionCapabilities,\n) {\n const policy = yield* Schema.decodeEffect(SessionPolicy)(input).pipe(\n Effect.mapError(() => SessionConfigurationError.make({ reason: \"policy\" })),\n );\n\n if (\n policy.renewalIntervalMillis >= policy.idleLifetimeMillis ||\n policy.idleLifetimeMillis > policy.absoluteLifetimeMillis ||\n policy.absoluteLifetimeMillis > policy.maximumIssuedAbsoluteLifetimeMillis\n )\n return yield* SessionConfigurationError.make({ reason: \"policy\" });\n if (policy.requireImmediateInvalidation && capabilities.subjectInvalidation !== \"immediate\") {\n return yield* SessionConfigurationError.make({ reason: \"capability\" });\n }\n\n return Object.freeze(policy);\n});\n\nexport const validateSessionTimeline = Effect.fn(\"validateSessionTimeline\")(function* (\n session: Pick<SessionMetadata, \"assurance\" | \"issuedAt\" | \"expiresAt\" | \"absoluteExpiresAt\">,\n policy: SessionPolicy,\n) {\n const now = DateTime.toEpochMillis(yield* DateTime.now);\n const authenticatedAt = DateTime.toEpochMillis(session.assurance.authenticatedAt);\n const issuedAt = DateTime.toEpochMillis(session.issuedAt);\n const expiresAt = DateTime.toEpochMillis(session.expiresAt);\n const absoluteExpiresAt = DateTime.toEpochMillis(session.absoluteExpiresAt);\n const evidence = session.assurance.evidence;\n\n if (\n evidence === undefined ||\n !evidence.some((proof) => DateTime.toEpochMillis(proof.verifiedAt) === authenticatedAt) ||\n evidence.some((proof) => {\n const verifiedAt = DateTime.toEpochMillis(proof.verifiedAt);\n\n return verifiedAt > issuedAt;\n })\n )\n return yield* SessionInvalid.make({});\n if (\n authenticatedAt > issuedAt ||\n issuedAt > now ||\n now >= expiresAt ||\n expiresAt > absoluteExpiresAt ||\n expiresAt <= issuedAt ||\n absoluteExpiresAt - authenticatedAt > policy.maximumIssuedAbsoluteLifetimeMillis\n )\n return yield* SessionInvalid.make({});\n\n return session;\n});\n\nexport const statefulCapabilities: SessionCapabilities = Object.freeze({\n mode: \"stateful\",\n listing: true,\n perSessionRevocation: true,\n subjectInvalidation: \"immediate\",\n renewal: \"single-winner\",\n positiveCacheMillis: 0,\n});\n\nexport const statelessCapabilities: SessionCapabilities = Object.freeze({\n mode: \"stateless\",\n listing: false,\n perSessionRevocation: false,\n subjectInvalidation: \"absolute-expiry\",\n renewal: \"replayable\",\n positiveCacheMillis: 0,\n});\n\nexport const stateAssistedCapabilities: SessionCapabilities = Object.freeze({\n mode: \"state-assisted\",\n listing: false,\n perSessionRevocation: true,\n subjectInvalidation: \"immediate\",\n renewal: \"replayable\",\n positiveCacheMillis: 0,\n});\n"],"mappings":";;;AAKA,MAAM,iBAAiB,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;AAE/D,MAAa,gBAAgB,OAAO,OAAO;CACzC,QAAQ,OAAO;CACf,UAAU,OAAO;CACjB,YAAY,OAAO;CACnB,oBAAoB;CACpB,wBAAwB;CACxB,uBAAuB;;CAEvB,qCAAqC;CACrC,mBAAmB,OAAO,IAAI,MAAM,OAAO,UAAU;EAAE,SAAS;EAAK,SAAS;CAAQ,CAAC,CAAC;CACxF,8BAA8B,OAAO;AACvC,CAAC;AAID,MAAa,wBAAwB,OAAO,GAAG,uBAAuB,CAAC,CAAC,WACtE,OACA,cACA;CACA,MAAM,SAAS,OAAO,OAAO,aAAa,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,KAC9D,OAAO,eAAe,0BAA0B,KAAK,EAAE,QAAQ,SAAS,CAAC,CAAC,CAC5E;CAEA,IACE,OAAO,yBAAyB,OAAO,sBACvC,OAAO,qBAAqB,OAAO,0BACnC,OAAO,yBAAyB,OAAO,qCAEvC,OAAO,OAAO,0BAA0B,KAAK,EAAE,QAAQ,SAAS,CAAC;CACnE,IAAI,OAAO,gCAAgC,aAAa,wBAAwB,aAC9E,OAAO,OAAO,0BAA0B,KAAK,EAAE,QAAQ,aAAa,CAAC;CAGvE,OAAO,OAAO,OAAO,MAAM;AAC7B,CAAC;AAED,MAAa,0BAA0B,OAAO,GAAG,yBAAyB,CAAC,CAAC,WAC1E,SACA,QACA;CACA,MAAM,MAAM,SAAS,cAAc,OAAO,SAAS,GAAG;CACtD,MAAM,kBAAkB,SAAS,cAAc,QAAQ,UAAU,eAAe;CAChF,MAAM,WAAW,SAAS,cAAc,QAAQ,QAAQ;CACxD,MAAM,YAAY,SAAS,cAAc,QAAQ,SAAS;CAC1D,MAAM,oBAAoB,SAAS,cAAc,QAAQ,iBAAiB;CAC1E,MAAM,WAAW,QAAQ,UAAU;CAEnC,IACE,aAAa,KAAA,KACb,CAAC,SAAS,MAAM,UAAU,SAAS,cAAc,MAAM,UAAU,MAAM,eAAe,KACtF,SAAS,MAAM,UAAU;EAGvB,OAFmB,SAAS,cAAc,MAAM,UAEhC,IAAI;CACtB,CAAC,GAED,OAAO,OAAO,eAAe,KAAK,CAAC,CAAC;CACtC,IACE,kBAAkB,YAClB,WAAW,OACX,OAAO,aACP,YAAY,qBACZ,aAAa,YACb,oBAAoB,kBAAkB,OAAO,qCAE7C,OAAO,OAAO,eAAe,KAAK,CAAC,CAAC;CAEtC,OAAO;AACT,CAAC;AAED,MAAa,uBAA4C,OAAO,OAAO;CACrE,MAAM;CACN,SAAS;CACT,sBAAsB;CACtB,qBAAqB;CACrB,SAAS;CACT,qBAAqB;AACvB,CAAC;AAED,MAAa,wBAA6C,OAAO,OAAO;CACtE,MAAM;CACN,SAAS;CACT,sBAAsB;CACtB,qBAAqB;CACrB,SAAS;CACT,qBAAqB;AACvB,CAAC;AAED,MAAa,4BAAiD,OAAO,OAAO;CAC1E,MAAM;CACN,SAAS;CACT,sBAAsB;CACtB,qBAAqB;CACrB,SAAS;CACT,qBAAqB;AACvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { AuthStore } from "../../AuthStore.mjs";
2
+ import { Effect } from "effect";
3
+ //#region src/testing/conformance/AuthStore.d.ts
4
+ interface AuthStoreConformanceCase {
5
+ readonly name: string;
6
+ readonly run: Effect.Effect<void, never, AuthStore>;
7
+ }
8
+ declare const authStoreConformanceCases: ReadonlyArray<AuthStoreConformanceCase>;
9
+ //#endregion
10
+ export { AuthStoreConformanceCase, authStoreConformanceCases };
11
+ //# sourceMappingURL=AuthStore.d.mts.map