@webiny/api-core 6.0.0 → 6.1.0-beta.0

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 (281) hide show
  1. package/domain/security/ApiToken.d.ts +1 -0
  2. package/domain/security/ApiToken.js +1 -0
  3. package/domain/security/ApiToken.js.map +1 -1
  4. package/exports/api/security.d.ts +2 -0
  5. package/exports/api/security.js +2 -0
  6. package/exports/api/security.js.map +1 -1
  7. package/features/buildParams/abstractions.d.ts +2 -0
  8. package/features/buildParams/abstractions.js +2 -0
  9. package/features/buildParams/abstractions.js.map +1 -1
  10. package/features/eventPublisher/abstractions.d.ts +2 -0
  11. package/features/eventPublisher/abstractions.js +3 -0
  12. package/features/eventPublisher/abstractions.js.map +1 -1
  13. package/features/keyValueStore/abstractions.d.ts +4 -0
  14. package/features/keyValueStore/abstractions.js +4 -0
  15. package/features/keyValueStore/abstractions.js.map +1 -1
  16. package/features/logger/abstractions.d.ts +1 -0
  17. package/features/logger/abstractions.js +1 -0
  18. package/features/logger/abstractions.js.map +1 -1
  19. package/features/security/IdentityContext/abstractions.d.ts +1 -0
  20. package/features/security/IdentityContext/abstractions.js +1 -0
  21. package/features/security/IdentityContext/abstractions.js.map +1 -1
  22. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +1 -1
  23. package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
  24. package/features/security/apiKeys/CreateApiKey/abstractions.d.ts +1 -0
  25. package/features/security/apiKeys/CreateApiKey/abstractions.js +1 -0
  26. package/features/security/apiKeys/CreateApiKey/abstractions.js.map +1 -1
  27. package/features/security/apiKeys/CreateApiKey/events.d.ts +2 -0
  28. package/features/security/apiKeys/CreateApiKey/events.js +4 -0
  29. package/features/security/apiKeys/CreateApiKey/events.js.map +1 -1
  30. package/features/security/apiKeys/DeleteApiKey/abstractions.d.ts +1 -0
  31. package/features/security/apiKeys/DeleteApiKey/abstractions.js +1 -0
  32. package/features/security/apiKeys/DeleteApiKey/abstractions.js.map +1 -1
  33. package/features/security/apiKeys/DeleteApiKey/events.d.ts +2 -0
  34. package/features/security/apiKeys/DeleteApiKey/events.js +4 -0
  35. package/features/security/apiKeys/DeleteApiKey/events.js.map +1 -1
  36. package/features/security/apiKeys/GetApiKey/abstractions.d.ts +1 -0
  37. package/features/security/apiKeys/GetApiKey/abstractions.js +1 -0
  38. package/features/security/apiKeys/GetApiKey/abstractions.js.map +1 -1
  39. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -0
  40. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js +1 -0
  41. package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
  42. package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -0
  43. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js +1 -0
  44. package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
  45. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js +1 -1
  46. package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js.map +1 -1
  47. package/features/security/apiKeys/ListApiKeys/abstractions.d.ts +1 -0
  48. package/features/security/apiKeys/ListApiKeys/abstractions.js +1 -0
  49. package/features/security/apiKeys/ListApiKeys/abstractions.js.map +1 -1
  50. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +1 -1
  51. package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
  52. package/features/security/apiKeys/UpdateApiKey/abstractions.d.ts +1 -0
  53. package/features/security/apiKeys/UpdateApiKey/abstractions.js +1 -0
  54. package/features/security/apiKeys/UpdateApiKey/abstractions.js.map +1 -1
  55. package/features/security/apiKeys/UpdateApiKey/events.d.ts +2 -0
  56. package/features/security/apiKeys/UpdateApiKey/events.js +4 -0
  57. package/features/security/apiKeys/UpdateApiKey/events.js.map +1 -1
  58. package/features/security/apiKeys/shared/abstractions.d.ts +5 -2
  59. package/features/security/apiKeys/shared/abstractions.js +3 -0
  60. package/features/security/apiKeys/shared/abstractions.js.map +1 -1
  61. package/features/security/apiKeys/shared/schemas.d.ts +10 -71
  62. package/features/security/apiKeys/shared/schemas.js +4 -4
  63. package/features/security/apiKeys/shared/schemas.js.map +1 -1
  64. package/features/security/authentication/AuthenticationContext/abstractions.d.ts +1 -0
  65. package/features/security/authentication/AuthenticationContext/abstractions.js +1 -0
  66. package/features/security/authentication/AuthenticationContext/abstractions.js.map +1 -1
  67. package/features/security/authentication/AuthenticationContext/events.d.ts +2 -0
  68. package/features/security/authentication/AuthenticationContext/events.js +4 -0
  69. package/features/security/authentication/AuthenticationContext/events.js.map +1 -1
  70. package/features/security/authentication/Authenticator/abstractions.d.ts +1 -0
  71. package/features/security/authentication/Authenticator/abstractions.js +1 -0
  72. package/features/security/authentication/Authenticator/abstractions.js.map +1 -1
  73. package/features/security/authorization/AuthorizationContext/abstractions.d.ts +2 -0
  74. package/features/security/authorization/AuthorizationContext/abstractions.js +2 -0
  75. package/features/security/authorization/AuthorizationContext/abstractions.js.map +1 -1
  76. package/features/security/authorization/Authorizer/abstractions.d.ts +1 -0
  77. package/features/security/authorization/Authorizer/abstractions.js +1 -0
  78. package/features/security/authorization/Authorizer/abstractions.js.map +1 -1
  79. package/features/security/login/abstractions.d.ts +1 -0
  80. package/features/security/login/abstractions.js +2 -0
  81. package/features/security/login/abstractions.js.map +1 -1
  82. package/features/security/roles/CreateRole/CreateRoleUseCase.d.ts +1 -3
  83. package/features/security/roles/CreateRole/CreateRoleUseCase.js +3 -7
  84. package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
  85. package/features/security/roles/CreateRole/abstractions.d.ts +1 -0
  86. package/features/security/roles/CreateRole/abstractions.js +1 -0
  87. package/features/security/roles/CreateRole/abstractions.js.map +1 -1
  88. package/features/security/roles/CreateRole/events.d.ts +2 -0
  89. package/features/security/roles/CreateRole/events.js +4 -0
  90. package/features/security/roles/CreateRole/events.js.map +1 -1
  91. package/features/security/roles/CreateRole/schema.d.ts +2 -20
  92. package/features/security/roles/CreateRole/schema.js +2 -2
  93. package/features/security/roles/CreateRole/schema.js.map +1 -1
  94. package/features/security/roles/DeleteRole/abstractions.d.ts +1 -0
  95. package/features/security/roles/DeleteRole/abstractions.js +1 -0
  96. package/features/security/roles/DeleteRole/abstractions.js.map +1 -1
  97. package/features/security/roles/DeleteRole/events.d.ts +2 -0
  98. package/features/security/roles/DeleteRole/events.js +4 -0
  99. package/features/security/roles/DeleteRole/events.js.map +1 -1
  100. package/features/security/roles/GetRole/abstractions.d.ts +1 -0
  101. package/features/security/roles/GetRole/abstractions.js +1 -0
  102. package/features/security/roles/GetRole/abstractions.js.map +1 -1
  103. package/features/security/roles/ListRoles/abstractions.d.ts +1 -0
  104. package/features/security/roles/ListRoles/abstractions.js +1 -0
  105. package/features/security/roles/ListRoles/abstractions.js.map +1 -1
  106. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +1 -1
  107. package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
  108. package/features/security/roles/UpdateRole/abstractions.d.ts +1 -0
  109. package/features/security/roles/UpdateRole/abstractions.js +1 -0
  110. package/features/security/roles/UpdateRole/abstractions.js.map +1 -1
  111. package/features/security/roles/UpdateRole/events.d.ts +2 -0
  112. package/features/security/roles/UpdateRole/events.js +4 -0
  113. package/features/security/roles/UpdateRole/events.js.map +1 -1
  114. package/features/security/roles/UpdateRole/schema.d.ts +2 -18
  115. package/features/security/roles/UpdateRole/schema.js +2 -2
  116. package/features/security/roles/UpdateRole/schema.js.map +1 -1
  117. package/features/security/roles/feature.js +2 -0
  118. package/features/security/roles/feature.js.map +1 -1
  119. package/features/security/roles/shared/RoleProvider.d.ts +13 -0
  120. package/features/security/roles/shared/RoleProvider.js +29 -0
  121. package/features/security/roles/shared/RoleProvider.js.map +1 -0
  122. package/features/security/roles/shared/RolesRepository.d.ts +3 -1
  123. package/features/security/roles/shared/RolesRepository.js +19 -18
  124. package/features/security/roles/shared/RolesRepository.js.map +1 -1
  125. package/features/security/roles/shared/abstractions.d.ts +19 -0
  126. package/features/security/roles/shared/abstractions.js +3 -0
  127. package/features/security/roles/shared/abstractions.js.map +1 -1
  128. package/features/security/shared/abstractions.d.ts +5 -14
  129. package/features/security/shared/abstractions.js +3 -16
  130. package/features/security/shared/abstractions.js.map +1 -1
  131. package/features/security/teams/CreateTeam/CreateTeamUseCase.d.ts +1 -3
  132. package/features/security/teams/CreateTeam/CreateTeamUseCase.js +3 -7
  133. package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
  134. package/features/security/teams/CreateTeam/abstractions.d.ts +1 -0
  135. package/features/security/teams/CreateTeam/abstractions.js +1 -0
  136. package/features/security/teams/CreateTeam/abstractions.js.map +1 -1
  137. package/features/security/teams/CreateTeam/events.d.ts +2 -0
  138. package/features/security/teams/CreateTeam/events.js +4 -0
  139. package/features/security/teams/CreateTeam/events.js.map +1 -1
  140. package/features/security/teams/CreateTeam/schema.d.ts +2 -12
  141. package/features/security/teams/DeleteTeam/abstractions.d.ts +1 -0
  142. package/features/security/teams/DeleteTeam/abstractions.js +1 -0
  143. package/features/security/teams/DeleteTeam/abstractions.js.map +1 -1
  144. package/features/security/teams/DeleteTeam/events.d.ts +2 -0
  145. package/features/security/teams/DeleteTeam/events.js +4 -0
  146. package/features/security/teams/DeleteTeam/events.js.map +1 -1
  147. package/features/security/teams/GetTeam/abstractions.d.ts +1 -0
  148. package/features/security/teams/GetTeam/abstractions.js +1 -0
  149. package/features/security/teams/GetTeam/abstractions.js.map +1 -1
  150. package/features/security/teams/ListTeams/abstractions.d.ts +1 -0
  151. package/features/security/teams/ListTeams/abstractions.js +1 -0
  152. package/features/security/teams/ListTeams/abstractions.js.map +1 -1
  153. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +1 -1
  154. package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
  155. package/features/security/teams/UpdateTeam/abstractions.d.ts +1 -0
  156. package/features/security/teams/UpdateTeam/abstractions.js +1 -0
  157. package/features/security/teams/UpdateTeam/abstractions.js.map +1 -1
  158. package/features/security/teams/UpdateTeam/events.d.ts +2 -0
  159. package/features/security/teams/UpdateTeam/events.js +4 -0
  160. package/features/security/teams/UpdateTeam/events.js.map +1 -1
  161. package/features/security/teams/UpdateTeam/schema.d.ts +2 -10
  162. package/features/security/teams/feature.js +6 -0
  163. package/features/security/teams/feature.js.map +1 -1
  164. package/features/security/teams/shared/TeamProvider.d.ts +13 -0
  165. package/features/security/teams/shared/TeamProvider.js +29 -0
  166. package/features/security/teams/shared/TeamProvider.js.map +1 -0
  167. package/features/security/teams/shared/TeamsRepository.js +20 -18
  168. package/features/security/teams/shared/TeamsRepository.js.map +1 -1
  169. package/features/security/teams/shared/abstractions.d.ts +18 -0
  170. package/features/security/teams/shared/abstractions.js +3 -0
  171. package/features/security/teams/shared/abstractions.js.map +1 -1
  172. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.d.ts +17 -0
  173. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js +76 -0
  174. package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js.map +1 -0
  175. package/features/security/utils/verifyJwtUsingJwk.d.ts +2 -4
  176. package/features/security/utils/verifyJwtUsingJwk.js +1 -1
  177. package/features/security/utils/verifyJwtUsingJwk.js.map +1 -1
  178. package/features/system/InstallSystem/abstractions.d.ts +2 -3
  179. package/features/system/InstallSystem/abstractions.js +2 -3
  180. package/features/system/InstallSystem/abstractions.js.map +1 -1
  181. package/features/task/TaskController/abstractions.d.ts +1 -0
  182. package/features/task/TaskController/abstractions.js +1 -0
  183. package/features/task/TaskController/abstractions.js.map +1 -1
  184. package/features/task/TaskDefinition/abstractions.d.ts +1 -0
  185. package/features/task/TaskDefinition/abstractions.js +1 -0
  186. package/features/task/TaskDefinition/abstractions.js.map +1 -1
  187. package/features/task/TaskService/abstractions.d.ts +1 -0
  188. package/features/task/TaskService/abstractions.js +1 -0
  189. package/features/task/TaskService/abstractions.js.map +1 -1
  190. package/features/tenancy/CreateTenant/abstractions.d.ts +5 -3
  191. package/features/tenancy/CreateTenant/abstractions.js +5 -3
  192. package/features/tenancy/CreateTenant/abstractions.js.map +1 -1
  193. package/features/tenancy/DeleteTenant/abstractions.d.ts +5 -0
  194. package/features/tenancy/DeleteTenant/abstractions.js +5 -0
  195. package/features/tenancy/DeleteTenant/abstractions.js.map +1 -1
  196. package/features/tenancy/GetTenantById/abstractions.d.ts +3 -0
  197. package/features/tenancy/GetTenantById/abstractions.js +3 -9
  198. package/features/tenancy/GetTenantById/abstractions.js.map +1 -1
  199. package/features/tenancy/InstallTenant/abstractions.d.ts +3 -9
  200. package/features/tenancy/InstallTenant/abstractions.js +3 -12
  201. package/features/tenancy/InstallTenant/abstractions.js.map +1 -1
  202. package/features/tenancy/TenantContext/abstractions.d.ts +1 -0
  203. package/features/tenancy/TenantContext/abstractions.js +1 -0
  204. package/features/tenancy/TenantContext/abstractions.js.map +1 -1
  205. package/features/tenancy/UpdateTenant/abstractions.d.ts +5 -0
  206. package/features/tenancy/UpdateTenant/abstractions.js +5 -0
  207. package/features/tenancy/UpdateTenant/abstractions.js.map +1 -1
  208. package/features/users/CreateUser/CreateUserUseCase.js +1 -1
  209. package/features/users/CreateUser/CreateUserUseCase.js.map +1 -1
  210. package/features/users/CreateUser/abstractions.d.ts +1 -0
  211. package/features/users/CreateUser/abstractions.js +1 -1
  212. package/features/users/CreateUser/abstractions.js.map +1 -1
  213. package/features/users/CreateUser/events.d.ts +2 -0
  214. package/features/users/CreateUser/events.js +4 -0
  215. package/features/users/CreateUser/events.js.map +1 -1
  216. package/features/users/CreateUser/schema.d.ts +4 -36
  217. package/features/users/DeleteUser/abstractions.d.ts +1 -0
  218. package/features/users/DeleteUser/abstractions.js +1 -1
  219. package/features/users/DeleteUser/abstractions.js.map +1 -1
  220. package/features/users/DeleteUser/events.d.ts +2 -0
  221. package/features/users/DeleteUser/events.js +4 -0
  222. package/features/users/DeleteUser/events.js.map +1 -1
  223. package/features/users/GetUser/abstractions.d.ts +1 -0
  224. package/features/users/GetUser/abstractions.js +1 -1
  225. package/features/users/GetUser/abstractions.js.map +1 -1
  226. package/features/users/ListUserTeams/abstractions.d.ts +1 -0
  227. package/features/users/ListUserTeams/abstractions.js +1 -1
  228. package/features/users/ListUserTeams/abstractions.js.map +1 -1
  229. package/features/users/ListUsers/abstractions.d.ts +1 -0
  230. package/features/users/ListUsers/abstractions.js +1 -1
  231. package/features/users/ListUsers/abstractions.js.map +1 -1
  232. package/features/users/UpdateUser/UpdateUserUseCase.js +1 -1
  233. package/features/users/UpdateUser/UpdateUserUseCase.js.map +1 -1
  234. package/features/users/UpdateUser/abstractions.d.ts +1 -0
  235. package/features/users/UpdateUser/abstractions.js +1 -1
  236. package/features/users/UpdateUser/abstractions.js.map +1 -1
  237. package/features/users/UpdateUser/events.d.ts +2 -0
  238. package/features/users/UpdateUser/events.js +4 -0
  239. package/features/users/UpdateUser/events.js.map +1 -1
  240. package/features/users/UpdateUser/schema.d.ts +4 -30
  241. package/features/users/shared/abstractions.d.ts +1 -0
  242. package/features/users/shared/abstractions.js +1 -1
  243. package/features/users/shared/abstractions.js.map +1 -1
  244. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +0 -1
  245. package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
  246. package/graphql/security/NotAuthorizedResponse.d.ts +1 -0
  247. package/graphql/security/NotAuthorizedResponse.js +1 -0
  248. package/graphql/security/NotAuthorizedResponse.js.map +1 -1
  249. package/idp/abstractions.d.ts +4 -0
  250. package/idp/abstractions.js +4 -0
  251. package/idp/abstractions.js.map +1 -1
  252. package/legacy/security/createSecurityContext.js +0 -11
  253. package/legacy/security/createSecurityContext.js.map +1 -1
  254. package/models/base/BaseModel.js +2 -2
  255. package/models/base/BaseModel.js.map +1 -1
  256. package/models/base/ModelBuilder.d.ts +2 -2
  257. package/models/base/ModelBuilder.js +21 -2
  258. package/models/base/ModelBuilder.js.map +1 -1
  259. package/models/cms/FieldBuilder.d.ts +3 -2
  260. package/models/cms/FieldBuilder.js +12 -17
  261. package/models/cms/FieldBuilder.js.map +1 -1
  262. package/models/cms/FieldBuilderRegistry.d.ts +1 -1
  263. package/models/cms/FieldBuilderRegistry.js.map +1 -1
  264. package/models/cms/FieldDefinitionsBuilder.d.ts +1 -0
  265. package/models/cms/FieldDefinitionsBuilder.js +13 -15
  266. package/models/cms/FieldDefinitionsBuilder.js.map +1 -1
  267. package/models/cms/PrivateCmsModelBuilder.js.map +1 -1
  268. package/models/cms/abstractions.d.ts +1 -1
  269. package/models/cms/abstractions.js.map +1 -1
  270. package/models/cms/fieldsBuilder.md +1 -1
  271. package/models/simple/Page/abstractions.d.ts +1 -11
  272. package/package.json +20 -20
  273. package/types/security.d.ts +13 -10
  274. package/types/security.js.map +1 -1
  275. package/features/security/shared/abstractions.ts.bak +0 -52
  276. package/legacy/security/plugins/SecurityRolePlugin.d.ts +0 -16
  277. package/legacy/security/plugins/SecurityRolePlugin.js +0 -33
  278. package/legacy/security/plugins/SecurityRolePlugin.js.map +0 -1
  279. package/legacy/security/plugins/SecurityTeamPlugin.d.ts +0 -16
  280. package/legacy/security/plugins/SecurityTeamPlugin.js +0 -33
  281. package/legacy/security/plugins/SecurityTeamPlugin.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","Result","UpdateTeam","TeamsRepository","IdentityContext","EventPublisher","updateTeamValidation","TeamBeforeUpdateEvent","TeamAfterUpdateEvent","NotAuthorizedError","CannotUpdatePluginTeamsError","CannotUpdateSystemTeamsError","TeamValidationError","UpdateTeamUseCase","constructor","repository","identityContext","eventPublisher","execute","id","input","hasPermission","getPermission","fail","validation","safeParse","success","error","errors","message","existingResult","get","isFail","existingTeam","value","system","plugin","updatedTeam","data","publish","original","updated","result","update","ok","UpdateTeamUseCaseImpl","abstraction","implementation","dependencies"],"sources":["UpdateTeamUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { UpdateTeam } from \"./abstractions.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { updateTeamValidation } from \"./schema.js\";\nimport { TeamBeforeUpdateEvent, TeamAfterUpdateEvent } from \"./events.js\";\nimport type { Team, UpdateTeamInput } from \"../shared/types.js\";\nimport {\n NotAuthorizedError,\n CannotUpdatePluginTeamsError,\n CannotUpdateSystemTeamsError,\n TeamValidationError\n} from \"../shared/errors.js\";\n\nexport class UpdateTeamUseCase {\n private repository: TeamsRepository.Interface;\n private identityContext: IdentityContext.Interface;\n private eventPublisher: EventPublisher.Interface;\n\n constructor(\n repository: TeamsRepository.Interface,\n identityContext: IdentityContext.Interface,\n eventPublisher: EventPublisher.Interface\n ) {\n this.repository = repository;\n this.identityContext = identityContext;\n this.eventPublisher = eventPublisher;\n }\n\n async execute(id: string, input: UpdateTeamInput): Promise<Result<Team, UpdateTeam.Error>> {\n const hasPermission = await this.identityContext.getPermission(\"security.team\");\n if (!hasPermission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n const validation = updateTeamValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new TeamValidationError(validation.error.errors[0].message));\n }\n\n const existingResult = await this.repository.get({ id });\n if (existingResult.isFail()) {\n return Result.fail(existingResult.error);\n }\n\n const existingTeam = existingResult.value;\n\n // Check if team is system team\n if (existingTeam.system) {\n return Result.fail(new CannotUpdateSystemTeamsError());\n }\n\n // Check if team is created via plugin\n if (existingTeam.plugin) {\n return Result.fail(new CannotUpdatePluginTeamsError());\n }\n\n const updatedTeam: Team = {\n ...existingTeam,\n ...validation.data\n };\n\n await this.eventPublisher.publish(\n new TeamBeforeUpdateEvent({\n original: existingTeam,\n updated: updatedTeam,\n input: validation.data\n })\n );\n\n const result = await this.repository.update(updatedTeam);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new TeamAfterUpdateEvent({\n original: existingTeam,\n updated: updatedTeam,\n input: validation.data\n })\n );\n\n return Result.ok(updatedTeam);\n }\n}\n\nexport const UpdateTeamUseCaseImpl = createImplementation({\n abstraction: UpdateTeam,\n implementation: UpdateTeamUseCase,\n dependencies: [TeamsRepository, IdentityContext, EventPublisher]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","Result","UpdateTeam","TeamsRepository","IdentityContext","EventPublisher","updateTeamValidation","TeamBeforeUpdateEvent","TeamAfterUpdateEvent","NotAuthorizedError","CannotUpdatePluginTeamsError","CannotUpdateSystemTeamsError","TeamValidationError","UpdateTeamUseCase","constructor","repository","identityContext","eventPublisher","execute","id","input","hasPermission","getPermission","fail","validation","safeParse","success","error","issues","message","existingResult","get","isFail","existingTeam","value","system","plugin","updatedTeam","data","publish","original","updated","result","update","ok","UpdateTeamUseCaseImpl","abstraction","implementation","dependencies"],"sources":["UpdateTeamUseCase.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { UpdateTeam } from \"./abstractions.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { updateTeamValidation } from \"./schema.js\";\nimport { TeamBeforeUpdateEvent, TeamAfterUpdateEvent } from \"./events.js\";\nimport type { Team, UpdateTeamInput } from \"../shared/types.js\";\nimport {\n NotAuthorizedError,\n CannotUpdatePluginTeamsError,\n CannotUpdateSystemTeamsError,\n TeamValidationError\n} from \"../shared/errors.js\";\n\nexport class UpdateTeamUseCase {\n private repository: TeamsRepository.Interface;\n private identityContext: IdentityContext.Interface;\n private eventPublisher: EventPublisher.Interface;\n\n constructor(\n repository: TeamsRepository.Interface,\n identityContext: IdentityContext.Interface,\n eventPublisher: EventPublisher.Interface\n ) {\n this.repository = repository;\n this.identityContext = identityContext;\n this.eventPublisher = eventPublisher;\n }\n\n async execute(id: string, input: UpdateTeamInput): Promise<Result<Team, UpdateTeam.Error>> {\n const hasPermission = await this.identityContext.getPermission(\"security.team\");\n if (!hasPermission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n const validation = updateTeamValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new TeamValidationError(validation.error.issues[0].message));\n }\n\n const existingResult = await this.repository.get({ id });\n if (existingResult.isFail()) {\n return Result.fail(existingResult.error);\n }\n\n const existingTeam = existingResult.value;\n\n // Check if team is system team\n if (existingTeam.system) {\n return Result.fail(new CannotUpdateSystemTeamsError());\n }\n\n // Check if team is created via plugin\n if (existingTeam.plugin) {\n return Result.fail(new CannotUpdatePluginTeamsError());\n }\n\n const updatedTeam: Team = {\n ...existingTeam,\n ...validation.data\n };\n\n await this.eventPublisher.publish(\n new TeamBeforeUpdateEvent({\n original: existingTeam,\n updated: updatedTeam,\n input: validation.data\n })\n );\n\n const result = await this.repository.update(updatedTeam);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new TeamAfterUpdateEvent({\n original: existingTeam,\n updated: updatedTeam,\n input: validation.data\n })\n );\n\n return Result.ok(updatedTeam);\n }\n}\n\nexport const UpdateTeamUseCaseImpl = createImplementation({\n abstraction: UpdateTeam,\n implementation: UpdateTeamUseCase,\n dependencies: [TeamsRepository, IdentityContext, EventPublisher]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ type UpdateTeamError = IUpdateTeamErrors[keyof IUpdateTeamErrors] | TeamsReposit
12
12
  export interface IUpdateTeam {
13
13
  execute(id: string, input: UpdateTeamInput): Promise<Result<Team, UpdateTeamError>>;
14
14
  }
15
+ /** Update an existing team. */
15
16
  export declare const UpdateTeam: import("@webiny/di").Abstraction<IUpdateTeam>;
16
17
  export declare namespace UpdateTeam {
17
18
  type Interface = IUpdateTeam;
@@ -1,4 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Update an existing team. */
2
3
  export const UpdateTeam = createAbstraction("UpdateTeam");
3
4
 
4
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","UpdateTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, UpdateTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n CannotUpdatePluginTeamsError,\n CannotUpdateSystemTeamsError,\n TeamValidationError\n} from \"../shared/errors.js\";\n\nexport interface IUpdateTeamErrors {\n notAuthorized: NotAuthorizedError;\n cannotUpdatePlugin: CannotUpdatePluginTeamsError;\n cannotUpdateSystem: CannotUpdateSystemTeamsError;\n validation: TeamValidationError;\n}\n\ntype UpdateTeamError = IUpdateTeamErrors[keyof IUpdateTeamErrors] | TeamsRepository.Error;\n\nexport interface IUpdateTeam {\n execute(id: string, input: UpdateTeamInput): Promise<Result<Team, UpdateTeamError>>;\n}\n\nexport const UpdateTeam = createAbstraction<IUpdateTeam>(\"UpdateTeam\");\n\nexport namespace UpdateTeam {\n export type Interface = IUpdateTeam;\n export type Error = UpdateTeamError;\n}\n\nexport interface TeamBeforeUpdatePayload {\n original: Team;\n updated: Team;\n input: UpdateTeamInput;\n}\n\nexport interface TeamAfterUpdatePayload {\n original: Team;\n updated: Team;\n input: UpdateTeamInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAwBvD,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","UpdateTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, UpdateTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n CannotUpdatePluginTeamsError,\n CannotUpdateSystemTeamsError,\n TeamValidationError\n} from \"../shared/errors.js\";\n\nexport interface IUpdateTeamErrors {\n notAuthorized: NotAuthorizedError;\n cannotUpdatePlugin: CannotUpdatePluginTeamsError;\n cannotUpdateSystem: CannotUpdateSystemTeamsError;\n validation: TeamValidationError;\n}\n\ntype UpdateTeamError = IUpdateTeamErrors[keyof IUpdateTeamErrors] | TeamsRepository.Error;\n\nexport interface IUpdateTeam {\n execute(id: string, input: UpdateTeamInput): Promise<Result<Team, UpdateTeamError>>;\n}\n\n/** Update an existing team. */\nexport const UpdateTeam = createAbstraction<IUpdateTeam>(\"UpdateTeam\");\n\nexport namespace UpdateTeam {\n export type Interface = IUpdateTeam;\n export type Error = UpdateTeamError;\n}\n\nexport interface TeamBeforeUpdatePayload {\n original: Team;\n updated: Team;\n input: UpdateTeamInput;\n}\n\nexport interface TeamAfterUpdatePayload {\n original: Team;\n updated: Team;\n input: UpdateTeamInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAwBvD;AACA,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
@@ -5,6 +5,7 @@ export declare class TeamBeforeUpdateEvent extends DomainEvent<TeamBeforeUpdateP
5
5
  eventType: "team.beforeUpdate";
6
6
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamBeforeUpdateEvent>>;
7
7
  }
8
+ /** Hook into team lifecycle before a team is updated. */
8
9
  export declare const TeamBeforeUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamBeforeUpdateEvent>>;
9
10
  export declare namespace TeamBeforeUpdateEventHandler {
10
11
  type Interface = IEventHandler<TeamBeforeUpdateEvent>;
@@ -14,6 +15,7 @@ export declare class TeamAfterUpdateEvent extends DomainEvent<TeamAfterUpdatePay
14
15
  eventType: "team.afterUpdate";
15
16
  getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamAfterUpdateEvent>>;
16
17
  }
18
+ /** Hook into team lifecycle after a team is updated. */
17
19
  export declare const TeamAfterUpdateEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamAfterUpdateEvent>>;
18
20
  export declare namespace TeamAfterUpdateEventHandler {
19
21
  type Interface = IEventHandler<TeamAfterUpdateEvent>;
@@ -6,6 +6,8 @@ export class TeamBeforeUpdateEvent extends DomainEvent {
6
6
  return TeamBeforeUpdateEventHandler;
7
7
  }
8
8
  }
9
+
10
+ /** Hook into team lifecycle before a team is updated. */
9
11
  export const TeamBeforeUpdateEventHandler = createAbstraction("TeamBeforeUpdateEventHandler");
10
12
  export class TeamAfterUpdateEvent extends DomainEvent {
11
13
  eventType = "team.afterUpdate";
@@ -13,6 +15,8 @@ export class TeamAfterUpdateEvent extends DomainEvent {
13
15
  return TeamAfterUpdateEventHandler;
14
16
  }
15
17
  }
18
+
19
+ /** Hook into team lifecycle after a team is updated. */
16
20
  export const TeamAfterUpdateEventHandler = createAbstraction("TeamAfterUpdateEventHandler");
17
21
 
18
22
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeUpdateEvent","eventType","getHandlerAbstraction","TeamBeforeUpdateEventHandler","TeamAfterUpdateEvent","TeamAfterUpdateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeUpdatePayload, TeamAfterUpdatePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeUpdateEvent extends DomainEvent<TeamBeforeUpdatePayload> {\n eventType = \"team.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeUpdateEventHandler;\n }\n}\n\nexport const TeamBeforeUpdateEventHandler = createAbstraction<IEventHandler<TeamBeforeUpdateEvent>>(\n \"TeamBeforeUpdateEventHandler\"\n);\n\nexport namespace TeamBeforeUpdateEventHandler {\n export type Interface = IEventHandler<TeamBeforeUpdateEvent>;\n export type Event = TeamBeforeUpdateEvent;\n}\n\nexport class TeamAfterUpdateEvent extends DomainEvent<TeamAfterUpdatePayload> {\n eventType = \"team.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterUpdateEventHandler;\n }\n}\n\nexport const TeamAfterUpdateEventHandler = createAbstraction<IEventHandler<TeamAfterUpdateEvent>>(\n \"TeamAfterUpdateEventHandler\"\n);\n\nexport namespace TeamAfterUpdateEventHandler {\n export type Interface = IEventHandler<TeamAfterUpdateEvent>;\n export type Event = TeamAfterUpdateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;AAEA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;AAEA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeUpdateEvent","eventType","getHandlerAbstraction","TeamBeforeUpdateEventHandler","TeamAfterUpdateEvent","TeamAfterUpdateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeUpdatePayload, TeamAfterUpdatePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeUpdateEvent extends DomainEvent<TeamBeforeUpdatePayload> {\n eventType = \"team.beforeUpdate\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeUpdateEventHandler;\n }\n}\n\n/** Hook into team lifecycle before a team is updated. */\nexport const TeamBeforeUpdateEventHandler = createAbstraction<IEventHandler<TeamBeforeUpdateEvent>>(\n \"TeamBeforeUpdateEventHandler\"\n);\n\nexport namespace TeamBeforeUpdateEventHandler {\n export type Interface = IEventHandler<TeamBeforeUpdateEvent>;\n export type Event = TeamBeforeUpdateEvent;\n}\n\nexport class TeamAfterUpdateEvent extends DomainEvent<TeamAfterUpdatePayload> {\n eventType = \"team.afterUpdate\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterUpdateEventHandler;\n }\n}\n\n/** Hook into team lifecycle after a team is updated. */\nexport const TeamAfterUpdateEventHandler = createAbstraction<IEventHandler<TeamAfterUpdateEvent>>(\n \"TeamAfterUpdateEventHandler\"\n);\n\nexport namespace TeamAfterUpdateEventHandler {\n export type Interface = IEventHandler<TeamAfterUpdateEvent>;\n export type Event = TeamAfterUpdateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;;AAEA;AACA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
@@ -2,13 +2,5 @@ import { z } from "zod";
2
2
  export declare const updateTeamValidation: z.ZodObject<{
3
3
  name: z.ZodOptional<z.ZodString>;
4
4
  description: z.ZodOptional<z.ZodString>;
5
- roles: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
- }, "strip", z.ZodTypeAny, {
7
- roles?: string[] | undefined;
8
- name?: string | undefined;
9
- description?: string | undefined;
10
- }, {
11
- roles?: string[] | undefined;
12
- name?: string | undefined;
13
- description?: string | undefined;
14
- }>;
5
+ roles: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
+ }, z.core.$strip>;
@@ -1,5 +1,7 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { TeamsRepository } from "./shared/TeamsRepository.js";
3
+ import { TeamProvider } from "./shared/TeamProvider.js";
4
+ import { TeamsRepositoryCachingDecorator } from "./shared/decorators/TeamsRepositoryCachingDecorator.js";
3
5
  import { GetTeamFeature } from "./GetTeam/feature.js";
4
6
  import { ListTeamsFeature } from "./ListTeams/feature.js";
5
7
  import { CreateTeamFeature } from "./CreateTeam/feature.js";
@@ -10,6 +12,10 @@ export const TeamsFeature = createFeature({
10
12
  register(container) {
11
13
  // Register repository in singleton scope
12
14
  container.register(TeamsRepository).inSingletonScope();
15
+ container.register(TeamProvider).inSingletonScope();
16
+
17
+ // Register caching decorator
18
+ container.registerDecorator(TeamsRepositoryCachingDecorator);
13
19
 
14
20
  // Register all use cases
15
21
  GetTeamFeature.register(container);
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","TeamsRepository","GetTeamFeature","ListTeamsFeature","CreateTeamFeature","UpdateTeamFeature","DeleteTeamFeature","TeamsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TeamsRepository } from \"./shared/TeamsRepository.js\";\nimport { GetTeamFeature } from \"./GetTeam/feature.js\";\nimport { ListTeamsFeature } from \"./ListTeams/feature.js\";\nimport { CreateTeamFeature } from \"./CreateTeam/feature.js\";\nimport { UpdateTeamFeature } from \"./UpdateTeam/feature.js\";\nimport { DeleteTeamFeature } from \"./DeleteTeam/feature.js\";\n\nexport const TeamsFeature = createFeature({\n name: \"Teams\",\n register(container) {\n // Register repository in singleton scope\n container.register(TeamsRepository).inSingletonScope();\n\n // Register all use cases\n GetTeamFeature.register(container);\n ListTeamsFeature.register(container);\n CreateTeamFeature.register(container);\n UpdateTeamFeature.register(container);\n DeleteTeamFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,eAAe;AACxB,SAASC,cAAc;AACvB,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAE1B,OAAO,MAAMC,YAAY,GAAGP,aAAa,CAAC;EACtCQ,IAAI,EAAE,OAAO;EACbC,QAAQA,CAACC,SAAS,EAAE;IAChB;IACAA,SAAS,CAACD,QAAQ,CAACR,eAAe,CAAC,CAACU,gBAAgB,CAAC,CAAC;;IAEtD;IACAT,cAAc,CAACO,QAAQ,CAACC,SAAS,CAAC;IAClCP,gBAAgB,CAACM,QAAQ,CAACC,SAAS,CAAC;IACpCN,iBAAiB,CAACK,QAAQ,CAACC,SAAS,CAAC;IACrCL,iBAAiB,CAACI,QAAQ,CAACC,SAAS,CAAC;IACrCJ,iBAAiB,CAACG,QAAQ,CAACC,SAAS,CAAC;EACzC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createFeature","TeamsRepository","TeamProvider","TeamsRepositoryCachingDecorator","GetTeamFeature","ListTeamsFeature","CreateTeamFeature","UpdateTeamFeature","DeleteTeamFeature","TeamsFeature","name","register","container","inSingletonScope","registerDecorator"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TeamsRepository } from \"./shared/TeamsRepository.js\";\nimport { TeamProvider } from \"./shared/TeamProvider.js\";\nimport { TeamsRepositoryCachingDecorator } from \"./shared/decorators/TeamsRepositoryCachingDecorator.js\";\nimport { GetTeamFeature } from \"./GetTeam/feature.js\";\nimport { ListTeamsFeature } from \"./ListTeams/feature.js\";\nimport { CreateTeamFeature } from \"./CreateTeam/feature.js\";\nimport { UpdateTeamFeature } from \"./UpdateTeam/feature.js\";\nimport { DeleteTeamFeature } from \"./DeleteTeam/feature.js\";\n\nexport const TeamsFeature = createFeature({\n name: \"Teams\",\n register(container) {\n // Register repository in singleton scope\n container.register(TeamsRepository).inSingletonScope();\n container.register(TeamProvider).inSingletonScope();\n\n // Register caching decorator\n container.registerDecorator(TeamsRepositoryCachingDecorator);\n\n // Register all use cases\n GetTeamFeature.register(container);\n ListTeamsFeature.register(container);\n CreateTeamFeature.register(container);\n UpdateTeamFeature.register(container);\n DeleteTeamFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,eAAe;AACxB,SAASC,YAAY;AACrB,SAASC,+BAA+B;AACxC,SAASC,cAAc;AACvB,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAE1B,OAAO,MAAMC,YAAY,GAAGT,aAAa,CAAC;EACtCU,IAAI,EAAE,OAAO;EACbC,QAAQA,CAACC,SAAS,EAAE;IAChB;IACAA,SAAS,CAACD,QAAQ,CAACV,eAAe,CAAC,CAACY,gBAAgB,CAAC,CAAC;IACtDD,SAAS,CAACD,QAAQ,CAACT,YAAY,CAAC,CAACW,gBAAgB,CAAC,CAAC;;IAEnD;IACAD,SAAS,CAACE,iBAAiB,CAACX,+BAA+B,CAAC;;IAE5D;IACAC,cAAc,CAACO,QAAQ,CAACC,SAAS,CAAC;IAClCP,gBAAgB,CAACM,QAAQ,CAACC,SAAS,CAAC;IACpCN,iBAAiB,CAACK,QAAQ,CAACC,SAAS,CAAC;IACrCL,iBAAiB,CAACI,QAAQ,CAACC,SAAS,CAAC;IACrCJ,iBAAiB,CAACG,QAAQ,CAACC,SAAS,CAAC;EACzC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import { TeamsProvider } from "../../../../features/security/shared/abstractions.js";
2
+ import { TeamFactory } from "./abstractions.js";
3
+ import type { Team } from "./types.js";
4
+ declare class TeamProviderImpl implements TeamsProvider.Interface {
5
+ private teamFactories;
6
+ private cache;
7
+ constructor(teamFactories: TeamFactory.Interface[]);
8
+ getTeams(): Promise<Team[]>;
9
+ }
10
+ export declare const TeamProvider: typeof TeamProviderImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("~/features/security/shared/abstractions.js").ITeamsProvider>;
12
+ };
13
+ export {};
@@ -0,0 +1,29 @@
1
+ import { TeamsProvider } from "../../shared/abstractions.js";
2
+ import { TeamFactory } from "./abstractions.js";
3
+ class TeamProviderImpl {
4
+ constructor(teamFactories) {
5
+ this.teamFactories = teamFactories;
6
+ }
7
+ async getTeams() {
8
+ if (this.cache === undefined) {
9
+ const results = await Promise.all(this.teamFactories.map(factory => factory.execute()));
10
+ this.cache = results.flat().map(codeTeam => ({
11
+ ...codeTeam,
12
+ id: codeTeam.slug,
13
+ createdOn: null,
14
+ createdBy: null,
15
+ system: codeTeam.system ?? false,
16
+ plugin: true
17
+ }));
18
+ }
19
+ return this.cache;
20
+ }
21
+ }
22
+ export const TeamProvider = TeamsProvider.createImplementation({
23
+ implementation: TeamProviderImpl,
24
+ dependencies: [[TeamFactory, {
25
+ multiple: true
26
+ }]]
27
+ });
28
+
29
+ //# sourceMappingURL=TeamProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TeamsProvider","TeamFactory","TeamProviderImpl","constructor","teamFactories","getTeams","cache","undefined","results","Promise","all","map","factory","execute","flat","codeTeam","id","slug","createdOn","createdBy","system","plugin","TeamProvider","createImplementation","implementation","dependencies","multiple"],"sources":["TeamProvider.ts"],"sourcesContent":["import { TeamsProvider } from \"~/features/security/shared/abstractions.js\";\nimport { TeamFactory } from \"./abstractions.js\";\nimport type { Team } from \"./types.js\";\n\nclass TeamProviderImpl implements TeamsProvider.Interface {\n private cache: Team[] | undefined;\n\n constructor(private teamFactories: TeamFactory.Interface[]) {}\n\n async getTeams(): Promise<Team[]> {\n if (this.cache === undefined) {\n const results = await Promise.all(this.teamFactories.map(factory => factory.execute()));\n this.cache = results.flat().map<Team>(codeTeam => ({\n ...codeTeam,\n id: codeTeam.slug,\n createdOn: null,\n createdBy: null,\n system: codeTeam.system ?? false,\n plugin: true\n }));\n }\n\n return this.cache;\n }\n}\n\nexport const TeamProvider = TeamsProvider.createImplementation({\n implementation: TeamProviderImpl,\n dependencies: [[TeamFactory, { multiple: true }]]\n});\n"],"mappings":"AAAA,SAASA,aAAa;AACtB,SAASC,WAAW;AAGpB,MAAMC,gBAAgB,CAAoC;EAGtDC,WAAWA,CAASC,aAAsC,EAAE;IAAA,KAAxCA,aAAsC,GAAtCA,aAAsC;EAAG;EAE7D,MAAMC,QAAQA,CAAA,EAAoB;IAC9B,IAAI,IAAI,CAACC,KAAK,KAAKC,SAAS,EAAE;MAC1B,MAAMC,OAAO,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,IAAI,CAACN,aAAa,CAACO,GAAG,CAACC,OAAO,IAAIA,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;MACvF,IAAI,CAACP,KAAK,GAAGE,OAAO,CAACM,IAAI,CAAC,CAAC,CAACH,GAAG,CAAOI,QAAQ,KAAK;QAC/C,GAAGA,QAAQ;QACXC,EAAE,EAAED,QAAQ,CAACE,IAAI;QACjBC,SAAS,EAAE,IAAI;QACfC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAEL,QAAQ,CAACK,MAAM,IAAI,KAAK;QAChCC,MAAM,EAAE;MACZ,CAAC,CAAC,CAAC;IACP;IAEA,OAAO,IAAI,CAACf,KAAK;EACrB;AACJ;AAEA,OAAO,MAAMgB,YAAY,GAAGtB,aAAa,CAACuB,oBAAoB,CAAC;EAC3DC,cAAc,EAAEtB,gBAAgB;EAChCuB,YAAY,EAAE,CAAC,CAACxB,WAAW,EAAE;IAAEyB,QAAQ,EAAE;EAAK,CAAC,CAAC;AACpD,CAAC,CAAC","ignoreList":[]}
@@ -15,7 +15,7 @@ class TeamsRepositoryImpl {
15
15
  const tenant = this.tenantContext.getTenant();
16
16
 
17
17
  // First check plugin teams
18
- const pluginTeams = await this.teamsProvider();
18
+ const pluginTeams = await this.teamsProvider.getTeams();
19
19
  const pluginTeam = pluginTeams.find(t => {
20
20
  // Match by ID or slug
21
21
  if (params.id && t.id === params.id) {
@@ -26,12 +26,8 @@ class TeamsRepositoryImpl {
26
26
  }
27
27
  return false;
28
28
  });
29
-
30
- // Filter by tenant if team has one
31
29
  if (pluginTeam) {
32
- if (!pluginTeam.tenant || pluginTeam.tenant === tenant.id) {
33
- return Result.ok(pluginTeam);
34
- }
30
+ return Result.ok(pluginTeam);
35
31
  }
36
32
 
37
33
  // Then check storage
@@ -63,13 +59,8 @@ class TeamsRepositoryImpl {
63
59
  });
64
60
 
65
61
  // Get teams from plugins
66
- const pluginTeams = await this.teamsProvider();
62
+ const pluginTeams = await this.teamsProvider.getTeams();
67
63
  const teamsFromPlugins = pluginTeams.filter(team => {
68
- // Filter by tenant - plugin teams with no tenant or matching tenant
69
- if (team.tenant && team.tenant !== tenant.id) {
70
- return false;
71
- }
72
-
73
64
  // Apply where filters if provided
74
65
  const {
75
66
  id_in,
@@ -92,8 +83,12 @@ class TeamsRepositoryImpl {
92
83
  }
93
84
  async create(team) {
94
85
  try {
86
+ const tenant = this.tenantContext.getTenant();
95
87
  await this.storageOperations.createTeam({
96
- team
88
+ team: {
89
+ ...team,
90
+ tenant: tenant.id
91
+ }
97
92
  });
98
93
  return Result.ok();
99
94
  } catch (error) {
@@ -102,11 +97,14 @@ class TeamsRepositoryImpl {
102
97
  }
103
98
  async update(team) {
104
99
  try {
105
- // Note: The old implementation passes both `original` and `team` to updateTeam.
106
- // We'll need to handle this in the use case layer.
100
+ const tenant = this.tenantContext.getTenant();
101
+ const teamWithTenant = {
102
+ ...team,
103
+ tenant: tenant.id
104
+ };
107
105
  await this.storageOperations.updateTeam({
108
- team,
109
- original: team
106
+ team: teamWithTenant,
107
+ original: teamWithTenant
110
108
  });
111
109
  return Result.ok();
112
110
  } catch (error) {
@@ -115,8 +113,12 @@ class TeamsRepositoryImpl {
115
113
  }
116
114
  async delete(team) {
117
115
  try {
116
+ const tenant = this.tenantContext.getTenant();
118
117
  await this.storageOperations.deleteTeam({
119
- team
118
+ team: {
119
+ ...team,
120
+ tenant: tenant.id
121
+ }
120
122
  });
121
123
  return Result.ok();
122
124
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","Result","TenantContext","TeamsRepository","RepositoryAbstraction","SecurityStorageOperations","TeamsProvider","TeamNotFoundError","TeamStorageError","TeamsRepositoryImpl","constructor","tenantContext","storageOperations","teamsProvider","get","params","tenant","getTenant","pluginTeams","pluginTeam","find","t","id","slug","ok","team","getTeam","where","fail","error","list","teamsFromDatabase","listTeams","sort","teamsFromPlugins","filter","id_in","slug_in","includes","create","createTeam","update","updateTeam","original","delete","deleteTeam","abstraction","implementation","dependencies"],"sources":["TeamsRepository.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { TeamsRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport type { Team, GetTeamInput, ListTeamsInput } from \"./types.js\";\nimport {\n SecurityStorageOperations,\n TeamsProvider\n} from \"~/features/security/shared/abstractions.js\";\nimport { TeamNotFoundError, TeamStorageError } from \"./errors.js\";\n\nclass TeamsRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private storageOperations: SecurityStorageOperations.Interface,\n private teamsProvider: TeamsProvider.Interface\n ) {}\n\n async get(params: GetTeamInput): Promise<Result<Team, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // First check plugin teams\n const pluginTeams = await this.teamsProvider();\n const pluginTeam = pluginTeams.find(t => {\n // Match by ID or slug\n if (params.id && t.id === params.id) {\n return true;\n }\n\n if (params.slug && t.slug === params.slug) {\n return true;\n }\n\n return false;\n });\n\n // Filter by tenant if team has one\n if (pluginTeam) {\n if (!pluginTeam.tenant || pluginTeam.tenant === tenant.id) {\n return Result.ok(pluginTeam);\n }\n }\n\n // Then check storage\n const team = await this.storageOperations.getTeam({\n where: {\n ...params,\n tenant: tenant.id\n }\n });\n\n if (team) {\n return Result.ok(team);\n }\n\n return Result.fail(new TeamNotFoundError());\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async list(params: ListTeamsInput): Promise<Result<Team[], RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Get teams from storage\n const teamsFromDatabase = await this.storageOperations.listTeams({\n where: {\n tenant: tenant.id,\n ...params.where\n },\n sort: params.sort || [\"createdOn_ASC\"]\n });\n\n // Get teams from plugins\n const pluginTeams = await this.teamsProvider();\n const teamsFromPlugins = pluginTeams.filter(team => {\n // Filter by tenant - plugin teams with no tenant or matching tenant\n if (team.tenant && team.tenant !== tenant.id) {\n return false;\n }\n\n // Apply where filters if provided\n const { id_in, slug_in } = params.where || {};\n if (id_in && !id_in.includes(team.id)) {\n return false;\n }\n if (slug_in && !slug_in.includes(team.slug)) {\n return false;\n }\n\n return true;\n });\n\n // Plugin teams come first (they don't have createdOn), then database teams\n return Result.ok([...teamsFromPlugins, ...teamsFromDatabase]);\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async create(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n await this.storageOperations.createTeam({ team });\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async update(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n // Note: The old implementation passes both `original` and `team` to updateTeam.\n // We'll need to handle this in the use case layer.\n await this.storageOperations.updateTeam({ team, original: team });\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async delete(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n await this.storageOperations.deleteTeam({ team });\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n}\n\nexport const TeamsRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: TeamsRepositoryImpl,\n dependencies: [TenantContext, SecurityStorageOperations, TeamsProvider]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createImplementation","Result","TenantContext","TeamsRepository","RepositoryAbstraction","SecurityStorageOperations","TeamsProvider","TeamNotFoundError","TeamStorageError","TeamsRepositoryImpl","constructor","tenantContext","storageOperations","teamsProvider","get","params","tenant","getTenant","pluginTeams","getTeams","pluginTeam","find","t","id","slug","ok","team","getTeam","where","fail","error","list","teamsFromDatabase","listTeams","sort","teamsFromPlugins","filter","id_in","slug_in","includes","create","createTeam","update","teamWithTenant","updateTeam","original","delete","deleteTeam","abstraction","implementation","dependencies"],"sources":["TeamsRepository.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { TeamsRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport type { Team, GetTeamInput, ListTeamsInput } from \"./types.js\";\nimport {\n SecurityStorageOperations,\n TeamsProvider\n} from \"~/features/security/shared/abstractions.js\";\nimport { TeamNotFoundError, TeamStorageError } from \"./errors.js\";\n\nclass TeamsRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private storageOperations: SecurityStorageOperations.Interface,\n private teamsProvider: TeamsProvider.Interface\n ) {}\n\n async get(params: GetTeamInput): Promise<Result<Team, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // First check plugin teams\n const pluginTeams = await this.teamsProvider.getTeams();\n const pluginTeam = pluginTeams.find(t => {\n // Match by ID or slug\n if (params.id && t.id === params.id) {\n return true;\n }\n\n if (params.slug && t.slug === params.slug) {\n return true;\n }\n\n return false;\n });\n\n if (pluginTeam) {\n return Result.ok(pluginTeam);\n }\n\n // Then check storage\n const team = await this.storageOperations.getTeam({\n where: {\n ...params,\n tenant: tenant.id\n }\n });\n\n if (team) {\n return Result.ok(team);\n }\n\n return Result.fail(new TeamNotFoundError());\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async list(params: ListTeamsInput): Promise<Result<Team[], RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Get teams from storage\n const teamsFromDatabase = await this.storageOperations.listTeams({\n where: {\n tenant: tenant.id,\n ...params.where\n },\n sort: params.sort || [\"createdOn_ASC\"]\n });\n\n // Get teams from plugins\n const pluginTeams = await this.teamsProvider.getTeams();\n const teamsFromPlugins = pluginTeams.filter(team => {\n // Apply where filters if provided\n const { id_in, slug_in } = params.where || {};\n if (id_in && !id_in.includes(team.id)) {\n return false;\n }\n if (slug_in && !slug_in.includes(team.slug)) {\n return false;\n }\n\n return true;\n });\n\n // Plugin teams come first (they don't have createdOn), then database teams\n return Result.ok([...teamsFromPlugins, ...teamsFromDatabase]);\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async create(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n await this.storageOperations.createTeam({ team: { ...team, tenant: tenant.id } });\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async update(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n const teamWithTenant = { ...team, tenant: tenant.id };\n await this.storageOperations.updateTeam({\n team: teamWithTenant,\n original: teamWithTenant\n });\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n\n async delete(team: Team): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n await this.storageOperations.deleteTeam({ team: { ...team, tenant: tenant.id } });\n return Result.ok();\n } catch (error) {\n return Result.fail(new TeamStorageError(error));\n }\n }\n}\n\nexport const TeamsRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: TeamsRepositoryImpl,\n dependencies: [TenantContext, SecurityStorageOperations, TeamsProvider]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -12,9 +12,27 @@ export interface ITeamsRepository {
12
12
  update(data: Team): Promise<Result<void, RepositoryError>>;
13
13
  delete(team: Team): Promise<Result<void, RepositoryError>>;
14
14
  }
15
+ /** Persist and retrieve teams. */
15
16
  export declare const TeamsRepository: import("@webiny/di").Abstraction<ITeamsRepository>;
16
17
  export declare namespace TeamsRepository {
17
18
  type Interface = ITeamsRepository;
18
19
  type Error = RepositoryError;
19
20
  }
21
+ export type CodeTeam = {
22
+ name: string;
23
+ slug: string;
24
+ description: string;
25
+ roles: string[];
26
+ system?: boolean;
27
+ };
28
+ export interface ITeamFactory {
29
+ execute(): Promise<CodeTeam[]>;
30
+ }
31
+ /** Provide code-defined teams. */
32
+ export declare const TeamFactory: import("@webiny/di").Abstraction<ITeamFactory>;
33
+ export declare namespace TeamFactory {
34
+ type Interface = ITeamFactory;
35
+ type Return = Promise<CodeTeam[]>;
36
+ type Team = CodeTeam;
37
+ }
20
38
  export {};
@@ -1,4 +1,7 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
+ /** Persist and retrieve teams. */
2
3
  export const TeamsRepository = createAbstraction("TeamsRepository");
4
+ /** Provide code-defined teams. */
5
+ export const TeamFactory = createAbstraction("TeamFactory");
3
6
 
4
7
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","TeamsRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, GetTeamInput, ListTeamsInput } from \"./types.js\";\nimport { TeamNotFoundError, TeamStorageError } from \"./errors.js\";\n\nexport interface ITeamsRepositoryErrors {\n base: TeamNotFoundError | TeamStorageError;\n}\n\ntype RepositoryError = ITeamsRepositoryErrors[keyof ITeamsRepositoryErrors];\n\nexport interface ITeamsRepository {\n get(params: GetTeamInput): Promise<Result<Team, RepositoryError>>;\n list(params: ListTeamsInput): Promise<Result<Team[], RepositoryError>>;\n create(data: Team): Promise<Result<void, RepositoryError>>;\n update(data: Team): Promise<Result<void, RepositoryError>>;\n delete(team: Team): Promise<Result<void, RepositoryError>>;\n}\n\nexport const TeamsRepository = createAbstraction<ITeamsRepository>(\"TeamsRepository\");\n\nexport namespace TeamsRepository {\n export type Interface = ITeamsRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAmBvD,OAAO,MAAMC,eAAe,GAAGD,iBAAiB,CAAmB,iBAAiB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","TeamsRepository","TeamFactory"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, GetTeamInput, ListTeamsInput } from \"./types.js\";\nimport { TeamNotFoundError, TeamStorageError } from \"./errors.js\";\n\nexport interface ITeamsRepositoryErrors {\n base: TeamNotFoundError | TeamStorageError;\n}\n\ntype RepositoryError = ITeamsRepositoryErrors[keyof ITeamsRepositoryErrors];\n\nexport interface ITeamsRepository {\n get(params: GetTeamInput): Promise<Result<Team, RepositoryError>>;\n list(params: ListTeamsInput): Promise<Result<Team[], RepositoryError>>;\n create(data: Team): Promise<Result<void, RepositoryError>>;\n update(data: Team): Promise<Result<void, RepositoryError>>;\n delete(team: Team): Promise<Result<void, RepositoryError>>;\n}\n\n/** Persist and retrieve teams. */\nexport const TeamsRepository = createAbstraction<ITeamsRepository>(\"TeamsRepository\");\n\nexport namespace TeamsRepository {\n export type Interface = ITeamsRepository;\n export type Error = RepositoryError;\n}\n\nexport type CodeTeam = {\n name: string;\n slug: string;\n description: string;\n roles: string[];\n system?: boolean;\n};\n\nexport interface ITeamFactory {\n execute(): Promise<CodeTeam[]>;\n}\n\n/** Provide code-defined teams. */\nexport const TeamFactory = createAbstraction<ITeamFactory>(\"TeamFactory\");\n\nexport namespace TeamFactory {\n export type Interface = ITeamFactory;\n export type Return = Promise<CodeTeam[]>;\n export type Team = CodeTeam;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAmBvD;AACA,OAAO,MAAMC,eAAe,GAAGD,iBAAiB,CAAmB,iBAAiB,CAAC;AAmBrF;AACA,OAAO,MAAME,WAAW,GAAGF,iBAAiB,CAAe,aAAa,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { TeamsRepository } from "../abstractions.js";
3
+ import type { Team, GetTeamInput, ListTeamsInput } from "../types.js";
4
+ declare class TeamsRepositoryCachingDecoratorImpl implements TeamsRepository.Interface {
5
+ private decoratee;
6
+ private readonly cache;
7
+ constructor(decoratee: TeamsRepository.Interface);
8
+ get(params: GetTeamInput): Promise<Result<Team, TeamsRepository.Error>>;
9
+ list(params: ListTeamsInput): Promise<Result<Team[], TeamsRepository.Error>>;
10
+ create(team: Team): Promise<Result<void, TeamsRepository.Error>>;
11
+ update(team: Team): Promise<Result<void, TeamsRepository.Error>>;
12
+ delete(team: Team): Promise<Result<void, TeamsRepository.Error>>;
13
+ }
14
+ export declare const TeamsRepositoryCachingDecorator: typeof TeamsRepositoryCachingDecoratorImpl & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("../abstractions.js").ITeamsRepository>;
16
+ };
17
+ export {};
@@ -0,0 +1,76 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { TeamsRepository } from "../abstractions.js";
3
+ import { ListCache } from "../../../roles/shared/decorators/ListCache.js";
4
+ class TeamsRepositoryCachingDecoratorImpl {
5
+ cache = new ListCache();
6
+ constructor(decoratee) {
7
+ this.decoratee = decoratee;
8
+ }
9
+ async get(params) {
10
+ // Check cache first
11
+ if (this.cache.hasItems()) {
12
+ const cachedTeam = this.cache.getItems().find(t => {
13
+ if (params.id && t.id === params.id) {
14
+ return true;
15
+ }
16
+ if (params.slug && t.slug === params.slug) {
17
+ return true;
18
+ }
19
+ return false;
20
+ });
21
+ if (cachedTeam) {
22
+ return Result.ok(cachedTeam);
23
+ }
24
+ }
25
+
26
+ // Delegate to decoratee
27
+ const result = await this.decoratee.get(params);
28
+
29
+ // Add to cache on success
30
+ if (result.isOk()) {
31
+ this.cache.addItems([result.value]);
32
+ }
33
+ return result;
34
+ }
35
+ async list(params) {
36
+ return this.decoratee.list(params);
37
+ }
38
+ async create(team) {
39
+ const result = await this.decoratee.create(team);
40
+
41
+ // Add to cache on success
42
+ if (result.isOk()) {
43
+ this.cache.addItems([team]);
44
+ }
45
+ return result;
46
+ }
47
+ async update(team) {
48
+ const result = await this.decoratee.update(team);
49
+
50
+ // Update in cache on success
51
+ if (result.isOk()) {
52
+ this.cache.updateItems(item => {
53
+ if (item.id === team.id) {
54
+ return team;
55
+ }
56
+ return item;
57
+ });
58
+ }
59
+ return result;
60
+ }
61
+ async delete(team) {
62
+ const result = await this.decoratee.delete(team);
63
+
64
+ // Remove from cache on success
65
+ if (result.isOk()) {
66
+ this.cache.removeItems(item => item.id === team.id);
67
+ }
68
+ return result;
69
+ }
70
+ }
71
+ export const TeamsRepositoryCachingDecorator = TeamsRepository.createDecorator({
72
+ decorator: TeamsRepositoryCachingDecoratorImpl,
73
+ dependencies: []
74
+ });
75
+
76
+ //# sourceMappingURL=TeamsRepositoryCachingDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Result","TeamsRepository","ListCache","TeamsRepositoryCachingDecoratorImpl","cache","constructor","decoratee","get","params","hasItems","cachedTeam","getItems","find","t","id","slug","ok","result","isOk","addItems","value","list","create","team","update","updateItems","item","delete","removeItems","TeamsRepositoryCachingDecorator","createDecorator","decorator","dependencies"],"sources":["TeamsRepositoryCachingDecorator.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { TeamsRepository } from \"../abstractions.js\";\nimport type { Team, GetTeamInput, ListTeamsInput } from \"../types.js\";\nimport { ListCache } from \"~/features/security/roles/shared/decorators/ListCache.js\";\n\nclass TeamsRepositoryCachingDecoratorImpl implements TeamsRepository.Interface {\n private readonly cache = new ListCache<Team>();\n\n constructor(private decoratee: TeamsRepository.Interface) {}\n\n async get(params: GetTeamInput): Promise<Result<Team, TeamsRepository.Error>> {\n // Check cache first\n if (this.cache.hasItems()) {\n const cachedTeam = this.cache.getItems().find(t => {\n if (params.id && t.id === params.id) {\n return true;\n }\n if (params.slug && t.slug === params.slug) {\n return true;\n }\n return false;\n });\n\n if (cachedTeam) {\n return Result.ok(cachedTeam);\n }\n }\n\n // Delegate to decoratee\n const result = await this.decoratee.get(params);\n\n // Add to cache on success\n if (result.isOk()) {\n this.cache.addItems([result.value]);\n }\n\n return result;\n }\n\n async list(params: ListTeamsInput): Promise<Result<Team[], TeamsRepository.Error>> {\n return this.decoratee.list(params);\n }\n\n async create(team: Team): Promise<Result<void, TeamsRepository.Error>> {\n const result = await this.decoratee.create(team);\n\n // Add to cache on success\n if (result.isOk()) {\n this.cache.addItems([team]);\n }\n\n return result;\n }\n\n async update(team: Team): Promise<Result<void, TeamsRepository.Error>> {\n const result = await this.decoratee.update(team);\n\n // Update in cache on success\n if (result.isOk()) {\n this.cache.updateItems(item => {\n if (item.id === team.id) {\n return team;\n }\n return item;\n });\n }\n\n return result;\n }\n\n async delete(team: Team): Promise<Result<void, TeamsRepository.Error>> {\n const result = await this.decoratee.delete(team);\n\n // Remove from cache on success\n if (result.isOk()) {\n this.cache.removeItems(item => item.id === team.id);\n }\n\n return result;\n }\n}\n\nexport const TeamsRepositoryCachingDecorator = TeamsRepository.createDecorator({\n decorator: TeamsRepositoryCachingDecoratorImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe;AAExB,SAASC,SAAS;AAElB,MAAMC,mCAAmC,CAAsC;EAC1DC,KAAK,GAAG,IAAIF,SAAS,CAAO,CAAC;EAE9CG,WAAWA,CAASC,SAAoC,EAAE;IAAA,KAAtCA,SAAoC,GAApCA,SAAoC;EAAG;EAE3D,MAAMC,GAAGA,CAACC,MAAoB,EAAgD;IAC1E;IACA,IAAI,IAAI,CAACJ,KAAK,CAACK,QAAQ,CAAC,CAAC,EAAE;MACvB,MAAMC,UAAU,GAAG,IAAI,CAACN,KAAK,CAACO,QAAQ,CAAC,CAAC,CAACC,IAAI,CAACC,CAAC,IAAI;QAC/C,IAAIL,MAAM,CAACM,EAAE,IAAID,CAAC,CAACC,EAAE,KAAKN,MAAM,CAACM,EAAE,EAAE;UACjC,OAAO,IAAI;QACf;QACA,IAAIN,MAAM,CAACO,IAAI,IAAIF,CAAC,CAACE,IAAI,KAAKP,MAAM,CAACO,IAAI,EAAE;UACvC,OAAO,IAAI;QACf;QACA,OAAO,KAAK;MAChB,CAAC,CAAC;MAEF,IAAIL,UAAU,EAAE;QACZ,OAAOV,MAAM,CAACgB,EAAE,CAACN,UAAU,CAAC;MAChC;IACJ;;IAEA;IACA,MAAMO,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACC,GAAG,CAACC,MAAM,CAAC;;IAE/C;IACA,IAAIS,MAAM,CAACC,IAAI,CAAC,CAAC,EAAE;MACf,IAAI,CAACd,KAAK,CAACe,QAAQ,CAAC,CAACF,MAAM,CAACG,KAAK,CAAC,CAAC;IACvC;IAEA,OAAOH,MAAM;EACjB;EAEA,MAAMI,IAAIA,CAACb,MAAsB,EAAkD;IAC/E,OAAO,IAAI,CAACF,SAAS,CAACe,IAAI,CAACb,MAAM,CAAC;EACtC;EAEA,MAAMc,MAAMA,CAACC,IAAU,EAAgD;IACnE,MAAMN,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACgB,MAAM,CAACC,IAAI,CAAC;;IAEhD;IACA,IAAIN,MAAM,CAACC,IAAI,CAAC,CAAC,EAAE;MACf,IAAI,CAACd,KAAK,CAACe,QAAQ,CAAC,CAACI,IAAI,CAAC,CAAC;IAC/B;IAEA,OAAON,MAAM;EACjB;EAEA,MAAMO,MAAMA,CAACD,IAAU,EAAgD;IACnE,MAAMN,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACkB,MAAM,CAACD,IAAI,CAAC;;IAEhD;IACA,IAAIN,MAAM,CAACC,IAAI,CAAC,CAAC,EAAE;MACf,IAAI,CAACd,KAAK,CAACqB,WAAW,CAACC,IAAI,IAAI;QAC3B,IAAIA,IAAI,CAACZ,EAAE,KAAKS,IAAI,CAACT,EAAE,EAAE;UACrB,OAAOS,IAAI;QACf;QACA,OAAOG,IAAI;MACf,CAAC,CAAC;IACN;IAEA,OAAOT,MAAM;EACjB;EAEA,MAAMU,MAAMA,CAACJ,IAAU,EAAgD;IACnE,MAAMN,MAAM,GAAG,MAAM,IAAI,CAACX,SAAS,CAACqB,MAAM,CAACJ,IAAI,CAAC;;IAEhD;IACA,IAAIN,MAAM,CAACC,IAAI,CAAC,CAAC,EAAE;MACf,IAAI,CAACd,KAAK,CAACwB,WAAW,CAACF,IAAI,IAAIA,IAAI,CAACZ,EAAE,KAAKS,IAAI,CAACT,EAAE,CAAC;IACvD;IAEA,OAAOG,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMY,+BAA+B,GAAG5B,eAAe,CAAC6B,eAAe,CAAC;EAC3EC,SAAS,EAAE5B,mCAAmC;EAC9C6B,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -1,8 +1,6 @@
1
1
  import jwt from "jsonwebtoken";
2
- export interface Jwk {
3
- kid: string;
4
- [key: string]: string;
5
- }
2
+ import { type JWK } from "jose";
3
+ export type Jwk = JWK;
6
4
  export type Jwt = {
7
5
  header: jwt.JwtHeader;
8
6
  payload: jwt.JwtPayload;
@@ -1,5 +1,5 @@
1
1
  import jwt from "jsonwebtoken";
2
- import { importJWK, exportSPKI } from "jose";
2
+ import { exportSPKI, importJWK } from "jose";
3
3
  export const verifyJwtUsingJwk = async (token, jwk) => {
4
4
  // Casting to `any` because `jose` v5 has some incompatibilities with types.
5
5
  // v6 works as expected, but we can't have v6 because it's ESM-only.
@@ -1 +1 @@
1
- {"version":3,"names":["jwt","importJWK","exportSPKI","verifyJwtUsingJwk","token","jwk","key","pemKey","verify"],"sources":["verifyJwtUsingJwk.ts"],"sourcesContent":["import jwt from \"jsonwebtoken\";\nimport { importJWK, exportSPKI } from \"jose\";\n\nexport interface Jwk {\n kid: string;\n [key: string]: string;\n}\n\nexport type Jwt = {\n header: jwt.JwtHeader;\n payload: jwt.JwtPayload;\n};\n\nexport const verifyJwtUsingJwk = async (token: string, jwk: Jwk) => {\n // Casting to `any` because `jose` v5 has some incompatibilities with types.\n // v6 works as expected, but we can't have v6 because it's ESM-only.\n const key = (await importJWK(jwk as any)) as CryptoKey;\n const pemKey = await exportSPKI(key);\n\n return jwt.verify(token, pemKey) as jwt.JwtPayload;\n};\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,cAAc;AAC9B,SAASC,SAAS,EAAEC,UAAU,QAAQ,MAAM;AAY5C,OAAO,MAAMC,iBAAiB,GAAG,MAAAA,CAAOC,KAAa,EAAEC,GAAQ,KAAK;EAChE;EACA;EACA,MAAMC,GAAG,GAAI,MAAML,SAAS,CAACI,GAAU,CAAe;EACtD,MAAME,MAAM,GAAG,MAAML,UAAU,CAACI,GAAG,CAAC;EAEpC,OAAON,GAAG,CAACQ,MAAM,CAACJ,KAAK,EAAEG,MAAM,CAAC;AACpC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["jwt","exportSPKI","importJWK","verifyJwtUsingJwk","token","jwk","key","pemKey","verify"],"sources":["verifyJwtUsingJwk.ts"],"sourcesContent":["import jwt from \"jsonwebtoken\";\nimport { exportSPKI, importJWK, type JWK } from \"jose\";\n\nexport type Jwk = JWK;\n\nexport type Jwt = {\n header: jwt.JwtHeader;\n payload: jwt.JwtPayload;\n};\n\nexport const verifyJwtUsingJwk = async (token: string, jwk: Jwk) => {\n // Casting to `any` because `jose` v5 has some incompatibilities with types.\n // v6 works as expected, but we can't have v6 because it's ESM-only.\n const key = (await importJWK(jwk)) as CryptoKey;\n const pemKey = await exportSPKI(key);\n\n return jwt.verify(token, pemKey) as jwt.JwtPayload;\n};\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,cAAc;AAC9B,SAASC,UAAU,EAAEC,SAAS,QAAkB,MAAM;AAStD,OAAO,MAAMC,iBAAiB,GAAG,MAAAA,CAAOC,KAAa,EAAEC,GAAQ,KAAK;EAChE;EACA;EACA,MAAMC,GAAG,GAAI,MAAMJ,SAAS,CAACG,GAAG,CAAe;EAC/C,MAAME,MAAM,GAAG,MAAMN,UAAU,CAACK,GAAG,CAAC;EAEpC,OAAON,GAAG,CAACQ,MAAM,CAACJ,KAAK,EAAEG,MAAM,CAAC;AACpC,CAAC","ignoreList":[]}
@@ -19,14 +19,13 @@ export type InstallSystemInput = AppInstallationData[];
19
19
  export interface IInstallSystemUseCase {
20
20
  execute(input: InstallSystemInput): Promise<Result<void, IInstallSystemErrors[keyof IInstallSystemErrors]>>;
21
21
  }
22
+ /** Run system-wide installation. */
22
23
  export declare const InstallSystemUseCase: import("@webiny/di").Abstraction<IInstallSystemUseCase>;
23
24
  export declare namespace InstallSystemUseCase {
24
25
  type Interface = IInstallSystemUseCase;
25
26
  type Input = InstallSystemInput;
26
27
  }
27
- /**
28
- * Event Handler Abstraction
29
- */
28
+ /** Hook into system lifecycle after the system is installed. */
30
29
  export declare const SystemInstalledEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<void>>>;
31
30
  export declare namespace SystemInstalledEventHandler {
32
31
  type Interface = IEventHandler<DomainEvent>;
@@ -12,10 +12,9 @@ import { createAbstraction } from "@webiny/feature/api";
12
12
  * Use Case Abstraction
13
13
  */
14
14
 
15
+ /** Run system-wide installation. */
15
16
  export const InstallSystemUseCase = createAbstraction("InstallSystemUseCase");
16
- /**
17
- * Event Handler Abstraction
18
- */
17
+ /** Hook into system lifecycle after the system is installed. */
19
18
  export const SystemInstalledEventHandler = createAbstraction("SystemInstalledEventHandler");
20
19
 
21
20
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","InstallSystemUseCase","SystemInstalledEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport { InstallSystemError, SystemAlreadyInstalledError } from \"./errors.js\";\nimport {\n type AppInstallationData,\n InstallTenantUseCase\n} from \"~/features/tenancy/InstallTenant/index.js\";\nimport { CreateTenantUseCase } from \"~/features/tenancy/CreateTenant/index.js\";\n\n/**\n * Errors\n */\nexport interface IInstallSystemErrors {\n base:\n | InstallSystemError\n | SystemAlreadyInstalledError\n | CreateTenantUseCase.Errors\n | InstallTenantUseCase.Errors;\n}\n\n/**\n * Types\n */\nexport type InstallSystemInput = AppInstallationData[];\n\n/**\n * Use Case Abstraction\n */\nexport interface IInstallSystemUseCase {\n execute(\n input: InstallSystemInput\n ): Promise<Result<void, IInstallSystemErrors[keyof IInstallSystemErrors]>>;\n}\n\nexport const InstallSystemUseCase =\n createAbstraction<IInstallSystemUseCase>(\"InstallSystemUseCase\");\n\nexport namespace InstallSystemUseCase {\n export type Interface = IInstallSystemUseCase;\n export type Input = InstallSystemInput;\n}\n\n/**\n * Event Handler Abstraction\n */\nexport const SystemInstalledEventHandler = createAbstraction<IEventHandler<DomainEvent>>(\n \"SystemInstalledEventHandler\"\n);\n\nexport namespace SystemInstalledEventHandler {\n export type Interface = IEventHandler<DomainEvent>;\n export type Event = DomainEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAS/D;AACA;AACA;;AASA;AACA;AACA;;AAGA;AACA;AACA;;AAOA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC;AAOpE;AACA;AACA;AACA,OAAO,MAAME,2BAA2B,GAAGF,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","InstallSystemUseCase","SystemInstalledEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IEventHandler, DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport { InstallSystemError, SystemAlreadyInstalledError } from \"./errors.js\";\nimport {\n type AppInstallationData,\n InstallTenantUseCase\n} from \"~/features/tenancy/InstallTenant/index.js\";\nimport { CreateTenantUseCase } from \"~/features/tenancy/CreateTenant/index.js\";\n\n/**\n * Errors\n */\nexport interface IInstallSystemErrors {\n base:\n | InstallSystemError\n | SystemAlreadyInstalledError\n | CreateTenantUseCase.Errors\n | InstallTenantUseCase.Errors;\n}\n\n/**\n * Types\n */\nexport type InstallSystemInput = AppInstallationData[];\n\n/**\n * Use Case Abstraction\n */\nexport interface IInstallSystemUseCase {\n execute(\n input: InstallSystemInput\n ): Promise<Result<void, IInstallSystemErrors[keyof IInstallSystemErrors]>>;\n}\n\n/** Run system-wide installation. */\nexport const InstallSystemUseCase =\n createAbstraction<IInstallSystemUseCase>(\"InstallSystemUseCase\");\n\nexport namespace InstallSystemUseCase {\n export type Interface = IInstallSystemUseCase;\n export type Input = InstallSystemInput;\n}\n\n/** Hook into system lifecycle after the system is installed. */\nexport const SystemInstalledEventHandler = createAbstraction<IEventHandler<DomainEvent>>(\n \"SystemInstalledEventHandler\"\n);\n\nexport namespace SystemInstalledEventHandler {\n export type Interface = IEventHandler<DomainEvent>;\n export type Event = DomainEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAS/D;AACA;AACA;;AASA;AACA;AACA;;AAGA;AACA;AACA;;AAOA;AACA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC;AAOpE;AACA,OAAO,MAAME,2BAA2B,GAAGF,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
@@ -7,6 +7,7 @@ import type { ITaskInput, ITaskOutput } from "../TaskDefinition/index.js";
7
7
  */
8
8
  export interface ITaskController<I extends ITaskInput = ITaskInput, O extends ITaskOutput = ITaskOutput> {
9
9
  }
10
+ /** Runtime controller providing capabilities to running tasks. */
10
11
  export declare const TaskController: import("@webiny/di").Abstraction<ITaskController<ITaskInput, ITaskOutput>>;
11
12
  export declare namespace TaskController {
12
13
  type Interface<I extends ITaskInput = ITaskInput, O extends ITaskOutput = ITaskOutput> = ITaskController<I, O>;
@@ -7,6 +7,7 @@ import { createAbstraction } from "@webiny/feature/api";
7
7
  * Import this from @webiny/api-core, but the full interface comes from @webiny/tasks.
8
8
  */
9
9
 
10
+ /** Runtime controller providing capabilities to running tasks. */
10
11
  export const TaskController = createAbstraction("TaskController");
11
12
 
12
13
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","TaskController"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { ITaskInput, ITaskOutput } from \"../TaskDefinition/index.js\";\n\n/**\n * TaskController provides runtime capabilities to task definitions.\n * The actual interface is defined by the tasks package implementation via module augmentation.\n *\n * Import this from @webiny/api-core, but the full interface comes from @webiny/tasks.\n */\nexport interface ITaskController<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n I extends ITaskInput = ITaskInput,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n O extends ITaskOutput = ITaskOutput\n> {\n // Empty - augmented by tasks package\n}\n\nexport const TaskController = createAbstraction<ITaskController>(\"TaskController\");\n\nexport namespace TaskController {\n export type Interface<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskController<I, O>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;AACA;AACA;AACA;AACA;AACA;;AAUA,OAAO,MAAMC,cAAc,GAAGD,iBAAiB,CAAkB,gBAAgB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","TaskController"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { ITaskInput, ITaskOutput } from \"../TaskDefinition/index.js\";\n\n/**\n * TaskController provides runtime capabilities to task definitions.\n * The actual interface is defined by the tasks package implementation via module augmentation.\n *\n * Import this from @webiny/api-core, but the full interface comes from @webiny/tasks.\n */\nexport interface ITaskController<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n I extends ITaskInput = ITaskInput,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n O extends ITaskOutput = ITaskOutput\n> {\n // Empty - augmented by tasks package\n}\n\n/** Runtime controller providing capabilities to running tasks. */\nexport const TaskController = createAbstraction<ITaskController>(\"TaskController\");\n\nexport namespace TaskController {\n export type Interface<\n I extends ITaskInput = ITaskInput,\n O extends ITaskOutput = ITaskOutput\n > = ITaskController<I, O>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAGvD;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA,OAAO,MAAMC,cAAc,GAAGD,iBAAiB,CAAkB,gBAAgB,CAAC","ignoreList":[]}