@tinyrack/issuary-server 0.31.0 → 0.32.2

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 (455) hide show
  1. package/dist/entities/auth-budget.entity.d.ts +20 -0
  2. package/dist/entities/auth-budget.entity.d.ts.map +1 -0
  3. package/dist/entities/auth-budget.entity.js +11 -0
  4. package/dist/entities/auth-budget.entity.js.map +1 -0
  5. package/dist/entities/browser-session.entity.d.ts +32 -0
  6. package/dist/entities/browser-session.entity.d.ts.map +1 -0
  7. package/dist/entities/browser-session.entity.js +12 -0
  8. package/dist/entities/browser-session.entity.js.map +1 -0
  9. package/dist/entities/email-verification.entity.d.ts +18 -0
  10. package/dist/entities/email-verification.entity.d.ts.map +1 -1
  11. package/dist/entities/email-verification.entity.js +2 -0
  12. package/dist/entities/email-verification.entity.js.map +1 -1
  13. package/dist/entities/oauth-client.entity.d.ts +120 -0
  14. package/dist/entities/oauth-client.entity.d.ts.map +1 -1
  15. package/dist/entities/oauth-code.entity.d.ts +120 -0
  16. package/dist/entities/oauth-code.entity.d.ts.map +1 -1
  17. package/dist/entities/oauth-code.entity.js +3 -0
  18. package/dist/entities/oauth-code.entity.js.map +1 -1
  19. package/dist/entities/oauth-device-code.entity.d.ts +120 -0
  20. package/dist/entities/oauth-device-code.entity.d.ts.map +1 -1
  21. package/dist/entities/oauth-device-code.entity.js +3 -0
  22. package/dist/entities/oauth-device-code.entity.js.map +1 -1
  23. package/dist/entities/oauth-grant.entity.d.ts +52 -0
  24. package/dist/entities/oauth-grant.entity.d.ts.map +1 -0
  25. package/dist/entities/oauth-grant.entity.js +19 -0
  26. package/dist/entities/oauth-grant.entity.js.map +1 -0
  27. package/dist/entities/password-reset.entity.d.ts +18 -0
  28. package/dist/entities/password-reset.entity.d.ts.map +1 -1
  29. package/dist/entities/password-reset.entity.js +2 -0
  30. package/dist/entities/password-reset.entity.js.map +1 -1
  31. package/dist/entities/pending-oauth-registration.entity.d.ts +9 -0
  32. package/dist/entities/pending-oauth-registration.entity.d.ts.map +1 -1
  33. package/dist/entities/pending-oauth-registration.entity.js +1 -0
  34. package/dist/entities/pending-oauth-registration.entity.js.map +1 -1
  35. package/dist/entities/revoked-token.entity.d.ts +120 -0
  36. package/dist/entities/revoked-token.entity.d.ts.map +1 -1
  37. package/dist/entities/terms-content.entity.d.ts +36 -0
  38. package/dist/entities/terms-content.entity.d.ts.map +1 -1
  39. package/dist/entities/terms.entity.d.ts +36 -0
  40. package/dist/entities/terms.entity.d.ts.map +1 -1
  41. package/dist/entities/user-consent.entity.d.ts +120 -0
  42. package/dist/entities/user-consent.entity.d.ts.map +1 -1
  43. package/dist/entities/user-terms-consent.entity.d.ts +36 -0
  44. package/dist/entities/user-terms-consent.entity.d.ts.map +1 -1
  45. package/dist/entities/user-totp-recovery-code.entity.d.ts +36 -0
  46. package/dist/entities/user-totp-recovery-code.entity.d.ts.map +1 -1
  47. package/dist/entities/user-totp.entity.d.ts +36 -0
  48. package/dist/entities/user-totp.entity.d.ts.map +1 -1
  49. package/dist/entities/user-totp.entity.js +1 -0
  50. package/dist/entities/user-totp.entity.js.map +1 -1
  51. package/dist/entities/user.entity.d.ts +36 -0
  52. package/dist/entities/user.entity.d.ts.map +1 -1
  53. package/dist/entities/user.entity.js +3 -0
  54. package/dist/entities/user.entity.js.map +1 -1
  55. package/dist/entrypoints/app.d.ts +448 -437
  56. package/dist/entrypoints/app.d.ts.map +1 -1
  57. package/dist/entrypoints/app.js +78 -6
  58. package/dist/entrypoints/app.js.map +1 -1
  59. package/dist/entrypoints/database/postgres/compiled-functions.d.ts +326 -200
  60. package/dist/entrypoints/database/postgres/compiled-functions.js +1849 -518
  61. package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
  62. package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +326 -200
  63. package/dist/entrypoints/database/sqlite/compiled-functions.js +1849 -518
  64. package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
  65. package/dist/entrypoints/database/sqlite/sqlite.d.ts.map +1 -1
  66. package/dist/entrypoints/database/sqlite/sqlite.js +1 -0
  67. package/dist/entrypoints/database/sqlite/sqlite.js.map +1 -1
  68. package/dist/entrypoints/scheduler/database.d.ts +3 -1
  69. package/dist/entrypoints/scheduler/database.d.ts.map +1 -1
  70. package/dist/entrypoints/scheduler/database.js +13 -2
  71. package/dist/entrypoints/scheduler/database.js.map +1 -1
  72. package/dist/entrypoints/scheduler/distributed-runner.d.ts +4 -0
  73. package/dist/entrypoints/scheduler/distributed-runner.d.ts.map +1 -1
  74. package/dist/entrypoints/scheduler/distributed-runner.js +26 -1
  75. package/dist/entrypoints/scheduler/distributed-runner.js.map +1 -1
  76. package/dist/lib/config/email.d.ts +1 -0
  77. package/dist/lib/config/email.d.ts.map +1 -1
  78. package/dist/lib/config/email.js.map +1 -1
  79. package/dist/lib/database/entities.d.ts.map +1 -1
  80. package/dist/lib/database/entities.js +6 -0
  81. package/dist/lib/database/entities.js.map +1 -1
  82. package/dist/lib/openapi.d.ts +2 -0
  83. package/dist/lib/openapi.d.ts.map +1 -1
  84. package/dist/lib/openapi.js +36 -1
  85. package/dist/lib/openapi.js.map +1 -1
  86. package/dist/lib/request-ip.d.ts +4 -0
  87. package/dist/lib/request-ip.d.ts.map +1 -0
  88. package/dist/lib/request-ip.js +39 -0
  89. package/dist/lib/request-ip.js.map +1 -0
  90. package/dist/middleware/auth-budget.d.ts +3 -0
  91. package/dist/middleware/auth-budget.d.ts.map +1 -0
  92. package/dist/middleware/auth-budget.js +80 -0
  93. package/dist/middleware/auth-budget.js.map +1 -0
  94. package/dist/middleware/session.d.ts +23 -5
  95. package/dist/middleware/session.d.ts.map +1 -1
  96. package/dist/middleware/session.js +152 -12
  97. package/dist/middleware/session.js.map +1 -1
  98. package/dist/middleware/strict-input.d.ts +4 -0
  99. package/dist/middleware/strict-input.d.ts.map +1 -0
  100. package/dist/middleware/strict-input.js +144 -0
  101. package/dist/middleware/strict-input.js.map +1 -0
  102. package/dist/migrations/postgres/Migration20260910120000_api_security.d.ts +6 -0
  103. package/dist/migrations/postgres/Migration20260910120000_api_security.d.ts.map +1 -0
  104. package/dist/migrations/postgres/Migration20260910120000_api_security.js +20 -0
  105. package/dist/migrations/postgres/Migration20260910120000_api_security.js.map +1 -0
  106. package/dist/migrations/postgres/Migration20260910160000_security_followup.d.ts +6 -0
  107. package/dist/migrations/postgres/Migration20260910160000_security_followup.d.ts.map +1 -0
  108. package/dist/migrations/postgres/Migration20260910160000_security_followup.js +23 -0
  109. package/dist/migrations/postgres/Migration20260910160000_security_followup.js.map +1 -0
  110. package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.d.ts +6 -0
  111. package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.d.ts.map +1 -0
  112. package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.js +28 -0
  113. package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.js.map +1 -0
  114. package/dist/migrations/postgres/Migration20260910220000_flow_revocation.d.ts +6 -0
  115. package/dist/migrations/postgres/Migration20260910220000_flow_revocation.d.ts.map +1 -0
  116. package/dist/migrations/postgres/Migration20260910220000_flow_revocation.js +19 -0
  117. package/dist/migrations/postgres/Migration20260910220000_flow_revocation.js.map +1 -0
  118. package/dist/migrations/postgres/index.d.ts.map +1 -1
  119. package/dist/migrations/postgres/index.js +8 -0
  120. package/dist/migrations/postgres/index.js.map +1 -1
  121. package/dist/migrations/sqlite/Migration20260910120000_api_security.d.ts +6 -0
  122. package/dist/migrations/sqlite/Migration20260910120000_api_security.d.ts.map +1 -0
  123. package/dist/migrations/sqlite/Migration20260910120000_api_security.js +20 -0
  124. package/dist/migrations/sqlite/Migration20260910120000_api_security.js.map +1 -0
  125. package/dist/migrations/sqlite/Migration20260910160000_security_followup.d.ts +6 -0
  126. package/dist/migrations/sqlite/Migration20260910160000_security_followup.d.ts.map +1 -0
  127. package/dist/migrations/sqlite/Migration20260910160000_security_followup.js +23 -0
  128. package/dist/migrations/sqlite/Migration20260910160000_security_followup.js.map +1 -0
  129. package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.d.ts +8 -0
  130. package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.d.ts.map +1 -0
  131. package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.js +72 -0
  132. package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.js.map +1 -0
  133. package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.d.ts +6 -0
  134. package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.d.ts.map +1 -0
  135. package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.js +19 -0
  136. package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.js.map +1 -0
  137. package/dist/migrations/sqlite/index.d.ts.map +1 -1
  138. package/dist/migrations/sqlite/index.js +8 -0
  139. package/dist/migrations/sqlite/index.js.map +1 -1
  140. package/dist/repositories/email-verification.repository.d.ts +1 -0
  141. package/dist/repositories/email-verification.repository.d.ts.map +1 -1
  142. package/dist/repositories/email-verification.repository.js +8 -17
  143. package/dist/repositories/email-verification.repository.js.map +1 -1
  144. package/dist/repositories/oauth-code.repository.d.ts +2 -0
  145. package/dist/repositories/oauth-code.repository.d.ts.map +1 -1
  146. package/dist/repositories/oauth-code.repository.js +8 -0
  147. package/dist/repositories/oauth-code.repository.js.map +1 -1
  148. package/dist/repositories/oauth-device-code.repository.d.ts +3 -0
  149. package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -1
  150. package/dist/repositories/oauth-device-code.repository.js +64 -29
  151. package/dist/repositories/oauth-device-code.repository.js.map +1 -1
  152. package/dist/repositories/password-reset.repository.d.ts +1 -0
  153. package/dist/repositories/password-reset.repository.d.ts.map +1 -1
  154. package/dist/repositories/password-reset.repository.js +6 -19
  155. package/dist/repositories/password-reset.repository.js.map +1 -1
  156. package/dist/repositories/pending-oauth-registration.repository.d.ts +2 -0
  157. package/dist/repositories/pending-oauth-registration.repository.d.ts.map +1 -1
  158. package/dist/repositories/pending-oauth-registration.repository.js +16 -2
  159. package/dist/repositories/pending-oauth-registration.repository.js.map +1 -1
  160. package/dist/repositories/terms.repository.d.ts.map +1 -1
  161. package/dist/repositories/terms.repository.js +1 -0
  162. package/dist/repositories/terms.repository.js.map +1 -1
  163. package/dist/repositories/user-consent.repository.d.ts.map +1 -1
  164. package/dist/repositories/user-consent.repository.js +1 -1
  165. package/dist/repositories/user-consent.repository.js.map +1 -1
  166. package/dist/repositories/user-terms-consent.repository.d.ts.map +1 -1
  167. package/dist/repositories/user-terms-consent.repository.js +2 -0
  168. package/dist/repositories/user-terms-consent.repository.js.map +1 -1
  169. package/dist/repositories/user-totp-recovery-code.repository.d.ts +24 -0
  170. package/dist/repositories/user-totp-recovery-code.repository.d.ts.map +1 -1
  171. package/dist/repositories/user-totp.repository.d.ts +36 -0
  172. package/dist/repositories/user-totp.repository.d.ts.map +1 -1
  173. package/dist/routes/.well-known/openid-configuration/get.d.ts.map +1 -1
  174. package/dist/routes/.well-known/openid-configuration/get.js +5 -1
  175. package/dist/routes/.well-known/openid-configuration/get.js.map +1 -1
  176. package/dist/routes/api/admin/console/index.d.ts.map +1 -1
  177. package/dist/routes/api/admin/console/index.js +29 -14
  178. package/dist/routes/api/admin/console/index.js.map +1 -1
  179. package/dist/routes/api/admin/me/get.js +2 -3
  180. package/dist/routes/api/admin/me/get.js.map +1 -1
  181. package/dist/routes/api/admin/users/index.d.ts.map +1 -1
  182. package/dist/routes/api/admin/users/index.js +59 -52
  183. package/dist/routes/api/admin/users/index.js.map +1 -1
  184. package/dist/routes/api/auth/accounts/remove.post.d.ts +5 -5
  185. package/dist/routes/api/auth/email/resend/post.d.ts.map +1 -1
  186. package/dist/routes/api/auth/email/resend/post.js +3 -24
  187. package/dist/routes/api/auth/email/resend/post.js.map +1 -1
  188. package/dist/routes/api/auth/email/verify/post.d.ts.map +1 -1
  189. package/dist/routes/api/auth/email/verify/post.js +29 -12
  190. package/dist/routes/api/auth/email/verify/post.js.map +1 -1
  191. package/dist/routes/api/auth/login/post.d.ts.map +1 -1
  192. package/dist/routes/api/auth/login/post.js +4 -3
  193. package/dist/routes/api/auth/login/post.js.map +1 -1
  194. package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -1
  195. package/dist/routes/api/auth/passkey/verify/post.js +25 -11
  196. package/dist/routes/api/auth/passkey/verify/post.js.map +1 -1
  197. package/dist/routes/api/auth/password/forgot/post.d.ts.map +1 -1
  198. package/dist/routes/api/auth/password/forgot/post.js +2 -19
  199. package/dist/routes/api/auth/password/forgot/post.js.map +1 -1
  200. package/dist/routes/api/auth/register/post.d.ts.map +1 -1
  201. package/dist/routes/api/auth/register/post.js +4 -3
  202. package/dist/routes/api/auth/register/post.js.map +1 -1
  203. package/dist/routes/api/auth/totp/recovery/verify/post.d.ts.map +1 -1
  204. package/dist/routes/api/auth/totp/recovery/verify/post.js +7 -5
  205. package/dist/routes/api/auth/totp/recovery/verify/post.js.map +1 -1
  206. package/dist/routes/api/auth/totp/verify/post.d.ts.map +1 -1
  207. package/dist/routes/api/auth/totp/verify/post.js +7 -5
  208. package/dist/routes/api/auth/totp/verify/post.js.map +1 -1
  209. package/dist/routes/api/consent/post.d.ts.map +1 -1
  210. package/dist/routes/api/consent/post.js +141 -120
  211. package/dist/routes/api/consent/post.js.map +1 -1
  212. package/dist/routes/api/docs/get.d.ts.map +1 -1
  213. package/dist/routes/api/docs/get.js +8 -1
  214. package/dist/routes/api/docs/get.js.map +1 -1
  215. package/dist/routes/api/index.d.ts +379 -379
  216. package/dist/routes/api/oauth/_provider/authorize/get.d.ts.map +1 -1
  217. package/dist/routes/api/oauth/_provider/authorize/get.js +5 -1
  218. package/dist/routes/api/oauth/_provider/authorize/get.js.map +1 -1
  219. package/dist/routes/api/oauth/_provider/callback/get.d.ts +9 -9
  220. package/dist/routes/api/oauth/_provider/callback/get.d.ts.map +1 -1
  221. package/dist/routes/api/oauth/_provider/callback/get.js +30 -6
  222. package/dist/routes/api/oauth/_provider/callback/get.js.map +1 -1
  223. package/dist/routes/api/oauth/_provider/callback/post.d.ts.map +1 -1
  224. package/dist/routes/api/oauth/_provider/callback/post.js +31 -31
  225. package/dist/routes/api/oauth/_provider/callback/post.js.map +1 -1
  226. package/dist/routes/api/oauth/_provider/delete.d.ts.map +1 -1
  227. package/dist/routes/api/oauth/_provider/delete.js +14 -11
  228. package/dist/routes/api/oauth/_provider/delete.js.map +1 -1
  229. package/dist/routes/api/oauth/index.d.ts +18 -18
  230. package/dist/routes/api/terms/consent/post.d.ts.map +1 -1
  231. package/dist/routes/api/terms/consent/post.js +59 -43
  232. package/dist/routes/api/terms/consent/post.js.map +1 -1
  233. package/dist/routes/api/user/delete.d.ts.map +1 -1
  234. package/dist/routes/api/user/delete.js +8 -8
  235. package/dist/routes/api/user/delete.js.map +1 -1
  236. package/dist/routes/api/user/passkeys/_id/delete.d.ts.map +1 -1
  237. package/dist/routes/api/user/passkeys/_id/delete.js +17 -29
  238. package/dist/routes/api/user/passkeys/_id/delete.js.map +1 -1
  239. package/dist/routes/api/user/passkeys/_id/patch.d.ts.map +1 -1
  240. package/dist/routes/api/user/passkeys/_id/patch.js +16 -13
  241. package/dist/routes/api/user/passkeys/_id/patch.js.map +1 -1
  242. package/dist/routes/api/user/passkeys/register/verify/post.d.ts.map +1 -1
  243. package/dist/routes/api/user/passkeys/register/verify/post.js +27 -19
  244. package/dist/routes/api/user/passkeys/register/verify/post.js.map +1 -1
  245. package/dist/routes/api/user/password/delete.d.ts.map +1 -1
  246. package/dist/routes/api/user/password/delete.js +13 -10
  247. package/dist/routes/api/user/password/delete.js.map +1 -1
  248. package/dist/routes/api/user/password/post.d.ts.map +1 -1
  249. package/dist/routes/api/user/password/post.js +13 -10
  250. package/dist/routes/api/user/password/post.js.map +1 -1
  251. package/dist/routes/api/user/password/put.d.ts.map +1 -1
  252. package/dist/routes/api/user/password/put.js +13 -10
  253. package/dist/routes/api/user/password/put.js.map +1 -1
  254. package/dist/routes/api/user/totp/confirm/post.d.ts.map +1 -1
  255. package/dist/routes/api/user/totp/confirm/post.js +33 -18
  256. package/dist/routes/api/user/totp/confirm/post.js.map +1 -1
  257. package/dist/routes/api/user/totp/delete.d.ts.map +1 -1
  258. package/dist/routes/api/user/totp/delete.js +13 -18
  259. package/dist/routes/api/user/totp/delete.js.map +1 -1
  260. package/dist/routes/api/user/totp/recovery/regenerate/post.d.ts.map +1 -1
  261. package/dist/routes/api/user/totp/recovery/regenerate/post.js +13 -10
  262. package/dist/routes/api/user/totp/recovery/regenerate/post.js.map +1 -1
  263. package/dist/routes/api/user/totp/setup/post.d.ts.map +1 -1
  264. package/dist/routes/api/user/totp/setup/post.js +13 -8
  265. package/dist/routes/api/user/totp/setup/post.js.map +1 -1
  266. package/dist/routes/api/user/totp/verify/post.d.ts.map +1 -1
  267. package/dist/routes/api/user/totp/verify/post.js +23 -12
  268. package/dist/routes/api/user/totp/verify/post.js.map +1 -1
  269. package/dist/routes/index.d.ts +252 -242
  270. package/dist/routes/index.d.ts.map +1 -1
  271. package/dist/routes/oauth/authorize/get.d.ts.map +1 -1
  272. package/dist/routes/oauth/authorize/get.js +12 -4
  273. package/dist/routes/oauth/authorize/get.js.map +1 -1
  274. package/dist/routes/oauth/device/get-post.d.ts +10 -0
  275. package/dist/routes/oauth/device/get-post.d.ts.map +1 -1
  276. package/dist/routes/oauth/device/get-post.js +32 -3
  277. package/dist/routes/oauth/device/get-post.js.map +1 -1
  278. package/dist/routes/oauth/device-authorization/post.d.ts.map +1 -1
  279. package/dist/routes/oauth/device-authorization/post.js +13 -7
  280. package/dist/routes/oauth/device-authorization/post.js.map +1 -1
  281. package/dist/routes/oauth/end-session/get.d.ts.map +1 -1
  282. package/dist/routes/oauth/end-session/get.js +2 -3
  283. package/dist/routes/oauth/end-session/get.js.map +1 -1
  284. package/dist/routes/oauth/index.d.ts +10 -0
  285. package/dist/routes/oauth/index.d.ts.map +1 -1
  286. package/dist/routes/oauth/revoke/post.d.ts.map +1 -1
  287. package/dist/routes/oauth/revoke/post.js +10 -2
  288. package/dist/routes/oauth/revoke/post.js.map +1 -1
  289. package/dist/routes/oauth/token/post.d.ts.map +1 -1
  290. package/dist/routes/oauth/token/post.js +69 -57
  291. package/dist/routes/oauth/token/post.js.map +1 -1
  292. package/dist/schemas/error.d.ts +75 -0
  293. package/dist/schemas/error.d.ts.map +1 -1
  294. package/dist/schemas/error.js +3 -0
  295. package/dist/schemas/error.js.map +1 -1
  296. package/dist/schemas/field.d.ts.map +1 -1
  297. package/dist/schemas/field.js +3 -0
  298. package/dist/schemas/field.js.map +1 -1
  299. package/dist/seeders/config.seeder.d.ts +1 -1
  300. package/dist/seeders/config.seeder.d.ts.map +1 -1
  301. package/dist/seeders/config.seeder.js +100 -36
  302. package/dist/seeders/config.seeder.js.map +1 -1
  303. package/dist/services/admin-console.service.d.ts.map +1 -1
  304. package/dist/services/admin-console.service.js +137 -100
  305. package/dist/services/admin-console.service.js.map +1 -1
  306. package/dist/services/auth-budget.service.d.ts +6 -0
  307. package/dist/services/auth-budget.service.d.ts.map +1 -0
  308. package/dist/services/auth-budget.service.js +30 -0
  309. package/dist/services/auth-budget.service.js.map +1 -0
  310. package/dist/services/authentication-epoch.d.ts +5 -0
  311. package/dist/services/authentication-epoch.d.ts.map +1 -0
  312. package/dist/services/authentication-epoch.js +22 -0
  313. package/dist/services/authentication-epoch.js.map +1 -0
  314. package/dist/services/authorization-browser.service.d.ts +18 -0
  315. package/dist/services/authorization-browser.service.d.ts.map +1 -0
  316. package/dist/services/authorization-browser.service.js +28 -0
  317. package/dist/services/authorization-browser.service.js.map +1 -0
  318. package/dist/services/browser-security.service.d.ts +14 -0
  319. package/dist/services/browser-security.service.d.ts.map +1 -0
  320. package/dist/services/browser-security.service.js +85 -0
  321. package/dist/services/browser-security.service.js.map +1 -0
  322. package/dist/services/browser-session.service.d.ts +25 -0
  323. package/dist/services/browser-session.service.d.ts.map +1 -0
  324. package/dist/services/browser-session.service.js +102 -0
  325. package/dist/services/browser-session.service.js.map +1 -0
  326. package/dist/services/cleanup.service.d.ts +1 -0
  327. package/dist/services/cleanup.service.d.ts.map +1 -1
  328. package/dist/services/cleanup.service.js +31 -0
  329. package/dist/services/cleanup.service.js.map +1 -1
  330. package/dist/services/client-security.d.ts +641 -0
  331. package/dist/services/client-security.d.ts.map +1 -0
  332. package/dist/services/client-security.js +10 -0
  333. package/dist/services/client-security.js.map +1 -0
  334. package/dist/services/container.d.ts +2 -0
  335. package/dist/services/container.d.ts.map +1 -1
  336. package/dist/services/container.js +6 -2
  337. package/dist/services/container.js.map +1 -1
  338. package/dist/services/email.service.d.ts +2 -14
  339. package/dist/services/email.service.d.ts.map +1 -1
  340. package/dist/services/email.service.js +35 -29
  341. package/dist/services/email.service.js.map +1 -1
  342. package/dist/services/jwt.service.d.ts +1 -0
  343. package/dist/services/jwt.service.d.ts.map +1 -1
  344. package/dist/services/jwt.service.js +13 -1
  345. package/dist/services/jwt.service.js.map +1 -1
  346. package/dist/services/mail-queue.service.d.ts +24 -0
  347. package/dist/services/mail-queue.service.d.ts.map +1 -0
  348. package/dist/services/mail-queue.service.js +223 -0
  349. package/dist/services/mail-queue.service.js.map +1 -0
  350. package/dist/services/mikro.service.d.ts.map +1 -1
  351. package/dist/services/mikro.service.js +2 -0
  352. package/dist/services/mikro.service.js.map +1 -1
  353. package/dist/services/oauth-authorize.service.d.ts +3 -0
  354. package/dist/services/oauth-authorize.service.d.ts.map +1 -1
  355. package/dist/services/oauth-authorize.service.js +131 -101
  356. package/dist/services/oauth-authorize.service.js.map +1 -1
  357. package/dist/services/oauth-browser-security.service.d.ts +7 -0
  358. package/dist/services/oauth-browser-security.service.d.ts.map +1 -0
  359. package/dist/services/oauth-browser-security.service.js +67 -0
  360. package/dist/services/oauth-browser-security.service.js.map +1 -0
  361. package/dist/services/oauth-client.service.d.ts +24 -1
  362. package/dist/services/oauth-client.service.d.ts.map +1 -1
  363. package/dist/services/oauth-client.service.js +52 -13
  364. package/dist/services/oauth-client.service.js.map +1 -1
  365. package/dist/services/oauth-connect.service.d.ts +37 -3
  366. package/dist/services/oauth-connect.service.d.ts.map +1 -1
  367. package/dist/services/oauth-connect.service.js +236 -212
  368. package/dist/services/oauth-connect.service.js.map +1 -1
  369. package/dist/services/oauth-token.service.d.ts +6 -4
  370. package/dist/services/oauth-token.service.d.ts.map +1 -1
  371. package/dist/services/oauth-token.service.js +295 -209
  372. package/dist/services/oauth-token.service.js.map +1 -1
  373. package/dist/services/passkey.service.d.ts +26 -7
  374. package/dist/services/passkey.service.d.ts.map +1 -1
  375. package/dist/services/passkey.service.js +71 -42
  376. package/dist/services/passkey.service.js.map +1 -1
  377. package/dist/services/password-auth.service.d.ts +5 -1
  378. package/dist/services/password-auth.service.d.ts.map +1 -1
  379. package/dist/services/password-auth.service.js +79 -52
  380. package/dist/services/password-auth.service.js.map +1 -1
  381. package/dist/services/password-reset.service.d.ts.map +1 -1
  382. package/dist/services/password-reset.service.js +34 -15
  383. package/dist/services/password-reset.service.js.map +1 -1
  384. package/dist/services/security.service.d.ts +3 -1
  385. package/dist/services/security.service.d.ts.map +1 -1
  386. package/dist/services/security.service.js +11 -2
  387. package/dist/services/security.service.js.map +1 -1
  388. package/dist/services/terms-policy.service.d.ts +7 -0
  389. package/dist/services/terms-policy.service.d.ts.map +1 -0
  390. package/dist/services/terms-policy.service.js +26 -0
  391. package/dist/services/terms-policy.service.js.map +1 -0
  392. package/dist/services/totp.service.d.ts +4 -5
  393. package/dist/services/totp.service.d.ts.map +1 -1
  394. package/dist/services/totp.service.js +116 -86
  395. package/dist/services/totp.service.js.map +1 -1
  396. package/dist/services/user-security.service.d.ts +15 -0
  397. package/dist/services/user-security.service.d.ts.map +1 -0
  398. package/dist/services/user-security.service.js +57 -0
  399. package/dist/services/user-security.service.js.map +1 -0
  400. package/dist/services/user.service.d.ts +6 -4
  401. package/dist/services/user.service.d.ts.map +1 -1
  402. package/dist/services/user.service.js +143 -121
  403. package/dist/services/user.service.js.map +1 -1
  404. package/frontend/client/assets/{auth-layout-BedWIZ7L.js → auth-layout-sea6nww4.js} +1 -1
  405. package/frontend/client/assets/{auth-page-header-C6Z6Air-.js → auth-page-header-CV85AJLW.js} +1 -1
  406. package/frontend/client/assets/document-navigation-FZbb5ldf.js +1 -0
  407. package/frontend/client/assets/i18n-vfKY-byx.js +1 -0
  408. package/frontend/client/assets/{language-selector-CeLHnp1n.js → language-selector-Jso2cQNI.js} +1 -1
  409. package/frontend/client/assets/manifest-90703545.js +1 -0
  410. package/frontend/client/assets/{passkey-Bkqvhjwb.js → passkey-CJhT-7yO.js} +1 -1
  411. package/frontend/client/assets/{promise-CepnkPDw.js → promise-BP9iSIs-.js} +1 -1
  412. package/frontend/client/assets/{root-CM8lJbh5.js → root-BkavuloG.js} +1 -1
  413. package/frontend/client/assets/{route-Y1_yJKhW.js → route-B0udr9eT.js} +1 -1
  414. package/frontend/client/assets/{route-CdPHVY9W.js → route-B3Uv9aTa.js} +1 -1
  415. package/frontend/client/assets/{route-CF1S7UUy.js → route-B6hIfgxz.js} +1 -1
  416. package/frontend/client/assets/{route-BcXtt6V2.js → route-BEWds2g-.js} +1 -1
  417. package/frontend/client/assets/route-Bm9LsorH.js +1 -0
  418. package/frontend/client/assets/route-Btv5Y69z.js +1 -0
  419. package/frontend/client/assets/route-BvyDzziE.js +1 -0
  420. package/frontend/client/assets/route-C6kG9u7j.js +1 -0
  421. package/frontend/client/assets/{route-1rid8j-3.js → route-C7C3Z0vI.js} +1 -1
  422. package/frontend/client/assets/{route-DphbGk_G.js → route-CVyefM3x.js} +1 -1
  423. package/frontend/client/assets/{route-DZvCkU11.js → route-CXth2Wqz.js} +1 -1
  424. package/frontend/client/assets/route-D0IqOurp.js +1 -0
  425. package/frontend/client/assets/route-DHmYUnJR.js +1 -0
  426. package/frontend/client/assets/route-DTjZQ_Fl.js +1 -0
  427. package/frontend/client/assets/route-D_dTeu1b.js +1 -0
  428. package/frontend/client/assets/{route-DkoXJmYM.js → route-Dj8gVemC.js} +1 -1
  429. package/frontend/client/assets/{route-DrtpzI6u.js → route-DnhPlHOi.js} +1 -1
  430. package/frontend/client/assets/route-FY92YQhF.js +1 -0
  431. package/frontend/client/assets/{route-CKiun7AR.js → route-PcLpZHbT.js} +1 -1
  432. package/frontend/client/assets/{route-BwhQptmx.js → route-qpE7i22X.js} +1 -1
  433. package/frontend/client/assets/{route-HA9dma-h.js → route-wK89gmoS.js} +1 -1
  434. package/frontend/client/assets/security-error-message-CMsTsiWf.js +1 -0
  435. package/frontend/client/assets/{shell-header-bar-CjPlfRKT.js → shell-header-bar-DRx10tE5.js} +1 -1
  436. package/frontend/client/assets/{terms-BGJD_l_i.js → terms-Bu9Itxxs.js} +1 -1
  437. package/frontend/client/assets/{use-totp-setup-Cwuds2tR.js → use-totp-setup-CoOXWOcT.js} +1 -1
  438. package/frontend/server/assets/{hydration-B63_G0fd.js → hydration-DWMjpNav.js} +1 -1
  439. package/frontend/server/assets/{root-loader.server-DUIBlg_3.js → root-loader.server-B4OqoLGG.js} +3 -3
  440. package/frontend/server/assets/{route-runtime.server-DiqwWb8W.js → route-runtime.server-03_pjVDT.js} +1 -1
  441. package/frontend/server/assets/{session-BaAt7WMI.js → session-sJkmzJie.js} +36 -24
  442. package/frontend/server/index.js +239 -193
  443. package/package.json +1 -1
  444. package/frontend/client/assets/document-navigation-Cnp3Alf0.js +0 -1
  445. package/frontend/client/assets/i18n-Dzv9HKFm.js +0 -1
  446. package/frontend/client/assets/manifest-71025d92.js +0 -1
  447. package/frontend/client/assets/route-B4jDMFTW.js +0 -1
  448. package/frontend/client/assets/route-C-DecXPL.js +0 -1
  449. package/frontend/client/assets/route-CGTMMDiX.js +0 -1
  450. package/frontend/client/assets/route-CMJbXiDe.js +0 -1
  451. package/frontend/client/assets/route-DBpAiakW.js +0 -1
  452. package/frontend/client/assets/route-DS92RKs5.js +0 -1
  453. package/frontend/client/assets/route-Dc6G2aDX.js +0 -1
  454. package/frontend/client/assets/route-DqAmRSJE.js +0 -1
  455. package/frontend/client/assets/route-Ezzcj26w.js +0 -1
@@ -1,5 +1,7 @@
1
1
  import { TermsContentEntitySchema } from '../entities/terms-content.entity.js';
2
2
  import { e } from '../schemas/error.js';
3
+ import { lockOAuthClient } from './client-security.js';
4
+ import { lockTermsPolicy } from './terms-policy.service.js';
3
5
  function clientResponse(client) {
4
6
  const type = client.clientSecretHash
5
7
  ? 'confidential'
@@ -157,88 +159,114 @@ export class AdminConsoleService {
157
159
  return { client: clientResponse(client), client_secret: secret };
158
160
  }
159
161
  async updateClient(id, input) {
160
- const client = await this.mikro.oauthClient.findOne({ id }, { populate: ['clientSecretHash'] });
161
- if (!client)
162
- return null;
163
- this.ensureClientEditable(client);
164
- client.name = input.name;
165
- client.redirectUris = input.redirectUris;
166
- client.postLogoutRedirectUris = input.postLogoutRedirectUris;
167
- client.webOrigins = input.webOrigins;
168
- client.grantTypes = input.grantTypes;
169
- client.responseTypes = input.responseTypes;
170
- client.scopes = input.scopes;
171
- client.skipConsent = input.skipConsent;
172
- await this.mikro.em.flush();
173
- return { client: clientResponse(client) };
162
+ return this.mikro.em.transactional(async () => {
163
+ const client = await lockOAuthClient(this.mikro.em, id);
164
+ if (client)
165
+ await this.mikro.em.populate(client, ['clientSecretHash']);
166
+ if (!client)
167
+ return null;
168
+ this.ensureClientEditable(client);
169
+ client.name = input.name;
170
+ client.redirectUris = input.redirectUris;
171
+ client.postLogoutRedirectUris = input.postLogoutRedirectUris;
172
+ client.webOrigins = input.webOrigins;
173
+ client.grantTypes = input.grantTypes;
174
+ client.responseTypes = input.responseTypes;
175
+ client.scopes = input.scopes;
176
+ client.skipConsent = input.skipConsent;
177
+ await this.mikro.em.flush();
178
+ return { client: clientResponse(client) };
179
+ });
174
180
  }
175
181
  async rotateClientSecret(id) {
176
- const client = await this.mikro.oauthClient.findOne({ id }, { populate: ['clientSecretHash'] });
177
- if (!client)
178
- return null;
179
- this.ensureClientEditable(client);
180
- if (!client.clientSecretHash)
181
- return null;
182
- const secret = `${crypto.randomUUID()}${crypto.randomUUID()}`;
183
- client.clientSecretHash =
184
- await this.securityService.hashClientSecret(secret);
185
- await this.mikro.em.flush();
186
- return { client: clientResponse(client), client_secret: secret };
182
+ return this.mikro.em.transactional(async () => {
183
+ const client = await lockOAuthClient(this.mikro.em, id);
184
+ if (client)
185
+ await this.mikro.em.populate(client, ['clientSecretHash']);
186
+ if (!client)
187
+ return null;
188
+ this.ensureClientEditable(client);
189
+ if (!client.clientSecretHash)
190
+ return null;
191
+ const secret = `${crypto.randomUUID()}${crypto.randomUUID()}`;
192
+ client.clientSecretHash =
193
+ await this.securityService.hashClientSecret(secret);
194
+ await this.mikro.em.flush();
195
+ return { client: clientResponse(client), client_secret: secret };
196
+ });
187
197
  }
188
198
  async setClientsEnabled(ids, filter, enabled) {
189
- if (ids) {
190
- const clients = await this.mikro.oauthClient.find({ id: { $in: ids } });
199
+ return this.mikro.em.transactional(async () => {
200
+ if (ids) {
201
+ const clients = await this.mikro.oauthClient.find({ id: { $in: ids } });
202
+ for (const client of clients.sort((a, b) => a.id.localeCompare(b.id))) {
203
+ const fresh = await lockOAuthClient(this.mikro.em, client.id);
204
+ if (!fresh)
205
+ throw new e.OAuthClientNotFound.Error();
206
+ this.ensureClientEditable(fresh);
207
+ }
208
+ return this.applyStatus(clients, enabled, (client) => client.enabled, (client) => {
209
+ client.enabled = enabled;
210
+ });
211
+ }
212
+ const where = {
213
+ deletedAt: null,
214
+ managed_by: 'database',
215
+ };
216
+ if (filter?.managedBy)
217
+ where['managed_by'] = filter.managedBy;
218
+ if (filter?.enabled !== undefined)
219
+ where['enabled'] = filter.enabled;
220
+ const query = filter?.query?.trim();
221
+ if (query)
222
+ where['$or'] = [
223
+ { name: { $like: `%${query}%` } },
224
+ { clientId: { $like: `%${query}%` } },
225
+ ];
226
+ const clients = await this.mikro.oauthClient.find(where, {
227
+ orderBy: { id: 'ASC' },
228
+ });
191
229
  for (const client of clients)
192
- this.ensureClientEditable(client);
230
+ await lockOAuthClient(this.mikro.em, client.id);
193
231
  return this.applyStatus(clients, enabled, (client) => client.enabled, (client) => {
194
232
  client.enabled = enabled;
195
233
  });
196
- }
197
- const where = {
198
- deletedAt: null,
199
- managed_by: 'database',
200
- };
201
- if (filter?.managedBy)
202
- where['managed_by'] = filter.managedBy;
203
- if (filter?.enabled !== undefined)
204
- where['enabled'] = filter.enabled;
205
- const query = filter?.query?.trim();
206
- if (query)
207
- where['$or'] = [
208
- { name: { $like: `%${query}%` } },
209
- { clientId: { $like: `%${query}%` } },
210
- ];
211
- const clients = await this.mikro.oauthClient.find(where);
212
- return this.applyStatus(clients, enabled, (client) => client.enabled, (client) => {
213
- client.enabled = enabled;
214
234
  });
215
235
  }
216
236
  async deleteClient(id) {
217
- const client = await this.mikro.oauthClient.findOne({ id }, { populate: ['clientSecretHash'] });
218
- if (!client)
219
- return null;
220
- if (client.managed_by === 'config') {
221
- throw new e.OAuthClientNotEditable.Error();
222
- }
223
- if (!client.deletedAt) {
224
- client.deletedAt = new Date();
225
- client.tokenEpoch = crypto.randomUUID();
226
- await this.mikro.em.flush();
227
- }
228
- return { client: clientResponse(client) };
237
+ return this.mikro.em.transactional(async () => {
238
+ const client = await lockOAuthClient(this.mikro.em, id);
239
+ if (client)
240
+ await this.mikro.em.populate(client, ['clientSecretHash']);
241
+ if (!client)
242
+ return null;
243
+ if (client.managed_by === 'config') {
244
+ throw new e.OAuthClientNotEditable.Error();
245
+ }
246
+ if (!client.deletedAt) {
247
+ client.deletedAt = new Date();
248
+ client.tokenEpoch = crypto.randomUUID();
249
+ await this.mikro.em.flush();
250
+ }
251
+ return { client: clientResponse(client) };
252
+ });
229
253
  }
230
254
  async restoreClient(id) {
231
- const client = await this.mikro.oauthClient.findOne({ id }, { populate: ['clientSecretHash'] });
232
- if (!client)
233
- return null;
234
- if (client.managed_by === 'config') {
235
- throw new e.OAuthClientNotEditable.Error();
236
- }
237
- if (client.deletedAt) {
238
- client.deletedAt = null;
239
- await this.mikro.em.flush();
240
- }
241
- return { client: clientResponse(client) };
255
+ return this.mikro.em.transactional(async () => {
256
+ const client = await lockOAuthClient(this.mikro.em, id);
257
+ if (client)
258
+ await this.mikro.em.populate(client, ['clientSecretHash']);
259
+ if (!client)
260
+ return null;
261
+ if (client.managed_by === 'config') {
262
+ throw new e.OAuthClientNotEditable.Error();
263
+ }
264
+ if (client.deletedAt) {
265
+ client.deletedAt = null;
266
+ await this.mikro.em.flush();
267
+ }
268
+ return { client: clientResponse(client) };
269
+ });
242
270
  }
243
271
  async listTerms(params) {
244
272
  const where = {};
@@ -268,42 +296,51 @@ export class AdminConsoleService {
268
296
  };
269
297
  }
270
298
  async createTerm(input) {
271
- const term = this.mikro.terms.create({
272
- id: input.id,
273
- required: input.required,
274
- consentMode: input.consentMode,
275
- version: input.version,
276
- managed_by: 'database',
277
- archivedAt: null,
299
+ return this.mikro.em.transactional(async () => {
300
+ await lockTermsPolicy(this.mikro.em, 'write');
301
+ const term = this.mikro.terms.create({
302
+ id: input.id,
303
+ required: input.required,
304
+ consentMode: input.consentMode,
305
+ version: input.version,
306
+ managed_by: 'database',
307
+ archivedAt: null,
308
+ });
309
+ this.replaceTermContents(this.mikro.em, term, input.contents);
310
+ await this.mikro.em.persist(term).flush();
311
+ return { term: termResponse(term) };
278
312
  });
279
- this.replaceTermContents(this.mikro.em, term, input.contents);
280
- await this.mikro.em.persist(term).flush();
281
- return { term: termResponse(term) };
282
313
  }
283
314
  async updateTerm(id, input) {
284
- const term = await this.mikro.terms.findOne({ id }, { populate: ['contents'] });
285
- if (!term || term.managed_by === 'config')
286
- return null;
287
- term.required = input.required;
288
- term.consentMode = input.consentMode;
289
- term.version = input.version;
290
- for (const content of term.contents.getItems())
291
- this.mikro.em.remove(content);
292
- term.contents.removeAll();
293
- this.replaceTermContents(this.mikro.em, term, input.contents);
294
- await this.mikro.em.flush();
295
- return { term: termResponse(term) };
315
+ return this.mikro.em.transactional(async () => {
316
+ await lockTermsPolicy(this.mikro.em, 'write');
317
+ const term = await this.mikro.terms.findOne({ id }, { populate: ['contents'] });
318
+ if (!term || term.managed_by === 'config')
319
+ return null;
320
+ term.required = input.required;
321
+ term.consentMode = input.consentMode;
322
+ term.version = input.version;
323
+ for (const content of term.contents.getItems())
324
+ this.mikro.em.remove(content);
325
+ term.contents.removeAll();
326
+ this.replaceTermContents(this.mikro.em, term, input.contents);
327
+ await this.mikro.em.flush();
328
+ return { term: termResponse(term) };
329
+ });
296
330
  }
297
331
  async setTermsArchived(ids, filter, archived) {
298
- const where = ids ? { id: { $in: ids } } : {};
299
- if (filter?.managedBy)
300
- where['managed_by'] = filter.managedBy;
301
- const query = filter?.query?.trim();
302
- if (query)
303
- where['id'] = { $like: `%${query}%` };
304
- const terms = await this.mikro.terms.find(where);
305
- return this.applyStatus(terms, archived, (term) => Boolean(term.archivedAt), (term) => {
306
- term.archivedAt = archived ? new Date() : null;
332
+ return this.mikro.em.transactional(async () => {
333
+ await lockTermsPolicy(this.mikro.em, 'write');
334
+ const where = ids ? { id: { $in: ids } } : {};
335
+ if (filter?.managedBy)
336
+ where['managed_by'] = filter.managedBy;
337
+ const query = filter?.query?.trim();
338
+ if (query)
339
+ where['id'] = { $like: `%${query}%` };
340
+ const terms = await this.mikro.terms.find(where);
341
+ return this.applyStatus(terms, archived, (term) => Boolean(term.archivedAt), (term) => {
342
+ term.archivedAt = archived ? new Date() : null;
343
+ });
307
344
  });
308
345
  }
309
346
  async search(query) {
@@ -1 +1 @@
1
- {"version":3,"file":"admin-console.service.js","sourceRoot":"","sources":["../../src/services/admin-console.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-console.service.js","sourceRoot":"","sources":["../../src/services/admin-console.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MikroService } from './mikro.service.js';
2
+ import type { SecurityService } from './security.service.js';
3
+ /** Shared, atomic fixed-window budgets. No process-local locks or raw PII keys. */
4
+ export declare function consumeAuthBudget(mikro: MikroService, security: SecurityService, key: string, limit: number, windowSeconds: number): Promise<number | null>;
5
+ export declare function clearAuthBudget(mikro: MikroService, security: SecurityService, key: string, windowSeconds: number, requestedAt: number): Promise<void>;
6
+ //# sourceMappingURL=auth-budget.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-budget.service.d.ts","sourceRoot":"","sources":["../../src/services/auth-budget.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,mFAAmF;AACnF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBxB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,30 @@
1
+ import { raw, UniqueConstraintViolationException } from '@mikro-orm/core';
2
+ import { AuthBudgetEntitySchema } from '../entities/auth-budget.entity.js';
3
+ /** Shared, atomic fixed-window budgets. No process-local locks or raw PII keys. */
4
+ export async function consumeAuthBudget(mikro, security, key, limit, windowSeconds) {
5
+ const windowMs = windowSeconds * 1000;
6
+ const now = Date.now();
7
+ const bucket = Math.floor(now / windowMs);
8
+ const expires = (bucket + 1) * windowMs;
9
+ const id = await security.hashOpaqueToken('auth-budget', `${key}:${bucket}`);
10
+ try {
11
+ await mikro.em.insert(AuthBudgetEntitySchema, {
12
+ id,
13
+ attempts: 1,
14
+ expires_at: new Date(expires),
15
+ });
16
+ return null;
17
+ }
18
+ catch (error) {
19
+ if (!(error instanceof UniqueConstraintViolationException))
20
+ throw error;
21
+ }
22
+ const changed = await mikro.em.nativeUpdate(AuthBudgetEntitySchema, { id, attempts: { $lt: limit } }, { attempts: raw('attempts + 1') });
23
+ return changed === 1 ? null : Math.max(1, Math.ceil((expires - now) / 1000));
24
+ }
25
+ export async function clearAuthBudget(mikro, security, key, windowSeconds, requestedAt) {
26
+ const bucket = Math.floor(requestedAt / (windowSeconds * 1000));
27
+ const id = await security.hashOpaqueToken('auth-budget', `${key}:${bucket}`);
28
+ await mikro.em.nativeDelete(AuthBudgetEntitySchema, { id });
29
+ }
30
+ //# sourceMappingURL=auth-budget.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-budget.service.js","sourceRoot":"","sources":["../../src/services/auth-budget.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAI3E,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAmB,EACnB,QAAyB,EACzB,GAAW,EACX,KAAa,EACb,aAAqB;IAErB,MAAM,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB,EAAE;YAC5C,EAAE;YACF,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,kCAAkC,CAAC;YAAE,MAAM,KAAK,CAAC;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,YAAY,CACzC,sBAAsB,EACtB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAChC,EAAE,QAAQ,EAAE,GAAG,CAAS,cAAc,CAAC,EAAE,CAC1C,CAAC;IACF,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAmB,EACnB,QAAyB,EACzB,GAAW,EACX,aAAqB,EACrB,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { EntityManager } from '@mikro-orm/core';
2
+ import type { UserEntity } from '../entities/user.entity.js';
3
+ /** Called while the user's write lock is held. Expiry is secondary to epoch equality. */
4
+ export declare function invalidateUserAuthentication(em: EntityManager, user: UserEntity): Promise<void>;
5
+ //# sourceMappingURL=authentication-epoch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication-epoch.d.ts","sourceRoot":"","sources":["../../src/services/authentication-epoch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,yFAAyF;AACzF,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAuBf"}
@@ -0,0 +1,22 @@
1
+ import { EmailVerificationEntitySchema } from '../entities/email-verification.entity.js';
2
+ import { PasswordResetEntitySchema } from '../entities/password-reset.entity.js';
3
+ import { PendingOAuthRegistrationEntitySchema } from '../entities/pending-oauth-registration.entity.js';
4
+ import { UserOAuthEntitySchema } from '../entities/user-oauth.entity.js';
5
+ /** Called while the user's write lock is held. Expiry is secondary to epoch equality. */
6
+ export async function invalidateUserAuthentication(em, user) {
7
+ const identities = await em.find(UserOAuthEntitySchema, { user: user.sub });
8
+ await em.nativeDelete(PendingOAuthRegistrationEntitySchema, {
9
+ $or: [
10
+ { userInfo: { email: user.email } },
11
+ ...identities.map((identity) => ({
12
+ providerId: identity.provider_name,
13
+ userInfo: { id: identity.provider_user_id },
14
+ })),
15
+ ],
16
+ });
17
+ user.token_epoch = crypto.randomUUID();
18
+ user.sessions_invalidated_at = new Date();
19
+ await em.nativeUpdate(EmailVerificationEntitySchema, { user: user.sub, verified: false }, { revoked_at: new Date() });
20
+ await em.nativeUpdate(PasswordResetEntitySchema, { user: user.sub, used: false }, { revoked_at: new Date() });
21
+ }
22
+ //# sourceMappingURL=authentication-epoch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication-epoch.js","sourceRoot":"","sources":["../../src/services/authentication-epoch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,oCAAoC,EAAE,MAAM,kDAAkD,CAAC;AAExG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,EAAiB,EACjB,IAAgB;IAEhB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,CAAC,YAAY,CAAC,oCAAoC,EAAE;QAC1D,GAAG,EAAE;YACH,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;YACnC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC/B,UAAU,EAAE,QAAQ,CAAC,aAAa;gBAClC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,gBAAgB,EAAE;aAC5C,CAAC,CAAC;SACJ;KACF,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACvC,IAAI,CAAC,uBAAuB,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,EAAE,CAAC,YAAY,CACnB,6BAA6B,EAC7B,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAC3B,CAAC;IACF,MAAM,EAAE,CAAC,YAAY,CACnB,yBAAyB,EACzB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAC/B,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { AppEnv } from '../lib/app-env.js';
2
+ import type { AuthorizeResult } from './oauth-authorize.service.js';
3
+ export interface AuthorizationProof {
4
+ userSub: string;
5
+ userEpoch: string;
6
+ clientId: string;
7
+ clientEpoch: string;
8
+ redirectUri: string;
9
+ responseType: string;
10
+ scopes: string[];
11
+ }
12
+ export declare function completeBrowserAuthorization(c: {
13
+ var: AppEnv['Variables'];
14
+ req: {
15
+ path: string;
16
+ };
17
+ }, proof: AuthorizationProof, operation: () => Promise<AuthorizeResult>): Promise<AuthorizeResult>;
18
+ //# sourceMappingURL=authorization-browser.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-browser.service.d.ts","sourceRoot":"","sources":["../../src/services/authorization-browser.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,4BAA4B,CAChD,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACtD,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,GACxC,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
@@ -0,0 +1,28 @@
1
+ import { UserEntity } from '../entities/user.entity.js';
2
+ import { e } from '../schemas/error.js';
3
+ import { withBrowserSecurity } from './browser-security.service.js';
4
+ import { lockOAuthClient } from './client-security.js';
5
+ export async function completeBrowserAuthorization(c, proof, operation) {
6
+ return withBrowserSecurity(c, async () => {
7
+ const { mikro, oauthClientService } = c.var.services;
8
+ const user = await mikro.em.findOneOrFail(UserEntity, { sub: proof.userSub }, { refresh: true });
9
+ if (user.deleted_at ||
10
+ user.token_epoch !== proof.userEpoch ||
11
+ c.var.session.authorization.security?.grants[proof.userSub] !==
12
+ proof.userEpoch)
13
+ throw new e.Unauthorized.Error();
14
+ const client = await lockOAuthClient(mikro.em, proof.clientId);
15
+ if (!client ||
16
+ client.deletedAt ||
17
+ !client.enabled ||
18
+ (client.tokenEpoch ?? '') !== proof.clientEpoch)
19
+ throw new e.Unauthorized.Error();
20
+ const current = await oauthClientService.findByClientId(client.clientId);
21
+ oauthClientService.validateRedirectUri(current, proof.redirectUri);
22
+ oauthClientService.validateResponseType(current, proof.responseType);
23
+ oauthClientService.validateGrantType(current, proof.responseType === 'code' ? 'authorization_code' : 'implicit');
24
+ oauthClientService.validateScopes(current, proof.scopes);
25
+ return operation();
26
+ }, { targets: [proof.userSub], termsPolicy: 'read' });
27
+ }
28
+ //# sourceMappingURL=authorization-browser.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-browser.service.js","sourceRoot":"","sources":["../../src/services/authorization-browser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAavD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,CAAsD,EACtD,KAAyB,EACzB,SAAyC;IAEzC,OAAO,mBAAmB,CACxB,CAAC,EACD,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,aAAa,CACvC,UAAU,EACV,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,EACtB,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QACF,IACE,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,SAAS;YACpC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBACzD,KAAK,CAAC,SAAS;YAEjB,MAAM,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,IACE,CAAC,MAAM;YACP,MAAM,CAAC,SAAS;YAChB,CAAC,MAAM,CAAC,OAAO;YACf,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,WAAW;YAE/C,MAAM,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzE,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACnE,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACrE,kBAAkB,CAAC,iBAAiB,CAClC,OAAO,EACP,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAClE,CAAC;QACF,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC,EACD,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { AppEnv } from '../lib/app-env.js';
2
+ import { type TermsPolicyAccess } from './terms-policy.service.js';
3
+ /** Credential preparation must finish before entering this transaction. */
4
+ export declare function withBrowserSecurity<T>(c: {
5
+ var: AppEnv['Variables'];
6
+ req: {
7
+ path: string;
8
+ };
9
+ }, operation: () => Promise<T>, options?: {
10
+ stage?: 'setup' | 'mfa';
11
+ targets?: string[];
12
+ termsPolicy?: TermsPolicyAccess;
13
+ }): Promise<T>;
14
+ //# sourceMappingURL=browser-security.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-security.service.d.ts","sourceRoot":"","sources":["../../src/services/browser-security.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAGnC,2EAA2E;AAC3E,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,CAAC,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACtD,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GACL,OAAO,CAAC,CAAC,CAAC,CAmGZ"}
@@ -0,0 +1,85 @@
1
+ import { raw } from '@mikro-orm/core';
2
+ import { BrowserSessionEntitySchema } from '../entities/browser-session.entity.js';
3
+ import { UserEntity } from '../entities/user.entity.js';
4
+ import { e } from '../schemas/error.js';
5
+ import { lockTermsPolicy, } from './terms-policy.service.js';
6
+ import { isSecurityConflict } from './user-security.service.js';
7
+ /** Credential preparation must finish before entering this transaction. */
8
+ export async function withBrowserSecurity(c, operation, options = {}) {
9
+ const { session, services } = c.var;
10
+ const original = session.authorization;
11
+ const subject = options.stage === 'setup'
12
+ ? (original.pending2FASetup ?? original.user)
13
+ : options.stage === 'mfa'
14
+ ? original.pending2FAUser
15
+ : original.user;
16
+ if (!subject)
17
+ throw new e.Unauthorized.Error();
18
+ const epoch = original.security?.grants[subject.sub];
19
+ if (!epoch)
20
+ throw new e.Unauthorized.Error();
21
+ try {
22
+ return await session.atomic(async () => {
23
+ const em = services.mikro.em;
24
+ if (options.termsPolicy)
25
+ await lockTermsPolicy(em, options.termsPolicy);
26
+ for (const sub of [
27
+ ...new Set([subject.sub, ...(options.targets ?? [])]),
28
+ ].sort()) {
29
+ const changed = await em.nativeUpdate(UserEntity, { sub }, { security_revision: raw('security_revision + 1') });
30
+ if (changed !== 1) {
31
+ if (sub !== subject.sub)
32
+ throw new e.UserNotFound.Error();
33
+ throw new e.Unauthorized.Error();
34
+ }
35
+ }
36
+ const user = await em.findOneOrFail(UserEntity, { sub: subject.sub }, { refresh: true });
37
+ if (user.deleted_at || user.token_epoch !== epoch)
38
+ throw new e.Unauthorized.Error();
39
+ if (c.req.path.startsWith('/api/admin/') && user.role !== 'admin')
40
+ throw new e.Forbidden.Error();
41
+ const locked = await em.nativeUpdate(BrowserSessionEntitySchema, {
42
+ id: session.id,
43
+ revision: session.revision,
44
+ expires_at: { $gt: new Date() },
45
+ }, { revision: session.revision });
46
+ if (locked !== 1)
47
+ throw new e.Unauthorized.Error();
48
+ const current = await em.findOneOrFail(BrowserSessionEntitySchema, { id: session.id }, { refresh: true });
49
+ if (current.data.security?.grants[subject.sub] !== epoch)
50
+ throw new e.Unauthorized.Error();
51
+ if (options.stage &&
52
+ subject !== original.user &&
53
+ (current.data.security?.pendingExpiresAt ?? 0) <= Date.now())
54
+ throw new e.Unauthorized.Error();
55
+ const security = current.data.security;
56
+ if (original.oauth && (security?.oauthExpiresAt ?? 0) <= Date.now())
57
+ throw new e.Unauthorized.Error();
58
+ if (original.passkey_challenge &&
59
+ (security?.challengeExpiresAt ?? 0) <= Date.now())
60
+ throw new e.Unauthorized.Error();
61
+ // Password-only enrollment authority ends once any factor is enrolled,
62
+ // including when another browser finishes while this request is waiting.
63
+ if (options.stage === 'setup' &&
64
+ original.pending2FASetup &&
65
+ (await services.userService.userRegistered2FAMethods(subject.sub))
66
+ .length > 0)
67
+ throw new e.Unauthorized.Error();
68
+ const result = await operation();
69
+ const after = await em.findOneOrFail(UserEntity, { sub: subject.sub }, { refresh: true });
70
+ if (after.deleted_at || after.token_epoch !== epoch) {
71
+ session.clearAuthSessions();
72
+ session.set('accounts', session
73
+ .get('accounts')
74
+ ?.filter((account) => account.sub !== subject.sub));
75
+ }
76
+ return result;
77
+ });
78
+ }
79
+ catch (error) {
80
+ if (isSecurityConflict(error))
81
+ throw new e.ConcurrentSecurityChange.Error();
82
+ throw error;
83
+ }
84
+ }
85
+ //# sourceMappingURL=browser-security.service.js.map