@webiny/api-aco 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.7c2def32a7

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 (241) hide show
  1. package/AcoFeature.d.ts +5 -0
  2. package/AcoFeature.js +134 -0
  3. package/AcoFeature.js.map +1 -0
  4. package/AcoFolderSchemaFactory.d.ts +32 -0
  5. package/AcoFolderSchemaFactory.js +82 -0
  6. package/AcoFolderSchemaFactory.js.map +1 -0
  7. package/createAcoGraphQL.d.ts +8 -4
  8. package/createAcoGraphQL.js +56 -96
  9. package/createAcoGraphQL.js.map +1 -1
  10. package/domain/folder/abstractions.d.ts +12 -5
  11. package/domain/folder/abstractions.js +2 -2
  12. package/domain/folder/abstractions.js.map +1 -1
  13. package/domain/folder/folder.model.js +2 -1
  14. package/domain/folder/folder.model.js.map +1 -1
  15. package/exports/api/aco/flp.d.ts +1 -0
  16. package/exports/api/aco/flp.js +1 -0
  17. package/exports/api/aco/folder.d.ts +2 -1
  18. package/exports/api/aco/folder.js +1 -1
  19. package/features/ai/CreateFolderTool.d.ts +49 -0
  20. package/features/ai/CreateFolderTool.js +58 -0
  21. package/features/ai/CreateFolderTool.js.map +1 -0
  22. package/features/ai/CreateTeamTool.d.ts +48 -0
  23. package/features/ai/CreateTeamTool.js +56 -0
  24. package/features/ai/CreateTeamTool.js.map +1 -0
  25. package/features/ai/DeleteFolderTool.d.ts +48 -0
  26. package/features/ai/DeleteFolderTool.js +55 -0
  27. package/features/ai/DeleteFolderTool.js.map +1 -0
  28. package/features/ai/GrantFolderAccessTool.d.ts +77 -0
  29. package/features/ai/GrantFolderAccessTool.js +80 -0
  30. package/features/ai/GrantFolderAccessTool.js.map +1 -0
  31. package/features/ai/ListFoldersTool.d.ts +47 -0
  32. package/features/ai/ListFoldersTool.js +57 -0
  33. package/features/ai/ListFoldersTool.js.map +1 -0
  34. package/features/ai/ListRolesTool.d.ts +39 -0
  35. package/features/ai/ListRolesTool.js +48 -0
  36. package/features/ai/ListRolesTool.js.map +1 -0
  37. package/features/ai/ListTeamsTool.d.ts +39 -0
  38. package/features/ai/ListTeamsTool.js +48 -0
  39. package/features/ai/ListTeamsTool.js.map +1 -0
  40. package/features/ai/RevokeFolderAccessTool.d.ts +63 -0
  41. package/features/ai/RevokeFolderAccessTool.js +69 -0
  42. package/features/ai/RevokeFolderAccessTool.js.map +1 -0
  43. package/features/ai/assertTargetIsUsable.d.ts +10 -0
  44. package/features/ai/assertTargetIsUsable.js +14 -0
  45. package/features/ai/assertTargetIsUsable.js.map +1 -0
  46. package/features/ai/feature.d.ts +12 -0
  47. package/features/ai/feature.js +25 -0
  48. package/features/ai/feature.js.map +1 -0
  49. package/features/ai/index.d.ts +9 -0
  50. package/features/ai/index.js +9 -0
  51. package/features/ai/loadFolderPermissions.d.ts +16 -0
  52. package/features/ai/loadFolderPermissions.js +14 -0
  53. package/features/ai/loadFolderPermissions.js.map +1 -0
  54. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js +1 -0
  55. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js.map +1 -1
  56. package/features/cms/decorators/ListEntriesWithFlpDecorator.js +1 -0
  57. package/features/cms/decorators/ListEntriesWithFlpDecorator.js.map +1 -1
  58. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js +1 -0
  59. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js.map +1 -1
  60. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js +1 -0
  61. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js.map +1 -1
  62. package/features/cms/decorators/MoveEntryWithFlpDecorator.d.ts +1 -1
  63. package/features/flp/CreateFlp/CreateFlpUseCase.d.ts +3 -3
  64. package/features/flp/CreateFlp/CreateFlpUseCase.js +4 -4
  65. package/features/flp/CreateFlp/CreateFlpUseCase.js.map +1 -1
  66. package/features/flp/CreateFlp/feature.d.ts +1 -6
  67. package/features/flp/CreateFlp/feature.js +3 -2
  68. package/features/flp/CreateFlp/feature.js.map +1 -1
  69. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.d.ts +8 -5
  70. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +21 -14
  71. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -1
  72. package/features/flp/DeleteFlp/DeleteFlpUseCase.d.ts +3 -3
  73. package/features/flp/DeleteFlp/DeleteFlpUseCase.js +3 -3
  74. package/features/flp/DeleteFlp/DeleteFlpUseCase.js.map +1 -1
  75. package/features/flp/DeleteFlp/feature.d.ts +1 -6
  76. package/features/flp/DeleteFlp/feature.js +3 -2
  77. package/features/flp/DeleteFlp/feature.js.map +1 -1
  78. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.d.ts +6 -5
  79. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +16 -13
  80. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -1
  81. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.d.ts +3 -3
  82. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +6 -6
  83. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -1
  84. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.d.ts +25 -0
  85. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js +48 -0
  86. package/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js.map +1 -0
  87. package/features/flp/FolderLevelPermissions/index.d.ts +1 -0
  88. package/features/flp/FolderLevelPermissions/index.js +1 -0
  89. package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.d.ts +13 -0
  90. package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.js +26 -0
  91. package/features/flp/GetFlp/decorators/GetFlpWithCodeFlps.js.map +1 -0
  92. package/features/flp/GetFlp/feature.d.ts +1 -1
  93. package/features/flp/GetFlp/feature.js +3 -2
  94. package/features/flp/GetFlp/feature.js.map +1 -1
  95. package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.d.ts +13 -0
  96. package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.js +27 -0
  97. package/features/flp/ListFlps/decorators/ListFlpsWithCodeFlps.js.map +1 -0
  98. package/features/flp/ListFlps/feature.d.ts +1 -1
  99. package/features/flp/ListFlps/feature.js +3 -2
  100. package/features/flp/ListFlps/feature.js.map +1 -1
  101. package/features/flp/UpdateFlp/UpdateFlpUseCase.d.ts +15 -8
  102. package/features/flp/UpdateFlp/UpdateFlpUseCase.js +37 -42
  103. package/features/flp/UpdateFlp/UpdateFlpUseCase.js.map +1 -1
  104. package/features/flp/UpdateFlp/abstractions.d.ts +6 -2
  105. package/features/flp/UpdateFlp/abstractions.js.map +1 -1
  106. package/features/flp/UpdateFlp/feature.d.ts +1 -6
  107. package/features/flp/UpdateFlp/feature.js +7 -2
  108. package/features/flp/UpdateFlp/feature.js.map +1 -1
  109. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.d.ts +8 -5
  110. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +21 -16
  111. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -1
  112. package/features/flp/shared/CodeFlpMerger.d.ts +26 -0
  113. package/features/flp/shared/CodeFlpMerger.js +20 -0
  114. package/features/flp/shared/CodeFlpMerger.js.map +1 -0
  115. package/features/flp/shared/CodeFlpPath.d.ts +15 -0
  116. package/features/flp/shared/CodeFlpPath.js +29 -0
  117. package/features/flp/shared/CodeFlpPath.js.map +1 -0
  118. package/features/flp/shared/CodeFlpTarget.d.ts +10 -0
  119. package/features/flp/shared/CodeFlpTarget.js +26 -0
  120. package/features/flp/shared/CodeFlpTarget.js.map +1 -0
  121. package/features/flp/shared/CodeFlpsProvider.d.ts +14 -0
  122. package/features/flp/shared/CodeFlpsProvider.js +33 -0
  123. package/features/flp/shared/CodeFlpsProvider.js.map +1 -0
  124. package/features/flp/shared/abstractions.d.ts +77 -0
  125. package/features/flp/shared/abstractions.js +19 -0
  126. package/features/flp/shared/abstractions.js.map +1 -0
  127. package/features/flp/shared/feature.d.ts +5 -0
  128. package/features/flp/shared/feature.js +17 -0
  129. package/features/flp/shared/feature.js.map +1 -0
  130. package/features/flp/shared/index.d.ts +4 -0
  131. package/features/flp/shared/index.js +4 -0
  132. package/features/folder/CreateFolder/CreateFolderRepository.d.ts +3 -3
  133. package/features/folder/CreateFolder/CreateFolderRepository.js +10 -7
  134. package/features/folder/CreateFolder/CreateFolderRepository.js.map +1 -1
  135. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.d.ts +9 -1
  136. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js +20 -3
  137. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js.map +1 -1
  138. package/features/folder/DeleteFolder/DeleteFolderRepository.d.ts +3 -3
  139. package/features/folder/DeleteFolder/DeleteFolderRepository.js +6 -5
  140. package/features/folder/DeleteFolder/DeleteFolderRepository.js.map +1 -1
  141. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.d.ts +1 -1
  142. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +4 -0
  143. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -1
  144. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +4 -0
  145. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -1
  146. package/features/folder/FolderModelProvider.d.ts +26 -0
  147. package/features/folder/FolderModelProvider.js +22 -0
  148. package/features/folder/FolderModelProvider.js.map +1 -0
  149. package/features/folder/GetAncestors/GetAncestorsRepository.d.ts +3 -3
  150. package/features/folder/GetAncestors/GetAncestorsRepository.js +6 -5
  151. package/features/folder/GetAncestors/GetAncestorsRepository.js.map +1 -1
  152. package/features/folder/GetFolder/GetFolderRepository.d.ts +3 -3
  153. package/features/folder/GetFolder/GetFolderRepository.js +6 -5
  154. package/features/folder/GetFolder/GetFolderRepository.js.map +1 -1
  155. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.d.ts +8 -8
  156. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.d.ts +3 -3
  157. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js +10 -8
  158. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js.map +1 -1
  159. package/features/folder/ListFolders/ListFoldersRepository.d.ts +3 -3
  160. package/features/folder/ListFolders/ListFoldersRepository.js +8 -7
  161. package/features/folder/ListFolders/ListFoldersRepository.js.map +1 -1
  162. package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.d.ts +11 -0
  163. package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.js +38 -0
  164. package/features/folder/NotifyFolderChange/NotifyFolderChangeUseCase.js.map +1 -0
  165. package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.d.ts +12 -0
  166. package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.js +24 -0
  167. package/features/folder/NotifyFolderChange/NotifyOnFolderDeletedHandler.js.map +1 -0
  168. package/features/folder/NotifyFolderChange/abstractions.d.ts +28 -0
  169. package/features/folder/NotifyFolderChange/abstractions.js +8 -0
  170. package/features/folder/NotifyFolderChange/abstractions.js.map +1 -0
  171. package/features/folder/NotifyFolderChange/feature.d.ts +9 -0
  172. package/features/folder/NotifyFolderChange/feature.js +13 -0
  173. package/features/folder/NotifyFolderChange/feature.js.map +1 -0
  174. package/features/folder/NotifyFolderChange/index.d.ts +2 -0
  175. package/features/folder/NotifyFolderChange/index.js +2 -0
  176. package/features/folder/UpdateFolder/UpdateFolderRepository.d.ts +3 -3
  177. package/features/folder/UpdateFolder/UpdateFolderRepository.js +11 -8
  178. package/features/folder/UpdateFolder/UpdateFolderRepository.js.map +1 -1
  179. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.d.ts +14 -1
  180. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js +52 -4
  181. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js.map +1 -1
  182. package/features/folder/shared/abstractions.d.ts +14 -0
  183. package/features/folder/shared/abstractions.js +4 -1
  184. package/features/folder/shared/abstractions.js.map +1 -1
  185. package/filter/filter.gql.d.ts +2 -3
  186. package/filter/filter.gql.js +61 -27
  187. package/filter/filter.gql.js.map +1 -1
  188. package/filter/filter.model.js +2 -1
  189. package/filter/filter.model.js.map +1 -1
  190. package/filter/filter.so.d.ts +8 -2
  191. package/filter/filter.so.js +21 -9
  192. package/filter/filter.so.js.map +1 -1
  193. package/flp/flp.types.d.ts +6 -1
  194. package/flp/index.d.ts +0 -1
  195. package/flp/index.js +0 -1
  196. package/flp/tasks/createFlp.task.d.ts +12 -5
  197. package/flp/tasks/createFlp.task.js +32 -15
  198. package/flp/tasks/createFlp.task.js.map +1 -1
  199. package/flp/tasks/deleteFlp.task.d.ts +10 -5
  200. package/flp/tasks/deleteFlp.task.js +22 -13
  201. package/flp/tasks/deleteFlp.task.js.map +1 -1
  202. package/flp/tasks/index.d.ts +0 -1
  203. package/flp/tasks/index.js +1 -14
  204. package/flp/tasks/index.js.map +1 -1
  205. package/flp/tasks/syncFlp.task.d.ts +10 -5
  206. package/flp/tasks/syncFlp.task.js +34 -13
  207. package/flp/tasks/syncFlp.task.js.map +1 -1
  208. package/flp/tasks/updateFlp.task.d.ts +12 -5
  209. package/flp/tasks/updateFlp.task.js +40 -19
  210. package/flp/tasks/updateFlp.task.js.map +1 -1
  211. package/folder/createFolderTypeDefs.js +4 -1
  212. package/folder/createFolderTypeDefs.js.map +1 -1
  213. package/folder/folder.gql.d.ts +1 -1
  214. package/folder/folder.gql.js +10 -4
  215. package/folder/folder.gql.js.map +1 -1
  216. package/index.d.ts +1 -6
  217. package/index.js +1 -11
  218. package/package.json +25 -26
  219. package/types.d.ts +1 -2
  220. package/types.js.map +1 -1
  221. package/utils/createOperationsWrapper.d.ts +5 -2
  222. package/utils/createOperationsWrapper.js +5 -5
  223. package/utils/createOperationsWrapper.js.map +1 -1
  224. package/utils/decorators/CmsEntriesCrudDecorators.js +9 -5
  225. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -1
  226. package/utils/resolve.d.ts +2 -2
  227. package/utils/resolve.js +1 -1
  228. package/utils/resolve.js.map +1 -1
  229. package/createAcoContext.d.ts +0 -9
  230. package/createAcoContext.js +0 -109
  231. package/createAcoContext.js.map +0 -1
  232. package/createAcoStorageOperations.d.ts +0 -12
  233. package/createAcoStorageOperations.js +0 -9
  234. package/createAcoStorageOperations.js.map +0 -1
  235. package/createAcoTasks.d.ts +0 -1
  236. package/createAcoTasks.js +0 -14
  237. package/createAcoTasks.js.map +0 -1
  238. package/flp/flp.so.d.ts +0 -20
  239. package/flp/flp.so.js +0 -183
  240. package/flp/flp.so.js.map +0 -1
  241. package/index.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import type { CreateFlpUseCase as UseCaseAbstraction } from "./abstractions.js";
2
2
  import type { Folder } from "../../../folder/folder.types.js";
3
- import type { AcoContext } from "../../../types.js";
3
+ import type { AcoFlpCrud } from "../../../features/folder/shared/abstractions.js";
4
4
  export declare class CreateFlpUseCase implements UseCaseAbstraction.Interface {
5
- private context;
6
- constructor(context: AcoContext);
5
+ private flpCrud;
6
+ constructor(flpCrud: AcoFlpCrud.Interface);
7
7
  execute(folder: Folder): Promise<void>;
8
8
  }
@@ -2,18 +2,18 @@ import { WebinyError } from "@webiny/error";
2
2
  import { Path } from "../../../utils/Path.js";
3
3
  import { Permissions, ROOT_FOLDER } from "@webiny/shared-aco";
4
4
  class CreateFlpUseCase {
5
- constructor(context){
6
- this.context = context;
5
+ constructor(flpCrud){
6
+ this.flpCrud = flpCrud;
7
7
  }
8
8
  async execute(folder) {
9
9
  try {
10
10
  const { id, type, slug, parentId, permissions } = folder;
11
11
  let parentFlp = null;
12
12
  if (parentId) {
13
- parentFlp = await this.context.aco.flp.get(parentId);
13
+ parentFlp = await this.flpCrud.get(parentId);
14
14
  if (!parentFlp) throw new WebinyError("Parent folder level permission not found. Unable to create a new record in the FLP catalog.", "ERROR_CREATE_FLP_USE_CASE_PARENT_FLP_NOT_FOUND");
15
15
  }
16
- await this.context.aco.flp.create({
16
+ await this.flpCrud.create({
17
17
  id,
18
18
  type,
19
19
  slug,
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/CreateFlp/CreateFlpUseCase.js","sources":["../../../../src/features/flp/CreateFlp/CreateFlpUseCase.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path.js\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { CreateFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types.js\";\nimport type { Folder } from \"~/folder/folder.types.js\";\nimport type { AcoContext } from \"~/types.js\";\n\nexport class CreateFlpUseCase implements UseCaseAbstraction.Interface {\n constructor(private context: AcoContext) {}\n\n async execute(folder: Folder): Promise<void> {\n try {\n const { id, type, slug, parentId, permissions } = folder;\n let parentFlp: IFolderLevelPermission | null = null;\n\n if (parentId) {\n parentFlp = await this.context.aco.flp.get(parentId);\n\n if (!parentFlp) {\n throw new WebinyError(\n \"Parent folder level permission not found. Unable to create a new record in the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_PARENT_FLP_NOT_FOUND\"\n );\n }\n }\n\n await this.context.aco.flp.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while creating FLP\",\n code: \"ERROR_CREATE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"names":["CreateFlpUseCase","context","folder","id","type","slug","parentId","permissions","parentFlp","WebinyError","ROOT_FOLDER","Path","Permissions","error"],"mappings":";;;AAQO,MAAMA;IACT,YAAoBC,OAAmB,CAAE;aAArBA,OAAO,GAAPA;IAAsB;IAE1C,MAAM,QAAQC,MAAc,EAAiB;QACzC,IAAI;YACA,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAGL;YAClD,IAAIM,YAA2C;YAE/C,IAAIF,UAAU;gBACVE,YAAY,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAACF;gBAE3C,IAAI,CAACE,WACD,MAAM,IAAIC,YACN,+FACA;YAGZ;YAEA,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC9BN;gBACAC;gBACAC;gBACA,UAAUC,YAAYI;gBACtB,MAAMC,KAAK,MAAM,CAACN,MAAMG,WAAW;gBACnC,aAAaI,YAAY,MAAM,CAACL,aAAaC;YACjD;QACJ,EAAE,OAAOK,OAAO;YACZ,MAAMJ,YAAY,IAAI,CAACI,OAAO;gBAC1B,SAAS;gBACT,MAAM;YACV;QACJ;IACJ;AACJ"}
1
+ {"version":3,"file":"features/flp/CreateFlp/CreateFlpUseCase.js","sources":["../../../../src/features/flp/CreateFlp/CreateFlpUseCase.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path.js\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { CreateFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types.js\";\nimport type { Folder } from \"~/folder/folder.types.js\";\nimport type { AcoFlpCrud } from \"~/features/folder/shared/abstractions.js\";\n\nexport class CreateFlpUseCase implements UseCaseAbstraction.Interface {\n constructor(private flpCrud: AcoFlpCrud.Interface) {}\n\n async execute(folder: Folder): Promise<void> {\n try {\n const { id, type, slug, parentId, permissions } = folder;\n let parentFlp: IFolderLevelPermission | null = null;\n\n if (parentId) {\n parentFlp = await this.flpCrud.get(parentId);\n\n if (!parentFlp) {\n throw new WebinyError(\n \"Parent folder level permission not found. Unable to create a new record in the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_PARENT_FLP_NOT_FOUND\"\n );\n }\n }\n\n await this.flpCrud.create({\n id,\n type,\n slug,\n parentId: parentId ?? ROOT_FOLDER,\n path: Path.create(slug, parentFlp?.path),\n permissions: Permissions.create(permissions, parentFlp)\n });\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while creating FLP\",\n code: \"ERROR_CREATE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"names":["CreateFlpUseCase","flpCrud","folder","id","type","slug","parentId","permissions","parentFlp","WebinyError","ROOT_FOLDER","Path","Permissions","error"],"mappings":";;;AAQO,MAAMA;IACT,YAAoBC,OAA6B,CAAE;aAA/BA,OAAO,GAAPA;IAAgC;IAEpD,MAAM,QAAQC,MAAc,EAAiB;QACzC,IAAI;YACA,MAAM,EAAEC,EAAE,EAAEC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAGL;YAClD,IAAIM,YAA2C;YAE/C,IAAIF,UAAU;gBACVE,YAAY,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAACF;gBAEnC,IAAI,CAACE,WACD,MAAM,IAAIC,YACN,+FACA;YAGZ;YAEA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACtBN;gBACAC;gBACAC;gBACA,UAAUC,YAAYI;gBACtB,MAAMC,KAAK,MAAM,CAACN,MAAMG,WAAW;gBACnC,aAAaI,YAAY,MAAM,CAACL,aAAaC;YACjD;QACJ,EAAE,OAAOK,OAAO;YACZ,MAAMJ,YAAY,IAAI,CAACI,OAAO;gBAC1B,SAAS;gBACT,MAAM;YACV;QACJ;IACJ;AACJ"}
@@ -1,10 +1,5 @@
1
1
  import type { Container } from "@webiny/di";
2
- import type { AcoContext } from "../../../types.js";
3
- interface LegacyDeps {
4
- context: AcoContext;
5
- }
6
2
  export declare const CreateFlpFeature: {
7
3
  name: string;
8
- register(container: Container, context: LegacyDeps): void;
4
+ register(container: Container): void;
9
5
  };
10
- export {};
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { CreateFlpUseCase } from "./CreateFlpUseCase.js";
3
3
  import { CreateFlpUseCase as external_abstractions_js_CreateFlpUseCase } from "./abstractions.js";
4
+ import { AcoFlpCrud } from "../../folder/shared/abstractions.js";
4
5
  const CreateFlpFeature = createFeature({
5
6
  name: "CreateFlp",
6
- register (container, deps) {
7
- container.registerFactory(external_abstractions_js_CreateFlpUseCase, ()=>new CreateFlpUseCase(deps.context));
7
+ register (container) {
8
+ container.registerFactory(external_abstractions_js_CreateFlpUseCase, ()=>new CreateFlpUseCase(container.resolve(AcoFlpCrud)));
8
9
  }
9
10
  });
10
11
  export { CreateFlpFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/CreateFlp/feature.js","sources":["../../../../src/features/flp/CreateFlp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { CreateFlpUseCase } from \"./CreateFlpUseCase.js\";\nimport { CreateFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { AcoContext } from \"~/types.js\";\n\ninterface LegacyDeps {\n context: AcoContext;\n}\n\nexport const CreateFlpFeature = createFeature({\n name: \"CreateFlp\",\n register(container: Container, deps: LegacyDeps) {\n container.registerFactory(UseCaseAbstraction, () => {\n return new CreateFlpUseCase(deps.context);\n });\n }\n});\n"],"names":["CreateFlpFeature","createFeature","container","deps","UseCaseAbstraction","CreateFlpUseCase"],"mappings":";;;AAUO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAoB,EAAEC,IAAgB;QAC3CD,UAAU,eAAe,CAACE,2CAAoB,IACnC,IAAIC,iBAAiBF,KAAK,OAAO;IAEhD;AACJ"}
1
+ {"version":3,"file":"features/flp/CreateFlp/feature.js","sources":["../../../../src/features/flp/CreateFlp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { CreateFlpUseCase } from \"./CreateFlpUseCase.js\";\nimport { CreateFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AcoFlpCrud } from \"~/features/folder/shared/abstractions.js\";\n\nexport const CreateFlpFeature = createFeature({\n name: \"CreateFlp\",\n register(container: Container) {\n container.registerFactory(UseCaseAbstraction, () => {\n return new CreateFlpUseCase(container.resolve(AcoFlpCrud));\n });\n }\n});\n"],"names":["CreateFlpFeature","createFeature","container","UseCaseAbstraction","CreateFlpUseCase","AcoFlpCrud"],"mappings":";;;;AAMO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,eAAe,CAACC,2CAAoB,IACnC,IAAIC,iBAAiBF,UAAU,OAAO,CAACG;IAEtD;AACJ"}
@@ -1,14 +1,17 @@
1
- import { CreateFlpUseCase } from "../CreateFlp/abstractions.js";
2
1
  import { FolderAfterCreateEventHandler } from "../../../features/folder/CreateFolder/abstractions.js";
3
2
  import type { FolderAfterCreateEvent } from "../../../features/folder/CreateFolder/events.js";
4
3
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
4
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
5
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
5
6
  declare class CreateFlpOnFolderCreatedHandlerImpl implements FolderAfterCreateEventHandler.Interface {
6
- private createFlpUseCase;
7
- private tasks?;
8
- constructor(createFlpUseCase: CreateFlpUseCase.Interface, tasks?: TaskService.Interface | undefined);
7
+ private identityContext;
8
+ private tasks;
9
+ private logger;
10
+ constructor(identityContext: IdentityContext.Interface, tasks: TaskService.Interface, logger: Logger.Interface);
9
11
  handle(event: FolderAfterCreateEvent): Promise<void>;
12
+ private logFailure;
10
13
  }
11
14
  export declare const CreateFlpOnFolderCreatedHandler: typeof CreateFlpOnFolderCreatedHandlerImpl & {
12
- __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/api-core/features/eventPublisher/abstractions.js").DomainEvent<import("~/features/folder/CreateFolder/abstractions.js").FolderAfterCreatePayload>>>;
15
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("~/features/folder/CreateFolder/abstractions.js").FolderAfterCreatePayload>>>;
13
16
  };
14
17
  export {};
@@ -1,35 +1,42 @@
1
- import { CreateFlpUseCase } from "../CreateFlp/abstractions.js";
2
1
  import { FolderAfterCreateEventHandler } from "../../folder/CreateFolder/abstractions.js";
3
2
  import { CREATE_FLP_TASK_ID } from "../../../flp/tasks/index.js";
4
3
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
4
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
5
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
5
6
  class CreateFlpOnFolderCreatedHandlerImpl {
6
- constructor(createFlpUseCase, tasks){
7
- this.createFlpUseCase = createFlpUseCase;
7
+ constructor(identityContext, tasks, logger){
8
+ this.identityContext = identityContext;
8
9
  this.tasks = tasks;
10
+ this.logger = logger;
9
11
  }
10
12
  async handle(event) {
11
13
  const { folder } = event.payload;
12
14
  try {
13
- if (this.tasks) await this.tasks.trigger({
15
+ const result = await this.tasks.trigger({
14
16
  definition: CREATE_FLP_TASK_ID,
15
17
  input: {
16
- folder
18
+ folder,
19
+ notifyIdentityId: this.identityContext.getIdentity()?.id
17
20
  }
18
21
  });
19
- else await this.createFlpUseCase.execute(folder);
20
- } catch {}
22
+ if (result.isFail()) this.logFailure(folder.id, result.error);
23
+ } catch (error) {
24
+ this.logFailure(folder.id, error);
25
+ }
26
+ }
27
+ logFailure(folderId, error) {
28
+ this.logger.error({
29
+ error,
30
+ folderId
31
+ }, "Could not trigger the task that creates the folder's FLP record.");
21
32
  }
22
33
  }
23
34
  const CreateFlpOnFolderCreatedHandler = FolderAfterCreateEventHandler.createImplementation({
24
35
  implementation: CreateFlpOnFolderCreatedHandlerImpl,
25
36
  dependencies: [
26
- CreateFlpUseCase,
27
- [
28
- TaskService,
29
- {
30
- optional: true
31
- }
32
- ]
37
+ IdentityContext,
38
+ TaskService,
39
+ Logger
33
40
  ]
34
41
  });
35
42
  export { CreateFlpOnFolderCreatedHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js","sources":["../../../../src/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.ts"],"sourcesContent":["import { CreateFlpUseCase } from \"../CreateFlp/abstractions.js\";\nimport { FolderAfterCreateEventHandler } from \"~/features/folder/CreateFolder/abstractions.js\";\nimport type { FolderAfterCreateEvent } from \"~/features/folder/CreateFolder/events.js\";\nimport type { ICreateFlpTaskInput } from \"~/types.js\";\nimport { CREATE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\n\nclass CreateFlpOnFolderCreatedHandlerImpl implements FolderAfterCreateEventHandler.Interface {\n constructor(\n private createFlpUseCase: CreateFlpUseCase.Interface,\n private tasks?: TaskService.Interface\n ) {}\n\n async handle(event: FolderAfterCreateEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n if (this.tasks) {\n await this.tasks.trigger<ICreateFlpTaskInput>({\n definition: CREATE_FLP_TASK_ID,\n input: { folder }\n });\n } else {\n await this.createFlpUseCase.execute(folder);\n }\n } catch {\n // Ignore errors\n }\n }\n}\n\nexport const CreateFlpOnFolderCreatedHandler = FolderAfterCreateEventHandler.createImplementation({\n implementation: CreateFlpOnFolderCreatedHandlerImpl,\n dependencies: [CreateFlpUseCase, [TaskService, { optional: true }]]\n});\n"],"names":["CreateFlpOnFolderCreatedHandlerImpl","createFlpUseCase","tasks","event","folder","CREATE_FLP_TASK_ID","CreateFlpOnFolderCreatedHandler","FolderAfterCreateEventHandler","CreateFlpUseCase","TaskService"],"mappings":";;;;AAOA,MAAMA;IACF,YACYC,gBAA4C,EAC5CC,KAA6B,CACvC;aAFUD,gBAAgB,GAAhBA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,OAAOC,KAA6B,EAAiB;QACvD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,IAAI;YACA,IAAI,IAAI,CAAC,KAAK,EACV,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB;gBAC1C,YAAYE;gBACZ,OAAO;oBAAED;gBAAO;YACpB;iBAEA,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAACA;QAE5C,EAAE,OAAM,CAER;IACJ;AACJ;AAEO,MAAME,kCAAkCC,8BAA8B,oBAAoB,CAAC;IAC9F,gBAAgBP;IAChB,cAAc;QAACQ;QAAkB;YAACC;YAAa;gBAAE,UAAU;YAAK;SAAE;KAAC;AACvE"}
1
+ {"version":3,"file":"features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js","sources":["../../../../src/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.ts"],"sourcesContent":["import { FolderAfterCreateEventHandler } from \"~/features/folder/CreateFolder/abstractions.js\";\nimport type { FolderAfterCreateEvent } from \"~/features/folder/CreateFolder/events.js\";\nimport type { ICreateFlpTaskInput } from \"~/types.js\";\nimport { CREATE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\n\n/*\n * Folder reads report permissions from the FLP record, which the task writes later. So the task,\n * not this handler, tells the admin about the new folder, and it needs to know whom to tell.\n */\nclass CreateFlpOnFolderCreatedHandlerImpl implements FolderAfterCreateEventHandler.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private tasks: TaskService.Interface,\n private logger: Logger.Interface\n ) {}\n\n async handle(event: FolderAfterCreateEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n const result = await this.tasks.trigger<ICreateFlpTaskInput>({\n definition: CREATE_FLP_TASK_ID,\n // Nobody to tell when there is no identity, as in some system calls.\n input: { folder, notifyIdentityId: this.identityContext.getIdentity()?.id }\n });\n if (result.isFail()) {\n this.logFailure(folder.id, result.error);\n }\n } catch (error) {\n this.logFailure(folder.id, error);\n }\n }\n\n /*\n * The folder change is already saved, so it stands. But the folder is left without an FLP\n * record, and this log is the only trace of why.\n */\n private logFailure(folderId: string, error: unknown): void {\n this.logger.error(\n { error, folderId },\n \"Could not trigger the task that creates the folder's FLP record.\"\n );\n }\n}\n\nexport const CreateFlpOnFolderCreatedHandler = FolderAfterCreateEventHandler.createImplementation({\n implementation: CreateFlpOnFolderCreatedHandlerImpl,\n dependencies: [IdentityContext, TaskService, Logger]\n});\n"],"names":["CreateFlpOnFolderCreatedHandlerImpl","identityContext","tasks","logger","event","folder","result","CREATE_FLP_TASK_ID","error","folderId","CreateFlpOnFolderCreatedHandler","FolderAfterCreateEventHandler","IdentityContext","TaskService","Logger"],"mappings":";;;;;AAYA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,KAA4B,EAC5BC,MAAwB,CAClC;aAHUF,eAAe,GAAfA;aACAC,KAAK,GAALA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAA6B,EAAiB;QACvD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,IAAI;YACA,MAAME,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB;gBACzD,YAAYC;gBAEZ,OAAO;oBAAEF;oBAAQ,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW,IAAI;gBAAG;YAC9E;YACA,IAAIC,OAAO,MAAM,IACb,IAAI,CAAC,UAAU,CAACD,OAAO,EAAE,EAAEC,OAAO,KAAK;QAE/C,EAAE,OAAOE,OAAO;YACZ,IAAI,CAAC,UAAU,CAACH,OAAO,EAAE,EAAEG;QAC/B;IACJ;IAMQ,WAAWC,QAAgB,EAAED,KAAc,EAAQ;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;YAAEA;YAAOC;QAAS,GAClB;IAER;AACJ;AAEO,MAAMC,kCAAkCC,8BAA8B,oBAAoB,CAAC;IAC9F,gBAAgBX;IAChB,cAAc;QAACY;QAAiBC;QAAaC;KAAO;AACxD"}
@@ -1,8 +1,8 @@
1
1
  import type { DeleteFlpUseCase as UseCaseAbstraction } from "./abstractions.js";
2
2
  import type { Folder } from "../../../folder/folder.types.js";
3
- import type { AcoContext } from "../../../types.js";
3
+ import type { AcoFlpCrud } from "../../../features/folder/shared/abstractions.js";
4
4
  export declare class DeleteFlpUseCase implements UseCaseAbstraction.Interface {
5
- private context;
6
- constructor(context: AcoContext);
5
+ private flpCrud;
6
+ constructor(flpCrud: AcoFlpCrud.Interface);
7
7
  execute(folder: Folder): Promise<void>;
8
8
  }
@@ -1,14 +1,14 @@
1
1
  import { WebinyError } from "@webiny/error";
2
2
  class DeleteFlpUseCase {
3
- constructor(context){
4
- this.context = context;
3
+ constructor(flpCrud){
4
+ this.flpCrud = flpCrud;
5
5
  }
6
6
  async execute(folder) {
7
7
  try {
8
8
  if (!folder) throw new WebinyError("Missing `folder` from the task input, I can't delete the record from the FLP catalog.", "ERROR_DELETE_FLP_USE_CASE_FOLDER_NOT_PROVIDED", {
9
9
  folder
10
10
  });
11
- await this.context.aco.flp.delete(folder.id);
11
+ await this.flpCrud.delete(folder.id);
12
12
  } catch (error) {
13
13
  throw WebinyError.from(error, {
14
14
  message: "Error while deleting FLP",
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/DeleteFlp/DeleteFlpUseCase.js","sources":["../../../../src/features/flp/DeleteFlp/DeleteFlpUseCase.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport type { DeleteFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { Folder } from \"~/folder/folder.types.js\";\nimport type { AcoContext } from \"~/types.js\";\n\nexport class DeleteFlpUseCase implements UseCaseAbstraction.Interface {\n constructor(private context: AcoContext) {}\n\n async execute(folder: Folder): Promise<void> {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder` from the task input, I can't delete the record from the FLP catalog.\",\n \"ERROR_DELETE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n await this.context.aco.flp.delete(folder.id);\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while deleting FLP\",\n code: \"ERROR_DELETE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"names":["DeleteFlpUseCase","context","folder","WebinyError","error"],"mappings":";AAKO,MAAMA;IACT,YAAoBC,OAAmB,CAAE;aAArBA,OAAO,GAAPA;IAAsB;IAE1C,MAAM,QAAQC,MAAc,EAAiB;QACzC,IAAI;YACA,IAAI,CAACA,QACD,MAAM,IAAIC,YACN,yFACA,iDACA;gBAAED;YAAO;YAGjB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAACA,OAAO,EAAE;QAC/C,EAAE,OAAOE,OAAO;YACZ,MAAMD,YAAY,IAAI,CAACC,OAAO;gBAC1B,SAAS;gBACT,MAAM;YACV;QACJ;IACJ;AACJ"}
1
+ {"version":3,"file":"features/flp/DeleteFlp/DeleteFlpUseCase.js","sources":["../../../../src/features/flp/DeleteFlp/DeleteFlpUseCase.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport type { DeleteFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { Folder } from \"~/folder/folder.types.js\";\nimport type { AcoFlpCrud } from \"~/features/folder/shared/abstractions.js\";\n\nexport class DeleteFlpUseCase implements UseCaseAbstraction.Interface {\n constructor(private flpCrud: AcoFlpCrud.Interface) {}\n\n async execute(folder: Folder): Promise<void> {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder` from the task input, I can't delete the record from the FLP catalog.\",\n \"ERROR_DELETE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n await this.flpCrud.delete(folder.id);\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while deleting FLP\",\n code: \"ERROR_DELETE_FLP_USE_CASE\"\n });\n }\n }\n}\n"],"names":["DeleteFlpUseCase","flpCrud","folder","WebinyError","error"],"mappings":";AAKO,MAAMA;IACT,YAAoBC,OAA6B,CAAE;aAA/BA,OAAO,GAAPA;IAAgC;IAEpD,MAAM,QAAQC,MAAc,EAAiB;QACzC,IAAI;YACA,IAAI,CAACA,QACD,MAAM,IAAIC,YACN,yFACA,iDACA;gBAAED;YAAO;YAGjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAACA,OAAO,EAAE;QACvC,EAAE,OAAOE,OAAO;YACZ,MAAMD,YAAY,IAAI,CAACC,OAAO;gBAC1B,SAAS;gBACT,MAAM;YACV;QACJ;IACJ;AACJ"}
@@ -1,10 +1,5 @@
1
1
  import type { Container } from "@webiny/di";
2
- import type { AcoContext } from "../../../types.js";
3
- interface LegacyDeps {
4
- context: AcoContext;
5
- }
6
2
  export declare const DeleteFlpFeature: {
7
3
  name: string;
8
- register(container: Container, context: LegacyDeps): void;
4
+ register(container: Container): void;
9
5
  };
10
- export {};
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { DeleteFlpUseCase } from "./DeleteFlpUseCase.js";
3
3
  import { DeleteFlpUseCase as external_abstractions_js_DeleteFlpUseCase } from "./abstractions.js";
4
+ import { AcoFlpCrud } from "../../folder/shared/abstractions.js";
4
5
  const DeleteFlpFeature = createFeature({
5
6
  name: "DeleteFlp",
6
- register (container, deps) {
7
- container.registerFactory(external_abstractions_js_DeleteFlpUseCase, ()=>new DeleteFlpUseCase(deps.context));
7
+ register (container) {
8
+ container.registerFactory(external_abstractions_js_DeleteFlpUseCase, ()=>new DeleteFlpUseCase(container.resolve(AcoFlpCrud)));
8
9
  }
9
10
  });
10
11
  export { DeleteFlpFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/DeleteFlp/feature.js","sources":["../../../../src/features/flp/DeleteFlp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { DeleteFlpUseCase } from \"./DeleteFlpUseCase.js\";\nimport { DeleteFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { AcoContext } from \"~/types.js\";\n\ninterface LegacyDeps {\n context: AcoContext;\n}\n\nexport const DeleteFlpFeature = createFeature({\n name: \"DeleteFlp\",\n register(container: Container, deps: LegacyDeps) {\n container.registerFactory(UseCaseAbstraction, () => {\n return new DeleteFlpUseCase(deps.context);\n });\n }\n});\n"],"names":["DeleteFlpFeature","createFeature","container","deps","UseCaseAbstraction","DeleteFlpUseCase"],"mappings":";;;AAUO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAoB,EAAEC,IAAgB;QAC3CD,UAAU,eAAe,CAACE,2CAAoB,IACnC,IAAIC,iBAAiBF,KAAK,OAAO;IAEhD;AACJ"}
1
+ {"version":3,"file":"features/flp/DeleteFlp/feature.js","sources":["../../../../src/features/flp/DeleteFlp/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { DeleteFlpUseCase } from \"./DeleteFlpUseCase.js\";\nimport { DeleteFlpUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { AcoFlpCrud } from \"~/features/folder/shared/abstractions.js\";\n\nexport const DeleteFlpFeature = createFeature({\n name: \"DeleteFlp\",\n register(container: Container) {\n container.registerFactory(UseCaseAbstraction, () => {\n return new DeleteFlpUseCase(container.resolve(AcoFlpCrud));\n });\n }\n});\n"],"names":["DeleteFlpFeature","createFeature","container","UseCaseAbstraction","DeleteFlpUseCase","AcoFlpCrud"],"mappings":";;;;AAMO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,eAAe,CAACC,2CAAoB,IACnC,IAAIC,iBAAiBF,UAAU,OAAO,CAACG;IAEtD;AACJ"}
@@ -1,14 +1,15 @@
1
- import { DeleteFlpUseCase } from "../DeleteFlp/abstractions.js";
2
1
  import { FolderAfterDeleteEventHandler } from "../../../features/folder/DeleteFolder/abstractions.js";
3
2
  import type { FolderAfterDeleteEvent } from "../../../features/folder/DeleteFolder/events.js";
4
3
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
4
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
5
5
  declare class DeleteFlpOnFolderDeletedHandlerImpl implements FolderAfterDeleteEventHandler.Interface {
6
- private deleteFlpUseCase;
7
- private tasks?;
8
- constructor(deleteFlpUseCase: DeleteFlpUseCase.Interface, tasks?: TaskService.Interface | undefined);
6
+ private tasks;
7
+ private logger;
8
+ constructor(tasks: TaskService.Interface, logger: Logger.Interface);
9
9
  handle(event: FolderAfterDeleteEvent): Promise<void>;
10
+ private logFailure;
10
11
  }
11
12
  export declare const DeleteFlpOnFolderDeletedHandler: typeof DeleteFlpOnFolderDeletedHandlerImpl & {
12
- __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/api-core/features/eventPublisher/abstractions.js").DomainEvent<import("~/features/folder/DeleteFolder/abstractions.js").FolderAfterDeletePayload>>>;
13
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("~/features/folder/DeleteFolder/abstractions.js").FolderAfterDeletePayload>>>;
13
14
  };
14
15
  export {};
@@ -1,35 +1,38 @@
1
- import { DeleteFlpUseCase } from "../DeleteFlp/abstractions.js";
2
1
  import { FolderAfterDeleteEventHandler } from "../../folder/DeleteFolder/abstractions.js";
3
2
  import { DELETE_FLP_TASK_ID } from "../../../flp/tasks/index.js";
4
3
  import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
4
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
5
5
  class DeleteFlpOnFolderDeletedHandlerImpl {
6
- constructor(deleteFlpUseCase, tasks){
7
- this.deleteFlpUseCase = deleteFlpUseCase;
6
+ constructor(tasks, logger){
8
7
  this.tasks = tasks;
8
+ this.logger = logger;
9
9
  }
10
10
  async handle(event) {
11
11
  const { folder } = event.payload;
12
12
  try {
13
- if (this.tasks) await this.tasks.trigger({
13
+ const result = await this.tasks.trigger({
14
14
  definition: DELETE_FLP_TASK_ID,
15
15
  input: {
16
16
  folder
17
17
  }
18
18
  });
19
- else await this.deleteFlpUseCase.execute(folder);
20
- } catch {}
19
+ if (result.isFail()) this.logFailure(folder.id, result.error);
20
+ } catch (error) {
21
+ this.logFailure(folder.id, error);
22
+ }
23
+ }
24
+ logFailure(folderId, error) {
25
+ this.logger.error({
26
+ error,
27
+ folderId
28
+ }, "Could not trigger the task that deletes the folder's FLP record.");
21
29
  }
22
30
  }
23
31
  const DeleteFlpOnFolderDeletedHandler = FolderAfterDeleteEventHandler.createImplementation({
24
32
  implementation: DeleteFlpOnFolderDeletedHandlerImpl,
25
33
  dependencies: [
26
- DeleteFlpUseCase,
27
- [
28
- TaskService,
29
- {
30
- optional: true
31
- }
32
- ]
34
+ TaskService,
35
+ Logger
33
36
  ]
34
37
  });
35
38
  export { DeleteFlpOnFolderDeletedHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js","sources":["../../../../src/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.ts"],"sourcesContent":["import { DeleteFlpUseCase } from \"../DeleteFlp/abstractions.js\";\nimport { FolderAfterDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderAfterDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport type { IDeleteFlpTaskInput } from \"~/types.js\";\nimport { DELETE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\n\nclass DeleteFlpOnFolderDeletedHandlerImpl implements FolderAfterDeleteEventHandler.Interface {\n constructor(\n private deleteFlpUseCase: DeleteFlpUseCase.Interface,\n private tasks?: TaskService.Interface\n ) {}\n\n async handle(event: FolderAfterDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n if (this.tasks) {\n await this.tasks.trigger<IDeleteFlpTaskInput>({\n definition: DELETE_FLP_TASK_ID,\n input: { folder }\n });\n } else {\n await this.deleteFlpUseCase.execute(folder);\n }\n } catch {\n // Ignore errors\n }\n }\n}\n\nexport const DeleteFlpOnFolderDeletedHandler = FolderAfterDeleteEventHandler.createImplementation({\n implementation: DeleteFlpOnFolderDeletedHandlerImpl,\n dependencies: [DeleteFlpUseCase, [TaskService, { optional: true }]]\n});\n"],"names":["DeleteFlpOnFolderDeletedHandlerImpl","deleteFlpUseCase","tasks","event","folder","DELETE_FLP_TASK_ID","DeleteFlpOnFolderDeletedHandler","FolderAfterDeleteEventHandler","DeleteFlpUseCase","TaskService"],"mappings":";;;;AAOA,MAAMA;IACF,YACYC,gBAA4C,EAC5CC,KAA6B,CACvC;aAFUD,gBAAgB,GAAhBA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,OAAOC,KAA6B,EAAiB;QACvD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,IAAI;YACA,IAAI,IAAI,CAAC,KAAK,EACV,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB;gBAC1C,YAAYE;gBACZ,OAAO;oBAAED;gBAAO;YACpB;iBAEA,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAACA;QAE5C,EAAE,OAAM,CAER;IACJ;AACJ;AAEO,MAAME,kCAAkCC,8BAA8B,oBAAoB,CAAC;IAC9F,gBAAgBP;IAChB,cAAc;QAACQ;QAAkB;YAACC;YAAa;gBAAE,UAAU;YAAK;SAAE;KAAC;AACvE"}
1
+ {"version":3,"file":"features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js","sources":["../../../../src/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.ts"],"sourcesContent":["import { FolderAfterDeleteEventHandler } from \"~/features/folder/DeleteFolder/abstractions.js\";\nimport type { FolderAfterDeleteEvent } from \"~/features/folder/DeleteFolder/events.js\";\nimport type { IDeleteFlpTaskInput } from \"~/types.js\";\nimport { DELETE_FLP_TASK_ID } from \"~/flp/tasks/index.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\n\nclass DeleteFlpOnFolderDeletedHandlerImpl implements FolderAfterDeleteEventHandler.Interface {\n constructor(\n private tasks: TaskService.Interface,\n private logger: Logger.Interface\n ) {}\n\n async handle(event: FolderAfterDeleteEvent): Promise<void> {\n const { folder } = event.payload;\n\n try {\n const result = await this.tasks.trigger<IDeleteFlpTaskInput>({\n definition: DELETE_FLP_TASK_ID,\n input: { folder }\n });\n if (result.isFail()) {\n this.logFailure(folder.id, result.error);\n }\n } catch (error) {\n this.logFailure(folder.id, error);\n }\n }\n\n /*\n * The folder change is already saved, so it stands. But the folder's FLP record is left behind,\n * and this log is the only trace of why.\n */\n private logFailure(folderId: string, error: unknown): void {\n this.logger.error(\n { error, folderId },\n \"Could not trigger the task that deletes the folder's FLP record.\"\n );\n }\n}\n\nexport const DeleteFlpOnFolderDeletedHandler = FolderAfterDeleteEventHandler.createImplementation({\n implementation: DeleteFlpOnFolderDeletedHandlerImpl,\n dependencies: [TaskService, Logger]\n});\n"],"names":["DeleteFlpOnFolderDeletedHandlerImpl","tasks","logger","event","folder","result","DELETE_FLP_TASK_ID","error","folderId","DeleteFlpOnFolderDeletedHandler","FolderAfterDeleteEventHandler","TaskService","Logger"],"mappings":";;;;AAOA,MAAMA;IACF,YACYC,KAA4B,EAC5BC,MAAwB,CAClC;aAFUD,KAAK,GAALA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAA6B,EAAiB;QACvD,MAAM,EAAEC,MAAM,EAAE,GAAGD,MAAM,OAAO;QAEhC,IAAI;YACA,MAAME,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB;gBACzD,YAAYC;gBACZ,OAAO;oBAAEF;gBAAO;YACpB;YACA,IAAIC,OAAO,MAAM,IACb,IAAI,CAAC,UAAU,CAACD,OAAO,EAAE,EAAEC,OAAO,KAAK;QAE/C,EAAE,OAAOE,OAAO;YACZ,IAAI,CAAC,UAAU,CAACH,OAAO,EAAE,EAAEG;QAC/B;IACJ;IAMQ,WAAWC,QAAgB,EAAED,KAAc,EAAQ;QACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;YAAEA;YAAOC;QAAS,GAClB;IAER;AACJ;AAEO,MAAMC,kCAAkCC,8BAA8B,oBAAoB,CAAC;IAC9F,gBAAgBV;IAChB,cAAc;QAACW;QAAaC;KAAO;AACvC"}
@@ -1,5 +1,5 @@
1
1
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
- import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
2
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
3
3
  import { ListUserTeamsUseCase } from "@webiny/api-core/features/users/ListUserTeams/index.js";
4
4
  import { type CanAccessFolderContentParams, type CanAccessFolderParams } from "./useCases/index.js";
5
5
  import { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from "./abstractions.js";
@@ -8,11 +8,11 @@ import { ListFlpsUseCase } from "../../../features/flp/ListFlps/index.js";
8
8
  import { GetFlpUseCase } from "../../../features/flp/GetFlp/index.js";
9
9
  declare class FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {
10
10
  private identityContext;
11
- private wcpContext;
11
+ private featureFlags;
12
12
  private listUserTeamsUseCase;
13
13
  private getFlpUseCase;
14
14
  private listFlpsUseCase;
15
- constructor(identityContext: IdentityContext.Interface, wcpContext: WcpContext.Interface, listUserTeamsUseCase: ListUserTeamsUseCase.Interface, getFlpUseCase: GetFlpUseCase.Interface, listFlpsUseCase: ListFlpsUseCase.Interface);
15
+ constructor(identityContext: IdentityContext.Interface, featureFlags: FeatureFlags.Interface, listUserTeamsUseCase: ListUserTeamsUseCase.Interface, getFlpUseCase: GetFlpUseCase.Interface, listFlpsUseCase: ListFlpsUseCase.Interface);
16
16
  canUseFolderLevelPermissions(enabled?: boolean): boolean;
17
17
  canUseTeams(): boolean;
18
18
  canCreateFolderInRoot(): boolean;
@@ -1,6 +1,6 @@
1
1
  import { createImplementation } from "@webiny/di";
2
2
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
- import { WcpContext } from "@webiny/api-core/features/wcp/WcpContext/index.js";
3
+ import { FeatureFlags } from "@webiny/api-core/features/featureFlags/abstractions.js";
4
4
  import { ListUserTeamsUseCase } from "@webiny/api-core/features/users/ListUserTeams/index.js";
5
5
  import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
6
6
  import { CanAccessFolder, CanAccessFolderContent, CanCreateFolderInRoot, CheckNotInheritedPermissions, GetDefaultPermissions, GetDefaultPermissionsWithTeams } from "./useCases/index.js";
@@ -8,9 +8,9 @@ import { FolderLevelPermissions } from "./abstractions.js";
8
8
  import { ListFlpsUseCase } from "../ListFlps/index.js";
9
9
  import { GetFlpUseCase } from "../GetFlp/index.js";
10
10
  class FolderLevelPermissionsImpl {
11
- constructor(identityContext, wcpContext, listUserTeamsUseCase, getFlpUseCase, listFlpsUseCase){
11
+ constructor(identityContext, featureFlags, listUserTeamsUseCase, getFlpUseCase, listFlpsUseCase){
12
12
  this.identityContext = identityContext;
13
- this.wcpContext = wcpContext;
13
+ this.featureFlags = featureFlags;
14
14
  this.listUserTeamsUseCase = listUserTeamsUseCase;
15
15
  this.getFlpUseCase = getFlpUseCase;
16
16
  this.listFlpsUseCase = listFlpsUseCase;
@@ -20,10 +20,10 @@ class FolderLevelPermissionsImpl {
20
20
  const identity = this.identityContext.getIdentity();
21
21
  if (!identity) return false;
22
22
  if ("admin" !== identity.type) return false;
23
- return this.wcpContext.canUseFolderLevelPermissions();
23
+ return this.featureFlags.get().isEnabled("advancedAccessControlLayer.folderLevelPermissions");
24
24
  }
25
25
  canUseTeams() {
26
- return this.wcpContext.canUseTeams();
26
+ return this.featureFlags.get().isEnabled("advancedAccessControlLayer.teams");
27
27
  }
28
28
  canCreateFolderInRoot() {
29
29
  const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();
@@ -101,7 +101,7 @@ const FolderLevelPermissions_FolderLevelPermissions = createImplementation({
101
101
  implementation: FolderLevelPermissionsImpl,
102
102
  dependencies: [
103
103
  IdentityContext,
104
- WcpContext,
104
+ FeatureFlags,
105
105
  ListUserTeamsUseCase,
106
106
  GetFlpUseCase,
107
107
  ListFlpsUseCase
@@ -1 +1 @@
1
- {"version":3,"file":"features/flp/FolderLevelPermissions/FolderLevelPermissions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/users/ListUserTeams/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private wcpContext: WcpContext.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.wcpContext.canUseFolderLevelPermissions();\n }\n\n public canUseTeams(): boolean {\n return this.wcpContext.canUseTeams();\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n WcpContext,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"names":["FolderLevelPermissionsImpl","identityContext","wcpContext","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","enabled","identity","canCreateFolderInRootUseCase","CanCreateFolderInRoot","permissions","checkNotInheritedPermissionsUseCase","CheckNotInheritedPermissions","params","canAccessFolderUseCase","CanAccessFolder","canUseFlp","authEnabled","canAccessFolderContentUseCase","CanAccessFolderContent","result","NotAuthorizedError","flp","getDefaultPermissionsUseCase","GetDefaultPermissions","getDefaultPermissionsWithTeams","GetDefaultPermissionsWithTeams","flps","Promise","id","FolderLevelPermissions","createImplementation","FolderLevelPermissionsAbstraction","IdentityContext","WcpContext","ListUserTeamsUseCase","GetFlpUseCase","ListFlpsUseCase"],"mappings":"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"}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/FolderLevelPermissions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FeatureFlags } from \"@webiny/api-core/features/featureFlags/abstractions.js\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/users/ListUserTeams/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private featureFlags: FeatureFlags.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.featureFlags\n .get()\n .isEnabled(\"advancedAccessControlLayer.folderLevelPermissions\");\n }\n\n public canUseTeams(): boolean {\n return this.featureFlags.get().isEnabled(\"advancedAccessControlLayer.teams\");\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n FeatureFlags,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"names":["FolderLevelPermissionsImpl","identityContext","featureFlags","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","enabled","identity","canCreateFolderInRootUseCase","CanCreateFolderInRoot","permissions","checkNotInheritedPermissionsUseCase","CheckNotInheritedPermissions","params","canAccessFolderUseCase","CanAccessFolder","canUseFlp","authEnabled","canAccessFolderContentUseCase","CanAccessFolderContent","result","NotAuthorizedError","flp","getDefaultPermissionsUseCase","GetDefaultPermissions","getDefaultPermissionsWithTeams","GetDefaultPermissionsWithTeams","flps","Promise","id","FolderLevelPermissions","createImplementation","FolderLevelPermissionsAbstraction","IdentityContext","FeatureFlags","ListUserTeamsUseCase","GetFlpUseCase","ListFlpsUseCase"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type IFolderLevelPermissions } from "./abstractions.js";
2
+ import type { FolderPermission } from "../../../types.js";
3
+ declare class NoopFolderLevelPermissionsImpl implements IFolderLevelPermissions {
4
+ canUseFolderLevelPermissions(): boolean;
5
+ canUseTeams(): boolean;
6
+ canCreateFolderInRoot(): boolean;
7
+ permissionsIncludeNonInheritedPermissions(): boolean;
8
+ canAccessFolder(): Promise<boolean>;
9
+ canAccessFolderContent(): Promise<boolean>;
10
+ ensureCanAccessFolder(): Promise<void>;
11
+ ensureCanAccessFolderContent(): Promise<void>;
12
+ canManageFolderContent(): Promise<boolean>;
13
+ canManageFolderStructure(): Promise<boolean>;
14
+ canManageFolderPermissions(): Promise<boolean>;
15
+ getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;
16
+ listFolderLevelPermissions(): Promise<Array<{
17
+ id: string;
18
+ permissions: FolderPermission[];
19
+ }>>;
20
+ getFolderLevelPermissions(): Promise<FolderPermission[]>;
21
+ }
22
+ export declare const NoopFolderLevelPermissions: typeof NoopFolderLevelPermissionsImpl & {
23
+ __abstraction: import("@webiny/di").Abstraction<IFolderLevelPermissions>;
24
+ };
25
+ export {};
@@ -0,0 +1,48 @@
1
+ import { FolderLevelPermissions } from "./abstractions.js";
2
+ class NoopFolderLevelPermissionsImpl {
3
+ canUseFolderLevelPermissions() {
4
+ return false;
5
+ }
6
+ canUseTeams() {
7
+ return false;
8
+ }
9
+ canCreateFolderInRoot() {
10
+ return true;
11
+ }
12
+ permissionsIncludeNonInheritedPermissions() {
13
+ return false;
14
+ }
15
+ async canAccessFolder() {
16
+ return true;
17
+ }
18
+ async canAccessFolderContent() {
19
+ return true;
20
+ }
21
+ async ensureCanAccessFolder() {}
22
+ async ensureCanAccessFolderContent() {}
23
+ async canManageFolderContent() {
24
+ return true;
25
+ }
26
+ async canManageFolderStructure() {
27
+ return true;
28
+ }
29
+ async canManageFolderPermissions() {
30
+ return true;
31
+ }
32
+ async getDefaultPermissions(permissions) {
33
+ return permissions;
34
+ }
35
+ async listFolderLevelPermissions() {
36
+ return [];
37
+ }
38
+ async getFolderLevelPermissions() {
39
+ return [];
40
+ }
41
+ }
42
+ const NoopFolderLevelPermissions = FolderLevelPermissions.createImplementation({
43
+ implementation: NoopFolderLevelPermissionsImpl,
44
+ dependencies: []
45
+ });
46
+ export { NoopFolderLevelPermissions };
47
+
48
+ //# sourceMappingURL=NoopFolderLevelPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/NoopFolderLevelPermissions.ts"],"sourcesContent":["import { FolderLevelPermissions, type IFolderLevelPermissions } from \"./abstractions.js\";\nimport type { FolderPermission } from \"~/types.js\";\n\nclass NoopFolderLevelPermissionsImpl implements IFolderLevelPermissions {\n canUseFolderLevelPermissions(): boolean {\n return false;\n }\n\n canUseTeams(): boolean {\n return false;\n }\n\n canCreateFolderInRoot(): boolean {\n return true;\n }\n\n permissionsIncludeNonInheritedPermissions(): boolean {\n return false;\n }\n\n async canAccessFolder(): Promise<boolean> {\n return true;\n }\n\n async canAccessFolderContent(): Promise<boolean> {\n return true;\n }\n\n async ensureCanAccessFolder(): Promise<void> {\n return;\n }\n\n async ensureCanAccessFolderContent(): Promise<void> {\n return;\n }\n\n async canManageFolderContent(): Promise<boolean> {\n return true;\n }\n\n async canManageFolderStructure(): Promise<boolean> {\n return true;\n }\n\n async canManageFolderPermissions(): Promise<boolean> {\n return true;\n }\n\n async getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n return permissions;\n }\n\n async listFolderLevelPermissions(): Promise<\n Array<{ id: string; permissions: FolderPermission[] }>\n > {\n return [];\n }\n\n async getFolderLevelPermissions(): Promise<FolderPermission[]> {\n return [];\n }\n}\n\nexport const NoopFolderLevelPermissions = FolderLevelPermissions.createImplementation({\n implementation: NoopFolderLevelPermissionsImpl,\n dependencies: []\n});\n"],"names":["NoopFolderLevelPermissionsImpl","permissions","NoopFolderLevelPermissions","FolderLevelPermissions"],"mappings":";AAGA,MAAMA;IACF,+BAAwC;QACpC,OAAO;IACX;IAEA,cAAuB;QACnB,OAAO;IACX;IAEA,wBAAiC;QAC7B,OAAO;IACX;IAEA,4CAAqD;QACjD,OAAO;IACX;IAEA,MAAM,kBAAoC;QACtC,OAAO;IACX;IAEA,MAAM,yBAA2C;QAC7C,OAAO;IACX;IAEA,MAAM,wBAAuC,CAE7C;IAEA,MAAM,+BAA8C,CAEpD;IAEA,MAAM,yBAA2C;QAC7C,OAAO;IACX;IAEA,MAAM,2BAA6C;QAC/C,OAAO;IACX;IAEA,MAAM,6BAA+C;QACjD,OAAO;IACX;IAEA,MAAM,sBAAsBC,WAA+B,EAA+B;QACtF,OAAOA;IACX;IAEA,MAAM,6BAEJ;QACE,OAAO,EAAE;IACb;IAEA,MAAM,4BAAyD;QAC3D,OAAO,EAAE;IACb;AACJ;AAEO,MAAMC,6BAA6BC,uBAAuB,oBAAoB,CAAC;IAClF,gBAAgBH;IAChB,cAAc,EAAE;AACpB"}
@@ -1,2 +1,3 @@
1
1
  export { FolderLevelPermissionsFeature } from "./feature.js";
2
2
  export { FolderLevelPermissions } from "./abstractions.js";
3
+ export { NoopFolderLevelPermissions } from "./NoopFolderLevelPermissions.js";
@@ -1,2 +1,3 @@
1
1
  export { FolderLevelPermissionsFeature } from "./feature.js";
2
2
  export { FolderLevelPermissions } from "./abstractions.js";
3
+ export { NoopFolderLevelPermissions } from "./NoopFolderLevelPermissions.js";
@@ -0,0 +1,13 @@
1
+ import { GetFlpUseCase } from "../abstractions.js";
2
+ import { CodeFlpsProvider } from "../../../../features/flp/shared/index.js";
3
+ import type { FolderLevelPermission } from "../../../../flp/flp.types.js";
4
+ declare class GetFlpWithCodeFlpsImpl implements GetFlpUseCase.Interface {
5
+ private codeFlpsProvider;
6
+ private decoratee;
7
+ constructor(codeFlpsProvider: CodeFlpsProvider.Interface, decoratee: GetFlpUseCase.Interface);
8
+ execute(id: string): Promise<FolderLevelPermission | null>;
9
+ }
10
+ export declare const GetFlpWithCodeFlps: typeof GetFlpWithCodeFlpsImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("../abstractions.js").IGetFolderPermission>;
12
+ };
13
+ export {};