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

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 (181) 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/controllers/entities/identity-provider/module.mjs +1 -1
  24. package/dist/adapters/http/controllers/entities/permission/module.mjs +1 -1
  25. package/dist/adapters/http/controllers/entities/policy/module.mjs +1 -1
  26. package/dist/adapters/http/controllers/entities/policy/utils/attributes-validator.mjs +1 -1
  27. package/dist/adapters/http/controllers/workflows/authorize/module.d.ts.map +1 -1
  28. package/dist/adapters/http/controllers/workflows/authorize/module.mjs +5 -6
  29. package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
  30. package/dist/adapters/http/middleware/built-in/assets.mjs +3 -3
  31. package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
  32. package/dist/app/modules/database/repositories/bindings.d.ts +17 -0
  33. package/dist/app/modules/database/repositories/bindings.d.ts.map +1 -0
  34. package/dist/app/modules/database/repositories/bindings.mjs +40 -0
  35. package/dist/app/modules/database/repositories/bindings.mjs.map +1 -0
  36. package/dist/app/modules/database/repositories/client/repository.d.ts +4 -1
  37. package/dist/app/modules/database/repositories/client/repository.d.ts.map +1 -1
  38. package/dist/app/modules/database/repositories/client/repository.mjs +29 -0
  39. package/dist/app/modules/database/repositories/client/repository.mjs.map +1 -1
  40. package/dist/app/modules/database/repositories/robot/repository.d.ts +4 -1
  41. package/dist/app/modules/database/repositories/robot/repository.d.ts.map +1 -1
  42. package/dist/app/modules/database/repositories/robot/repository.mjs +29 -0
  43. package/dist/app/modules/database/repositories/robot/repository.mjs.map +1 -1
  44. package/dist/app/modules/database/repositories/role/repository.d.ts +3 -0
  45. package/dist/app/modules/database/repositories/role/repository.d.ts.map +1 -1
  46. package/dist/app/modules/database/repositories/role/repository.mjs +16 -0
  47. package/dist/app/modules/database/repositories/role/repository.mjs.map +1 -1
  48. package/dist/app/modules/database/repositories/user/repository.d.ts +4 -1
  49. package/dist/app/modules/database/repositories/user/repository.d.ts.map +1 -1
  50. package/dist/app/modules/database/repositories/user/repository.mjs +29 -0
  51. package/dist/app/modules/database/repositories/user/repository.mjs.map +1 -1
  52. package/dist/app/modules/http/modules/controller.d.ts +1 -2
  53. package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
  54. package/dist/app/modules/http/modules/controller.mjs +30 -34
  55. package/dist/app/modules/http/modules/controller.mjs.map +1 -1
  56. package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
  57. package/dist/app/modules/http/modules/middleware.mjs +2 -15
  58. package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
  59. package/dist/app/modules/identity/constants.d.ts +3 -1
  60. package/dist/app/modules/identity/constants.d.ts.map +1 -1
  61. package/dist/app/modules/identity/constants.mjs +2 -0
  62. package/dist/app/modules/identity/constants.mjs.map +1 -1
  63. package/dist/app/modules/identity/module.d.ts.map +1 -1
  64. package/dist/app/modules/identity/module.mjs +42 -5
  65. package/dist/app/modules/identity/module.mjs.map +1 -1
  66. package/dist/app/modules/identity/repositories/client.d.ts +2 -2
  67. package/dist/app/modules/identity/repositories/client.d.ts.map +1 -1
  68. package/dist/app/modules/identity/repositories/client.mjs.map +1 -1
  69. package/dist/app/modules/identity/repositories/robot.d.ts +2 -2
  70. package/dist/app/modules/identity/repositories/robot.d.ts.map +1 -1
  71. package/dist/app/modules/identity/repositories/robot.mjs.map +1 -1
  72. package/dist/app/modules/oauth2/module.d.ts.map +1 -1
  73. package/dist/app/modules/oauth2/module.mjs +5 -2
  74. package/dist/app/modules/oauth2/module.mjs.map +1 -1
  75. package/dist/app/modules/provisioning/module.d.ts.map +1 -1
  76. package/dist/app/modules/provisioning/module.mjs +14 -9
  77. package/dist/app/modules/provisioning/module.mjs.map +1 -1
  78. package/dist/app/modules/provisioning/sources/default/module.d.ts.map +1 -1
  79. package/dist/app/modules/provisioning/sources/default/module.mjs +66 -10
  80. package/dist/app/modules/provisioning/sources/default/module.mjs.map +1 -1
  81. package/dist/components/database/unique-entries/module.mjs +1 -1
  82. package/dist/core/entities/client/service.d.ts.map +1 -1
  83. package/dist/core/entities/client/service.mjs +15 -4
  84. package/dist/core/entities/client/service.mjs.map +1 -1
  85. package/dist/core/entities/client/types.d.ts +4 -1
  86. package/dist/core/entities/client/types.d.ts.map +1 -1
  87. package/dist/core/entities/client-scope/service.d.ts.map +1 -1
  88. package/dist/core/entities/client-scope/service.mjs +2 -0
  89. package/dist/core/entities/client-scope/service.mjs.map +1 -1
  90. package/dist/core/entities/identity-provider-role-mapping/service.d.ts.map +1 -1
  91. package/dist/core/entities/identity-provider-role-mapping/service.mjs +2 -0
  92. package/dist/core/entities/identity-provider-role-mapping/service.mjs.map +1 -1
  93. package/dist/core/entities/permission/service.mjs +1 -1
  94. package/dist/core/entities/policy/attributes-validator.mjs +1 -1
  95. package/dist/core/entities/policy/service.mjs +1 -1
  96. package/dist/core/entities/realm/service.mjs +1 -1
  97. package/dist/core/entities/robot/service.d.ts.map +1 -1
  98. package/dist/core/entities/robot/service.mjs +29 -8
  99. package/dist/core/entities/robot/service.mjs.map +1 -1
  100. package/dist/core/entities/robot/types.d.ts +4 -1
  101. package/dist/core/entities/robot/types.d.ts.map +1 -1
  102. package/dist/core/entities/role/service.mjs +1 -1
  103. package/dist/core/entities/role/types.d.ts +3 -0
  104. package/dist/core/entities/role/types.d.ts.map +1 -1
  105. package/dist/core/entities/role-attribute/service.d.ts +2 -0
  106. package/dist/core/entities/role-attribute/service.d.ts.map +1 -1
  107. package/dist/core/entities/role-attribute/service.mjs +7 -3
  108. package/dist/core/entities/role-attribute/service.mjs.map +1 -1
  109. package/dist/core/entities/scope/service.mjs +1 -1
  110. package/dist/core/entities/user/service.d.ts.map +1 -1
  111. package/dist/core/entities/user/service.mjs +10 -12
  112. package/dist/core/entities/user/service.mjs.map +1 -1
  113. package/dist/core/entities/user/types.d.ts +4 -1
  114. package/dist/core/entities/user/types.d.ts.map +1 -1
  115. package/dist/core/entities/user-attribute/service.d.ts +3 -1
  116. package/dist/core/entities/user-attribute/service.d.ts.map +1 -1
  117. package/dist/core/entities/user-attribute/service.mjs +44 -17
  118. package/dist/core/entities/user-attribute/service.mjs.map +1 -1
  119. package/dist/core/identity/index.d.ts +1 -0
  120. package/dist/core/identity/index.d.ts.map +1 -1
  121. package/dist/core/identity/index.mjs +2 -1
  122. package/dist/core/identity/permission/module.d.ts +12 -6
  123. package/dist/core/identity/permission/module.d.ts.map +1 -1
  124. package/dist/core/identity/permission/module.mjs +11 -19
  125. package/dist/core/identity/permission/module.mjs.map +1 -1
  126. package/dist/core/identity/permission/types.d.ts +11 -13
  127. package/dist/core/identity/permission/types.d.ts.map +1 -1
  128. package/dist/core/identity/role/index.d.ts +3 -0
  129. package/dist/core/identity/role/index.d.ts.map +1 -0
  130. package/dist/core/identity/role/index.mjs +2 -0
  131. package/dist/core/identity/role/module.d.ts +15 -0
  132. package/dist/core/identity/role/module.d.ts.map +1 -0
  133. package/dist/core/identity/role/module.mjs +27 -0
  134. package/dist/core/identity/role/module.mjs.map +1 -0
  135. package/dist/core/identity/role/types.d.ts +14 -0
  136. package/dist/core/identity/role/types.d.ts.map +1 -0
  137. package/dist/core/identity/role/types.mjs +1 -0
  138. package/dist/core/index.mjs +2 -1
  139. package/dist/core/oauth2/token/issuer/access/module.d.ts +4 -1
  140. package/dist/core/oauth2/token/issuer/access/module.d.ts.map +1 -1
  141. package/dist/core/oauth2/token/issuer/access/module.mjs +24 -2
  142. package/dist/core/oauth2/token/issuer/access/module.mjs.map +1 -1
  143. package/dist/core/provisioning/entities/permission/types.d.ts +8 -0
  144. package/dist/core/provisioning/entities/permission/types.d.ts.map +1 -1
  145. package/dist/core/provisioning/synchronizer/permission/module.d.ts +5 -1
  146. package/dist/core/provisioning/synchronizer/permission/module.d.ts.map +1 -1
  147. package/dist/core/provisioning/synchronizer/permission/module.mjs +23 -0
  148. package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
  149. package/dist/core/provisioning/synchronizer/permission/types.d.ts +4 -1
  150. package/dist/core/provisioning/synchronizer/permission/types.d.ts.map +1 -1
  151. package/dist/core/provisioning/synchronizer/policy/module.d.ts.map +1 -1
  152. package/dist/core/provisioning/synchronizer/policy/module.mjs +4 -2
  153. package/dist/core/provisioning/synchronizer/policy/module.mjs.map +1 -1
  154. package/dist/index.mjs +18 -20
  155. package/dist/path.d.ts +2 -1
  156. package/dist/path.d.ts.map +1 -1
  157. package/dist/path.mjs +3 -2
  158. package/dist/path.mjs.map +1 -1
  159. package/dist/swagger.json +14 -0
  160. package/dist/ui/client/.vite/ssr-manifest.json +2777 -0
  161. package/dist/ui/client/assets/fa-brands-400-BP5tdqmh.woff2 +0 -0
  162. package/dist/ui/client/assets/fa-regular-400-nyy7hhHF.woff2 +0 -0
  163. package/dist/ui/client/assets/fa-solid-900-DRAAbZTg.woff2 +0 -0
  164. package/dist/ui/client/assets/index-AHa03lX_.js +41 -0
  165. package/dist/ui/client/assets/index-BVfayRKv.css +1 -0
  166. package/dist/ui/client/index.html +22 -0
  167. package/dist/ui/server/assets/multipart-parser-pHQi-kA6.js +166 -0
  168. package/dist/ui/server/server.js +79102 -0
  169. package/package.json +30 -13
  170. package/dist/adapters/database/domains/client/repository.d.ts +0 -13
  171. package/dist/adapters/database/domains/client/repository.d.ts.map +0 -1
  172. package/dist/adapters/database/domains/client/repository.mjs +0 -75
  173. package/dist/adapters/database/domains/client/repository.mjs.map +0 -1
  174. package/dist/adapters/database/domains/robot/repository.d.ts +0 -13
  175. package/dist/adapters/database/domains/robot/repository.d.ts.map +0 -1
  176. package/dist/adapters/database/domains/robot/repository.mjs +0 -75
  177. package/dist/adapters/database/domains/robot/repository.mjs.map +0 -1
  178. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts +0 -4
  179. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.d.ts.map +0 -1
  180. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs +0 -35
  181. package/dist/adapters/http/controllers/entities/user-attribute/utils/authorization.mjs.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import type { Realm, Role } from '@authup/core-kit';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
2
3
  import type { Repository } from 'typeorm';
3
4
  import type { EntityRepositoryFindManyResult, IRoleRepository } from '../../../../../core/index.ts';
4
5
  export type RoleRepositoryAdapterContext = {
@@ -21,5 +22,7 @@ export declare class RoleRepositoryAdapter implements IRoleRepository {
21
22
  remove(entity: Role): Promise<void>;
22
23
  validateJoinColumns(data: Partial<Role>): Promise<void>;
23
24
  checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void>;
25
+ getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]>;
26
+ getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]>;
24
27
  }
25
28
  //# sourceMappingURL=repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../../../src/app/modules/database/repositories/role/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;AAMtH,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,qBAAsB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAE9C,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;IAkCzF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIvC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAcpE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMzE,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;IAIjE,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/role/repository.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,8BAA8B,EAAoB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAWtH,MAAM,MAAM,4BAA4B,GAAG;IACvC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;CACtC,CAAC;AAEF,qBAAa,qBAAsB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAE9C,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;IAkCzF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIvC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAcpE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMzE,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;IAIjE,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,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAW9E,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;CAIpG"}
@@ -1,8 +1,11 @@
1
+ import { CachePrefix } from "../../../../../adapters/database/domains/constants.mjs";
1
2
  import { RoleEntity } from "../../../../../adapters/database/domains/role/entity.mjs";
3
+ import { RolePermissionEntity } from "../../../../../adapters/database/domains/role-permission/entity.mjs";
2
4
  import "../../../../../adapters/database/domains/index.mjs";
3
5
  import { DatabaseConflictError } from "../../../../../adapters/database/errors/conflict.mjs";
4
6
  import "../../../../../adapters/database/index.mjs";
5
7
  import { translateWhereConditions } from "../helpers.mjs";
8
+ import { loadBoundPermissions } from "../bindings.mjs";
6
9
  import { RealmRepositoryAdapter } from "../realm/repository.mjs";
7
10
  import { isUUID } from "@authup/kit";
8
11
  import { applyQuery, isEntityUnique, validateEntityJoinColumns } from "typeorm-extension";
@@ -99,6 +102,19 @@ var RoleRepositoryAdapter = class {
99
102
  entityExisting: existing
100
103
  })) throw new DatabaseConflictError();
101
104
  }
105
+ async getBoundPermissions(entity) {
106
+ const id = typeof entity === "string" ? entity : entity.id;
107
+ return loadBoundPermissions({
108
+ manager: this.repository.manager,
109
+ junctionTarget: RolePermissionEntity,
110
+ where: { role_id: id },
111
+ cachePrefix: CachePrefix.ROLE_OWNED_PERMISSIONS,
112
+ cacheKey: id
113
+ });
114
+ }
115
+ async getBoundPermissionsForMany(entities) {
116
+ return (await Promise.all(entities.map((entity) => this.getBoundPermissions(entity)))).flat();
117
+ }
102
118
  };
103
119
  //#endregion
104
120
  export { RoleRepositoryAdapter };
@@ -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 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 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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"}
@@ -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
@@ -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 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 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,EAQH,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;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;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";
@@ -50,7 +48,6 @@ import { UserPermissionService } from "../../../../core/entities/user-permission
50
48
  import { UserRoleService } from "../../../../core/entities/user-role/service.mjs";
51
49
  import { IdentityProviderRoleMappingService } from "../../../../core/entities/identity-provider-role-mapping/service.mjs";
52
50
  import { PasswordRecoveryService } from "../../../../core/identity/password-recovery/service.mjs";
53
- import { IdentityPermissionProvider } from "../../../../core/identity/permission/module.mjs";
54
51
  import { RegistrationService } from "../../../../core/identity/registration/service.mjs";
55
52
  import "../../../../core/index.mjs";
56
53
  import { ConfigInjectionKey } from "../../config/constants.mjs";
@@ -194,15 +191,6 @@ var HTTPControllerModule = class {
194
191
  }
195
192
  }));
196
193
  }
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
194
  createAuthorize(container) {
207
195
  const config = container.resolve(ConfigInjectionKey);
208
196
  const accessTokenIssuer = container.resolve(OAuth2InjectionToken.AccessTokenIssuer);
@@ -235,7 +223,7 @@ var HTTPControllerModule = class {
235
223
  tokenVerifier,
236
224
  tokenRevoker,
237
225
  identityResolver,
238
- identityPermissionProvider: this.createIdentityPermissionProvider(container),
226
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),
239
227
  clientAuthenticator: new ClientAuthenticator(identityResolver),
240
228
  robotAuthenticator: new RobotAuthenticator(identityResolver),
241
229
  userAuthenticator: new CredentialsAuthenticator([identityProviderLdapCollectionAuthenticator, new UserAuthenticator(identityResolver)]),
@@ -372,7 +360,7 @@ var HTTPControllerModule = class {
372
360
  }),
373
361
  repository,
374
362
  realmRepository: realmRepositoryAdapter,
375
- identityPermissionProvider: this.createIdentityPermissionProvider(container),
363
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider),
376
364
  permissionProvider: new PermissionDatabaseProvider(dataSource)
377
365
  });
378
366
  }
@@ -389,13 +377,13 @@ var HTTPControllerModule = class {
389
377
  createClientPermissionController(container) {
390
378
  return new ClientPermissionController({ service: new ClientPermissionService({
391
379
  repository: new ClientPermissionRepositoryAdapter(container.resolve(ClientPermissionEntity)),
392
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
380
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
393
381
  }) });
394
382
  }
395
383
  createClientRoleController(container) {
396
384
  return new ClientRoleController({ service: new ClientRoleService({
397
385
  repository: new ClientRoleRepositoryAdapter(container.resolve(ClientRoleEntity)),
398
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
386
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
399
387
  }) });
400
388
  }
401
389
  createClientScopeController(container) {
@@ -404,22 +392,26 @@ var HTTPControllerModule = class {
404
392
  createRobotPermissionController(container) {
405
393
  return new RobotPermissionController({ service: new RobotPermissionService({
406
394
  repository: new RobotPermissionRepositoryAdapter(container.resolve(RobotPermissionEntity)),
407
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
395
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
408
396
  }) });
409
397
  }
410
398
  createRobotRoleController(container) {
411
399
  return new RobotRoleController({ service: new RobotRoleService({
412
400
  repository: new RobotRoleRepositoryAdapter(container.resolve(RobotRoleEntity)),
413
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
401
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
414
402
  }) });
415
403
  }
416
404
  createRoleAttributeController(container) {
417
- return new RoleAttributeController({ service: new RoleAttributeService({ repository: new RoleAttributeRepositoryAdapter(container.resolve(RoleAttributeEntity)) }) });
405
+ const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
406
+ return new RoleAttributeController({ service: new RoleAttributeService({
407
+ repository: new RoleAttributeRepositoryAdapter(container.resolve(RoleAttributeEntity)),
408
+ reservedNames: new Set(dataSource.getMetadata(RoleEntity).columns.map((c) => c.propertyName))
409
+ }) });
418
410
  }
419
411
  createRolePermissionController(container) {
420
412
  return new RolePermissionController({ service: new RolePermissionService({
421
413
  repository: new RolePermissionRepositoryAdapter(container.resolve(RolePermissionEntity)),
422
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
414
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
423
415
  }) });
424
416
  }
425
417
  createPermissionPolicyController(container) {
@@ -447,18 +439,22 @@ var HTTPControllerModule = class {
447
439
  }) });
448
440
  }
449
441
  createUserAttributeController(container) {
450
- return new UserAttributeController({ service: new UserAttributeService({ repository: new UserAttributeRepositoryAdapter(container.resolve(UserAttributeEntity)) }) });
442
+ const dataSource = container.resolve(DatabaseInjectionKey.DataSource);
443
+ return new UserAttributeController({ service: new UserAttributeService({
444
+ repository: new UserAttributeRepositoryAdapter(container.resolve(UserAttributeEntity)),
445
+ reservedNames: new Set(dataSource.getMetadata(UserEntity).columns.map((c) => c.propertyName))
446
+ }) });
451
447
  }
452
448
  createUserPermissionController(container) {
453
449
  return new UserPermissionController({ service: new UserPermissionService({
454
450
  repository: new UserPermissionRepositoryAdapter(container.resolve(UserPermissionEntity)),
455
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
451
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
456
452
  }) });
457
453
  }
458
454
  createUserRoleController(container) {
459
455
  return new UserRoleController({ service: new UserRoleService({
460
456
  repository: new UserRoleRepositoryAdapter(container.resolve(UserRoleEntity)),
461
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
457
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
462
458
  }) });
463
459
  }
464
460
  createPolicyController(container) {
@@ -476,13 +472,13 @@ var HTTPControllerModule = class {
476
472
  }),
477
473
  repository,
478
474
  realmRepository: realmRepositoryAdapter,
479
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
475
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
480
476
  });
481
477
  }
482
478
  createIdentityProviderRoleController(container) {
483
479
  return new IdentityProviderRoleMappingController({ service: new IdentityProviderRoleMappingService({
484
480
  repository: new IdentityProviderRoleMappingRepositoryAdapter(container.resolve(IdentityProviderRoleMappingEntity)),
485
- identityPermissionProvider: this.createIdentityPermissionProvider(container)
481
+ identityPermissionProvider: container.resolve(IdentityInjectionKey.PermissionProvider)
486
482
  }) });
487
483
  }
488
484
  createJwkController(container) {