@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":"service.mjs","names":["BuiltInPolicyType","PolicyData","isUUID","NotFoundError","ClientValidator","PermissionName","ValidatorGroup","AbstractEntityService","ClientCredentialsService","ClientService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","CLIENT_READ","CLIENT_UPDATE","CLIENT_DELETE","data","entities","meta","findMany","total","entity","secret","secret_encrypted","secret_hashed","evaluateOneOf","input","ATTRIBUTES","push","getOne","idOrName","realmId","findOneByIdOrName","realm","resolve","findOneBy","realm_id","id","findOneByName","create","save","undefined","update","updateOnly","options","group","where","findOneWithSecret","preEvaluate","UPDATE","CLIENT_CREATE","CREATE","validated","run","validateJoinColumns","checkUniqueness","credentialsService","actorRealmId","getActorRealmId","merge","evaluate","is_confidential","generateSecret","protect","created","delete","entityId","remove"],"sources":["../../../../src/core/entities/client/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport {\n ClientValidator,\n PermissionName,\n ValidatorGroup,\n} from '@authup/core-kit';\nimport type { Client } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport { ClientCredentialsService } from '../../authentication/credential/entities/client/module.ts';\nimport type { IClientRepository, IClientService } from './types.ts';\n\nexport type ClientServiceContext = {\n repository: IClientRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class ClientService extends AbstractEntityService implements IClientService {\n protected repository: IClientRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: ClientValidator;\n\n constructor(ctx: ClientServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new ClientValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Client>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n const {\n data: entities, \n meta, \n } = await this.repository.findMany(query);\n let { total } = meta;\n\n const data: Client[] = [];\n for (const entity of entities) {\n if (\n entity.secret &&\n !entity.secret_encrypted &&\n !entity.secret_hashed\n ) {\n try {\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n data.push(entity);\n } catch {\n total -= 1;\n }\n\n continue;\n }\n\n data.push(entity);\n }\n\n return {\n data,\n meta: {\n ...meta,\n total, \n }, \n };\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n realmId?: string,\n ): Promise<Client> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n let entity: Client | null;\n\n if (isUUID(idOrName)) {\n entity = await this.repository.findOneByIdOrName(idOrName, realmId);\n } else if (realmId) {\n const realm = await this.realmRepository.resolve(realmId);\n if (realm) {\n entity = await this.repository.findOneBy({\n name: idOrName,\n realm_id: realm.id,\n });\n } else {\n entity = null;\n }\n } else {\n entity = await this.repository.findOneByName(idOrName);\n }\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n if (\n entity.secret &&\n !entity.secret_encrypted &&\n !entity.secret_hashed\n ) {\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Client,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realm_id === 'string' ?\n await this.realmRepository.resolve(data.realm_id) :\n undefined;\n\n let entity: Client | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realm_id = realm.id;\n }\n\n entity = await this.repository.findOneWithSecret(where);\n if (!entity && options.updateOnly) {\n throw new NotFoundError();\n }\n } else if (options.updateOnly) {\n throw new NotFoundError();\n }\n\n if (entity) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_UPDATE });\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n await this.repository.validateJoinColumns(validated);\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new ClientCredentialsService();\n\n if (entity) {\n if (\n !validated.realm_id &&\n !entity.realm_id\n ) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n entity = this.repository.merge(entity, validated);\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_UPDATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n if (entity.is_confidential) {\n if (!validated.secret && !entity.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret, entity);\n }\n } else {\n entity.secret = null;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realm_id) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n entity = this.repository.create(validated);\n\n if (entity.is_confidential) {\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity.secret = await credentialsService.protect(validated.secret, validated);\n } else {\n entity.secret = null;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Client> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","isUUID","NotFoundError","ClientValidator","PermissionName","ValidatorGroup","AbstractEntityService","ClientCredentialsService","ClientService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","CLIENT_READ","CLIENT_UPDATE","CLIENT_DELETE","data","entities","meta","findMany","total","entity","secret","secret_encrypted","secret_hashed","evaluateOneOf","input","ATTRIBUTES","push","getOne","idOrName","realmId","permissionNames","isMe","identity","type","id","findOne","create","save","undefined","update","updateOnly","options","group","realm","realm_id","resolve","where","findOneWithSecret","isSelfEdit","preEvaluate","e","CLIENT_SELF_MANAGE","UPDATE","CLIENT_CREATE","CREATE","validated","run","validateJoinColumns","checkUniqueness","credentialsService","actorRealmId","getActorRealmId","evaluate","merge","is_confidential","generateSecret","protect","created","delete","findOneBy","entityId","remove"],"sources":["../../../../src/core/entities/client/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport {\n ClientValidator,\n PermissionName,\n ValidatorGroup,\n} from '@authup/core-kit';\nimport type { Client } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport { ClientCredentialsService } from '../../authentication/credential/entities/client/module.ts';\nimport type { IClientRepository, IClientService } from './types.ts';\n\nexport type ClientServiceContext = {\n repository: IClientRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class ClientService extends AbstractEntityService implements IClientService {\n protected repository: IClientRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: ClientValidator;\n\n constructor(ctx: ClientServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new ClientValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Client>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n const {\n data: entities, \n meta, \n } = await this.repository.findMany(query);\n let { total } = meta;\n\n const data: Client[] = [];\n for (const entity of entities) {\n if (\n entity.secret &&\n !entity.secret_encrypted &&\n !entity.secret_hashed\n ) {\n try {\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n data.push(entity);\n } catch {\n total -= 1;\n }\n\n continue;\n }\n\n data.push(entity);\n }\n\n return {\n data,\n meta: {\n ...meta,\n total, \n }, \n };\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n query?: Record<string, any>,\n realmId?: string,\n ): Promise<Client> {\n const permissionNames = [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ];\n\n let isMe = !!actor.identity &&\n actor.identity.type === 'client' &&\n (\n actor.identity.data.id === idOrName ||\n actor.identity.data.name === idOrName\n );\n\n if (!isMe) {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });\n }\n\n const entity = await this.repository.findOne(idOrName, query, realmId);\n if (!entity) {\n throw new NotFoundError();\n }\n\n if (isMe && actor.identity!.data.id !== entity.id) {\n isMe = false;\n await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });\n }\n\n if (\n !isMe &&\n entity.secret &&\n !entity.secret_encrypted &&\n !entity.secret_hashed\n ) {\n await actor.permissionEvaluator.evaluateOneOf({\n name: permissionNames,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Client> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Client,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realm_id === 'string' ?\n await this.realmRepository.resolve(data.realm_id) :\n undefined;\n\n let entity: Client | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realm_id = realm.id;\n }\n\n entity = await this.repository.findOneWithSecret(where);\n if (!entity && options.updateOnly) {\n throw new NotFoundError();\n }\n } else if (options.updateOnly) {\n throw new NotFoundError();\n }\n\n let isSelfEdit = false;\n if (entity) {\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_UPDATE });\n } catch (e) {\n if (\n !actor.identity ||\n actor.identity.type !== 'client' ||\n actor.identity.data.id !== entity.id\n ) {\n throw e;\n }\n isSelfEdit = true;\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SELF_MANAGE });\n }\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n await this.repository.validateJoinColumns(validated);\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new ClientCredentialsService();\n\n if (entity) {\n if (\n !isSelfEdit &&\n !validated.realm_id &&\n !entity.realm_id\n ) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n if (isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SELF_MANAGE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n }\n\n entity = this.repository.merge(entity, validated);\n\n if (!isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_UPDATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n if (entity.is_confidential) {\n if (!validated.secret && !entity.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret, entity);\n }\n } else {\n entity.secret = null;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realm_id) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n entity = this.repository.create(validated);\n\n if (entity.is_confidential) {\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity.secret = await credentialsService.protect(validated.secret, validated);\n } else {\n entity.secret = null;\n }\n\n await this.repository.save(entity);\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Client> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
@@ -1,13 +1,17 @@
1
- import type { Client } from '@authup/core-kit';
1
+ import type { Client, Role } from '@authup/core-kit';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
2
3
  import type { ActorContext } from '../actor/types.ts';
3
4
  import type { EntityRepositoryFindManyResult, IEntityRepository } from '../types.ts';
4
5
  export interface IClientRepository extends IEntityRepository<Client> {
5
6
  checkUniqueness(data: Partial<Client>, existing?: Client): Promise<void>;
7
+ findOne(id: string, query?: Record<string, any>, realm?: string): Promise<Client | null>;
6
8
  findOneWithSecret(where: Record<string, any>): Promise<Client | null>;
9
+ getBoundRoles(entity: string | Client): Promise<Role[]>;
10
+ getBoundPermissions(entity: string | Client): Promise<PermissionPolicyBinding[]>;
7
11
  }
8
12
  export interface IClientService {
9
13
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<Client>>;
10
- getOne(idOrName: string, actor: ActorContext, realmId?: string): Promise<Client>;
14
+ getOne(idOrName: string, actor: ActorContext, query?: Record<string, any>, realmId?: string): Promise<Client>;
11
15
  create(data: Record<string, any>, actor: ActorContext): Promise<Client>;
12
16
  update(idOrName: string, data: Record<string, any>, actor: ActorContext): Promise<Client>;
13
17
  save(idOrName: string | undefined, data: Record<string, any>, actor: ActorContext, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IAChE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB,CAAC,MAAM,CAAC;IAChE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzF,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,MAAM,CACF,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-scope/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,qBAAsB,YAAW,mBAAmB;IACxF,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;gBAE9B,GAAG,EAAE,yBAAyB;IAMpC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAYjD,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAiBjB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAkCjB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;CAmB1B"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client-scope/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AACxF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,MAAM,yBAAyB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,qBAAsB,YAAW,mBAAmB;IACxF,SAAS,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAE7C,SAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC;gBAE9B,GAAG,EAAE,yBAAyB;IAMpC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC;IAajD,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAkBjB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAkCjB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;CAmB1B"}
@@ -13,6 +13,7 @@ var ClientScopeService = class extends AbstractEntityService {
13
13
  }
14
14
  async getMany(query, actor) {
15
15
  await actor.permissionEvaluator.preEvaluateOneOf({ name: [
16
+ PermissionName.CLIENT_SCOPE_READ,
16
17
  PermissionName.CLIENT_READ,
17
18
  PermissionName.CLIENT_UPDATE,
18
19
  PermissionName.CLIENT_DELETE
@@ -21,6 +22,7 @@ var ClientScopeService = class extends AbstractEntityService {
21
22
  }
22
23
  async getOne(id, actor) {
23
24
  await actor.permissionEvaluator.preEvaluateOneOf({ name: [
25
+ PermissionName.CLIENT_SCOPE_READ,
24
26
  PermissionName.CLIENT_READ,
25
27
  PermissionName.CLIENT_UPDATE,
26
28
  PermissionName.CLIENT_DELETE
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","ConflictError","NotFoundError","ClientScopeValidator","PermissionName","ValidatorGroup","AbstractEntityService","ClientScopeService","repository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","CLIENT_READ","CLIENT_UPDATE","CLIENT_DELETE","findMany","getOne","id","entity","findOneBy","create","data","preEvaluate","CLIENT_SCOPE_CREATE","validated","run","group","CREATE","validateJoinColumns","existing","client_id","scope_id","client","client_realm_id","realm_id","scope","scope_realm_id","evaluate","input","ATTRIBUTES","save","delete","CLIENT_SCOPE_DELETE","entityId","remove"],"sources":["../../../../src/core/entities/client-scope/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { ConflictError, NotFoundError } from '@ebec/http';\nimport { ClientScopeValidator, PermissionName, ValidatorGroup } from '@authup/core-kit';\nimport type { ClientScope } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport type { IClientScopeRepository, IClientScopeService } from './types.ts';\n\nexport type ClientScopeServiceContext = {\n repository: IClientScopeRepository;\n};\n\nexport class ClientScopeService extends AbstractEntityService implements IClientScopeService {\n protected repository: IClientScopeRepository;\n\n protected validator: ClientScopeValidator;\n\n constructor(ctx: ClientScopeServiceContext) {\n super();\n this.repository = ctx.repository;\n this.validator = new ClientScopeValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<ClientScope>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n return this.repository.findMany(query);\n }\n\n async getOne(\n id: string,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SCOPE_CREATE });\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const existing = await this.repository.findOneBy({\n client_id: validated.client_id,\n scope_id: validated.scope_id,\n });\n if (existing) {\n throw new ConflictError('The client-scope assignment already exists.');\n }\n\n if (validated.client) {\n validated.client_realm_id = validated.client.realm_id;\n }\n\n if (validated.scope) {\n validated.scope_realm_id = validated.scope.realm_id;\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SCOPE_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n let entity = this.repository.create(validated);\n entity = await this.repository.save(entity);\n\n return entity;\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SCOPE_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SCOPE_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":";;;;;AAoBA,IAAaQ,qBAAb,cAAwCD,sBAAAA;CAC1BE;CAEAC;CAEV,YAAYC,KAAgC;AACxC,SAAK;AACL,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,YAAY,IAAIN,sBAAAA;;CAGzB,MAAMQ,QACFC,OACAC,OACoD;AACpD,QAAMA,MAAMC,oBAAoBC,iBAAiB,EAC7CC,MAAM;GACFZ,eAAea;GACfb,eAAec;GACfd,eAAee;GAClB,EACL,CAAA;AAEA,SAAO,KAAKX,WAAWY,SAASR,MAAAA;;CAGpC,MAAMS,OACFC,IACAT,OACoB;AACpB,QAAMA,MAAMC,oBAAoBC,iBAAiB,EAC7CC,MAAM;GACFZ,eAAea;GACfb,eAAec;GACfd,eAAee;GAClB,EACL,CAAA;EAEA,MAAMI,SAAS,MAAM,KAAKf,WAAWgB,UAAU,EAAEF,IAAG,CAAA;AACpD,MAAI,CAACC,OACD,OAAM,IAAIrB,eAAAA;AAGd,SAAOqB;;CAGX,MAAME,OACFC,MACAb,OACoB;AACpB,QAAMA,MAAMC,oBAAoBa,YAAY,EAAEX,MAAMZ,eAAewB,qBAAoB,CAAA;EAEvF,MAAMC,YAAY,MAAM,KAAKpB,UAAUqB,IAAIJ,MAAM,EAAEK,OAAO1B,eAAe2B,QAAO,CAAA;AAEhF,QAAM,KAAKxB,WAAWyB,oBAAoBJ,UAAAA;AAM1C,MAAIK,MAJmB,KAAK1B,WAAWgB,UAAU;GAC7CW,WAAWN,UAAUM;GACrBC,UAAUP,UAAUO;GACxB,CAAA,CAEI,OAAM,IAAInC,cAAc,8CAAA;AAG5B,MAAI4B,UAAUQ,OACVR,WAAUS,kBAAkBT,UAAUQ,OAAOE;AAGjD,MAAIV,UAAUW,MACVX,WAAUY,iBAAiBZ,UAAUW,MAAMD;AAG/C,QAAM1B,MAAMC,oBAAoB4B,SAAS;GACrC1B,MAAMZ,eAAewB;GACrBe,OAAO,IAAI3C,WAAW,GAAGD,kBAAkB6C,aAAaf,WAAU,CAAA;GACtE,CAAA;EAEA,IAAIN,SAAS,KAAKf,WAAWiB,OAAOI,UAAAA;AACpCN,WAAS,MAAM,KAAKf,WAAWqC,KAAKtB,OAAAA;AAEpC,SAAOA;;CAGX,MAAMuB,OACFxB,IACAT,OACoB;AACpB,QAAMA,MAAMC,oBAAoBa,YAAY,EAAEX,MAAMZ,eAAe2C,qBAAoB,CAAA;EAEvF,MAAMxB,SAAS,MAAM,KAAKf,WAAWgB,UAAU,EAAEF,IAAG,CAAA;AACpD,MAAI,CAACC,OACD,OAAM,IAAIrB,eAAAA;AAGd,QAAMW,MAAMC,oBAAoB4B,SAAS;GACrC1B,MAAMZ,eAAe2C;GACrBJ,OAAO,IAAI3C,WAAW,GAAGD,kBAAkB6C,aAAarB,QAAO,CAAA;GACnE,CAAA;EAEA,MAAM,EAAED,IAAI0B,aAAazB;AACzB,QAAM,KAAKf,WAAWyC,OAAO1B,OAAAA;AAC7BA,SAAOD,KAAK0B;AAEZ,SAAOzB"}
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","ConflictError","NotFoundError","ClientScopeValidator","PermissionName","ValidatorGroup","AbstractEntityService","ClientScopeService","repository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","CLIENT_SCOPE_READ","CLIENT_READ","CLIENT_UPDATE","CLIENT_DELETE","findMany","getOne","id","entity","findOneBy","create","data","preEvaluate","CLIENT_SCOPE_CREATE","validated","run","group","CREATE","validateJoinColumns","existing","client_id","scope_id","client","client_realm_id","realm_id","scope","scope_realm_id","evaluate","input","ATTRIBUTES","save","delete","CLIENT_SCOPE_DELETE","entityId","remove"],"sources":["../../../../src/core/entities/client-scope/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { ConflictError, NotFoundError } from '@ebec/http';\nimport { ClientScopeValidator, PermissionName, ValidatorGroup } from '@authup/core-kit';\nimport type { ClientScope } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport type { IClientScopeRepository, IClientScopeService } from './types.ts';\n\nexport type ClientScopeServiceContext = {\n repository: IClientScopeRepository;\n};\n\nexport class ClientScopeService extends AbstractEntityService implements IClientScopeService {\n protected repository: IClientScopeRepository;\n\n protected validator: ClientScopeValidator;\n\n constructor(ctx: ClientScopeServiceContext) {\n super();\n this.repository = ctx.repository;\n this.validator = new ClientScopeValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<ClientScope>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_SCOPE_READ,\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n return this.repository.findMany(query);\n }\n\n async getOne(\n id: string,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.CLIENT_SCOPE_READ,\n PermissionName.CLIENT_READ,\n PermissionName.CLIENT_UPDATE,\n PermissionName.CLIENT_DELETE,\n ],\n });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SCOPE_CREATE });\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const existing = await this.repository.findOneBy({\n client_id: validated.client_id,\n scope_id: validated.scope_id,\n });\n if (existing) {\n throw new ConflictError('The client-scope assignment already exists.');\n }\n\n if (validated.client) {\n validated.client_realm_id = validated.client.realm_id;\n }\n\n if (validated.scope) {\n validated.scope_realm_id = validated.scope.realm_id;\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SCOPE_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n let entity = this.repository.create(validated);\n entity = await this.repository.save(entity);\n\n return entity;\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<ClientScope> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.CLIENT_SCOPE_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.CLIENT_SCOPE_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":";;;;;AAoBA,IAAaQ,qBAAb,cAAwCD,sBAAAA;CAC1BE;CAEAC;CAEV,YAAYC,KAAgC;AACxC,SAAK;AACL,OAAKF,aAAaE,IAAIF;AACtB,OAAKC,YAAY,IAAIN,sBAAAA;;CAGzB,MAAMQ,QACFC,OACAC,OACoD;AACpD,QAAMA,MAAMC,oBAAoBC,iBAAiB,EAC7CC,MAAM;GACFZ,eAAea;GACfb,eAAec;GACfd,eAAee;GACff,eAAegB;GAClB,EACL,CAAA;AAEA,SAAO,KAAKZ,WAAWa,SAAST,MAAAA;;CAGpC,MAAMU,OACFC,IACAV,OACoB;AACpB,QAAMA,MAAMC,oBAAoBC,iBAAiB,EAC7CC,MAAM;GACFZ,eAAea;GACfb,eAAec;GACfd,eAAee;GACff,eAAegB;GAClB,EACL,CAAA;EAEA,MAAMI,SAAS,MAAM,KAAKhB,WAAWiB,UAAU,EAAEF,IAAG,CAAA;AACpD,MAAI,CAACC,OACD,OAAM,IAAItB,eAAAA;AAGd,SAAOsB;;CAGX,MAAME,OACFC,MACAd,OACoB;AACpB,QAAMA,MAAMC,oBAAoBc,YAAY,EAAEZ,MAAMZ,eAAeyB,qBAAoB,CAAA;EAEvF,MAAMC,YAAY,MAAM,KAAKrB,UAAUsB,IAAIJ,MAAM,EAAEK,OAAO3B,eAAe4B,QAAO,CAAA;AAEhF,QAAM,KAAKzB,WAAW0B,oBAAoBJ,UAAAA;AAM1C,MAAIK,MAJmB,KAAK3B,WAAWiB,UAAU;GAC7CW,WAAWN,UAAUM;GACrBC,UAAUP,UAAUO;GACxB,CAAA,CAEI,OAAM,IAAIpC,cAAc,8CAAA;AAG5B,MAAI6B,UAAUQ,OACVR,WAAUS,kBAAkBT,UAAUQ,OAAOE;AAGjD,MAAIV,UAAUW,MACVX,WAAUY,iBAAiBZ,UAAUW,MAAMD;AAG/C,QAAM3B,MAAMC,oBAAoB6B,SAAS;GACrC3B,MAAMZ,eAAeyB;GACrBe,OAAO,IAAI5C,WAAW,GAAGD,kBAAkB8C,aAAaf,WAAU,CAAA;GACtE,CAAA;EAEA,IAAIN,SAAS,KAAKhB,WAAWkB,OAAOI,UAAAA;AACpCN,WAAS,MAAM,KAAKhB,WAAWsC,KAAKtB,OAAAA;AAEpC,SAAOA;;CAGX,MAAMuB,OACFxB,IACAV,OACoB;AACpB,QAAMA,MAAMC,oBAAoBc,YAAY,EAAEZ,MAAMZ,eAAe4C,qBAAoB,CAAA;EAEvF,MAAMxB,SAAS,MAAM,KAAKhB,WAAWiB,UAAU,EAAEF,IAAG,CAAA;AACpD,MAAI,CAACC,OACD,OAAM,IAAItB,eAAAA;AAGd,QAAMW,MAAMC,oBAAoB6B,SAAS;GACrC3B,MAAMZ,eAAe4C;GACrBJ,OAAO,IAAI5C,WAAW,GAAGD,kBAAkB8C,aAAarB,QAAO,CAAA;GACnE,CAAA;EAEA,MAAM,EAAED,IAAI0B,aAAazB;AACzB,QAAM,KAAKhB,WAAW0C,OAAO1B,OAAAA;AAC7BA,SAAOD,KAAK0B;AAEZ,SAAOzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/identity-provider-role-mapping/service.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,oCAAoC,EAAkC,MAAM,kBAAkB,CAAC;AACxG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,KAAK,EAAE,sCAAsC,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAE9G,MAAM,MAAM,yCAAyC,GAAG;IACpD,UAAU,EAAE,sCAAsC,CAAC;IACnD,0BAA0B,EAAE,2BAA2B,CAAC;CAC3D,CAAC;AAEF,qBAAa,kCAAmC,SAAQ,qBAAsB,YAAW,mCAAmC;IACxH,SAAS,CAAC,UAAU,EAAE,sCAAsC,CAAC;IAE7D,SAAS,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;IAElE,SAAS,CAAC,SAAS,EAAE,oCAAoC,CAAC;gBAE9C,GAAG,EAAE,yCAAyC;IAOpD,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,2BAA2B,CAAC,CAAC;IAYjE,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IAiBjC,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IA2DjC,MAAM,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IAsBjC,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;CAmB1C"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/identity-provider-role-mapping/service.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,oCAAoC,EAAkC,MAAM,kBAAkB,CAAC;AACxG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,KAAK,EAAE,sCAAsC,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAE9G,MAAM,MAAM,yCAAyC,GAAG;IACpD,UAAU,EAAE,sCAAsC,CAAC;IACnD,0BAA0B,EAAE,2BAA2B,CAAC;CAC3D,CAAC;AAEF,qBAAa,kCAAmC,SAAQ,qBAAsB,YAAW,mCAAmC;IACxH,SAAS,CAAC,UAAU,EAAE,sCAAsC,CAAC;IAE7D,SAAS,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;IAElE,SAAS,CAAC,SAAS,EAAE,oCAAoC,CAAC;gBAE9C,GAAG,EAAE,yCAAyC;IAOpD,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,2BAA2B,CAAC,CAAC;IAajE,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IAkBjC,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IA2DjC,MAAM,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;IAsBjC,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,2BAA2B,CAAC;CAmB1C"}
@@ -15,6 +15,7 @@ var IdentityProviderRoleMappingService = class extends AbstractEntityService {
15
15
  }
16
16
  async getMany(query, actor) {
17
17
  await actor.permissionEvaluator.preEvaluateOneOf({ name: [
18
+ PermissionName.IDENTITY_PROVIDER_ROLE_READ,
18
19
  PermissionName.IDENTITY_PROVIDER_READ,
19
20
  PermissionName.IDENTITY_PROVIDER_UPDATE,
20
21
  PermissionName.IDENTITY_PROVIDER_DELETE
@@ -23,6 +24,7 @@ var IdentityProviderRoleMappingService = class extends AbstractEntityService {
23
24
  }
24
25
  async getOne(id, actor) {
25
26
  await actor.permissionEvaluator.preEvaluateOneOf({ name: [
27
+ PermissionName.IDENTITY_PROVIDER_ROLE_READ,
26
28
  PermissionName.IDENTITY_PROVIDER_READ,
27
29
  PermissionName.IDENTITY_PROVIDER_UPDATE,
28
30
  PermissionName.IDENTITY_PROVIDER_DELETE
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","BadRequestError","ConflictError","ForbiddenError","NotFoundError","IdentityProviderRoleMappingValidator","PermissionName","ValidatorGroup","AbstractEntityService","IdentityProviderRoleMappingService","repository","identityPermissionProvider","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","IDENTITY_PROVIDER_READ","IDENTITY_PROVIDER_UPDATE","IDENTITY_PROVIDER_DELETE","findMany","getOne","id","entity","findOneBy","create","data","preEvaluate","IDENTITY_PROVIDER_ROLE_CREATE","validated","run","group","CREATE","validateJoinColumns","existing","provider_id","role_id","provider","provider_realm_id","realm_id","role","role_realm_id","identity","hasPermissions","isSuperset","type","clientId","client_id","evaluate","input","ATTRIBUTES","save","update","IDENTITY_PROVIDER_ROLE_UPDATE","UPDATE","merged","merge","delete","IDENTITY_PROVIDER_ROLE_DELETE","entityId","remove"],"sources":["../../../../src/core/entities/identity-provider-role-mapping/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { \n BadRequestError, \n ConflictError, \n ForbiddenError, \n NotFoundError, \n} from '@ebec/http';\nimport { IdentityProviderRoleMappingValidator, PermissionName, ValidatorGroup } from '@authup/core-kit';\nimport type { IdentityProviderRoleMapping } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport type { IIdentityPermissionProvider } from '../../identity/permission/types.ts';\nimport type { IIdentityProviderRoleMappingRepository, IIdentityProviderRoleMappingService } from './types.ts';\n\nexport type IdentityProviderRoleMappingServiceContext = {\n repository: IIdentityProviderRoleMappingRepository;\n identityPermissionProvider: IIdentityPermissionProvider;\n};\n\nexport class IdentityProviderRoleMappingService extends AbstractEntityService implements IIdentityProviderRoleMappingService {\n protected repository: IIdentityProviderRoleMappingRepository;\n\n protected identityPermissionProvider: IIdentityPermissionProvider;\n\n protected validator: IdentityProviderRoleMappingValidator;\n\n constructor(ctx: IdentityProviderRoleMappingServiceContext) {\n super();\n this.repository = ctx.repository;\n this.identityPermissionProvider = ctx.identityPermissionProvider;\n this.validator = new IdentityProviderRoleMappingValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<IdentityProviderRoleMapping>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.IDENTITY_PROVIDER_READ,\n PermissionName.IDENTITY_PROVIDER_UPDATE,\n PermissionName.IDENTITY_PROVIDER_DELETE,\n ],\n });\n\n return this.repository.findMany(query);\n }\n\n async getOne(\n id: string,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.IDENTITY_PROVIDER_READ,\n PermissionName.IDENTITY_PROVIDER_UPDATE,\n PermissionName.IDENTITY_PROVIDER_DELETE,\n ],\n });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_CREATE });\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const existing = await this.repository.findOneBy({\n provider_id: validated.provider_id,\n role_id: validated.role_id,\n });\n if (existing) {\n throw new ConflictError('The identity-provider-role-mapping already exists.');\n }\n\n if (validated.provider) {\n validated.provider_realm_id = validated.provider.realm_id;\n }\n\n if (validated.role) {\n validated.role_realm_id = validated.role.realm_id;\n }\n\n if (\n validated.role_realm_id &&\n validated.provider_realm_id &&\n validated.role_realm_id !== validated.provider_realm_id\n ) {\n throw new BadRequestError('It is not possible to map an identity provider to a role of another realm.');\n }\n\n if (validated.role && actor.identity) {\n const hasPermissions = await this.identityPermissionProvider.isSuperset(\n {\n type: actor.identity.type,\n id: actor.identity.data.id,\n },\n {\n type: 'role',\n id: validated.role_id,\n clientId: validated.role.client_id,\n },\n );\n if (!hasPermissions) {\n throw new ForbiddenError('You don\\'t own the required permissions.');\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n let entity = this.repository.create(validated);\n entity = await this.repository.save(entity);\n\n return entity;\n }\n\n async update(\n id: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_UPDATE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.UPDATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const merged = this.repository.merge(entity, validated);\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_UPDATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: merged }),\n });\n\n return this.repository.save(merged);\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","BadRequestError","ConflictError","ForbiddenError","NotFoundError","IdentityProviderRoleMappingValidator","PermissionName","ValidatorGroup","AbstractEntityService","IdentityProviderRoleMappingService","repository","identityPermissionProvider","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","IDENTITY_PROVIDER_ROLE_READ","IDENTITY_PROVIDER_READ","IDENTITY_PROVIDER_UPDATE","IDENTITY_PROVIDER_DELETE","findMany","getOne","id","entity","findOneBy","create","data","preEvaluate","IDENTITY_PROVIDER_ROLE_CREATE","validated","run","group","CREATE","validateJoinColumns","existing","provider_id","role_id","provider","provider_realm_id","realm_id","role","role_realm_id","identity","hasPermissions","isSuperset","type","clientId","client_id","evaluate","input","ATTRIBUTES","save","update","IDENTITY_PROVIDER_ROLE_UPDATE","UPDATE","merged","merge","delete","IDENTITY_PROVIDER_ROLE_DELETE","entityId","remove"],"sources":["../../../../src/core/entities/identity-provider-role-mapping/service.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { \n BadRequestError, \n ConflictError, \n ForbiddenError, \n NotFoundError, \n} from '@ebec/http';\nimport { IdentityProviderRoleMappingValidator, PermissionName, ValidatorGroup } from '@authup/core-kit';\nimport type { IdentityProviderRoleMapping } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport type { IIdentityPermissionProvider } from '../../identity/permission/types.ts';\nimport type { IIdentityProviderRoleMappingRepository, IIdentityProviderRoleMappingService } from './types.ts';\n\nexport type IdentityProviderRoleMappingServiceContext = {\n repository: IIdentityProviderRoleMappingRepository;\n identityPermissionProvider: IIdentityPermissionProvider;\n};\n\nexport class IdentityProviderRoleMappingService extends AbstractEntityService implements IIdentityProviderRoleMappingService {\n protected repository: IIdentityProviderRoleMappingRepository;\n\n protected identityPermissionProvider: IIdentityPermissionProvider;\n\n protected validator: IdentityProviderRoleMappingValidator;\n\n constructor(ctx: IdentityProviderRoleMappingServiceContext) {\n super();\n this.repository = ctx.repository;\n this.identityPermissionProvider = ctx.identityPermissionProvider;\n this.validator = new IdentityProviderRoleMappingValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<IdentityProviderRoleMapping>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.IDENTITY_PROVIDER_ROLE_READ,\n PermissionName.IDENTITY_PROVIDER_READ,\n PermissionName.IDENTITY_PROVIDER_UPDATE,\n PermissionName.IDENTITY_PROVIDER_DELETE,\n ],\n });\n\n return this.repository.findMany(query);\n }\n\n async getOne(\n id: string,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.IDENTITY_PROVIDER_ROLE_READ,\n PermissionName.IDENTITY_PROVIDER_READ,\n PermissionName.IDENTITY_PROVIDER_UPDATE,\n PermissionName.IDENTITY_PROVIDER_DELETE,\n ],\n });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_CREATE });\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.CREATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const existing = await this.repository.findOneBy({\n provider_id: validated.provider_id,\n role_id: validated.role_id,\n });\n if (existing) {\n throw new ConflictError('The identity-provider-role-mapping already exists.');\n }\n\n if (validated.provider) {\n validated.provider_realm_id = validated.provider.realm_id;\n }\n\n if (validated.role) {\n validated.role_realm_id = validated.role.realm_id;\n }\n\n if (\n validated.role_realm_id &&\n validated.provider_realm_id &&\n validated.role_realm_id !== validated.provider_realm_id\n ) {\n throw new BadRequestError('It is not possible to map an identity provider to a role of another realm.');\n }\n\n if (validated.role && actor.identity) {\n const hasPermissions = await this.identityPermissionProvider.isSuperset(\n {\n type: actor.identity.type,\n id: actor.identity.data.id,\n },\n {\n type: 'role',\n id: validated.role_id,\n clientId: validated.role.client_id,\n },\n );\n if (!hasPermissions) {\n throw new ForbiddenError('You don\\'t own the required permissions.');\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n let entity = this.repository.create(validated);\n entity = await this.repository.save(entity);\n\n return entity;\n }\n\n async update(\n id: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_UPDATE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n const validated = await this.validator.run(data, { group: ValidatorGroup.UPDATE });\n\n await this.repository.validateJoinColumns(validated);\n\n const merged = this.repository.merge(entity, validated);\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_UPDATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: merged }),\n });\n\n return this.repository.save(merged);\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<IdentityProviderRoleMapping> {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.IDENTITY_PROVIDER_ROLE_DELETE });\n\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.IDENTITY_PROVIDER_ROLE_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { AbstractEntityService } from "../service.mjs";
2
2
  import { PermissionName, PermissionValidator, ROLE_ADMIN_NAME, ROLE_REALM_ADMIN_NAME, ValidatorGroup } from "@authup/core-kit";
3
- import { BuiltInPolicyType, PolicyData, SystemPolicyName } from "@authup/access";
4
3
  import { isPropertySet, isUUID } from "@authup/kit";
4
+ import { BuiltInPolicyType, PolicyData, SystemPolicyName } from "@authup/access";
5
5
  import { BadRequestError, NotFoundError } from "@ebec/http";
6
6
  import { AuthupError } from "@authup/errors";
7
7
  //#region src/core/entities/permission/service.ts
@@ -1,5 +1,5 @@
1
- import { AttributeNamesPolicyValidator, AttributesPolicyValidator, BuiltInPolicyType, DatePolicyValidator, TimePolicyValidator } from "@authup/access";
2
1
  import { omitRecord } from "@authup/kit";
2
+ import { AttributeNamesPolicyValidator, AttributesPolicyValidator, BuiltInPolicyType, DatePolicyValidator, TimePolicyValidator } from "@authup/access";
3
3
  import { Container } from "validup";
4
4
  //#region src/core/entities/policy/attributes-validator.ts
5
5
  var PolicyAttributesValidator = class extends Container {
@@ -1,8 +1,8 @@
1
1
  import { AbstractEntityService } from "../service.mjs";
2
2
  import { PolicyAttributesValidator } from "./attributes-validator.mjs";
3
3
  import { PermissionName, PolicyValidator, ValidatorGroup } from "@authup/core-kit";
4
- import { BuiltInPolicyType, PolicyData } from "@authup/access";
5
4
  import { extendObject, isPropertySet, isUUID, removeObjectProperty } from "@authup/kit";
5
+ import { BuiltInPolicyType, PolicyData } from "@authup/access";
6
6
  import { BadRequestError, NotFoundError } from "@ebec/http";
7
7
  //#region src/core/entities/policy/service.ts
8
8
  var PolicyService = class extends AbstractEntityService {
@@ -1,7 +1,7 @@
1
1
  import { AbstractEntityService } from "../service.mjs";
2
2
  import { PermissionName, REALM_MASTER_NAME, RealmValidator, ValidatorGroup } from "@authup/core-kit";
3
- import { BuiltInPolicyType, PolicyData } from "@authup/access";
4
3
  import { isPropertySet, isUUID } from "@authup/kit";
4
+ import { BuiltInPolicyType, PolicyData } from "@authup/access";
5
5
  import { BadRequestError, NotFoundError } from "@ebec/http";
6
6
  //#region src/core/entities/realm/service.ts
7
7
  var RealmService = class extends AbstractEntityService {
@@ -15,7 +15,7 @@ export declare class RobotService extends AbstractEntityService implements IRobo
15
15
  protected validator: RobotValidator;
16
16
  constructor(ctx: RobotServiceContext);
17
17
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<Robot>>;
18
- getOne(idOrName: string, actor: ActorContext, realmId?: string): Promise<Robot>;
18
+ getOne(idOrName: string, actor: ActorContext, query?: Record<string, any>, realmId?: string): Promise<Robot>;
19
19
  create(data: Record<string, any>, actor: ActorContext): Promise<Robot>;
20
20
  update(idOrName: string, data: Record<string, any>, actor: ActorContext): Promise<Robot>;
21
21
  save(idOrName: string | undefined, data: Record<string, any>, actor: ActorContext, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/robot/service.ts"],"names":[],"mappings":"AAUA,OAAO,EAEH,cAAc,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,qBAAa,YAAa,SAAQ,qBAAsB,YAAW,aAAa;IAC5E,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEvC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;gBAExB,GAAG,EAAE,mBAAmB;IAO9B,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAoD3C,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;IAwCX,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;IAKX,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;IAKX,IAAI,CACN,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GACvC,OAAO,CAAC;QACP,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC;IAmGI,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;CA0BpB"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/robot/service.ts"],"names":[],"mappings":"AAUA,OAAO,EAEH,cAAc,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,eAAe,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,qBAAa,YAAa,SAAQ,qBAAsB,YAAW,aAAa;IAC5E,SAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAEvC,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;gBAExB,GAAG,EAAE,mBAAmB;IAO9B,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC;IAoD3C,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC;IAsCX,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;IAKX,MAAM,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;IAKX,IAAI,CACN,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GACvC,OAAO,CAAC;QACP,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC;IAuHI,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,KAAK,CAAC;CA0CpB"}
@@ -1,8 +1,8 @@
1
1
  import { RobotCredentialsService } from "../../authentication/credential/entities/robot/module.mjs";
2
2
  import { AbstractEntityService } from "../service.mjs";
3
3
  import { PermissionName, RobotValidator, ValidatorGroup } from "@authup/core-kit";
4
- import { BuiltInPolicyType, PolicyData } from "@authup/access";
5
4
  import { isUUID } from "@authup/kit";
5
+ import { BuiltInPolicyType, PolicyData } from "@authup/access";
6
6
  import { NotFoundError } from "@ebec/http";
7
7
  //#region src/core/entities/robot/service.ts
8
8
  var RobotService = class extends AbstractEntityService {
@@ -51,28 +51,22 @@ var RobotService = class extends AbstractEntityService {
51
51
  }
52
52
  };
53
53
  }
54
- async getOne(idOrName, actor, realmId) {
55
- await actor.permissionEvaluator.preEvaluateOneOf({ name: [
54
+ async getOne(idOrName, actor, query, realmId) {
55
+ const permissionNames = [
56
56
  PermissionName.ROBOT_READ,
57
57
  PermissionName.ROBOT_UPDATE,
58
58
  PermissionName.ROBOT_DELETE
59
- ] });
60
- let entity;
61
- if (isUUID(idOrName)) entity = await this.repository.findOneById(idOrName);
62
- else if (realmId) {
63
- const realm = await this.realmRepository.resolve(realmId);
64
- entity = realm ? await this.repository.findOneBy({
65
- name: idOrName,
66
- realm_id: realm.id
67
- }) : null;
68
- } else entity = await this.repository.findOneByName(idOrName);
59
+ ];
60
+ let isMe = !!actor.identity && actor.identity.type === "robot" && (actor.identity.data.id === idOrName || actor.identity.data.name === idOrName);
61
+ if (!isMe) await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });
62
+ const entity = await this.repository.findOne(idOrName, query, realmId);
69
63
  if (!entity) throw new NotFoundError();
70
- await actor.permissionEvaluator.evaluateOneOf({
71
- name: [
72
- PermissionName.ROBOT_READ,
73
- PermissionName.ROBOT_UPDATE,
74
- PermissionName.ROBOT_DELETE
75
- ],
64
+ if (isMe && actor.identity.data.id !== entity.id) {
65
+ isMe = false;
66
+ await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });
67
+ }
68
+ if (!isMe) await actor.permissionEvaluator.evaluateOneOf({
69
+ name: permissionNames,
76
70
  input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity })
77
71
  });
78
72
  return entity;
@@ -97,8 +91,15 @@ var RobotService = class extends AbstractEntityService {
97
91
  entity = await this.repository.findOneBy(where);
98
92
  if (!entity && options.updateOnly) throw new NotFoundError();
99
93
  } else if (options.updateOnly) throw new NotFoundError();
94
+ let isSelfEdit = false;
100
95
  if (entity) {
101
- await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_UPDATE });
96
+ try {
97
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_UPDATE });
98
+ } catch (e) {
99
+ if (!actor.identity || actor.identity.type !== "robot" || actor.identity.data.id !== entity.id) throw e;
100
+ isSelfEdit = true;
101
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_SELF_MANAGE });
102
+ }
102
103
  group = ValidatorGroup.UPDATE;
103
104
  } else {
104
105
  await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_CREATE });
@@ -109,7 +110,11 @@ var RobotService = class extends AbstractEntityService {
109
110
  await this.repository.checkUniqueness(validated, entity || void 0);
110
111
  const credentialsService = new RobotCredentialsService();
111
112
  if (entity) {
112
- await actor.permissionEvaluator.evaluate({
113
+ if (isSelfEdit) await actor.permissionEvaluator.evaluate({
114
+ name: PermissionName.ROBOT_SELF_MANAGE,
115
+ input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated })
116
+ });
117
+ else await actor.permissionEvaluator.evaluate({
113
118
  name: PermissionName.ROBOT_UPDATE,
114
119
  input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: {
115
120
  ...entity,
@@ -146,13 +151,23 @@ var RobotService = class extends AbstractEntityService {
146
151
  async delete(id, actor) {
147
152
  const entity = await this.repository.findOneBy({ id });
148
153
  if (!entity) throw new NotFoundError();
149
- if (!(entity.user_id && actor.identity && actor.identity.type === "user" && actor.identity.data.id === entity.user_id)) {
154
+ const isOwner = entity.user_id && actor.identity && actor.identity.type === "user" && actor.identity.data.id === entity.user_id;
155
+ let isSelfDelete = false;
156
+ try {
150
157
  await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_DELETE });
151
- await actor.permissionEvaluator.evaluate({
152
- name: PermissionName.ROBOT_DELETE,
153
- input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity })
154
- });
158
+ } catch (e) {
159
+ if (!isOwner) throw e;
160
+ isSelfDelete = true;
161
+ await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_SELF_MANAGE });
155
162
  }
163
+ if (isSelfDelete) await actor.permissionEvaluator.evaluate({
164
+ name: PermissionName.ROBOT_SELF_MANAGE,
165
+ input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: {} })
166
+ });
167
+ else await actor.permissionEvaluator.evaluate({
168
+ name: PermissionName.ROBOT_DELETE,
169
+ input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity })
170
+ });
156
171
  const { id: entityId } = entity;
157
172
  await this.repository.remove(entity);
158
173
  entity.id = entityId;
@@ -1 +1 @@
1
- {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","isUUID","NotFoundError","PermissionName","RobotValidator","ValidatorGroup","AbstractEntityService","RobotCredentialsService","RobotService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","ROBOT_READ","ROBOT_UPDATE","ROBOT_DELETE","data","entities","meta","findMany","total","entity","identity","type","id","push","evaluateOneOf","input","ATTRIBUTES","getOne","idOrName","realmId","findOneById","realm","resolve","findOneBy","realm_id","findOneByName","create","save","undefined","update","updateOnly","options","group","where","preEvaluate","UPDATE","ROBOT_CREATE","CREATE","validated","run","validateJoinColumns","checkUniqueness","credentialsService","evaluate","merge","secret","protect","created","actorRealmId","getActorRealmId","generateSecret","delete","isOwner","user_id","entityId","remove"],"sources":["../../../../src/core/entities/robot/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport {\n PermissionName,\n RobotValidator,\n ValidatorGroup,\n} from '@authup/core-kit';\nimport type { Robot } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport { RobotCredentialsService } from '../../authentication/credential/entities/robot/module.ts';\nimport type { IRobotRepository, IRobotService } from './types.ts';\n\nexport type RobotServiceContext = {\n repository: IRobotRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class RobotService extends AbstractEntityService implements IRobotService {\n protected repository: IRobotRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: RobotValidator;\n\n constructor(ctx: RobotServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new RobotValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Robot>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n });\n\n const {\n data: entities, \n meta, \n } = await this.repository.findMany(query);\n\n const data: Robot[] = [];\n let { total } = meta;\n\n for (const entity of entities) {\n if (\n actor.identity &&\n actor.identity.type === 'robot' &&\n actor.identity.data.id === entity.id\n ) {\n data.push(entity);\n continue;\n }\n\n try {\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n data.push(entity);\n } catch {\n total -= 1;\n }\n }\n\n return {\n data,\n meta: {\n ...meta,\n total, \n }, \n };\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n realmId?: string,\n ): Promise<Robot> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n });\n\n let entity: Robot | null;\n if (isUUID(idOrName)) {\n entity = await this.repository.findOneById(idOrName);\n } else if (realmId) {\n const realm = await this.realmRepository.resolve(realmId);\n entity = realm ?\n await this.repository.findOneBy({\n name: idOrName,\n realm_id: realm.id, \n }) :\n null;\n } else {\n entity = await this.repository.findOneByName(idOrName);\n }\n\n if (!entity) {\n throw new NotFoundError();\n }\n\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Robot> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Robot> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Robot,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realm_id === 'string' ?\n await this.realmRepository.resolve(data.realm_id) :\n undefined;\n\n let entity: Robot | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realm_id = realm.id;\n }\n\n entity = await this.repository.findOneBy(where);\n if (!entity && options.updateOnly) {\n throw new NotFoundError();\n }\n } else if (options.updateOnly) {\n throw new NotFoundError();\n }\n\n if (entity) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_UPDATE });\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n await this.repository.validateJoinColumns(validated);\n\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new RobotCredentialsService();\n\n if (entity) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_UPDATE,\n input: new PolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: {\n ...entity,\n ...validated,\n },\n }),\n });\n\n entity = this.repository.merge(entity, validated);\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret);\n }\n\n await this.repository.save(entity);\n\n if (validated.secret) {\n entity.secret = validated.secret;\n }\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realm_id) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity = this.repository.create(validated);\n entity.secret = await credentialsService.protect(validated.secret);\n await this.repository.save(entity);\n entity.secret = validated.secret;\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Robot> {\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n const isOwner = entity.user_id &&\n actor.identity &&\n actor.identity.type === 'user' &&\n actor.identity.data.id === entity.user_id;\n\n if (!isOwner) {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_DELETE });\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"service.mjs","names":["BuiltInPolicyType","PolicyData","isUUID","NotFoundError","PermissionName","RobotValidator","ValidatorGroup","AbstractEntityService","RobotCredentialsService","RobotService","repository","realmRepository","validator","ctx","getMany","query","actor","permissionEvaluator","preEvaluateOneOf","name","ROBOT_READ","ROBOT_UPDATE","ROBOT_DELETE","data","entities","meta","findMany","total","entity","identity","type","id","push","evaluateOneOf","input","ATTRIBUTES","getOne","idOrName","realmId","permissionNames","isMe","findOne","create","save","undefined","update","updateOnly","options","group","realm","realm_id","resolve","where","findOneBy","isSelfEdit","preEvaluate","e","ROBOT_SELF_MANAGE","UPDATE","ROBOT_CREATE","CREATE","validated","run","validateJoinColumns","checkUniqueness","credentialsService","evaluate","merge","secret","protect","created","actorRealmId","getActorRealmId","generateSecret","delete","isOwner","user_id","isSelfDelete","entityId","remove"],"sources":["../../../../src/core/entities/robot/service.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 { BuiltInPolicyType, PolicyData } from '@authup/access';\nimport { isUUID } from '@authup/kit';\nimport { NotFoundError } from '@ebec/http';\nimport {\n PermissionName,\n RobotValidator,\n ValidatorGroup,\n} from '@authup/core-kit';\nimport type { Robot } from '@authup/core-kit';\nimport type { ActorContext } from '../actor/types.ts';\nimport type { IRealmRepository } from '../realm/types.ts';\nimport { AbstractEntityService } from '../service.ts';\nimport type { EntityRepositoryFindManyResult } from '../types.ts';\nimport { RobotCredentialsService } from '../../authentication/credential/entities/robot/module.ts';\nimport type { IRobotRepository, IRobotService } from './types.ts';\n\nexport type RobotServiceContext = {\n repository: IRobotRepository;\n realmRepository: IRealmRepository;\n};\n\nexport class RobotService extends AbstractEntityService implements IRobotService {\n protected repository: IRobotRepository;\n\n protected realmRepository: IRealmRepository;\n\n protected validator: RobotValidator;\n\n constructor(ctx: RobotServiceContext) {\n super();\n this.repository = ctx.repository;\n this.realmRepository = ctx.realmRepository;\n this.validator = new RobotValidator();\n }\n\n async getMany(\n query: Record<string, any>,\n actor: ActorContext,\n ): Promise<EntityRepositoryFindManyResult<Robot>> {\n await actor.permissionEvaluator.preEvaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n });\n\n const {\n data: entities, \n meta, \n } = await this.repository.findMany(query);\n\n const data: Robot[] = [];\n let { total } = meta;\n\n for (const entity of entities) {\n if (\n actor.identity &&\n actor.identity.type === 'robot' &&\n actor.identity.data.id === entity.id\n ) {\n data.push(entity);\n continue;\n }\n\n try {\n await actor.permissionEvaluator.evaluateOneOf({\n name: [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ],\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n\n data.push(entity);\n } catch {\n total -= 1;\n }\n }\n\n return {\n data,\n meta: {\n ...meta,\n total, \n }, \n };\n }\n\n async getOne(\n idOrName: string,\n actor: ActorContext,\n query?: Record<string, any>,\n realmId?: string,\n ): Promise<Robot> {\n const permissionNames = [\n PermissionName.ROBOT_READ,\n PermissionName.ROBOT_UPDATE,\n PermissionName.ROBOT_DELETE,\n ];\n\n let isMe = !!actor.identity &&\n actor.identity.type === 'robot' &&\n (\n actor.identity.data.id === idOrName ||\n actor.identity.data.name === idOrName\n );\n\n if (!isMe) {\n await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });\n }\n\n const entity = await this.repository.findOne(idOrName, query, realmId);\n if (!entity) {\n throw new NotFoundError();\n }\n\n if (isMe && actor.identity!.data.id !== entity.id) {\n isMe = false;\n await actor.permissionEvaluator.preEvaluateOneOf({ name: permissionNames });\n }\n\n if (!isMe) {\n await actor.permissionEvaluator.evaluateOneOf({\n name: permissionNames,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n return entity;\n }\n\n async create(\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Robot> {\n const { entity } = await this.save(undefined, data, actor);\n return entity;\n }\n\n async update(\n idOrName: string,\n data: Record<string, any>,\n actor: ActorContext,\n ): Promise<Robot> {\n const { entity } = await this.save(idOrName, data, actor, { updateOnly: true });\n return entity;\n }\n\n async save(\n idOrName: string | undefined,\n data: Record<string, any>,\n actor: ActorContext,\n options: { updateOnly?: boolean } = {},\n ): Promise<{\n entity: Robot,\n created: boolean \n }> {\n let group: string;\n\n const realm = typeof data.realm_id === 'string' ?\n await this.realmRepository.resolve(data.realm_id) :\n undefined;\n\n let entity: Robot | null | undefined;\n if (idOrName) {\n const where: Record<string, any> = {};\n if (isUUID(idOrName)) {\n where.id = idOrName;\n } else {\n where.name = idOrName;\n }\n\n if (realm) {\n where.realm_id = realm.id;\n }\n\n entity = await this.repository.findOneBy(where);\n if (!entity && options.updateOnly) {\n throw new NotFoundError();\n }\n } else if (options.updateOnly) {\n throw new NotFoundError();\n }\n\n let isSelfEdit = false;\n if (entity) {\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_UPDATE });\n } catch (e) {\n if (\n !actor.identity ||\n actor.identity.type !== 'robot' ||\n actor.identity.data.id !== entity.id\n ) {\n throw e;\n }\n isSelfEdit = true;\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_SELF_MANAGE });\n }\n group = ValidatorGroup.UPDATE;\n } else {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_CREATE });\n group = ValidatorGroup.CREATE;\n }\n\n const validated = await this.validator.run(data, { group });\n\n await this.repository.validateJoinColumns(validated);\n\n await this.repository.checkUniqueness(validated, entity || undefined);\n\n const credentialsService = new RobotCredentialsService();\n\n if (entity) {\n if (isSelfEdit) {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_SELF_MANAGE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n } else {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_UPDATE,\n input: new PolicyData({\n [BuiltInPolicyType.ATTRIBUTES]: {\n ...entity,\n ...validated,\n },\n }),\n });\n }\n\n entity = this.repository.merge(entity, validated);\n if (validated.secret) {\n entity.secret = await credentialsService.protect(validated.secret);\n }\n\n await this.repository.save(entity);\n\n if (validated.secret) {\n entity.secret = validated.secret;\n }\n\n return {\n entity,\n created: false, \n };\n }\n\n if (!validated.realm_id) {\n const actorRealmId = this.getActorRealmId(actor);\n if (actorRealmId) {\n validated.realm_id = actorRealmId;\n }\n }\n\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_CREATE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: validated }),\n });\n\n if (!validated.secret) {\n validated.secret = credentialsService.generateSecret();\n }\n\n entity = this.repository.create(validated);\n entity.secret = await credentialsService.protect(validated.secret);\n await this.repository.save(entity);\n entity.secret = validated.secret;\n\n return {\n entity,\n created: true, \n };\n }\n\n async delete(\n id: string,\n actor: ActorContext,\n ): Promise<Robot> {\n const entity = await this.repository.findOneBy({ id });\n if (!entity) {\n throw new NotFoundError();\n }\n\n const isOwner = entity.user_id &&\n actor.identity &&\n actor.identity.type === 'user' &&\n actor.identity.data.id === entity.user_id;\n\n let isSelfDelete = false;\n try {\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_DELETE });\n } catch (e) {\n if (!isOwner) {\n throw e;\n }\n isSelfDelete = true;\n await actor.permissionEvaluator.preEvaluate({ name: PermissionName.ROBOT_SELF_MANAGE });\n }\n\n if (isSelfDelete) {\n // Delete carries no attributes to validate; pass an empty input so\n // the ATTRIBUTE_NAMES denylist has no keys to reject.\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_SELF_MANAGE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: {} }),\n });\n } else {\n await actor.permissionEvaluator.evaluate({\n name: PermissionName.ROBOT_DELETE,\n input: new PolicyData({ [BuiltInPolicyType.ATTRIBUTES]: entity }),\n });\n }\n\n const { id: entityId } = entity;\n await this.repository.remove(entity);\n entity.id = entityId;\n\n return entity;\n }\n}\n"],"mappings":"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"}
@@ -1,13 +1,17 @@
1
- import type { Robot } from '@authup/core-kit';
1
+ import type { Robot, Role } from '@authup/core-kit';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
2
3
  import type { ActorContext } from '../actor/types.ts';
3
4
  import type { EntityRepositoryFindManyResult, IEntityRepository } from '../types.ts';
4
5
  export interface IRobotRepository extends IEntityRepository<Robot> {
5
6
  checkUniqueness(data: Partial<Robot>, existing?: Robot): Promise<void>;
7
+ findOne(id: string, query?: Record<string, any>, realm?: string): Promise<Robot | null>;
6
8
  findOneWithSecret(where: Record<string, any>): Promise<Robot | null>;
9
+ getBoundRoles(entity: string | Robot): Promise<Role[]>;
10
+ getBoundPermissions(entity: string | Robot): Promise<PermissionPolicyBinding[]>;
7
11
  }
8
12
  export interface IRobotService {
9
13
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<Robot>>;
10
- getOne(idOrName: string, actor: ActorContext, realmId?: string): Promise<Robot>;
14
+ getOne(idOrName: string, actor: ActorContext, query?: Record<string, any>, realmId?: string): Promise<Robot>;
11
15
  create(data: Record<string, any>, actor: ActorContext): Promise<Robot>;
12
16
  update(idOrName: string, data: Record<string, any>, actor: ActorContext): Promise<Robot>;
13
17
  save(idOrName: string | undefined, data: Record<string, any>, actor: ActorContext, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/robot/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB,CAAC,KAAK,CAAC;IAC9D,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;IACzG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzF,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/robot/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB,CAAC,KAAK,CAAC;IAC9D,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAExF,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAErE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;IACzG,MAAM,CACF,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,CAAC,CAAC;IAClB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzF,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAC3D"}
@@ -1,7 +1,7 @@
1
1
  import { AbstractEntityService } from "../service.mjs";
2
2
  import { PermissionName, ROLE_ADMIN_NAME, RoleValidator, ValidatorGroup } from "@authup/core-kit";
3
- import { BuiltInPolicyType, PolicyData } from "@authup/access";
4
3
  import { isPropertySet, isUUID } from "@authup/kit";
4
+ import { BuiltInPolicyType, PolicyData } from "@authup/access";
5
5
  import { BadRequestError, NotFoundError } from "@ebec/http";
6
6
  //#region src/core/entities/role/service.ts
7
7
  var RoleService = class extends AbstractEntityService {
@@ -1,8 +1,11 @@
1
1
  import type { Role } from '@authup/core-kit';
2
+ import type { PermissionPolicyBinding } from '@authup/access';
2
3
  import type { ActorContext } from '../actor/types.ts';
3
4
  import type { EntityRepositoryFindManyResult, IEntityRepository } from '../types.ts';
4
5
  export interface IRoleRepository extends IEntityRepository<Role> {
5
6
  checkUniqueness(data: Partial<Role>, existing?: Role): Promise<void>;
7
+ getBoundPermissions(entity: string | Role): Promise<PermissionPolicyBinding[]>;
8
+ getBoundPermissionsForMany(entities: (string | Role)[]): Promise<PermissionPolicyBinding[]>;
6
9
  }
7
10
  export interface IRoleService {
8
11
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<Role>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/role/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IAC5D,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,IAAI,CAAC;QACb,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/role/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IAC5D,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE/E,0BAA0B,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,CACA,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC;QACP,MAAM,EAAE,IAAI,CAAC;QACb,OAAO,EAAE,OAAO,CAAA;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D"}
@@ -5,9 +5,11 @@ import type { EntityRepositoryFindManyResult } from '../types.ts';
5
5
  import type { IRoleAttributeRepository, IRoleAttributeService } from './types.ts';
6
6
  export type RoleAttributeServiceContext = {
7
7
  repository: IRoleAttributeRepository;
8
+ reservedNames?: ReadonlySet<string>;
8
9
  };
9
10
  export declare class RoleAttributeService extends AbstractEntityService implements IRoleAttributeService {
10
11
  protected repository: IRoleAttributeRepository;
12
+ protected reservedNames: ReadonlySet<string>;
11
13
  constructor(ctx: RoleAttributeServiceContext);
12
14
  getMany(query: Record<string, any>, actor: ActorContext): Promise<EntityRepositoryFindManyResult<RoleAttribute>>;
13
15
  getOne(id: string, actor: ActorContext): Promise<RoleAttribute>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/role-attribute/service.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,MAAM,2BAA2B,GAAG;IACtC,UAAU,EAAE,wBAAwB,CAAC;CACxC,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,qBAAsB,YAAW,qBAAqB;IAC5F,SAAS,CAAC,UAAU,EAAE,wBAAwB,CAAC;gBAEnC,GAAG,EAAE,2BAA2B;IAKtC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC;IA0CnD,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IA0BnB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IAmBnB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IAsBnB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;CAmB5B"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/role-attribute/service.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,MAAM,2BAA2B,GAAG;IACtC,UAAU,EAAE,wBAAwB,CAAC;IACrC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,qBAAsB,YAAW,qBAAqB;IAC5F,SAAS,CAAC,UAAU,EAAE,wBAAwB,CAAC;IAE/C,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEjC,GAAG,EAAE,2BAA2B;IAMtC,OAAO,CACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC;IA0CnD,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IA0BnB,MAAM,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IAuBnB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IA0BnB,MAAM,CACR,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC;CAmB5B"}