@authup/server-core 1.0.0-beta.37 → 1.0.0-beta.39

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 (263) hide show
  1. package/dist/adapters/database/data-source/options/module.mjs +16 -16
  2. package/dist/adapters/database/domains/client/index.d.ts +0 -1
  3. package/dist/adapters/database/domains/client/index.d.ts.map +1 -1
  4. package/dist/adapters/database/domains/client/index.mjs +1 -2
  5. package/dist/adapters/database/domains/index.mjs +26 -28
  6. package/dist/adapters/database/domains/policy/repository.mjs +1 -1
  7. package/dist/adapters/database/domains/robot/index.d.ts +0 -1
  8. package/dist/adapters/database/domains/robot/index.d.ts.map +1 -1
  9. package/dist/adapters/database/domains/robot/index.mjs +1 -2
  10. package/dist/adapters/database/domains/role/repository.d.ts +0 -6
  11. package/dist/adapters/database/domains/role/repository.d.ts.map +1 -1
  12. package/dist/adapters/database/domains/role/repository.mjs +1 -58
  13. package/dist/adapters/database/domains/role/repository.mjs.map +1 -1
  14. package/dist/adapters/database/domains/role-permission/entity.mjs +1 -1
  15. package/dist/adapters/database/domains/user/repository.d.ts +1 -5
  16. package/dist/adapters/database/domains/user/repository.d.ts.map +1 -1
  17. package/dist/adapters/database/domains/user/repository.mjs +0 -60
  18. package/dist/adapters/database/domains/user/repository.mjs.map +1 -1
  19. package/dist/adapters/database/extra-attribute-repository/tree/repository.d.ts.map +1 -1
  20. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs +1 -0
  21. package/dist/adapters/database/extra-attribute-repository/tree/repository.mjs.map +1 -1
  22. package/dist/adapters/database/index.mjs +18 -20
  23. package/dist/adapters/http/adapters/index.mjs +2 -1
  24. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts +2 -1
  25. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.d.ts.map +1 -1
  26. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs +10 -1
  27. package/dist/adapters/http/adapters/oauth2/grant-types/authorize.mjs.map +1 -1
  28. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.d.ts.map +1 -1
  29. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs +5 -13
  30. package/dist/adapters/http/adapters/oauth2/grant-types/client-credentials.mjs.map +1 -1
  31. package/dist/adapters/http/adapters/oauth2/grant-types/index.mjs +2 -1
  32. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts +2 -1
  33. package/dist/adapters/http/adapters/oauth2/grant-types/password.d.ts.map +1 -1
  34. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs +11 -2
  35. package/dist/adapters/http/adapters/oauth2/grant-types/password.mjs.map +1 -1
  36. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts +5 -1
  37. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.d.ts.map +1 -1
  38. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs +19 -1
  39. package/dist/adapters/http/adapters/oauth2/grant-types/refresh_token.mjs.map +1 -1
  40. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts +6 -1
  41. package/dist/adapters/http/adapters/oauth2/grant-types/types.d.ts.map +1 -1
  42. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts +15 -0
  43. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.d.ts.map +1 -0
  44. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs +57 -0
  45. package/dist/adapters/http/adapters/oauth2/grant-types/utils/credentials.mjs.map +1 -0
  46. package/dist/adapters/http/adapters/oauth2/grant-types/utils/guess.mjs +1 -1
  47. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts +1 -0
  48. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.d.ts.map +1 -1
  49. package/dist/adapters/http/adapters/oauth2/grant-types/utils/index.mjs +2 -1
  50. package/dist/adapters/http/adapters/oauth2/index.mjs +2 -1
  51. package/dist/adapters/http/controllers/entities/client/module.d.ts.map +1 -1
  52. package/dist/adapters/http/controllers/entities/client/module.mjs +1 -1
  53. package/dist/adapters/http/controllers/entities/client/module.mjs.map +1 -1
  54. package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +1 -1
  55. package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
  56. package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
  57. package/dist/adapters/http/controllers/entities/policy/utils/attributes-validator.mjs +1 -1
  58. package/dist/adapters/http/controllers/entities/policy/utils/validation.d.ts.map +1 -1
  59. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs +1 -1
  60. package/dist/adapters/http/controllers/entities/policy/utils/validation.mjs.map +1 -1
  61. package/dist/adapters/http/controllers/entities/robot/module.d.ts.map +1 -1
  62. package/dist/adapters/http/controllers/entities/robot/module.mjs +1 -1
  63. package/dist/adapters/http/controllers/entities/robot/module.mjs.map +1 -1
  64. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  65. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +5 -6
  66. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  67. package/dist/adapters/http/controllers/workflows/token/module.d.ts.map +1 -1
  68. package/dist/adapters/http/controllers/workflows/token/module.mjs +4 -1
  69. package/dist/adapters/http/controllers/workflows/token/module.mjs.map +1 -1
  70. package/dist/adapters/http/controllers/workflows/token/types.d.ts +2 -1
  71. package/dist/adapters/http/controllers/workflows/token/types.d.ts.map +1 -1
  72. package/dist/adapters/http/index.mjs +2 -1
  73. package/dist/adapters/http/middleware/built-in/assets.mjs +3 -3
  74. package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
  75. package/dist/app/modules/database/repositories/bindings.d.ts +17 -0
  76. package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -0
  77. package/dist/app/modules/database/repositories/bindings.mjs +40 -0
  78. package/dist/app/modules/database/repositories/bindings.mjs.map +1 -0
  79. package/dist/app/modules/database/repositories/client/repository.d.ts +5 -1
  80. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  81. package/dist/app/modules/database/repositories/client/repository.mjs +69 -1
  82. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  83. package/dist/app/modules/database/repositories/permission/repository.mjs +1 -1
  84. package/dist/app/modules/database/repositories/permission/repository.mjs.map +1 -1
  85. package/dist/app/modules/database/repositories/policy/repository.mjs +1 -1
  86. package/dist/app/modules/database/repositories/policy/repository.mjs.map +1 -1
  87. package/dist/app/modules/database/repositories/realm/repository.mjs +1 -1
  88. package/dist/app/modules/database/repositories/realm/repository.mjs.map +1 -1
  89. package/dist/app/modules/database/repositories/robot/repository.d.ts +5 -1
  90. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  91. package/dist/app/modules/database/repositories/robot/repository.mjs +61 -1
  92. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  93. package/dist/app/modules/database/repositories/role/repository.d.ts +3 -0
  94. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  95. package/dist/app/modules/database/repositories/role/repository.mjs +17 -1
  96. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  97. package/dist/app/modules/database/repositories/scope/repository.mjs +1 -1
  98. package/dist/app/modules/database/repositories/scope/repository.mjs.map +1 -1
  99. package/dist/app/modules/database/repositories/user/repository.d.ts +4 -1
  100. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  101. package/dist/app/modules/database/repositories/user/repository.mjs +31 -2
  102. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  103. package/dist/app/modules/http/modules/controller.d.ts +1 -2
  104. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  105. package/dist/app/modules/http/modules/controller.mjs +32 -34
  106. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  107. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  108. package/dist/app/modules/http/modules/middleware.mjs +2 -15
  109. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  110. package/dist/app/modules/identity/constants.d.ts +3 -1
  111. package/dist/app/modules/identity/constants.d.ts.map +1 -1
  112. package/dist/app/modules/identity/constants.mjs +2 -0
  113. package/dist/app/modules/identity/constants.mjs.map +1 -1
  114. package/dist/app/modules/identity/module.d.ts.map +1 -1
  115. package/dist/app/modules/identity/module.mjs +42 -5
  116. package/dist/app/modules/identity/module.mjs.map +1 -1
  117. package/dist/app/modules/identity/repositories/client.d.ts +2 -2
  118. package/dist/app/modules/identity/repositories/client.d.ts.map +1 -1
  119. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  120. package/dist/app/modules/identity/repositories/robot.d.ts +2 -2
  121. package/dist/app/modules/identity/repositories/robot.d.ts.map +1 -1
  122. package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
  123. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  124. package/dist/app/modules/oauth2/module.mjs +5 -2
  125. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  126. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  127. package/dist/app/modules/provisioning/module.mjs +14 -9
  128. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  129. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  130. package/dist/app/modules/provisioning/sources/default/module.mjs +66 -10
  131. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  132. package/dist/components/database/unique-entries/module.mjs +1 -1
  133. package/dist/core/entities/client/service.d.ts +1 -1
  134. package/dist/core/entities/client/service.d.ts.map +1 -1
  135. package/dist/core/entities/client/service.mjs +27 -23
  136. package/dist/core/entities/client/service.mjs.map +1 -1
  137. package/dist/core/entities/client/types.d.ts +6 -2
  138. package/dist/core/entities/client/types.d.ts.map +1 -1
  139. package/dist/core/entities/client-scope/service.d.ts.map +1 -1
  140. package/dist/core/entities/client-scope/service.mjs +2 -0
  141. package/dist/core/entities/client-scope/service.mjs.map +1 -1
  142. package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
  143. package/dist/core/entities/identity-provider-role-mapping/service.mjs +2 -0
  144. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  145. package/dist/core/entities/permission/service.mjs +1 -1
  146. package/dist/core/entities/policy/attributes-validator.mjs +1 -1
  147. package/dist/core/entities/policy/service.mjs +1 -1
  148. package/dist/core/entities/realm/service.mjs +1 -1
  149. package/dist/core/entities/robot/service.d.ts +1 -1
  150. package/dist/core/entities/robot/service.d.ts.map +1 -1
  151. package/dist/core/entities/robot/service.mjs +41 -26
  152. package/dist/core/entities/robot/service.mjs.map +1 -1
  153. package/dist/core/entities/robot/types.d.ts +6 -2
  154. package/dist/core/entities/robot/types.d.ts.map +1 -1
  155. package/dist/core/entities/role/service.mjs +1 -1
  156. package/dist/core/entities/role/types.d.ts +3 -0
  157. package/dist/core/entities/role/types.d.ts.map +1 -1
  158. package/dist/core/entities/role-attribute/service.d.ts +2 -0
  159. package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
  160. package/dist/core/entities/role-attribute/service.mjs +7 -3
  161. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  162. package/dist/core/entities/scope/service.mjs +1 -1
  163. package/dist/core/entities/user/service.d.ts.map +1 -1
  164. package/dist/core/entities/user/service.mjs +20 -25
  165. package/dist/core/entities/user/service.mjs.map +1 -1
  166. package/dist/core/entities/user/types.d.ts +4 -1
  167. package/dist/core/entities/user/types.d.ts.map +1 -1
  168. package/dist/core/entities/user-attribute/service.d.ts +3 -1
  169. package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
  170. package/dist/core/entities/user-attribute/service.mjs +44 -17
  171. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  172. package/dist/core/identity/index.d.ts +1 -0
  173. package/dist/core/identity/index.d.ts.map +1 -1
  174. package/dist/core/identity/index.mjs +2 -1
  175. package/dist/core/identity/password-recovery/service.d.ts.map +1 -1
  176. package/dist/core/identity/password-recovery/service.mjs +4 -4
  177. package/dist/core/identity/password-recovery/service.mjs.map +1 -1
  178. package/dist/core/identity/permission/module.d.ts +12 -6
  179. package/dist/core/identity/permission/module.d.ts.map +1 -1
  180. package/dist/core/identity/permission/module.mjs +11 -19
  181. package/dist/core/identity/permission/module.mjs.map +1 -1
  182. package/dist/core/identity/permission/types.d.ts +11 -13
  183. package/dist/core/identity/permission/types.d.ts.map +1 -1
  184. package/dist/core/identity/provider/account/module.d.ts.map +1 -1
  185. package/dist/core/identity/provider/account/module.mjs +3 -2
  186. package/dist/core/identity/provider/account/module.mjs.map +1 -1
  187. package/dist/core/identity/role/index.d.ts +3 -0
  188. package/dist/core/identity/role/index.d.ts.map +1 -0
  189. package/dist/core/identity/role/index.mjs +2 -0
  190. package/dist/core/identity/role/module.d.ts +15 -0
  191. package/dist/core/identity/role/module.d.ts.map +1 -0
  192. package/dist/core/identity/role/module.mjs +27 -0
  193. package/dist/core/identity/role/module.mjs.map +1 -0
  194. package/dist/core/identity/role/types.d.ts +14 -0
  195. package/dist/core/identity/role/types.d.ts.map +1 -0
  196. package/dist/core/identity/role/types.mjs +1 -0
  197. package/dist/core/index.mjs +3 -1
  198. package/dist/core/oauth2/authorization/code/verifier/module.d.ts.map +1 -1
  199. package/dist/core/oauth2/authorization/code/verifier/module.mjs +8 -4
  200. package/dist/core/oauth2/authorization/code/verifier/module.mjs.map +1 -1
  201. package/dist/core/oauth2/authorization/code/verifier/types.d.ts +2 -0
  202. package/dist/core/oauth2/authorization/code/verifier/types.d.ts.map +1 -1
  203. package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
  204. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +7 -1
  205. package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
  206. package/dist/core/oauth2/client/authenticator.d.ts +17 -0
  207. package/dist/core/oauth2/client/authenticator.d.ts.map +1 -0
  208. package/dist/core/oauth2/client/authenticator.mjs +34 -0
  209. package/dist/core/oauth2/client/authenticator.mjs.map +1 -0
  210. package/dist/core/oauth2/client/index.d.ts +1 -0
  211. package/dist/core/oauth2/client/index.d.ts.map +1 -1
  212. package/dist/core/oauth2/client/index.mjs +2 -1
  213. package/dist/core/oauth2/grant-types/password.d.ts +7 -3
  214. package/dist/core/oauth2/grant-types/password.d.ts.map +1 -1
  215. package/dist/core/oauth2/grant-types/password.mjs +9 -7
  216. package/dist/core/oauth2/grant-types/password.mjs.map +1 -1
  217. package/dist/core/oauth2/index.mjs +3 -1
  218. package/dist/core/oauth2/token/issuer/access/module.d.ts +4 -1
  219. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  220. package/dist/core/oauth2/token/issuer/access/module.mjs +24 -2
  221. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  222. package/dist/core/oauth2/token/issuer/base.d.ts.map +1 -1
  223. package/dist/core/oauth2/token/issuer/base.mjs +3 -2
  224. package/dist/core/oauth2/token/issuer/base.mjs.map +1 -1
  225. package/dist/core/provisioning/entities/permission/types.d.ts +8 -0
  226. package/dist/core/provisioning/entities/permission/types.d.ts.map +1 -1
  227. package/dist/core/provisioning/synchronizer/permission/module.d.ts +5 -1
  228. package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
  229. package/dist/core/provisioning/synchronizer/permission/module.mjs +23 -0
  230. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  231. package/dist/core/provisioning/synchronizer/permission/types.d.ts +4 -1
  232. package/dist/core/provisioning/synchronizer/permission/types.d.ts.map +1 -1
  233. package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
  234. package/dist/core/provisioning/synchronizer/policy/module.mjs +4 -2
  235. package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
  236. package/dist/index.mjs +19 -20
  237. package/dist/path.d.ts +2 -1
  238. package/dist/path.d.ts.map +1 -1
  239. package/dist/path.mjs +3 -2
  240. package/dist/path.mjs.map +1 -1
  241. package/dist/swagger.json +14 -0
  242. package/dist/ui/client/.vite/ssr-manifest.json +2777 -0
  243. package/dist/ui/client/assets/fa-brands-400-BP5tdqmh.woff2 +0 -0
  244. package/dist/ui/client/assets/fa-regular-400-nyy7hhHF.woff2 +0 -0
  245. package/dist/ui/client/assets/fa-solid-900-DRAAbZTg.woff2 +0 -0
  246. package/dist/ui/client/assets/index-BVfayRKv.css +1 -0
  247. package/dist/ui/client/assets/index-Noe7uiOY.js +41 -0
  248. package/dist/ui/client/index.html +22 -0
  249. package/dist/ui/server/assets/multipart-parser-pHQi-kA6.js +166 -0
  250. package/dist/ui/server/server.js +79116 -0
  251. package/package.json +30 -13
  252. package/dist/adapters/database/domains/client/repository.d.ts +0 -13
  253. package/dist/adapters/database/domains/client/repository.d.ts.map +0 -1
  254. package/dist/adapters/database/domains/client/repository.mjs +0 -75
  255. package/dist/adapters/database/domains/client/repository.mjs.map +0 -1
  256. package/dist/adapters/database/domains/robot/repository.d.ts +0 -13
  257. package/dist/adapters/database/domains/robot/repository.d.ts.map +0 -1
  258. package/dist/adapters/database/domains/robot/repository.mjs +0 -75
  259. package/dist/adapters/database/domains/robot/repository.mjs.map +0 -1
  260. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts +0 -4
  261. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts.map +0 -1
  262. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs +0 -35
  263. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","RoleEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/role/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 } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { RoleEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'role',\n fields: {\n allowed: [\n 'id',\n 'name',\n 'display_name',\n 'target',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'target', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\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 findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('role.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAaQ,wBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAmC;AAC3C,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,gBAAe;;CAGzE,MAAME,SAASC,OAA2E;EACtF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;AAC9CD,KAAGE,QAAQ,UAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,OAAO;GACzCK,cAAc;GACdC,QAAQ,EACJC,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,EACL;GACAC,SAAS,EAAED,SAAS;IAAC;IAAM;IAAQ;IAAU;IAAW,EAAC;GACzDH,YAAY,EAAEK,UAAU,IAAG;GAC3BC,MAAM,EAAEH,SAAS;IAAC;IAAM;IAAQ;IAAc;IAAa,EAAC;GAChE,CAAA;EAEA,MAAM,CAACI,UAAUC,SAAS,MAAMX,GAAGY,iBAAe;AAElD,SAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;IACP;GACJ;;CAGJY,YAAYC,IAAkC;AAC1C,SAAO,KAAKC,UAAU,EAAED,IAAG,CAAA;;CAG/B,MAAME,cAAcC,MAAcC,UAAyC;EACvE,MAAMpB,KAAK,KAAKL,WAAWM,mBAAmB,OAAA;AAC9CD,KAAGqB,MAAM,wBAAwB,EAAEF,MAAK,CAAA;AAExC,MAAIC,UAAU;GACV,MAAME,QAAQ,MAAM,KAAK1B,gBAAgB2B,QAAQH,SAAAA;AACjD,OAAIE,MACAtB,IAAGwB,SAAS,4BAA4B,EAAEC,SAASH,MAAMN,IAAG,CAAA;;AAIpE,SAAOhB,GAAG0B,QAAM;;CAGpB,MAAMC,kBAAkBC,UAAkBN,OAAsC;AAC5E,SAAOpC,OAAO0C,SAAAA,GACV,KAAKb,YAAYa,SAAAA,GACjB,KAAKV,cAAcU,UAAUN,MAAAA;;CAGrC,MAAMO,WAAWR,OAA6C;AAC1D,SAAO,KAAK1B,WAAWmC,OAAOvC,yBAAyB8B,MAAAA,CAAAA;;CAG3D,MAAMJ,UAAUI,OAAkD;AAC9D,SAAO,KAAK1B,WAAWsB,UAAU1B,yBAAyB8B,MAAAA,CAAAA;;CAG9DU,OAAOlB,MAA2B;AAC9B,SAAO,KAAKlB,WAAWoC,OAAOlB,KAAAA;;CAGlCmB,MAAMC,QAAcpB,MAA2B;AAC3C,SAAO,KAAKlB,WAAWqC,MAAMC,QAAQpB,KAAAA;;CAGzC,MAAMqB,KAAKD,QAA6B;AACpC,SAAO,KAAKtC,WAAWuC,KAAKD,OAAAA;;CAGhC,MAAME,OAAOF,QAA6B;AACtC,QAAM,KAAKtC,WAAWwC,OAAOF,OAAAA;;CAGjC,MAAMG,oBAAoBvB,MAAoC;AAC1D,QAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GAClB,CAAA;;CAGJ,MAAMiD,gBAAgB5B,MAAqB6B,UAAgC;AAQvE,MAAI,CAACC,MAPkBvD,eAAe;GAClCiD,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GACdyC,QAAQpB;GACR+B,gBAAgBF;GACpB,CAAA,CAGI,OAAM,IAAIpD,uBAAAA"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","loadBoundPermissions","CachePrefix","RoleEntity","RolePermissionEntity","RealmRepositoryAdapter","RoleRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundPermissions","junctionTarget","role_id","cachePrefix","ROLE_OWNED_PERMISSIONS","cacheKey","getBoundPermissionsForMany","results","Promise","all","map","flat"],"sources":["../../../../../../src/app/modules/database/repositories/role/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 } from '@authup/core-kit';\nimport type { PermissionPolicyBinding } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IRoleRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { loadBoundPermissions } from '../bindings.ts';\nimport {\n CachePrefix,\n RoleEntity,\n RolePermissionEntity,\n} from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type RoleRepositoryAdapterContext = {\n repository: Repository<Role>,\n realmRepository: Repository<Realm>,\n};\n\nexport class RoleRepositoryAdapter implements IRoleRepository {\n private readonly repository: Repository<Role>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: RoleRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Role>> {\n const qb = this.repository.createQueryBuilder('role');\n qb.groupBy('role.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'role',\n fields: {\n allowed: [\n 'id',\n 'name',\n 'display_name',\n 'target',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'name', 'target', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\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 findOneById(id: string): Promise<Role | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Role | null> {\n const qb = this.repository.createQueryBuilder('role');\n qb.where('role.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('role.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Role | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Role[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Role | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Role>): Role {\n return this.repository.create(data);\n }\n\n merge(entity: Role, data: Partial<Role>): Role {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Role): Promise<Role> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Role): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Role>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: RoleEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n\n async getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]> {\n const id = typeof entity === 'string' ? entity : entity.id;\n return loadBoundPermissions({\n manager: this.repository.manager,\n junctionTarget: RolePermissionEntity,\n where: { role_id: id },\n cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n\n async getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]> {\n const results = await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)));\n return results.flat();\n }\n}\n"],"mappings":"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"}
@@ -57,7 +57,7 @@ var ScopeRepositoryAdapter = class {
57
57
  }
58
58
  async findOneByName(name, realmKey) {
59
59
  const qb = this.repository.createQueryBuilder("scope");
60
- qb.where("scope.name LIKE :name", { name });
60
+ qb.where("scope.name = :name", { name });
61
61
  if (realmKey) {
62
62
  const realm = await this.realmRepository.resolve(realmKey);
63
63
  if (realm) qb.andWhere("scope.realm_id = :realmId", { realmId: realm.id });
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/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, Scope } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'scope',\n fields: {\n allowed: [\n 'id',\n 'built_in',\n 'name',\n 'display_name',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'built_in', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\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 findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('scope.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAaQ,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;AAC5C,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,gBAAe;;CAGzE,MAAME,SAASC,OAA4E;EACvF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGE,QAAQ,WAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,OAAO;GACzCK,cAAc;GACdC,QAAQ,EACJC,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,EACL;GACAC,SAAS,EAAED,SAAS;IAAC;IAAM;IAAY;IAAQ;IAAW,EAAC;GAC3DH,YAAY,EAAEK,UAAU,IAAG;GAC3BC,MAAM,EAAEH,SAAS;IAAC;IAAM;IAAQ;IAAc;IAAa,EAAC;GAChE,CAAA;EAEA,MAAM,CAACI,UAAUC,SAAS,MAAMX,GAAGY,iBAAe;AAElD,SAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;IACP;GACJ;;CAGJY,YAAYC,IAAmC;AAC3C,SAAO,KAAKC,UAAU,EAAED,IAAG,CAAA;;CAG/B,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMpB,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGqB,MAAM,yBAAyB,EAAEF,MAAK,CAAA;AAEzC,MAAIC,UAAU;GACV,MAAME,QAAQ,MAAM,KAAK1B,gBAAgB2B,QAAQH,SAAAA;AACjD,OAAIE,MACAtB,IAAGwB,SAAS,6BAA6B,EAAEC,SAASH,MAAMN,IAAG,CAAA;;AAIrE,SAAOhB,GAAG0B,QAAM;;CAGpB,MAAMC,kBAAkBC,UAAkBN,OAAuC;AAC7E,SAAOpC,OAAO0C,SAAAA,GACV,KAAKb,YAAYa,SAAAA,GACjB,KAAKV,cAAcU,UAAUN,MAAAA;;CAGrC,MAAMO,WAAWR,OAA8C;AAC3D,SAAO,KAAK1B,WAAWmC,OAAOvC,yBAAyB8B,MAAAA,CAAAA;;CAG3D,MAAMJ,UAAUI,OAAmD;AAC/D,SAAO,KAAK1B,WAAWsB,UAAU1B,yBAAyB8B,MAAAA,CAAAA;;CAG9DU,OAAOlB,MAA6B;AAChC,SAAO,KAAKlB,WAAWoC,OAAOlB,KAAAA;;CAGlCmB,MAAMC,QAAepB,MAA6B;AAC9C,SAAO,KAAKlB,WAAWqC,MAAMC,QAAQpB,KAAAA;;CAGzC,MAAMqB,KAAKD,QAA+B;AACtC,SAAO,KAAKtC,WAAWuC,KAAKD,OAAAA;;CAGhC,MAAME,OAAOF,QAA8B;AACvC,QAAM,KAAKtC,WAAWwC,OAAOF,OAAAA;;CAGjC,MAAMG,oBAAoBvB,MAAqC;AAC3D,QAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GAClB,CAAA;;CAGJ,MAAMiD,gBAAgB5B,MAAsB6B,UAAiC;AAQzE,MAAI,CAACC,MAPkBvD,eAAe;GAClCiD,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GACdyC,QAAQpB;GACR+B,gBAAgBF;GACpB,CAAA,CAGI,OAAM,IAAIpD,uBAAAA"}
1
+ {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","translateWhereConditions","ScopeEntity","RealmRepositoryAdapter","ScopeRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","allowed","filters","maxLimit","sort","entities","total","getManyAndCount","data","meta","findOneById","id","findOneBy","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findManyBy","findBy","create","merge","entity","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"sources":["../../../../../../src/app/modules/database/repositories/scope/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, Scope } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IScopeRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport { translateWhereConditions } from '../helpers.ts';\nimport { ScopeEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { RealmRepositoryAdapter } from '../realm/repository.ts';\n\nexport type ScopeRepositoryAdapterContext = {\n repository: Repository<Scope>,\n realmRepository: Repository<Realm>,\n};\n\nexport class ScopeRepositoryAdapter implements IScopeRepository {\n private readonly repository: Repository<Scope>;\n\n private readonly realmRepository: IRealmRepository;\n\n constructor(ctx: ScopeRepositoryAdapterContext) {\n this.repository = ctx.repository;\n this.realmRepository = new RealmRepositoryAdapter(ctx.realmRepository);\n }\n\n async findMany(query: Record<string, any>): Promise<EntityRepositoryFindManyResult<Scope>> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.groupBy('scope.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'scope',\n fields: {\n allowed: [\n 'id',\n 'built_in',\n 'name',\n 'display_name',\n 'description',\n 'realm_id',\n 'created_at',\n 'updated_at',\n ],\n },\n filters: { allowed: ['id', 'built_in', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n sort: { allowed: ['id', 'name', 'updated_at', 'created_at'] },\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 findOneById(id: string): Promise<Scope | null> {\n return this.findOneBy({ id });\n }\n\n async findOneByName(name: string, realmKey?: string): Promise<Scope | null> {\n const qb = this.repository.createQueryBuilder('scope');\n qb.where('scope.name = :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('scope.realm_id = :realmId', { realmId: realm.id });\n }\n }\n\n return qb.getOne();\n }\n\n async findOneByIdOrName(idOrName: string, realm?: string): Promise<Scope | null> {\n return isUUID(idOrName) ?\n this.findOneById(idOrName) :\n this.findOneByName(idOrName, realm);\n }\n\n async findManyBy(where: Record<string, any>): Promise<Scope[]> {\n return this.repository.findBy(translateWhereConditions(where));\n }\n\n async findOneBy(where: Record<string, any>): Promise<Scope | null> {\n return this.repository.findOneBy(translateWhereConditions(where));\n }\n\n create(data: Partial<Scope>): Scope {\n return this.repository.create(data);\n }\n\n merge(entity: Scope, data: Partial<Scope>): Scope {\n return this.repository.merge(entity, data);\n }\n\n async save(entity: Scope): Promise<Scope> {\n return this.repository.save(entity);\n }\n\n async remove(entity: Scope): Promise<void> {\n await this.repository.remove(entity);\n }\n\n async validateJoinColumns(data: Partial<Scope>): Promise<void> {\n await validateEntityJoinColumns(data, {\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n });\n }\n\n async checkUniqueness(data: Partial<Scope>, existing?: Scope): Promise<void> {\n const isUnique = await isEntityUnique({\n dataSource: this.repository.manager.connection,\n entityTarget: ScopeEntity,\n entity: data,\n entityExisting: existing,\n });\n\n if (!isUnique) {\n throw new DatabaseConflictError();\n }\n }\n}\n"],"mappings":";;;;;;;;;AAsBA,IAAaQ,yBAAb,MAAaA;CACQC;CAEAC;CAEjB,YAAYC,KAAoC;AAC5C,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,kBAAkB,IAAIH,uBAAuBI,IAAID,gBAAe;;CAGzE,MAAME,SAASC,OAA4E;EACvF,MAAMC,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGE,QAAQ,WAAA;EAEX,MAAM,EAAEC,eAAehB,WAAWa,IAAID,OAAO;GACzCK,cAAc;GACdC,QAAQ,EACJC,SAAS;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,EACL;GACAC,SAAS,EAAED,SAAS;IAAC;IAAM;IAAY;IAAQ;IAAW,EAAC;GAC3DH,YAAY,EAAEK,UAAU,IAAG;GAC3BC,MAAM,EAAEH,SAAS;IAAC;IAAM;IAAQ;IAAc;IAAa,EAAC;GAChE,CAAA;EAEA,MAAM,CAACI,UAAUC,SAAS,MAAMX,GAAGY,iBAAe;AAElD,SAAO;GACHC,MAAMH;GACNI,MAAM;IACFH;IACA,GAAGR;IACP;GACJ;;CAGJY,YAAYC,IAAmC;AAC3C,SAAO,KAAKC,UAAU,EAAED,IAAG,CAAA;;CAG/B,MAAME,cAAcC,MAAcC,UAA0C;EACxE,MAAMpB,KAAK,KAAKL,WAAWM,mBAAmB,QAAA;AAC9CD,KAAGqB,MAAM,sBAAsB,EAAEF,MAAK,CAAA;AAEtC,MAAIC,UAAU;GACV,MAAME,QAAQ,MAAM,KAAK1B,gBAAgB2B,QAAQH,SAAAA;AACjD,OAAIE,MACAtB,IAAGwB,SAAS,6BAA6B,EAAEC,SAASH,MAAMN,IAAG,CAAA;;AAIrE,SAAOhB,GAAG0B,QAAM;;CAGpB,MAAMC,kBAAkBC,UAAkBN,OAAuC;AAC7E,SAAOpC,OAAO0C,SAAAA,GACV,KAAKb,YAAYa,SAAAA,GACjB,KAAKV,cAAcU,UAAUN,MAAAA;;CAGrC,MAAMO,WAAWR,OAA8C;AAC3D,SAAO,KAAK1B,WAAWmC,OAAOvC,yBAAyB8B,MAAAA,CAAAA;;CAG3D,MAAMJ,UAAUI,OAAmD;AAC/D,SAAO,KAAK1B,WAAWsB,UAAU1B,yBAAyB8B,MAAAA,CAAAA;;CAG9DU,OAAOlB,MAA6B;AAChC,SAAO,KAAKlB,WAAWoC,OAAOlB,KAAAA;;CAGlCmB,MAAMC,QAAepB,MAA6B;AAC9C,SAAO,KAAKlB,WAAWqC,MAAMC,QAAQpB,KAAAA;;CAGzC,MAAMqB,KAAKD,QAA+B;AACtC,SAAO,KAAKtC,WAAWuC,KAAKD,OAAAA;;CAGhC,MAAME,OAAOF,QAA8B;AACvC,QAAM,KAAKtC,WAAWwC,OAAOF,OAAAA;;CAGjC,MAAMG,oBAAoBvB,MAAqC;AAC3D,QAAMxB,0BAA0BwB,MAAM;GAClCwB,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GAClB,CAAA;;CAGJ,MAAMiD,gBAAgB5B,MAAsB6B,UAAiC;AAQzE,MAAI,CAACC,MAPkBvD,eAAe;GAClCiD,YAAY,KAAK1C,WAAW2C,QAAQC;GACpCC,cAAchD;GACdyC,QAAQpB;GACR+B,gBAAgBF;GACpB,CAAA,CAGI,OAAM,IAAIpD,uBAAAA"}
@@ -1,4 +1,5 @@
1
- import type { Realm, User } from '@authup/core-kit';
1
+ import type { Realm, Role, User } from '@authup/core-kit';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
2
3
  import type { Repository } from 'typeorm';
3
4
  import type { EntityRepositoryFindManyResult, IUserRepository } from '../../../../../core/index.ts';
4
5
  import type { UserRepository } from '../../../../../adapters/database/domains/index.ts';
@@ -24,5 +25,7 @@ export declare class UserRepositoryAdapter implements IUserRepository {
24
25
  remove(entity: User): Promise<void>;
25
26
  validateJoinColumns(data: Partial<User>): Promise<void>;
26
27
  checkUniqueness(data: Partial<User>, existing?: User): Promise<void>;
28
+ getBoundRoles(entity: string | User): Promise<Role[]>;
29
+ getBoundPermissions(entity: string | User): Promise<PermissionPolicyBinding[]>;
27
30
  }
28
31
  //# sourceMappingURL=repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,8BAA8B,EAAoB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEtH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKxF,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,cAAc,CAAC;IAC3B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,qBAAsB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAE5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;gBAEvC,GAAG,EAAE,4BAA4B;IAKvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IA+CnF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ7C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAkBpE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMzE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA6CzF,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIvD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAI3D,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAU1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIjC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIxC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAY7E"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/user/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,8BAA8B,EAAoB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEtH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAWxF,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,cAAc,CAAC;IAC3B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,qBAAsB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAE5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;gBAEvC,GAAG,EAAE,4BAA4B;IAKvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IA+CnF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAQ7C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAkBpE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMzE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA6CzF,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIvD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAI3D,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAU1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIjC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIxC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAapE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAmBrD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAUvF"}
@@ -1,9 +1,14 @@
1
+ import { CachePrefix } from "../../../../../adapters/database/domains/constants.mjs";
1
2
  import { UserEntity } from "../../../../../adapters/database/domains/user/entity.mjs";
3
+ import { UserPermissionEntity } from "../../../../../adapters/database/domains/user-permission/entity.mjs";
4
+ import { UserRoleEntity } from "../../../../../adapters/database/domains/user-role/entity.mjs";
2
5
  import "../../../../../adapters/database/domains/index.mjs";
3
6
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
4
7
  import "../../../../../adapters/database/index.mjs";
5
8
  import { translateWhereConditions } from "../helpers.mjs";
9
+ import { loadBoundPermissions } from "../bindings.mjs";
6
10
  import { RealmRepositoryAdapter } from "../realm/repository.mjs";
11
+ import { buildRedisKeyPath } from "@authup/server-kit";
7
12
  import { isUUID } from "@authup/kit";
8
13
  import { applyQuery, isEntityUnique, validateEntityJoinColumns } from "typeorm-extension";
9
14
  //#region src/app/modules/database/repositories/user/repository.ts
@@ -73,7 +78,7 @@ var UserRepositoryAdapter = class {
73
78
  }
74
79
  async findOneByName(name, realmKey) {
75
80
  const qb = this.repository.createQueryBuilder("user");
76
- qb.where("user.name LIKE :name", { name });
81
+ qb.where("user.name = :name", { name });
77
82
  if (realmKey) {
78
83
  const realm = await this.realmRepository.resolve(realmKey);
79
84
  if (realm) qb.andWhere("user.realm_id = :realmId", { realmId: realm.id });
@@ -89,7 +94,7 @@ var UserRepositoryAdapter = class {
89
94
  const qb = this.repository.createQueryBuilder("user");
90
95
  if (isUUID(id)) qb.where("user.id = :id", { id });
91
96
  else {
92
- qb.where("user.name LIKE :name", { name: id });
97
+ qb.where("user.name = :name", { name: id });
93
98
  if (realmKey) {
94
99
  const realm = await this.realmRepository.resolve(realmKey);
95
100
  if (realm) qb.andWhere("user.realm_id = :realmId", { realmId: realm.id });
@@ -159,6 +164,30 @@ var UserRepositoryAdapter = class {
159
164
  entityExisting: existing
160
165
  })) throw new DatabaseConflictError();
161
166
  }
167
+ async getBoundRoles(entity) {
168
+ const id = typeof entity === "string" ? entity : entity.id;
169
+ return (await this.repository.manager.getRepository(UserRoleEntity).find({
170
+ where: { user_id: id },
171
+ relations: { role: true },
172
+ cache: {
173
+ id: buildRedisKeyPath({
174
+ prefix: CachePrefix.USER_OWNED_ROLES,
175
+ key: id
176
+ }),
177
+ milliseconds: 6e4
178
+ }
179
+ })).map((entry) => entry.role);
180
+ }
181
+ async getBoundPermissions(entity) {
182
+ const id = typeof entity === "string" ? entity : entity.id;
183
+ return loadBoundPermissions({
184
+ manager: this.repository.manager,
185
+ junctionTarget: UserPermissionEntity,
186
+ where: { user_id: id },
187
+ cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,
188
+ cacheKey: id
189
+ });
190
+ }
162
191
  };
163
192
  //#endregion
164
193
  export { UserRepositoryAdapter };
@@ -1 +1 @@
1
- {"version":3,"file":"repository.mjs","names":["isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","UserEntity","translateWhereConditions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","default","allowed","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting"],"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, User } from '@authup/core-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, IRealmRepository, IUserRepository } from '../../../../../core/index.ts';\nimport { DatabaseConflictError } from '../../../../../adapters/database/index.ts';\nimport type { UserRepository } from '../../../../../adapters/database/domains/index.ts';\nimport { UserEntity } from '../../../../../adapters/database/domains/index.ts';\nimport { translateWhereConditions } from '../helpers.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: Record<string, any>): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n filters: { allowed: ['id', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n allowed: ['realm'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'name', 'display_name', 'created_at', 'updated_at'] },\n });\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 LIKE :name', { name });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\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?: Record<string, any>, 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 LIKE :name', { name: id });\n\n if (realmKey) {\n const realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\n }\n }\n\n applyQuery(qb, query || {}, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n relations: { allowed: ['realm'] },\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 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"],"mappings":"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"}
1
+ {"version":3,"file":"repository.mjs","names":["buildRedisKeyPath","isUUID","applyQuery","isEntityUnique","validateEntityJoinColumns","DatabaseConflictError","CachePrefix","UserEntity","UserPermissionEntity","UserRoleEntity","translateWhereConditions","loadBoundPermissions","RealmRepositoryAdapter","UserRepositoryAdapter","repository","realmRepository","ctx","findMany","query","qb","createQueryBuilder","groupBy","pagination","defaultAlias","fields","default","allowed","filters","maxLimit","relations","onJoin","_property","key","q","addGroupBy","sort","entities","total","getManyAndCount","extendManyWithEA","data","meta","findOneById","id","entity","findOneBy","extendOneWithEA","findOneByName","name","realmKey","where","realm","resolve","andWhere","realmId","getOne","findOneByIdOrName","idOrName","findOne","findManyBy","findBy","findOneByWithEmail","addSelect","translated","create","merge","save","remove","validateJoinColumns","dataSource","manager","connection","entityTarget","checkUniqueness","existing","isUnique","entityExisting","getBoundRoles","entries","getRepository","find","user_id","role","cache","prefix","USER_OWNED_ROLES","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 { PermissionPolicyBinding } from '@authup/access';\nimport { buildRedisKeyPath } from '@authup/server-kit';\nimport { isUUID } from '@authup/kit';\nimport type { Repository } from 'typeorm';\nimport { applyQuery, isEntityUnique, validateEntityJoinColumns } from 'typeorm-extension';\nimport type { EntityRepositoryFindManyResult, 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 { 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: Record<string, any>): Promise<EntityRepositoryFindManyResult<User>> {\n const qb = this.repository.createQueryBuilder('user');\n qb.groupBy('user.id');\n\n const { pagination } = applyQuery(qb, query, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n filters: { allowed: ['id', 'name', 'realm_id'] },\n pagination: { maxLimit: 50 },\n relations: {\n allowed: ['realm'],\n onJoin: (_property: string, key: string, q: any) => {\n q.addGroupBy(`${key}.id`);\n },\n },\n sort: { allowed: ['id', 'name', 'display_name', 'created_at', 'updated_at'] },\n });\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 realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\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?: Record<string, any>, 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 realm = await this.realmRepository.resolve(realmKey);\n if (realm) {\n qb.andWhere('user.realm_id = :realmId', { realmId: realm.id });\n }\n }\n }\n\n applyQuery(qb, query || {}, {\n defaultAlias: 'user',\n fields: {\n default: [\n 'id',\n 'name',\n 'name_locked',\n 'first_name',\n 'last_name',\n 'display_name',\n 'avatar',\n 'cover',\n 'active',\n 'created_at',\n 'updated_at',\n 'realm_id',\n ],\n allowed: ['email'],\n },\n relations: { allowed: ['realm'] },\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 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: { user_id: 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: { user_id: id },\n cachePrefix: CachePrefix.USER_OWNED_PERMISSIONS,\n cacheKey: id,\n });\n }\n}\n"],"mappings":"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"}
@@ -2,10 +2,9 @@ import type { Router } from 'routup';
2
2
  import { ClientController, ClientPermissionController, ClientRoleController, ClientScopeController, IdentityProviderController, IdentityProviderRoleMappingController, PermissionController, PermissionPolicyController, PolicyController, RealmController, RobotController, RobotPermissionController, RobotRoleController, RoleAttributeController, RoleController, RolePermissionController, ScopeController, UserAttributeController, UserController, UserPermissionController, UserRoleController } from '../../../../adapters/http/index.ts';
3
3
  import { ActivateController, AuthorizeController, JwkController, OpenIDController, PasswordForgotController, PasswordResetController, RegisterController, TokenController } from '../../../../adapters/http/controllers/index.ts';
4
4
  import type { IContainer } from 'eldin';
5
- import { IdentityPermissionProvider, PasswordRecoveryService, RegistrationService } from '../../../../core/index.ts';
5
+ import { PasswordRecoveryService, RegistrationService } from '../../../../core/index.ts';
6
6
  export declare class HTTPControllerModule {
7
7
  mount(router: Router, container: IContainer): Promise<void>;
8
- createIdentityPermissionProvider(container: IContainer): IdentityPermissionProvider;
9
8
  createAuthorize(container: IContainer): AuthorizeController;
10
9
  createToken(container: IContainer): TokenController;
11
10
  createOpenIDController(container: IContainer): OpenIDController;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/http/modules/controller.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA6ErC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,qCAAqC,EACrC,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAElB,eAAe,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAOH,0BAA0B,EAE1B,uBAAuB,EAKvB,mBAAmB,EActB,MAAM,2BAA2B,CAAC;AAOnC,qBAAa,oBAAoB;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqFjE,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAUtD,eAAe,CAAC,SAAS,EAAE,UAAU;IAuBrC,WAAW,CAAC,SAAS,EAAE,UAAU;IA4CjC,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAM5C,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAIpD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAInD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAqBnD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAqB/C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiC5C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiB5C,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAoBrC,0BAA0B,CAAC,SAAS,EAAE,UAAU;IA8CtD,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAYtD,0BAA0B,CAAC,SAAS,EAAE,UAAU;IAShD,2BAA2B,CAAC,SAAS,EAAE,UAAU;IAQjD,+BAA+B,CAAC,SAAS,EAAE,UAAU;IAYrD,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAS/C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAQnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAQtD,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAe3C,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAQnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAS9C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAqB5C,oCAAoC,CAAC,SAAS,EAAE,UAAU;IAS1D,mBAAmB,CAAC,SAAS,EAAE,UAAU;IAMzC,qBAAqB,CAAC,SAAS,EAAE,UAAU;CAe9C"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/app/modules/http/modules/controller.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA2ErC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,qCAAqC,EACrC,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,wBAAwB,EACxB,kBAAkB,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAElB,eAAe,EAClB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EASH,uBAAuB,EAKvB,mBAAmB,EActB,MAAM,2BAA2B,CAAC;AAOnC,qBAAa,oBAAoB;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqFjE,eAAe,CAAC,SAAS,EAAE,UAAU;IAuBrC,WAAW,CAAC,SAAS,EAAE,UAAU;IAgDjC,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAM5C,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAIpD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAInD,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAqBnD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAI9C,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAqB/C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiC5C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAiB5C,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAoBrC,0BAA0B,CAAC,SAAS,EAAE,UAAU;IA8CtD,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAYtD,0BAA0B,CAAC,SAAS,EAAE,UAAU;IAShD,2BAA2B,CAAC,SAAS,EAAE,UAAU;IAQjD,+BAA+B,CAAC,SAAS,EAAE,UAAU;IAYrD,yBAAyB,CAAC,SAAS,EAAE,UAAU;IAS/C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,gCAAgC,CAAC,SAAS,EAAE,UAAU;IAQtD,qBAAqB,CAAC,SAAS,EAAE,UAAU;IAe3C,oBAAoB,CAAC,SAAS,EAAE,UAAU;IAe1C,6BAA6B,CAAC,SAAS,EAAE,UAAU;IAYnD,8BAA8B,CAAC,SAAS,EAAE,UAAU;IAYpD,wBAAwB,CAAC,SAAS,EAAE,UAAU;IAS9C,sBAAsB,CAAC,SAAS,EAAE,UAAU;IAqB5C,oCAAoC,CAAC,SAAS,EAAE,UAAU;IAS1D,mBAAmB,CAAC,SAAS,EAAE,UAAU;IAMzC,qBAAqB,CAAC,SAAS,EAAE,UAAU;CAe9C"}
@@ -2,28 +2,26 @@ import { AuthenticationInjectionKey } from "../../authentication/constants.mjs";
2
2
  import { RealmEntity } from "../../../../adapters/database/domains/realm/entity.mjs";
3
3
  import { KeyEntity } from "../../../../adapters/database/domains/key/entity.mjs";
4
4
  import { ClientEntity } from "../../../../adapters/database/domains/client/entity.mjs";
5
- import { PermissionEntity } from "../../../../adapters/database/domains/permission/entity.mjs";
6
- import { PolicyRepository } from "../../../../adapters/database/domains/policy/repository.mjs";
7
- import { ClientPermissionEntity } from "../../../../adapters/database/domains/client-permission/entity.mjs";
8
5
  import { RoleEntity } from "../../../../adapters/database/domains/role/entity.mjs";
9
6
  import { RoleAttributeEntity } from "../../../../adapters/database/domains/role-attribute/entity.mjs";
10
- import { RolePermissionEntity } from "../../../../adapters/database/domains/role-permission/entity.mjs";
11
- import { RoleRepository } from "../../../../adapters/database/domains/role/repository.mjs";
12
7
  import { ClientRoleEntity } from "../../../../adapters/database/domains/client-role/entity.mjs";
13
- import { ClientRepository } from "../../../../adapters/database/domains/client/repository.mjs";
8
+ import { PermissionEntity } from "../../../../adapters/database/domains/permission/entity.mjs";
9
+ import { PolicyRepository } from "../../../../adapters/database/domains/policy/repository.mjs";
10
+ import { ClientPermissionEntity } from "../../../../adapters/database/domains/client-permission/entity.mjs";
14
11
  import { ScopeEntity } from "../../../../adapters/database/domains/scope/entity.mjs";
15
12
  import { ClientScopeEntity } from "../../../../adapters/database/domains/client-scope/entity.mjs";
16
13
  import { IdentityProviderRepository } from "../../../../adapters/database/domains/identity-provider/repository.mjs";
14
+ import { UserEntity } from "../../../../adapters/database/domains/user/entity.mjs";
17
15
  import { UserAttributeEntity } from "../../../../adapters/database/domains/user-attribute/entity.mjs";
18
- import { UserPermissionEntity } from "../../../../adapters/database/domains/user-permission/entity.mjs";
19
- import { UserRoleEntity } from "../../../../adapters/database/domains/user-role/entity.mjs";
20
16
  import { UserRepository } from "../../../../adapters/database/domains/user/repository.mjs";
21
17
  import { IdentityProviderRoleMappingEntity } from "../../../../adapters/database/domains/identity-provider-role-mapping/entity.mjs";
22
18
  import { RobotEntity } from "../../../../adapters/database/domains/robot/entity.mjs";
23
- import { RobotRoleEntity } from "../../../../adapters/database/domains/robot-role/entity.mjs";
24
- import { RobotPermissionEntity } from "../../../../adapters/database/domains/robot-permission/entity.mjs";
25
- import { RobotRepository } from "../../../../adapters/database/domains/robot/repository.mjs";
26
19
  import { PermissionPolicyEntity } from "../../../../adapters/database/domains/permission-policy/entity.mjs";
20
+ import { RobotPermissionEntity } from "../../../../adapters/database/domains/robot-permission/entity.mjs";
21
+ import { RobotRoleEntity } from "../../../../adapters/database/domains/robot-role/entity.mjs";
22
+ import { RolePermissionEntity } from "../../../../adapters/database/domains/role-permission/entity.mjs";
23
+ import { UserPermissionEntity } from "../../../../adapters/database/domains/user-permission/entity.mjs";
24
+ import { UserRoleEntity } from "../../../../adapters/database/domains/user-role/entity.mjs";
27
25
  import "../../../../adapters/database/domains/index.mjs";
28
26
  import { ClientAuthenticator } from "../../../../core/authentication/entities/client/module.mjs";
29
27
  import { RobotAuthenticator } from "../../../../core/authentication/entities/robot/module.mjs";
@@ -49,8 +47,8 @@ import { UserAttributeService } from "../../../../core/entities/user-attribute/s
49
47
  import { UserPermissionService } from "../../../../core/entities/user-permission/service.mjs";
50
48
  import { UserRoleService } from "../../../../core/entities/user-role/service.mjs";
51
49
  import { IdentityProviderRoleMappingService } from "../../../../core/entities/identity-provider-role-mapping/service.mjs";
50
+ import { OAuth2ClientAuthenticator } from "../../../../core/oauth2/client/authenticator.mjs";
52
51
  import { PasswordRecoveryService } from "../../../../core/identity/password-recovery/service.mjs";
53
- import { IdentityPermissionProvider } from "../../../../core/identity/permission/module.mjs";
54
52
  import { RegistrationService } from "../../../../core/identity/registration/service.mjs";
55
53
  import "../../../../core/index.mjs";
56
54
  import { ConfigInjectionKey } from "../../config/constants.mjs";
@@ -194,15 +192,6 @@ var HTTPControllerModule = class {
194
192
  }
195
193
  }));
196
194
  }
197
- createIdentityPermissionProvider(container) {
198
- const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
199
- return new IdentityPermissionProvider({
200
- clientRepository: new ClientRepository(dataSource),
201
- userRepository: new UserRepository(dataSource),
202
- robotRepository: new RobotRepository(dataSource),
203
- roleRepository: new RoleRepository(dataSource)
204
- });
205
- }
206
195
  createAuthorize(container) {
207
196
  const config = container.resolve(ConfigInjectionKey);
208
197
  const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);
@@ -235,10 +224,11 @@ var HTTPControllerModule = class {
235
224
  tokenVerifier,
236
225
  tokenRevoker,
237
226
  identityResolver,
238
- identityPermissionProvider: this.createIdentityPermissionProvider(container),
227
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),
239
228
  clientAuthenticator: new ClientAuthenticator(identityResolver),
240
229
  robotAuthenticator: new RobotAuthenticator(identityResolver),
241
230
  userAuthenticator: new CredentialsAuthenticator([identityProviderLdapCollectionAuthenticator, new UserAuthenticator(identityResolver)]),
231
+ oauth2ClientAuthenticator: new OAuth2ClientAuthenticator(identityResolver),
242
232
  sessionManager
243
233
  });
244
234
  }
@@ -372,7 +362,7 @@ var HTTPControllerModule = class {
372
362
  }),
373
363
  repository,
374
364
  realmRepository: realmRepositoryAdapter,
375
- identityPermissionProvider: this.createIdentityPermissionProvider(container),
365
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),
376
366
  permissionProvider: new PermissionDatabaseProvider(dataSource)
377
367
  });
378
368
  }
@@ -389,13 +379,13 @@ var HTTPControllerModule = class {
389
379
  createClientPermissionController(container) {
390
380
  return new ClientPermissionController({ service: new ClientPermissionService({
391
381
  repository: new ClientPermissionRepositoryAdapter(container.resolve(ClientPermissionEntity)),
392
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
382
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
393
383
  }) });
394
384
  }
395
385
  createClientRoleController(container) {
396
386
  return new ClientRoleController({ service: new ClientRoleService({
397
387
  repository: new ClientRoleRepositoryAdapter(container.resolve(ClientRoleEntity)),
398
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
388
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
399
389
  }) });
400
390
  }
401
391
  createClientScopeController(container) {
@@ -404,22 +394,26 @@ var HTTPControllerModule = class {
404
394
  createRobotPermissionController(container) {
405
395
  return new RobotPermissionController({ service: new RobotPermissionService({
406
396
  repository: new RobotPermissionRepositoryAdapter(container.resolve(RobotPermissionEntity)),
407
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
397
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
408
398
  }) });
409
399
  }
410
400
  createRobotRoleController(container) {
411
401
  return new RobotRoleController({ service: new RobotRoleService({
412
402
  repository: new RobotRoleRepositoryAdapter(container.resolve(RobotRoleEntity)),
413
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
403
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
414
404
  }) });
415
405
  }
416
406
  createRoleAttributeController(container) {
417
- return new RoleAttributeController({ service: new RoleAttributeService({ repository: new RoleAttributeRepositoryAdapter(container.resolve(RoleAttributeEntity)) }) });
407
+ const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
408
+ return new RoleAttributeController({ service: new RoleAttributeService({
409
+ repository: new RoleAttributeRepositoryAdapter(container.resolve(RoleAttributeEntity)),
410
+ reservedNames: new Set(dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName))
411
+ }) });
418
412
  }
419
413
  createRolePermissionController(container) {
420
414
  return new RolePermissionController({ service: new RolePermissionService({
421
415
  repository: new RolePermissionRepositoryAdapter(container.resolve(RolePermissionEntity)),
422
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
416
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
423
417
  }) });
424
418
  }
425
419
  createPermissionPolicyController(container) {
@@ -447,18 +441,22 @@ var HTTPControllerModule = class {
447
441
  }) });
448
442
  }
449
443
  createUserAttributeController(container) {
450
- return new UserAttributeController({ service: new UserAttributeService({ repository: new UserAttributeRepositoryAdapter(container.resolve(UserAttributeEntity)) }) });
444
+ const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
445
+ return new UserAttributeController({ service: new UserAttributeService({
446
+ repository: new UserAttributeRepositoryAdapter(container.resolve(UserAttributeEntity)),
447
+ reservedNames: new Set(dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName))
448
+ }) });
451
449
  }
452
450
  createUserPermissionController(container) {
453
451
  return new UserPermissionController({ service: new UserPermissionService({
454
452
  repository: new UserPermissionRepositoryAdapter(container.resolve(UserPermissionEntity)),
455
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
453
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
456
454
  }) });
457
455
  }
458
456
  createUserRoleController(container) {
459
457
  return new UserRoleController({ service: new UserRoleService({
460
458
  repository: new UserRoleRepositoryAdapter(container.resolve(UserRoleEntity)),
461
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
459
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
462
460
  }) });
463
461
  }
464
462
  createPolicyController(container) {
@@ -476,13 +474,13 @@ var HTTPControllerModule = class {
476
474
  }),
477
475
  repository,
478
476
  realmRepository: realmRepositoryAdapter,
479
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
477
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
480
478
  });
481
479
  }
482
480
  createIdentityProviderRoleController(container) {
483
481
  return new IdentityProviderRoleMappingController({ service: new IdentityProviderRoleMappingService({
484
482
  repository: new IdentityProviderRoleMappingRepositoryAdapter(container.resolve(IdentityProviderRoleMappingEntity)),
485
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
483
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
486
484
  }) });
487
485
  }
488
486
  createJwkController(container) {