@authup/server-core 1.0.0-beta.52 → 1.0.0-beta.53

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 (742) hide show
  1. package/dist/adapters/database/data-source/options/module.d.ts.map +1 -1
  2. package/dist/adapters/database/data-source/options/module.mjs +18 -8
  3. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client/entity.d.ts +5 -2
  5. package/dist/adapters/database/domains/client/entity.d.ts.map +1 -1
  6. package/dist/adapters/database/domains/client/entity.mjs +28 -4
  7. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  8. package/dist/adapters/database/domains/client-permission/entity.mjs +2 -2
  9. package/dist/adapters/database/domains/consent/entity.d.ts +20 -0
  10. package/dist/adapters/database/domains/consent/entity.d.ts.map +1 -0
  11. package/dist/adapters/database/domains/consent/entity.mjs +110 -0
  12. package/dist/adapters/database/domains/consent/entity.mjs.map +1 -0
  13. package/dist/adapters/database/domains/consent/index.d.ts +3 -0
  14. package/dist/adapters/database/domains/consent/index.d.ts.map +1 -0
  15. package/dist/adapters/database/domains/consent/index.mjs +6 -0
  16. package/dist/adapters/database/domains/consent/subscriber.d.ts +6 -0
  17. package/dist/adapters/database/domains/consent/subscriber.d.ts.map +1 -0
  18. package/dist/adapters/database/domains/consent/subscriber.mjs +45 -0
  19. package/dist/adapters/database/domains/consent/subscriber.mjs.map +1 -0
  20. package/dist/adapters/database/domains/constants.d.ts +1 -0
  21. package/dist/adapters/database/domains/constants.d.ts.map +1 -1
  22. package/dist/adapters/database/domains/constants.mjs +1 -0
  23. package/dist/adapters/database/domains/constants.mjs.map +1 -1
  24. package/dist/adapters/database/domains/event/entity.d.ts +22 -0
  25. package/dist/adapters/database/domains/event/entity.d.ts.map +1 -0
  26. package/dist/adapters/database/domains/event/entity.mjs +174 -0
  27. package/dist/adapters/database/domains/event/entity.mjs.map +1 -0
  28. package/dist/adapters/database/domains/event/index.d.ts +2 -0
  29. package/dist/adapters/database/domains/event/index.d.ts.map +1 -0
  30. package/dist/adapters/database/domains/event/index.mjs +5 -0
  31. package/dist/adapters/database/domains/identity-provider-account/entity.mjs +2 -2
  32. package/dist/adapters/database/domains/index.d.ts +4 -0
  33. package/dist/adapters/database/domains/index.d.ts.map +1 -1
  34. package/dist/adapters/database/domains/index.mjs +24 -15
  35. package/dist/adapters/database/domains/key/entity.d.ts +7 -3
  36. package/dist/adapters/database/domains/key/entity.d.ts.map +1 -1
  37. package/dist/adapters/database/domains/key/entity.mjs +35 -10
  38. package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
  39. package/dist/adapters/database/domains/permission-policy/entity.mjs +2 -2
  40. package/dist/adapters/database/domains/policy/repository.d.ts.map +1 -1
  41. package/dist/adapters/database/domains/policy/repository.mjs +3 -3
  42. package/dist/adapters/database/domains/policy/repository.mjs.map +1 -1
  43. package/dist/adapters/database/domains/robot-permission/entity.mjs +2 -2
  44. package/dist/adapters/database/domains/role/repository.mjs +1 -1
  45. package/dist/adapters/database/domains/role-permission/entity.mjs +2 -2
  46. package/dist/adapters/database/domains/session/entity.d.ts +3 -1
  47. package/dist/adapters/database/domains/session/entity.d.ts.map +1 -1
  48. package/dist/adapters/database/domains/session/entity.mjs +12 -0
  49. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  50. package/dist/adapters/database/domains/trust-anchor/entity.d.ts +13 -0
  51. package/dist/adapters/database/domains/trust-anchor/entity.d.ts.map +1 -0
  52. package/dist/adapters/database/domains/trust-anchor/entity.mjs +55 -0
  53. package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -0
  54. package/dist/adapters/database/domains/trust-anchor/index.d.ts +2 -0
  55. package/dist/adapters/database/domains/trust-anchor/index.d.ts.map +1 -0
  56. package/dist/adapters/database/domains/trust-anchor/index.mjs +5 -0
  57. package/dist/adapters/database/domains/user-authenticator/entity.d.ts +20 -0
  58. package/dist/adapters/database/domains/user-authenticator/entity.d.ts.map +1 -0
  59. package/dist/adapters/database/domains/user-authenticator/entity.mjs +98 -0
  60. package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -0
  61. package/dist/adapters/database/domains/user-authenticator/index.d.ts +2 -0
  62. package/dist/adapters/database/domains/user-authenticator/index.d.ts.map +1 -0
  63. package/dist/adapters/database/domains/user-authenticator/index.mjs +5 -0
  64. package/dist/adapters/database/domains/user-permission/entity.mjs +1 -1
  65. package/dist/adapters/database/errors/driver.d.ts +14 -0
  66. package/dist/adapters/database/errors/driver.d.ts.map +1 -0
  67. package/dist/adapters/database/errors/driver.mjs +32 -0
  68. package/dist/adapters/database/errors/driver.mjs.map +1 -0
  69. package/dist/adapters/database/errors/index.d.ts +1 -0
  70. package/dist/adapters/database/errors/index.d.ts.map +1 -1
  71. package/dist/adapters/database/errors/index.mjs +2 -1
  72. package/dist/adapters/database/index.mjs +17 -11
  73. package/dist/adapters/database/migrations/mysql/1783769340000-Default.d.ts +50 -0
  74. package/dist/adapters/database/migrations/mysql/1783769340000-Default.d.ts.map +1 -0
  75. package/dist/adapters/database/migrations/mysql/1783769340000-Default.mjs +320 -0
  76. package/dist/adapters/database/migrations/mysql/1783769340000-Default.mjs.map +1 -0
  77. package/dist/adapters/database/migrations/postgres/1783769340000-Default.d.ts +50 -0
  78. package/dist/adapters/database/migrations/postgres/1783769340000-Default.d.ts.map +1 -0
  79. package/dist/adapters/database/migrations/postgres/1783769340000-Default.mjs +310 -0
  80. package/dist/adapters/database/migrations/postgres/1783769340000-Default.mjs.map +1 -0
  81. package/dist/adapters/database/subscriber/module.d.ts +1 -1
  82. package/dist/adapters/database/subscriber/module.d.ts.map +1 -1
  83. package/dist/adapters/database/subscriber/module.mjs +4 -3
  84. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  85. package/dist/adapters/http/adapters/index.mjs +2 -1
  86. package/dist/adapters/http/adapters/oauth2/authorization/module.d.ts +4 -1
  87. package/dist/adapters/http/adapters/oauth2/authorization/module.d.ts.map +1 -1
  88. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs +27 -2
  89. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  90. package/dist/adapters/http/adapters/oauth2/authorization/types.d.ts +9 -1
  91. package/dist/adapters/http/adapters/oauth2/authorization/types.d.ts.map +1 -1
  92. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +4 -1
  93. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  94. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +23 -3
  95. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  96. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts +4 -3
  97. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  98. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +13 -6
  99. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  100. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  101. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +38 -2
  102. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  103. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +119 -6
  104. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  105. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +2 -0
  106. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  107. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +16 -3
  108. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  109. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +14 -3
  110. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  111. package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.d.ts +5 -0
  112. package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.d.ts.map +1 -0
  113. package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.mjs +18 -0
  114. package/dist/adapters/http/adapters/oauth2/grant-types/utils/certificate.mjs.map +1 -0
  115. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +1 -1
  116. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  117. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  118. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  119. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  120. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  121. package/dist/adapters/http/controllers/entities/consent/index.d.ts +2 -0
  122. package/dist/adapters/http/controllers/entities/consent/index.d.ts.map +1 -0
  123. package/dist/adapters/http/controllers/entities/consent/index.mjs +5 -0
  124. package/dist/adapters/http/controllers/entities/consent/module.d.ts +15 -0
  125. package/dist/adapters/http/controllers/entities/consent/module.d.ts.map +1 -0
  126. package/dist/adapters/http/controllers/entities/consent/module.mjs +82 -0
  127. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -0
  128. package/dist/adapters/http/controllers/entities/event/index.d.ts +2 -0
  129. package/dist/adapters/http/controllers/entities/event/index.d.ts.map +1 -0
  130. package/dist/adapters/http/controllers/entities/event/index.mjs +5 -0
  131. package/dist/adapters/http/controllers/entities/event/module.d.ts +14 -0
  132. package/dist/adapters/http/controllers/entities/event/module.d.ts.map +1 -0
  133. package/dist/adapters/http/controllers/entities/event/module.mjs +68 -0
  134. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -0
  135. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts +4 -1
  136. package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
  137. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +38 -10
  138. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  139. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts +3 -1
  140. package/dist/adapters/http/controllers/entities/identity-provider/types.d.ts.map +1 -1
  141. package/dist/adapters/http/controllers/entities/index.d.ts +5 -0
  142. package/dist/adapters/http/controllers/entities/index.d.ts.map +1 -1
  143. package/dist/adapters/http/controllers/entities/index.mjs +11 -1
  144. package/dist/adapters/http/controllers/entities/key/index.d.ts +2 -0
  145. package/dist/adapters/http/controllers/entities/key/index.d.ts.map +1 -0
  146. package/dist/adapters/http/controllers/entities/key/index.mjs +5 -0
  147. package/dist/adapters/http/controllers/entities/key/module.d.ts +17 -0
  148. package/dist/adapters/http/controllers/entities/key/module.d.ts.map +1 -0
  149. package/dist/adapters/http/controllers/entities/key/module.mjs +122 -0
  150. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -0
  151. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +1 -1
  152. package/dist/adapters/http/controllers/entities/realm/module.d.ts +2 -0
  153. package/dist/adapters/http/controllers/entities/realm/module.d.ts.map +1 -1
  154. package/dist/adapters/http/controllers/entities/realm/module.mjs +16 -1
  155. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  156. package/dist/adapters/http/controllers/entities/trust-anchor/index.d.ts +2 -0
  157. package/dist/adapters/http/controllers/entities/trust-anchor/index.d.ts.map +1 -0
  158. package/dist/adapters/http/controllers/entities/trust-anchor/index.mjs +5 -0
  159. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts +17 -0
  160. package/dist/adapters/http/controllers/entities/trust-anchor/module.d.ts.map +1 -0
  161. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +120 -0
  162. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -0
  163. package/dist/adapters/http/controllers/entities/user-authenticator/index.d.ts +2 -0
  164. package/dist/adapters/http/controllers/entities/user-authenticator/index.d.ts.map +1 -0
  165. package/dist/adapters/http/controllers/entities/user-authenticator/index.mjs +5 -0
  166. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts +21 -0
  167. package/dist/adapters/http/controllers/entities/user-authenticator/module.d.ts.map +1 -0
  168. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +154 -0
  169. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -0
  170. package/dist/adapters/http/controllers/index.mjs +7 -1
  171. package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.d.ts +2 -0
  172. package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.d.ts.map +1 -0
  173. package/dist/adapters/http/controllers/workflows/authenticator-challenge/index.mjs +5 -0
  174. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts +46 -0
  175. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.d.ts.map +1 -0
  176. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +132 -0
  177. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs.map +1 -0
  178. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  179. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +34 -6
  180. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  181. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts +17 -1
  182. package/dist/adapters/http/controllers/workflows/authorize/types.d.ts.map +1 -1
  183. package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
  184. package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
  185. package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
  186. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.d.ts.map +1 -1
  187. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs +28 -14
  188. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs.map +1 -1
  189. package/dist/adapters/http/controllers/workflows/jwks/module.d.ts.map +1 -1
  190. package/dist/adapters/http/controllers/workflows/jwks/module.mjs +28 -14
  191. package/dist/adapters/http/controllers/workflows/jwks/module.mjs.map +1 -1
  192. package/dist/adapters/http/controllers/workflows/token/module.d.ts +2 -1
  193. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  194. package/dist/adapters/http/controllers/workflows/token/module.mjs +28 -8
  195. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  196. package/dist/adapters/http/controllers/workflows/token/types.d.ts +11 -4
  197. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  198. package/dist/adapters/http/index.mjs +13 -3
  199. package/dist/adapters/http/middleware/built-in/assets.mjs +1 -1
  200. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts +13 -0
  201. package/dist/adapters/http/middleware/built-in/authorization/module.d.ts.map +1 -1
  202. package/dist/adapters/http/middleware/built-in/authorization/module.mjs +52 -2
  203. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  204. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts +2 -0
  205. package/dist/adapters/http/middleware/built-in/authorization/types.d.ts.map +1 -1
  206. package/dist/adapters/http/middleware/built-in/index.mjs +2 -2
  207. package/dist/adapters/http/middleware/built-in/prometheus.d.ts +12 -1
  208. package/dist/adapters/http/middleware/built-in/prometheus.d.ts.map +1 -1
  209. package/dist/adapters/http/middleware/built-in/prometheus.mjs +75 -6
  210. package/dist/adapters/http/middleware/built-in/prometheus.mjs.map +1 -1
  211. package/dist/adapters/http/middleware/index.mjs +2 -2
  212. package/dist/adapters/http/request/client-certificate.d.ts +5 -0
  213. package/dist/adapters/http/request/client-certificate.d.ts.map +1 -0
  214. package/dist/adapters/http/request/client-certificate.mjs +88 -0
  215. package/dist/adapters/http/request/client-certificate.mjs.map +1 -0
  216. package/dist/adapters/http/request/constants.d.ts +1 -0
  217. package/dist/adapters/http/request/constants.d.ts.map +1 -1
  218. package/dist/adapters/http/request/constants.mjs +6 -1
  219. package/dist/adapters/http/request/constants.mjs.map +1 -1
  220. package/dist/adapters/http/request/event-context.d.ts +19 -0
  221. package/dist/adapters/http/request/event-context.d.ts.map +1 -0
  222. package/dist/adapters/http/request/event-context.mjs +37 -0
  223. package/dist/adapters/http/request/event-context.mjs.map +1 -0
  224. package/dist/adapters/http/request/helpers/index.d.ts +1 -0
  225. package/dist/adapters/http/request/helpers/index.d.ts.map +1 -1
  226. package/dist/adapters/http/request/helpers/index.mjs +2 -1
  227. package/dist/adapters/http/request/helpers/mfa-login-ticket.d.ts +16 -0
  228. package/dist/adapters/http/request/helpers/mfa-login-ticket.d.ts.map +1 -0
  229. package/dist/adapters/http/request/helpers/mfa-login-ticket.mjs +15 -0
  230. package/dist/adapters/http/request/helpers/mfa-login-ticket.mjs.map +1 -0
  231. package/dist/adapters/http/request/index.d.ts +3 -0
  232. package/dist/adapters/http/request/index.d.ts.map +1 -1
  233. package/dist/adapters/http/request/index.mjs +5 -2
  234. package/dist/adapters/http/request/types.d.ts +3 -0
  235. package/dist/adapters/http/request/types.d.ts.map +1 -0
  236. package/dist/adapters/http/ui/render.mjs +2 -2
  237. package/dist/app/index.mjs +11 -5
  238. package/dist/app/modules/components/module.d.ts.map +1 -1
  239. package/dist/app/modules/components/module.mjs +22 -2
  240. package/dist/app/modules/components/module.mjs.map +1 -1
  241. package/dist/app/modules/config/constants.d.ts +14 -0
  242. package/dist/app/modules/config/constants.d.ts.map +1 -1
  243. package/dist/app/modules/config/constants.mjs +14 -0
  244. package/dist/app/modules/config/constants.mjs.map +1 -1
  245. package/dist/app/modules/config/normalize.d.ts.map +1 -1
  246. package/dist/app/modules/config/normalize.mjs +30 -2
  247. package/dist/app/modules/config/normalize.mjs.map +1 -1
  248. package/dist/app/modules/config/read/env.d.ts.map +1 -1
  249. package/dist/app/modules/config/read/env.mjs +57 -0
  250. package/dist/app/modules/config/read/env.mjs.map +1 -1
  251. package/dist/app/modules/config/types.d.ts +101 -0
  252. package/dist/app/modules/config/types.d.ts.map +1 -1
  253. package/dist/app/modules/config/validator.d.ts.map +1 -1
  254. package/dist/app/modules/config/validator.mjs +16 -0
  255. package/dist/app/modules/config/validator.mjs.map +1 -1
  256. package/dist/app/modules/database/constants.d.ts +3 -0
  257. package/dist/app/modules/database/constants.d.ts.map +1 -1
  258. package/dist/app/modules/database/constants.mjs +3 -1
  259. package/dist/app/modules/database/constants.mjs.map +1 -1
  260. package/dist/app/modules/database/index.mjs +7 -3
  261. package/dist/app/modules/database/module.d.ts +1 -0
  262. package/dist/app/modules/database/module.d.ts.map +1 -1
  263. package/dist/app/modules/database/module.mjs +32 -1
  264. package/dist/app/modules/database/module.mjs.map +1 -1
  265. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  266. package/dist/app/modules/database/repositories/client/repository.mjs +8 -4
  267. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  268. package/dist/app/modules/database/repositories/event/index.d.ts.map +1 -0
  269. package/dist/app/modules/database/repositories/event/index.mjs +5 -0
  270. package/dist/app/modules/database/repositories/event/repository.d.ts +15 -0
  271. package/dist/app/modules/database/repositories/event/repository.d.ts.map +1 -0
  272. package/dist/app/modules/database/repositories/event/repository.mjs +113 -0
  273. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -0
  274. package/dist/app/modules/database/repositories/helpers.d.ts +4 -2
  275. package/dist/app/modules/database/repositories/helpers.d.ts.map +1 -1
  276. package/dist/app/modules/database/repositories/helpers.mjs +7 -3
  277. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  278. package/dist/app/modules/database/repositories/index.d.ts +4 -0
  279. package/dist/app/modules/database/repositories/index.d.ts.map +1 -1
  280. package/dist/app/modules/database/repositories/index.mjs +9 -1
  281. package/dist/app/modules/database/repositories/key/index.d.ts +2 -0
  282. package/dist/app/modules/database/repositories/key/index.d.ts.map +1 -0
  283. package/dist/app/modules/database/repositories/key/index.mjs +5 -0
  284. package/dist/app/modules/database/repositories/key/repository.d.ts +50 -0
  285. package/dist/app/modules/database/repositories/key/repository.d.ts.map +1 -0
  286. package/dist/app/modules/database/repositories/key/repository.mjs +273 -0
  287. package/dist/app/modules/database/repositories/key/repository.mjs.map +1 -0
  288. package/dist/app/modules/database/repositories/permission-provider/module.mjs +1 -1
  289. package/dist/app/modules/database/repositories/trust-anchor/index.d.ts +2 -0
  290. package/dist/app/modules/database/repositories/trust-anchor/index.d.ts.map +1 -0
  291. package/dist/app/modules/database/repositories/trust-anchor/index.mjs +5 -0
  292. package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts +24 -0
  293. package/dist/app/modules/database/repositories/trust-anchor/repository.d.ts.map +1 -0
  294. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs +113 -0
  295. package/dist/app/modules/database/repositories/trust-anchor/repository.mjs.map +1 -0
  296. package/dist/app/modules/database/repositories/user-authenticator/index.d.ts +2 -0
  297. package/dist/app/modules/database/repositories/user-authenticator/index.d.ts.map +1 -0
  298. package/dist/app/modules/database/repositories/user-authenticator/index.mjs +5 -0
  299. package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts +19 -0
  300. package/dist/app/modules/database/repositories/user-authenticator/repository.d.ts.map +1 -0
  301. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs +92 -0
  302. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -0
  303. package/dist/app/modules/http/module.d.ts +8 -0
  304. package/dist/app/modules/http/module.d.ts.map +1 -1
  305. package/dist/app/modules/http/module.mjs +19 -1
  306. package/dist/app/modules/http/module.mjs.map +1 -1
  307. package/dist/app/modules/http/modules/controller.d.ts +16 -3
  308. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  309. package/dist/app/modules/http/modules/controller.mjs +186 -15
  310. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  311. package/dist/app/modules/http/modules/middleware.d.ts +1 -0
  312. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  313. package/dist/app/modules/http/modules/middleware.mjs +10 -4
  314. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  315. package/dist/app/modules/identity/module.mjs +2 -2
  316. package/dist/app/modules/index.d.ts +1 -0
  317. package/dist/app/modules/index.d.ts.map +1 -1
  318. package/dist/app/modules/index.mjs +13 -6
  319. package/dist/app/modules/mail/module.d.ts.map +1 -1
  320. package/dist/app/modules/mail/module.mjs +2 -1
  321. package/dist/app/modules/mail/module.mjs.map +1 -1
  322. package/dist/app/modules/metrics/constants.d.ts +4 -0
  323. package/dist/app/modules/metrics/constants.d.ts.map +1 -0
  324. package/dist/app/modules/metrics/constants.mjs +10 -0
  325. package/dist/app/modules/metrics/constants.mjs.map +1 -0
  326. package/dist/app/modules/metrics/index.d.ts +3 -0
  327. package/dist/app/modules/metrics/index.d.ts.map +1 -0
  328. package/dist/app/modules/metrics/index.mjs +6 -0
  329. package/dist/app/modules/metrics/prom.d.ts +15 -0
  330. package/dist/app/modules/metrics/prom.d.ts.map +1 -0
  331. package/dist/app/modules/metrics/prom.mjs +42 -0
  332. package/dist/app/modules/metrics/prom.mjs.map +1 -0
  333. package/dist/app/modules/oauth2/constants.d.ts +9 -2
  334. package/dist/app/modules/oauth2/constants.d.ts.map +1 -1
  335. package/dist/app/modules/oauth2/constants.mjs +7 -1
  336. package/dist/app/modules/oauth2/constants.mjs.map +1 -1
  337. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  338. package/dist/app/modules/oauth2/module.mjs +23 -4
  339. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  340. package/dist/app/modules/oauth2/repositories/consent/index.d.ts +2 -0
  341. package/dist/app/modules/oauth2/repositories/consent/index.d.ts.map +1 -0
  342. package/dist/app/modules/oauth2/repositories/consent/index.mjs +5 -0
  343. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts +20 -0
  344. package/dist/app/modules/oauth2/repositories/consent/repository.d.ts.map +1 -0
  345. package/dist/app/modules/oauth2/repositories/consent/repository.mjs +116 -0
  346. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -0
  347. package/dist/app/modules/oauth2/repositories/index.d.ts +1 -1
  348. package/dist/app/modules/oauth2/repositories/index.d.ts.map +1 -1
  349. package/dist/app/modules/oauth2/repositories/index.mjs +3 -3
  350. package/dist/app/modules/oauth2/repositories/token/repository.d.ts +1 -0
  351. package/dist/app/modules/oauth2/repositories/token/repository.d.ts.map +1 -1
  352. package/dist/app/modules/oauth2/repositories/token/repository.mjs +8 -0
  353. package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
  354. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  355. package/dist/app/modules/provisioning/module.mjs +16 -5
  356. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  357. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  358. package/dist/app/modules/provisioning/sources/default/module.mjs +22 -7
  359. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  360. package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
  361. package/dist/app/modules/provisioning/sources/file/module.mjs +12 -2
  362. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  363. package/dist/components/event-cleaner/index.d.ts +2 -0
  364. package/dist/components/event-cleaner/index.d.ts.map +1 -0
  365. package/dist/components/event-cleaner/index.mjs +5 -0
  366. package/dist/components/event-cleaner/module.d.ts +5 -0
  367. package/dist/components/event-cleaner/module.d.ts.map +1 -0
  368. package/dist/components/event-cleaner/module.mjs +30 -0
  369. package/dist/components/event-cleaner/module.mjs.map +1 -0
  370. package/dist/components/index.d.ts +1 -0
  371. package/dist/components/index.d.ts.map +1 -1
  372. package/dist/components/index.mjs +3 -1
  373. package/dist/components/oauth2-cleaner/module.d.ts +2 -1
  374. package/dist/components/oauth2-cleaner/module.d.ts.map +1 -1
  375. package/dist/components/oauth2-cleaner/module.mjs +9 -4
  376. package/dist/components/oauth2-cleaner/module.mjs.map +1 -1
  377. package/dist/core/authentication/credential/entities/client/module.d.ts +1 -1
  378. package/dist/core/authentication/credential/entities/client/module.d.ts.map +1 -1
  379. package/dist/core/authentication/credential/entities/client/module.mjs +2 -1
  380. package/dist/core/authentication/credential/entities/client/module.mjs.map +1 -1
  381. package/dist/core/authentication/entities/client/module.mjs +2 -2
  382. package/dist/core/authentication/entities/client/module.mjs.map +1 -1
  383. package/dist/core/authentication/index.d.ts +1 -0
  384. package/dist/core/authentication/index.d.ts.map +1 -1
  385. package/dist/core/authentication/index.mjs +3 -1
  386. package/dist/core/authentication/login-throttle/index.d.ts +3 -0
  387. package/dist/core/authentication/login-throttle/index.d.ts.map +1 -0
  388. package/dist/core/authentication/login-throttle/index.mjs +5 -0
  389. package/dist/core/authentication/login-throttle/service.d.ts +13 -0
  390. package/dist/core/authentication/login-throttle/service.d.ts.map +1 -0
  391. package/dist/core/authentication/login-throttle/service.mjs +33 -0
  392. package/dist/core/authentication/login-throttle/service.mjs.map +1 -0
  393. package/dist/core/authentication/login-throttle/types.d.ts +34 -0
  394. package/dist/core/authentication/login-throttle/types.d.ts.map +1 -0
  395. package/dist/core/authentication/session/module.d.ts +1 -0
  396. package/dist/core/authentication/session/module.d.ts.map +1 -1
  397. package/dist/core/authentication/session/module.mjs +4 -0
  398. package/dist/core/authentication/session/module.mjs.map +1 -1
  399. package/dist/core/authentication/session/types.d.ts +6 -0
  400. package/dist/core/authentication/session/types.d.ts.map +1 -1
  401. package/dist/core/authentication/session/types.mjs.map +1 -1
  402. package/dist/core/client-certificate/index.d.ts +3 -0
  403. package/dist/core/client-certificate/index.d.ts.map +1 -0
  404. package/dist/core/client-certificate/index.mjs +5 -0
  405. package/dist/core/client-certificate/module.d.ts +18 -0
  406. package/dist/core/client-certificate/module.d.ts.map +1 -0
  407. package/dist/core/client-certificate/module.mjs +195 -0
  408. package/dist/core/client-certificate/module.mjs.map +1 -0
  409. package/dist/core/client-certificate/types.d.ts +22 -0
  410. package/dist/core/client-certificate/types.d.ts.map +1 -0
  411. package/dist/core/client-certificate/types.mjs +4 -0
  412. package/dist/core/entities/client/service.d.ts.map +1 -1
  413. package/dist/core/entities/client/service.mjs +15 -7
  414. package/dist/core/entities/client/service.mjs.map +1 -1
  415. package/dist/core/entities/client/web-client.d.ts.map +1 -1
  416. package/dist/core/entities/client/web-client.mjs +3 -2
  417. package/dist/core/entities/client/web-client.mjs.map +1 -1
  418. package/dist/core/entities/consent/index.d.ts +3 -0
  419. package/dist/core/entities/consent/index.d.ts.map +1 -0
  420. package/dist/core/entities/consent/index.mjs +6 -0
  421. package/dist/core/entities/consent/service.d.ts +19 -0
  422. package/dist/core/entities/consent/service.d.ts.map +1 -0
  423. package/dist/core/entities/consent/service.mjs +122 -0
  424. package/dist/core/entities/consent/service.mjs.map +1 -0
  425. package/dist/core/entities/consent/types.d.ts +97 -0
  426. package/dist/core/entities/consent/types.d.ts.map +1 -0
  427. package/dist/core/entities/consent/types.mjs +25 -0
  428. package/dist/core/entities/consent/types.mjs.map +1 -0
  429. package/dist/core/entities/event/constants.d.ts +7 -0
  430. package/dist/core/entities/event/constants.d.ts.map +1 -0
  431. package/dist/core/entities/event/constants.mjs +13 -0
  432. package/dist/core/entities/event/constants.mjs.map +1 -0
  433. package/dist/core/entities/event/diff.d.ts +20 -0
  434. package/dist/core/entities/event/diff.d.ts.map +1 -0
  435. package/dist/core/entities/event/diff.mjs +45 -0
  436. package/dist/core/entities/event/diff.mjs.map +1 -0
  437. package/dist/core/entities/event/entity-event-handler.d.ts +19 -0
  438. package/dist/core/entities/event/entity-event-handler.d.ts.map +1 -0
  439. package/dist/core/entities/event/entity-event-handler.mjs +100 -0
  440. package/dist/core/entities/event/entity-event-handler.mjs.map +1 -0
  441. package/dist/core/entities/event/index.d.ts +7 -0
  442. package/dist/core/entities/event/index.d.ts.map +1 -0
  443. package/dist/core/entities/event/index.mjs +9 -0
  444. package/dist/core/entities/event/sanitize.d.ts +2 -0
  445. package/dist/core/entities/event/sanitize.d.ts.map +1 -0
  446. package/dist/core/entities/event/sanitize.mjs +83 -0
  447. package/dist/core/entities/event/sanitize.mjs.map +1 -0
  448. package/dist/core/entities/event/service.d.ts +22 -0
  449. package/dist/core/entities/event/service.d.ts.map +1 -0
  450. package/dist/core/entities/event/service.mjs +169 -0
  451. package/dist/core/entities/event/service.mjs.map +1 -0
  452. package/dist/core/entities/event/types.d.ts +124 -0
  453. package/dist/core/entities/event/types.d.ts.map +1 -0
  454. package/dist/core/entities/event/types.mjs +4 -0
  455. package/dist/core/entities/identity-provider-role-mapping/service.mjs +2 -2
  456. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  457. package/dist/core/entities/index.d.ts +5 -0
  458. package/dist/core/entities/index.d.ts.map +1 -1
  459. package/dist/core/entities/index.mjs +20 -1
  460. package/dist/core/entities/key/index.d.ts +3 -0
  461. package/dist/core/entities/key/index.d.ts.map +1 -0
  462. package/dist/core/entities/key/index.mjs +5 -0
  463. package/dist/core/entities/key/service.d.ts +55 -0
  464. package/dist/core/entities/key/service.d.ts.map +1 -0
  465. package/dist/core/entities/key/service.mjs +301 -0
  466. package/dist/core/entities/key/service.mjs.map +1 -0
  467. package/dist/core/entities/key/types.d.ts +33 -0
  468. package/dist/core/entities/key/types.d.ts.map +1 -0
  469. package/dist/core/entities/key/types.mjs +4 -0
  470. package/dist/core/entities/permission/service.mjs +3 -3
  471. package/dist/core/entities/permission/service.mjs.map +1 -1
  472. package/dist/core/entities/policy/service.mjs +4 -4
  473. package/dist/core/entities/policy/service.mjs.map +1 -1
  474. package/dist/core/entities/realm/service.d.ts +3 -0
  475. package/dist/core/entities/realm/service.d.ts.map +1 -1
  476. package/dist/core/entities/realm/service.mjs +6 -3
  477. package/dist/core/entities/realm/service.mjs.map +1 -1
  478. package/dist/core/entities/role/service.mjs +2 -2
  479. package/dist/core/entities/role/service.mjs.map +1 -1
  480. package/dist/core/entities/role-attribute/service.mjs +3 -3
  481. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  482. package/dist/core/entities/session/service.mjs +5 -2
  483. package/dist/core/entities/session/service.mjs.map +1 -1
  484. package/dist/core/entities/trust-anchor/index.d.ts +3 -0
  485. package/dist/core/entities/trust-anchor/index.d.ts.map +1 -0
  486. package/dist/core/entities/trust-anchor/index.mjs +5 -0
  487. package/dist/core/entities/trust-anchor/service.d.ts +33 -0
  488. package/dist/core/entities/trust-anchor/service.d.ts.map +1 -0
  489. package/dist/core/entities/trust-anchor/service.mjs +175 -0
  490. package/dist/core/entities/trust-anchor/service.mjs.map +1 -0
  491. package/dist/core/entities/trust-anchor/types.d.ts +14 -0
  492. package/dist/core/entities/trust-anchor/types.d.ts.map +1 -0
  493. package/dist/core/entities/trust-anchor/types.mjs +4 -0
  494. package/dist/core/entities/user/service.mjs +2 -2
  495. package/dist/core/entities/user/service.mjs.map +1 -1
  496. package/dist/core/entities/user-attribute/service.mjs +4 -4
  497. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  498. package/dist/core/entities/user-authenticator/constants.d.ts +26 -0
  499. package/dist/core/entities/user-authenticator/constants.d.ts.map +1 -0
  500. package/dist/core/entities/user-authenticator/constants.mjs +32 -0
  501. package/dist/core/entities/user-authenticator/constants.mjs.map +1 -0
  502. package/dist/core/entities/user-authenticator/helpers.d.ts +10 -0
  503. package/dist/core/entities/user-authenticator/helpers.d.ts.map +1 -0
  504. package/dist/core/entities/user-authenticator/helpers.mjs +35 -0
  505. package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -0
  506. package/dist/core/entities/user-authenticator/index.d.ts +6 -0
  507. package/dist/core/entities/user-authenticator/index.d.ts.map +1 -0
  508. package/dist/core/entities/user-authenticator/index.mjs +9 -0
  509. package/dist/core/entities/user-authenticator/service.d.ts +89 -0
  510. package/dist/core/entities/user-authenticator/service.d.ts.map +1 -0
  511. package/dist/core/entities/user-authenticator/service.mjs +709 -0
  512. package/dist/core/entities/user-authenticator/service.mjs.map +1 -0
  513. package/dist/core/entities/user-authenticator/types.d.ts +221 -0
  514. package/dist/core/entities/user-authenticator/types.d.ts.map +1 -0
  515. package/dist/core/entities/user-authenticator/types.mjs +15 -0
  516. package/dist/core/entities/user-authenticator/types.mjs.map +1 -0
  517. package/dist/core/entities/user-authenticator/webauthn.d.ts +28 -0
  518. package/dist/core/entities/user-authenticator/webauthn.d.ts.map +1 -0
  519. package/dist/core/entities/user-authenticator/webauthn.mjs +88 -0
  520. package/dist/core/entities/user-authenticator/webauthn.mjs.map +1 -0
  521. package/dist/core/identity/index.mjs +2 -1
  522. package/dist/core/identity/password-recovery/disabled.d.ts +2 -2
  523. package/dist/core/identity/password-recovery/disabled.d.ts.map +1 -1
  524. package/dist/core/identity/password-recovery/disabled.mjs +2 -2
  525. package/dist/core/identity/password-recovery/disabled.mjs.map +1 -1
  526. package/dist/core/identity/password-recovery/email-verification-required.d.ts +2 -2
  527. package/dist/core/identity/password-recovery/email-verification-required.d.ts.map +1 -1
  528. package/dist/core/identity/password-recovery/email-verification-required.mjs +2 -2
  529. package/dist/core/identity/password-recovery/email-verification-required.mjs.map +1 -1
  530. package/dist/core/identity/password-recovery/service.d.ts +2 -1
  531. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  532. package/dist/core/identity/password-recovery/service.mjs +26 -4
  533. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  534. package/dist/core/identity/password-recovery/token-expired.d.ts +2 -2
  535. package/dist/core/identity/password-recovery/token-expired.d.ts.map +1 -1
  536. package/dist/core/identity/password-recovery/token-expired.mjs +2 -2
  537. package/dist/core/identity/password-recovery/token-expired.mjs.map +1 -1
  538. package/dist/core/identity/password-recovery/types.d.ts +2 -1
  539. package/dist/core/identity/password-recovery/types.d.ts.map +1 -1
  540. package/dist/core/identity/permission/index.d.ts +1 -0
  541. package/dist/core/identity/permission/index.d.ts.map +1 -1
  542. package/dist/core/identity/permission/index.mjs +2 -1
  543. package/dist/core/identity/policy/checker/service.mjs +1 -1
  544. package/dist/core/identity/policy/checker/service.mjs.map +1 -1
  545. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs +2 -2
  546. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  547. package/dist/core/identity/registration/error.d.ts +2 -2
  548. package/dist/core/identity/registration/error.d.ts.map +1 -1
  549. package/dist/core/identity/registration/error.mjs +2 -2
  550. package/dist/core/identity/registration/error.mjs.map +1 -1
  551. package/dist/core/identity/registration/service.d.ts +2 -1
  552. package/dist/core/identity/registration/service.d.ts.map +1 -1
  553. package/dist/core/identity/registration/service.mjs +26 -4
  554. package/dist/core/identity/registration/service.mjs.map +1 -1
  555. package/dist/core/identity/registration/types.d.ts +2 -1
  556. package/dist/core/identity/registration/types.d.ts.map +1 -1
  557. package/dist/core/index.d.ts +3 -0
  558. package/dist/core/index.d.ts.map +1 -1
  559. package/dist/core/index.mjs +39 -8
  560. package/dist/core/key/certificate-error.d.ts +10 -0
  561. package/dist/core/key/certificate-error.d.ts.map +1 -0
  562. package/dist/core/key/certificate-error.mjs +19 -0
  563. package/dist/core/key/certificate-error.mjs.map +1 -0
  564. package/dist/core/key/certificate.d.ts +15 -0
  565. package/dist/core/key/certificate.d.ts.map +1 -0
  566. package/dist/core/key/certificate.mjs +72 -0
  567. package/dist/core/key/certificate.mjs.map +1 -0
  568. package/dist/core/key/check.d.ts +3 -0
  569. package/dist/core/key/check.d.ts.map +1 -0
  570. package/dist/core/key/check.mjs +13 -0
  571. package/dist/core/key/check.mjs.map +1 -0
  572. package/dist/core/key/constants.d.ts +10 -0
  573. package/dist/core/key/constants.d.ts.map +1 -0
  574. package/dist/core/key/constants.mjs +15 -0
  575. package/dist/core/key/constants.mjs.map +1 -0
  576. package/dist/core/key/error.d.ts +14 -0
  577. package/dist/core/key/error.d.ts.map +1 -0
  578. package/dist/core/key/error.mjs +23 -0
  579. package/dist/core/key/error.mjs.map +1 -0
  580. package/dist/core/key/index.d.ts +10 -0
  581. package/dist/core/key/index.d.ts.map +1 -0
  582. package/dist/core/key/index.mjs +12 -0
  583. package/dist/core/key/provisioner.d.ts +22 -0
  584. package/dist/core/key/provisioner.d.ts.map +1 -0
  585. package/dist/core/key/provisioner.mjs +30 -0
  586. package/dist/core/key/provisioner.mjs.map +1 -0
  587. package/dist/core/key/realm-cipher.d.ts +20 -0
  588. package/dist/core/key/realm-cipher.d.ts.map +1 -0
  589. package/dist/core/key/realm-cipher.mjs +60 -0
  590. package/dist/core/key/realm-cipher.mjs.map +1 -0
  591. package/dist/core/key/types.d.ts +59 -0
  592. package/dist/core/key/types.d.ts.map +1 -0
  593. package/dist/core/key/types.mjs +4 -0
  594. package/dist/core/key/wrap.d.ts +5 -0
  595. package/dist/core/key/wrap.d.ts.map +1 -0
  596. package/dist/core/key/wrap.mjs +21 -0
  597. package/dist/core/key/wrap.mjs.map +1 -0
  598. package/dist/core/mail/template/registry.d.ts.map +1 -1
  599. package/dist/core/mail/template/registry.mjs +3 -1
  600. package/dist/core/mail/template/registry.mjs.map +1 -1
  601. package/dist/core/mail/template/templates/mfa-email-otp.d.ts +3 -0
  602. package/dist/core/mail/template/templates/mfa-email-otp.d.ts.map +1 -0
  603. package/dist/core/mail/template/templates/mfa-email-otp.mjs +34 -0
  604. package/dist/core/mail/template/templates/mfa-email-otp.mjs.map +1 -0
  605. package/dist/core/mail/template/types.d.ts +6 -1
  606. package/dist/core/mail/template/types.d.ts.map +1 -1
  607. package/dist/core/mail/template/types.mjs +1 -0
  608. package/dist/core/mail/template/types.mjs.map +1 -1
  609. package/dist/core/metrics/index.d.ts +3 -0
  610. package/dist/core/metrics/index.d.ts.map +1 -0
  611. package/dist/core/metrics/index.mjs +5 -0
  612. package/dist/core/metrics/noop.d.ts +8 -0
  613. package/dist/core/metrics/noop.d.ts.map +1 -0
  614. package/dist/core/metrics/noop.mjs +14 -0
  615. package/dist/core/metrics/noop.mjs.map +1 -0
  616. package/dist/core/metrics/types.d.ts +19 -0
  617. package/dist/core/metrics/types.d.ts.map +1 -0
  618. package/dist/core/metrics/types.mjs +4 -0
  619. package/dist/core/oauth2/access-policy/index.d.ts +3 -0
  620. package/dist/core/oauth2/access-policy/index.d.ts.map +1 -0
  621. package/dist/core/oauth2/access-policy/index.mjs +5 -0
  622. package/dist/core/oauth2/access-policy/module.d.ts +12 -0
  623. package/dist/core/oauth2/access-policy/module.d.ts.map +1 -0
  624. package/dist/core/oauth2/access-policy/module.mjs +32 -0
  625. package/dist/core/oauth2/access-policy/module.mjs.map +1 -0
  626. package/dist/core/oauth2/access-policy/types.d.ts +19 -0
  627. package/dist/core/oauth2/access-policy/types.d.ts.map +1 -0
  628. package/dist/core/oauth2/access-policy/types.mjs +4 -0
  629. package/dist/core/oauth2/authorization/code/issuer/module.d.ts.map +1 -1
  630. package/dist/core/oauth2/authorization/code/issuer/module.mjs +2 -0
  631. package/dist/core/oauth2/authorization/code/issuer/module.mjs.map +1 -1
  632. package/dist/core/oauth2/authorization/code/issuer/types.d.ts +6 -1
  633. package/dist/core/oauth2/authorization/code/issuer/types.d.ts.map +1 -1
  634. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  635. package/dist/core/oauth2/authorization/code-request/validator.d.ts.map +1 -1
  636. package/dist/core/oauth2/authorization/code-request/validator.mjs +1 -0
  637. package/dist/core/oauth2/authorization/code-request/validator.mjs.map +1 -1
  638. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +3 -3
  639. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  640. package/dist/core/oauth2/authorization/helpers.d.ts +10 -1
  641. package/dist/core/oauth2/authorization/helpers.d.ts.map +1 -1
  642. package/dist/core/oauth2/authorization/helpers.mjs +28 -2
  643. package/dist/core/oauth2/authorization/helpers.mjs.map +1 -1
  644. package/dist/core/oauth2/authorization/index.mjs +2 -2
  645. package/dist/core/oauth2/authorization/module.d.ts +9 -0
  646. package/dist/core/oauth2/authorization/module.d.ts.map +1 -1
  647. package/dist/core/oauth2/authorization/module.mjs +80 -3
  648. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  649. package/dist/core/oauth2/authorization/types.d.ts +36 -0
  650. package/dist/core/oauth2/authorization/types.d.ts.map +1 -1
  651. package/dist/core/oauth2/client/authenticator.d.ts +16 -7
  652. package/dist/core/oauth2/client/authenticator.d.ts.map +1 -1
  653. package/dist/core/oauth2/client/authenticator.mjs +49 -12
  654. package/dist/core/oauth2/client/authenticator.mjs.map +1 -1
  655. package/dist/core/oauth2/end-session/service.d.ts +2 -1
  656. package/dist/core/oauth2/end-session/service.d.ts.map +1 -1
  657. package/dist/core/oauth2/end-session/service.mjs +13 -0
  658. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  659. package/dist/core/oauth2/end-session/types.d.ts +2 -1
  660. package/dist/core/oauth2/end-session/types.d.ts.map +1 -1
  661. package/dist/core/oauth2/grant-types/authorize.d.ts +2 -2
  662. package/dist/core/oauth2/grant-types/authorize.d.ts.map +1 -1
  663. package/dist/core/oauth2/grant-types/authorize.mjs +12 -8
  664. package/dist/core/oauth2/grant-types/authorize.mjs.map +1 -1
  665. package/dist/core/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  666. package/dist/core/oauth2/grant-types/client-credentials.mjs +5 -3
  667. package/dist/core/oauth2/grant-types/client-credentials.mjs.map +1 -1
  668. package/dist/core/oauth2/grant-types/identity.d.ts.map +1 -1
  669. package/dist/core/oauth2/grant-types/identity.mjs +10 -3
  670. package/dist/core/oauth2/grant-types/identity.mjs.map +1 -1
  671. package/dist/core/oauth2/grant-types/password.d.ts +9 -0
  672. package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
  673. package/dist/core/oauth2/grant-types/password.mjs +32 -4
  674. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  675. package/dist/core/oauth2/grant-types/refresh-token.d.ts +4 -0
  676. package/dist/core/oauth2/grant-types/refresh-token.d.ts.map +1 -1
  677. package/dist/core/oauth2/grant-types/refresh-token.mjs +17 -1
  678. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  679. package/dist/core/oauth2/grant-types/robot-credentials.d.ts.map +1 -1
  680. package/dist/core/oauth2/grant-types/robot-credentials.mjs +3 -2
  681. package/dist/core/oauth2/grant-types/robot-credentials.mjs.map +1 -1
  682. package/dist/core/oauth2/grant-types/types.d.ts +10 -3
  683. package/dist/core/oauth2/grant-types/types.d.ts.map +1 -1
  684. package/dist/core/oauth2/index.d.ts +2 -1
  685. package/dist/core/oauth2/index.d.ts.map +1 -1
  686. package/dist/core/oauth2/index.mjs +7 -2
  687. package/dist/core/oauth2/mfa-login/index.d.ts +3 -0
  688. package/dist/core/oauth2/mfa-login/index.d.ts.map +1 -0
  689. package/dist/core/oauth2/mfa-login/index.mjs +5 -0
  690. package/dist/core/oauth2/mfa-login/module.d.ts +19 -0
  691. package/dist/core/oauth2/mfa-login/module.d.ts.map +1 -0
  692. package/dist/core/oauth2/mfa-login/module.mjs +109 -0
  693. package/dist/core/oauth2/mfa-login/module.mjs.map +1 -0
  694. package/dist/core/oauth2/mfa-login/types.d.ts +64 -0
  695. package/dist/core/oauth2/mfa-login/types.d.ts.map +1 -0
  696. package/dist/core/oauth2/mfa-login/types.mjs +4 -0
  697. package/dist/core/oauth2/token/index.mjs +2 -1
  698. package/dist/core/oauth2/token/issuer/index.d.ts +1 -0
  699. package/dist/core/oauth2/token/issuer/index.d.ts.map +1 -1
  700. package/dist/core/oauth2/token/issuer/index.mjs +3 -1
  701. package/dist/core/oauth2/token/issuer/mfa/index.d.ts +2 -0
  702. package/dist/core/oauth2/token/issuer/mfa/index.d.ts.map +1 -0
  703. package/dist/core/oauth2/token/issuer/mfa/index.mjs +5 -0
  704. package/dist/core/oauth2/token/issuer/mfa/module.d.ts +18 -0
  705. package/dist/core/oauth2/token/issuer/mfa/module.d.ts.map +1 -0
  706. package/dist/core/oauth2/token/issuer/mfa/module.mjs +36 -0
  707. package/dist/core/oauth2/token/issuer/mfa/module.mjs.map +1 -0
  708. package/dist/core/oauth2/token/repository/types.d.ts +10 -0
  709. package/dist/core/oauth2/token/repository/types.d.ts.map +1 -1
  710. package/dist/core/oauth2/token/revoker/module.d.ts.map +1 -1
  711. package/dist/core/oauth2/token/revoker/module.mjs +1 -0
  712. package/dist/core/oauth2/token/revoker/module.mjs.map +1 -1
  713. package/dist/core/oauth2/token/signer/module.d.ts +3 -3
  714. package/dist/core/oauth2/token/signer/module.d.ts.map +1 -1
  715. package/dist/core/oauth2/token/signer/module.mjs +5 -6
  716. package/dist/core/oauth2/token/signer/module.mjs.map +1 -1
  717. package/dist/core/oauth2/token/verifier/module.d.ts +3 -3
  718. package/dist/core/oauth2/token/verifier/module.d.ts.map +1 -1
  719. package/dist/core/oauth2/token/verifier/module.mjs +8 -5
  720. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  721. package/dist/index.mjs +52 -30
  722. package/dist/swagger.json +5431 -2952
  723. package/dist/ui/client/.vite/ssr-manifest.json +3888 -864
  724. package/dist/ui/client/assets/index-BmWsoQro.css +2 -0
  725. package/dist/ui/client/assets/{index-CP9HCHoS.js → index-CT0Nq5pA.js} +18 -17
  726. package/dist/ui/client/index.html +2 -2
  727. package/dist/ui/server/server.js +19470 -18436
  728. package/package.json +22 -16
  729. package/dist/app/modules/oauth2/repositories/key/index.d.ts.map +0 -1
  730. package/dist/app/modules/oauth2/repositories/key/index.mjs +0 -5
  731. package/dist/app/modules/oauth2/repositories/key/repository.d.ts +0 -14
  732. package/dist/app/modules/oauth2/repositories/key/repository.d.ts.map +0 -1
  733. package/dist/app/modules/oauth2/repositories/key/repository.mjs +0 -51
  734. package/dist/app/modules/oauth2/repositories/key/repository.mjs.map +0 -1
  735. package/dist/core/oauth2/key/index.d.ts +0 -2
  736. package/dist/core/oauth2/key/index.d.ts.map +0 -1
  737. package/dist/core/oauth2/key/types.d.ts +0 -16
  738. package/dist/core/oauth2/key/types.d.ts.map +0 -1
  739. package/dist/ui/client/assets/index-VM4JXBXw.css +0 -2
  740. /package/dist/{core/oauth2/key → adapters/http/request}/types.mjs +0 -0
  741. /package/dist/app/modules/{oauth2/repositories/key → database/repositories/event}/index.d.ts +0 -0
  742. /package/dist/core/{oauth2/key/index.mjs → authentication/login-throttle/types.mjs} +0 -0
@@ -0,0 +1,709 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { isRealmCipherBlobError } from "../../key/check.mjs";
5
+ import "../../key/index.mjs";
6
+ import { USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX, USER_AUTHENTICATOR_ATTEMPT_WINDOW, USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX, USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX, USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX, USER_AUTHENTICATOR_TOTP_ALGORITHM, USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX, USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL, USER_AUTHENTICATOR_VERIFY_LOCK_TTL, USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX } from "./constants.mjs";
7
+ import { generateNumericCode, generateRecoveryCode } from "./helpers.mjs";
8
+ import { MailTemplateName } from "../../mail/template/types.mjs";
9
+ import "../../mail/index.mjs";
10
+ import { buildWebauthnAuthenticationOptions, buildWebauthnRegistrationOptions, verifyWebauthnAuthentication, verifyWebauthnRegistration } from "./webauthn.mjs";
11
+ import { ValidatorGroup } from "@authup/kit";
12
+ import { EventName, EventRefType, EventScope, IdentityType, PermissionName, UserAuthenticatorKind, UserAuthenticatorValidator } from "@authup/core-kit";
13
+ import { AbstractEntityService, buildCacheKey, compare, hash } from "@authup/server-kit";
14
+ import { BuiltInPolicyType, definePolicyData } from "@authup/access";
15
+ import { AuthupError, EntityCredentialsInvalidError, EntityNotFoundError, ErrorCode, MfaThrottledError, ValidationError, isMfaThrottledError } from "@authup/errors";
16
+ import { randomUUID } from "node:crypto";
17
+ import { Secret, TOTP } from "otpauth";
18
+ import QRCode from "qrcode";
19
+ //#region src/core/entities/user-authenticator/service.ts
20
+ var UserAuthenticatorService = class extends AbstractEntityService {
21
+ repository;
22
+ userRepository;
23
+ cache;
24
+ cipher;
25
+ eventService;
26
+ mailClient;
27
+ mailTemplateRenderer;
28
+ options;
29
+ validator;
30
+ constructor(ctx) {
31
+ super();
32
+ this.repository = ctx.repository;
33
+ this.userRepository = ctx.userRepository;
34
+ this.cache = ctx.cache;
35
+ this.cipher = ctx.cipher;
36
+ this.eventService = ctx.eventService;
37
+ this.mailClient = ctx.mailClient;
38
+ this.mailTemplateRenderer = ctx.mailTemplateRenderer;
39
+ this.options = ctx.options ?? {};
40
+ this.validator = new UserAuthenticatorValidator();
41
+ }
42
+ isOwnedBy(entity, actor) {
43
+ return !!actor.identity && actor.identity.type === IdentityType.USER && entity.user_id === actor.identity.data.id;
44
+ }
45
+ /**
46
+ * The secret/codes columns never leave the service — reads return the
47
+ * row with both nulled (defense in depth on top of select:false).
48
+ */ sanitize(entity) {
49
+ return {
50
+ ...entity,
51
+ secret: null,
52
+ codes: null
53
+ };
54
+ }
55
+ async getMany(query, actor, options = {}) {
56
+ if (!(!!options.userId && !!actor.identity && actor.identity.type === IdentityType.USER && actor.identity.data.id === options.userId)) await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_READ });
57
+ const { data: entities, meta } = await this.repository.findMany(query, options.userId ? { owner: { userId: options.userId } } : {});
58
+ const data = [];
59
+ let { total } = meta;
60
+ for (const entity of entities) {
61
+ if (this.isOwnedBy(entity, actor)) {
62
+ data.push(this.sanitize(entity));
63
+ continue;
64
+ }
65
+ try {
66
+ await actor.permissionEvaluator.evaluate({
67
+ name: PermissionName.USER_AUTHENTICATOR_READ,
68
+ data: definePolicyData({
69
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
70
+ ...this.resourceRealmMatch(entity)
71
+ })
72
+ });
73
+ data.push(this.sanitize(entity));
74
+ } catch {
75
+ total -= 1;
76
+ }
77
+ }
78
+ return {
79
+ data,
80
+ meta: {
81
+ ...meta,
82
+ total
83
+ }
84
+ };
85
+ }
86
+ async getOne(id, actor, options = {}) {
87
+ const entity = await this.resolveOne(id, options.userId);
88
+ if (!this.isOwnedBy(entity, actor)) {
89
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_READ });
90
+ await actor.permissionEvaluator.evaluate({
91
+ name: PermissionName.USER_AUTHENTICATOR_READ,
92
+ data: definePolicyData({
93
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
94
+ ...this.resourceRealmMatch(entity)
95
+ })
96
+ });
97
+ }
98
+ return this.sanitize(entity);
99
+ }
100
+ async resolveOne(id, userId) {
101
+ const entity = await this.repository.findOneById(id);
102
+ if (!entity || userId && entity.user_id !== userId) throw new EntityNotFoundError();
103
+ return entity;
104
+ }
105
+ async enroll(data, actor) {
106
+ this.assertEnabled();
107
+ const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });
108
+ const user = await this.resolveTargetUser(validated.user_id, actor, validated);
109
+ if (!(!!actor.identity && actor.identity.type === IdentityType.USER && actor.identity.data.id === user.id) && validated.kind !== UserAuthenticatorKind.EMAIL) throw new ValidationError(`A ${validated.kind} authenticator can only be enrolled by the account owner.`);
110
+ switch (validated.kind) {
111
+ case UserAuthenticatorKind.TOTP: return this.enrollTotp(user, validated.name ?? null);
112
+ case UserAuthenticatorKind.RECOVERY: return this.enrollRecovery(user, validated.name ?? null);
113
+ case UserAuthenticatorKind.EMAIL: return this.enrollEmail(user, validated.name ?? null);
114
+ case UserAuthenticatorKind.WEBAUTHN: return this.enrollWebauthn(user, validated.name ?? null);
115
+ default: throw new ValidationError(`The authenticator kind ${validated.kind} can not be enrolled yet.`);
116
+ }
117
+ }
118
+ async enrollWebauthn(user, name) {
119
+ const ctx = this.assertWebauthn();
120
+ const excludeCredentials = (await this.repository.findAllWithSecretsByUser(user.id, {
121
+ kind: UserAuthenticatorKind.WEBAUTHN,
122
+ confirmed: true
123
+ })).map((device) => this.parseWebauthnParameters(device)).filter((parameters) => !!parameters).map((parameters) => ({
124
+ id: parameters.credential_id,
125
+ transports: parameters.transports
126
+ }));
127
+ const { options, challenge } = await buildWebauthnRegistrationOptions(ctx, {
128
+ id: user.id,
129
+ name: user.name
130
+ }, excludeCredentials);
131
+ let entity = this.repository.create({
132
+ kind: UserAuthenticatorKind.WEBAUTHN,
133
+ name,
134
+ confirmed: false,
135
+ user_id: user.id,
136
+ realm_id: user.realm_id
137
+ });
138
+ entity = await this.repository.save(entity);
139
+ await this.cache.set(this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, entity.id), {
140
+ challenge,
141
+ expiresAt: Date.now() + 300 * 1e3
142
+ }, { ttl: 300 * 1e3 });
143
+ return {
144
+ data: this.sanitize(entity),
145
+ meta: { webauthn: options }
146
+ };
147
+ }
148
+ async enrollEmail(user, name) {
149
+ this.assertMail();
150
+ if (!(user.email ?? (await this.userRepository.findOneByWithEmail({ id: user.id }))?.email)) throw new ValidationError("The user has no email address to receive codes.");
151
+ const existing = (await this.repository.findAllByUser(user.id)).filter((device) => device.kind === UserAuthenticatorKind.EMAIL);
152
+ let entity;
153
+ if (existing.length > 0) {
154
+ const [primary, ...duplicates] = existing;
155
+ primary.name = name;
156
+ primary.confirmed = true;
157
+ entity = await this.repository.save(primary);
158
+ for (const duplicate of duplicates) await this.repository.remove(duplicate);
159
+ } else {
160
+ entity = this.repository.create({
161
+ kind: UserAuthenticatorKind.EMAIL,
162
+ name,
163
+ confirmed: true,
164
+ user_id: user.id,
165
+ realm_id: user.realm_id
166
+ });
167
+ entity = await this.repository.save(entity);
168
+ }
169
+ await this.recordEvent(EventName.MFA_ENROLLED, entity);
170
+ return {
171
+ data: this.sanitize(entity),
172
+ meta: {}
173
+ };
174
+ }
175
+ async resolveTargetUser(userId, actor, validated) {
176
+ const actorUser = actor.identity && actor.identity.type === IdentityType.USER ? actor.identity.data : void 0;
177
+ if (!userId || actorUser && actorUser.id === userId) {
178
+ if (!actorUser) throw new AuthupError({
179
+ code: ErrorCode.IDENTITY_UNAUTHORIZED,
180
+ message: "Authentication required."
181
+ });
182
+ return actorUser;
183
+ }
184
+ const target = await this.userRepository.findOneById(userId);
185
+ if (!target) throw new EntityNotFoundError();
186
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_CREATE });
187
+ await actor.permissionEvaluator.evaluate({
188
+ name: PermissionName.USER_AUTHENTICATOR_CREATE,
189
+ data: definePolicyData({
190
+ [BuiltInPolicyType.ATTRIBUTES]: {
191
+ ...validated,
192
+ realm_id: target.realm_id
193
+ },
194
+ ...this.resourceRealmMatch(target)
195
+ })
196
+ });
197
+ return target;
198
+ }
199
+ async enrollTotp(user, name) {
200
+ const secret = new Secret({ size: 20 });
201
+ const parameters = {
202
+ algorithm: USER_AUTHENTICATOR_TOTP_ALGORITHM,
203
+ digits: 6,
204
+ period: 30
205
+ };
206
+ const uri = new TOTP({
207
+ issuer: this.options.issuer ?? "authup",
208
+ label: user.name,
209
+ algorithm: parameters.algorithm,
210
+ digits: parameters.digits,
211
+ period: parameters.period,
212
+ secret
213
+ }).toString();
214
+ let entity = this.repository.create({
215
+ kind: UserAuthenticatorKind.TOTP,
216
+ name,
217
+ secret: await this.cipher.encrypt(secret.base32, user.realm_id),
218
+ parameters: JSON.stringify(parameters),
219
+ confirmed: false,
220
+ user_id: user.id,
221
+ realm_id: user.realm_id
222
+ });
223
+ entity = await this.repository.save(entity);
224
+ return {
225
+ data: this.sanitize(entity),
226
+ meta: {
227
+ secret: secret.base32,
228
+ uri,
229
+ qr: await QRCode.toDataURL(uri)
230
+ }
231
+ };
232
+ }
233
+ async enrollRecovery(user, name) {
234
+ const codes = [];
235
+ const stored = [];
236
+ for (let i = 0; i < 10; i++) {
237
+ const code = generateRecoveryCode();
238
+ codes.push(code);
239
+ stored.push({
240
+ hash: await hash(code),
241
+ used_at: null
242
+ });
243
+ }
244
+ const [existing] = await this.repository.findAllWithSecretsByUser(user.id, { kind: UserAuthenticatorKind.RECOVERY });
245
+ let entity;
246
+ if (existing) {
247
+ existing.name = name;
248
+ existing.codes = JSON.stringify(stored);
249
+ existing.confirmed = true;
250
+ entity = await this.repository.save(existing);
251
+ } else {
252
+ entity = this.repository.create({
253
+ kind: UserAuthenticatorKind.RECOVERY,
254
+ name,
255
+ codes: JSON.stringify(stored),
256
+ confirmed: true,
257
+ user_id: user.id,
258
+ realm_id: user.realm_id
259
+ });
260
+ entity = await this.repository.save(entity);
261
+ }
262
+ await this.recordEvent(EventName.MFA_ENROLLED, entity);
263
+ return {
264
+ data: this.sanitize(entity),
265
+ meta: { codes }
266
+ };
267
+ }
268
+ async confirm(id, code, actor, options = {}) {
269
+ const entity = await this.resolveOne(id, options.userId);
270
+ if (!this.isOwnedBy(entity, actor)) {
271
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_UPDATE });
272
+ await actor.permissionEvaluator.evaluate({
273
+ name: PermissionName.USER_AUTHENTICATOR_UPDATE,
274
+ data: definePolicyData({
275
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
276
+ ...this.resourceRealmMatch(entity)
277
+ })
278
+ });
279
+ }
280
+ if (entity.confirmed) return this.sanitize(entity);
281
+ if (entity.kind === UserAuthenticatorKind.WEBAUTHN) return this.confirmWebauthn(entity, code);
282
+ if (entity.kind !== UserAuthenticatorKind.TOTP) throw new ValidationError(`The authenticator kind ${entity.kind} can not be confirmed with a code.`);
283
+ await this.assertNotThrottledOrRetry(entity.user_id);
284
+ const withSecrets = await this.repository.findOneWithSecretsById(entity.id);
285
+ if (!withSecrets) throw new EntityNotFoundError();
286
+ if (!await this.verifyTotp(withSecrets, code)) {
287
+ await this.bumpAttempts(entity.user_id);
288
+ throw new EntityCredentialsInvalidError();
289
+ }
290
+ await this.resetAttempts(entity.user_id);
291
+ entity.confirmed = true;
292
+ const output = await this.repository.save(entity);
293
+ await this.recordEvent(EventName.MFA_ENROLLED, output);
294
+ return this.sanitize(output);
295
+ }
296
+ async confirmWebauthn(entity, response) {
297
+ const ctx = this.assertWebauthn();
298
+ await this.assertNotThrottledOrRetry(entity.user_id);
299
+ const cacheKey = this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_REG_CACHE_PREFIX, entity.id);
300
+ const state = await this.cache.get(cacheKey);
301
+ if (!state || state.expiresAt < Date.now()) {
302
+ await this.bumpAttempts(entity.user_id);
303
+ throw new EntityCredentialsInvalidError();
304
+ }
305
+ let parsed;
306
+ try {
307
+ parsed = JSON.parse(response);
308
+ } catch {
309
+ throw new ValidationError("The registration response is malformed.");
310
+ }
311
+ const credential = await verifyWebauthnRegistration(ctx, parsed, state.challenge);
312
+ if (!credential) {
313
+ await this.bumpAttempts(entity.user_id);
314
+ throw new EntityCredentialsInvalidError();
315
+ }
316
+ await this.resetAttempts(entity.user_id);
317
+ await this.cache.drop(cacheKey);
318
+ entity.parameters = JSON.stringify(credential);
319
+ entity.confirmed = true;
320
+ const output = await this.repository.save(entity);
321
+ await this.recordEvent(EventName.MFA_ENROLLED, output);
322
+ return this.sanitize(output);
323
+ }
324
+ async delete(id, actor, options = {}) {
325
+ const entity = await this.resolveOne(id, options.userId);
326
+ if (!this.isOwnedBy(entity, actor)) {
327
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.USER_AUTHENTICATOR_DELETE });
328
+ await actor.permissionEvaluator.evaluate({
329
+ name: PermissionName.USER_AUTHENTICATOR_DELETE,
330
+ data: definePolicyData({
331
+ [BuiltInPolicyType.ATTRIBUTES]: entity,
332
+ ...this.resourceRealmMatch(entity)
333
+ })
334
+ });
335
+ }
336
+ const { id: entityId } = entity;
337
+ await this.repository.remove(entity);
338
+ entity.id = entityId;
339
+ await this.recordEvent(EventName.MFA_REMOVED, entity);
340
+ return this.sanitize(entity);
341
+ }
342
+ async verify(userId, input, ctx = {}) {
343
+ try {
344
+ await this.assertNotThrottled(userId);
345
+ } catch (e) {
346
+ if (isMfaThrottledError(e)) throw e;
347
+ return false;
348
+ }
349
+ const lockKey = this.buildVerifyLockCacheKey(userId);
350
+ const lock = await this.acquireVerifyLock(lockKey);
351
+ if (lock.status !== "acquired") return false;
352
+ const lease = this.maintainVerifyLock(lockKey, lock.value);
353
+ try {
354
+ const devices = await this.repository.findAllWithSecretsByUser(userId, {
355
+ kind: input.kind,
356
+ confirmed: true
357
+ });
358
+ let matched;
359
+ for (const device of devices) {
360
+ if (input.kind === UserAuthenticatorKind.TOTP) {
361
+ if (await this.verifyTotp(device, input.response)) matched = device;
362
+ }
363
+ if (input.kind === UserAuthenticatorKind.RECOVERY) {
364
+ if (await this.verifyRecovery(device, input.response)) matched = device;
365
+ }
366
+ if (input.kind === UserAuthenticatorKind.EMAIL) {
367
+ if (await this.verifyEmail(userId, input.response)) matched = device;
368
+ }
369
+ if (input.kind === UserAuthenticatorKind.WEBAUTHN) {
370
+ const newCounter = await this.verifyWebauthnDevice(userId, device, input.response);
371
+ if (newCounter !== null) {
372
+ const parameters = this.parseWebauthnParameters(device);
373
+ if (parameters) device.parameters = JSON.stringify({
374
+ ...parameters,
375
+ counter: newCounter
376
+ });
377
+ matched = device;
378
+ }
379
+ }
380
+ if (matched) break;
381
+ }
382
+ if (!matched) {
383
+ await this.bumpAttempts(userId);
384
+ await this.recordChallengeEvent(EventName.MFA_CHALLENGE_FAILED, userId, input.kind, ctx);
385
+ return false;
386
+ }
387
+ if (!await lease.renew()) return false;
388
+ if (ctx.onVerified) await ctx.onVerified();
389
+ if (!await lease.renew()) return false;
390
+ matched.last_used_at = (/* @__PURE__ */ new Date()).toISOString();
391
+ await this.repository.save(matched);
392
+ if (input.kind === UserAuthenticatorKind.EMAIL) await this.cache.drop(this.buildEmailCodeCacheKey(userId));
393
+ if (input.kind === UserAuthenticatorKind.WEBAUTHN) await this.cache.drop(this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId));
394
+ await this.resetAttempts(userId);
395
+ await this.recordChallengeEvent(EventName.MFA_VERIFIED, userId, input.kind, ctx, matched);
396
+ return true;
397
+ } finally {
398
+ await lease.stop();
399
+ await this.releaseVerifyLock(lockKey, lock.value);
400
+ }
401
+ }
402
+ async verifyTotp(device, token) {
403
+ if (!device.secret) return false;
404
+ let seed;
405
+ try {
406
+ seed = await this.cipher.decrypt(device.secret, device.realm_id);
407
+ } catch (e) {
408
+ if (isRealmCipherBlobError(e)) return false;
409
+ throw e;
410
+ }
411
+ let parameters = {
412
+ algorithm: USER_AUTHENTICATOR_TOTP_ALGORITHM,
413
+ digits: 6,
414
+ period: 30
415
+ };
416
+ if (device.parameters) parameters = {
417
+ ...parameters,
418
+ ...JSON.parse(device.parameters)
419
+ };
420
+ const delta = new TOTP({
421
+ algorithm: parameters.algorithm,
422
+ digits: parameters.digits,
423
+ period: parameters.period,
424
+ secret: Secret.fromBase32(seed)
425
+ }).validate({
426
+ token: token.trim(),
427
+ window: 1
428
+ });
429
+ if (delta === null) return false;
430
+ const step = Math.floor(Date.now() / 1e3 / parameters.period) + delta;
431
+ if (typeof parameters.counter === "number" && step <= parameters.counter) return false;
432
+ device.parameters = JSON.stringify({
433
+ ...parameters,
434
+ counter: step
435
+ });
436
+ return true;
437
+ }
438
+ async verifyRecovery(device, code) {
439
+ if (!device.codes) return false;
440
+ const entries = JSON.parse(device.codes);
441
+ const normalized = code.trim().toLowerCase();
442
+ for (const entry of entries) {
443
+ if (entry.used_at) continue;
444
+ if (await compare(normalized, entry.hash)) {
445
+ entry.used_at = (/* @__PURE__ */ new Date()).toISOString();
446
+ device.codes = JSON.stringify(entries);
447
+ return true;
448
+ }
449
+ }
450
+ return false;
451
+ }
452
+ parseWebauthnParameters(device) {
453
+ if (!device.parameters) return null;
454
+ try {
455
+ return JSON.parse(device.parameters);
456
+ } catch {
457
+ return null;
458
+ }
459
+ }
460
+ async verifyWebauthnDevice(userId, device, response) {
461
+ const ctx = this.assertWebauthn();
462
+ const parameters = this.parseWebauthnParameters(device);
463
+ if (!parameters) return null;
464
+ let parsed;
465
+ try {
466
+ parsed = JSON.parse(response);
467
+ } catch {
468
+ return null;
469
+ }
470
+ if (parsed.id !== parameters.credential_id) return null;
471
+ const state = await this.cache.get(this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId));
472
+ if (!state || state.expiresAt < Date.now()) return null;
473
+ try {
474
+ const result = await verifyWebauthnAuthentication(ctx, parsed, state.challenge, parameters);
475
+ return result.verified ? result.newCounter : null;
476
+ } catch {
477
+ return null;
478
+ }
479
+ }
480
+ async verifyEmail(userId, response) {
481
+ const key = this.buildEmailCodeCacheKey(userId);
482
+ const state = await this.cache.get(key);
483
+ if (!state || state.expiresAt < Date.now()) return false;
484
+ return compare(response.trim(), state.hash);
485
+ }
486
+ async sendChallenge(userId, kind, ctx = {}) {
487
+ if (kind !== UserAuthenticatorKind.EMAIL) return;
488
+ this.assertMail();
489
+ await this.assertNotThrottledOrRetry(userId);
490
+ if ((await this.repository.findAllWithSecretsByUser(userId, {
491
+ kind: UserAuthenticatorKind.EMAIL,
492
+ confirmed: true
493
+ })).length === 0) return;
494
+ const user = await this.userRepository.findOneByWithEmail({ id: userId });
495
+ if (!user || !user.email) return;
496
+ let withinCooldown;
497
+ try {
498
+ withinCooldown = !await this.cache.add(this.buildEmailSendCacheKey(userId), 1, { ttl: 60 * 1e3 });
499
+ } catch {
500
+ withinCooldown = false;
501
+ }
502
+ if (withinCooldown) throw new MfaThrottledError({ retryAfter: 60 });
503
+ const codeValue = generateNumericCode(6);
504
+ await this.cache.set(this.buildEmailCodeCacheKey(userId), {
505
+ hash: await hash(codeValue),
506
+ expiresAt: Date.now() + 600 * 1e3
507
+ }, { ttl: 600 * 1e3 });
508
+ const mail = await this.mailTemplateRenderer.render({
509
+ template: MailTemplateName.MFA_EMAIL_OTP,
510
+ params: {
511
+ code: codeValue,
512
+ expiresInMinutes: 10
513
+ },
514
+ locale: ctx.locale
515
+ });
516
+ await this.mailClient.send({
517
+ to: user.email,
518
+ ...mail
519
+ });
520
+ }
521
+ async hasConfirmed(userId) {
522
+ return this.repository.hasConfirmedByUser(userId);
523
+ }
524
+ async challenge(userId, options = {}) {
525
+ if (!this.options.enabled) return {
526
+ required: false,
527
+ enrollmentRequired: false,
528
+ kinds: []
529
+ };
530
+ const confirmed = (await this.repository.findAllByUser(userId)).filter((device) => device.confirmed);
531
+ const kinds = Array.from(new Set(confirmed.map((device) => device.kind)));
532
+ const status = {
533
+ required: confirmed.length > 0,
534
+ enrollmentRequired: !!this.options.required && confirmed.length === 0,
535
+ kinds
536
+ };
537
+ if ((options.issueMaterial ?? true) && kinds.includes(UserAuthenticatorKind.WEBAUTHN) && this.options.webauthn) {
538
+ const credentials = (await this.repository.findAllWithSecretsByUser(userId, {
539
+ kind: UserAuthenticatorKind.WEBAUTHN,
540
+ confirmed: true
541
+ })).map((device) => this.parseWebauthnParameters(device)).filter((parameters) => !!parameters).map((parameters) => ({
542
+ id: parameters.credential_id,
543
+ transports: parameters.transports
544
+ }));
545
+ const { options, challenge } = await buildWebauthnAuthenticationOptions(this.options.webauthn, credentials);
546
+ await this.cache.set(this.buildWebauthnCacheKey(USER_AUTHENTICATOR_WEBAUTHN_AUTH_CACHE_PREFIX, userId), {
547
+ challenge,
548
+ expiresAt: Date.now() + 300 * 1e3
549
+ }, { ttl: 300 * 1e3 });
550
+ status.challenge = { webauthn: options };
551
+ }
552
+ return status;
553
+ }
554
+ assertEnabled() {
555
+ if (!this.options.enabled) throw new AuthupError({
556
+ code: ErrorCode.MFA_NOT_CONFIGURABLE,
557
+ message: "Multi-factor authentication is not enabled."
558
+ });
559
+ }
560
+ assertMail() {
561
+ if (!this.mailClient || !this.mailTemplateRenderer) throw new AuthupError({
562
+ code: ErrorCode.MFA_NOT_CONFIGURABLE,
563
+ message: "Email-based multi-factor authentication requires a configured mail transport."
564
+ });
565
+ }
566
+ assertWebauthn() {
567
+ if (!this.options.webauthn) throw new AuthupError({
568
+ code: ErrorCode.MFA_NOT_CONFIGURABLE,
569
+ message: "WebAuthn requires a configured public URL (relying-party origin)."
570
+ });
571
+ return this.options.webauthn;
572
+ }
573
+ buildAttemptCacheKey(userId) {
574
+ return buildCacheKey({
575
+ prefix: USER_AUTHENTICATOR_ATTEMPT_CACHE_PREFIX,
576
+ key: userId
577
+ });
578
+ }
579
+ buildThrottleCacheKey(userId) {
580
+ return buildCacheKey({
581
+ prefix: USER_AUTHENTICATOR_THROTTLE_CACHE_PREFIX,
582
+ key: userId
583
+ });
584
+ }
585
+ buildEmailCodeCacheKey(userId) {
586
+ return buildCacheKey({
587
+ prefix: USER_AUTHENTICATOR_EMAIL_CODE_CACHE_PREFIX,
588
+ key: userId
589
+ });
590
+ }
591
+ buildEmailSendCacheKey(userId) {
592
+ return buildCacheKey({
593
+ prefix: USER_AUTHENTICATOR_EMAIL_SEND_CACHE_PREFIX,
594
+ key: userId
595
+ });
596
+ }
597
+ buildWebauthnCacheKey(prefix, userId) {
598
+ return buildCacheKey({
599
+ prefix,
600
+ key: userId
601
+ });
602
+ }
603
+ buildVerifyLockCacheKey(userId) {
604
+ return buildCacheKey({
605
+ prefix: USER_AUTHENTICATOR_VERIFY_LOCK_CACHE_PREFIX,
606
+ key: userId
607
+ });
608
+ }
609
+ async acquireVerifyLock(key) {
610
+ const value = randomUUID();
611
+ try {
612
+ return await this.cache.add(key, value, { ttl: 1e4 }) ? {
613
+ status: "acquired",
614
+ value
615
+ } : { status: "busy" };
616
+ } catch {
617
+ return { status: "unavailable" };
618
+ }
619
+ }
620
+ maintainVerifyLock(key, value) {
621
+ let owned = true;
622
+ let pending;
623
+ const queueRenewal = () => {
624
+ if (!owned || pending) return pending;
625
+ pending = this.cache.renewIfValue(key, value, USER_AUTHENTICATOR_VERIFY_LOCK_TTL).then((renewed) => {
626
+ owned = renewed;
627
+ }).catch(() => {
628
+ owned = false;
629
+ }).finally(() => {
630
+ pending = void 0;
631
+ });
632
+ return pending;
633
+ };
634
+ const timer = setInterval(queueRenewal, USER_AUTHENTICATOR_VERIFY_LOCK_RENEW_INTERVAL);
635
+ return {
636
+ renew: async () => {
637
+ await queueRenewal();
638
+ return owned;
639
+ },
640
+ stop: async () => {
641
+ clearInterval(timer);
642
+ await pending;
643
+ }
644
+ };
645
+ }
646
+ async releaseVerifyLock(key, value) {
647
+ try {
648
+ await this.cache.dropIfValue(key, value);
649
+ } catch {}
650
+ }
651
+ async assertNotThrottled(userId) {
652
+ const lockedUntil = await this.cache.get(this.buildThrottleCacheKey(userId));
653
+ if (typeof lockedUntil === "number" && lockedUntil > Date.now()) throw new MfaThrottledError({ retryAfter: Math.ceil((lockedUntil - Date.now()) / 1e3) });
654
+ }
655
+ async assertNotThrottledOrRetry(userId) {
656
+ try {
657
+ await this.assertNotThrottled(userId);
658
+ } catch (e) {
659
+ if (isMfaThrottledError(e)) throw e;
660
+ throw new MfaThrottledError({ retryAfter: 1 });
661
+ }
662
+ }
663
+ async bumpAttempts(userId) {
664
+ const key = this.buildAttemptCacheKey(userId);
665
+ let count;
666
+ try {
667
+ count = await this.cache.increment(key, 1, { ttl: USER_AUTHENTICATOR_ATTEMPT_WINDOW * 1e3 });
668
+ } catch {
669
+ await this.cache.drop(key);
670
+ count = await this.cache.increment(key, 1, { ttl: USER_AUTHENTICATOR_ATTEMPT_WINDOW * 1e3 });
671
+ }
672
+ const delay = Math.min(300, 1 * 2 ** (count - 1));
673
+ await this.cache.set(this.buildThrottleCacheKey(userId), Date.now() + delay * 1e3, { ttl: delay * 1e3 });
674
+ }
675
+ async resetAttempts(userId) {
676
+ await this.cache.dropMany([this.buildAttemptCacheKey(userId), this.buildThrottleCacheKey(userId)]);
677
+ }
678
+ async recordEvent(name, entity) {
679
+ await this.eventService?.record({
680
+ scope: EventScope.IDENTITY,
681
+ name,
682
+ refType: EventRefType.USER_AUTHENTICATOR,
683
+ refId: entity.id,
684
+ actorType: IdentityType.USER,
685
+ actorId: entity.user_id,
686
+ realmId: entity.realm_id,
687
+ data: { kind: entity.kind }
688
+ });
689
+ }
690
+ async recordChallengeEvent(name, userId, kind, ctx, entity) {
691
+ await this.eventService?.record({
692
+ scope: EventScope.IDENTITY,
693
+ name,
694
+ refType: EventRefType.USER,
695
+ refId: userId,
696
+ actorType: IdentityType.USER,
697
+ actorId: userId,
698
+ clientId: ctx.clientId ?? null,
699
+ realmId: entity?.realm_id ?? null,
700
+ requestIpAddress: ctx.ipAddress ?? null,
701
+ requestUserAgent: ctx.userAgent ?? null,
702
+ data: { kind }
703
+ });
704
+ }
705
+ };
706
+ //#endregion
707
+ export { UserAuthenticatorService };
708
+
709
+ //# sourceMappingURL=service.mjs.map