@webiny/api-core 6.3.0 → 6.4.0-beta.1

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 (816) hide show
  1. package/ApiCoreFeature.js +22 -18
  2. package/ApiCoreFeature.js.map +1 -1
  3. package/createApiCore.d.ts +1 -1
  4. package/createApiCore.js +14 -9
  5. package/createApiCore.js.map +1 -1
  6. package/domain/identity/SystemIdentityValue.js +9 -8
  7. package/domain/identity/SystemIdentityValue.js.map +1 -1
  8. package/domain/security/ApiToken.js +5 -11
  9. package/domain/security/ApiToken.js.map +1 -1
  10. package/domain/tenancy/RootTenantValue.js +9 -8
  11. package/domain/tenancy/RootTenantValue.js.map +1 -1
  12. package/domain/tenancy/errors.js +0 -3
  13. package/exports/api/build-params.js +0 -3
  14. package/exports/api/event-publisher.js +0 -3
  15. package/exports/api/graphql.js +0 -2
  16. package/exports/api/key-value-store.js +0 -3
  17. package/exports/api/logger.js +0 -3
  18. package/exports/api/security/api-key.js +0 -2
  19. package/exports/api/security/authentication.js +0 -2
  20. package/exports/api/security/role.js +1 -3
  21. package/exports/api/security/user.js +0 -2
  22. package/exports/api/security.js +3 -7
  23. package/exports/api/system.js +0 -2
  24. package/exports/api/tasks.js +0 -2
  25. package/exports/api/tenancy.js +4 -6
  26. package/exports/api/webhooks.d.ts +1 -0
  27. package/exports/api/webhooks.js +1 -0
  28. package/exports/api.js +1 -3
  29. package/features/ai/Ai.js +100 -117
  30. package/features/ai/Ai.js.map +1 -1
  31. package/features/ai/AiSdkTools.js +23 -19
  32. package/features/ai/AiSdkTools.js.map +1 -1
  33. package/features/ai/AnthropicSdkFactory.js +82 -65
  34. package/features/ai/AnthropicSdkFactory.js.map +1 -1
  35. package/features/ai/OpenAiSdkFactory.js +234 -181
  36. package/features/ai/OpenAiSdkFactory.js.map +1 -1
  37. package/features/ai/abstractions.js +7 -32
  38. package/features/ai/abstractions.js.map +1 -1
  39. package/features/ai/feature.js +9 -8
  40. package/features/ai/feature.js.map +1 -1
  41. package/features/ai/index.js +1 -3
  42. package/features/buildParams/BuildParams.js +20 -14
  43. package/features/buildParams/BuildParams.js.map +1 -1
  44. package/features/buildParams/abstractions.js +3 -4
  45. package/features/buildParams/abstractions.js.map +1 -1
  46. package/features/buildParams/feature.js +6 -5
  47. package/features/buildParams/feature.js.map +1 -1
  48. package/features/buildParams/index.js +0 -2
  49. package/features/encryption/EncryptionService.js +50 -46
  50. package/features/encryption/EncryptionService.js.map +1 -1
  51. package/features/encryption/abstractions.js +2 -2
  52. package/features/encryption/abstractions.js.map +1 -1
  53. package/features/encryption/feature.js +6 -5
  54. package/features/encryption/feature.js.map +1 -1
  55. package/features/encryption/index.js +0 -2
  56. package/features/eventPublisher/EventPublisher.js +9 -15
  57. package/features/eventPublisher/EventPublisher.js.map +1 -1
  58. package/features/eventPublisher/__tests__/EventPublisher.test.js +385 -419
  59. package/features/eventPublisher/__tests__/EventPublisher.test.js.map +1 -1
  60. package/features/eventPublisher/abstractions.js +7 -12
  61. package/features/eventPublisher/abstractions.js.map +1 -1
  62. package/features/eventPublisher/feature.js +8 -7
  63. package/features/eventPublisher/feature.js.map +1 -1
  64. package/features/eventPublisher/index.js +0 -2
  65. package/features/featureFlags/FeatureFlags.js +15 -12
  66. package/features/featureFlags/FeatureFlags.js.map +1 -1
  67. package/features/featureFlags/abstractions.js +2 -1
  68. package/features/featureFlags/abstractions.js.map +1 -1
  69. package/features/featureFlags/feature.js +6 -5
  70. package/features/featureFlags/feature.js.map +1 -1
  71. package/features/keyValueStore/GlobalKeyValueStore.js +28 -23
  72. package/features/keyValueStore/GlobalKeyValueStore.js.map +1 -1
  73. package/features/keyValueStore/KeyValueStore.js +30 -27
  74. package/features/keyValueStore/KeyValueStore.js.map +1 -1
  75. package/features/keyValueStore/KeyValueStoreRepository.d.ts +2 -2
  76. package/features/keyValueStore/KeyValueStoreRepository.js +34 -41
  77. package/features/keyValueStore/KeyValueStoreRepository.js.map +1 -1
  78. package/features/keyValueStore/abstractions.d.ts +6 -2
  79. package/features/keyValueStore/abstractions.js +5 -20
  80. package/features/keyValueStore/abstractions.js.map +1 -1
  81. package/features/keyValueStore/errors.js +16 -17
  82. package/features/keyValueStore/errors.js.map +1 -1
  83. package/features/keyValueStore/feature.js +9 -9
  84. package/features/keyValueStore/feature.js.map +1 -1
  85. package/features/keyValueStore/index.js +1 -3
  86. package/features/logger/LoggerService.js +41 -45
  87. package/features/logger/LoggerService.js.map +1 -1
  88. package/features/logger/abstractions.js +2 -2
  89. package/features/logger/abstractions.js.map +1 -1
  90. package/features/logger/feature.js +6 -5
  91. package/features/logger/feature.js.map +1 -1
  92. package/features/logger/index.js +0 -2
  93. package/features/masker/Masker.js +11 -14
  94. package/features/masker/Masker.js.map +1 -1
  95. package/features/masker/abstractions.js +2 -1
  96. package/features/masker/abstractions.js.map +1 -1
  97. package/features/masker/feature.js +7 -6
  98. package/features/masker/feature.js.map +1 -1
  99. package/features/masker/index.js +0 -2
  100. package/features/security/IdentityContext/AnonymousIdentity.js +12 -16
  101. package/features/security/IdentityContext/AnonymousIdentity.js.map +1 -1
  102. package/features/security/IdentityContext/AuthenticatedIdentity.js +5 -8
  103. package/features/security/IdentityContext/AuthenticatedIdentity.js.map +1 -1
  104. package/features/security/IdentityContext/Identity.js +63 -71
  105. package/features/security/IdentityContext/Identity.js.map +1 -1
  106. package/features/security/IdentityContext/IdentityContext.js +69 -106
  107. package/features/security/IdentityContext/IdentityContext.js.map +1 -1
  108. package/features/security/IdentityContext/abstractions.js +2 -2
  109. package/features/security/IdentityContext/abstractions.js.map +1 -1
  110. package/features/security/IdentityContext/feature.js +6 -5
  111. package/features/security/IdentityContext/feature.js.map +1 -1
  112. package/features/security/IdentityContext/index.js +0 -3
  113. package/features/security/SecurityFeature.js +13 -21
  114. package/features/security/SecurityFeature.js.map +1 -1
  115. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +48 -49
  116. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
  117. package/features/security/apiKeys/CreateApiKey/abstractions.js +2 -2
  118. package/features/security/apiKeys/CreateApiKey/abstractions.js.map +1 -1
  119. package/features/security/apiKeys/CreateApiKey/events.js +17 -16
  120. package/features/security/apiKeys/CreateApiKey/events.js.map +1 -1
  121. package/features/security/apiKeys/CreateApiKey/feature.js +6 -5
  122. package/features/security/apiKeys/CreateApiKey/feature.js.map +1 -1
  123. package/features/security/apiKeys/CreateApiKey/index.js +0 -2
  124. package/features/security/apiKeys/DeleteApiKey/DeleteApiKeyUseCase.js +29 -30
  125. package/features/security/apiKeys/DeleteApiKey/DeleteApiKeyUseCase.js.map +1 -1
  126. package/features/security/apiKeys/DeleteApiKey/abstractions.js +2 -2
  127. package/features/security/apiKeys/DeleteApiKey/abstractions.js.map +1 -1
  128. package/features/security/apiKeys/DeleteApiKey/events.js +17 -16
  129. package/features/security/apiKeys/DeleteApiKey/events.js.map +1 -1
  130. package/features/security/apiKeys/DeleteApiKey/feature.js +6 -5
  131. package/features/security/apiKeys/DeleteApiKey/feature.js.map +1 -1
  132. package/features/security/apiKeys/DeleteApiKey/index.js +0 -2
  133. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js +16 -14
  134. package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js.map +1 -1
  135. package/features/security/apiKeys/GetApiKey/abstractions.js +2 -2
  136. package/features/security/apiKeys/GetApiKey/abstractions.js.map +1 -1
  137. package/features/security/apiKeys/GetApiKey/feature.js +6 -5
  138. package/features/security/apiKeys/GetApiKey/feature.js.map +1 -1
  139. package/features/security/apiKeys/GetApiKey/index.js +0 -2
  140. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js +13 -10
  141. package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js.map +1 -1
  142. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js +2 -2
  143. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
  144. package/features/security/apiKeys/GetApiKeyBySlug/feature.js +6 -5
  145. package/features/security/apiKeys/GetApiKeyBySlug/feature.js.map +1 -1
  146. package/features/security/apiKeys/GetApiKeyBySlug/index.js +0 -2
  147. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js +13 -10
  148. package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js.map +1 -1
  149. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js +2 -2
  150. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
  151. package/features/security/apiKeys/GetApiKeyByToken/feature.js +6 -5
  152. package/features/security/apiKeys/GetApiKeyByToken/feature.js.map +1 -1
  153. package/features/security/apiKeys/GetApiKeyByToken/index.js +0 -2
  154. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js +17 -17
  155. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js.map +1 -1
  156. package/features/security/apiKeys/ListApiKeys/abstractions.js +2 -2
  157. package/features/security/apiKeys/ListApiKeys/abstractions.js.map +1 -1
  158. package/features/security/apiKeys/ListApiKeys/feature.js +6 -5
  159. package/features/security/apiKeys/ListApiKeys/feature.js.map +1 -1
  160. package/features/security/apiKeys/ListApiKeys/index.js +0 -2
  161. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +39 -42
  162. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
  163. package/features/security/apiKeys/UpdateApiKey/abstractions.js +2 -2
  164. package/features/security/apiKeys/UpdateApiKey/abstractions.js.map +1 -1
  165. package/features/security/apiKeys/UpdateApiKey/events.js +17 -16
  166. package/features/security/apiKeys/UpdateApiKey/events.js.map +1 -1
  167. package/features/security/apiKeys/UpdateApiKey/feature.js +6 -5
  168. package/features/security/apiKeys/UpdateApiKey/feature.js.map +1 -1
  169. package/features/security/apiKeys/UpdateApiKey/index.js +0 -2
  170. package/features/security/apiKeys/feature.js +14 -16
  171. package/features/security/apiKeys/feature.js.map +1 -1
  172. package/features/security/apiKeys/shared/ApiKeyProvider.js +42 -42
  173. package/features/security/apiKeys/shared/ApiKeyProvider.js.map +1 -1
  174. package/features/security/apiKeys/shared/ApiKeysRepository.js +108 -135
  175. package/features/security/apiKeys/shared/ApiKeysRepository.js.map +1 -1
  176. package/features/security/apiKeys/shared/abstractions.js +4 -6
  177. package/features/security/apiKeys/shared/abstractions.js.map +1 -1
  178. package/features/security/apiKeys/shared/errors.js +29 -32
  179. package/features/security/apiKeys/shared/errors.js.map +1 -1
  180. package/features/security/apiKeys/shared/generateToken.js +6 -16
  181. package/features/security/apiKeys/shared/generateToken.js.map +1 -1
  182. package/features/security/apiKeys/shared/schemas.js +27 -23
  183. package/features/security/apiKeys/shared/schemas.js.map +1 -1
  184. package/features/security/apiKeys/shared/types.js +0 -3
  185. package/features/security/authentication/AuthenticationContext/AuthenticationContext.js +44 -38
  186. package/features/security/authentication/AuthenticationContext/AuthenticationContext.js.map +1 -1
  187. package/features/security/authentication/AuthenticationContext/SetIdTokenCookie.js +33 -43
  188. package/features/security/authentication/AuthenticationContext/SetIdTokenCookie.js.map +1 -1
  189. package/features/security/authentication/AuthenticationContext/abstractions.js +2 -2
  190. package/features/security/authentication/AuthenticationContext/abstractions.js.map +1 -1
  191. package/features/security/authentication/AuthenticationContext/errors.js +51 -116
  192. package/features/security/authentication/AuthenticationContext/errors.js.map +1 -1
  193. package/features/security/authentication/AuthenticationContext/events.js +17 -16
  194. package/features/security/authentication/AuthenticationContext/events.js.map +1 -1
  195. package/features/security/authentication/AuthenticationContext/feature.js +6 -5
  196. package/features/security/authentication/AuthenticationContext/feature.js.map +1 -1
  197. package/features/security/authentication/AuthenticationContext/index.js +2 -4
  198. package/features/security/authentication/Authenticator/abstractions.js +2 -2
  199. package/features/security/authentication/Authenticator/abstractions.js.map +1 -1
  200. package/features/security/authentication/Authenticator/index.js +0 -2
  201. package/features/security/authorization/AuthorizationContext/AuthorizationContext.js +46 -59
  202. package/features/security/authorization/AuthorizationContext/AuthorizationContext.js.map +1 -1
  203. package/features/security/authorization/AuthorizationContext/abstractions.js +3 -4
  204. package/features/security/authorization/AuthorizationContext/abstractions.js.map +1 -1
  205. package/features/security/authorization/AuthorizationContext/feature.js +10 -9
  206. package/features/security/authorization/AuthorizationContext/feature.js.map +1 -1
  207. package/features/security/authorization/AuthorizationContext/index.js +1 -4
  208. package/features/security/authorization/Authorizer/abstractions.js +2 -2
  209. package/features/security/authorization/Authorizer/abstractions.js.map +1 -1
  210. package/features/security/authorization/Authorizer/index.js +0 -2
  211. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js +60 -64
  212. package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js.map +1 -1
  213. package/features/security/authorization/GroupsTeamsAuthorizer/RolesTeamsAuthorizer.js +26 -40
  214. package/features/security/authorization/GroupsTeamsAuthorizer/RolesTeamsAuthorizer.js.map +1 -1
  215. package/features/security/authorization/GroupsTeamsAuthorizer/abstractions.js +2 -1
  216. package/features/security/authorization/GroupsTeamsAuthorizer/abstractions.js.map +1 -1
  217. package/features/security/authorization/GroupsTeamsAuthorizer/feature.js +7 -6
  218. package/features/security/authorization/GroupsTeamsAuthorizer/feature.js.map +1 -1
  219. package/features/security/login/abstractions.js +9 -8
  220. package/features/security/login/abstractions.js.map +1 -1
  221. package/features/security/login/index.js +0 -2
  222. package/features/security/permissions/createPermissionSchema.js +6 -5
  223. package/features/security/permissions/createPermissionSchema.js.map +1 -1
  224. package/features/security/permissions/createPermissions.js +148 -236
  225. package/features/security/permissions/createPermissions.js.map +1 -1
  226. package/features/security/permissions/index.js +0 -2
  227. package/features/security/permissions/types.js +0 -3
  228. package/features/security/roles/CreateRole/CreateRoleUseCase.js +53 -59
  229. package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
  230. package/features/security/roles/CreateRole/abstractions.js +2 -2
  231. package/features/security/roles/CreateRole/abstractions.js.map +1 -1
  232. package/features/security/roles/CreateRole/events.js +17 -16
  233. package/features/security/roles/CreateRole/events.js.map +1 -1
  234. package/features/security/roles/CreateRole/feature.js +6 -5
  235. package/features/security/roles/CreateRole/feature.js.map +1 -1
  236. package/features/security/roles/CreateRole/index.js +0 -2
  237. package/features/security/roles/CreateRole/schema.js +8 -7
  238. package/features/security/roles/CreateRole/schema.js.map +1 -1
  239. package/features/security/roles/DeleteRole/DeleteRoleUseCase.js +35 -41
  240. package/features/security/roles/DeleteRole/DeleteRoleUseCase.js.map +1 -1
  241. package/features/security/roles/DeleteRole/abstractions.js +2 -2
  242. package/features/security/roles/DeleteRole/abstractions.js.map +1 -1
  243. package/features/security/roles/DeleteRole/events.js +17 -16
  244. package/features/security/roles/DeleteRole/events.js.map +1 -1
  245. package/features/security/roles/DeleteRole/feature.js +6 -5
  246. package/features/security/roles/DeleteRole/feature.js.map +1 -1
  247. package/features/security/roles/DeleteRole/index.js +0 -2
  248. package/features/security/roles/GetRole/GetRoleUseCase.js +19 -18
  249. package/features/security/roles/GetRole/GetRoleUseCase.js.map +1 -1
  250. package/features/security/roles/GetRole/abstractions.js +2 -2
  251. package/features/security/roles/GetRole/abstractions.js.map +1 -1
  252. package/features/security/roles/GetRole/feature.js +6 -5
  253. package/features/security/roles/GetRole/feature.js.map +1 -1
  254. package/features/security/roles/GetRole/index.js +0 -2
  255. package/features/security/roles/Installer/RolesInstaller.js +38 -35
  256. package/features/security/roles/Installer/RolesInstaller.js.map +1 -1
  257. package/features/security/roles/ListRoles/ListRolesUseCase.js +18 -17
  258. package/features/security/roles/ListRoles/ListRolesUseCase.js.map +1 -1
  259. package/features/security/roles/ListRoles/abstractions.js +2 -2
  260. package/features/security/roles/ListRoles/abstractions.js.map +1 -1
  261. package/features/security/roles/ListRoles/feature.js +6 -5
  262. package/features/security/roles/ListRoles/feature.js.map +1 -1
  263. package/features/security/roles/ListRoles/index.js +0 -2
  264. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +43 -50
  265. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
  266. package/features/security/roles/UpdateRole/abstractions.js +2 -2
  267. package/features/security/roles/UpdateRole/abstractions.js.map +1 -1
  268. package/features/security/roles/UpdateRole/events.js +17 -16
  269. package/features/security/roles/UpdateRole/events.js.map +1 -1
  270. package/features/security/roles/UpdateRole/feature.js +6 -5
  271. package/features/security/roles/UpdateRole/feature.js.map +1 -1
  272. package/features/security/roles/UpdateRole/index.js +0 -2
  273. package/features/security/roles/UpdateRole/schema.js +7 -6
  274. package/features/security/roles/UpdateRole/schema.js.map +1 -1
  275. package/features/security/roles/feature.js +14 -18
  276. package/features/security/roles/feature.js.map +1 -1
  277. package/features/security/roles/shared/RoleProvider.js +27 -21
  278. package/features/security/roles/shared/RoleProvider.js.map +1 -1
  279. package/features/security/roles/shared/RolesRepository.js +96 -113
  280. package/features/security/roles/shared/RolesRepository.js.map +1 -1
  281. package/features/security/roles/shared/abstractions.js +3 -4
  282. package/features/security/roles/shared/abstractions.js.map +1 -1
  283. package/features/security/roles/shared/decorators/ListCache.js +23 -22
  284. package/features/security/roles/shared/decorators/ListCache.js.map +1 -1
  285. package/features/security/roles/shared/decorators/RolesRepositoryCachingDecorator.js +40 -62
  286. package/features/security/roles/shared/decorators/RolesRepositoryCachingDecorator.js.map +1 -1
  287. package/features/security/roles/shared/errors.js +50 -56
  288. package/features/security/roles/shared/errors.js.map +1 -1
  289. package/features/security/roles/shared/types.js +0 -3
  290. package/features/security/shared/abstractions.js +4 -6
  291. package/features/security/shared/abstractions.js.map +1 -1
  292. package/features/security/shared/errors.js +8 -8
  293. package/features/security/shared/errors.js.map +1 -1
  294. package/features/security/shared/index.js +0 -2
  295. package/features/security/teams/CreateTeam/CreateTeamUseCase.js +53 -59
  296. package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
  297. package/features/security/teams/CreateTeam/abstractions.js +2 -2
  298. package/features/security/teams/CreateTeam/abstractions.js.map +1 -1
  299. package/features/security/teams/CreateTeam/events.js +17 -16
  300. package/features/security/teams/CreateTeam/events.js.map +1 -1
  301. package/features/security/teams/CreateTeam/feature.js +6 -5
  302. package/features/security/teams/CreateTeam/feature.js.map +1 -1
  303. package/features/security/teams/CreateTeam/index.js +0 -2
  304. package/features/security/teams/CreateTeam/schema.js +6 -5
  305. package/features/security/teams/CreateTeam/schema.js.map +1 -1
  306. package/features/security/teams/DeleteTeam/DeleteTeamUseCase.js +36 -46
  307. package/features/security/teams/DeleteTeam/DeleteTeamUseCase.js.map +1 -1
  308. package/features/security/teams/DeleteTeam/abstractions.js +2 -2
  309. package/features/security/teams/DeleteTeam/abstractions.js.map +1 -1
  310. package/features/security/teams/DeleteTeam/events.js +17 -16
  311. package/features/security/teams/DeleteTeam/events.js.map +1 -1
  312. package/features/security/teams/DeleteTeam/feature.js +6 -5
  313. package/features/security/teams/DeleteTeam/feature.js.map +1 -1
  314. package/features/security/teams/DeleteTeam/index.js +0 -2
  315. package/features/security/teams/GetTeam/GetTeamUseCase.js +17 -17
  316. package/features/security/teams/GetTeam/GetTeamUseCase.js.map +1 -1
  317. package/features/security/teams/GetTeam/abstractions.js +2 -2
  318. package/features/security/teams/GetTeam/abstractions.js.map +1 -1
  319. package/features/security/teams/GetTeam/feature.js +6 -5
  320. package/features/security/teams/GetTeam/feature.js.map +1 -1
  321. package/features/security/teams/GetTeam/index.js +0 -2
  322. package/features/security/teams/ListTeams/ListTeamsUseCase.js +20 -21
  323. package/features/security/teams/ListTeams/ListTeamsUseCase.js.map +1 -1
  324. package/features/security/teams/ListTeams/abstractions.js +2 -2
  325. package/features/security/teams/ListTeams/abstractions.js.map +1 -1
  326. package/features/security/teams/ListTeams/feature.js +6 -5
  327. package/features/security/teams/ListTeams/feature.js.map +1 -1
  328. package/features/security/teams/ListTeams/index.js +0 -2
  329. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +46 -58
  330. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
  331. package/features/security/teams/UpdateTeam/abstractions.js +2 -2
  332. package/features/security/teams/UpdateTeam/abstractions.js.map +1 -1
  333. package/features/security/teams/UpdateTeam/events.js +17 -16
  334. package/features/security/teams/UpdateTeam/events.js.map +1 -1
  335. package/features/security/teams/UpdateTeam/feature.js +6 -5
  336. package/features/security/teams/UpdateTeam/feature.js.map +1 -1
  337. package/features/security/teams/UpdateTeam/index.js +0 -2
  338. package/features/security/teams/UpdateTeam/schema.js +5 -4
  339. package/features/security/teams/UpdateTeam/schema.js.map +1 -1
  340. package/features/security/teams/feature.js +13 -17
  341. package/features/security/teams/feature.js.map +1 -1
  342. package/features/security/teams/shared/TeamProvider.js +27 -21
  343. package/features/security/teams/shared/TeamProvider.js.map +1 -1
  344. package/features/security/teams/shared/TeamsRepository.js +100 -118
  345. package/features/security/teams/shared/TeamsRepository.js.map +1 -1
  346. package/features/security/teams/shared/abstractions.js +3 -4
  347. package/features/security/teams/shared/abstractions.js.map +1 -1
  348. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js +40 -62
  349. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js.map +1 -1
  350. package/features/security/teams/shared/errors.js +62 -70
  351. package/features/security/teams/shared/errors.js.map +1 -1
  352. package/features/security/teams/shared/types.js +0 -3
  353. package/features/security/utils/AppPermissions.js +50 -89
  354. package/features/security/utils/AppPermissions.js.map +1 -1
  355. package/features/security/utils/IdentityValue.js +19 -22
  356. package/features/security/utils/IdentityValue.js.map +1 -1
  357. package/features/security/utils/filterOutCustomWbyAppsPermissions.js +24 -27
  358. package/features/security/utils/filterOutCustomWbyAppsPermissions.js.map +1 -1
  359. package/features/security/utils/getPermissionsFromRoles.js +5 -10
  360. package/features/security/utils/getPermissionsFromRoles.js.map +1 -1
  361. package/features/security/utils/isJwt.js +2 -1
  362. package/features/security/utils/isJwt.js.map +1 -1
  363. package/features/security/utils/verifyJwtUsingJwk.js +6 -7
  364. package/features/security/utils/verifyJwtUsingJwk.js.map +1 -1
  365. package/features/system/InstallSystem/InstallSystemUseCase.js +45 -44
  366. package/features/system/InstallSystem/InstallSystemUseCase.js.map +1 -1
  367. package/features/system/InstallSystem/abstractions.js +3 -17
  368. package/features/system/InstallSystem/abstractions.js.map +1 -1
  369. package/features/system/InstallSystem/errors.js +15 -16
  370. package/features/system/InstallSystem/errors.js.map +1 -1
  371. package/features/system/InstallSystem/events.js +8 -5
  372. package/features/system/InstallSystem/events.js.map +1 -1
  373. package/features/system/InstallSystem/feature.js +6 -7
  374. package/features/system/InstallSystem/feature.js.map +1 -1
  375. package/features/system/InstallSystem/index.js +2 -6
  376. package/features/system/SystemFeature.js +6 -5
  377. package/features/system/SystemFeature.js.map +1 -1
  378. package/features/task/TaskController/abstractions.js +2 -10
  379. package/features/task/TaskController/abstractions.js.map +1 -1
  380. package/features/task/TaskController/index.js +0 -2
  381. package/features/task/TaskDefinition/abstractions.js +8 -40
  382. package/features/task/TaskDefinition/abstractions.js.map +1 -1
  383. package/features/task/TaskDefinition/index.js +0 -2
  384. package/features/task/TaskService/abstractions.js +9 -13
  385. package/features/task/TaskService/abstractions.js.map +1 -1
  386. package/features/task/TaskService/index.js +0 -2
  387. package/features/tenancy/CreateTenant/CreateTenantGateway.js +14 -11
  388. package/features/tenancy/CreateTenant/CreateTenantGateway.js.map +1 -1
  389. package/features/tenancy/CreateTenant/CreateTenantRepository.js +18 -15
  390. package/features/tenancy/CreateTenant/CreateTenantRepository.js.map +1 -1
  391. package/features/tenancy/CreateTenant/CreateTenantUseCase.js +44 -41
  392. package/features/tenancy/CreateTenant/CreateTenantUseCase.js.map +1 -1
  393. package/features/tenancy/CreateTenant/abstractions.js +6 -29
  394. package/features/tenancy/CreateTenant/abstractions.js.map +1 -1
  395. package/features/tenancy/CreateTenant/decorators/CreateTenantWithWcpIncrement.js +16 -15
  396. package/features/tenancy/CreateTenant/decorators/CreateTenantWithWcpIncrement.js.map +1 -1
  397. package/features/tenancy/CreateTenant/errors.js +8 -8
  398. package/features/tenancy/CreateTenant/errors.js.map +1 -1
  399. package/features/tenancy/CreateTenant/events.js +16 -11
  400. package/features/tenancy/CreateTenant/events.js.map +1 -1
  401. package/features/tenancy/CreateTenant/feature.js +9 -8
  402. package/features/tenancy/CreateTenant/feature.js.map +1 -1
  403. package/features/tenancy/CreateTenant/index.js +2 -4
  404. package/features/tenancy/DeleteTenant/DeleteTenantGateway.js +15 -12
  405. package/features/tenancy/DeleteTenant/DeleteTenantGateway.js.map +1 -1
  406. package/features/tenancy/DeleteTenant/DeleteTenantRepository.js +22 -19
  407. package/features/tenancy/DeleteTenant/DeleteTenantRepository.js.map +1 -1
  408. package/features/tenancy/DeleteTenant/DeleteTenantUseCase.js +29 -27
  409. package/features/tenancy/DeleteTenant/DeleteTenantUseCase.js.map +1 -1
  410. package/features/tenancy/DeleteTenant/abstractions.js +6 -10
  411. package/features/tenancy/DeleteTenant/abstractions.js.map +1 -1
  412. package/features/tenancy/DeleteTenant/decorators/DeleteTenantWithWcpDecrement.js +16 -13
  413. package/features/tenancy/DeleteTenant/decorators/DeleteTenantWithWcpDecrement.js.map +1 -1
  414. package/features/tenancy/DeleteTenant/events.js +16 -11
  415. package/features/tenancy/DeleteTenant/events.js.map +1 -1
  416. package/features/tenancy/DeleteTenant/feature.js +9 -8
  417. package/features/tenancy/DeleteTenant/feature.js.map +1 -1
  418. package/features/tenancy/DeleteTenant/index.js +2 -4
  419. package/features/tenancy/GetRootTenant/GetRootTenantUseCase.js +15 -12
  420. package/features/tenancy/GetRootTenant/GetRootTenantUseCase.js.map +1 -1
  421. package/features/tenancy/GetRootTenant/abstractions.js +2 -4
  422. package/features/tenancy/GetRootTenant/abstractions.js.map +1 -1
  423. package/features/tenancy/GetRootTenant/feature.js +6 -5
  424. package/features/tenancy/GetRootTenant/feature.js.map +1 -1
  425. package/features/tenancy/GetRootTenant/index.js +0 -2
  426. package/features/tenancy/GetTenantById/GetTenantByIdGateway.js +17 -12
  427. package/features/tenancy/GetTenantById/GetTenantByIdGateway.js.map +1 -1
  428. package/features/tenancy/GetTenantById/GetTenantByIdRepository.js +18 -19
  429. package/features/tenancy/GetTenantById/GetTenantByIdRepository.js.map +1 -1
  430. package/features/tenancy/GetTenantById/GetTenantByIdUseCase.js +17 -17
  431. package/features/tenancy/GetTenantById/GetTenantByIdUseCase.js.map +1 -1
  432. package/features/tenancy/GetTenantById/abstractions.js +4 -6
  433. package/features/tenancy/GetTenantById/abstractions.js.map +1 -1
  434. package/features/tenancy/GetTenantById/feature.js +8 -12
  435. package/features/tenancy/GetTenantById/feature.js.map +1 -1
  436. package/features/tenancy/GetTenantById/index.js +1 -3
  437. package/features/tenancy/InstallTenant/DependencyResolver.js +53 -65
  438. package/features/tenancy/InstallTenant/DependencyResolver.js.map +1 -1
  439. package/features/tenancy/InstallTenant/InstallTenantUseCase.js +95 -113
  440. package/features/tenancy/InstallTenant/InstallTenantUseCase.js.map +1 -1
  441. package/features/tenancy/InstallTenant/abstractions.js +4 -15
  442. package/features/tenancy/InstallTenant/abstractions.js.map +1 -1
  443. package/features/tenancy/InstallTenant/errors.js +15 -16
  444. package/features/tenancy/InstallTenant/errors.js.map +1 -1
  445. package/features/tenancy/InstallTenant/events.js +8 -5
  446. package/features/tenancy/InstallTenant/events.js.map +1 -1
  447. package/features/tenancy/InstallTenant/feature.js +6 -5
  448. package/features/tenancy/InstallTenant/feature.js.map +1 -1
  449. package/features/tenancy/InstallTenant/index.js +1 -3
  450. package/features/tenancy/ListTenants/ListTenantsGateway.js +14 -11
  451. package/features/tenancy/ListTenants/ListTenantsGateway.js.map +1 -1
  452. package/features/tenancy/ListTenants/ListTenantsRepository.js +14 -12
  453. package/features/tenancy/ListTenants/ListTenantsRepository.js.map +1 -1
  454. package/features/tenancy/ListTenants/ListTenantsUseCase.js +16 -14
  455. package/features/tenancy/ListTenants/ListTenantsUseCase.js.map +1 -1
  456. package/features/tenancy/ListTenants/abstractions.js +4 -12
  457. package/features/tenancy/ListTenants/abstractions.js.map +1 -1
  458. package/features/tenancy/ListTenants/feature.js +8 -7
  459. package/features/tenancy/ListTenants/feature.js.map +1 -1
  460. package/features/tenancy/ListTenants/index.js +1 -3
  461. package/features/tenancy/TenancyFeature.js +20 -26
  462. package/features/tenancy/TenancyFeature.js.map +1 -1
  463. package/features/tenancy/TenantContext/TenantContext.js +46 -48
  464. package/features/tenancy/TenantContext/TenantContext.js.map +1 -1
  465. package/features/tenancy/TenantContext/abstractions.js +2 -2
  466. package/features/tenancy/TenantContext/abstractions.js.map +1 -1
  467. package/features/tenancy/TenantContext/errors.js +7 -7
  468. package/features/tenancy/TenantContext/errors.js.map +1 -1
  469. package/features/tenancy/TenantContext/feature.js +6 -5
  470. package/features/tenancy/TenantContext/feature.js.map +1 -1
  471. package/features/tenancy/TenantContext/index.js +0 -2
  472. package/features/tenancy/UpdateTenant/UpdateTenantGateway.js +14 -11
  473. package/features/tenancy/UpdateTenant/UpdateTenantGateway.js.map +1 -1
  474. package/features/tenancy/UpdateTenant/UpdateTenantRepository.js +19 -16
  475. package/features/tenancy/UpdateTenant/UpdateTenantRepository.js.map +1 -1
  476. package/features/tenancy/UpdateTenant/UpdateTenantUseCase.js +37 -36
  477. package/features/tenancy/UpdateTenant/UpdateTenantUseCase.js.map +1 -1
  478. package/features/tenancy/UpdateTenant/abstractions.js +6 -10
  479. package/features/tenancy/UpdateTenant/abstractions.js.map +1 -1
  480. package/features/tenancy/UpdateTenant/events.js +16 -11
  481. package/features/tenancy/UpdateTenant/events.js.map +1 -1
  482. package/features/tenancy/UpdateTenant/feature.js +8 -7
  483. package/features/tenancy/UpdateTenant/feature.js.map +1 -1
  484. package/features/tenancy/UpdateTenant/index.js +2 -4
  485. package/features/tenancy/shared/TenantCache.js +18 -17
  486. package/features/tenancy/shared/TenantCache.js.map +1 -1
  487. package/features/tenancy/shared/abstractions.js +2 -1
  488. package/features/tenancy/shared/abstractions.js.map +1 -1
  489. package/features/tenancy/shared/storageOperations.js +2 -5
  490. package/features/tenancy/shared/storageOperations.js.map +1 -1
  491. package/features/users/AdminUsersFeature.js +15 -19
  492. package/features/users/AdminUsersFeature.js.map +1 -1
  493. package/features/users/CreateUser/CreateUserUseCase.js +65 -100
  494. package/features/users/CreateUser/CreateUserUseCase.js.map +1 -1
  495. package/features/users/CreateUser/abstractions.js +2 -13
  496. package/features/users/CreateUser/abstractions.js.map +1 -1
  497. package/features/users/CreateUser/decorators/CreateUserWithWcpIncrement.js +16 -15
  498. package/features/users/CreateUser/decorators/CreateUserWithWcpIncrement.js.map +1 -1
  499. package/features/users/CreateUser/events.js +17 -18
  500. package/features/users/CreateUser/events.js.map +1 -1
  501. package/features/users/CreateUser/feature.js +7 -6
  502. package/features/users/CreateUser/feature.js.map +1 -1
  503. package/features/users/CreateUser/index.js +0 -2
  504. package/features/users/CreateUser/schema.js +14 -18
  505. package/features/users/CreateUser/schema.js.map +1 -1
  506. package/features/users/DeleteUser/DeleteUserUseCase.js +35 -50
  507. package/features/users/DeleteUser/DeleteUserUseCase.js.map +1 -1
  508. package/features/users/DeleteUser/abstractions.js +2 -13
  509. package/features/users/DeleteUser/abstractions.js.map +1 -1
  510. package/features/users/DeleteUser/decorators/DeleteUserWithWcpDecrement.js +15 -16
  511. package/features/users/DeleteUser/decorators/DeleteUserWithWcpDecrement.js.map +1 -1
  512. package/features/users/DeleteUser/errors.js +7 -7
  513. package/features/users/DeleteUser/errors.js.map +1 -1
  514. package/features/users/DeleteUser/events.js +17 -18
  515. package/features/users/DeleteUser/events.js.map +1 -1
  516. package/features/users/DeleteUser/feature.js +7 -6
  517. package/features/users/DeleteUser/feature.js.map +1 -1
  518. package/features/users/DeleteUser/index.js +0 -2
  519. package/features/users/ExternalIdpUserSync/ExternalIdpUserSyncHandler.js +60 -74
  520. package/features/users/ExternalIdpUserSync/ExternalIdpUserSyncHandler.js.map +1 -1
  521. package/features/users/ExternalIdpUserSync/feature.js +6 -5
  522. package/features/users/ExternalIdpUserSync/feature.js.map +1 -1
  523. package/features/users/ExternalIdpUserSync/index.js +0 -2
  524. package/features/users/GetIdentityProfile/GetIdentityProfileUseCase.js +29 -39
  525. package/features/users/GetIdentityProfile/GetIdentityProfileUseCase.js.map +1 -1
  526. package/features/users/GetIdentityProfile/abstractions.js +2 -11
  527. package/features/users/GetIdentityProfile/abstractions.js.map +1 -1
  528. package/features/users/GetIdentityProfile/feature.js +6 -5
  529. package/features/users/GetIdentityProfile/feature.js.map +1 -1
  530. package/features/users/GetIdentityProfile/index.js +0 -2
  531. package/features/users/GetIdentityProfile/types.js +0 -3
  532. package/features/users/GetUser/GetUserUseCase.js +19 -23
  533. package/features/users/GetUser/GetUserUseCase.js.map +1 -1
  534. package/features/users/GetUser/abstractions.js +2 -11
  535. package/features/users/GetUser/abstractions.js.map +1 -1
  536. package/features/users/GetUser/feature.js +6 -5
  537. package/features/users/GetUser/feature.js.map +1 -1
  538. package/features/users/GetUser/index.js +0 -2
  539. package/features/users/ListUserTeams/ListUserTeamsUseCase.js +33 -42
  540. package/features/users/ListUserTeams/ListUserTeamsUseCase.js.map +1 -1
  541. package/features/users/ListUserTeams/abstractions.js +2 -11
  542. package/features/users/ListUserTeams/abstractions.js.map +1 -1
  543. package/features/users/ListUserTeams/feature.js +6 -5
  544. package/features/users/ListUserTeams/feature.js.map +1 -1
  545. package/features/users/ListUserTeams/index.js +0 -2
  546. package/features/users/ListUsers/ListUsersUseCase.js +19 -23
  547. package/features/users/ListUsers/ListUsersUseCase.js.map +1 -1
  548. package/features/users/ListUsers/abstractions.js +2 -11
  549. package/features/users/ListUsers/abstractions.js.map +1 -1
  550. package/features/users/ListUsers/feature.js +6 -5
  551. package/features/users/ListUsers/feature.js.map +1 -1
  552. package/features/users/ListUsers/index.js +0 -2
  553. package/features/users/UpdateUser/UpdateUserUseCase.js +52 -74
  554. package/features/users/UpdateUser/UpdateUserUseCase.js.map +1 -1
  555. package/features/users/UpdateUser/abstractions.js +2 -13
  556. package/features/users/UpdateUser/abstractions.js.map +1 -1
  557. package/features/users/UpdateUser/events.js +17 -18
  558. package/features/users/UpdateUser/events.js.map +1 -1
  559. package/features/users/UpdateUser/feature.js +6 -5
  560. package/features/users/UpdateUser/feature.js.map +1 -1
  561. package/features/users/UpdateUser/index.js +0 -2
  562. package/features/users/UpdateUser/schema.js +11 -10
  563. package/features/users/UpdateUser/schema.js.map +1 -1
  564. package/features/users/shared/AdminUsersRepository.js +104 -112
  565. package/features/users/shared/AdminUsersRepository.js.map +1 -1
  566. package/features/users/shared/abstractions.js +2 -9
  567. package/features/users/shared/abstractions.js.map +1 -1
  568. package/features/users/shared/errors.js +40 -46
  569. package/features/users/shared/errors.js.map +1 -1
  570. package/features/users/shared/loaders.js +52 -66
  571. package/features/users/shared/loaders.js.map +1 -1
  572. package/features/users/shared/storageAbstractions.js +2 -2
  573. package/features/users/shared/storageAbstractions.js.map +1 -1
  574. package/features/users/shared/types.js +0 -3
  575. package/features/wcp/WcpContext/WcpContext.js +138 -142
  576. package/features/wcp/WcpContext/WcpContext.js.map +1 -1
  577. package/features/wcp/WcpContext/abstractions.js +2 -6
  578. package/features/wcp/WcpContext/abstractions.js.map +1 -1
  579. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +135 -134
  580. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
  581. package/features/wcp/WcpContext/feature.js +6 -5
  582. package/features/wcp/WcpContext/feature.js.map +1 -1
  583. package/features/wcp/WcpContext/index.js +0 -2
  584. package/features/wcp/WcpContext/types.js +0 -3
  585. package/features/wcp/WcpContext/utils.js +35 -53
  586. package/features/wcp/WcpContext/utils.js.map +1 -1
  587. package/features/wcp/WcpFeature.js +7 -6
  588. package/features/wcp/WcpFeature.js.map +1 -1
  589. package/features/webhooks/Webhook/WebhookProvider.d.ts +12 -0
  590. package/features/webhooks/Webhook/WebhookProvider.js +28 -0
  591. package/features/webhooks/Webhook/WebhookProvider.js.map +1 -0
  592. package/features/webhooks/Webhook/abstractions/WebhookFactory.d.ts +14 -0
  593. package/features/webhooks/Webhook/abstractions/WebhookFactory.js +5 -0
  594. package/features/webhooks/Webhook/abstractions/WebhookFactory.js.map +1 -0
  595. package/features/webhooks/Webhook/abstractions/WebhookProvider.d.ts +9 -0
  596. package/features/webhooks/Webhook/abstractions/WebhookProvider.js +5 -0
  597. package/features/webhooks/Webhook/abstractions/WebhookProvider.js.map +1 -0
  598. package/features/webhooks/Webhook/feature.d.ts +4 -0
  599. package/features/webhooks/Webhook/feature.js +11 -0
  600. package/features/webhooks/Webhook/feature.js.map +1 -0
  601. package/features/webhooks/Webhook/index.d.ts +2 -0
  602. package/features/webhooks/Webhook/index.js +2 -0
  603. package/features/webhooks/WebhookDispatcher/NullWebhookDispatcher.d.ts +8 -0
  604. package/features/webhooks/WebhookDispatcher/NullWebhookDispatcher.js +11 -0
  605. package/features/webhooks/WebhookDispatcher/NullWebhookDispatcher.js.map +1 -0
  606. package/features/webhooks/WebhookDispatcher/abstractions.d.ts +12 -0
  607. package/features/webhooks/WebhookDispatcher/abstractions.js +5 -0
  608. package/features/webhooks/WebhookDispatcher/abstractions.js.map +1 -0
  609. package/features/webhooks/WebhookSignPayload/abstractions.d.ts +14 -0
  610. package/features/webhooks/WebhookSignPayload/abstractions.js +5 -0
  611. package/features/webhooks/WebhookSignPayload/abstractions.js.map +1 -0
  612. package/features/webhooks/WebhookVerifyPayload/abstractions.d.ts +11 -0
  613. package/features/webhooks/WebhookVerifyPayload/abstractions.js +5 -0
  614. package/features/webhooks/WebhookVerifyPayload/abstractions.js.map +1 -0
  615. package/features/webhooks/index.d.ts +5 -0
  616. package/features/webhooks/index.js +5 -0
  617. package/graphql/security/NotAuthorizedResponse.js +11 -14
  618. package/graphql/security/NotAuthorizedResponse.js.map +1 -1
  619. package/graphql/security/ProfileMapper.js +12 -11
  620. package/graphql/security/ProfileMapper.js.map +1 -1
  621. package/graphql/security/apiKey.gql.js +38 -47
  622. package/graphql/security/apiKey.gql.js.map +1 -1
  623. package/graphql/security/base.gql.js +11 -10
  624. package/graphql/security/base.gql.js.map +1 -1
  625. package/graphql/security/identity.gql.js +87 -97
  626. package/graphql/security/identity.gql.js.map +1 -1
  627. package/graphql/security/index.js +13 -8
  628. package/graphql/security/index.js.map +1 -1
  629. package/graphql/security/role.gql.js +49 -57
  630. package/graphql/security/role.gql.js.map +1 -1
  631. package/graphql/security/team.gql.js +61 -69
  632. package/graphql/security/team.gql.js.map +1 -1
  633. package/graphql/system/createSystemGraphQL.js +31 -34
  634. package/graphql/system/createSystemGraphQL.js.map +1 -1
  635. package/graphql/users/user.gql.js +87 -105
  636. package/graphql/users/user.gql.js.map +1 -1
  637. package/graphql/wcp/graphql.js +25 -28
  638. package/graphql/wcp/graphql.js.map +1 -1
  639. package/idp/JwksCache.js +22 -28
  640. package/idp/JwksCache.js.map +1 -1
  641. package/idp/JwtAuthenticator.js +34 -46
  642. package/idp/JwtAuthenticator.js.map +1 -1
  643. package/idp/OidcJwtIdentityProvider.js +55 -82
  644. package/idp/OidcJwtIdentityProvider.js.map +1 -1
  645. package/idp/abstractions.js +5 -14
  646. package/idp/abstractions.js.map +1 -1
  647. package/idp/feature.js +8 -7
  648. package/idp/feature.js.map +1 -1
  649. package/idp/index.js +1 -3
  650. package/idp/types.js +0 -3
  651. package/index.js +0 -2
  652. package/legacy/security/LegacyContext.js +133 -186
  653. package/legacy/security/LegacyContext.js.map +1 -1
  654. package/legacy/security/createSecurityContext.js +5 -9
  655. package/legacy/security/createSecurityContext.js.map +1 -1
  656. package/legacy/security/plugins/apiKeyAuthentication.js +15 -24
  657. package/legacy/security/plugins/apiKeyAuthentication.js.map +1 -1
  658. package/legacy/security/plugins/apiKeyAuthorization.js +9 -18
  659. package/legacy/security/plugins/apiKeyAuthorization.js.map +1 -1
  660. package/legacy/security/plugins/authenticateUsingCookie.js +18 -22
  661. package/legacy/security/plugins/authenticateUsingCookie.js.map +1 -1
  662. package/legacy/security/plugins/authenticateUsingHttpHeader.d.ts +1 -1
  663. package/legacy/security/plugins/authenticateUsingHttpHeader.js +15 -18
  664. package/legacy/security/plugins/authenticateUsingHttpHeader.js.map +1 -1
  665. package/legacy/security/plugins/secureHeaders.js +28 -21
  666. package/legacy/security/plugins/secureHeaders.js.map +1 -1
  667. package/legacy/tenancy/LegacyContext.js +45 -52
  668. package/legacy/tenancy/LegacyContext.js.map +1 -1
  669. package/legacy/tenancy/createTenancyContext.js +22 -42
  670. package/legacy/tenancy/createTenancyContext.js.map +1 -1
  671. package/legacy/users/LegacyContext.js +39 -54
  672. package/legacy/users/LegacyContext.js.map +1 -1
  673. package/legacy/users/createAdminUsersContext.js +7 -7
  674. package/legacy/users/createAdminUsersContext.js.map +1 -1
  675. package/legacy/wcp/LegacyWcpContext.js +80 -79
  676. package/legacy/wcp/LegacyWcpContext.js.map +1 -1
  677. package/legacy/wcp/context.d.ts +1 -3
  678. package/legacy/wcp/context.js +33 -37
  679. package/legacy/wcp/context.js.map +1 -1
  680. package/models/base/BaseModel.js +51 -56
  681. package/models/base/BaseModel.js.map +1 -1
  682. package/models/base/ModelBuilder.js +65 -78
  683. package/models/base/ModelBuilder.js.map +1 -1
  684. package/models/base/ModelFactory.js +0 -3
  685. package/models/base/__tests__/ModelBuilder.test.js +437 -454
  686. package/models/base/__tests__/ModelBuilder.test.js.map +1 -1
  687. package/models/base/abstractions.js +0 -3
  688. package/models/cms/FieldBuilder.js +112 -121
  689. package/models/cms/FieldBuilder.js.map +1 -1
  690. package/models/cms/FieldBuilderRegistry.js +13 -12
  691. package/models/cms/FieldBuilderRegistry.js.map +1 -1
  692. package/models/cms/FieldDefinitionsBuilder.js +37 -54
  693. package/models/cms/FieldDefinitionsBuilder.js.map +1 -1
  694. package/models/cms/PrivateCmsModelBuilder.js +84 -89
  695. package/models/cms/PrivateCmsModelBuilder.js.map +1 -1
  696. package/models/cms/PrivatePage/Page.fields.js +7 -6
  697. package/models/cms/PrivatePage/Page.fields.js.map +1 -1
  698. package/models/cms/PrivatePage/PageModelBuilder.js +18 -15
  699. package/models/cms/PrivatePage/PageModelBuilder.js.map +1 -1
  700. package/models/cms/PrivatePage/PageModelFactory.js +20 -25
  701. package/models/cms/PrivatePage/PageModelFactory.js.map +1 -1
  702. package/models/cms/PrivatePage/__tests__/PageModelFactory.test.js +218 -234
  703. package/models/cms/PrivatePage/__tests__/PageModelFactory.test.js.map +1 -1
  704. package/models/cms/PrivatePage/__tests__/PagePublishingDecorator.js +33 -36
  705. package/models/cms/PrivatePage/__tests__/PagePublishingDecorator.js.map +1 -1
  706. package/models/cms/PrivatePage/__tests__/PageSeoDecorator.js +25 -26
  707. package/models/cms/PrivatePage/__tests__/PageSeoDecorator.js.map +1 -1
  708. package/models/cms/PrivatePage/abstractions.js +3 -9
  709. package/models/cms/PrivatePage/abstractions.js.map +1 -1
  710. package/models/cms/__tests__/PrivateCmsModelBuilder.test.js +173 -185
  711. package/models/cms/__tests__/PrivateCmsModelBuilder.test.js.map +1 -1
  712. package/models/cms/abstractions.js +3 -20
  713. package/models/cms/abstractions.js.map +1 -1
  714. package/models/cms/types.js +0 -3
  715. package/models/simple/Page/PageModelBuilder.js +15 -14
  716. package/models/simple/Page/PageModelBuilder.js.map +1 -1
  717. package/models/simple/Page/PageModelFactory.js +16 -15
  718. package/models/simple/Page/PageModelFactory.js.map +1 -1
  719. package/models/simple/Page/__tests__/PageModelBuilderDecorator.js +21 -20
  720. package/models/simple/Page/__tests__/PageModelBuilderDecorator.js.map +1 -1
  721. package/models/simple/Page/__tests__/PageModelBuilderDecorator2.js +17 -16
  722. package/models/simple/Page/__tests__/PageModelBuilderDecorator2.js.map +1 -1
  723. package/models/simple/Page/__tests__/PageModelFactory.test.js +28 -28
  724. package/models/simple/Page/__tests__/PageModelFactory.test.js.map +1 -1
  725. package/models/simple/Page/abstractions.js +9 -8
  726. package/models/simple/Page/abstractions.js.map +1 -1
  727. package/package.json +22 -22
  728. package/types/core.js +0 -3
  729. package/types/security.js +0 -3
  730. package/types/tenancy.js +0 -3
  731. package/types/users.js +0 -3
  732. package/domain/tenancy/errors.js.map +0 -1
  733. package/exports/api/build-params.js.map +0 -1
  734. package/exports/api/event-publisher.js.map +0 -1
  735. package/exports/api/graphql.js.map +0 -1
  736. package/exports/api/key-value-store.js.map +0 -1
  737. package/exports/api/logger.js.map +0 -1
  738. package/exports/api/security/api-key.js.map +0 -1
  739. package/exports/api/security/authentication.js.map +0 -1
  740. package/exports/api/security/role.js.map +0 -1
  741. package/exports/api/security/user.js.map +0 -1
  742. package/exports/api/security.js.map +0 -1
  743. package/exports/api/system.js.map +0 -1
  744. package/exports/api/tasks.js.map +0 -1
  745. package/exports/api/tenancy.js.map +0 -1
  746. package/exports/api.js.map +0 -1
  747. package/features/ai/index.js.map +0 -1
  748. package/features/buildParams/index.js.map +0 -1
  749. package/features/encryption/index.js.map +0 -1
  750. package/features/eventPublisher/index.js.map +0 -1
  751. package/features/keyValueStore/index.js.map +0 -1
  752. package/features/logger/index.js.map +0 -1
  753. package/features/masker/index.js.map +0 -1
  754. package/features/security/IdentityContext/index.js.map +0 -1
  755. package/features/security/apiKeys/CreateApiKey/index.js.map +0 -1
  756. package/features/security/apiKeys/DeleteApiKey/index.js.map +0 -1
  757. package/features/security/apiKeys/GetApiKey/index.js.map +0 -1
  758. package/features/security/apiKeys/GetApiKeyBySlug/index.js.map +0 -1
  759. package/features/security/apiKeys/GetApiKeyByToken/index.js.map +0 -1
  760. package/features/security/apiKeys/ListApiKeys/index.js.map +0 -1
  761. package/features/security/apiKeys/UpdateApiKey/index.js.map +0 -1
  762. package/features/security/apiKeys/shared/types.js.map +0 -1
  763. package/features/security/authentication/AuthenticationContext/index.js.map +0 -1
  764. package/features/security/authentication/Authenticator/index.js.map +0 -1
  765. package/features/security/authorization/AuthorizationContext/index.js.map +0 -1
  766. package/features/security/authorization/Authorizer/index.js.map +0 -1
  767. package/features/security/login/index.js.map +0 -1
  768. package/features/security/permissions/index.js.map +0 -1
  769. package/features/security/permissions/types.js.map +0 -1
  770. package/features/security/roles/CreateRole/index.js.map +0 -1
  771. package/features/security/roles/DeleteRole/index.js.map +0 -1
  772. package/features/security/roles/GetRole/index.js.map +0 -1
  773. package/features/security/roles/ListRoles/index.js.map +0 -1
  774. package/features/security/roles/UpdateRole/index.js.map +0 -1
  775. package/features/security/roles/shared/types.js.map +0 -1
  776. package/features/security/shared/index.js.map +0 -1
  777. package/features/security/teams/CreateTeam/index.js.map +0 -1
  778. package/features/security/teams/DeleteTeam/index.js.map +0 -1
  779. package/features/security/teams/GetTeam/index.js.map +0 -1
  780. package/features/security/teams/ListTeams/index.js.map +0 -1
  781. package/features/security/teams/UpdateTeam/index.js.map +0 -1
  782. package/features/security/teams/shared/types.js.map +0 -1
  783. package/features/system/InstallSystem/index.js.map +0 -1
  784. package/features/task/TaskController/index.js.map +0 -1
  785. package/features/task/TaskDefinition/index.js.map +0 -1
  786. package/features/task/TaskService/index.js.map +0 -1
  787. package/features/tenancy/CreateTenant/index.js.map +0 -1
  788. package/features/tenancy/DeleteTenant/index.js.map +0 -1
  789. package/features/tenancy/GetRootTenant/index.js.map +0 -1
  790. package/features/tenancy/GetTenantById/index.js.map +0 -1
  791. package/features/tenancy/InstallTenant/index.js.map +0 -1
  792. package/features/tenancy/ListTenants/index.js.map +0 -1
  793. package/features/tenancy/TenantContext/index.js.map +0 -1
  794. package/features/tenancy/UpdateTenant/index.js.map +0 -1
  795. package/features/users/CreateUser/index.js.map +0 -1
  796. package/features/users/DeleteUser/index.js.map +0 -1
  797. package/features/users/ExternalIdpUserSync/index.js.map +0 -1
  798. package/features/users/GetIdentityProfile/index.js.map +0 -1
  799. package/features/users/GetIdentityProfile/types.js.map +0 -1
  800. package/features/users/GetUser/index.js.map +0 -1
  801. package/features/users/ListUserTeams/index.js.map +0 -1
  802. package/features/users/ListUsers/index.js.map +0 -1
  803. package/features/users/UpdateUser/index.js.map +0 -1
  804. package/features/users/shared/types.js.map +0 -1
  805. package/features/wcp/WcpContext/index.js.map +0 -1
  806. package/features/wcp/WcpContext/types.js.map +0 -1
  807. package/idp/index.js.map +0 -1
  808. package/idp/types.js.map +0 -1
  809. package/index.js.map +0 -1
  810. package/models/base/ModelFactory.js.map +0 -1
  811. package/models/base/abstractions.js.map +0 -1
  812. package/models/cms/types.js.map +0 -1
  813. package/types/core.js.map +0 -1
  814. package/types/security.js.map +0 -1
  815. package/types/tenancy.js.map +0 -1
  816. package/types/users.js.map +0 -1
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { AuthenticationContext } from "./AuthenticationContext.js";
3
- export const AuthenticationContextFeature = createFeature({
4
- name: "AuthenticationContext",
5
- register(container) {
6
- container.register(AuthenticationContext).inSingletonScope();
7
- }
3
+ const AuthenticationContextFeature = createFeature({
4
+ name: "AuthenticationContext",
5
+ register (container) {
6
+ container.register(AuthenticationContext).inSingletonScope();
7
+ }
8
8
  });
9
+ export { AuthenticationContextFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","AuthenticationContext","AuthenticationContextFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { AuthenticationContext } from \"./AuthenticationContext.js\";\n\nexport const AuthenticationContextFeature = createFeature({\n name: \"AuthenticationContext\",\n register(container) {\n container.register(AuthenticationContext).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,qBAAqB;AAE9B,OAAO,MAAMC,4BAA4B,GAAGF,aAAa,CAAC;EACtDG,IAAI,EAAE,uBAAuB;EAC7BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,qBAAqB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EAChE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authentication/AuthenticationContext/feature.js","sources":["../../../../../src/features/security/authentication/AuthenticationContext/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { AuthenticationContext } from \"./AuthenticationContext.js\";\n\nexport const AuthenticationContextFeature = createFeature({\n name: \"AuthenticationContext\",\n register(container) {\n container.register(AuthenticationContext).inSingletonScope();\n }\n});\n"],"names":["AuthenticationContextFeature","createFeature","container","AuthenticationContext"],"mappings":";;AAGO,MAAMA,+BAA+BC,cAAc;IACtD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,uBAAuB,gBAAgB;IAC9D;AACJ"}
@@ -1,6 +1,4 @@
1
- export { AuthenticationContextFeature } from "./feature.js";
2
- export { AuthenticationContext } from "./abstractions.js";
3
1
  export * from "./events.js";
4
2
  export * from "./errors.js";
5
-
6
- //# sourceMappingURL=index.js.map
3
+ export { AuthenticationContextFeature } from "./feature.js";
4
+ export { AuthenticationContext } from "./abstractions.js";
@@ -1,5 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- /** Convert an authentication token into identity data. */
3
- export const Authenticator = createAbstraction("Authenticator");
2
+ const Authenticator = createAbstraction("Authenticator");
3
+ export { Authenticator };
4
4
 
5
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","Authenticator"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IdentityData } from \"~/features/security/IdentityContext/Identity.js\";\n\nexport interface IAuthenticator {\n authenticate(token: string): Promise<IdentityData | null>;\n}\n\n/** Convert an authentication token into identity data. */\nexport const Authenticator = createAbstraction<IAuthenticator>(\"Authenticator\");\n\nexport namespace Authenticator {\n export type Interface = IAuthenticator;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAOvD;AACA,OAAO,MAAMC,aAAa,GAAGD,iBAAiB,CAAiB,eAAe,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authentication/Authenticator/abstractions.js","sources":["../../../../../src/features/security/authentication/Authenticator/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IdentityData } from \"~/features/security/IdentityContext/Identity.js\";\n\nexport interface IAuthenticator {\n authenticate(token: string): Promise<IdentityData | null>;\n}\n\n/** Convert an authentication token into identity data. */\nexport const Authenticator = createAbstraction<IAuthenticator>(\"Authenticator\");\n\nexport namespace Authenticator {\n export type Interface = IAuthenticator;\n}\n"],"names":["Authenticator","createAbstraction"],"mappings":";AAQO,MAAMA,gBAAgBC,kBAAkC"}
@@ -1,3 +1 @@
1
1
  export * from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,67 +1,54 @@
1
1
  import { AsyncLocalStorage } from "async_hooks";
2
2
  const authorizationEnabledStorage = new AsyncLocalStorage();
3
- export class AuthorizationContext {
4
- constructor(getAuthorizers, getTransformers) {
5
- this.getAuthorizers = getAuthorizers;
6
- this.getTransformers = getTransformers;
7
- }
8
- async loadPermissions(identity) {
9
- if (this.permissions) {
10
- return this.permissions;
3
+ class AuthorizationContext {
4
+ constructor(getAuthorizers, getTransformers){
5
+ this.getAuthorizers = getAuthorizers;
6
+ this.getTransformers = getTransformers;
11
7
  }
12
- if (this.permissionsLoader) {
13
- return this.permissionsLoader;
8
+ async loadPermissions(identity) {
9
+ if (this.permissions) return this.permissions;
10
+ if (this.permissionsLoader) return this.permissionsLoader;
11
+ this.permissionsLoader = new Promise(async (resolve)=>{
12
+ const authorizers = this.getAuthorizers();
13
+ for (const authorizer of authorizers){
14
+ const permissions = await authorizer.authorize(identity);
15
+ if (Array.isArray(permissions)) {
16
+ this.permissions = this.transformPermissions(permissions);
17
+ return resolve(this.permissions);
18
+ }
19
+ }
20
+ this.permissions = [];
21
+ resolve(this.permissions);
22
+ });
23
+ return this.permissionsLoader;
14
24
  }
15
- this.permissionsLoader = new Promise(async resolve => {
16
- // Execute authorizers in sequence until one returns permissions
17
- const authorizers = this.getAuthorizers();
18
- for (const authorizer of authorizers) {
19
- const permissions = await authorizer.authorize(identity);
20
- if (Array.isArray(permissions)) {
21
- this.permissions = this.transformPermissions(permissions);
22
- return resolve(this.permissions);
23
- }
24
- }
25
-
26
- // No authorizer returned permissions
27
- this.permissions = [];
28
- resolve(this.permissions);
29
- });
30
- return this.permissionsLoader;
31
- }
32
- isAuthorizationEnabled() {
33
- const override = authorizationEnabledStorage.getStore();
34
- return override ?? true;
35
- }
36
- withoutAuthorization(cb) {
37
- return authorizationEnabledStorage.run(false, cb);
38
- }
39
- clearPermissionsCache() {
40
- this.permissions = undefined;
41
- this.permissionsLoader = undefined;
42
- }
43
- transformPermissions(permissions) {
44
- const transformers = this.getTransformers();
45
- if (transformers.length === 0) {
46
- return this.deduplicatePermissions(permissions);
25
+ isAuthorizationEnabled() {
26
+ const override = authorizationEnabledStorage.getStore();
27
+ return override ?? true;
28
+ }
29
+ withoutAuthorization(cb) {
30
+ return authorizationEnabledStorage.run(false, cb);
31
+ }
32
+ clearPermissionsCache() {
33
+ this.permissions = void 0;
34
+ this.permissionsLoader = void 0;
35
+ }
36
+ transformPermissions(permissions) {
37
+ const transformers = this.getTransformers();
38
+ if (0 === transformers.length) return this.deduplicatePermissions(permissions);
39
+ const transformed = permissions.map((permission)=>transformers.map((t)=>t.execute(permission)).flat()).flat();
40
+ return this.deduplicatePermissions(transformed);
41
+ }
42
+ deduplicatePermissions(permissions) {
43
+ const seen = new Set();
44
+ return permissions.filter((permission)=>{
45
+ const key = JSON.stringify(permission);
46
+ if (seen.has(key)) return false;
47
+ seen.add(key);
48
+ return true;
49
+ });
47
50
  }
48
- const transformed = permissions.map(permission => {
49
- // A transformer can return one or multiple permissions, so we flatten the result.
50
- return transformers.map(t => t.execute(permission)).flat();
51
- }).flat();
52
- return this.deduplicatePermissions(transformed);
53
- }
54
- deduplicatePermissions(permissions) {
55
- const seen = new Set();
56
- return permissions.filter(permission => {
57
- const key = JSON.stringify(permission);
58
- if (seen.has(key)) {
59
- return false;
60
- }
61
- seen.add(key);
62
- return true;
63
- });
64
- }
65
51
  }
52
+ export { AuthorizationContext };
66
53
 
67
54
  //# sourceMappingURL=AuthorizationContext.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AsyncLocalStorage","authorizationEnabledStorage","AuthorizationContext","constructor","getAuthorizers","getTransformers","loadPermissions","identity","permissions","permissionsLoader","Promise","resolve","authorizers","authorizer","authorize","Array","isArray","transformPermissions","isAuthorizationEnabled","override","getStore","withoutAuthorization","cb","run","clearPermissionsCache","undefined","transformers","length","deduplicatePermissions","transformed","map","permission","t","execute","flat","seen","Set","filter","key","JSON","stringify","has","add"],"sources":["AuthorizationContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"../Authorizer/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nconst authorizationEnabledStorage = new AsyncLocalStorage<boolean>();\n\nexport class AuthorizationContext implements Abstraction.Interface {\n private permissions?: SecurityPermission[];\n private permissionsLoader?: Promise<SecurityPermission[]>;\n\n constructor(\n private getAuthorizers: () => Authorizer.Interface[],\n private getTransformers: () => PermissionTransformer.Interface[]\n ) {}\n\n async loadPermissions(identity: Identity): Promise<SecurityPermission[]> {\n if (this.permissions) {\n return this.permissions;\n }\n\n if (this.permissionsLoader) {\n return this.permissionsLoader;\n }\n\n this.permissionsLoader = new Promise<SecurityPermission[]>(async resolve => {\n // Execute authorizers in sequence until one returns permissions\n const authorizers = this.getAuthorizers();\n for (const authorizer of authorizers) {\n const permissions = await authorizer.authorize(identity);\n if (Array.isArray(permissions)) {\n this.permissions = this.transformPermissions(permissions);\n return resolve(this.permissions);\n }\n }\n\n // No authorizer returned permissions\n this.permissions = [];\n resolve(this.permissions);\n });\n\n return this.permissionsLoader;\n }\n\n isAuthorizationEnabled(): boolean {\n const override = authorizationEnabledStorage.getStore();\n return override ?? true;\n }\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return authorizationEnabledStorage.run(false, cb);\n }\n\n clearPermissionsCache(): void {\n this.permissions = undefined;\n this.permissionsLoader = undefined;\n }\n\n private transformPermissions(permissions: SecurityPermission[]) {\n const transformers = this.getTransformers();\n if (transformers.length === 0) {\n return this.deduplicatePermissions(permissions);\n }\n\n const transformed = permissions\n .map(permission => {\n // A transformer can return one or multiple permissions, so we flatten the result.\n return transformers.map(t => t.execute(permission)).flat();\n })\n .flat();\n\n return this.deduplicatePermissions(transformed);\n }\n\n private deduplicatePermissions(permissions: SecurityPermission[]) {\n const seen = new Set<string>();\n\n return permissions.filter(permission => {\n const key = JSON.stringify(permission);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,aAAa;AAM/C,MAAMC,2BAA2B,GAAG,IAAID,iBAAiB,CAAU,CAAC;AAEpE,OAAO,MAAME,oBAAoB,CAAkC;EAI/DC,WAAWA,CACCC,cAA4C,EAC5CC,eAAwD,EAClE;IAAA,KAFUD,cAA4C,GAA5CA,cAA4C;IAAA,KAC5CC,eAAwD,GAAxDA,eAAwD;EACjE;EAEH,MAAMC,eAAeA,CAACC,QAAkB,EAAiC;IACrE,IAAI,IAAI,CAACC,WAAW,EAAE;MAClB,OAAO,IAAI,CAACA,WAAW;IAC3B;IAEA,IAAI,IAAI,CAACC,iBAAiB,EAAE;MACxB,OAAO,IAAI,CAACA,iBAAiB;IACjC;IAEA,IAAI,CAACA,iBAAiB,GAAG,IAAIC,OAAO,CAAuB,MAAMC,OAAO,IAAI;MACxE;MACA,MAAMC,WAAW,GAAG,IAAI,CAACR,cAAc,CAAC,CAAC;MACzC,KAAK,MAAMS,UAAU,IAAID,WAAW,EAAE;QAClC,MAAMJ,WAAW,GAAG,MAAMK,UAAU,CAACC,SAAS,CAACP,QAAQ,CAAC;QACxD,IAAIQ,KAAK,CAACC,OAAO,CAACR,WAAW,CAAC,EAAE;UAC5B,IAAI,CAACA,WAAW,GAAG,IAAI,CAACS,oBAAoB,CAACT,WAAW,CAAC;UACzD,OAAOG,OAAO,CAAC,IAAI,CAACH,WAAW,CAAC;QACpC;MACJ;;MAEA;MACA,IAAI,CAACA,WAAW,GAAG,EAAE;MACrBG,OAAO,CAAC,IAAI,CAACH,WAAW,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,IAAI,CAACC,iBAAiB;EACjC;EAEAS,sBAAsBA,CAAA,EAAY;IAC9B,MAAMC,QAAQ,GAAGlB,2BAA2B,CAACmB,QAAQ,CAAC,CAAC;IACvD,OAAOD,QAAQ,IAAI,IAAI;EAC3B;EAEAE,oBAAoBA,CAAIC,EAAoB,EAAc;IACtD,OAAOrB,2BAA2B,CAACsB,GAAG,CAAC,KAAK,EAAED,EAAE,CAAC;EACrD;EAEAE,qBAAqBA,CAAA,EAAS;IAC1B,IAAI,CAAChB,WAAW,GAAGiB,SAAS;IAC5B,IAAI,CAAChB,iBAAiB,GAAGgB,SAAS;EACtC;EAEQR,oBAAoBA,CAACT,WAAiC,EAAE;IAC5D,MAAMkB,YAAY,GAAG,IAAI,CAACrB,eAAe,CAAC,CAAC;IAC3C,IAAIqB,YAAY,CAACC,MAAM,KAAK,CAAC,EAAE;MAC3B,OAAO,IAAI,CAACC,sBAAsB,CAACpB,WAAW,CAAC;IACnD;IAEA,MAAMqB,WAAW,GAAGrB,WAAW,CAC1BsB,GAAG,CAACC,UAAU,IAAI;MACf;MACA,OAAOL,YAAY,CAACI,GAAG,CAACE,CAAC,IAAIA,CAAC,CAACC,OAAO,CAACF,UAAU,CAAC,CAAC,CAACG,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CACDA,IAAI,CAAC,CAAC;IAEX,OAAO,IAAI,CAACN,sBAAsB,CAACC,WAAW,CAAC;EACnD;EAEQD,sBAAsBA,CAACpB,WAAiC,EAAE;IAC9D,MAAM2B,IAAI,GAAG,IAAIC,GAAG,CAAS,CAAC;IAE9B,OAAO5B,WAAW,CAAC6B,MAAM,CAACN,UAAU,IAAI;MACpC,MAAMO,GAAG,GAAGC,IAAI,CAACC,SAAS,CAACT,UAAU,CAAC;MACtC,IAAII,IAAI,CAACM,GAAG,CAACH,GAAG,CAAC,EAAE;QACf,OAAO,KAAK;MAChB;MACAH,IAAI,CAACO,GAAG,CAACJ,GAAG,CAAC;MACb,OAAO,IAAI;IACf,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/AuthorizationContext/AuthorizationContext.js","sources":["../../../../../src/features/security/authorization/AuthorizationContext/AuthorizationContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"../Authorizer/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nconst authorizationEnabledStorage = new AsyncLocalStorage<boolean>();\n\nexport class AuthorizationContext implements Abstraction.Interface {\n private permissions?: SecurityPermission[];\n private permissionsLoader?: Promise<SecurityPermission[]>;\n\n constructor(\n private getAuthorizers: () => Authorizer.Interface[],\n private getTransformers: () => PermissionTransformer.Interface[]\n ) {}\n\n async loadPermissions(identity: Identity): Promise<SecurityPermission[]> {\n if (this.permissions) {\n return this.permissions;\n }\n\n if (this.permissionsLoader) {\n return this.permissionsLoader;\n }\n\n this.permissionsLoader = new Promise<SecurityPermission[]>(async resolve => {\n // Execute authorizers in sequence until one returns permissions\n const authorizers = this.getAuthorizers();\n for (const authorizer of authorizers) {\n const permissions = await authorizer.authorize(identity);\n if (Array.isArray(permissions)) {\n this.permissions = this.transformPermissions(permissions);\n return resolve(this.permissions);\n }\n }\n\n // No authorizer returned permissions\n this.permissions = [];\n resolve(this.permissions);\n });\n\n return this.permissionsLoader;\n }\n\n isAuthorizationEnabled(): boolean {\n const override = authorizationEnabledStorage.getStore();\n return override ?? true;\n }\n\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T> {\n return authorizationEnabledStorage.run(false, cb);\n }\n\n clearPermissionsCache(): void {\n this.permissions = undefined;\n this.permissionsLoader = undefined;\n }\n\n private transformPermissions(permissions: SecurityPermission[]) {\n const transformers = this.getTransformers();\n if (transformers.length === 0) {\n return this.deduplicatePermissions(permissions);\n }\n\n const transformed = permissions\n .map(permission => {\n // A transformer can return one or multiple permissions, so we flatten the result.\n return transformers.map(t => t.execute(permission)).flat();\n })\n .flat();\n\n return this.deduplicatePermissions(transformed);\n }\n\n private deduplicatePermissions(permissions: SecurityPermission[]) {\n const seen = new Set<string>();\n\n return permissions.filter(permission => {\n const key = JSON.stringify(permission);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n}\n"],"names":["authorizationEnabledStorage","AsyncLocalStorage","AuthorizationContext","getAuthorizers","getTransformers","identity","Promise","resolve","authorizers","authorizer","permissions","Array","override","cb","undefined","transformers","transformed","permission","t","seen","Set","key","JSON"],"mappings":";AAMA,MAAMA,8BAA8B,IAAIC;AAEjC,MAAMC;IAIT,YACYC,cAA4C,EAC5CC,eAAwD,CAClE;aAFUD,cAAc,GAAdA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,gBAAgBC,QAAkB,EAAiC;QACrE,IAAI,IAAI,CAAC,WAAW,EAChB,OAAO,IAAI,CAAC,WAAW;QAG3B,IAAI,IAAI,CAAC,iBAAiB,EACtB,OAAO,IAAI,CAAC,iBAAiB;QAGjC,IAAI,CAAC,iBAAiB,GAAG,IAAIC,QAA8B,OAAMC;YAE7D,MAAMC,cAAc,IAAI,CAAC,cAAc;YACvC,KAAK,MAAMC,cAAcD,YAAa;gBAClC,MAAME,cAAc,MAAMD,WAAW,SAAS,CAACJ;gBAC/C,IAAIM,MAAM,OAAO,CAACD,cAAc;oBAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAACA;oBAC7C,OAAOH,QAAQ,IAAI,CAAC,WAAW;gBACnC;YACJ;YAGA,IAAI,CAAC,WAAW,GAAG,EAAE;YACrBA,QAAQ,IAAI,CAAC,WAAW;QAC5B;QAEA,OAAO,IAAI,CAAC,iBAAiB;IACjC;IAEA,yBAAkC;QAC9B,MAAMK,WAAWZ,4BAA4B,QAAQ;QACrD,OAAOY,YAAY;IACvB;IAEA,qBAAwBC,EAAoB,EAAc;QACtD,OAAOb,4BAA4B,GAAG,CAAC,OAAOa;IAClD;IAEA,wBAA8B;QAC1B,IAAI,CAAC,WAAW,GAAGC;QACnB,IAAI,CAAC,iBAAiB,GAAGA;IAC7B;IAEQ,qBAAqBJ,WAAiC,EAAE;QAC5D,MAAMK,eAAe,IAAI,CAAC,eAAe;QACzC,IAAIA,AAAwB,MAAxBA,aAAa,MAAM,EACnB,OAAO,IAAI,CAAC,sBAAsB,CAACL;QAGvC,MAAMM,cAAcN,YACf,GAAG,CAACO,CAAAA,aAEMF,aAAa,GAAG,CAACG,CAAAA,IAAKA,EAAE,OAAO,CAACD,aAAa,IAAI,IAE3D,IAAI;QAET,OAAO,IAAI,CAAC,sBAAsB,CAACD;IACvC;IAEQ,uBAAuBN,WAAiC,EAAE;QAC9D,MAAMS,OAAO,IAAIC;QAEjB,OAAOV,YAAY,MAAM,CAACO,CAAAA;YACtB,MAAMI,MAAMC,KAAK,SAAS,CAACL;YAC3B,IAAIE,KAAK,GAAG,CAACE,MACT,OAAO;YAEXF,KAAK,GAAG,CAACE;YACT,OAAO;QACX;IACJ;AACJ"}
@@ -1,7 +1,6 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- /** Load and cache security permissions for the current identity. */
3
- export const AuthorizationContext = createAbstraction("AuthorizationContext");
4
- /** Transform security permissions before they are applied. */
5
- export const PermissionTransformer = createAbstraction("PermissionTransformer");
2
+ const AuthorizationContext = createAbstraction("AuthorizationContext");
3
+ const PermissionTransformer = createAbstraction("PermissionTransformer");
4
+ export { AuthorizationContext, PermissionTransformer };
6
5
 
7
6
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","AuthorizationContext","PermissionTransformer"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nexport interface IAuthorizationContext {\n loadPermissions(identity: Identity): Promise<SecurityPermission[]>;\n isAuthorizationEnabled(): boolean;\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T>;\n clearPermissionsCache(): void;\n}\n\n/** Load and cache security permissions for the current identity. */\nexport const AuthorizationContext =\n createAbstraction<IAuthorizationContext>(\"AuthorizationContext\");\n\nexport namespace AuthorizationContext {\n export type Interface = IAuthorizationContext;\n}\n\nexport interface IPermissionTransformer {\n execute(permission: SecurityPermission): SecurityPermission | SecurityPermission[];\n}\n\n/** Transform security permissions before they are applied. */\nexport const PermissionTransformer =\n createAbstraction<IPermissionTransformer>(\"PermissionTransformer\");\n\nexport namespace PermissionTransformer {\n export type Interface = IPermissionTransformer;\n export type Permission = SecurityPermission;\n export type Return = SecurityPermission | SecurityPermission[];\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAWvD;AACA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC;AAUpE;AACA,OAAO,MAAME,qBAAqB,GAC9BF,iBAAiB,CAAyB,uBAAuB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/AuthorizationContext/abstractions.js","sources":["../../../../../src/features/security/authorization/AuthorizationContext/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nexport interface IAuthorizationContext {\n loadPermissions(identity: Identity): Promise<SecurityPermission[]>;\n isAuthorizationEnabled(): boolean;\n withoutAuthorization<T>(cb: () => Promise<T>): Promise<T>;\n clearPermissionsCache(): void;\n}\n\n/** Load and cache security permissions for the current identity. */\nexport const AuthorizationContext =\n createAbstraction<IAuthorizationContext>(\"AuthorizationContext\");\n\nexport namespace AuthorizationContext {\n export type Interface = IAuthorizationContext;\n}\n\nexport interface IPermissionTransformer {\n execute(permission: SecurityPermission): SecurityPermission | SecurityPermission[];\n}\n\n/** Transform security permissions before they are applied. */\nexport const PermissionTransformer =\n createAbstraction<IPermissionTransformer>(\"PermissionTransformer\");\n\nexport namespace PermissionTransformer {\n export type Interface = IPermissionTransformer;\n export type Permission = SecurityPermission;\n export type Return = SecurityPermission | SecurityPermission[];\n}\n"],"names":["AuthorizationContext","createAbstraction","PermissionTransformer"],"mappings":";AAYO,MAAMA,uBACTC,kBAAyC;AAWtC,MAAMC,wBACTD,kBAA0C"}
@@ -1,15 +1,16 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { AuthorizationContext } from "./AuthorizationContext.js";
3
- import { AuthorizationContext as Abstraction, PermissionTransformer } from "./abstractions.js";
3
+ import { AuthorizationContext as external_abstractions_js_AuthorizationContext, PermissionTransformer } from "./abstractions.js";
4
4
  import { Authorizer } from "../Authorizer/index.js";
5
- export const AuthorizationContextFeature = createFeature({
6
- name: "AuthorizationContext",
7
- register(container) {
8
- const getAuthorizers = () => container.resolveAll(Authorizer);
9
- const getTransformers = () => container.resolveAll(PermissionTransformer);
10
- const authorizationContext = new AuthorizationContext(getAuthorizers, getTransformers);
11
- container.registerInstance(Abstraction, authorizationContext);
12
- }
5
+ const AuthorizationContextFeature = createFeature({
6
+ name: "AuthorizationContext",
7
+ register (container) {
8
+ const getAuthorizers = ()=>container.resolveAll(Authorizer);
9
+ const getTransformers = ()=>container.resolveAll(PermissionTransformer);
10
+ const authorizationContext = new AuthorizationContext(getAuthorizers, getTransformers);
11
+ container.registerInstance(external_abstractions_js_AuthorizationContext, authorizationContext);
12
+ }
13
13
  });
14
+ export { AuthorizationContextFeature };
14
15
 
15
16
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","AuthorizationContext","Abstraction","PermissionTransformer","Authorizer","AuthorizationContextFeature","name","register","container","getAuthorizers","resolveAll","getTransformers","authorizationContext","registerInstance"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { AuthorizationContext } from \"./AuthorizationContext.js\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\n\nexport const AuthorizationContextFeature = createFeature({\n name: \"AuthorizationContext\",\n register(container) {\n const getAuthorizers = () => container.resolveAll(Authorizer);\n const getTransformers = () => container.resolveAll(PermissionTransformer);\n\n const authorizationContext = new AuthorizationContext(getAuthorizers, getTransformers);\n\n container.registerInstance(Abstraction, authorizationContext);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,oBAAoB;AAC7B,SAASA,oBAAoB,IAAIC,WAAW,EAAEC,qBAAqB;AACnE,SAASC,UAAU;AAEnB,OAAO,MAAMC,2BAA2B,GAAGL,aAAa,CAAC;EACrDM,IAAI,EAAE,sBAAsB;EAC5BC,QAAQA,CAACC,SAAS,EAAE;IAChB,MAAMC,cAAc,GAAGA,CAAA,KAAMD,SAAS,CAACE,UAAU,CAACN,UAAU,CAAC;IAC7D,MAAMO,eAAe,GAAGA,CAAA,KAAMH,SAAS,CAACE,UAAU,CAACP,qBAAqB,CAAC;IAEzE,MAAMS,oBAAoB,GAAG,IAAIX,oBAAoB,CAACQ,cAAc,EAAEE,eAAe,CAAC;IAEtFH,SAAS,CAACK,gBAAgB,CAACX,WAAW,EAAEU,oBAAoB,CAAC;EACjE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/AuthorizationContext/feature.js","sources":["../../../../../src/features/security/authorization/AuthorizationContext/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { AuthorizationContext } from \"./AuthorizationContext.js\";\nimport { AuthorizationContext as Abstraction, PermissionTransformer } from \"./abstractions.js\";\nimport { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\n\nexport const AuthorizationContextFeature = createFeature({\n name: \"AuthorizationContext\",\n register(container) {\n const getAuthorizers = () => container.resolveAll(Authorizer);\n const getTransformers = () => container.resolveAll(PermissionTransformer);\n\n const authorizationContext = new AuthorizationContext(getAuthorizers, getTransformers);\n\n container.registerInstance(Abstraction, authorizationContext);\n }\n});\n"],"names":["AuthorizationContextFeature","createFeature","container","getAuthorizers","Authorizer","getTransformers","PermissionTransformer","authorizationContext","AuthorizationContext","Abstraction"],"mappings":";;;;AAKO,MAAMA,8BAA8BC,cAAc;IACrD,MAAM;IACN,UAASC,SAAS;QACd,MAAMC,iBAAiB,IAAMD,UAAU,UAAU,CAACE;QAClD,MAAMC,kBAAkB,IAAMH,UAAU,UAAU,CAACI;QAEnD,MAAMC,uBAAuB,IAAIC,qBAAqBL,gBAAgBE;QAEtEH,UAAU,gBAAgB,CAACO,+CAAaF;IAC5C;AACJ"}
@@ -1,5 +1,2 @@
1
1
  export { AuthorizationContextFeature } from "./feature.js";
2
- export { AuthorizationContext } from "./abstractions.js";
3
- export { PermissionTransformer } from "./abstractions.js";
4
-
5
- //# sourceMappingURL=index.js.map
2
+ export { AuthorizationContext, PermissionTransformer } from "./abstractions.js";
@@ -1,5 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- /** Retrieve permissions for an identity. */
3
- export const Authorizer = createAbstraction("Authorizer");
2
+ const Authorizer = createAbstraction("Authorizer");
3
+ export { Authorizer };
4
4
 
5
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","Authorizer"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nexport interface IAuthorizer {\n authorize(identity: Identity): Promise<SecurityPermission[] | null>;\n}\n\n/** Retrieve permissions for an identity. */\nexport const Authorizer = createAbstraction<IAuthorizer>(\"Authorizer\");\n\nexport namespace Authorizer {\n export type Interface = IAuthorizer;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAQvD;AACA,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/Authorizer/abstractions.js","sources":["../../../../../src/features/security/authorization/Authorizer/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\n\nexport interface IAuthorizer {\n authorize(identity: Identity): Promise<SecurityPermission[] | null>;\n}\n\n/** Retrieve permissions for an identity. */\nexport const Authorizer = createAbstraction<IAuthorizer>(\"Authorizer\");\n\nexport namespace Authorizer {\n export type Interface = IAuthorizer;\n}\n"],"names":["Authorizer","createAbstraction"],"mappings":";AASO,MAAMA,aAAaC,kBAA+B"}
@@ -1,3 +1 @@
1
1
  export * from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -5,76 +5,72 @@ import { TeamsRepository } from "../../teams/shared/abstractions.js";
5
5
  import { getPermissionsFromRoles } from "../../utils/getPermissionsFromRoles.js";
6
6
  import { AdminUsersRepository } from "../../../users/shared/abstractions.js";
7
7
  class GetPermissionsFromGroupsAndTeamsImpl {
8
- constructor(wcpContext, usersRepository, rolesRepository, teamsRepository) {
9
- this.wcpContext = wcpContext;
10
- this.usersRepository = usersRepository;
11
- this.rolesRepository = rolesRepository;
12
- this.teamsRepository = teamsRepository;
13
- }
14
- async getPermissions(identity) {
15
- const userResult = await this.usersRepository.get({
16
- id: identity.id
17
- });
18
- if (userResult.isFail()) {
19
- return null;
8
+ constructor(wcpContext, usersRepository, rolesRepository, teamsRepository){
9
+ this.wcpContext = wcpContext;
10
+ this.usersRepository = usersRepository;
11
+ this.rolesRepository = rolesRepository;
12
+ this.teamsRepository = teamsRepository;
20
13
  }
21
- const user = userResult.value;
22
-
23
- // Load roles that are associated with the current identity. Also load roles
24
- // that are assigned via one or more teams (if the Teams feature is enabled).
25
- const roleIds = [];
26
- const teamIds = [];
27
- roleIds.push(...(user.roles ?? []));
28
- const filteredRoleIds = roleIds.filter(Boolean);
29
- const dedupedRoleIds = Array.from(new Set(filteredRoleIds));
30
- const loadedRoles = [];
31
- if (dedupedRoleIds.length > 0) {
32
- const rolesResult = await this.rolesRepository.list({
33
- where: {
34
- id_in: dedupedRoleIds
35
- }
36
- });
37
- const loadedRolesByIds = rolesResult.isOk() ? rolesResult.value : [];
38
- loadedRoles.push(...loadedRolesByIds);
39
- }
40
- if (this.wcpContext.canUseTeams()) {
41
- teamIds.push(...(user.teams ?? []));
42
- const filteredTeamIds = teamIds.filter(Boolean);
43
- const dedupedTeamIds = Array.from(new Set(filteredTeamIds));
44
- if (dedupedTeamIds.length > 0) {
45
- const teamsResult = await this.teamsRepository.list({
46
- where: {
47
- id_in: dedupedTeamIds
48
- }
14
+ async getPermissions(identity) {
15
+ const userResult = await this.usersRepository.get({
16
+ id: identity.id
49
17
  });
50
- const loadedTeams = teamsResult.isOk() ? teamsResult.value : [];
51
-
52
- // Upon returning teams, we're filtering out team roles that were already loaded.
53
- // Also note that `team.roles` contains role IDs, not slugs.
54
- const roleIdsFromTeams = loadedTeams.flatMap(team => team.roles).filter(roleId => {
55
- const alreadyLoaded = loadedRoles.find(role => role.id === roleId);
56
- return !alreadyLoaded;
57
- });
58
- if (roleIdsFromTeams.length > 0) {
59
- const moreRolesResult = await this.rolesRepository.list({
60
- where: {
61
- id_in: roleIdsFromTeams
18
+ if (userResult.isFail()) return null;
19
+ const user = userResult.value;
20
+ const roleIds = [];
21
+ const teamIds = [];
22
+ roleIds.push(...user.roles ?? []);
23
+ const filteredRoleIds = roleIds.filter(Boolean);
24
+ const dedupedRoleIds = Array.from(new Set(filteredRoleIds));
25
+ const loadedRoles = [];
26
+ if (dedupedRoleIds.length > 0) {
27
+ const rolesResult = await this.rolesRepository.list({
28
+ where: {
29
+ id_in: dedupedRoleIds
30
+ }
31
+ });
32
+ const loadedRolesByIds = rolesResult.isOk() ? rolesResult.value : [];
33
+ loadedRoles.push(...loadedRolesByIds);
34
+ }
35
+ if (this.wcpContext.canUseTeams()) {
36
+ teamIds.push(...user.teams ?? []);
37
+ const filteredTeamIds = teamIds.filter(Boolean);
38
+ const dedupedTeamIds = Array.from(new Set(filteredTeamIds));
39
+ if (dedupedTeamIds.length > 0) {
40
+ const teamsResult = await this.teamsRepository.list({
41
+ where: {
42
+ id_in: dedupedTeamIds
43
+ }
44
+ });
45
+ const loadedTeams = teamsResult.isOk() ? teamsResult.value : [];
46
+ const roleIdsFromTeams = loadedTeams.flatMap((team)=>team.roles).filter((roleId)=>{
47
+ const alreadyLoaded = loadedRoles.find((role)=>role.id === roleId);
48
+ return !alreadyLoaded;
49
+ });
50
+ if (roleIdsFromTeams.length > 0) {
51
+ const moreRolesResult = await this.rolesRepository.list({
52
+ where: {
53
+ id_in: roleIdsFromTeams
54
+ }
55
+ });
56
+ const rolesFromTeams = moreRolesResult.isOk() ? moreRolesResult.value : [];
57
+ loadedRoles.push(...rolesFromTeams);
58
+ }
62
59
  }
63
- });
64
- const rolesFromTeams = moreRolesResult.isOk() ? moreRolesResult.value : [];
65
- loadedRoles.push(...rolesFromTeams);
66
60
  }
67
- }
68
- }
69
- if (loadedRoles.length > 0) {
70
- return getPermissionsFromRoles(loadedRoles);
61
+ if (loadedRoles.length > 0) return getPermissionsFromRoles(loadedRoles);
62
+ return null;
71
63
  }
72
- return null;
73
- }
74
64
  }
75
- export const GetPermissionsFromIdentity = PermissionsProcessor.createImplementation({
76
- implementation: GetPermissionsFromGroupsAndTeamsImpl,
77
- dependencies: [WcpContext, AdminUsersRepository, RolesRepository, TeamsRepository]
65
+ const GetPermissionsFromIdentity = PermissionsProcessor.createImplementation({
66
+ implementation: GetPermissionsFromGroupsAndTeamsImpl,
67
+ dependencies: [
68
+ WcpContext,
69
+ AdminUsersRepository,
70
+ RolesRepository,
71
+ TeamsRepository
72
+ ]
78
73
  });
74
+ export { GetPermissionsFromIdentity };
79
75
 
80
76
  //# sourceMappingURL=GetPermissionsFromIdentity.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WcpContext","PermissionsProcessor","RolesRepository","TeamsRepository","getPermissionsFromRoles","AdminUsersRepository","GetPermissionsFromGroupsAndTeamsImpl","constructor","wcpContext","usersRepository","rolesRepository","teamsRepository","getPermissions","identity","userResult","get","id","isFail","user","value","roleIds","teamIds","push","roles","filteredRoleIds","filter","Boolean","dedupedRoleIds","Array","from","Set","loadedRoles","length","rolesResult","list","where","id_in","loadedRolesByIds","isOk","canUseTeams","teams","filteredTeamIds","dedupedTeamIds","teamsResult","loadedTeams","roleIdsFromTeams","flatMap","team","roleId","alreadyLoaded","find","role","moreRolesResult","rolesFromTeams","GetPermissionsFromIdentity","createImplementation","implementation","dependencies"],"sources":["GetPermissionsFromIdentity.ts"],"sourcesContent":["import { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\nimport type { SecurityRole } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\nimport { PermissionsProcessor } from \"./abstractions.js\";\nimport { RolesRepository } from \"~/features/security/roles/shared/abstractions.js\";\nimport { TeamsRepository } from \"~/features/security/teams/shared/abstractions.js\";\nimport { getPermissionsFromRoles } from \"~/features/security/utils/getPermissionsFromRoles.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\n\nexport type RoleId = string | undefined;\nexport type TeamId = string | undefined;\n\nclass GetPermissionsFromGroupsAndTeamsImpl implements PermissionsProcessor.Interface {\n constructor(\n private wcpContext: WcpContext.Interface,\n private usersRepository: AdminUsersRepository.Interface,\n private rolesRepository: RolesRepository.Interface,\n private teamsRepository: TeamsRepository.Interface\n ) {}\n\n async getPermissions(identity: Identity) {\n const userResult = await this.usersRepository.get({ id: identity.id });\n if (userResult.isFail()) {\n return null;\n }\n\n const user = userResult.value;\n\n // Load roles that are associated with the current identity. Also load roles\n // that are assigned via one or more teams (if the Teams feature is enabled).\n const roleIds: RoleId[] = [];\n const teamIds: TeamId[] = [];\n\n roleIds.push(...(user.roles ?? []));\n\n const filteredRoleIds = roleIds.filter(Boolean) as string[];\n const dedupedRoleIds = Array.from(new Set(filteredRoleIds));\n\n const loadedRoles: SecurityRole[] = [];\n\n if (dedupedRoleIds.length > 0) {\n const rolesResult = await this.rolesRepository.list({\n where: { id_in: dedupedRoleIds }\n });\n\n const loadedRolesByIds = rolesResult.isOk() ? rolesResult.value : [];\n loadedRoles.push(...loadedRolesByIds);\n }\n\n if (this.wcpContext.canUseTeams()) {\n teamIds.push(...(user.teams ?? []));\n\n const filteredTeamIds = teamIds.filter(Boolean) as string[];\n const dedupedTeamIds = Array.from(new Set(filteredTeamIds));\n\n if (dedupedTeamIds.length > 0) {\n const teamsResult = await this.teamsRepository.list({\n where: { id_in: dedupedTeamIds }\n });\n\n const loadedTeams = teamsResult.isOk() ? teamsResult.value : [];\n\n // Upon returning teams, we're filtering out team roles that were already loaded.\n // Also note that `team.roles` contains role IDs, not slugs.\n const roleIdsFromTeams = loadedTeams\n .flatMap(team => team.roles)\n .filter(roleId => {\n const alreadyLoaded = loadedRoles.find(role => role.id === roleId);\n return !alreadyLoaded;\n });\n\n if (roleIdsFromTeams.length > 0) {\n const moreRolesResult = await this.rolesRepository.list({\n where: { id_in: roleIdsFromTeams }\n });\n\n const rolesFromTeams = moreRolesResult.isOk() ? moreRolesResult.value : [];\n loadedRoles.push(...rolesFromTeams);\n }\n }\n }\n\n if (loadedRoles.length > 0) {\n return getPermissionsFromRoles(loadedRoles);\n }\n\n return null;\n }\n}\n\nexport const GetPermissionsFromIdentity = PermissionsProcessor.createImplementation({\n implementation: GetPermissionsFromGroupsAndTeamsImpl,\n dependencies: [WcpContext, AdminUsersRepository, RolesRepository, TeamsRepository]\n});\n"],"mappings":"AAAA,SAASA,UAAU;AAGnB,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AACxB,SAASC,eAAe;AACxB,SAASC,uBAAuB;AAChC,SAASC,oBAAoB;AAK7B,MAAMC,oCAAoC,CAA2C;EACjFC,WAAWA,CACCC,UAAgC,EAChCC,eAA+C,EAC/CC,eAA0C,EAC1CC,eAA0C,EACpD;IAAA,KAJUH,UAAgC,GAAhCA,UAAgC;IAAA,KAChCC,eAA+C,GAA/CA,eAA+C;IAAA,KAC/CC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,eAA0C,GAA1CA,eAA0C;EACnD;EAEH,MAAMC,cAAcA,CAACC,QAAkB,EAAE;IACrC,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACL,eAAe,CAACM,GAAG,CAAC;MAAEC,EAAE,EAAEH,QAAQ,CAACG;IAAG,CAAC,CAAC;IACtE,IAAIF,UAAU,CAACG,MAAM,CAAC,CAAC,EAAE;MACrB,OAAO,IAAI;IACf;IAEA,MAAMC,IAAI,GAAGJ,UAAU,CAACK,KAAK;;IAE7B;IACA;IACA,MAAMC,OAAiB,GAAG,EAAE;IAC5B,MAAMC,OAAiB,GAAG,EAAE;IAE5BD,OAAO,CAACE,IAAI,CAAC,IAAIJ,IAAI,CAACK,KAAK,IAAI,EAAE,CAAC,CAAC;IAEnC,MAAMC,eAAe,GAAGJ,OAAO,CAACK,MAAM,CAACC,OAAO,CAAa;IAC3D,MAAMC,cAAc,GAAGC,KAAK,CAACC,IAAI,CAAC,IAAIC,GAAG,CAACN,eAAe,CAAC,CAAC;IAE3D,MAAMO,WAA2B,GAAG,EAAE;IAEtC,IAAIJ,cAAc,CAACK,MAAM,GAAG,CAAC,EAAE;MAC3B,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACvB,eAAe,CAACwB,IAAI,CAAC;QAChDC,KAAK,EAAE;UAAEC,KAAK,EAAET;QAAe;MACnC,CAAC,CAAC;MAEF,MAAMU,gBAAgB,GAAGJ,WAAW,CAACK,IAAI,CAAC,CAAC,GAAGL,WAAW,CAACd,KAAK,GAAG,EAAE;MACpEY,WAAW,CAACT,IAAI,CAAC,GAAGe,gBAAgB,CAAC;IACzC;IAEA,IAAI,IAAI,CAAC7B,UAAU,CAAC+B,WAAW,CAAC,CAAC,EAAE;MAC/BlB,OAAO,CAACC,IAAI,CAAC,IAAIJ,IAAI,CAACsB,KAAK,IAAI,EAAE,CAAC,CAAC;MAEnC,MAAMC,eAAe,GAAGpB,OAAO,CAACI,MAAM,CAACC,OAAO,CAAa;MAC3D,MAAMgB,cAAc,GAAGd,KAAK,CAACC,IAAI,CAAC,IAAIC,GAAG,CAACW,eAAe,CAAC,CAAC;MAE3D,IAAIC,cAAc,CAACV,MAAM,GAAG,CAAC,EAAE;QAC3B,MAAMW,WAAW,GAAG,MAAM,IAAI,CAAChC,eAAe,CAACuB,IAAI,CAAC;UAChDC,KAAK,EAAE;YAAEC,KAAK,EAAEM;UAAe;QACnC,CAAC,CAAC;QAEF,MAAME,WAAW,GAAGD,WAAW,CAACL,IAAI,CAAC,CAAC,GAAGK,WAAW,CAACxB,KAAK,GAAG,EAAE;;QAE/D;QACA;QACA,MAAM0B,gBAAgB,GAAGD,WAAW,CAC/BE,OAAO,CAACC,IAAI,IAAIA,IAAI,CAACxB,KAAK,CAAC,CAC3BE,MAAM,CAACuB,MAAM,IAAI;UACd,MAAMC,aAAa,GAAGlB,WAAW,CAACmB,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACnC,EAAE,KAAKgC,MAAM,CAAC;UAClE,OAAO,CAACC,aAAa;QACzB,CAAC,CAAC;QAEN,IAAIJ,gBAAgB,CAACb,MAAM,GAAG,CAAC,EAAE;UAC7B,MAAMoB,eAAe,GAAG,MAAM,IAAI,CAAC1C,eAAe,CAACwB,IAAI,CAAC;YACpDC,KAAK,EAAE;cAAEC,KAAK,EAAES;YAAiB;UACrC,CAAC,CAAC;UAEF,MAAMQ,cAAc,GAAGD,eAAe,CAACd,IAAI,CAAC,CAAC,GAAGc,eAAe,CAACjC,KAAK,GAAG,EAAE;UAC1EY,WAAW,CAACT,IAAI,CAAC,GAAG+B,cAAc,CAAC;QACvC;MACJ;IACJ;IAEA,IAAItB,WAAW,CAACC,MAAM,GAAG,CAAC,EAAE;MACxB,OAAO5B,uBAAuB,CAAC2B,WAAW,CAAC;IAC/C;IAEA,OAAO,IAAI;EACf;AACJ;AAEA,OAAO,MAAMuB,0BAA0B,GAAGrD,oBAAoB,CAACsD,oBAAoB,CAAC;EAChFC,cAAc,EAAElD,oCAAoC;EACpDmD,YAAY,EAAE,CAACzD,UAAU,EAAEK,oBAAoB,EAAEH,eAAe,EAAEC,eAAe;AACrF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js","sources":["../../../../../src/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.ts"],"sourcesContent":["import { WcpContext } from \"~/features/wcp/WcpContext/index.js\";\nimport type { SecurityRole } from \"~/types/security.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\nimport { PermissionsProcessor } from \"./abstractions.js\";\nimport { RolesRepository } from \"~/features/security/roles/shared/abstractions.js\";\nimport { TeamsRepository } from \"~/features/security/teams/shared/abstractions.js\";\nimport { getPermissionsFromRoles } from \"~/features/security/utils/getPermissionsFromRoles.js\";\nimport { AdminUsersRepository } from \"~/features/users/shared/abstractions.js\";\n\nexport type RoleId = string | undefined;\nexport type TeamId = string | undefined;\n\nclass GetPermissionsFromGroupsAndTeamsImpl implements PermissionsProcessor.Interface {\n constructor(\n private wcpContext: WcpContext.Interface,\n private usersRepository: AdminUsersRepository.Interface,\n private rolesRepository: RolesRepository.Interface,\n private teamsRepository: TeamsRepository.Interface\n ) {}\n\n async getPermissions(identity: Identity) {\n const userResult = await this.usersRepository.get({ id: identity.id });\n if (userResult.isFail()) {\n return null;\n }\n\n const user = userResult.value;\n\n // Load roles that are associated with the current identity. Also load roles\n // that are assigned via one or more teams (if the Teams feature is enabled).\n const roleIds: RoleId[] = [];\n const teamIds: TeamId[] = [];\n\n roleIds.push(...(user.roles ?? []));\n\n const filteredRoleIds = roleIds.filter(Boolean) as string[];\n const dedupedRoleIds = Array.from(new Set(filteredRoleIds));\n\n const loadedRoles: SecurityRole[] = [];\n\n if (dedupedRoleIds.length > 0) {\n const rolesResult = await this.rolesRepository.list({\n where: { id_in: dedupedRoleIds }\n });\n\n const loadedRolesByIds = rolesResult.isOk() ? rolesResult.value : [];\n loadedRoles.push(...loadedRolesByIds);\n }\n\n if (this.wcpContext.canUseTeams()) {\n teamIds.push(...(user.teams ?? []));\n\n const filteredTeamIds = teamIds.filter(Boolean) as string[];\n const dedupedTeamIds = Array.from(new Set(filteredTeamIds));\n\n if (dedupedTeamIds.length > 0) {\n const teamsResult = await this.teamsRepository.list({\n where: { id_in: dedupedTeamIds }\n });\n\n const loadedTeams = teamsResult.isOk() ? teamsResult.value : [];\n\n // Upon returning teams, we're filtering out team roles that were already loaded.\n // Also note that `team.roles` contains role IDs, not slugs.\n const roleIdsFromTeams = loadedTeams\n .flatMap(team => team.roles)\n .filter(roleId => {\n const alreadyLoaded = loadedRoles.find(role => role.id === roleId);\n return !alreadyLoaded;\n });\n\n if (roleIdsFromTeams.length > 0) {\n const moreRolesResult = await this.rolesRepository.list({\n where: { id_in: roleIdsFromTeams }\n });\n\n const rolesFromTeams = moreRolesResult.isOk() ? moreRolesResult.value : [];\n loadedRoles.push(...rolesFromTeams);\n }\n }\n }\n\n if (loadedRoles.length > 0) {\n return getPermissionsFromRoles(loadedRoles);\n }\n\n return null;\n }\n}\n\nexport const GetPermissionsFromIdentity = PermissionsProcessor.createImplementation({\n implementation: GetPermissionsFromGroupsAndTeamsImpl,\n dependencies: [WcpContext, AdminUsersRepository, RolesRepository, TeamsRepository]\n});\n"],"names":["GetPermissionsFromGroupsAndTeamsImpl","wcpContext","usersRepository","rolesRepository","teamsRepository","identity","userResult","user","roleIds","teamIds","filteredRoleIds","Boolean","dedupedRoleIds","Array","Set","loadedRoles","rolesResult","loadedRolesByIds","filteredTeamIds","dedupedTeamIds","teamsResult","loadedTeams","roleIdsFromTeams","team","roleId","alreadyLoaded","role","moreRolesResult","rolesFromTeams","getPermissionsFromRoles","GetPermissionsFromIdentity","PermissionsProcessor","WcpContext","AdminUsersRepository","RolesRepository","TeamsRepository"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,UAAgC,EAChCC,eAA+C,EAC/CC,eAA0C,EAC1CC,eAA0C,CACpD;aAJUH,UAAU,GAAVA;aACAC,eAAe,GAAfA;aACAC,eAAe,GAAfA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,eAAeC,QAAkB,EAAE;QACrC,MAAMC,aAAa,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAAE,IAAID,SAAS,EAAE;QAAC;QACpE,IAAIC,WAAW,MAAM,IACjB,OAAO;QAGX,MAAMC,OAAOD,WAAW,KAAK;QAI7B,MAAME,UAAoB,EAAE;QAC5B,MAAMC,UAAoB,EAAE;QAE5BD,QAAQ,IAAI,IAAKD,KAAK,KAAK,IAAI,EAAE;QAEjC,MAAMG,kBAAkBF,QAAQ,MAAM,CAACG;QACvC,MAAMC,iBAAiBC,MAAM,IAAI,CAAC,IAAIC,IAAIJ;QAE1C,MAAMK,cAA8B,EAAE;QAEtC,IAAIH,eAAe,MAAM,GAAG,GAAG;YAC3B,MAAMI,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAChD,OAAO;oBAAE,OAAOJ;gBAAe;YACnC;YAEA,MAAMK,mBAAmBD,YAAY,IAAI,KAAKA,YAAY,KAAK,GAAG,EAAE;YACpED,YAAY,IAAI,IAAIE;QACxB;QAEA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI;YAC/BR,QAAQ,IAAI,IAAKF,KAAK,KAAK,IAAI,EAAE;YAEjC,MAAMW,kBAAkBT,QAAQ,MAAM,CAACE;YACvC,MAAMQ,iBAAiBN,MAAM,IAAI,CAAC,IAAIC,IAAII;YAE1C,IAAIC,eAAe,MAAM,GAAG,GAAG;gBAC3B,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBAChD,OAAO;wBAAE,OAAOD;oBAAe;gBACnC;gBAEA,MAAME,cAAcD,YAAY,IAAI,KAAKA,YAAY,KAAK,GAAG,EAAE;gBAI/D,MAAME,mBAAmBD,YACpB,OAAO,CAACE,CAAAA,OAAQA,KAAK,KAAK,EAC1B,MAAM,CAACC,CAAAA;oBACJ,MAAMC,gBAAgBV,YAAY,IAAI,CAACW,CAAAA,OAAQA,KAAK,EAAE,KAAKF;oBAC3D,OAAO,CAACC;gBACZ;gBAEJ,IAAIH,iBAAiB,MAAM,GAAG,GAAG;oBAC7B,MAAMK,kBAAkB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;wBACpD,OAAO;4BAAE,OAAOL;wBAAiB;oBACrC;oBAEA,MAAMM,iBAAiBD,gBAAgB,IAAI,KAAKA,gBAAgB,KAAK,GAAG,EAAE;oBAC1EZ,YAAY,IAAI,IAAIa;gBACxB;YACJ;QACJ;QAEA,IAAIb,YAAY,MAAM,GAAG,GACrB,OAAOc,wBAAwBd;QAGnC,OAAO;IACX;AACJ;AAEO,MAAMe,6BAA6BC,qBAAqB,oBAAoB,CAAC;IAChF,gBAAgB/B;IAChB,cAAc;QAACgC;QAAYC;QAAsBC;QAAiBC;KAAgB;AACtF"}
@@ -3,49 +3,35 @@ import { TenantContext } from "../../../tenancy/TenantContext/index.js";
3
3
  import { GetTenantByIdUseCase } from "../../../tenancy/GetTenantById/index.js";
4
4
  import { PermissionsProcessor } from "./abstractions.js";
5
5
  class GroupsTeamsAuthorizerImpl {
6
- constructor(tenantContext, getTenantByIdUseCase, permissionsProcessor) {
7
- this.tenantContext = tenantContext;
8
- this.getTenantByIdUseCase = getTenantByIdUseCase;
9
- this.permissionsProcessor = permissionsProcessor;
10
- }
11
- async authorize(identity) {
12
- const tenant = this.tenantContext.getTenant();
13
- if (identity.isAnonymous() || identity.type !== "admin") {
14
- return null;
6
+ constructor(tenantContext, getTenantByIdUseCase, permissionsProcessor){
7
+ this.tenantContext = tenantContext;
8
+ this.getTenantByIdUseCase = getTenantByIdUseCase;
9
+ this.permissionsProcessor = permissionsProcessor;
15
10
  }
16
- if (!identity.context.canAccessTenant) {
17
- return null;
11
+ async authorize(identity) {
12
+ const tenant = this.tenantContext.getTenant();
13
+ if (identity.isAnonymous() || "admin" !== identity.type) return null;
14
+ if (!identity.context.canAccessTenant) return null;
15
+ const currentTenantPermissions = await this.permissionsProcessor.getPermissions(identity);
16
+ if (Array.isArray(currentTenantPermissions)) return currentTenantPermissions;
17
+ const parentTenantId = tenant.parent;
18
+ if (!parentTenantId) return null;
19
+ const result = await this.getTenantByIdUseCase.execute(parentTenantId);
20
+ if (result.isFail()) return null;
21
+ const parentTenant = result.value;
22
+ const parentTenantPermissions = await this.tenantContext.withTenant(parentTenant, ()=>this.permissionsProcessor.getPermissions(identity));
23
+ if (Array.isArray(parentTenantPermissions)) return parentTenantPermissions;
24
+ return null;
18
25
  }
19
- const currentTenantPermissions = await this.permissionsProcessor.getPermissions(identity);
20
- if (Array.isArray(currentTenantPermissions)) {
21
- return currentTenantPermissions;
22
- }
23
-
24
- // If no security roles were found, it could be due to an identity accessing a sub-tenant. In this case,
25
- // let's try loading permissions from the parent tenant. Note that this will work well for flat tenant
26
- // hierarchy where there's a `root` tenant and 1 level of sibling sub-tenants. For multi-level hierarchy,
27
- // the best approach is to code a plugin with the desired permissions-fetching logic.
28
- const parentTenantId = tenant.parent;
29
- if (!parentTenantId) {
30
- return null;
31
- }
32
- const result = await this.getTenantByIdUseCase.execute(parentTenantId);
33
- if (result.isFail()) {
34
- return null;
35
- }
36
- const parentTenant = result.value;
37
- const parentTenantPermissions = await this.tenantContext.withTenant(parentTenant, () => {
38
- return this.permissionsProcessor.getPermissions(identity);
39
- });
40
- if (Array.isArray(parentTenantPermissions)) {
41
- return parentTenantPermissions;
42
- }
43
- return null;
44
- }
45
26
  }
46
- export const RolesTeamsAuthorizer = Authorizer.createImplementation({
47
- implementation: GroupsTeamsAuthorizerImpl,
48
- dependencies: [TenantContext, GetTenantByIdUseCase, PermissionsProcessor]
27
+ const RolesTeamsAuthorizer = Authorizer.createImplementation({
28
+ implementation: GroupsTeamsAuthorizerImpl,
29
+ dependencies: [
30
+ TenantContext,
31
+ GetTenantByIdUseCase,
32
+ PermissionsProcessor
33
+ ]
49
34
  });
35
+ export { RolesTeamsAuthorizer };
50
36
 
51
37
  //# sourceMappingURL=RolesTeamsAuthorizer.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Authorizer","TenantContext","GetTenantByIdUseCase","PermissionsProcessor","GroupsTeamsAuthorizerImpl","constructor","tenantContext","getTenantByIdUseCase","permissionsProcessor","authorize","identity","tenant","getTenant","isAnonymous","type","context","canAccessTenant","currentTenantPermissions","getPermissions","Array","isArray","parentTenantId","parent","result","execute","isFail","parentTenant","value","parentTenantPermissions","withTenant","RolesTeamsAuthorizer","createImplementation","implementation","dependencies"],"sources":["RolesTeamsAuthorizer.ts"],"sourcesContent":["import { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { GetTenantByIdUseCase } from \"~/features/tenancy/GetTenantById/index.js\";\nimport { PermissionsProcessor } from \"./abstractions.js\";\n\nclass GroupsTeamsAuthorizerImpl implements Authorizer.Interface {\n constructor(\n private readonly tenantContext: TenantContext.Interface,\n private readonly getTenantByIdUseCase: GetTenantByIdUseCase.Interface,\n private readonly permissionsProcessor: PermissionsProcessor.Interface\n ) {}\n\n async authorize(identity: Identity): Promise<SecurityPermission[] | null> {\n const tenant = this.tenantContext.getTenant();\n\n if (identity.isAnonymous() || identity.type !== \"admin\") {\n return null;\n }\n\n if (!identity.context.canAccessTenant) {\n return null;\n }\n\n const currentTenantPermissions = await this.permissionsProcessor.getPermissions(identity);\n\n if (Array.isArray(currentTenantPermissions)) {\n return currentTenantPermissions;\n }\n\n // If no security roles were found, it could be due to an identity accessing a sub-tenant. In this case,\n // let's try loading permissions from the parent tenant. Note that this will work well for flat tenant\n // hierarchy where there's a `root` tenant and 1 level of sibling sub-tenants. For multi-level hierarchy,\n // the best approach is to code a plugin with the desired permissions-fetching logic.\n const parentTenantId = tenant.parent;\n if (!parentTenantId) {\n return null;\n }\n\n const result = await this.getTenantByIdUseCase.execute(parentTenantId);\n if (result.isFail()) {\n return null;\n }\n\n const parentTenant = result.value;\n\n const parentTenantPermissions = await this.tenantContext.withTenant(parentTenant, () => {\n return this.permissionsProcessor.getPermissions(identity);\n });\n\n if (Array.isArray(parentTenantPermissions)) {\n return parentTenantPermissions;\n }\n\n return null;\n }\n}\n\nexport const RolesTeamsAuthorizer = Authorizer.createImplementation({\n implementation: GroupsTeamsAuthorizerImpl,\n dependencies: [TenantContext, GetTenantByIdUseCase, PermissionsProcessor]\n});\n"],"mappings":"AAAA,SAASA,UAAU;AAGnB,SAASC,aAAa;AACtB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAE7B,MAAMC,yBAAyB,CAAiC;EAC5DC,WAAWA,CACUC,aAAsC,EACtCC,oBAAoD,EACpDC,oBAAoD,EACvE;IAAA,KAHmBF,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,oBAAoD,GAApDA,oBAAoD;IAAA,KACpDC,oBAAoD,GAApDA,oBAAoD;EACtE;EAEH,MAAMC,SAASA,CAACC,QAAkB,EAAwC;IACtE,MAAMC,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;IAE7C,IAAIF,QAAQ,CAACG,WAAW,CAAC,CAAC,IAAIH,QAAQ,CAACI,IAAI,KAAK,OAAO,EAAE;MACrD,OAAO,IAAI;IACf;IAEA,IAAI,CAACJ,QAAQ,CAACK,OAAO,CAACC,eAAe,EAAE;MACnC,OAAO,IAAI;IACf;IAEA,MAAMC,wBAAwB,GAAG,MAAM,IAAI,CAACT,oBAAoB,CAACU,cAAc,CAACR,QAAQ,CAAC;IAEzF,IAAIS,KAAK,CAACC,OAAO,CAACH,wBAAwB,CAAC,EAAE;MACzC,OAAOA,wBAAwB;IACnC;;IAEA;IACA;IACA;IACA;IACA,MAAMI,cAAc,GAAGV,MAAM,CAACW,MAAM;IACpC,IAAI,CAACD,cAAc,EAAE;MACjB,OAAO,IAAI;IACf;IAEA,MAAME,MAAM,GAAG,MAAM,IAAI,CAAChB,oBAAoB,CAACiB,OAAO,CAACH,cAAc,CAAC;IACtE,IAAIE,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO,IAAI;IACf;IAEA,MAAMC,YAAY,GAAGH,MAAM,CAACI,KAAK;IAEjC,MAAMC,uBAAuB,GAAG,MAAM,IAAI,CAACtB,aAAa,CAACuB,UAAU,CAACH,YAAY,EAAE,MAAM;MACpF,OAAO,IAAI,CAAClB,oBAAoB,CAACU,cAAc,CAACR,QAAQ,CAAC;IAC7D,CAAC,CAAC;IAEF,IAAIS,KAAK,CAACC,OAAO,CAACQ,uBAAuB,CAAC,EAAE;MACxC,OAAOA,uBAAuB;IAClC;IAEA,OAAO,IAAI;EACf;AACJ;AAEA,OAAO,MAAME,oBAAoB,GAAG9B,UAAU,CAAC+B,oBAAoB,CAAC;EAChEC,cAAc,EAAE5B,yBAAyB;EACzC6B,YAAY,EAAE,CAAChC,aAAa,EAAEC,oBAAoB,EAAEC,oBAAoB;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/security/authorization/GroupsTeamsAuthorizer/RolesTeamsAuthorizer.js","sources":["../../../../../src/features/security/authorization/GroupsTeamsAuthorizer/RolesTeamsAuthorizer.ts"],"sourcesContent":["import { Authorizer } from \"~/features/security/authorization/Authorizer/index.js\";\nimport { Identity } from \"~/features/security/IdentityContext/index.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { GetTenantByIdUseCase } from \"~/features/tenancy/GetTenantById/index.js\";\nimport { PermissionsProcessor } from \"./abstractions.js\";\n\nclass GroupsTeamsAuthorizerImpl implements Authorizer.Interface {\n constructor(\n private readonly tenantContext: TenantContext.Interface,\n private readonly getTenantByIdUseCase: GetTenantByIdUseCase.Interface,\n private readonly permissionsProcessor: PermissionsProcessor.Interface\n ) {}\n\n async authorize(identity: Identity): Promise<SecurityPermission[] | null> {\n const tenant = this.tenantContext.getTenant();\n\n if (identity.isAnonymous() || identity.type !== \"admin\") {\n return null;\n }\n\n if (!identity.context.canAccessTenant) {\n return null;\n }\n\n const currentTenantPermissions = await this.permissionsProcessor.getPermissions(identity);\n\n if (Array.isArray(currentTenantPermissions)) {\n return currentTenantPermissions;\n }\n\n // If no security roles were found, it could be due to an identity accessing a sub-tenant. In this case,\n // let's try loading permissions from the parent tenant. Note that this will work well for flat tenant\n // hierarchy where there's a `root` tenant and 1 level of sibling sub-tenants. For multi-level hierarchy,\n // the best approach is to code a plugin with the desired permissions-fetching logic.\n const parentTenantId = tenant.parent;\n if (!parentTenantId) {\n return null;\n }\n\n const result = await this.getTenantByIdUseCase.execute(parentTenantId);\n if (result.isFail()) {\n return null;\n }\n\n const parentTenant = result.value;\n\n const parentTenantPermissions = await this.tenantContext.withTenant(parentTenant, () => {\n return this.permissionsProcessor.getPermissions(identity);\n });\n\n if (Array.isArray(parentTenantPermissions)) {\n return parentTenantPermissions;\n }\n\n return null;\n }\n}\n\nexport const RolesTeamsAuthorizer = Authorizer.createImplementation({\n implementation: GroupsTeamsAuthorizerImpl,\n dependencies: [TenantContext, GetTenantByIdUseCase, PermissionsProcessor]\n});\n"],"names":["GroupsTeamsAuthorizerImpl","tenantContext","getTenantByIdUseCase","permissionsProcessor","identity","tenant","currentTenantPermissions","Array","parentTenantId","result","parentTenant","parentTenantPermissions","RolesTeamsAuthorizer","Authorizer","TenantContext","GetTenantByIdUseCase","PermissionsProcessor"],"mappings":";;;;AAOA,MAAMA;IACF,YACqBC,aAAsC,EACtCC,oBAAoD,EACpDC,oBAAoD,CACvE;aAHmBF,aAAa,GAAbA;aACAC,oBAAoB,GAApBA;aACAC,oBAAoB,GAApBA;IAClB;IAEH,MAAM,UAAUC,QAAkB,EAAwC;QACtE,MAAMC,SAAS,IAAI,CAAC,aAAa,CAAC,SAAS;QAE3C,IAAID,SAAS,WAAW,MAAMA,AAAkB,YAAlBA,SAAS,IAAI,EACvC,OAAO;QAGX,IAAI,CAACA,SAAS,OAAO,CAAC,eAAe,EACjC,OAAO;QAGX,MAAME,2BAA2B,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAACF;QAEhF,IAAIG,MAAM,OAAO,CAACD,2BACd,OAAOA;QAOX,MAAME,iBAAiBH,OAAO,MAAM;QACpC,IAAI,CAACG,gBACD,OAAO;QAGX,MAAMC,SAAS,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAACD;QACvD,IAAIC,OAAO,MAAM,IACb,OAAO;QAGX,MAAMC,eAAeD,OAAO,KAAK;QAEjC,MAAME,0BAA0B,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAACD,cAAc,IACvE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAACN;QAGpD,IAAIG,MAAM,OAAO,CAACI,0BACd,OAAOA;QAGX,OAAO;IACX;AACJ;AAEO,MAAMC,uBAAuBC,WAAW,oBAAoB,CAAC;IAChE,gBAAgBb;IAChB,cAAc;QAACc;QAAeC;QAAsBC;KAAqB;AAC7E"}
@@ -1,4 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- export const PermissionsProcessor = createAbstraction("PermissionsProcessor");
2
+ const PermissionsProcessor = createAbstraction("PermissionsProcessor");
3
+ export { PermissionsProcessor };
3
4
 
4
5
  //# sourceMappingURL=abstractions.js.map