@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
@@ -0,0 +1,223 @@
1
+ import { RequestContext } from '@mikro-orm/core';
2
+ import { z } from 'zod';
3
+ import { BackgroundJobEntitySchema } from '../entities/background-job.entity.js';
4
+ import { DatabaseBackgroundJobStore } from '../entrypoints/scheduler/database.js';
5
+ import { DistributedBackgroundJobRunner, PermanentBackgroundJobError, } from '../entrypoints/scheduler/distributed-runner.js';
6
+ import { e } from '../schemas/error.js';
7
+ import { withUserSecurity } from './user-security.service.js';
8
+ const JOB_ID = 'security.mail';
9
+ const Envelope = z.object({ id: z.uuid(), sealed: z.string() });
10
+ const MailRequest = z.object({
11
+ kind: z.enum(['verification', 'password-reset']),
12
+ email: z.email(),
13
+ requestedAt: z.number(),
14
+ locale: z.enum(['ko', 'en', 'ja']).optional(),
15
+ userSub: z.string().optional(),
16
+ token: z.string().optional(),
17
+ userEpoch: z.string().optional(),
18
+ });
19
+ export class MailQueueService {
20
+ instanceId = `mail:${crypto.randomUUID()}`;
21
+ runner;
22
+ handle;
23
+ config;
24
+ mikro;
25
+ emailService;
26
+ security;
27
+ logger;
28
+ constructor(config, mikro, emailService, security, logger) {
29
+ this.config = config;
30
+ this.mikro = mikro;
31
+ this.emailService = emailService;
32
+ this.security = security;
33
+ this.logger = logger;
34
+ }
35
+ start() {
36
+ if (!this.config.email || this.handle)
37
+ return;
38
+ this.runner = new DistributedBackgroundJobRunner({
39
+ name: 'Security mail',
40
+ pollIntervalMs: 5000,
41
+ lockTtlMs: 60000,
42
+ retryDelayMs: 1000,
43
+ maxAttempts: 3,
44
+ retentionMs: 604800000,
45
+ instanceId: this.instanceId,
46
+ logger: this.logger,
47
+ store: new DatabaseBackgroundJobStore(this.mikro, [JOB_ID], true),
48
+ jobs: [
49
+ {
50
+ id: JOB_ID,
51
+ name: 'Authentication email',
52
+ handler: (payload, context) => RequestContext.create(this.mikro.orm.em, () => this.process(payload, context.signal)),
53
+ },
54
+ ],
55
+ });
56
+ this.handle = this.runner.start();
57
+ }
58
+ async stop() {
59
+ await this.handle?.stop();
60
+ this.handle = undefined;
61
+ }
62
+ /** Explicit drain for embedded workers and deterministic tests; no polling sleeps. */
63
+ async runPending() {
64
+ await this.runner?.runPending();
65
+ }
66
+ async enqueue(kind, email, locale, userSub) {
67
+ if (!this.config.email)
68
+ throw new e.EmailNotActivated.Error();
69
+ const now = new Date();
70
+ const id = crypto.randomUUID();
71
+ const sealed = await this.security.sealMailPayload(JSON.stringify({
72
+ kind,
73
+ email,
74
+ locale,
75
+ userSub,
76
+ requestedAt: now.getTime(),
77
+ }));
78
+ // Use the request's transaction, unlike a detached scheduler enqueue.
79
+ await this.mikro.em.insert(BackgroundJobEntitySchema, {
80
+ id,
81
+ jobId: JOB_ID,
82
+ payload: JSON.stringify({ id, sealed }),
83
+ status: 'pending',
84
+ availableAt: now,
85
+ lockedBy: null,
86
+ lockedUntil: null,
87
+ attemptCount: 0,
88
+ maxAttempts: 3,
89
+ lastError: null,
90
+ completedAt: null,
91
+ created_at: now,
92
+ updated_at: now,
93
+ });
94
+ return id;
95
+ }
96
+ async process(payload, signal) {
97
+ const envelope = Envelope.safeParse(payload);
98
+ if (!envelope.success)
99
+ throw new Error('MAIL_PAYLOAD_INVALID');
100
+ const jobId = envelope.data.id;
101
+ try {
102
+ const clear = await this.security.openMailPayload(envelope.data.sealed);
103
+ if (!clear)
104
+ throw new Error('MAIL_PAYLOAD_INVALID');
105
+ const request = MailRequest.parse(JSON.parse(clear));
106
+ const candidate = await this.mikro.user.findOne({
107
+ email: request.email,
108
+ deleted_at: null,
109
+ });
110
+ if (!candidate ||
111
+ candidate.created_at.getTime() > request.requestedAt ||
112
+ (!request.userSub &&
113
+ candidate.created_at.getTime() === request.requestedAt) ||
114
+ (!request.token &&
115
+ candidate.updated_at.getTime() > request.requestedAt) ||
116
+ (!request.userSub &&
117
+ candidate.updated_at.getTime() === request.requestedAt) ||
118
+ (request.userSub && request.userSub !== candidate.sub))
119
+ return;
120
+ const prepared = await withUserSecurity(this.mikro, candidate.sub, async (user) => {
121
+ if (user.email !== request.email ||
122
+ (!request.token &&
123
+ user.updated_at.getTime() > request.requestedAt) ||
124
+ (request.token && request.userEpoch !== user.token_epoch) ||
125
+ (!request.userSub &&
126
+ user.updated_at.getTime() === request.requestedAt))
127
+ return null;
128
+ if (request.kind === 'verification'
129
+ ? user.email_verified
130
+ : user.managed_by !== 'database')
131
+ return null;
132
+ if (!request.token && Date.now() - request.requestedAt > 3600000)
133
+ return null;
134
+ let token = request.token;
135
+ if (!token) {
136
+ const generated = request.kind === 'verification'
137
+ ? await this.mikro.emailVerification.generateToken({
138
+ userSub: user.sub,
139
+ userEpoch: user.token_epoch,
140
+ })
141
+ : await this.mikro.passwordReset.generateToken({
142
+ userSub: user.sub,
143
+ userEpoch: user.token_epoch,
144
+ });
145
+ token = generated.token;
146
+ await this.mikro.em.flush();
147
+ const sealed = await this.security.sealMailPayload(JSON.stringify({
148
+ ...request,
149
+ userSub: user.sub,
150
+ userEpoch: user.token_epoch,
151
+ token,
152
+ }));
153
+ const updated = await this.mikro.em.nativeUpdate(BackgroundJobEntitySchema, {
154
+ id: jobId,
155
+ lockedBy: this.instanceId,
156
+ status: 'running',
157
+ lockedUntil: { $gt: new Date() },
158
+ }, { payload: JSON.stringify({ id: jobId, sealed }) });
159
+ if (updated !== 1)
160
+ throw new Error('MAIL_LEASE_LOST');
161
+ }
162
+ const active = request.kind === 'verification'
163
+ ? await this.mikro.emailVerification.count({
164
+ user: user.sub,
165
+ user_epoch: user.token_epoch,
166
+ token,
167
+ verified: false,
168
+ revoked_at: null,
169
+ expiresAt: { $gt: new Date() },
170
+ })
171
+ : await this.mikro.passwordReset.count({
172
+ user: user.sub,
173
+ user_epoch: user.token_epoch,
174
+ token,
175
+ used: false,
176
+ revoked_at: null,
177
+ expiresAt: { $gt: new Date() },
178
+ });
179
+ return active === 1
180
+ ? {
181
+ token,
182
+ email: user.email,
183
+ locale: request.locale,
184
+ messageId: `<${jobId}@${new URL(this.config.server.public_origin).hostname}>`,
185
+ }
186
+ : null;
187
+ });
188
+ if (!prepared || signal?.aborted)
189
+ return;
190
+ const lease = await this.mikro.backgroundJob.count({
191
+ id: jobId,
192
+ lockedBy: this.instanceId,
193
+ status: 'running',
194
+ lockedUntil: { $gt: new Date() },
195
+ });
196
+ if (lease !== 1)
197
+ return;
198
+ this.logger.info({
199
+ jobId,
200
+ state: 'sending',
201
+ queueAgeMs: Date.now() - request.requestedAt,
202
+ }, 'Authentication mail');
203
+ if (request.kind === 'verification')
204
+ await this.emailService.sendVerificationEmail(prepared);
205
+ else
206
+ await this.emailService.sendPasswordResetEmail(prepared);
207
+ }
208
+ catch (error) {
209
+ const responseCode = error instanceof Error ? Reflect.get(error, 'responseCode') : undefined;
210
+ const permanent = typeof responseCode === 'number' &&
211
+ responseCode >= 500 &&
212
+ responseCode < 600;
213
+ const code = permanent
214
+ ? 'MAIL_PERMANENT_FAILURE'
215
+ : 'MAIL_DELIVERY_FAILED';
216
+ this.logger.warn({ jobId, code }, 'Authentication mail failed');
217
+ if (permanent)
218
+ throw new PermanentBackgroundJobError(code);
219
+ throw new Error(code);
220
+ }
221
+ }
222
+ }
223
+ //# sourceMappingURL=mail-queue.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-queue.service.js","sourceRoot":"","sources":["../../src/services/mail-queue.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mikro.service.d.ts","sourceRoot":"","sources":["../../src/services/mikro.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAoB3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0DAA0D,CAAC;AACnH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AACnG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAE5G,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,QAAQ,CAAC;IAC9B,SAAgB,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,SAAgB,IAAI,EAAE,cAAc,CAAC;IACrC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,eAAe,EAAE,yBAAyB,CAAC;IAC3D,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,iBAAiB,EAAE,2BAA2B,CAAC;IAC/D,SAAgB,aAAa,EAAE,uBAAuB,CAAC;IACvD,SAAgB,wBAAwB,EAAE,kCAAkC,CAAC;IAC7E,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IACrD,SAAgB,aAAa,EAAE,uBAAuB,CAAC;IACvD,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IACrD,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,gBAAgB,EAAE,0BAA0B,CAAC;IAC7D,SAAgB,QAAQ,EAAE,kBAAkB,CAAC;IAC7C,SAAgB,oBAAoB,EAAE,8BAA8B,CAAC;IACrE,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,KAAK,EAAE,eAAe,CAAC;IACvC,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IAErD,OAAO,eA4BN;IAED,OAAoB,UAAU,CAC5B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAQvB;IAEY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;CACF"}
1
+ {"version":3,"file":"mikro.service.d.ts","sourceRoot":"","sources":["../../src/services/mikro.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAoB3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0DAA0D,CAAC;AACnH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kDAAkD,CAAC;AACnG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AAG5G,qBAAa,YAAY;IACvB,SAAgB,GAAG,EAAE,QAAQ,CAAC;IAC9B,SAAgB,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,SAAgB,IAAI,EAAE,cAAc,CAAC;IACrC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAC/C,SAAgB,eAAe,EAAE,yBAAyB,CAAC;IAC3D,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,iBAAiB,EAAE,2BAA2B,CAAC;IAC/D,SAAgB,aAAa,EAAE,uBAAuB,CAAC;IACvD,SAAgB,wBAAwB,EAAE,kCAAkC,CAAC;IAC7E,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IACrD,SAAgB,aAAa,EAAE,uBAAuB,CAAC;IACvD,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IACrD,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,gBAAgB,EAAE,0BAA0B,CAAC;IAC7D,SAAgB,QAAQ,EAAE,kBAAkB,CAAC;IAC7C,SAAgB,oBAAoB,EAAE,8BAA8B,CAAC;IACrE,SAAgB,WAAW,EAAE,qBAAqB,CAAC;IACnD,SAAgB,KAAK,EAAE,eAAe,CAAC;IACvC,SAAgB,YAAY,EAAE,sBAAsB,CAAC;IAErD,OAAO,eA4BN;IAED,OAAoB,UAAU,CAC5B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CASvB;IAEY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;CACF"}
@@ -18,6 +18,7 @@ import { UserPasskeyEntitySchema } from '../entities/user-passkey.entity.js';
18
18
  import { UserTermsConsentEntity } from '../entities/user-terms-consent.entity.js';
19
19
  import { UserTotpEntitySchema } from '../entities/user-totp.entity.js';
20
20
  import { UserTotpRecoveryCodeEntitySchema } from '../entities/user-totp-recovery-code.entity.js';
21
+ import { initializeTermsPolicy } from './terms-policy.service.js';
21
22
  export class MikroService {
22
23
  orm;
23
24
  em;
@@ -67,6 +68,7 @@ export class MikroService {
67
68
  logger.info('Initializing MikroORM...');
68
69
  const orm = await MikroORM.init(await config.database.getMikroOrmOptions());
69
70
  await config.database.initialize(orm);
71
+ await initializeTermsPolicy(orm.em.fork());
70
72
  logger.info('MikroORM initialized');
71
73
  return new MikroService(orm);
72
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mikro.service.js","sourceRoot":"","sources":["../../src/services/mikro.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mikro.service.js","sourceRoot":"","sources":["../../src/services/mikro.service.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type z from 'zod';
2
2
  import type { IssuaryRuntimeConfig } from '../lib/config/index.ts';
3
3
  import type { AccountSelectionSession, ReauthenticationSession } from '../middleware/session.ts';
4
4
  import type { f } from '../schemas/field.ts';
5
+ import type { AuthorizationProof } from './authorization-browser.service.js';
5
6
  import type { JwtService } from './jwt.service.ts';
6
7
  import type { MikroService } from './mikro.service.ts';
7
8
  import type { OAuthClientService } from './oauth-client.service.ts';
@@ -74,6 +75,8 @@ export declare class OAuthAuthorizeService {
74
75
  */
75
76
  authorize(params: {
76
77
  query: AuthorizeParams;
78
+ completeAuthorization?: (proof: AuthorizationProof, operation: () => Promise<AuthorizeResult>) => Promise<AuthorizeResult>;
79
+ authenticationEpochs?: Record<string, string>;
77
80
  userSession?: {
78
81
  sub: string;
79
82
  /** OIDC: Time when End-User authentication occurred (Unix timestamp) */
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-authorize.service.d.ts","sourceRoot":"","sources":["../../src/services/oauth-authorize.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-authorize.service.d.ts","sourceRoot":"","sources":["../../src/services/oauth-authorize.service.ts"],"names":[],"mappings":"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"}
@@ -179,122 +179,148 @@ export class OAuthAuthorizeService {
179
179
  throw new e.InvalidAuthorizationRequest.Error();
180
180
  }
181
181
  }
182
- // Complete required terms for the selected account before any grant.
183
- const pendingTerms = await this.termsService.getPendingRequiredTerms(selectedSession.sub);
184
- if (pendingTerms.length > 0) {
185
- if (prompts.includes('none')) {
186
- return this.buildErrorAuthorizationResult({
187
- redirectUri: query.redirect_uri,
188
- error: 'interaction_required',
189
- errorDescription: 'The End-User must accept the required terms.',
190
- state: query.state,
191
- responseType: query.response_type,
192
- responseMode: query.response_mode,
193
- });
182
+ let grantedScopes = [];
183
+ const checkPolicy = async (current) => {
184
+ // Complete required terms for the selected account before any grant.
185
+ const pendingTerms = await this.termsService.getPendingRequiredTerms(selectedSession.sub);
186
+ if (pendingTerms.length > 0) {
187
+ if (prompts.includes('none')) {
188
+ return this.buildErrorAuthorizationResult({
189
+ redirectUri: query.redirect_uri,
190
+ error: 'interaction_required',
191
+ errorDescription: 'The End-User must accept the required terms.',
192
+ state: query.state,
193
+ responseType: query.response_type,
194
+ responseMode: query.response_mode,
195
+ });
196
+ }
197
+ const continuation = new URL('/oauth/authorize', this.config.server.public_origin);
198
+ this.copyAuthorizeParams(continuation, query);
199
+ const termsUrl = new URL('/terms', this.config.server.public_origin);
200
+ termsUrl.searchParams.set('redirect', `${continuation.pathname}${continuation.search}`);
201
+ return { type: 'redirect', url: termsUrl.toString() };
194
202
  }
195
- const continuation = new URL('/oauth/authorize', this.config.server.public_origin);
196
- this.copyAuthorizeParams(continuation, query);
197
- const termsUrl = new URL('/terms', this.config.server.public_origin);
198
- termsUrl.searchParams.set('redirect', continuation.toString());
199
- return { type: 'redirect', url: termsUrl.toString() };
200
- }
201
- const grantedScopes = await this.userConsentService.resolveScopes({
203
+ grantedScopes = await this.userConsentService.resolveScopes({
204
+ userSub: selectedSession.sub,
205
+ clientId: current.id,
206
+ requestedScopes,
207
+ responseType: query.response_type,
208
+ prompt: query.prompt,
209
+ skipConsent: current.skipConsent,
210
+ });
211
+ // 9. Check if consent is required (using IDs, not entities)
212
+ const requiresConsent = await this.userConsentService.requiresConsent({
213
+ userSub: selectedSession.sub,
214
+ clientId: current.id,
215
+ requestedScopes: grantedScopes,
216
+ prompt: prompts.includes('consent') ? 'consent' : undefined,
217
+ skipConsent: current.skipConsent,
218
+ });
219
+ if (requiresConsent) {
220
+ // Handle prompt=none - must return error if consent is required
221
+ if (prompts.includes('none')) {
222
+ return this.buildErrorAuthorizationResult({
223
+ redirectUri: query.redirect_uri,
224
+ error: 'consent_required',
225
+ errorDescription: 'The Authorization Server requires End-User consent.',
226
+ state: query.state,
227
+ responseType: query.response_type,
228
+ responseMode: query.response_mode,
229
+ });
230
+ }
231
+ // Redirect to consent page
232
+ if (hasFreshReauthentication) {
233
+ const consentReauthentication = this.createReauthenticationSession(this.buildConsentReauthenticationQuery(query));
234
+ params.setReauthenticationSession?.({
235
+ ...consentReauthentication,
236
+ sub: userSession.sub,
237
+ authenticated_at: userSession.authenticated_at,
238
+ });
239
+ }
240
+ const consentUrl = this.buildConsentRedirectUrl(query);
241
+ return {
242
+ type: 'redirect',
243
+ url: consentUrl,
244
+ };
245
+ }
246
+ return undefined;
247
+ };
248
+ const preflight = await checkPolicy(client);
249
+ if (preflight)
250
+ return preflight;
251
+ if (!params.completeAuthorization)
252
+ throw new e.Unauthorized.Error();
253
+ return params.completeAuthorization({
202
254
  userSub: selectedSession.sub,
255
+ userEpoch: params.authenticationEpochs?.[selectedSession.sub] ?? '',
203
256
  clientId: client.id,
204
- requestedScopes,
257
+ clientEpoch: client.tokenEpoch ?? '',
258
+ redirectUri: query.redirect_uri,
205
259
  responseType: query.response_type,
206
- prompt: query.prompt,
207
- skipConsent: client.skipConsent,
208
- });
209
- // 9. Check if consent is required (using IDs, not entities)
210
- const requiresConsent = await this.userConsentService.requiresConsent({
211
- userSub: selectedSession.sub,
212
- clientId: client.id,
213
- requestedScopes: grantedScopes,
214
- prompt: prompts.includes('consent') ? 'consent' : undefined,
215
- skipConsent: client.skipConsent,
216
- });
217
- if (requiresConsent) {
218
- // Handle prompt=none - must return error if consent is required
219
- if (prompts.includes('none')) {
220
- return this.buildErrorAuthorizationResult({
260
+ scopes: grantedScopes,
261
+ }, async () => {
262
+ const current = await this.oauthClientService.findByClientId(client.clientId);
263
+ const pendingPolicy = await checkPolicy(current);
264
+ if (pendingPolicy)
265
+ return pendingPolicy;
266
+ if (isImplicitIdToken) {
267
+ if (!query.nonce) {
268
+ throw new e.InvalidAuthorizationRequest.Error();
269
+ }
270
+ params.clearAccountSelectionSession?.();
271
+ return this.buildImplicitIdTokenRedirect({
272
+ clientId: client.clientId,
273
+ userSub: selectedSession.sub,
274
+ userEpoch: params.authenticationEpochs?.[selectedSession.sub] ?? '',
221
275
  redirectUri: query.redirect_uri,
222
- error: 'consent_required',
223
- errorDescription: 'The Authorization Server requires End-User consent.',
276
+ scope: grantedScopes,
277
+ nonce: query.nonce,
224
278
  state: query.state,
225
- responseType: query.response_type,
279
+ authTime: selectedSession.authenticated_at,
226
280
  responseMode: query.response_mode,
227
281
  });
228
282
  }
229
- // Redirect to consent page
230
- if (hasFreshReauthentication) {
231
- const consentReauthentication = this.createReauthenticationSession(this.buildConsentReauthenticationQuery(query));
232
- params.setReauthenticationSession?.({
233
- ...consentReauthentication,
234
- sub: userSession.sub,
235
- authenticated_at: userSession.authenticated_at,
236
- });
237
- }
238
- const consentUrl = this.buildConsentRedirectUrl(query);
239
- return {
240
- type: 'redirect',
241
- url: consentUrl,
242
- };
243
- }
244
- if (isImplicitIdToken) {
245
- if (!query.nonce) {
246
- throw new e.InvalidAuthorizationRequest.Error();
247
- }
248
- params.clearAccountSelectionSession?.();
249
- return this.buildImplicitIdTokenRedirect({
250
- clientId: client.clientId,
283
+ const codeParams = {
284
+ clientId: client.id,
285
+ clientEpoch: client.tokenEpoch ?? '',
251
286
  userSub: selectedSession.sub,
287
+ userEpoch: params.authenticationEpochs?.[selectedSession.sub] ?? '',
252
288
  redirectUri: query.redirect_uri,
253
289
  scope: grantedScopes,
254
- nonce: query.nonce,
255
- state: query.state,
256
- authTime: selectedSession.authenticated_at,
257
- responseMode: query.response_mode,
258
- });
259
- }
260
- const codeParams = {
261
- clientId: client.id,
262
- userSub: selectedSession.sub,
263
- redirectUri: query.redirect_uri,
264
- scope: grantedScopes,
265
- };
266
- if (query.nonce) {
267
- codeParams.nonce = query.nonce;
268
- }
269
- if (query.code_challenge) {
270
- codeParams.codeChallenge = query.code_challenge;
271
- }
272
- if (query.code_challenge_method) {
273
- codeParams.codeChallengeMethod = query.code_challenge_method;
274
- }
275
- // Include OIDC authentication metadata from session
276
- if (userSession) {
277
- codeParams.authTime = selectedSession.authenticated_at;
278
- }
279
- const code = await this.generateAuthorizationCode(codeParams);
280
- params.clearAccountSelectionSession?.();
281
- // 10. Redirect back to client with authorization code
282
- const callbackUrl = this.buildCallbackUrl(code, query.state, query.redirect_uri, query.response_mode);
283
- if (query.response_mode === 'form_post') {
284
- const params = { code };
285
- if (query.state) {
286
- params['state'] = query.state;
290
+ };
291
+ if (query.nonce) {
292
+ codeParams.nonce = query.nonce;
293
+ }
294
+ if (query.code_challenge) {
295
+ codeParams.codeChallenge = query.code_challenge;
296
+ }
297
+ if (query.code_challenge_method) {
298
+ codeParams.codeChallengeMethod = query.code_challenge_method;
299
+ }
300
+ // Include OIDC authentication metadata from session
301
+ if (userSession) {
302
+ codeParams.authTime = selectedSession.authenticated_at;
303
+ }
304
+ const code = await this.generateAuthorizationCode(codeParams);
305
+ params.clearAccountSelectionSession?.();
306
+ // 10. Redirect back to client with authorization code
307
+ const callbackUrl = this.buildCallbackUrl(code, query.state, query.redirect_uri, query.response_mode);
308
+ if (query.response_mode === 'form_post') {
309
+ const params = { code };
310
+ if (query.state) {
311
+ params['state'] = query.state;
312
+ }
313
+ return {
314
+ type: 'form_post',
315
+ url: query.redirect_uri,
316
+ params,
317
+ };
287
318
  }
288
319
  return {
289
- type: 'form_post',
290
- url: query.redirect_uri,
291
- params,
320
+ type: 'redirect',
321
+ url: callbackUrl,
292
322
  };
293
- }
294
- return {
295
- type: 'redirect',
296
- url: callbackUrl,
297
- };
323
+ });
298
324
  }
299
325
  parseResponseMode(responseMode) {
300
326
  if (responseMode === undefined) {
@@ -736,6 +762,8 @@ export class OAuthAuthorizeService {
736
762
  const user = await this.mikro.user.findOneOrFail({ sub: params.userSub }, {
737
763
  failHandler: () => new e.UserNotFound.Error(),
738
764
  });
765
+ if (user.deleted_at || user.token_epoch !== params.userEpoch)
766
+ throw new e.Unauthorized.Error();
739
767
  const idTokenPayload = {
740
768
  sub: user.sub,
741
769
  aud: params.clientId,
@@ -808,7 +836,9 @@ export class OAuthAuthorizeService {
808
836
  async generateAuthorizationCode(params) {
809
837
  const codeParams = {
810
838
  clientId: params.clientId,
839
+ clientEpoch: params.clientEpoch,
811
840
  userSub: params.userSub,
841
+ userEpoch: params.userEpoch,
812
842
  redirectUri: params.redirectUri,
813
843
  scope: params.scope,
814
844
  };