@authup/server-core 1.0.0-beta.54 → 1.0.0-beta.55

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 (328) hide show
  1. package/dist/adapters/database/data-source/options/module.mjs.map +1 -1
  2. package/dist/adapters/database/domains/client/entity.mjs +2 -2
  3. package/dist/adapters/database/domains/client/entity.mjs.map +1 -1
  4. package/dist/adapters/database/domains/client/subscriber.mjs +2 -2
  5. package/dist/adapters/database/domains/client/subscriber.mjs.map +1 -1
  6. package/dist/adapters/database/domains/client-permission/entity.mjs +2 -2
  7. package/dist/adapters/database/domains/client-permission/entity.mjs.map +1 -1
  8. package/dist/adapters/database/domains/client-permission/subscriber.mjs +2 -2
  9. package/dist/adapters/database/domains/client-permission/subscriber.mjs.map +1 -1
  10. package/dist/adapters/database/domains/client-role/entity.mjs +2 -2
  11. package/dist/adapters/database/domains/client-role/entity.mjs.map +1 -1
  12. package/dist/adapters/database/domains/client-role/subscriber.mjs +2 -2
  13. package/dist/adapters/database/domains/client-role/subscriber.mjs.map +1 -1
  14. package/dist/adapters/database/domains/client-scope/entity.mjs +2 -2
  15. package/dist/adapters/database/domains/client-scope/entity.mjs.map +1 -1
  16. package/dist/adapters/database/domains/client-scope/subscriber.mjs +2 -2
  17. package/dist/adapters/database/domains/client-scope/subscriber.mjs.map +1 -1
  18. package/dist/adapters/database/domains/consent/entity.mjs +2 -2
  19. package/dist/adapters/database/domains/consent/entity.mjs.map +1 -1
  20. package/dist/adapters/database/domains/consent/subscriber.mjs +2 -2
  21. package/dist/adapters/database/domains/consent/subscriber.mjs.map +1 -1
  22. package/dist/adapters/database/domains/constants.mjs.map +1 -1
  23. package/dist/adapters/database/domains/event/entity.mjs +2 -2
  24. package/dist/adapters/database/domains/event/entity.mjs.map +1 -1
  25. package/dist/adapters/database/domains/identity-provider/entity.mjs +2 -2
  26. package/dist/adapters/database/domains/identity-provider/entity.mjs.map +1 -1
  27. package/dist/adapters/database/domains/identity-provider/subscriber.mjs +2 -2
  28. package/dist/adapters/database/domains/identity-provider/subscriber.mjs.map +1 -1
  29. package/dist/adapters/database/domains/identity-provider-account/entity.mjs +2 -2
  30. package/dist/adapters/database/domains/identity-provider-account/entity.mjs.map +1 -1
  31. package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs +2 -2
  32. package/dist/adapters/database/domains/identity-provider-account/subscriber.mjs.map +1 -1
  33. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs +2 -2
  34. package/dist/adapters/database/domains/identity-provider-attribute/entity.mjs.map +1 -1
  35. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs +2 -2
  36. package/dist/adapters/database/domains/identity-provider-attribute/subscriber.mjs.map +1 -1
  37. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs +2 -2
  38. package/dist/adapters/database/domains/identity-provider-attribute-mapping/entity.mjs.map +1 -1
  39. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs +2 -2
  40. package/dist/adapters/database/domains/identity-provider-permission-mapping/entity.mjs.map +1 -1
  41. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs +2 -2
  42. package/dist/adapters/database/domains/identity-provider-role-mapping/entity.mjs.map +1 -1
  43. package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs +2 -2
  44. package/dist/adapters/database/domains/identity-provider-role-mapping/subscriber.mjs.map +1 -1
  45. package/dist/adapters/database/domains/key/entity.mjs +2 -2
  46. package/dist/adapters/database/domains/key/entity.mjs.map +1 -1
  47. package/dist/adapters/database/domains/permission/entity.mjs +2 -2
  48. package/dist/adapters/database/domains/permission/entity.mjs.map +1 -1
  49. package/dist/adapters/database/domains/permission/subscriber.mjs +2 -2
  50. package/dist/adapters/database/domains/permission/subscriber.mjs.map +1 -1
  51. package/dist/adapters/database/domains/permission-policy/entity.mjs +2 -2
  52. package/dist/adapters/database/domains/permission-policy/entity.mjs.map +1 -1
  53. package/dist/adapters/database/domains/policy/entity.mjs +2 -2
  54. package/dist/adapters/database/domains/policy/entity.mjs.map +1 -1
  55. package/dist/adapters/database/domains/policy/subscriber.mjs +2 -2
  56. package/dist/adapters/database/domains/policy/subscriber.mjs.map +1 -1
  57. package/dist/adapters/database/domains/policy-attribute/entity.mjs +2 -2
  58. package/dist/adapters/database/domains/policy-attribute/entity.mjs.map +1 -1
  59. package/dist/adapters/database/domains/policy-attribute/subscriber.mjs +2 -2
  60. package/dist/adapters/database/domains/policy-attribute/subscriber.mjs.map +1 -1
  61. package/dist/adapters/database/domains/realm/entity.mjs +2 -2
  62. package/dist/adapters/database/domains/realm/entity.mjs.map +1 -1
  63. package/dist/adapters/database/domains/realm/subscriber.mjs +2 -2
  64. package/dist/adapters/database/domains/realm/subscriber.mjs.map +1 -1
  65. package/dist/adapters/database/domains/role/entity.mjs +2 -2
  66. package/dist/adapters/database/domains/role/entity.mjs.map +1 -1
  67. package/dist/adapters/database/domains/role/subscriber.mjs +2 -2
  68. package/dist/adapters/database/domains/role/subscriber.mjs.map +1 -1
  69. package/dist/adapters/database/domains/role-attribute/entity.mjs +2 -2
  70. package/dist/adapters/database/domains/role-attribute/entity.mjs.map +1 -1
  71. package/dist/adapters/database/domains/role-attribute/subscriber.mjs +2 -2
  72. package/dist/adapters/database/domains/role-attribute/subscriber.mjs.map +1 -1
  73. package/dist/adapters/database/domains/role-permission/entity.mjs +2 -2
  74. package/dist/adapters/database/domains/role-permission/entity.mjs.map +1 -1
  75. package/dist/adapters/database/domains/role-permission/subscriber.mjs +2 -2
  76. package/dist/adapters/database/domains/role-permission/subscriber.mjs.map +1 -1
  77. package/dist/adapters/database/domains/scope/entity.mjs +2 -2
  78. package/dist/adapters/database/domains/scope/entity.mjs.map +1 -1
  79. package/dist/adapters/database/domains/scope/subscriber.mjs +2 -2
  80. package/dist/adapters/database/domains/scope/subscriber.mjs.map +1 -1
  81. package/dist/adapters/database/domains/session/entity.mjs +2 -2
  82. package/dist/adapters/database/domains/session/entity.mjs.map +1 -1
  83. package/dist/adapters/database/domains/session-token/entity.mjs +2 -2
  84. package/dist/adapters/database/domains/session-token/entity.mjs.map +1 -1
  85. package/dist/adapters/database/domains/trust-anchor/entity.mjs +2 -2
  86. package/dist/adapters/database/domains/trust-anchor/entity.mjs.map +1 -1
  87. package/dist/adapters/database/domains/user/entity.mjs +2 -2
  88. package/dist/adapters/database/domains/user/entity.mjs.map +1 -1
  89. package/dist/adapters/database/domains/user/subscriber.mjs +2 -2
  90. package/dist/adapters/database/domains/user/subscriber.mjs.map +1 -1
  91. package/dist/adapters/database/domains/user-attribute/entity.mjs +2 -2
  92. package/dist/adapters/database/domains/user-attribute/entity.mjs.map +1 -1
  93. package/dist/adapters/database/domains/user-attribute/subscriber.mjs +2 -2
  94. package/dist/adapters/database/domains/user-attribute/subscriber.mjs.map +1 -1
  95. package/dist/adapters/database/domains/user-authenticator/entity.mjs +2 -2
  96. package/dist/adapters/database/domains/user-authenticator/entity.mjs.map +1 -1
  97. package/dist/adapters/database/domains/user-permission/entity.mjs +2 -2
  98. package/dist/adapters/database/domains/user-permission/entity.mjs.map +1 -1
  99. package/dist/adapters/database/domains/user-permission/subscriber.mjs +2 -2
  100. package/dist/adapters/database/domains/user-permission/subscriber.mjs.map +1 -1
  101. package/dist/adapters/database/domains/user-role/entity.mjs +2 -2
  102. package/dist/adapters/database/domains/user-role/entity.mjs.map +1 -1
  103. package/dist/adapters/database/domains/user-role/subscriber.mjs +2 -2
  104. package/dist/adapters/database/domains/user-role/subscriber.mjs.map +1 -1
  105. package/dist/adapters/database/errors/driver.mjs.map +1 -1
  106. package/dist/adapters/database/extra-attribute-repository/adapter.mjs.map +1 -1
  107. package/dist/adapters/database/extra-attribute-repository/tree/adapter.mjs.map +1 -1
  108. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
  109. package/dist/adapters/database/migrations/mysql/1779267068441-Default.mjs.map +1 -1
  110. package/dist/adapters/database/migrations/mysql/1779300000000-Default.mjs.map +1 -1
  111. package/dist/adapters/database/migrations/mysql/1784289540000-CamelCaseAttributes.mjs.map +1 -1
  112. package/dist/adapters/database/migrations/postgres/1779267068441-Default.mjs.map +1 -1
  113. package/dist/adapters/database/migrations/postgres/1779300000000-Default.mjs.map +1 -1
  114. package/dist/adapters/database/migrations/postgres/1784289540000-CamelCaseAttributes.mjs.map +1 -1
  115. package/dist/adapters/database/subscriber/module.mjs.map +1 -1
  116. package/dist/adapters/http/adapters/oauth2/authorization/module.mjs.map +1 -1
  117. package/dist/adapters/http/adapters/oauth2/grant-types/utils/realm.mjs.map +1 -1
  118. package/dist/adapters/http/controllers/entities/client/module.mjs +2 -2
  119. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  120. package/dist/adapters/http/controllers/entities/client-permission/module.mjs +2 -2
  121. package/dist/adapters/http/controllers/entities/client-permission/module.mjs.map +1 -1
  122. package/dist/adapters/http/controllers/entities/client-role/module.mjs +2 -2
  123. package/dist/adapters/http/controllers/entities/client-role/module.mjs.map +1 -1
  124. package/dist/adapters/http/controllers/entities/client-scope/module.mjs +2 -2
  125. package/dist/adapters/http/controllers/entities/client-scope/module.mjs.map +1 -1
  126. package/dist/adapters/http/controllers/entities/consent/module.mjs +2 -2
  127. package/dist/adapters/http/controllers/entities/consent/module.mjs.map +1 -1
  128. package/dist/adapters/http/controllers/entities/event/module.mjs +2 -2
  129. package/dist/adapters/http/controllers/entities/event/module.mjs.map +1 -1
  130. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs +2 -2
  131. package/dist/adapters/http/controllers/entities/identity-provide-role/module.mjs.map +1 -1
  132. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +2 -2
  133. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
  134. package/dist/adapters/http/controllers/entities/key/module.mjs +2 -2
  135. package/dist/adapters/http/controllers/entities/key/module.mjs.map +1 -1
  136. package/dist/adapters/http/controllers/entities/permission/module.mjs +2 -2
  137. package/dist/adapters/http/controllers/entities/permission/module.mjs.map +1 -1
  138. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs +2 -2
  139. package/dist/adapters/http/controllers/entities/permission-policy/module.mjs.map +1 -1
  140. package/dist/adapters/http/controllers/entities/policy/module.mjs +2 -2
  141. package/dist/adapters/http/controllers/entities/policy/module.mjs.map +1 -1
  142. package/dist/adapters/http/controllers/entities/realm/module.mjs +2 -2
  143. package/dist/adapters/http/controllers/entities/realm/module.mjs.map +1 -1
  144. package/dist/adapters/http/controllers/entities/role/module.mjs +2 -2
  145. package/dist/adapters/http/controllers/entities/role/module.mjs.map +1 -1
  146. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs +2 -2
  147. package/dist/adapters/http/controllers/entities/role-attribute/module.mjs.map +1 -1
  148. package/dist/adapters/http/controllers/entities/role-permission/module.mjs +2 -2
  149. package/dist/adapters/http/controllers/entities/role-permission/module.mjs.map +1 -1
  150. package/dist/adapters/http/controllers/entities/scope/module.mjs +2 -2
  151. package/dist/adapters/http/controllers/entities/scope/module.mjs.map +1 -1
  152. package/dist/adapters/http/controllers/entities/session/module.mjs +2 -2
  153. package/dist/adapters/http/controllers/entities/session/module.mjs.map +1 -1
  154. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs +2 -2
  155. package/dist/adapters/http/controllers/entities/trust-anchor/module.mjs.map +1 -1
  156. package/dist/adapters/http/controllers/entities/user/module.mjs +2 -2
  157. package/dist/adapters/http/controllers/entities/user/module.mjs.map +1 -1
  158. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs +2 -2
  159. package/dist/adapters/http/controllers/entities/user-attribute/module.mjs.map +1 -1
  160. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs +2 -2
  161. package/dist/adapters/http/controllers/entities/user-authenticator/module.mjs.map +1 -1
  162. package/dist/adapters/http/controllers/entities/user-permission/module.mjs +2 -2
  163. package/dist/adapters/http/controllers/entities/user-permission/module.mjs.map +1 -1
  164. package/dist/adapters/http/controllers/entities/user-role/module.mjs +2 -2
  165. package/dist/adapters/http/controllers/entities/user-role/module.mjs.map +1 -1
  166. package/dist/adapters/http/controllers/workflows/activate/module.mjs +2 -2
  167. package/dist/adapters/http/controllers/workflows/authenticator-challenge/module.mjs +2 -2
  168. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +2 -2
  169. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  170. package/dist/adapters/http/controllers/workflows/jwks/handlers/read.mjs.map +1 -1
  171. package/dist/adapters/http/controllers/workflows/jwks/module.mjs +2 -2
  172. package/dist/adapters/http/controllers/workflows/jwks/module.mjs.map +1 -1
  173. package/dist/adapters/http/controllers/workflows/logout/module.mjs +2 -2
  174. package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
  175. package/dist/adapters/http/controllers/workflows/openid/module.mjs +2 -2
  176. package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +2 -2
  177. package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +2 -2
  178. package/dist/adapters/http/controllers/workflows/register/module.mjs +2 -2
  179. package/dist/adapters/http/controllers/workflows/status/module.mjs +2 -2
  180. package/dist/adapters/http/controllers/workflows/token/module.mjs +2 -2
  181. package/dist/adapters/http/controllers/workflows/token/utils/extract.mjs.map +1 -1
  182. package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
  183. package/dist/adapters/http/middleware/built-in/cors.mjs.map +1 -1
  184. package/dist/adapters/http/middleware/built-in/logger.mjs.map +1 -1
  185. package/dist/adapters/http/request/constants.mjs.map +1 -1
  186. package/dist/adapters/http/request/helpers/param-id.mjs.map +1 -1
  187. package/dist/adapters/http/request/helpers/redirect.mjs.map +1 -1
  188. package/dist/app/factory.mjs.map +1 -1
  189. package/dist/app/modules/authentication/module.mjs.map +1 -1
  190. package/dist/app/modules/authentication/repositories/constants.mjs.map +1 -1
  191. package/dist/app/modules/authentication/repositories/session.mjs.map +1 -1
  192. package/dist/app/modules/cache/module.mjs.map +1 -1
  193. package/dist/app/modules/components/module.mjs.map +1 -1
  194. package/dist/app/modules/config/constants.mjs.map +1 -1
  195. package/dist/app/modules/config/origins.mjs.map +1 -1
  196. package/dist/app/modules/config/read/env.mjs.map +1 -1
  197. package/dist/app/modules/config/read/fs.mjs.map +1 -1
  198. package/dist/app/modules/config/validator.mjs.map +1 -1
  199. package/dist/app/modules/database/module.mjs.map +1 -1
  200. package/dist/app/modules/database/repositories/bindings.mjs.map +1 -1
  201. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  202. package/dist/app/modules/database/repositories/event/repository.mjs.map +1 -1
  203. package/dist/app/modules/database/repositories/helpers.mjs.map +1 -1
  204. package/dist/app/modules/database/repositories/permission-provider/module.mjs.map +1 -1
  205. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  206. package/dist/app/modules/database/repositories/user-attribute/repository.mjs.map +1 -1
  207. package/dist/app/modules/database/repositories/user-authenticator/repository.mjs.map +1 -1
  208. package/dist/app/modules/http/module.mjs.map +1 -1
  209. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  210. package/dist/app/modules/identity/module.mjs.map +1 -1
  211. package/dist/app/modules/logger/module.mjs.map +1 -1
  212. package/dist/app/modules/mail/module.mjs.map +1 -1
  213. package/dist/app/modules/metrics/prom.mjs.map +1 -1
  214. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  215. package/dist/app/modules/oauth2/repositories/consent/repository.mjs.map +1 -1
  216. package/dist/app/modules/oauth2/repositories/constants.mjs.map +1 -1
  217. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  218. package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
  219. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  220. package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
  221. package/dist/app/modules/runtime/module.mjs.map +1 -1
  222. package/dist/cli/commands/migration.mjs.map +1 -1
  223. package/dist/components/database/unique-entries/module.mjs.map +1 -1
  224. package/dist/core/authentication/entities/client/module.mjs.map +1 -1
  225. package/dist/core/authentication/session/module.mjs.map +1 -1
  226. package/dist/core/authentication/session/types.mjs.map +1 -1
  227. package/dist/core/client-certificate/module.mjs.map +1 -1
  228. package/dist/core/entities/client/schema.mjs.map +1 -1
  229. package/dist/core/entities/client/service.mjs.map +1 -1
  230. package/dist/core/entities/client-permission/schema.mjs.map +1 -1
  231. package/dist/core/entities/client-permission/service.mjs.map +1 -1
  232. package/dist/core/entities/client-role/schema.mjs.map +1 -1
  233. package/dist/core/entities/client-role/service.mjs.map +1 -1
  234. package/dist/core/entities/client-scope/schema.mjs.map +1 -1
  235. package/dist/core/entities/client-scope/service.mjs.map +1 -1
  236. package/dist/core/entities/consent/schema.mjs.map +1 -1
  237. package/dist/core/entities/consent/types.mjs.map +1 -1
  238. package/dist/core/entities/event/diff.mjs.map +1 -1
  239. package/dist/core/entities/event/sanitize.mjs.map +1 -1
  240. package/dist/core/entities/event/schema.mjs.map +1 -1
  241. package/dist/core/entities/event/service.mjs.map +1 -1
  242. package/dist/core/entities/identity-provider/schema.mjs.map +1 -1
  243. package/dist/core/entities/identity-provider-role-mapping/schema.mjs.map +1 -1
  244. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  245. package/dist/core/entities/key/schema.mjs.map +1 -1
  246. package/dist/core/entities/key/service.mjs.map +1 -1
  247. package/dist/core/entities/permission/schema.d.ts.map +1 -1
  248. package/dist/core/entities/permission/schema.mjs +12 -0
  249. package/dist/core/entities/permission/schema.mjs.map +1 -1
  250. package/dist/core/entities/permission/service.mjs.map +1 -1
  251. package/dist/core/entities/permission-policy/schema.mjs.map +1 -1
  252. package/dist/core/entities/permission-policy/service.mjs.map +1 -1
  253. package/dist/core/entities/policy/schema.mjs.map +1 -1
  254. package/dist/core/entities/policy/service.mjs.map +1 -1
  255. package/dist/core/entities/realm/schema.mjs.map +1 -1
  256. package/dist/core/entities/role/schema.mjs.map +1 -1
  257. package/dist/core/entities/role/service.mjs.map +1 -1
  258. package/dist/core/entities/role-attribute/schema.mjs.map +1 -1
  259. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  260. package/dist/core/entities/role-permission/schema.mjs.map +1 -1
  261. package/dist/core/entities/role-permission/service.mjs.map +1 -1
  262. package/dist/core/entities/scope/schema.mjs.map +1 -1
  263. package/dist/core/entities/scope/service.mjs.map +1 -1
  264. package/dist/core/entities/session/schema.mjs.map +1 -1
  265. package/dist/core/entities/session/service.mjs.map +1 -1
  266. package/dist/core/entities/trust-anchor/schema.mjs.map +1 -1
  267. package/dist/core/entities/trust-anchor/service.mjs.map +1 -1
  268. package/dist/core/entities/user/schema.mjs.map +1 -1
  269. package/dist/core/entities/user/service.mjs.map +1 -1
  270. package/dist/core/entities/user-attribute/schema.mjs.map +1 -1
  271. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  272. package/dist/core/entities/user-authenticator/schema.mjs.map +1 -1
  273. package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
  274. package/dist/core/entities/user-authenticator/types.mjs.map +1 -1
  275. package/dist/core/entities/user-permission/schema.mjs.map +1 -1
  276. package/dist/core/entities/user-permission/service.mjs.map +1 -1
  277. package/dist/core/entities/user-role/schema.mjs.map +1 -1
  278. package/dist/core/entities/user-role/service.mjs.map +1 -1
  279. package/dist/core/identity/permission/junction-grant.mjs.map +1 -1
  280. package/dist/core/identity/permission/module.mjs.map +1 -1
  281. package/dist/core/identity/provider/authentication/presets/facebook.mjs.map +1 -1
  282. package/dist/core/identity/provider/authentication/presets/github.mjs.map +1 -1
  283. package/dist/core/identity/provider/authentication/presets/google.mjs.map +1 -1
  284. package/dist/core/identity/provider/authentication/presets/instagram.mjs.map +1 -1
  285. package/dist/core/identity/provider/authentication/presets/paypal.mjs.map +1 -1
  286. package/dist/core/identity/provider/authentication/protocols/ldap/module.mjs.map +1 -1
  287. package/dist/core/identity/provider/authentication/protocols/oauth2/module.mjs.map +1 -1
  288. package/dist/core/identity/provider/authentication/protocols/open-id/module.mjs.map +1 -1
  289. package/dist/core/identity/provider/constants.mjs.map +1 -1
  290. package/dist/core/identity/provider/mapper/base.mjs.map +1 -1
  291. package/dist/core/identity/provider/mapper/constants.mjs.map +1 -1
  292. package/dist/core/identity/registration/service.mjs.map +1 -1
  293. package/dist/core/key/provisioner.mjs.map +1 -1
  294. package/dist/core/key/realm-cipher.mjs.map +1 -1
  295. package/dist/core/mail/template/templates/mfa-email-otp.mjs.map +1 -1
  296. package/dist/core/mail/template/templates/password-reset.mjs.map +1 -1
  297. package/dist/core/mail/template/templates/registration-activation.mjs.map +1 -1
  298. package/dist/core/mail/template/types.mjs.map +1 -1
  299. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  300. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  301. package/dist/core/oauth2/authorization/module.mjs.map +1 -1
  302. package/dist/core/oauth2/end-session/service.mjs.map +1 -1
  303. package/dist/core/oauth2/grant-types/refresh-token.mjs.map +1 -1
  304. package/dist/core/oauth2/mfa-login/module.mjs.map +1 -1
  305. package/dist/core/oauth2/openid/claims.mjs.map +1 -1
  306. package/dist/core/oauth2/scope/resolver.mjs.map +1 -1
  307. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  308. package/dist/core/oauth2/token/issuer/mfa/module.mjs.map +1 -1
  309. package/dist/core/oauth2/token/issuer/open-id/module.mjs.map +1 -1
  310. package/dist/core/oauth2/token/issuer/refresh/module.mjs.map +1 -1
  311. package/dist/core/oauth2/token/verifier/module.mjs.map +1 -1
  312. package/dist/core/provisioning/entities/policy/validator.mjs.map +1 -1
  313. package/dist/core/provisioning/entities/utils.mjs.map +1 -1
  314. package/dist/core/provisioning/strategy/constants.mjs.map +1 -1
  315. package/dist/core/provisioning/strategy/validator.mjs.map +1 -1
  316. package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
  317. package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
  318. package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
  319. package/dist/core/query/module.mjs.map +1 -1
  320. package/dist/core/query/relations.mjs.map +1 -1
  321. package/dist/core/security/policy/evaluator.mjs.map +1 -1
  322. package/dist/ui/client/.vite/ssr-manifest.json +218 -218
  323. package/dist/ui/client/assets/index-CiHrf73J.css +2 -0
  324. package/dist/ui/client/assets/{index-BmJ2X468.js → index-mtJngmng.js} +1 -1
  325. package/dist/ui/client/index.html +2 -2
  326. package/dist/ui/server/server.js +534 -79
  327. package/package.json +26 -26
  328. package/dist/ui/client/assets/index-DiOvW76Q.css +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","CachePrefix","UserEntity","UserPermissionEntity","UserRoleEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","loadBoundPermissions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","entries","getRepository","find","userId","relations","role","cache","prefix","USER_OWNED_ROLES","key","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","USER_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role, User } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IUserRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { UserRepository } from '../../../../../adapters/database/domains/index.ts';\nimport {\n CachePrefix,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type UserRepositoryAdapterContext = {\n repository: UserRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class UserRepositoryAdapter implements IUserRepository {\n private readonly repository: UserRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: UserRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'user', ['id']);\n\n const [entities, total] = await qb.getManyAndCount();\n\n await this.repository.extendManyWithEA(entities);\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<User | null> {\n const entity = await this.findOneBy({ id });\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.where('user.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('user.realmId = :realmId', { realmId });\n }\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<User | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findOne(id: string, query?: IQuery, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n\n if (isUUID(id)) {\n qb.where('user.id = :id', { id });\n } else {\n qb.where('user.name = :name', { name: id });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('user.realmId = :realmId', { realmId });\n }\n }\n\n applyQuery(qb, query);\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findManyBy(where: Record<string, any>): Promise<User[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneByWithEmail(where: Record<string, any>): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.addSelect('user.email');\n\n const translated = translateWhereConditions(where);\n qb.where(translated);\n\n return qb.getOne();\n }\n\n create(data: Partial<User>): User {\n return this.repository.create(data);\n }\n\n merge(entity: User, data: Partial<User>): User {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: User): Promise<User> {\n return this.repository.save(entity);\n }\n\n async remove(entity: User): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<User>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n });\n }\n\n async checkUniqueness(data: Partial<User>, existing?: User): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | User): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(UserRoleEntity)\n .find({\n where: { userId: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.USER_OWNED_ROLES,\n key: id,\n }),\n milliseconds: 60_000,\n },\n });\n\n return entries.map((entry) => entry.role);\n }\n\n async getBoundPermissions(entity: string | User): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: UserPermissionEntity,\n where: { userId: id },\n cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkCA,IAAac,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;EAC3C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA8D;EACzE,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGE,QAAQ,SAAA;EAEX,MAAM,EAAEC,eAAepB,WAAWiB,IAAID,KAAAA;EAEtCV,sBAAsBW,IAAI,QAAQ,CAAC,IAAA,CAAK;EAExC,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,MAAM,KAAKX,WAAWY,iBAAiBH,QAAAA;EAEvC,OAAO;GACHI,MAAMJ;GACNK,MAAM;IACFJ;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMO,YAAYC,IAAkC;EAChD,MAAMC,SAAS,MAAM,KAAKC,UAAU,EAAEF,GAAG,CAAA;EACzC,IAAIC,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMG,cAAcC,MAAcC,UAAyC;EACvE,MAAMjB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGkB,MAAM,qBAAqB,EAAEF,KAAK,CAAA;EAErC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKvB,gBAAgBwB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXnB,GAAGqB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;EACrD;EAEA,MAAMP,SAAS,MAAMZ,GAAGsB,OAAM;EAC9B,IAAIV,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMW,kBAAkBC,UAAkBC,OAAsC;EAC5E,OAAO5C,OAAO2C,QAAAA,IACV,KAAKd,YAAYc,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,QAAQf,IAAYZ,OAAgBkB,UAAyC;EAC/E,MAAMjB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAE9C,IAAIpB,OAAO8B,EAAAA,GACPX,GAAGkB,MAAM,iBAAiB,EAAEP,GAAG,CAAA;OAC5B;GACHX,GAAGkB,MAAM,qBAAqB,EAAEF,MAAML,GAAG,CAAA;GAEzC,IAAIM,UAAU;IACV,MAAME,UAAU,MAAM,KAAKvB,gBAAgBwB,UAAUH,QAAAA;IACrD,IAAI,CAACE,SACD,OAAO;IAEXnB,GAAGqB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;GACrD;EACJ;EAEApC,WAAWiB,IAAID,KAAAA;EAEf,MAAMa,SAAS,MAAMZ,GAAGsB,OAAM;EAC9B,IAAIV,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMe,WAAWT,OAA6C;EAC1D,OAAO,KAAKvB,WAAWiC,OAAOrC,yBAAyB2B,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAAkD;EAC9D,OAAO,KAAKvB,WAAWkB,UAAUtB,yBAAyB2B,KAAAA,CAAAA;CAC9D;CAEA,MAAMW,mBAAmBX,OAAkD;EACvE,MAAMlB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAG8B,UAAU,YAAA;EAEb,MAAMC,aAAaxC,yBAAyB2B,KAAAA;EAC5ClB,GAAGkB,MAAMa,UAAAA;EAET,OAAO/B,GAAGsB,OAAM;CACpB;CAEAU,OAAOxB,MAA2B;EAC9B,OAAO,KAAKb,WAAWqC,OAAOxB,IAAAA;CAClC;CAEAyB,MAAMrB,QAAcJ,MAA2B;EAC3C,OAAO,KAAKb,WAAWsC,MAAMrB,QAAQJ,IAAAA;CACzC;CAEA,MAAM0B,KAAKtB,QAA6B;EACpC,OAAO,KAAKjB,WAAWuC,KAAKtB,MAAAA;CAChC;CAEA,MAAMuB,OAAOvB,QAA6B;EACtC,MAAM,KAAKjB,WAAWwC,OAAOvB,MAAAA;CACjC;CAEA,MAAMwB,oBAAoB5B,MAAoC;EAC1D,MAAM1B,0BAA0B0B,MAAM;GAClC6B,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAActD;EAClB,CAAA;CACJ;CAEA,MAAMuD,gBAAgBjC,MAAqBkC,UAAgC;EAQvE,IAAI,CAACC,MAPkBrD,eAAe;GAClC+C,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAActD;GACd0B,QAAQJ;GACRoC,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI1D,sBAAAA;CAElB;CAEA,MAAM6D,cAAcjC,QAAwC;EACxD,MAAMD,KAAK,OAAOC,WAAW,WAAWA,SAASA,OAAOD;EAexD,QAAOmC,MAde,KAAKnD,WAAW2C,QACjCS,cAAc3D,cAAAA,CAAAA,CACd4D,KAAK;GACF9B,OAAO,EAAE+B,QAAQtC,GAAG;GACpBuC,WAAW,EAAEC,MAAM,KAAK;GACxBC,OAAO;IACHzC,IAAI/B,kBAAkB;KAClByE,QAAQpE,YAAYqE;KACpBC,KAAK5C;IACT,CAAA;IACA6C,cAAc;GAClB;EACJ,CAAA,EAAA,CAEWC,KAAKC,UAAUA,MAAMP,IAAI;CAC5C;CAEA,MAAMQ,oBAAoB/C,QAA2D;EACjF,MAAMD,KAAK,OAAOC,WAAW,WAAWA,SAASA,OAAOD;EACxD,OAAOnB,qBAAqB;GACxB8C,SAAS,KAAK3C,WAAW2C;GACzBsB,gBAAgBzE;GAChB+B,OAAO,EAAE+B,QAAQtC,GAAG;GACpBkD,aAAa5E,YAAY6E;GACzBC,UAAUpD;EACd,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","validateEntityJoinColumns","applyQuery","DatabaseConflictError","CachePrefix","UserEntity","UserPermissionEntity","UserRoleEntity","applyRealmScopeSelect","isEntityUnique","translateWhereConditions","loadBoundPermissions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realmId","resolveId","andWhere","getOne","findOneByIdOrName","idOrName","realm","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","entries","getRepository","find","userId","relations","role","cache","prefix","USER_OWNED_ROLES","key","milliseconds","map","entry","getBoundPermissions","junctionTarget","cachePrefix","USER_OWNED_PERMISSIONS","cacheKey"],"sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Realm, Role, User } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IRealmRepository, IUserRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { UserRepository } from '../../../../../adapters/database/domains/index.ts';\nimport {\n CachePrefix,\n UserEntity,\n UserPermissionEntity,\n UserRoleEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, isEntityUnique, translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type UserRepositoryAdapterContext = {\n repository: UserRepository,\n realmRepository: Repository<Realm>,\n};\n\nexport class UserRepositoryAdapter implements IUserRepository {\n private readonly repository: UserRepository;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: UserRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'user', ['id']);\n\n const [entities, total] = await qb.getManyAndCount();\n\n await this.repository.extendManyWithEA(entities);\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n async findOneById(id: string): Promise<User | null> {\n const entity = await this.findOneBy({ id });\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.where('user.name = :name', { name });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('user.realmId = :realmId', { realmId });\n }\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<User | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findOne(id: string, query?: IQuery, realmKey?: string): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n\n if (isUUID(id)) {\n qb.where('user.id = :id', { id });\n } else {\n qb.where('user.name = :name', { name: id });\n\n if (realmKey) {\n const realmId = await this.realmRepository.resolveId(realmKey);\n if (!realmId) {\n return null;\n }\n qb.andWhere('user.realmId = :realmId', { realmId });\n }\n }\n\n applyQuery(qb, query);\n\n const entity = await qb.getOne();\n if (entity) {\n await this.repository.extendOneWithEA(entity);\n }\n return entity;\n }\n\n async findManyBy(where: Record<string, any>): Promise<User[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<User | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n async findOneByWithEmail(where: Record<string, any>): Promise<User | null> {\n const qb = this.repository.createQueryBuilder('user');\n qb.addSelect('user.email');\n\n const translated = translateWhereConditions(where);\n qb.where(translated);\n\n return qb.getOne();\n }\n\n create(data: Partial<User>): User {\n return this.repository.create(data);\n }\n\n merge(entity: User, data: Partial<User>): User {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: User): Promise<User> {\n return this.repository.save(entity);\n }\n\n async remove(entity: User): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<User>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n });\n }\n\n async checkUniqueness(data: Partial<User>, existing?: User): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: UserEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundRoles(entity: string | User): Promise<Role[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n const entries = await this.repository.manager\n .getRepository(UserRoleEntity)\n .find({\n where: { userId: id },\n relations: { role: true },\n cache: {\n id: buildRedisKeyPath({\n prefix: CachePrefix.USER_OWNED_ROLES,\n key: id,\n }),\n milliseconds: 60_000,\n },\n });\n\n return entries.map((entry) => entry.role);\n }\n\n async getBoundPermissions(entity: string | User): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: UserPermissionEntity,\n where: { userId: id },\n cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkCA,IAAac,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;EAC3C,KAAKF,aAAaE,IAAIF;EACtB,KAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,eAAe;CACzE;CAEA,MAAME,SAASC,OAA8D;EACzE,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGE,QAAQ,SAAA;EAEX,MAAM,EAAEC,eAAepB,WAAWiB,IAAID,KAAAA;EAEtCV,sBAAsBW,IAAI,QAAQ,CAAC,IAAK,CAAA;EAExC,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,MAAM,KAAKX,WAAWY,iBAAiBH,QAAAA;EAEvC,OAAO;GACHI,MAAMJ;GACNK,MAAM;IACFJ;IACA,GAAGF;GACP;EACJ;CACJ;CAEA,MAAMO,YAAYC,IAAkC;EAChD,MAAMC,SAAS,MAAM,KAAKC,UAAU,EAAEF,GAAG,CAAA;EACzC,IAAIC,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMG,cAAcC,MAAcC,UAAyC;EACvE,MAAMjB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAGkB,MAAM,qBAAqB,EAAEF,KAAK,CAAA;EAErC,IAAIC,UAAU;GACV,MAAME,UAAU,MAAM,KAAKvB,gBAAgBwB,UAAUH,QAAAA;GACrD,IAAI,CAACE,SACD,OAAO;GAEXnB,GAAGqB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;EACrD;EAEA,MAAMP,SAAS,MAAMZ,GAAGsB,OAAM;EAC9B,IAAIV,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMW,kBAAkBC,UAAkBC,OAAsC;EAC5E,OAAO5C,OAAO2C,QAAAA,IACV,KAAKd,YAAYc,QAAAA,IACjB,KAAKT,cAAcS,UAAUC,KAAAA;CACrC;CAEA,MAAMC,QAAQf,IAAYZ,OAAgBkB,UAAyC;EAC/E,MAAMjB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAE9C,IAAIpB,OAAO8B,EAAAA,GACPX,GAAGkB,MAAM,iBAAiB,EAAEP,GAAG,CAAA;OAC5B;GACHX,GAAGkB,MAAM,qBAAqB,EAAEF,MAAML,GAAG,CAAA;GAEzC,IAAIM,UAAU;IACV,MAAME,UAAU,MAAM,KAAKvB,gBAAgBwB,UAAUH,QAAAA;IACrD,IAAI,CAACE,SACD,OAAO;IAEXnB,GAAGqB,SAAS,2BAA2B,EAAEF,QAAQ,CAAA;GACrD;EACJ;EAEApC,WAAWiB,IAAID,KAAAA;EAEf,MAAMa,SAAS,MAAMZ,GAAGsB,OAAM;EAC9B,IAAIV,QACA,MAAM,KAAKjB,WAAWmB,gBAAgBF,MAAAA;EAE1C,OAAOA;CACX;CAEA,MAAMe,WAAWT,OAA6C;EAC1D,OAAO,KAAKvB,WAAWiC,OAAOrC,yBAAyB2B,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAAkD;EAC9D,OAAO,KAAKvB,WAAWkB,UAAUtB,yBAAyB2B,KAAAA,CAAAA;CAC9D;CAEA,MAAMW,mBAAmBX,OAAkD;EACvE,MAAMlB,KAAK,KAAKL,WAAWM,mBAAmB,MAAA;EAC9CD,GAAG8B,UAAU,YAAA;EAEb,MAAMC,aAAaxC,yBAAyB2B,KAAAA;EAC5ClB,GAAGkB,MAAMa,UAAAA;EAET,OAAO/B,GAAGsB,OAAM;CACpB;CAEAU,OAAOxB,MAA2B;EAC9B,OAAO,KAAKb,WAAWqC,OAAOxB,IAAAA;CAClC;CAEAyB,MAAMrB,QAAcJ,MAA2B;EAC3C,OAAO,KAAKb,WAAWsC,MAAMrB,QAAQJ,IAAAA;CACzC;CAEA,MAAM0B,KAAKtB,QAA6B;EACpC,OAAO,KAAKjB,WAAWuC,KAAKtB,MAAAA;CAChC;CAEA,MAAMuB,OAAOvB,QAA6B;EACtC,MAAM,KAAKjB,WAAWwC,OAAOvB,MAAAA;CACjC;CAEA,MAAMwB,oBAAoB5B,MAAoC;EAC1D,MAAM1B,0BAA0B0B,MAAM;GAClC6B,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAActD;EAClB,CAAA;CACJ;CAEA,MAAMuD,gBAAgBjC,MAAqBkC,UAAgC;EAQvE,IAAI,CAACC,MAPkBrD,eAAe;GAClC+C,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAActD;GACd0B,QAAQJ;GACRoC,gBAAgBF;EACpB,CAAA,GAGI,MAAM,IAAI1D,sBAAAA;CAElB;CAEA,MAAM6D,cAAcjC,QAAwC;EACxD,MAAMD,KAAK,OAAOC,WAAW,WAAWA,SAASA,OAAOD;EAexD,QAAOmC,MAde,KAAKnD,WAAW2C,QACjCS,cAAc3D,cAAAA,CAAAA,CACd4D,KAAK;GACF9B,OAAO,EAAE+B,QAAQtC,GAAG;GACpBuC,WAAW,EAAEC,MAAM,KAAK;GACxBC,OAAO;IACHzC,IAAI/B,kBAAkB;KAClByE,QAAQpE,YAAYqE;KACpBC,KAAK5C;IACT,CAAA;IACA6C,cAAc;GAClB;EACJ,CAAA,EAAA,CAEWC,KAAKC,UAAUA,MAAMP,IAAI;CAC5C;CAEA,MAAMQ,oBAAoB/C,QAA2D;EACjF,MAAMD,KAAK,OAAOC,WAAW,WAAWA,SAASA,OAAOD;EACxD,OAAOnB,qBAAqB;GACxB8C,SAAS,KAAK3C,WAAW2C;GACzBsB,gBAAgBzE;GAChB+B,OAAO,EAAE+B,QAAQtC,GAAG;GACpBkD,aAAa5E,YAAY6E;GACzBC,UAAUpD;EACd,CAAA;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","UserAttributeEntity","applyRealmScopeSelect","translateWhereConditions","UserAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/user-attribute/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { UserAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IUserAttributeRepository } from '../../../../../core/index.ts';\nimport { UserAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class UserAttributeRepositoryAdapter implements IUserAttributeRepository {\n private readonly repository: Repository<UserAttribute>;\n\n constructor(repository: Repository<UserAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<UserAttribute>> {\n const qb = this.repository.createQueryBuilder('userAttribute');\n qb.groupBy('userAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'userAttribute', ['userId']);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<UserAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<UserAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<UserAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<UserAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<UserAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<UserAttribute>): UserAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: UserAttribute, data: Partial<UserAttribute>): UserAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: UserAttribute): Promise<UserAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: UserAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<UserAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,iCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAuC;EAC/C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAuE;EAClF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,eAAA;EAC9CD,GAAGE,QAAQ,kBAAA;EAEX,MAAM,EAAEC,eAAeX,WAAWQ,IAAID,KAAAA;EAEtCL,sBAAsBM,IAAI,iBAAiB,CAAC,QAAA,CAAS;EAErD,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA2C;EACnD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA+C;EACjD,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAAiD;EACrE,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAsD;EACnE,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA2D;EACvE,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAA6C;EAChD,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAuBb,MAA6C;EACtE,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA+C;EACtD,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAsC;EAC/C,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA6C;EACnE,MAAMhB,0BAA0BgB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAclC;EAClB,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["validateEntityJoinColumns","applyQuery","UserAttributeEntity","applyRealmScopeSelect","translateWhereConditions","UserAttributeRepositoryAdapter","repository","findMany","query","qb","createQueryBuilder","groupBy","pagination","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","findOneByIdOrName","idOrName","findManyBy","where","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget"],"sources":["../../../../../../src/app/modules/database/repositories/user-attribute/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { UserAttribute } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { validateEntityJoinColumns } from 'typeorm-extension';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type { IUserAttributeRepository } from '../../../../../core/index.ts';\nimport { UserAttributeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { applyRealmScopeSelect, translateWhereConditions } from '../helpers.ts';\n\nexport class UserAttributeRepositoryAdapter implements IUserAttributeRepository {\n private readonly repository: Repository<UserAttribute>;\n\n constructor(repository: Repository<UserAttribute>) {\n this.repository = repository;\n }\n\n async findMany(query: IQuery): Promise<EntityRepositoryFindManyResult<UserAttribute>> {\n const qb = this.repository.createQueryBuilder('userAttribute');\n qb.groupBy('userAttribute.id');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'userAttribute', ['userId']);\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n\n findOneById(id: string): Promise<UserAttribute | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(): Promise<UserAttribute | null> {\n return null;\n }\n\n async findOneByIdOrName(idOrName: string): Promise<UserAttribute | null> {\n return this.findOneById(idOrName);\n }\n\n async findManyBy(where: Record<string, any>): Promise<UserAttribute[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<UserAttribute | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<UserAttribute>): UserAttribute {\n return this.repository.create(data);\n }\n\n merge(entity: UserAttribute, data: Partial<UserAttribute>): UserAttribute {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: UserAttribute): Promise<UserAttribute> {\n return this.repository.save(entity);\n }\n\n async remove(entity: UserAttribute): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<UserAttribute>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: UserAttributeEntity,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAaK,iCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAAuC;EAC/C,KAAKA,aAAaA;CACtB;CAEA,MAAMC,SAASC,OAAuE;EAClF,MAAMC,KAAK,KAAKH,WAAWI,mBAAmB,eAAA;EAC9CD,GAAGE,QAAQ,kBAAA;EAEX,MAAM,EAAEC,eAAeX,WAAWQ,IAAID,KAAAA;EAEtCL,sBAAsBM,IAAI,iBAAiB,CAAC,QAAS,CAAA;EAErD,MAAM,CAACI,UAAUC,SAAS,MAAML,GAAGM,gBAAe;EAElD,OAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGF;GACP;EACJ;CACJ;CAEAM,YAAYC,IAA2C;EACnD,OAAO,KAAKC,UAAU,EAAED,GAAG,CAAA;CAC/B;CAEA,MAAME,gBAA+C;EACjD,OAAO;CACX;CAEA,MAAMC,kBAAkBC,UAAiD;EACrE,OAAO,KAAKL,YAAYK,QAAAA;CAC5B;CAEA,MAAMC,WAAWC,OAAsD;EACnE,OAAO,KAAKnB,WAAWoB,OAAOtB,yBAAyBqB,KAAAA,CAAAA;CAC3D;CAEA,MAAML,UAAUK,OAA2D;EACvE,OAAO,KAAKnB,WAAWc,UAAUhB,yBAAyBqB,KAAAA,CAAAA;CAC9D;CAEAE,OAAOX,MAA6C;EAChD,OAAO,KAAKV,WAAWqB,OAAOX,IAAAA;CAClC;CAEAY,MAAMC,QAAuBb,MAA6C;EACtE,OAAO,KAAKV,WAAWsB,MAAMC,QAAQb,IAAAA;CACzC;CAEA,MAAMc,KAAKD,QAA+C;EACtD,OAAO,KAAKvB,WAAWwB,KAAKD,MAAAA;CAChC;CAEA,MAAME,OAAOF,QAAsC;EAC/C,MAAM,KAAKvB,WAAWyB,OAAOF,MAAAA;CACjC;CAEA,MAAMG,oBAAoBhB,MAA6C;EACnE,MAAMhB,0BAA0BgB,MAAM;GAClCiB,YAAY,KAAK3B,WAAW4B,QAAQC;GACpCC,cAAclC;EAClB,CAAA;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["applyQuery","applyRealmScopeSelect","UserAuthenticatorRepositoryAdapter","repository","create","data","save","entity","remove","removeAllByUser","userId","kind","delete","findOneById","id","findOneBy","findOneWithSecretsById","createQueryBuilder","addSelect","where","getOne","findAllByUser","find","findAllWithSecretsByUser","filter","qb","andWhere","confirmed","getMany","hasConfirmedByUser","count","countBy","findMany","query","options","pagination","owner","ownerUserId","entities","total","getManyAndCount","meta"],"sources":["../../../../../../src/app/modules/database/repositories/user-authenticator/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { UserAuthenticator, UserAuthenticatorKind } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type {\n IUserAuthenticatorRepository,\n UserAuthenticatorFindManyOptions,\n UserAuthenticatorSecretsFilter,\n} from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect } from '../helpers.ts';\n\nexport class UserAuthenticatorRepositoryAdapter implements IUserAuthenticatorRepository {\n private readonly repository: Repository<UserAuthenticator>;\n\n constructor(repository: Repository<UserAuthenticator>) {\n this.repository = repository;\n }\n\n create(data: Partial<UserAuthenticator>): UserAuthenticator {\n return this.repository.create(data);\n }\n\n async save(entity: UserAuthenticator): Promise<UserAuthenticator> {\n return this.repository.save(entity);\n }\n\n async remove(entity: UserAuthenticator): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async removeAllByUser(userId: string, kind: `${UserAuthenticatorKind}`): Promise<void> {\n await this.repository.delete({ userId, kind });\n }\n\n async findOneById(id: string): Promise<UserAuthenticator | null> {\n return this.repository.findOneBy({ id });\n }\n\n async findOneWithSecretsById(id: string): Promise<UserAuthenticator | null> {\n return this.repository.createQueryBuilder('userAuthenticator')\n .addSelect(['userAuthenticator.secret', 'userAuthenticator.codes'])\n .where('userAuthenticator.id = :id', { id })\n .getOne();\n }\n\n async findAllByUser(userId: string): Promise<UserAuthenticator[]> {\n return this.repository.find({ where: { userId } });\n }\n\n async findAllWithSecretsByUser(\n userId: string,\n filter: UserAuthenticatorSecretsFilter = {},\n ): Promise<UserAuthenticator[]> {\n const qb = this.repository.createQueryBuilder('userAuthenticator')\n .addSelect(['userAuthenticator.secret', 'userAuthenticator.codes'])\n .where('userAuthenticator.userId = :userId', { userId });\n\n if (filter.kind) {\n qb.andWhere('userAuthenticator.kind = :kind', { kind: filter.kind });\n }\n\n if (typeof filter.confirmed !== 'undefined') {\n qb.andWhere('userAuthenticator.confirmed = :confirmed', { confirmed: filter.confirmed });\n }\n\n return qb.getMany();\n }\n\n async hasConfirmedByUser(userId: string): Promise<boolean> {\n const count = await this.repository.countBy({ userId, confirmed: true });\n return count > 0;\n }\n\n async findMany(\n query: IQuery,\n options: UserAuthenticatorFindManyOptions = {},\n ): Promise<EntityRepositoryFindManyResult<UserAuthenticator>> {\n const qb = this.repository.createQueryBuilder('userAuthenticator');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'userAuthenticator', ['userId']);\n\n if (options.owner) {\n // mandatory constraint — not overridable by a rapiq filter\n qb.andWhere('userAuthenticator.userId = :ownerUserId', { ownerUserId: options.owner.userId });\n }\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n}\n"],"mappings":";;;;;;AAmBA,IAAaE,qCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA2C;EACnD,KAAKA,aAAaA;CACtB;CAEAC,OAAOC,MAAqD;EACxD,OAAO,KAAKF,WAAWC,OAAOC,IAAAA;CAClC;CAEA,MAAMC,KAAKC,QAAuD;EAC9D,OAAO,KAAKJ,WAAWG,KAAKC,MAAAA;CAChC;CAEA,MAAMC,OAAOD,QAA0C;EACnD,MAAM,KAAKJ,WAAWK,OAAOD,MAAAA;CACjC;CAEA,MAAME,gBAAgBC,QAAgBC,MAAiD;EACnF,MAAM,KAAKR,WAAWS,OAAO;GAAEF;GAAQC;EAAK,CAAA;CAChD;CAEA,MAAME,YAAYC,IAA+C;EAC7D,OAAO,KAAKX,WAAWY,UAAU,EAAED,GAAG,CAAA;CAC1C;CAEA,MAAME,uBAAuBF,IAA+C;EACxE,OAAO,KAAKX,WAAWc,mBAAmB,mBAAA,CAAA,CACrCC,UAAU,CAAC,4BAA4B,yBAAA,CAA0B,CAAA,CACjEC,MAAM,8BAA8B,EAAEL,GAAG,CAAA,CAAA,CACzCM,OAAM;CACf;CAEA,MAAMC,cAAcX,QAA8C;EAC9D,OAAO,KAAKP,WAAWmB,KAAK,EAAEH,OAAO,EAAET,OAAO,EAAE,CAAA;CACpD;CAEA,MAAMa,yBACFb,QACAc,SAAyC,CAAC,GACd;EAC5B,MAAMC,KAAK,KAAKtB,WAAWc,mBAAmB,mBAAA,CAAA,CACzCC,UAAU,CAAC,4BAA4B,yBAAA,CAA0B,CAAA,CACjEC,MAAM,sCAAsC,EAAET,OAAO,CAAA;EAE1D,IAAIc,OAAOb,MACPc,GAAGC,SAAS,kCAAkC,EAAEf,MAAMa,OAAOb,KAAK,CAAA;EAGtE,IAAI,OAAOa,OAAOG,cAAc,aAC5BF,GAAGC,SAAS,4CAA4C,EAAEC,WAAWH,OAAOG,UAAU,CAAA;EAG1F,OAAOF,GAAGG,QAAO;CACrB;CAEA,MAAMC,mBAAmBnB,QAAkC;EAEvD,OAAOoB,MADa,KAAK3B,WAAW4B,QAAQ;GAAErB;GAAQiB,WAAW;EAAK,CAAA,IACvD;CACnB;CAEA,MAAMK,SACFC,OACAC,UAA4C,CAAC,GACa;EAC1D,MAAMT,KAAK,KAAKtB,WAAWc,mBAAmB,mBAAA;EAE9C,MAAM,EAAEkB,eAAenC,WAAWyB,IAAIQ,KAAAA;EAEtChC,sBAAsBwB,IAAI,qBAAqB,CAAC,QAAA,CAAS;EAEzD,IAAIS,QAAQE,OAERX,GAAGC,SAAS,2CAA2C,EAAEW,aAAaH,QAAQE,MAAM1B,OAAO,CAAA;EAG/F,MAAM,CAAC4B,UAAUC,SAAS,MAAMd,GAAGe,gBAAe;EAElD,OAAO;GACHnC,MAAMiC;GACNG,MAAM;IACFF;IACA,GAAGJ;GACP;EACJ;CACJ;AACJ"}
1
+ {"version":3,"file":"repository.mjs","names":["applyQuery","applyRealmScopeSelect","UserAuthenticatorRepositoryAdapter","repository","create","data","save","entity","remove","removeAllByUser","userId","kind","delete","findOneById","id","findOneBy","findOneWithSecretsById","createQueryBuilder","addSelect","where","getOne","findAllByUser","find","findAllWithSecretsByUser","filter","qb","andWhere","confirmed","getMany","hasConfirmedByUser","count","countBy","findMany","query","options","pagination","owner","ownerUserId","entities","total","getManyAndCount","meta"],"sources":["../../../../../../src/app/modules/database/repositories/user-authenticator/repository.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { UserAuthenticator, UserAuthenticatorKind } from '@authup/core-kit';\nimport type { IQuery } from '@rapiq/core';\nimport type { Repository } from 'typeorm';\nimport { applyQuery } from '../query.ts';\nimport type { EntityRepositoryFindManyResult } from '@authup/server-kit';\nimport type {\n IUserAuthenticatorRepository,\n UserAuthenticatorFindManyOptions,\n UserAuthenticatorSecretsFilter,\n} from '../../../../../core/index.ts';\nimport { applyRealmScopeSelect } from '../helpers.ts';\n\nexport class UserAuthenticatorRepositoryAdapter implements IUserAuthenticatorRepository {\n private readonly repository: Repository<UserAuthenticator>;\n\n constructor(repository: Repository<UserAuthenticator>) {\n this.repository = repository;\n }\n\n create(data: Partial<UserAuthenticator>): UserAuthenticator {\n return this.repository.create(data);\n }\n\n async save(entity: UserAuthenticator): Promise<UserAuthenticator> {\n return this.repository.save(entity);\n }\n\n async remove(entity: UserAuthenticator): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async removeAllByUser(userId: string, kind: `${UserAuthenticatorKind}`): Promise<void> {\n await this.repository.delete({ userId, kind });\n }\n\n async findOneById(id: string): Promise<UserAuthenticator | null> {\n return this.repository.findOneBy({ id });\n }\n\n async findOneWithSecretsById(id: string): Promise<UserAuthenticator | null> {\n return this.repository.createQueryBuilder('userAuthenticator')\n .addSelect(['userAuthenticator.secret', 'userAuthenticator.codes'])\n .where('userAuthenticator.id = :id', { id })\n .getOne();\n }\n\n async findAllByUser(userId: string): Promise<UserAuthenticator[]> {\n return this.repository.find({ where: { userId } });\n }\n\n async findAllWithSecretsByUser(\n userId: string,\n filter: UserAuthenticatorSecretsFilter = {},\n ): Promise<UserAuthenticator[]> {\n const qb = this.repository.createQueryBuilder('userAuthenticator')\n .addSelect(['userAuthenticator.secret', 'userAuthenticator.codes'])\n .where('userAuthenticator.userId = :userId', { userId });\n\n if (filter.kind) {\n qb.andWhere('userAuthenticator.kind = :kind', { kind: filter.kind });\n }\n\n if (typeof filter.confirmed !== 'undefined') {\n qb.andWhere('userAuthenticator.confirmed = :confirmed', { confirmed: filter.confirmed });\n }\n\n return qb.getMany();\n }\n\n async hasConfirmedByUser(userId: string): Promise<boolean> {\n const count = await this.repository.countBy({ userId, confirmed: true });\n return count > 0;\n }\n\n async findMany(\n query: IQuery,\n options: UserAuthenticatorFindManyOptions = {},\n ): Promise<EntityRepositoryFindManyResult<UserAuthenticator>> {\n const qb = this.repository.createQueryBuilder('userAuthenticator');\n\n const { pagination } = applyQuery(qb, query);\n\n applyRealmScopeSelect(qb, 'userAuthenticator', ['userId']);\n\n if (options.owner) {\n // mandatory constraint — not overridable by a rapiq filter\n qb.andWhere('userAuthenticator.userId = :ownerUserId', { ownerUserId: options.owner.userId });\n }\n\n const [entities, total] = await qb.getManyAndCount();\n\n return {\n data: entities,\n meta: {\n total,\n ...pagination,\n },\n };\n }\n}\n"],"mappings":";;;;;;AAmBA,IAAaE,qCAAb,MAAaA;CACQC;CAEjB,YAAYA,YAA2C;EACnD,KAAKA,aAAaA;CACtB;CAEAC,OAAOC,MAAqD;EACxD,OAAO,KAAKF,WAAWC,OAAOC,IAAAA;CAClC;CAEA,MAAMC,KAAKC,QAAuD;EAC9D,OAAO,KAAKJ,WAAWG,KAAKC,MAAAA;CAChC;CAEA,MAAMC,OAAOD,QAA0C;EACnD,MAAM,KAAKJ,WAAWK,OAAOD,MAAAA;CACjC;CAEA,MAAME,gBAAgBC,QAAgBC,MAAiD;EACnF,MAAM,KAAKR,WAAWS,OAAO;GAAEF;GAAQC;EAAK,CAAA;CAChD;CAEA,MAAME,YAAYC,IAA+C;EAC7D,OAAO,KAAKX,WAAWY,UAAU,EAAED,GAAG,CAAA;CAC1C;CAEA,MAAME,uBAAuBF,IAA+C;EACxE,OAAO,KAAKX,WAAWc,mBAAmB,mBAAA,CAAA,CACrCC,UAAU,CAAC,4BAA4B,yBAA0B,CAAA,CAAA,CACjEC,MAAM,8BAA8B,EAAEL,GAAG,CAAA,CAAA,CACzCM,OAAM;CACf;CAEA,MAAMC,cAAcX,QAA8C;EAC9D,OAAO,KAAKP,WAAWmB,KAAK,EAAEH,OAAO,EAAET,OAAO,EAAE,CAAA;CACpD;CAEA,MAAMa,yBACFb,QACAc,SAAyC,CAAC,GACd;EAC5B,MAAMC,KAAK,KAAKtB,WAAWc,mBAAmB,mBAAA,CAAA,CACzCC,UAAU,CAAC,4BAA4B,yBAA0B,CAAA,CAAA,CACjEC,MAAM,sCAAsC,EAAET,OAAO,CAAA;EAE1D,IAAIc,OAAOb,MACPc,GAAGC,SAAS,kCAAkC,EAAEf,MAAMa,OAAOb,KAAK,CAAA;EAGtE,IAAI,OAAOa,OAAOG,cAAc,aAC5BF,GAAGC,SAAS,4CAA4C,EAAEC,WAAWH,OAAOG,UAAU,CAAA;EAG1F,OAAOF,GAAGG,QAAO;CACrB;CAEA,MAAMC,mBAAmBnB,QAAkC;EAEvD,OAAOoB,MADa,KAAK3B,WAAW4B,QAAQ;GAAErB;GAAQiB,WAAW;EAAK,CAAA,IACvD;CACnB;CAEA,MAAMK,SACFC,OACAC,UAA4C,CAAC,GACa;EAC1D,MAAMT,KAAK,KAAKtB,WAAWc,mBAAmB,mBAAA;EAE9C,MAAM,EAAEkB,eAAenC,WAAWyB,IAAIQ,KAAAA;EAEtChC,sBAAsBwB,IAAI,qBAAqB,CAAC,QAAS,CAAA;EAEzD,IAAIS,QAAQE,OAERX,GAAGC,SAAS,2CAA2C,EAAEW,aAAaH,QAAQE,MAAM1B,OAAO,CAAA;EAG/F,MAAM,CAAC4B,UAAUC,SAAS,MAAMd,GAAGe,gBAAe;EAElD,OAAO;GACHnC,MAAMiC;GACNG,MAAM;IACFF;IACA,GAAGJ;GACP;EACJ;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["Client","App","serve","ConfigInjectionKey","createInternalUIHttpClient","NoopAuthFlowMetrics","ModuleName","HTTPInjectionKey","MetricsInjectionKey","PromAuthFlowMetrics","HTTPControllerModule","HTTPMiddlewareModule","LoggerInjectionKey","HTTPModule","name","dependencies","instance","middleware","controller","uiHttpClientRegistered","HTTP","CONFIG","LOGGER","AUTHENTICATION","IDENTITY","OAUTH2","setup","container","config","resolve","logger","debug","router","registerUIHttpClient","registerMetrics","mountBefore","mount","mountAfter","server","port","hostname","host","silent","gracefulShutdown","ready","url","register","Server","useValue","has","UIHttpClient","useFactory","c","undefined","publicURL","publicUrl","internalURL","baseURL","lifetime","enabled","middlewarePrometheus","teardown","unregister","close"],"sources":["../../../../src/app/modules/http/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from '@authup/core-http-kit';\nimport { App } from 'routup';\nimport { serve } from 'routup/node';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IModule } from 'orkos';\nimport { createInternalUIHttpClient } from '../../../adapters/http/ui/index.ts';\nimport { NoopAuthFlowMetrics } from '../../../core/index.ts';\nimport { ModuleName } from '../constants.ts';\nimport type { HTTPServer } from './constants.ts';\nimport { HTTPInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\nimport { MetricsInjectionKey, PromAuthFlowMetrics } from '../metrics/index.ts';\nimport { HTTPControllerModule, HTTPMiddlewareModule } from './modules/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\n\nexport class HTTPModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected instance : HTTPServer | undefined;\n\n protected middleware : HTTPMiddlewareModule;\n\n protected controller : HTTPControllerModule;\n\n protected uiHttpClientRegistered : boolean;\n\n constructor() {\n this.name = ModuleName.HTTP;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER, ModuleName.AUTHENTICATION, ModuleName.IDENTITY, ModuleName.OAUTH2];\n this.controller = new HTTPControllerModule();\n this.middleware = new HTTPMiddlewareModule();\n this.uiHttpClientRegistered = false;\n }\n\n // ----------------------------------------------------\n\n async setup(container: IContainer): Promise<void> {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n logger.debug('Starting http server...');\n\n const router = new App();\n\n this.registerUIHttpClient(container);\n this.registerMetrics(container);\n\n await this.middleware.mountBefore(router, container);\n await this.controller.mount(router, container);\n await this.middleware.mountAfter(router, container);\n\n const server = serve(router, {\n port: config.port,\n hostname: config.host,\n silent: true,\n // Shutdown is driven by the orkos teardown chain (see cli/commands/start.ts);\n // srvx's plugin would only close the HTTP server, leaving DB / cache / etc. open.\n gracefulShutdown: false,\n });\n\n await server.ready();\n\n this.instance = server;\n\n if (server.url) {\n logger.debug(`Listening on ${server.url}`);\n }\n\n container.register(HTTPInjectionKey.Server, { useValue: server });\n\n logger.debug('Started http server.');\n }\n\n // ----------------------------------------------------\n\n /**\n * Default HTTP client for the SSR'd UI pages: dispatches against the\n * server's own listen address instead of round-tripping through the\n * reverse proxy at `publicUrl` (see `createInternalUIHttpClient`).\n * Skipped when the token is already bound (test injection wins).\n * Transient lifetime is mandatory — client-web-kit's authentication\n * hook writes per-user Authorization state onto the client.\n */\n protected registerUIHttpClient(container: IContainer): void {\n if (container.has(HTTPInjectionKey.UIHttpClient)) {\n return;\n }\n\n container.register(HTTPInjectionKey.UIHttpClient, {\n useFactory: (c) => {\n const config = c.resolve(ConfigInjectionKey);\n\n // The server token is registered after listen; a resolve can\n // only happen on a request, so it is present by then. The\n // guards keep an edge case on the previous (public URL)\n // dispatch behavior instead of failing the render.\n const server = c.has(HTTPInjectionKey.Server) ?\n c.resolve(HTTPInjectionKey.Server) :\n undefined;\n\n if (server && server.url) {\n return createInternalUIHttpClient({\n publicURL: config.publicUrl,\n internalURL: server.url,\n });\n }\n\n return new Client({ baseURL: config.publicUrl });\n },\n }, { lifetime: 'transient' });\n\n this.uiHttpClientRegistered = true;\n }\n\n /**\n * Auth-flow metric counters for the emit points (plan 058 Part 2).\n * Registered before the controllers are built — the factories resolve the\n * token. Prometheus-backed iff the prometheus middleware is enabled\n * (mirrors HTTPMiddlewareModule.isEnabled: boolean|object, false = off),\n * otherwise a noop so emit sites never need a guard beyond `?.`.\n */\n protected registerMetrics(container: IContainer): void {\n const config = container.resolve(ConfigInjectionKey);\n\n const enabled = typeof config.middlewarePrometheus !== 'boolean' ||\n config.middlewarePrometheus === true;\n\n container.register(MetricsInjectionKey, {\n useValue: enabled ?\n new PromAuthFlowMetrics() :\n new NoopAuthFlowMetrics(),\n });\n }\n\n // ----------------------------------------------------\n\n async teardown(container: IContainer): Promise<void> {\n if (this.uiHttpClientRegistered) {\n container.unregister(HTTPInjectionKey.UIHttpClient);\n this.uiHttpClientRegistered = false;\n }\n\n container.unregister(MetricsInjectionKey);\n\n if (!this.instance) return;\n\n container.unregister(HTTPInjectionKey.Server);\n\n await this.instance.close();\n this.instance = undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAaa,aAAb,MAAaA;CACAC;CAEAC;CAECC;CAEAC;CAEAC;CAEAC;CAEV,cAAc;EACV,KAAKL,OAAOR,WAAWc;EACvB,KAAKL,eAAe;GAACT,WAAWe;GAAQf,WAAWgB;GAAQhB,WAAWiB;GAAgBjB,WAAWkB;GAAUlB,WAAWmB;;EACtH,KAAKP,aAAa,IAAIR,qBAAAA;EACtB,KAAKO,aAAa,IAAIN,qBAAAA;EACtB,KAAKQ,yBAAyB;CAClC;CAIA,MAAMO,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,QAAQ1B,kBAAAA;EACjC,MAAM2B,SAASH,UAAUE,QAAQjB,kBAAAA;EAEjCkB,OAAOC,MAAM,yBAAA;EAEb,MAAMC,SAAS,IAAI/B,IAAAA;EAEnB,KAAKgC,qBAAqBN,SAAAA;EAC1B,KAAKO,gBAAgBP,SAAAA;EAErB,MAAM,KAAKV,WAAWkB,YAAYH,QAAQL,SAAAA;EAC1C,MAAM,KAAKT,WAAWkB,MAAMJ,QAAQL,SAAAA;EACpC,MAAM,KAAKV,WAAWoB,WAAWL,QAAQL,SAAAA;EAEzC,MAAMW,SAASpC,MAAM8B,QAAQ;GACzBO,MAAMX,OAAOW;GACbC,UAAUZ,OAAOa;GACjBC,QAAQ;GAGRC,kBAAkB;EACtB,CAAA;EAEA,MAAML,OAAOM,MAAK;EAElB,KAAK5B,WAAWsB;EAEhB,IAAIA,OAAOO,KACPf,OAAOC,MAAM,gBAAgBO,OAAOO,KAAK;EAG7ClB,UAAUmB,SAASvC,iBAAiBwC,QAAQ,EAAEC,UAAUV,OAAO,CAAA;EAE/DR,OAAOC,MAAM,sBAAA;CACjB;;;;;;;;IAYA,qBAA+BJ,WAA6B;EACxD,IAAIA,UAAUsB,IAAI1C,iBAAiB2C,YAAY,GAC3C;EAGJvB,UAAUmB,SAASvC,iBAAiB2C,cAAc,EAC9CC,aAAaC,MAAAA;GACT,MAAMxB,SAASwB,EAAEvB,QAAQ1B,kBAAAA;GAMzB,MAAMmC,SAASc,EAAEH,IAAI1C,iBAAiBwC,MAAM,IACxCK,EAAEvB,QAAQtB,iBAAiBwC,MAAM,IACjCM,KAAAA;GAEJ,IAAIf,UAAUA,OAAOO,KACjB,OAAOzC,2BAA2B;IAC9BkD,WAAW1B,OAAO2B;IAClBC,aAAalB,OAAOO;GACxB,CAAA;GAGJ,OAAO,IAAI7C,OAAO,EAAEyD,SAAS7B,OAAO2B,UAAU,CAAA;EAClD,EACJ,GAAG,EAAEG,UAAU,YAAY,CAAA;EAE3B,KAAKvC,yBAAyB;CAClC;;;;;;;IASA,gBAA0BQ,WAA6B;EACnD,MAAMC,SAASD,UAAUE,QAAQ1B,kBAAAA;EAEjC,MAAMwD,UAAU,OAAO/B,OAAOgC,yBAAyB,aACnDhC,OAAOgC,yBAAyB;EAEpCjC,UAAUmB,SAAStC,qBAAqB,EACpCwC,UAAUW,UACN,IAAIlD,oBAAAA,IACJ,IAAIJ,oBAAAA,EACZ,CAAA;CACJ;CAIA,MAAMwD,SAASlC,WAAsC;EACjD,IAAI,KAAKR,wBAAwB;GAC7BQ,UAAUmC,WAAWvD,iBAAiB2C,YAAY;GAClD,KAAK/B,yBAAyB;EAClC;EAEAQ,UAAUmC,WAAWtD,mBAAAA;EAErB,IAAI,CAAC,KAAKQ,UAAU;EAEpBW,UAAUmC,WAAWvD,iBAAiBwC,MAAM;EAE5C,MAAM,KAAK/B,SAAS+C,MAAK;EACzB,KAAK/C,WAAWqC,KAAAA;CACpB;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["Client","App","serve","ConfigInjectionKey","createInternalUIHttpClient","NoopAuthFlowMetrics","ModuleName","HTTPInjectionKey","MetricsInjectionKey","PromAuthFlowMetrics","HTTPControllerModule","HTTPMiddlewareModule","LoggerInjectionKey","HTTPModule","name","dependencies","instance","middleware","controller","uiHttpClientRegistered","HTTP","CONFIG","LOGGER","AUTHENTICATION","IDENTITY","OAUTH2","setup","container","config","resolve","logger","debug","router","registerUIHttpClient","registerMetrics","mountBefore","mount","mountAfter","server","port","hostname","host","silent","gracefulShutdown","ready","url","register","Server","useValue","has","UIHttpClient","useFactory","c","undefined","publicURL","publicUrl","internalURL","baseURL","lifetime","enabled","middlewarePrometheus","teardown","unregister","close"],"sources":["../../../../src/app/modules/http/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from '@authup/core-http-kit';\nimport { App } from 'routup';\nimport { serve } from 'routup/node';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IModule } from 'orkos';\nimport { createInternalUIHttpClient } from '../../../adapters/http/ui/index.ts';\nimport { NoopAuthFlowMetrics } from '../../../core/index.ts';\nimport { ModuleName } from '../constants.ts';\nimport type { HTTPServer } from './constants.ts';\nimport { HTTPInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\nimport { MetricsInjectionKey, PromAuthFlowMetrics } from '../metrics/index.ts';\nimport { HTTPControllerModule, HTTPMiddlewareModule } from './modules/index.ts';\nimport { LoggerInjectionKey } from '../logger/index.ts';\n\nexport class HTTPModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n protected instance : HTTPServer | undefined;\n\n protected middleware : HTTPMiddlewareModule;\n\n protected controller : HTTPControllerModule;\n\n protected uiHttpClientRegistered : boolean;\n\n constructor() {\n this.name = ModuleName.HTTP;\n this.dependencies = [ModuleName.CONFIG, ModuleName.LOGGER, ModuleName.AUTHENTICATION, ModuleName.IDENTITY, ModuleName.OAUTH2];\n this.controller = new HTTPControllerModule();\n this.middleware = new HTTPMiddlewareModule();\n this.uiHttpClientRegistered = false;\n }\n\n // ----------------------------------------------------\n\n async setup(container: IContainer): Promise<void> {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n\n logger.debug('Starting http server...');\n\n const router = new App();\n\n this.registerUIHttpClient(container);\n this.registerMetrics(container);\n\n await this.middleware.mountBefore(router, container);\n await this.controller.mount(router, container);\n await this.middleware.mountAfter(router, container);\n\n const server = serve(router, {\n port: config.port,\n hostname: config.host,\n silent: true,\n // Shutdown is driven by the orkos teardown chain (see cli/commands/start.ts);\n // srvx's plugin would only close the HTTP server, leaving DB / cache / etc. open.\n gracefulShutdown: false,\n });\n\n await server.ready();\n\n this.instance = server;\n\n if (server.url) {\n logger.debug(`Listening on ${server.url}`);\n }\n\n container.register(HTTPInjectionKey.Server, { useValue: server });\n\n logger.debug('Started http server.');\n }\n\n // ----------------------------------------------------\n\n /**\n * Default HTTP client for the SSR'd UI pages: dispatches against the\n * server's own listen address instead of round-tripping through the\n * reverse proxy at `publicUrl` (see `createInternalUIHttpClient`).\n * Skipped when the token is already bound (test injection wins).\n * Transient lifetime is mandatory — client-web-kit's authentication\n * hook writes per-user Authorization state onto the client.\n */\n protected registerUIHttpClient(container: IContainer): void {\n if (container.has(HTTPInjectionKey.UIHttpClient)) {\n return;\n }\n\n container.register(HTTPInjectionKey.UIHttpClient, {\n useFactory: (c) => {\n const config = c.resolve(ConfigInjectionKey);\n\n // The server token is registered after listen; a resolve can\n // only happen on a request, so it is present by then. The\n // guards keep an edge case on the previous (public URL)\n // dispatch behavior instead of failing the render.\n const server = c.has(HTTPInjectionKey.Server) ?\n c.resolve(HTTPInjectionKey.Server) :\n undefined;\n\n if (server && server.url) {\n return createInternalUIHttpClient({\n publicURL: config.publicUrl,\n internalURL: server.url,\n });\n }\n\n return new Client({ baseURL: config.publicUrl });\n },\n }, { lifetime: 'transient' });\n\n this.uiHttpClientRegistered = true;\n }\n\n /**\n * Auth-flow metric counters for the emit points (plan 058 Part 2).\n * Registered before the controllers are built — the factories resolve the\n * token. Prometheus-backed iff the prometheus middleware is enabled\n * (mirrors HTTPMiddlewareModule.isEnabled: boolean|object, false = off),\n * otherwise a noop so emit sites never need a guard beyond `?.`.\n */\n protected registerMetrics(container: IContainer): void {\n const config = container.resolve(ConfigInjectionKey);\n\n const enabled = typeof config.middlewarePrometheus !== 'boolean' ||\n config.middlewarePrometheus === true;\n\n container.register(MetricsInjectionKey, {\n useValue: enabled ?\n new PromAuthFlowMetrics() :\n new NoopAuthFlowMetrics(),\n });\n }\n\n // ----------------------------------------------------\n\n async teardown(container: IContainer): Promise<void> {\n if (this.uiHttpClientRegistered) {\n container.unregister(HTTPInjectionKey.UIHttpClient);\n this.uiHttpClientRegistered = false;\n }\n\n container.unregister(MetricsInjectionKey);\n\n if (!this.instance) return;\n\n container.unregister(HTTPInjectionKey.Server);\n\n await this.instance.close();\n this.instance = undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,IAAaa,aAAb,MAAaA;CACAC;CAEAC;CAECC;CAEAC;CAEAC;CAEAC;CAEV,cAAc;EACV,KAAKL,OAAOR,WAAWc;EACvB,KAAKL,eAAe;GAACT,WAAWe;GAAQf,WAAWgB;GAAQhB,WAAWiB;GAAgBjB,WAAWkB;GAAUlB,WAAWmB;EAAO;EAC7H,KAAKP,aAAa,IAAIR,qBAAAA;EACtB,KAAKO,aAAa,IAAIN,qBAAAA;EACtB,KAAKQ,yBAAyB;CAClC;CAIA,MAAMO,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,QAAQ1B,kBAAAA;EACjC,MAAM2B,SAASH,UAAUE,QAAQjB,kBAAAA;EAEjCkB,OAAOC,MAAM,yBAAA;EAEb,MAAMC,SAAS,IAAI/B,IAAAA;EAEnB,KAAKgC,qBAAqBN,SAAAA;EAC1B,KAAKO,gBAAgBP,SAAAA;EAErB,MAAM,KAAKV,WAAWkB,YAAYH,QAAQL,SAAAA;EAC1C,MAAM,KAAKT,WAAWkB,MAAMJ,QAAQL,SAAAA;EACpC,MAAM,KAAKV,WAAWoB,WAAWL,QAAQL,SAAAA;EAEzC,MAAMW,SAASpC,MAAM8B,QAAQ;GACzBO,MAAMX,OAAOW;GACbC,UAAUZ,OAAOa;GACjBC,QAAQ;GAGRC,kBAAkB;EACtB,CAAA;EAEA,MAAML,OAAOM,MAAK;EAElB,KAAK5B,WAAWsB;EAEhB,IAAIA,OAAOO,KACPf,OAAOC,MAAM,gBAAgBO,OAAOO,KAAK;EAG7ClB,UAAUmB,SAASvC,iBAAiBwC,QAAQ,EAAEC,UAAUV,OAAO,CAAA;EAE/DR,OAAOC,MAAM,sBAAA;CACjB;;;;;;;;IAYA,qBAA+BJ,WAA6B;EACxD,IAAIA,UAAUsB,IAAI1C,iBAAiB2C,YAAY,GAC3C;EAGJvB,UAAUmB,SAASvC,iBAAiB2C,cAAc,EAC9CC,aAAaC,MAAAA;GACT,MAAMxB,SAASwB,EAAEvB,QAAQ1B,kBAAAA;GAMzB,MAAMmC,SAASc,EAAEH,IAAI1C,iBAAiBwC,MAAM,IACxCK,EAAEvB,QAAQtB,iBAAiBwC,MAAM,IACjCM,KAAAA;GAEJ,IAAIf,UAAUA,OAAOO,KACjB,OAAOzC,2BAA2B;IAC9BkD,WAAW1B,OAAO2B;IAClBC,aAAalB,OAAOO;GACxB,CAAA;GAGJ,OAAO,IAAI7C,OAAO,EAAEyD,SAAS7B,OAAO2B,UAAU,CAAA;EAClD,EACJ,GAAG,EAAEG,UAAU,YAAY,CAAA;EAE3B,KAAKvC,yBAAyB;CAClC;;;;;;;IASA,gBAA0BQ,WAA6B;EACnD,MAAMC,SAASD,UAAUE,QAAQ1B,kBAAAA;EAEjC,MAAMwD,UAAU,OAAO/B,OAAOgC,yBAAyB,aACnDhC,OAAOgC,yBAAyB;EAEpCjC,UAAUmB,SAAStC,qBAAqB,EACpCwC,UAAUW,UACN,IAAIlD,oBAAAA,IACJ,IAAIJ,oBAAAA,EACZ,CAAA;CACJ;CAIA,MAAMwD,SAASlC,WAAsC;EACjD,IAAI,KAAKR,wBAAwB;GAC7BQ,UAAUmC,WAAWvD,iBAAiB2C,YAAY;GAClD,KAAK/B,yBAAyB;EAClC;EAEAQ,UAAUmC,WAAWtD,mBAAAA;EAErB,IAAI,CAAC,KAAKQ,UAAU;EAEpBW,UAAUmC,WAAWvD,iBAAiBwC,MAAM;EAE5C,MAAM,KAAK/B,SAAS+C,MAAK;EACzB,KAAK/C,WAAWqC,KAAAA;CACpB;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"controller.mjs","names":["decorators","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","TrustAnchorRepositoryAdapter","UserAttributeRepositoryAdapter","UserAuthenticatorRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","ConsentController","EventController","IdentityProviderController","IdentityProviderRoleMappingController","KeyController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","SessionController","TrustAnchorController","UserAttributeController","UserAuthenticatorController","UserController","UserPermissionController","UserRoleController","useRequestEventContext","ActivateController","AuthenticatorChallengeController","AuthorizeController","JwkController","LogoutController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientCertificateValidator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","ConsentService","CredentialsAuthenticator","IdentityProviderRoleMappingService","KeyProvisioner","KeyService","LoginThrottleService","OAuth2AccessPolicyEvaluator","OAuth2ClientAuthenticator","OAuth2EndSessionService","OAuth2MfaLoginService","PasswordRecoveryService","PermissionCheckerService","PermissionPolicyService","PermissionService","PolicyCheckerService","PolicyService","RealmCipher","RealmService","RegistrationService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","SessionService","TrustAnchorService","UserAttributeService","UserAuthenticator","UserAuthenticatorService","UserPermissionService","UserRoleService","UserService","WebClientProvisioner","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","getAppOrigins","CacheInjectionKey","LoggerInjectionKey","MailInjectionKey","MailTemplateRendererInjectionKey","MetricsInjectionKey","HTTPControllerModule","mount","router","container","eventController","createEventController","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","keyController","createKeyController","trustAnchorController","createTrustAnchorController","sessionController","createSessionController","consentController","createConsentController","userController","createUserController","userAttributeController","createUserAttributeController","userAuthenticatorController","createUserAuthenticatorController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createLogoutController","createAuthenticatorChallengeController","createStatusController","createIdentityProvider","config","resolve","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","sessionManager","SessionManager","eventService","EventService","metrics","options","baseURL","publicUrl","features","buildUIFeatures","promptLoginMaxAge","mfaFreshnessMaxAge","mfaChallengeProvider","resolveUserAuthenticatorService","accessPolicyEvaluator","resolveAccessPolicyEvaluator","consentService","createConsentService","logger","dataSource","DataSource","codeVerifier","AuthorizationCodeVerifier","accessTokenIssuer","AccessTokenIssuer","refreshTokenIssuer","RefreshTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","keyStore","KeyStore","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","tokenRepository","TokenRepository","sessionTokenRepository","SessionTokenRepository","identityResolver","Resolver","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","userAuthenticator","oauth2ClientAuthenticator","certificateValidator","trustAnchorRepository","loginThrottleService","repository","EventRepository","enabled","loginAttemptThrottleEnabled","threshold","loginAttemptThreshold","windowSeconds","loginAttemptWindow","userAuthenticatorService","mfaLoginService","resolveMfaLoginService","tokenRefreshGracePeriod","certificateSource","realmRepository","service","createRegistrationService","createPasswordRecoveryService","mailClient","mailTemplateRenderer","passwordRecoveryEnabled","emailVerificationEnabled","passwordMinLength","clientRepository","ClientRepository","endSessionService","hintGracePeriod","endSessionHintGracePeriod","registration","registrationEnabled","passwordRecovery","emailVerification","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","createPermissionRepository","createRoleRepository","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","checkerService","permissionRepository","reservedNames","Set","getMetadata","columns","map","c","propertyName","requestContext","SessionRepository","ConsentRepository","policyProvider","userRepository","issuer","webauthn","url","URL","hostname","rpId","rpName","origin","undefined","cache","cipher","mfaEnabled","required","mfaRequired","ticketIssuer","MfaTokenIssuer","getRepository","webClientProvisioner","appOrigins","keyProvisioner","keyRepository","mtlsBaseURL","mtlsPublicUrl","clientCertificatesEnabled"],"sources":["../../../../../src/app/modules/http/modules/controller.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserAuthenticator as UserAuthenticatorModel,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserAuthenticatorEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n TrustAnchorRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserAuthenticatorRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController,\n ConsentController,\n EventController,\n IdentityProviderController,\n IdentityProviderRoleMappingController,\n KeyController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n SessionController,\n TrustAnchorController,\n UserAttributeController,\n UserAuthenticatorController,\n UserController,\n UserPermissionController,\n UserRoleController,\n useRequestEventContext,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthenticatorChallengeController,\n AuthorizeController,\n JwkController,\n LogoutController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientCertificateValidator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n ConsentService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n KeyProvisioner,\n KeyService,\n LoginThrottleService,\n OAuth2AccessPolicyEvaluator,\n OAuth2ClientAuthenticator,\n OAuth2EndSessionService,\n OAuth2MfaLoginService,\n PasswordRecoveryService,\n PermissionCheckerService,\n PermissionPolicyService,\n PermissionService,\n PolicyCheckerService,\n PolicyService,\n RealmCipher,\n RealmService,\n RegistrationService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n SessionService,\n TrustAnchorService,\n UserAttributeService,\n UserAuthenticator,\n UserAuthenticatorService,\n UserPermissionService,\n UserRoleService,\n UserService,\n WebClientProvisioner,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport type { Config } from '../../config/index.ts';\nimport { ConfigInjectionKey, getAppOrigins } from '../../config/index.ts';\nimport { CacheInjectionKey } from '../../cache/index.ts';\nimport { LoggerInjectionKey } from '../../logger/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from '../../mail/index.ts';\nimport { MetricsInjectionKey } from '../../metrics/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: App, container: IContainer): Promise<void> {\n const eventController = this.createEventController(container);\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const keyController = this.createKeyController(container);\n const trustAnchorController = this.createTrustAnchorController(container);\n const sessionController = this.createSessionController(container);\n const consentController = this.createConsentController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userAuthenticatorController = this.createUserAuthenticatorController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n this.createLogoutController(container),\n this.createAuthenticatorChallengeController(container),\n\n this.createStatusController(container),\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n consentController,\n eventController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n keyController,\n trustAnchorController,\n permissionController,\n permissionPolicyController,\n policyController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n sessionController,\n userController,\n userAttributeController,\n userAuthenticatorController,\n userPermissionController,\n userRoleController,\n ],\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const eventService = container.resolve(DatabaseInjectionKey.EventService);\n const metrics = container.resolve(MetricsInjectionKey);\n\n return new AuthorizeController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n promptLoginMaxAge: config.promptLoginMaxAge,\n mfaFreshnessMaxAge: config.mfaFreshnessMaxAge,\n },\n\n codeIssuer,\n codeRequestVerifier,\n\n sessionManager,\n\n eventService,\n metrics,\n\n mfaChallengeProvider: this.resolveUserAuthenticatorService(container),\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n\n consentService: this.createConsentService(container),\n logger: container.resolve(LoggerInjectionKey),\n });\n }\n\n createToken(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n const keyStore = container.resolve(OAuth2InjectionToken.KeyStore);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n const tokenRepository = container.resolve(OAuth2InjectionToken.TokenRepository);\n const sessionTokenRepository = container.resolve(OAuth2InjectionToken.SessionTokenRepository);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n const oauth2ClientAuthenticator = new OAuth2ClientAuthenticator({\n identityResolver,\n certificateValidator: new ClientCertificateValidator({ trustAnchorRepository: new TrustAnchorRepositoryAdapter(dataSource) }),\n });\n\n const eventService = container.resolve(DatabaseInjectionKey.EventService);\n const metrics = container.resolve(MetricsInjectionKey);\n\n const loginThrottleService = new LoginThrottleService({\n repository: container.resolve(DatabaseInjectionKey.EventRepository),\n options: {\n enabled: config.loginAttemptThrottleEnabled,\n threshold: config.loginAttemptThreshold,\n windowSeconds: config.loginAttemptWindow,\n },\n });\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n openIdTokenIssuer,\n keyStore,\n\n tokenVerifier,\n tokenRevoker,\n tokenRepository,\n sessionTokenRepository,\n\n eventService,\n metrics,\n loginThrottleService,\n userAuthenticatorService: this.resolveUserAuthenticatorService(container),\n mfaLoginService: this.resolveMfaLoginService(container),\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n\n tokenRefreshGracePeriod: config.tokenRefreshGracePeriod,\n logger,\n\n identityResolver,\n identityPermissionProvider,\n\n userAuthenticator,\n\n oauth2ClientAuthenticator,\n certificateSource: config.certificateSource,\n\n realmRepository: new RealmRepositoryAdapter(container.resolve<Repository<Realm>>(RealmEntity)),\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new ActivateController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createPasswordForgotController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordForgotController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordResetController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordResetController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n passwordMinLength: config.passwordMinLength,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new RegisterController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createLogoutController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n const clientRepository = container.resolve(OAuth2InjectionToken.ClientRepository);\n const realmRepository = new RealmRepositoryAdapter(container.resolve<Repository<Realm>>(RealmEntity));\n\n const endSessionService = new OAuth2EndSessionService({\n tokenVerifier,\n sessionManager,\n clientRepository,\n realmRepository,\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n hintGracePeriod: config.endSessionHintGracePeriod,\n });\n\n return new LogoutController({\n options: { baseURL: config.publicUrl },\n endSessionService,\n });\n }\n\n createStatusController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new StatusController({ options: { features: this.buildUIFeatures(config) } });\n }\n\n buildUIFeatures(config: Config) : StatusResponseFeatures {\n return {\n registration: config.registrationEnabled,\n passwordRecovery: config.passwordRecoveryEnabled,\n emailVerification: config.emailVerificationEnabled,\n };\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new RegistrationService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n passwordMinLength: config.passwordMinLength,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n clientRepository: container.resolve(OAuth2InjectionToken.ClientRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter,\n });\n return new ClientController({\n service,\n repository,\n });\n }\n\n private createPermissionRepository(container: IContainer): PermissionRepositoryAdapter {\n return new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n private createRoleRepository(container: IContainer): RoleRepositoryAdapter {\n return new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n const checkerService = new PermissionCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n permissionProvider,\n identityPermissionProvider,\n });\n\n return new PermissionController({\n service,\n checkerService,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository,\n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository,\n });\n return new ScopeController({ service });\n }\n\n createKeyController(container: IContainer) {\n // the DI singleton carries the optional KEK cipher — never construct\n // a fresh adapter here.\n const service = new KeyService({\n repository: container.resolve(OAuth2InjectionToken.KeyStore),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n });\n return new KeyController({ service });\n }\n\n createTrustAnchorController(container: IContainer) {\n const repository = new TrustAnchorRepositoryAdapter(\n container.resolve(DatabaseInjectionKey.DataSource),\n );\n const service = new TrustAnchorService({\n repository,\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n });\n return new TrustAnchorController({ service });\n }\n\n createSessionController(container: IContainer) {\n const repository = container.resolve(AuthenticationInjectionKey.SessionRepository);\n const service = new SessionService({ repository });\n return new SessionController({ service });\n }\n\n protected createConsentService(container: IContainer) : ConsentService {\n const repository = container.resolve(OAuth2InjectionToken.ConsentRepository);\n return new ConsentService({ repository });\n }\n\n createConsentController(container: IContainer) {\n return new ConsentController({ service: this.createConsentService(container) });\n }\n\n private accessPolicyEvaluator? : OAuth2AccessPolicyEvaluator;\n\n protected resolveAccessPolicyEvaluator(container: IContainer) : OAuth2AccessPolicyEvaluator {\n if (this.accessPolicyEvaluator) {\n return this.accessPolicyEvaluator;\n }\n\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n this.accessPolicyEvaluator = new OAuth2AccessPolicyEvaluator({\n policyProvider: new PolicyRepository(dataSource),\n identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),\n logger: container.resolve(LoggerInjectionKey),\n });\n\n return this.accessPolicyEvaluator;\n }\n\n private userAuthenticatorService? : UserAuthenticatorService;\n\n protected resolveUserAuthenticatorService(container: IContainer) : UserAuthenticatorService {\n if (this.userAuthenticatorService) {\n return this.userAuthenticatorService;\n }\n\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const repository = new UserAuthenticatorRepositoryAdapter(\n container.resolve<Repository<UserAuthenticatorModel>>(UserAuthenticatorEntity),\n );\n const userRepository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n\n let issuer : string | undefined;\n let webauthn : {\n rpId: string, \n rpName: string, \n origin: string \n } | undefined;\n try {\n const url = new URL(config.publicUrl);\n issuer = url.hostname;\n webauthn = {\n rpId: url.hostname,\n rpName: issuer,\n origin: url.origin,\n };\n } catch {\n issuer = undefined;\n webauthn = undefined;\n }\n\n this.userAuthenticatorService = new UserAuthenticatorService({\n repository,\n userRepository,\n cache: container.resolve(CacheInjectionKey),\n cipher: new RealmCipher({ keyStore: container.resolve(OAuth2InjectionToken.KeyStore) }),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n mailClient: container.resolve(MailInjectionKey),\n mailTemplateRenderer: container.resolve(MailTemplateRendererInjectionKey),\n options: {\n enabled: config.mfaEnabled,\n required: config.mfaRequired,\n issuer,\n webauthn,\n },\n });\n\n return this.userAuthenticatorService;\n }\n\n createUserAuthenticatorController(container: IContainer) {\n return new UserAuthenticatorController({ service: this.resolveUserAuthenticatorService(container) });\n }\n\n private mfaLoginService? : OAuth2MfaLoginService;\n\n protected resolveMfaLoginService(container: IContainer) : OAuth2MfaLoginService {\n if (this.mfaLoginService) {\n return this.mfaLoginService;\n }\n\n this.mfaLoginService = new OAuth2MfaLoginService({\n sessionManager: container.resolve(AuthenticationInjectionKey.SessionManager),\n ticketIssuer: container.resolve(OAuth2InjectionToken.MfaTokenIssuer),\n accessTokenIssuer: container.resolve(OAuth2InjectionToken.AccessTokenIssuer),\n refreshTokenIssuer: container.resolve(OAuth2InjectionToken.RefreshTokenIssuer),\n tokenRepository: container.resolve(OAuth2InjectionToken.TokenRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n metrics: container.resolve(MetricsInjectionKey),\n });\n\n return this.mfaLoginService;\n }\n\n createAuthenticatorChallengeController(container: IContainer) {\n return new AuthenticatorChallengeController({\n service: this.resolveUserAuthenticatorService(container),\n sessionManager: container.resolve(AuthenticationInjectionKey.SessionManager),\n mfaLoginService: this.resolveMfaLoginService(container),\n });\n }\n\n createEventController(container: IContainer) {\n const service = container.resolve(DatabaseInjectionKey.EventService);\n return new EventController({ service });\n }\n\n createUserController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter,\n passwordMinLength: config.passwordMinLength,\n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter,\n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const checkerService = new PolicyCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n });\n\n return new PolicyController({\n service,\n checkerService,\n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const roleRepository = this.createRoleRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({\n repository,\n roleRepository,\n identityPermissionProvider,\n });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RealmRepositoryAdapter(realmRepository);\n\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const logger = container.resolve(LoggerInjectionKey);\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger,\n });\n const keyProvisioner = new KeyProvisioner({\n keyStore: container.resolve(OAuth2InjectionToken.KeyStore),\n logger,\n });\n\n const service = new RealmService({\n repository,\n webClientProvisioner,\n keyProvisioner,\n logger,\n });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: {\n baseURL: config.publicUrl,\n mtlsBaseURL: config.mtlsPublicUrl,\n clientCertificatesEnabled: config.certificateSource !== 'disabled',\n },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"controller.mjs","names":["decorators","ClientEntity","ClientPermissionEntity","ClientRoleEntity","ClientScopeEntity","IdentityProviderRepository","IdentityProviderRoleMappingEntity","KeyEntity","PermissionEntity","PermissionPolicyEntity","PolicyRepository","RealmEntity","RoleAttributeEntity","RoleEntity","RolePermissionEntity","ScopeEntity","UserAttributeEntity","UserAuthenticatorEntity","UserEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientPermissionRepositoryAdapter","ClientRepositoryAdapter","ClientRoleRepositoryAdapter","ClientScopeRepositoryAdapter","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","IdentityProviderRoleMappingRepositoryAdapter","PermissionDatabaseProvider","PermissionPolicyRepositoryAdapter","PermissionRepositoryAdapter","PolicyRepositoryAdapter","RealmRepositoryAdapter","RoleAttributeRepositoryAdapter","RolePermissionRepositoryAdapter","RoleRepositoryAdapter","ScopeRepositoryAdapter","TrustAnchorRepositoryAdapter","UserAttributeRepositoryAdapter","UserAuthenticatorRepositoryAdapter","UserPermissionRepositoryAdapter","UserRepositoryAdapter","UserRoleRepositoryAdapter","ClientController","ClientPermissionController","ClientRoleController","ClientScopeController","ConsentController","EventController","IdentityProviderController","IdentityProviderRoleMappingController","KeyController","PermissionController","PermissionPolicyController","PolicyController","RealmController","RoleAttributeController","RoleController","RolePermissionController","ScopeController","SessionController","TrustAnchorController","UserAttributeController","UserAuthenticatorController","UserController","UserPermissionController","UserRoleController","useRequestEventContext","ActivateController","AuthenticatorChallengeController","AuthorizeController","JwkController","LogoutController","OpenIDController","PasswordForgotController","PasswordResetController","RegisterController","StatusController","TokenController","ClientCertificateValidator","ClientPermissionService","ClientRoleService","ClientScopeService","ClientService","ConsentService","CredentialsAuthenticator","IdentityProviderRoleMappingService","KeyProvisioner","KeyService","LoginThrottleService","OAuth2AccessPolicyEvaluator","OAuth2ClientAuthenticator","OAuth2EndSessionService","OAuth2MfaLoginService","PasswordRecoveryService","PermissionCheckerService","PermissionPolicyService","PermissionService","PolicyCheckerService","PolicyService","RealmCipher","RealmService","RegistrationService","RoleAttributeService","RolePermissionService","RoleService","ScopeService","SessionService","TrustAnchorService","UserAttributeService","UserAuthenticator","UserAuthenticatorService","UserPermissionService","UserRoleService","UserService","WebClientProvisioner","AuthenticationInjectionKey","OAuth2InjectionToken","IdentityInjectionKey","ConfigInjectionKey","getAppOrigins","CacheInjectionKey","LoggerInjectionKey","MailInjectionKey","MailTemplateRendererInjectionKey","MetricsInjectionKey","HTTPControllerModule","mount","router","container","eventController","createEventController","realmController","createRealmController","roleController","createRoleController","permissionController","createPermissionController","permissionPolicyController","createPermissionPolicyController","clientController","createClientController","clientPermissionController","createClientPermissionController","clientRoleController","createClientRoleController","clientScopeController","createClientScopeController","roleAttributeController","createRoleAttributeController","rolePermissionController","createRolePermissionController","scopeController","createScopeController","keyController","createKeyController","trustAnchorController","createTrustAnchorController","sessionController","createSessionController","consentController","createConsentController","userController","createUserController","userAttributeController","createUserAttributeController","userAuthenticatorController","createUserAuthenticatorController","userPermissionController","createUserPermissionController","userRoleController","createUserRoleController","policyController","createPolicyController","identityProviderRoleController","createIdentityProviderRoleController","use","controllers","createAuthorize","createToken","createJwkController","createOpenIDController","createActivateController","createPasswordForgotController","createPasswordResetController","createRegisterController","createLogoutController","createAuthenticatorChallengeController","createStatusController","createIdentityProvider","config","resolve","codeIssuer","AuthorizationCodeIssuer","codeRequestVerifier","AuthorizationCodeRequestVerifier","sessionManager","SessionManager","eventService","EventService","metrics","options","baseURL","publicUrl","features","buildUIFeatures","promptLoginMaxAge","mfaFreshnessMaxAge","mfaChallengeProvider","resolveUserAuthenticatorService","accessPolicyEvaluator","resolveAccessPolicyEvaluator","consentService","createConsentService","logger","dataSource","DataSource","codeVerifier","AuthorizationCodeVerifier","accessTokenIssuer","AccessTokenIssuer","refreshTokenIssuer","RefreshTokenIssuer","openIdTokenIssuer","OpenIDTokenIssuer","keyStore","KeyStore","tokenRevoker","TokenRevoker","tokenVerifier","TokenVerifier","tokenRepository","TokenRepository","sessionTokenRepository","SessionTokenRepository","identityResolver","Resolver","identityProviderLdapCollectionAuthenticator","ProviderLdapCollectionAuthenticator","identityPermissionProvider","PermissionProvider","userAuthenticator","oauth2ClientAuthenticator","certificateValidator","trustAnchorRepository","loginThrottleService","repository","EventRepository","enabled","loginAttemptThrottleEnabled","threshold","loginAttemptThreshold","windowSeconds","loginAttemptWindow","userAuthenticatorService","mfaLoginService","resolveMfaLoginService","tokenRefreshGracePeriod","certificateSource","realmRepository","service","createRegistrationService","createPasswordRecoveryService","mailClient","mailTemplateRenderer","passwordRecoveryEnabled","emailVerificationEnabled","passwordMinLength","clientRepository","ClientRepository","endSessionService","hintGracePeriod","endSessionHintGracePeriod","registration","registrationEnabled","passwordRecovery","emailVerification","accountManager","ProviderAccountManager","stateManager","AuthorizationStateManager","realmRepositoryAdapter","createPermissionRepository","createRoleRepository","roleRepository","rolePermissionRepository","policyRepository","permissionPolicyRepository","permissionProvider","checkerService","permissionRepository","reservedNames","Set","getMetadata","columns","map","c","propertyName","requestContext","SessionRepository","ConsentRepository","policyProvider","userRepository","issuer","webauthn","url","URL","hostname","rpId","rpName","origin","undefined","cache","cipher","mfaEnabled","required","mfaRequired","ticketIssuer","MfaTokenIssuer","getRepository","webClientProvisioner","appOrigins","keyProvisioner","keyRepository","mtlsBaseURL","mtlsPublicUrl","clientCertificatesEnabled"],"sources":["../../../../../src/app/modules/http/modules/controller.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App } from 'routup';\nimport { decorators } from '@routup/decorators';\nimport type {\n Client,\n ClientPermission,\n ClientRole,\n ClientScope,\n Permission,\n PermissionPolicy,\n Realm,\n Role,\n RoleAttribute,\n RolePermission,\n Scope,\n UserAttribute,\n UserAuthenticator as UserAuthenticatorModel,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientEntity,\n ClientPermissionEntity,\n ClientRoleEntity,\n ClientScopeEntity,\n IdentityProviderRepository,\n IdentityProviderRoleMappingEntity,\n KeyEntity,\n PermissionEntity,\n PermissionPolicyEntity,\n PolicyRepository,\n RealmEntity,\n RoleAttributeEntity,\n RoleEntity,\n RolePermissionEntity,\n ScopeEntity,\n UserAttributeEntity,\n UserAuthenticatorEntity,\n UserEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../../adapters/database/domains/index.ts';\nimport {\n ClientPermissionRepositoryAdapter,\n ClientRepositoryAdapter,\n ClientRoleRepositoryAdapter,\n ClientScopeRepositoryAdapter,\n DatabaseInjectionKey,\n IdentityProviderRepositoryAdapter,\n IdentityProviderRoleMappingRepositoryAdapter,\n PermissionDatabaseProvider,\n PermissionPolicyRepositoryAdapter,\n PermissionRepositoryAdapter,\n PolicyRepositoryAdapter,\n RealmRepositoryAdapter,\n RoleAttributeRepositoryAdapter,\n RolePermissionRepositoryAdapter,\n RoleRepositoryAdapter,\n ScopeRepositoryAdapter,\n TrustAnchorRepositoryAdapter,\n UserAttributeRepositoryAdapter,\n UserAuthenticatorRepositoryAdapter,\n UserPermissionRepositoryAdapter,\n UserRepositoryAdapter,\n UserRoleRepositoryAdapter,\n} from '../../database/index.ts';\nimport {\n ClientController,\n ClientPermissionController,\n ClientRoleController,\n ClientScopeController,\n ConsentController,\n EventController,\n IdentityProviderController,\n IdentityProviderRoleMappingController,\n KeyController,\n PermissionController,\n PermissionPolicyController,\n PolicyController,\n RealmController,\n RoleAttributeController,\n RoleController,\n RolePermissionController,\n ScopeController,\n SessionController,\n TrustAnchorController,\n UserAttributeController,\n UserAuthenticatorController,\n UserController,\n UserPermissionController,\n UserRoleController,\n useRequestEventContext,\n} from '../../../../adapters/http/index.ts';\nimport {\n ActivateController,\n AuthenticatorChallengeController,\n AuthorizeController,\n JwkController,\n LogoutController,\n OpenIDController,\n PasswordForgotController,\n PasswordResetController,\n RegisterController,\n StatusController,\n TokenController,\n} from '../../../../adapters/http/controllers/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n ClientCertificateValidator,\n ClientPermissionService,\n ClientRoleService,\n ClientScopeService,\n ClientService,\n ConsentService,\n CredentialsAuthenticator,\n IdentityProviderRoleMappingService,\n KeyProvisioner,\n KeyService,\n LoginThrottleService,\n OAuth2AccessPolicyEvaluator,\n OAuth2ClientAuthenticator,\n OAuth2EndSessionService,\n OAuth2MfaLoginService,\n PasswordRecoveryService,\n PermissionCheckerService,\n PermissionPolicyService,\n PermissionService,\n PolicyCheckerService,\n PolicyService,\n RealmCipher,\n RealmService,\n RegistrationService,\n RoleAttributeService,\n RolePermissionService,\n RoleService,\n ScopeService,\n SessionService,\n TrustAnchorService,\n UserAttributeService,\n UserAuthenticator,\n UserAuthenticatorService,\n UserPermissionService,\n UserRoleService,\n UserService,\n WebClientProvisioner,\n} from '../../../../core/index.ts';\nimport { AuthenticationInjectionKey } from '../../authentication/index.ts';\nimport { OAuth2InjectionToken } from '../../oauth2/index.ts';\nimport { IdentityInjectionKey } from '../../identity/index.ts';\nimport type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport type { Config } from '../../config/index.ts';\nimport { ConfigInjectionKey, getAppOrigins } from '../../config/index.ts';\nimport { CacheInjectionKey } from '../../cache/index.ts';\nimport { LoggerInjectionKey } from '../../logger/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from '../../mail/index.ts';\nimport { MetricsInjectionKey } from '../../metrics/index.ts';\n\nexport class HTTPControllerModule {\n async mount(router: App, container: IContainer): Promise<void> {\n const eventController = this.createEventController(container);\n const realmController = this.createRealmController(container);\n const roleController = this.createRoleController(container);\n const permissionController = await this.createPermissionController(container);\n const permissionPolicyController = this.createPermissionPolicyController(container);\n const clientController = this.createClientController(container);\n const clientPermissionController = this.createClientPermissionController(container);\n const clientRoleController = this.createClientRoleController(container);\n const clientScopeController = this.createClientScopeController(container);\n const roleAttributeController = this.createRoleAttributeController(container);\n const rolePermissionController = this.createRolePermissionController(container);\n const scopeController = this.createScopeController(container);\n const keyController = this.createKeyController(container);\n const trustAnchorController = this.createTrustAnchorController(container);\n const sessionController = this.createSessionController(container);\n const consentController = this.createConsentController(container);\n const userController = this.createUserController(container);\n const userAttributeController = this.createUserAttributeController(container);\n const userAuthenticatorController = this.createUserAuthenticatorController(container);\n const userPermissionController = this.createUserPermissionController(container);\n const userRoleController = this.createUserRoleController(container);\n const policyController = this.createPolicyController(container);\n const identityProviderRoleController = this.createIdentityProviderRoleController(container);\n\n router.use(decorators({\n controllers: [\n this.createAuthorize(container),\n this.createToken(container),\n this.createJwkController(container),\n this.createOpenIDController(container),\n this.createActivateController(container),\n this.createPasswordForgotController(container),\n this.createPasswordResetController(container),\n this.createRegisterController(container),\n this.createLogoutController(container),\n this.createAuthenticatorChallengeController(container),\n\n this.createStatusController(container),\n\n clientController,\n clientPermissionController,\n clientRoleController,\n clientScopeController,\n consentController,\n eventController,\n identityProviderRoleController,\n this.createIdentityProvider(container),\n keyController,\n trustAnchorController,\n permissionController,\n permissionPolicyController,\n policyController,\n realmController,\n roleController,\n roleAttributeController,\n rolePermissionController,\n scopeController,\n sessionController,\n userController,\n userAttributeController,\n userAuthenticatorController,\n userPermissionController,\n userRoleController,\n ],\n }));\n }\n\n // ----------------------------------------------------\n\n createAuthorize(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const eventService = container.resolve(DatabaseInjectionKey.EventService);\n const metrics = container.resolve(MetricsInjectionKey);\n\n return new AuthorizeController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n promptLoginMaxAge: config.promptLoginMaxAge,\n mfaFreshnessMaxAge: config.mfaFreshnessMaxAge,\n },\n\n codeIssuer,\n codeRequestVerifier,\n\n sessionManager,\n\n eventService,\n metrics,\n\n mfaChallengeProvider: this.resolveUserAuthenticatorService(container),\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n\n consentService: this.createConsentService(container),\n logger: container.resolve(LoggerInjectionKey),\n });\n }\n\n createToken(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const logger = container.resolve(LoggerInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n\n const codeVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeVerifier);\n\n const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);\n const refreshTokenIssuer = container.resolve(OAuth2InjectionToken.RefreshTokenIssuer);\n const openIdTokenIssuer = container.resolve(OAuth2InjectionToken.OpenIDTokenIssuer);\n const keyStore = container.resolve(OAuth2InjectionToken.KeyStore);\n\n const tokenRevoker = container.resolve(OAuth2InjectionToken.TokenRevoker);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n const tokenRepository = container.resolve(OAuth2InjectionToken.TokenRepository);\n const sessionTokenRepository = container.resolve(OAuth2InjectionToken.SessionTokenRepository);\n\n const identityResolver = container.resolve(IdentityInjectionKey.Resolver);\n const identityProviderLdapCollectionAuthenticator = container.resolve(IdentityInjectionKey.ProviderLdapCollectionAuthenticator);\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n\n const userAuthenticator = new CredentialsAuthenticator([\n identityProviderLdapCollectionAuthenticator,\n new UserAuthenticator(identityResolver),\n ]);\n\n const oauth2ClientAuthenticator = new OAuth2ClientAuthenticator({\n identityResolver,\n certificateValidator: new ClientCertificateValidator({ trustAnchorRepository: new TrustAnchorRepositoryAdapter(dataSource) }),\n });\n\n const eventService = container.resolve(DatabaseInjectionKey.EventService);\n const metrics = container.resolve(MetricsInjectionKey);\n\n const loginThrottleService = new LoginThrottleService({\n repository: container.resolve(DatabaseInjectionKey.EventRepository),\n options: {\n enabled: config.loginAttemptThrottleEnabled,\n threshold: config.loginAttemptThreshold,\n windowSeconds: config.loginAttemptWindow,\n },\n });\n\n return new TokenController({\n codeVerifier,\n\n accessTokenIssuer,\n refreshTokenIssuer,\n openIdTokenIssuer,\n keyStore,\n\n tokenVerifier,\n tokenRevoker,\n tokenRepository,\n sessionTokenRepository,\n\n eventService,\n metrics,\n loginThrottleService,\n userAuthenticatorService: this.resolveUserAuthenticatorService(container),\n mfaLoginService: this.resolveMfaLoginService(container),\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n\n tokenRefreshGracePeriod: config.tokenRefreshGracePeriod,\n logger,\n\n identityResolver,\n identityPermissionProvider,\n\n userAuthenticator,\n\n oauth2ClientAuthenticator,\n certificateSource: config.certificateSource,\n\n realmRepository: new RealmRepositoryAdapter(container.resolve<Repository<Realm>>(RealmEntity)),\n\n sessionManager,\n });\n }\n\n createOpenIDController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new OpenIDController({ baseURL: config.publicUrl });\n }\n\n createActivateController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new ActivateController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createPasswordForgotController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordForgotController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordResetController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new PasswordResetController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createPasswordRecoveryService(container),\n });\n }\n\n createPasswordRecoveryService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new PasswordRecoveryService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n options: {\n passwordRecoveryEnabled: config.passwordRecoveryEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n passwordMinLength: config.passwordMinLength,\n },\n });\n }\n\n createRegisterController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new RegisterController({\n options: {\n baseURL: config.publicUrl,\n features: this.buildUIFeatures(config),\n },\n service: this.createRegistrationService(container),\n });\n }\n\n createLogoutController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const tokenVerifier = container.resolve(OAuth2InjectionToken.TokenVerifier);\n const sessionManager = container.resolve(AuthenticationInjectionKey.SessionManager);\n const clientRepository = container.resolve(OAuth2InjectionToken.ClientRepository);\n const realmRepository = new RealmRepositoryAdapter(container.resolve<Repository<Realm>>(RealmEntity));\n\n const endSessionService = new OAuth2EndSessionService({\n tokenVerifier,\n sessionManager,\n clientRepository,\n realmRepository,\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n hintGracePeriod: config.endSessionHintGracePeriod,\n });\n\n return new LogoutController({\n options: { baseURL: config.publicUrl },\n endSessionService,\n });\n }\n\n createStatusController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n\n return new StatusController({ options: { features: this.buildUIFeatures(config) } });\n }\n\n buildUIFeatures(config: Config) : StatusResponseFeatures {\n return {\n registration: config.registrationEnabled,\n passwordRecovery: config.passwordRecoveryEnabled,\n emailVerification: config.emailVerificationEnabled,\n };\n }\n\n createRegistrationService(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const mailClient = container.resolve(MailInjectionKey);\n const mailTemplateRenderer = container.resolve(MailTemplateRendererInjectionKey);\n\n return new RegistrationService({\n mailClient,\n mailTemplateRenderer,\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n options: {\n registrationEnabled: config.registrationEnabled,\n emailVerificationEnabled: config.emailVerificationEnabled,\n publicUrl: config.publicUrl,\n passwordMinLength: config.passwordMinLength,\n },\n });\n }\n\n createIdentityProvider(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const accountManager = container.resolve(IdentityInjectionKey.ProviderAccountManager);\n\n const codeIssuer = container.resolve(OAuth2InjectionToken.AuthorizationCodeIssuer);\n\n const codeRequestVerifier = container.resolve(OAuth2InjectionToken.AuthorizationCodeRequestVerifier);\n\n const stateManager = container.resolve(OAuth2InjectionToken.AuthorizationStateManager);\n\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const repository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository,\n });\n\n return new IdentityProviderController({\n options: { baseURL: config.publicUrl },\n\n repository,\n realmRepository: new RealmRepositoryAdapter(realmRepository),\n clientRepository: container.resolve(OAuth2InjectionToken.ClientRepository),\n\n accountManager,\n\n codeIssuer,\n codeRequestVerifier,\n stateManager,\n\n accessPolicyEvaluator: this.resolveAccessPolicyEvaluator(container),\n });\n }\n\n createClientController(container: IContainer) {\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new ClientService({\n repository,\n realmRepository: realmRepositoryAdapter,\n });\n return new ClientController({\n service,\n repository,\n });\n }\n\n private createPermissionRepository(container: IContainer): PermissionRepositoryAdapter {\n return new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n private createRoleRepository(container: IContainer): RoleRepositoryAdapter {\n return new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n }\n\n async createPermissionController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PermissionRepositoryAdapter({\n repository: container.resolve<Repository<Permission>>(PermissionEntity),\n realmRepository,\n });\n\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const roleRepository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n const rolePermissionRepository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const policyRepository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n\n const permissionPolicyRepository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n\n const service = new PermissionService({\n repository,\n realmRepository: realmRepositoryAdapter,\n roleRepository,\n rolePermissionRepository,\n policyRepository,\n permissionPolicyRepository,\n });\n\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const permissionProvider = new PermissionDatabaseProvider(dataSource);\n\n const checkerService = new PermissionCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n permissionProvider,\n identityPermissionProvider,\n });\n\n return new PermissionController({\n service,\n checkerService,\n });\n }\n\n createRoleController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new RoleService({\n repository,\n realmRepository,\n });\n return new RoleController({ service });\n }\n\n createClientPermissionController(container: IContainer) {\n const repository = new ClientPermissionRepositoryAdapter(\n container.resolve<Repository<ClientPermission>>(ClientPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new ClientPermissionController({ service });\n }\n\n createClientRoleController(container: IContainer) {\n const repository = new ClientRoleRepositoryAdapter(\n container.resolve<Repository<ClientRole>>(ClientRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new ClientRoleService({ repository, identityPermissionProvider });\n return new ClientRoleController({ service });\n }\n\n createClientScopeController(container: IContainer) {\n const repository = new ClientScopeRepositoryAdapter(\n container.resolve<Repository<ClientScope>>(ClientScopeEntity),\n );\n const service = new ClientScopeService({ repository });\n return new ClientScopeController({ service });\n }\n\n createRoleAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new RoleAttributeRepositoryAdapter(\n container.resolve<Repository<RoleAttribute>>(RoleAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName),\n );\n const service = new RoleAttributeService({ repository, reservedNames });\n return new RoleAttributeController({ service });\n }\n\n createRolePermissionController(container: IContainer) {\n const repository = new RolePermissionRepositoryAdapter(\n container.resolve<Repository<RolePermission>>(RolePermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new RolePermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new RolePermissionController({ service });\n }\n\n createPermissionPolicyController(container: IContainer) {\n const repository = new PermissionPolicyRepositoryAdapter(\n container.resolve<Repository<PermissionPolicy>>(PermissionPolicyEntity),\n );\n const service = new PermissionPolicyService({ repository });\n return new PermissionPolicyController({ service });\n }\n\n createScopeController(container: IContainer) {\n const realmRepository = new RealmRepositoryAdapter(\n container.resolve<Repository<Realm>>(RealmEntity),\n );\n const repository = new ScopeRepositoryAdapter({\n repository: container.resolve<Repository<Scope>>(ScopeEntity),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n const service = new ScopeService({\n repository,\n realmRepository,\n });\n return new ScopeController({ service });\n }\n\n createKeyController(container: IContainer) {\n // the DI singleton carries the optional KEK cipher — never construct\n // a fresh adapter here.\n const service = new KeyService({\n repository: container.resolve(OAuth2InjectionToken.KeyStore),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n });\n return new KeyController({ service });\n }\n\n createTrustAnchorController(container: IContainer) {\n const repository = new TrustAnchorRepositoryAdapter(\n container.resolve(DatabaseInjectionKey.DataSource),\n );\n const service = new TrustAnchorService({\n repository,\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n requestContext: useRequestEventContext,\n });\n return new TrustAnchorController({ service });\n }\n\n createSessionController(container: IContainer) {\n const repository = container.resolve(AuthenticationInjectionKey.SessionRepository);\n const service = new SessionService({ repository });\n return new SessionController({ service });\n }\n\n protected createConsentService(container: IContainer) : ConsentService {\n const repository = container.resolve(OAuth2InjectionToken.ConsentRepository);\n return new ConsentService({ repository });\n }\n\n createConsentController(container: IContainer) {\n return new ConsentController({ service: this.createConsentService(container) });\n }\n\n private accessPolicyEvaluator? : OAuth2AccessPolicyEvaluator;\n\n protected resolveAccessPolicyEvaluator(container: IContainer) : OAuth2AccessPolicyEvaluator {\n if (this.accessPolicyEvaluator) {\n return this.accessPolicyEvaluator;\n }\n\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n this.accessPolicyEvaluator = new OAuth2AccessPolicyEvaluator({\n policyProvider: new PolicyRepository(dataSource),\n identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),\n logger: container.resolve(LoggerInjectionKey),\n });\n\n return this.accessPolicyEvaluator;\n }\n\n private userAuthenticatorService? : UserAuthenticatorService;\n\n protected resolveUserAuthenticatorService(container: IContainer) : UserAuthenticatorService {\n if (this.userAuthenticatorService) {\n return this.userAuthenticatorService;\n }\n\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n\n const repository = new UserAuthenticatorRepositoryAdapter(\n container.resolve<Repository<UserAuthenticatorModel>>(UserAuthenticatorEntity),\n );\n const userRepository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n\n let issuer : string | undefined;\n let webauthn : {\n rpId: string, \n rpName: string, \n origin: string \n } | undefined;\n try {\n const url = new URL(config.publicUrl);\n issuer = url.hostname;\n webauthn = {\n rpId: url.hostname,\n rpName: issuer,\n origin: url.origin,\n };\n } catch {\n issuer = undefined;\n webauthn = undefined;\n }\n\n this.userAuthenticatorService = new UserAuthenticatorService({\n repository,\n userRepository,\n cache: container.resolve(CacheInjectionKey),\n cipher: new RealmCipher({ keyStore: container.resolve(OAuth2InjectionToken.KeyStore) }),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n mailClient: container.resolve(MailInjectionKey),\n mailTemplateRenderer: container.resolve(MailTemplateRendererInjectionKey),\n options: {\n enabled: config.mfaEnabled,\n required: config.mfaRequired,\n issuer,\n webauthn,\n },\n });\n\n return this.userAuthenticatorService;\n }\n\n createUserAuthenticatorController(container: IContainer) {\n return new UserAuthenticatorController({ service: this.resolveUserAuthenticatorService(container) });\n }\n\n private mfaLoginService? : OAuth2MfaLoginService;\n\n protected resolveMfaLoginService(container: IContainer) : OAuth2MfaLoginService {\n if (this.mfaLoginService) {\n return this.mfaLoginService;\n }\n\n this.mfaLoginService = new OAuth2MfaLoginService({\n sessionManager: container.resolve(AuthenticationInjectionKey.SessionManager),\n ticketIssuer: container.resolve(OAuth2InjectionToken.MfaTokenIssuer),\n accessTokenIssuer: container.resolve(OAuth2InjectionToken.AccessTokenIssuer),\n refreshTokenIssuer: container.resolve(OAuth2InjectionToken.RefreshTokenIssuer),\n tokenRepository: container.resolve(OAuth2InjectionToken.TokenRepository),\n eventService: container.resolve(DatabaseInjectionKey.EventService),\n metrics: container.resolve(MetricsInjectionKey),\n });\n\n return this.mfaLoginService;\n }\n\n createAuthenticatorChallengeController(container: IContainer) {\n return new AuthenticatorChallengeController({\n service: this.resolveUserAuthenticatorService(container),\n sessionManager: container.resolve(AuthenticationInjectionKey.SessionManager),\n mfaLoginService: this.resolveMfaLoginService(container),\n });\n }\n\n createEventController(container: IContainer) {\n const service = container.resolve(DatabaseInjectionKey.EventService);\n return new EventController({ service });\n }\n\n createUserController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new UserService({\n repository,\n realmRepository: realmRepositoryAdapter,\n passwordMinLength: config.passwordMinLength,\n });\n return new UserController({ service });\n }\n\n createUserAttributeController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = new UserAttributeRepositoryAdapter(\n container.resolve<Repository<UserAttribute>>(UserAttributeEntity),\n );\n const reservedNames = new Set(\n dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName),\n );\n const service = new UserAttributeService({ repository, reservedNames });\n return new UserAttributeController({ service });\n }\n\n createUserPermissionController(container: IContainer) {\n const repository = new UserPermissionRepositoryAdapter(\n container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n );\n const permissionRepository = this.createPermissionRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserPermissionService({\n repository,\n permissionRepository,\n identityPermissionProvider,\n });\n return new UserPermissionController({ service });\n }\n\n createUserRoleController(container: IContainer) {\n const repository = new UserRoleRepositoryAdapter(\n container.resolve<Repository<UserRole>>(UserRoleEntity),\n );\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new UserRoleService({ repository, identityPermissionProvider });\n return new UserRoleController({ service });\n }\n\n createPolicyController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new PolicyRepositoryAdapter({\n repository: new PolicyRepository(dataSource),\n realmRepository,\n });\n const realmRepositoryAdapter = new RealmRepositoryAdapter(realmRepository);\n const service = new PolicyService({\n repository,\n realmRepository: realmRepositoryAdapter,\n });\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const checkerService = new PolicyCheckerService({\n repository,\n realmRepository: realmRepositoryAdapter,\n identityPermissionProvider,\n });\n\n return new PolicyController({\n service,\n checkerService,\n });\n }\n\n createIdentityProviderRoleController(container: IContainer) {\n const repository = new IdentityProviderRoleMappingRepositoryAdapter(\n container.resolve<Repository<any>>(IdentityProviderRoleMappingEntity),\n );\n const roleRepository = this.createRoleRepository(container);\n const identityPermissionProvider = container.resolve(IdentityInjectionKey.PermissionProvider);\n const service = new IdentityProviderRoleMappingService({\n repository,\n roleRepository,\n identityPermissionProvider,\n });\n return new IdentityProviderRoleMappingController({ service });\n }\n\n createJwkController(container: IContainer) {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const repository = dataSource.getRepository(KeyEntity);\n return new JwkController({ repository });\n }\n\n createRealmController(container: IContainer) {\n const config = container.resolve(ConfigInjectionKey);\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n const repository = new RealmRepositoryAdapter(realmRepository);\n\n const clientRepository = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const logger = container.resolve(LoggerInjectionKey);\n const webClientProvisioner = new WebClientProvisioner({\n clientRepository,\n appOrigins: getAppOrigins(config),\n logger,\n });\n const keyProvisioner = new KeyProvisioner({\n keyStore: container.resolve(OAuth2InjectionToken.KeyStore),\n logger,\n });\n\n const service = new RealmService({\n repository,\n webClientProvisioner,\n keyProvisioner,\n logger,\n });\n const keyRepository = dataSource.getRepository(KeyEntity);\n\n return new RealmController({\n options: {\n baseURL: config.publicUrl,\n mtlsBaseURL: config.mtlsPublicUrl,\n clientCertificatesEnabled: config.certificateSource !== 'disabled',\n },\n service,\n keyRepository,\n });\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["ClientIdentityRepository","IdentityProviderAccountRepository","IdentityProviderAttributeMappingRepository","IdentityProviderPermissionMappingRepository","IdentityProviderRoleMappingRepository","UserIdentityRepository","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","ClientEntity","IdentityProviderRepository","RealmEntity","RoleEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientRepositoryAdapter","RoleRepositoryAdapter","UserRepositoryAdapter","IdentityPermissionProvider","IdentityProviderAccountManager","IdentityProviderAttributeMapper","IdentityProviderLdapCollectionAuthenticator","IdentityProviderPermissionMapper","IdentityProviderRoleMapper","IdentityResolver","IdentityRoleProvider","LDAPInjectionKey","ModuleName","IdentityInjectionKey","IdentityModule","name","dependencies","IDENTITY","DATABASE","setup","container","dataSource","resolve","DataSource","realmRepository","clientRepository","userRepository","repository","userPermissionRepository","userRoleRepository","register","Resolver","useFactory","clientRepositoryAdapter","userRepositoryAdapter","roleRepositoryAdapter","RoleProvider","PermissionProvider","c","roleRepository","roleProvider","attributeMapperRepository","attributeMapper","roleMapperFinder","roleMapper","permissionMapperRepository","permissionMapper","providerAccountRepository","ProviderAccountManager","identityProviderRepository","ProviderLdapCollectionAuthenticator","accountManager","clientFactory","ClientFactory"],"sources":["../../../../src/app/modules/identity/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Client,\n Realm,\n Role,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientIdentityRepository,\n IdentityProviderAccountRepository,\n IdentityProviderAttributeMappingRepository,\n IdentityProviderPermissionMappingRepository,\n IdentityProviderRoleMappingRepository,\n UserIdentityRepository,\n} from './repositories/index.ts';\nimport { DatabaseInjectionKey, IdentityProviderRepositoryAdapter } from '../database/index.ts';\nimport {\n ClientEntity,\n IdentityProviderRepository,\n RealmEntity,\n RoleEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../adapters/database/domains/index.ts';\nimport {\n ClientRepositoryAdapter,\n RoleRepositoryAdapter,\n UserRepositoryAdapter,\n} from '../database/repositories/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n IdentityPermissionProvider,\n IdentityProviderAccountManager,\n IdentityProviderAttributeMapper,\n IdentityProviderLdapCollectionAuthenticator,\n IdentityProviderPermissionMapper,\n IdentityProviderRoleMapper,\n IdentityResolver,\n IdentityRoleProvider,\n} from '../../../core/index.ts';\nimport { LDAPInjectionKey } from '../ldap/index.ts';\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { IdentityInjectionKey } from './constants.ts';\n\nexport class IdentityModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.IDENTITY;\n this.dependencies = [ModuleName.DATABASE];\n }\n\n async setup(container: IContainer): Promise<void> {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const clientRepository = new ClientIdentityRepository(\n container.resolve<Repository<Client>>(ClientEntity),\n );\n const userRepository = new UserIdentityRepository({\n repository: new UserRepository(dataSource),\n userPermissionRepository: container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n userRoleRepository: container.resolve<Repository<UserRole>>(UserRoleEntity),\n });\n\n container.register(IdentityInjectionKey.Resolver, {\n useFactory: () => new IdentityResolver({\n clientRepository,\n userRepository,\n }),\n });\n\n // ---------------------------------------------\n\n const clientRepositoryAdapter = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const userRepositoryAdapter = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const roleRepositoryAdapter = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n\n container.register(IdentityInjectionKey.RoleProvider, {\n useFactory: () => new IdentityRoleProvider({\n clientRepository: clientRepositoryAdapter,\n userRepository: userRepositoryAdapter,\n }),\n });\n\n container.register(IdentityInjectionKey.PermissionProvider, {\n useFactory: (c) => new IdentityPermissionProvider({\n clientRepository: clientRepositoryAdapter,\n userRepository: userRepositoryAdapter,\n roleRepository: roleRepositoryAdapter,\n roleProvider: c.resolve(IdentityInjectionKey.RoleProvider),\n }),\n });\n\n // ---------------------------------------------\n\n const attributeMapperRepository = new IdentityProviderAttributeMappingRepository(dataSource);\n const attributeMapper = new IdentityProviderAttributeMapper(attributeMapperRepository);\n\n const roleMapperFinder = new IdentityProviderRoleMappingRepository(dataSource);\n const roleMapper = new IdentityProviderRoleMapper(roleMapperFinder);\n\n const permissionMapperRepository = new IdentityProviderPermissionMappingRepository(dataSource);\n const permissionMapper = new IdentityProviderPermissionMapper(permissionMapperRepository);\n\n const providerAccountRepository = new IdentityProviderAccountRepository(dataSource);\n\n container.register(IdentityInjectionKey.ProviderAccountManager, {\n useFactory: () => new IdentityProviderAccountManager({\n repository: providerAccountRepository,\n userRepository,\n attributeMapper,\n roleMapper,\n permissionMapper,\n }),\n });\n\n // ---------------------------------------------\n\n const identityProviderRepository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n container.register(IdentityInjectionKey.ProviderLdapCollectionAuthenticator, {\n useFactory: (c) => new IdentityProviderLdapCollectionAuthenticator({\n repository: identityProviderRepository,\n accountManager: c.resolve(IdentityInjectionKey.ProviderAccountManager),\n clientFactory: c.resolve(LDAPInjectionKey.ClientFactory),\n }),\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,IAAa6B,iBAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOH,WAAWK;EACvB,KAAKD,eAAe,CAACJ,WAAWM,QAAAA;CACpC;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,MAAMC,aAAaD,UAAUE,QAAQ/B,qBAAqBgC,UAAU;EACpE,MAAMC,kBAAkBJ,UAAUE,QAA2B3B,WAAAA;EAE7D,MAAM8B,mBAAmB,IAAIxC,yBACzBmC,UAAUE,QAA4B7B,YAAAA,CAAAA;EAE1C,MAAMiC,iBAAiB,IAAIpC,uBAAuB;GAC9CqC,YAAY,IAAI7B,eAAeuB,UAAAA;GAC/BO,0BAA0BR,UAAUE,QAAoCzB,oBAAAA;GACxEgC,oBAAoBT,UAAUE,QAA8BvB,cAAAA;EAChE,CAAA;EAEAqB,UAAUU,SAASjB,qBAAqBkB,UAAU,EAC9CC,kBAAkB,IAAIvB,iBAAiB;GACnCgB;GACAC;EACJ,CAAA,EACJ,CAAA;EAIA,MAAMO,0BAA0B,IAAIjC,wBAAwB;GACxD2B,YAAYP,UAAUE,QAA4B7B,YAAAA;GAClD+B;EACJ,CAAA;EACA,MAAMU,wBAAwB,IAAIhC,sBAAsB;GACpDyB,YAAY,IAAI7B,eAAeuB,UAAAA;GAC/BG;EACJ,CAAA;EACA,MAAMW,wBAAwB,IAAIlC,sBAAsB;GACpD0B,YAAYP,UAAUE,QAA0B1B,UAAAA;GAChD4B;EACJ,CAAA;EAEAJ,UAAUU,SAASjB,qBAAqBuB,cAAc,EAClDJ,kBAAkB,IAAItB,qBAAqB;GACvCe,kBAAkBQ;GAClBP,gBAAgBQ;EACpB,CAAA,EACJ,CAAA;EAEAd,UAAUU,SAASjB,qBAAqBwB,oBAAoB,EACxDL,aAAaM,MAAM,IAAInC,2BAA2B;GAC9CsB,kBAAkBQ;GAClBP,gBAAgBQ;GAChBK,gBAAgBJ;GAChBK,cAAcF,EAAEhB,QAAQT,qBAAqBuB,YAAY;EAC7D,CAAA,EACJ,CAAA;EAKA,MAAMM,kBAAkB,IAAIrC,gCAAgCoC,IADtBtD,2CAA2CkC,UACrBoB,CAAAA;EAG5D,MAAMG,aAAa,IAAIpC,2BAA2BmC,IADrBtD,sCAAsCgC,UACjBsB,CAAAA;EAGlD,MAAMG,mBAAmB,IAAIvC,iCAAiCsC,IADvBzD,4CAA4CiC,UACrBwB,CAAAA;EAE9D,MAAME,4BAA4B,IAAI7D,kCAAkCmC,UAAAA;EAExED,UAAUU,SAASjB,qBAAqBmC,wBAAwB,EAC5DhB,kBAAkB,IAAI5B,+BAA+B;GACjDuB,YAAYoB;GACZrB;GACAgB;GACAE;GACAE;EACJ,CAAA,EACJ,CAAA;EAIA,MAAMG,6BAA6B,IAAIzD,kCAAkC;GACrEmC,YAAY,IAAIjC,2BAA2B2B,UAAAA;GAC3CG,iBAAiBJ,UAAUE,QAA2B3B,WAAAA;EAC1D,CAAA;EACAyB,UAAUU,SAASjB,qBAAqBqC,qCAAqC,EACzElB,aAAaM,MAAM,IAAIhC,4CAA4C;GAC/DqB,YAAYsB;GACZE,gBAAgBb,EAAEhB,QAAQT,qBAAqBmC,sBAAsB;GACrEI,eAAed,EAAEhB,QAAQX,iBAAiB0C,aAAa;EAC3D,CAAA,EACJ,CAAA;CACJ;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["ClientIdentityRepository","IdentityProviderAccountRepository","IdentityProviderAttributeMappingRepository","IdentityProviderPermissionMappingRepository","IdentityProviderRoleMappingRepository","UserIdentityRepository","DatabaseInjectionKey","IdentityProviderRepositoryAdapter","ClientEntity","IdentityProviderRepository","RealmEntity","RoleEntity","UserPermissionEntity","UserRepository","UserRoleEntity","ClientRepositoryAdapter","RoleRepositoryAdapter","UserRepositoryAdapter","IdentityPermissionProvider","IdentityProviderAccountManager","IdentityProviderAttributeMapper","IdentityProviderLdapCollectionAuthenticator","IdentityProviderPermissionMapper","IdentityProviderRoleMapper","IdentityResolver","IdentityRoleProvider","LDAPInjectionKey","ModuleName","IdentityInjectionKey","IdentityModule","name","dependencies","IDENTITY","DATABASE","setup","container","dataSource","resolve","DataSource","realmRepository","clientRepository","userRepository","repository","userPermissionRepository","userRoleRepository","register","Resolver","useFactory","clientRepositoryAdapter","userRepositoryAdapter","roleRepositoryAdapter","RoleProvider","PermissionProvider","c","roleRepository","roleProvider","attributeMapperRepository","attributeMapper","roleMapperFinder","roleMapper","permissionMapperRepository","permissionMapper","providerAccountRepository","ProviderAccountManager","identityProviderRepository","ProviderLdapCollectionAuthenticator","accountManager","clientFactory","ClientFactory"],"sources":["../../../../src/app/modules/identity/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type {\n Client,\n Realm,\n Role,\n UserPermission,\n UserRole,\n} from '@authup/core-kit';\nimport type { Repository } from 'typeorm';\nimport {\n ClientIdentityRepository,\n IdentityProviderAccountRepository,\n IdentityProviderAttributeMappingRepository,\n IdentityProviderPermissionMappingRepository,\n IdentityProviderRoleMappingRepository,\n UserIdentityRepository,\n} from './repositories/index.ts';\nimport { DatabaseInjectionKey, IdentityProviderRepositoryAdapter } from '../database/index.ts';\nimport {\n ClientEntity,\n IdentityProviderRepository,\n RealmEntity,\n RoleEntity,\n UserPermissionEntity,\n UserRepository,\n UserRoleEntity,\n} from '../../../adapters/database/domains/index.ts';\nimport {\n ClientRepositoryAdapter,\n RoleRepositoryAdapter,\n UserRepositoryAdapter,\n} from '../database/repositories/index.ts';\nimport type { IContainer } from 'eldin';\nimport {\n IdentityPermissionProvider,\n IdentityProviderAccountManager,\n IdentityProviderAttributeMapper,\n IdentityProviderLdapCollectionAuthenticator,\n IdentityProviderPermissionMapper,\n IdentityProviderRoleMapper,\n IdentityResolver,\n IdentityRoleProvider,\n} from '../../../core/index.ts';\nimport { LDAPInjectionKey } from '../ldap/index.ts';\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { IdentityInjectionKey } from './constants.ts';\n\nexport class IdentityModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.IDENTITY;\n this.dependencies = [ModuleName.DATABASE];\n }\n\n async setup(container: IContainer): Promise<void> {\n const dataSource = container.resolve(DatabaseInjectionKey.DataSource);\n const realmRepository = container.resolve<Repository<Realm>>(RealmEntity);\n\n const clientRepository = new ClientIdentityRepository(\n container.resolve<Repository<Client>>(ClientEntity),\n );\n const userRepository = new UserIdentityRepository({\n repository: new UserRepository(dataSource),\n userPermissionRepository: container.resolve<Repository<UserPermission>>(UserPermissionEntity),\n userRoleRepository: container.resolve<Repository<UserRole>>(UserRoleEntity),\n });\n\n container.register(IdentityInjectionKey.Resolver, {\n useFactory: () => new IdentityResolver({\n clientRepository,\n userRepository,\n }),\n });\n\n // ---------------------------------------------\n\n const clientRepositoryAdapter = new ClientRepositoryAdapter({\n repository: container.resolve<Repository<Client>>(ClientEntity),\n realmRepository,\n });\n const userRepositoryAdapter = new UserRepositoryAdapter({\n repository: new UserRepository(dataSource),\n realmRepository,\n });\n const roleRepositoryAdapter = new RoleRepositoryAdapter({\n repository: container.resolve<Repository<Role>>(RoleEntity),\n realmRepository,\n });\n\n container.register(IdentityInjectionKey.RoleProvider, {\n useFactory: () => new IdentityRoleProvider({\n clientRepository: clientRepositoryAdapter,\n userRepository: userRepositoryAdapter,\n }),\n });\n\n container.register(IdentityInjectionKey.PermissionProvider, {\n useFactory: (c) => new IdentityPermissionProvider({\n clientRepository: clientRepositoryAdapter,\n userRepository: userRepositoryAdapter,\n roleRepository: roleRepositoryAdapter,\n roleProvider: c.resolve(IdentityInjectionKey.RoleProvider),\n }),\n });\n\n // ---------------------------------------------\n\n const attributeMapperRepository = new IdentityProviderAttributeMappingRepository(dataSource);\n const attributeMapper = new IdentityProviderAttributeMapper(attributeMapperRepository);\n\n const roleMapperFinder = new IdentityProviderRoleMappingRepository(dataSource);\n const roleMapper = new IdentityProviderRoleMapper(roleMapperFinder);\n\n const permissionMapperRepository = new IdentityProviderPermissionMappingRepository(dataSource);\n const permissionMapper = new IdentityProviderPermissionMapper(permissionMapperRepository);\n\n const providerAccountRepository = new IdentityProviderAccountRepository(dataSource);\n\n container.register(IdentityInjectionKey.ProviderAccountManager, {\n useFactory: () => new IdentityProviderAccountManager({\n repository: providerAccountRepository,\n userRepository,\n attributeMapper,\n roleMapper,\n permissionMapper,\n }),\n });\n\n // ---------------------------------------------\n\n const identityProviderRepository = new IdentityProviderRepositoryAdapter({\n repository: new IdentityProviderRepository(dataSource),\n realmRepository: container.resolve<Repository<Realm>>(RealmEntity),\n });\n container.register(IdentityInjectionKey.ProviderLdapCollectionAuthenticator, {\n useFactory: (c) => new IdentityProviderLdapCollectionAuthenticator({\n repository: identityProviderRepository,\n accountManager: c.resolve(IdentityInjectionKey.ProviderAccountManager),\n clientFactory: c.resolve(LDAPInjectionKey.ClientFactory),\n }),\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,IAAa6B,iBAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOH,WAAWK;EACvB,KAAKD,eAAe,CAACJ,WAAWM,QAAS;CAC7C;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,MAAMC,aAAaD,UAAUE,QAAQ/B,qBAAqBgC,UAAU;EACpE,MAAMC,kBAAkBJ,UAAUE,QAA2B3B,WAAAA;EAE7D,MAAM8B,mBAAmB,IAAIxC,yBACzBmC,UAAUE,QAA4B7B,YAAAA,CAAAA;EAE1C,MAAMiC,iBAAiB,IAAIpC,uBAAuB;GAC9CqC,YAAY,IAAI7B,eAAeuB,UAAAA;GAC/BO,0BAA0BR,UAAUE,QAAoCzB,oBAAAA;GACxEgC,oBAAoBT,UAAUE,QAA8BvB,cAAAA;EAChE,CAAA;EAEAqB,UAAUU,SAASjB,qBAAqBkB,UAAU,EAC9CC,kBAAkB,IAAIvB,iBAAiB;GACnCgB;GACAC;EACJ,CAAA,EACJ,CAAA;EAIA,MAAMO,0BAA0B,IAAIjC,wBAAwB;GACxD2B,YAAYP,UAAUE,QAA4B7B,YAAAA;GAClD+B;EACJ,CAAA;EACA,MAAMU,wBAAwB,IAAIhC,sBAAsB;GACpDyB,YAAY,IAAI7B,eAAeuB,UAAAA;GAC/BG;EACJ,CAAA;EACA,MAAMW,wBAAwB,IAAIlC,sBAAsB;GACpD0B,YAAYP,UAAUE,QAA0B1B,UAAAA;GAChD4B;EACJ,CAAA;EAEAJ,UAAUU,SAASjB,qBAAqBuB,cAAc,EAClDJ,kBAAkB,IAAItB,qBAAqB;GACvCe,kBAAkBQ;GAClBP,gBAAgBQ;EACpB,CAAA,EACJ,CAAA;EAEAd,UAAUU,SAASjB,qBAAqBwB,oBAAoB,EACxDL,aAAaM,MAAM,IAAInC,2BAA2B;GAC9CsB,kBAAkBQ;GAClBP,gBAAgBQ;GAChBK,gBAAgBJ;GAChBK,cAAcF,EAAEhB,QAAQT,qBAAqBuB,YAAY;EAC7D,CAAA,EACJ,CAAA;EAKA,MAAMM,kBAAkB,IAAIrC,gCAAgCoC,IADtBtD,2CAA2CkC,UACrBoB,CAAAA;EAG5D,MAAMG,aAAa,IAAIpC,2BAA2BmC,IADrBtD,sCAAsCgC,UACjBsB,CAAAA;EAGlD,MAAMG,mBAAmB,IAAIvC,iCAAiCsC,IADvBzD,4CAA4CiC,UACrBwB,CAAAA;EAE9D,MAAME,4BAA4B,IAAI7D,kCAAkCmC,UAAAA;EAExED,UAAUU,SAASjB,qBAAqBmC,wBAAwB,EAC5DhB,kBAAkB,IAAI5B,+BAA+B;GACjDuB,YAAYoB;GACZrB;GACAgB;GACAE;GACAE;EACJ,CAAA,EACJ,CAAA;EAIA,MAAMG,6BAA6B,IAAIzD,kCAAkC;GACrEmC,YAAY,IAAIjC,2BAA2B2B,UAAAA;GAC3CG,iBAAiBJ,UAAUE,QAA2B3B,WAAAA;EAC1D,CAAA;EACAyB,UAAUU,SAASjB,qBAAqBqC,qCAAqC,EACzElB,aAAaM,MAAM,IAAIhC,4CAA4C;GAC/DqB,YAAYsB;GACZE,gBAAgBb,EAAEhB,QAAQT,qBAAqBmC,sBAAsB;GACrEI,eAAed,EAAEhB,QAAQX,iBAAiB0C,aAAa;EAC3D,CAAA,EACJ,CAAA;CACJ;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["createLogger","createNoopLogger","ModuleName","ConfigInjectionKey","LoggerInjectionKey","LoggerModule","name","dependencies","LOGGER","CONFIG","setup","container","result","tryResolve","success","data","logger","register","useFactory","env","directory","writableDirectoryPath"],"sources":["../../../../src/app/modules/logger/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createLogger, createNoopLogger } from '@authup/server-kit';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport { LoggerInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\n\nexport class LoggerModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.LOGGER;\n this.dependencies = [ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n const result = container.tryResolve(ConfigInjectionKey);\n if (!result.success || !result.data.logger) {\n container.register(LoggerInjectionKey, { useFactory: createNoopLogger });\n\n return;\n }\n\n container.register(LoggerInjectionKey, {\n useFactory: () => createLogger({\n env: result.data.env,\n directory: result.data.writableDirectoryPath,\n }),\n });\n }\n\n // ----------------------------------------------------\n}\n"],"mappings":";;;;;;;;;AAcA,IAAaK,eAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOJ,WAAWM;EACvB,KAAKD,eAAe,CAACL,WAAWO,MAAAA;CACpC;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,WAAWV,kBAAAA;EACpC,IAAI,CAACS,OAAOE,WAAW,CAACF,OAAOG,KAAKC,QAAQ;GACxCL,UAAUM,SAASb,oBAAoB,EAAEc,YAAYjB,iBAAiB,CAAA;GAEtE;EACJ;EAEAU,UAAUM,SAASb,oBAAoB,EACnCc,kBAAkBlB,aAAa;GAC3BmB,KAAKP,OAAOG,KAAKI;GACjBC,WAAWR,OAAOG,KAAKM;EAC3B,CAAA,EACJ,CAAA;CACJ;AAGJ"}
1
+ {"version":3,"file":"module.mjs","names":["createLogger","createNoopLogger","ModuleName","ConfigInjectionKey","LoggerInjectionKey","LoggerModule","name","dependencies","LOGGER","CONFIG","setup","container","result","tryResolve","success","data","logger","register","useFactory","env","directory","writableDirectoryPath"],"sources":["../../../../src/app/modules/logger/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createLogger, createNoopLogger } from '@authup/server-kit';\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport { LoggerInjectionKey } from './constants.ts';\nimport type { IContainer } from 'eldin';\n\nexport class LoggerModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.LOGGER;\n this.dependencies = [ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n const result = container.tryResolve(ConfigInjectionKey);\n if (!result.success || !result.data.logger) {\n container.register(LoggerInjectionKey, { useFactory: createNoopLogger });\n\n return;\n }\n\n container.register(LoggerInjectionKey, {\n useFactory: () => createLogger({\n env: result.data.env,\n directory: result.data.writableDirectoryPath,\n }),\n });\n }\n\n // ----------------------------------------------------\n}\n"],"mappings":";;;;;;;;;AAcA,IAAaK,eAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOJ,WAAWM;EACvB,KAAKD,eAAe,CAACL,WAAWO,MAAO;CAC3C;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,MAAMC,SAASD,UAAUE,WAAWV,kBAAAA;EACpC,IAAI,CAACS,OAAOE,WAAW,CAACF,OAAOG,KAAKC,QAAQ;GACxCL,UAAUM,SAASb,oBAAoB,EAAEc,YAAYjB,iBAAiB,CAAA;GAEtE;EACJ;EAEAU,UAAUM,SAASb,oBAAoB,EACnCc,kBAAkBlB,aAAa;GAC3BmB,KAAKP,OAAOG,KAAKI;GACjBC,WAAWR,OAAOG,KAAKM;EAC3B,CAAA,EACJ,CAAA;CACJ;AAGJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.mjs","names":["ModuleName","MailTemplateRenderer","SMTPMailClientAdapter","VoidMailClientAdapter","MailInjectionKey","MailTemplateRendererInjectionKey","ConfigInjectionKey","MailModule","name","dependencies","MAIL","CONFIG","setup","container","has","register","useFactory","result","tryResolve","success","data","smtp"],"sources":["../../../../src/app/modules/mail/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { MailTemplateRenderer } from '../../../core/index.ts';\nimport { SMTPMailClientAdapter, VoidMailClientAdapter } from './adapter/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from './constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IContainer } from 'eldin';\n\nexport class MailModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.MAIL;\n this.dependencies = [ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n if (!container.has(MailTemplateRendererInjectionKey)) {\n container.register(MailTemplateRendererInjectionKey, { useFactory: () => new MailTemplateRenderer() });\n }\n\n // A pre-registered client wins (test injection — mirrors the\n // UIHttpClient pattern), so a fake can capture mailed OTP codes.\n if (container.has(MailInjectionKey)) {\n return;\n }\n\n const result = container.tryResolve(ConfigInjectionKey);\n if (!result.success || !result.data.smtp) {\n container.register(MailInjectionKey, { useFactory: () => new VoidMailClientAdapter() });\n\n return;\n }\n\n container.register(MailInjectionKey, { useFactory: () => new SMTPMailClientAdapter(result.data.smtp) });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,IAAaO,aAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOR,WAAWU;EACvB,KAAKD,eAAe,CAACT,WAAWW,MAAAA;CACpC;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,IAAI,CAACA,UAAUC,IAAIT,gCAAAA,GACfQ,UAAUE,SAASV,kCAAkC,EAAEW,kBAAkB,IAAIf,qBAAAA,EAAuB,CAAA;EAKxG,IAAIY,UAAUC,IAAIV,gBAAAA,GACd;EAGJ,MAAMa,SAASJ,UAAUK,WAAWZ,kBAAAA;EACpC,IAAI,CAACW,OAAOE,WAAW,CAACF,OAAOG,KAAKC,MAAM;GACtCR,UAAUE,SAASX,kBAAkB,EAAEY,kBAAkB,IAAIb,sBAAAA,EAAwB,CAAA;GAErF;EACJ;EAEAU,UAAUE,SAASX,kBAAkB,EAAEY,kBAAkB,IAAId,sBAAsBe,OAAOG,KAAKC,IAAI,EAAE,CAAA;CACzG;AACJ"}
1
+ {"version":3,"file":"module.mjs","names":["ModuleName","MailTemplateRenderer","SMTPMailClientAdapter","VoidMailClientAdapter","MailInjectionKey","MailTemplateRendererInjectionKey","ConfigInjectionKey","MailModule","name","dependencies","MAIL","CONFIG","setup","container","has","register","useFactory","result","tryResolve","success","data","smtp"],"sources":["../../../../src/app/modules/mail/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { IModule } from 'orkos';\nimport { ModuleName } from '../constants.ts';\nimport { MailTemplateRenderer } from '../../../core/index.ts';\nimport { SMTPMailClientAdapter, VoidMailClientAdapter } from './adapter/index.ts';\nimport { MailInjectionKey, MailTemplateRendererInjectionKey } from './constants.ts';\nimport { ConfigInjectionKey } from '../config/index.ts';\nimport type { IContainer } from 'eldin';\n\nexport class MailModule implements IModule {\n readonly name: string;\n\n readonly dependencies: string[];\n\n constructor() {\n this.name = ModuleName.MAIL;\n this.dependencies = [ModuleName.CONFIG];\n }\n\n async setup(container: IContainer): Promise<void> {\n if (!container.has(MailTemplateRendererInjectionKey)) {\n container.register(MailTemplateRendererInjectionKey, { useFactory: () => new MailTemplateRenderer() });\n }\n\n // A pre-registered client wins (test injection — mirrors the\n // UIHttpClient pattern), so a fake can capture mailed OTP codes.\n if (container.has(MailInjectionKey)) {\n return;\n }\n\n const result = container.tryResolve(ConfigInjectionKey);\n if (!result.success || !result.data.smtp) {\n container.register(MailInjectionKey, { useFactory: () => new VoidMailClientAdapter() });\n\n return;\n }\n\n container.register(MailInjectionKey, { useFactory: () => new SMTPMailClientAdapter(result.data.smtp) });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,IAAaO,aAAb,MAAaA;CACAC;CAEAC;CAET,cAAc;EACV,KAAKD,OAAOR,WAAWU;EACvB,KAAKD,eAAe,CAACT,WAAWW,MAAO;CAC3C;CAEA,MAAMC,MAAMC,WAAsC;EAC9C,IAAI,CAACA,UAAUC,IAAIT,gCAAAA,GACfQ,UAAUE,SAASV,kCAAkC,EAAEW,kBAAkB,IAAIf,qBAAAA,EAAuB,CAAA;EAKxG,IAAIY,UAAUC,IAAIV,gBAAAA,GACd;EAGJ,MAAMa,SAASJ,UAAUK,WAAWZ,kBAAAA;EACpC,IAAI,CAACW,OAAOE,WAAW,CAACF,OAAOG,KAAKC,MAAM;GACtCR,UAAUE,SAASX,kBAAkB,EAAEY,kBAAkB,IAAIb,sBAAAA,EAAwB,CAAA;GAErF;EACJ;EAEAU,UAAUE,SAASX,kBAAkB,EAAEY,kBAAkB,IAAId,sBAAsBe,OAAOG,KAAKC,IAAI,EAAE,CAAA;CACzG;AACJ"}