@webiny/api-aco 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a4f3e4ea8b

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.
@@ -33,10 +33,9 @@ import { createRegisterExtensionPlugin } from "@webiny/handler";
33
33
  const setupAcoContext = async (context)=>{
34
34
  const { tenancy, security, cms, container } = context;
35
35
  const getModel = container.resolve(GetModelUseCase);
36
- await security.withoutAuthorization(async ()=>{
37
- const folderModel = await getModel.execute(FOLDER_MODEL_ID);
38
- container.registerInstance(FolderModel, folderModel.value);
39
- });
36
+ const folderModelResult = await security.withoutAuthorization(async ()=>await getModel.execute(FOLDER_MODEL_ID));
37
+ if (folderModelResult.isFail()) throw folderModelResult.error;
38
+ container.registerInstance(FolderModel, folderModelResult.value);
40
39
  const getTenant = ()=>tenancy.getCurrentTenant();
41
40
  const flpSo = container.resolve(FlpStorageOperations);
42
41
  const filterSo = createFilterOperations({
@@ -1 +1 @@
1
- {"version":3,"file":"createAcoContext.js","sources":["../src/createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { createFilterOperations } from \"~/filter/filter.so.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport {\n FilterStorageOperations,\n FlpStorageOperations\n} from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport type { AcoStorageOperations } from \"~/types.js\";\n\nconst setupAcoContext = async (context: AcoContext): Promise<void> => {\n const { tenancy, security, cms, container } = context;\n\n const getModel = container.resolve(GetModelUseCase);\n\n await security.withoutAuthorization(async () => {\n const folderModel = await getModel.execute(FOLDER_MODEL_ID);\n container.registerInstance(FolderModelAbstraction, folderModel.value);\n });\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const flpSo = container.resolve(FlpStorageOperations);\n const filterSo = createFilterOperations({ cms, security, container });\n\n const storageOperations: AcoStorageOperations = {\n filter: filterSo,\n flp: flpSo\n };\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(container);\n\n container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n CreateFolderFeature.register(container);\n UpdateFolderFeature.register(container);\n DeleteFolderFeature.register(container);\n GetFolderFeature.register(container);\n ListFoldersFeature.register(container);\n ListFolderLevelPermissionsTargetsFeature.register(container);\n GetFolderHierarchyFeature.register(container);\n GetAncestorsFeature.register(container);\n EnsureFolderIsEmptyFeature.register(container);\n\n CreateFlpFeature.register(container, { context });\n UpdateFlpFeature.register(container, { context });\n DeleteFlpFeature.register(container, { context });\n ListFlpsFeature.register(container, flpCrudMethods);\n GetFlpFeature.register(container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(container);\n UpdateFlpOnFolderUpdatedFeature.register(container);\n DeleteFlpOnFolderDeletedFeature.register(container);\n\n EnsureFolderIsEmptyOnDeleteFeature.register(container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(container);\n\n const folderLevelPermissions = container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(container);\n }\n};\n\nexport const createAcoContext = () => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n });\n\n const acoContextPlugin = new ContextPlugin<AcoContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context);\n });\n });\n\n acoContextPlugin.name = \"aco.createContext\";\n\n return [acoContextPlugin, modelsPlugin];\n};\n"],"names":["setupAcoContext","context","tenancy","security","cms","container","getModel","GetModelUseCase","folderModel","FOLDER_MODEL_ID","FolderModelAbstraction","getTenant","flpSo","FlpStorageOperations","filterSo","createFilterOperations","storageOperations","flpCrudMethods","createFlpCrudMethods","FolderLevelPermissionsFeature","FilterStorageOperations","CreateFolderFeature","UpdateFolderFeature","DeleteFolderFeature","GetFolderFeature","ListFoldersFeature","ListFolderLevelPermissionsTargetsFeature","GetFolderHierarchyFeature","GetAncestorsFeature","EnsureFolderIsEmptyFeature","CreateFlpFeature","UpdateFlpFeature","DeleteFlpFeature","ListFlpsFeature","GetFlpFeature","CreateFlpOnFolderCreatedFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureFolderIsEmptyOnDeleteFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","folderLevelPermissions","FolderLevelPermissions","createFilterCrudMethods","CmsFlpFeature","createAcoContext","modelsPlugin","createRegisterExtensionPlugin","FolderModel","FilterPrivateModel","acoContextPlugin","ContextPlugin","isHeadlessCmsReady"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,kBAAkB,OAAOC;IAC3B,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAE,GAAGJ;IAE9C,MAAMK,WAAWD,UAAU,OAAO,CAACE;IAEnC,MAAMJ,SAAS,oBAAoB,CAAC;QAChC,MAAMK,cAAc,MAAMF,SAAS,OAAO,CAACG;QAC3CJ,UAAU,gBAAgB,CAACK,aAAwBF,YAAY,KAAK;IACxE;IAEA,MAAMG,YAAY,IACPT,QAAQ,gBAAgB;IAGnC,MAAMU,QAAQP,UAAU,OAAO,CAACQ;IAChC,MAAMC,WAAWC,uBAAuB;QAAEX;QAAKD;QAAUE;IAAU;IAEnE,MAAMW,oBAA0C;QAC5C,QAAQF;QACR,KAAKF;IACT;IAEA,MAAMK,iBAAiBC,qBAAqB;QACxCP;QACAK;IACJ;IAEAG,8BAA8B,QAAQ,CAACd;IAEvCA,UAAU,gBAAgB,CAACe,yBAAyBJ,kBAAkB,MAAM;IAE5EK,oBAAoB,QAAQ,CAAChB;IAC7BiB,oBAAoB,QAAQ,CAACjB;IAC7BkB,oBAAoB,QAAQ,CAAClB;IAC7BmB,iBAAiB,QAAQ,CAACnB;IAC1BoB,mBAAmB,QAAQ,CAACpB;IAC5BqB,yCAAyC,QAAQ,CAACrB;IAClDsB,0BAA0B,QAAQ,CAACtB;IACnCuB,oBAAoB,QAAQ,CAACvB;IAC7BwB,2BAA2B,QAAQ,CAACxB;IAEpCyB,iBAAiB,QAAQ,CAACzB,WAAW;QAAEJ;IAAQ;IAC/C8B,iBAAiB,QAAQ,CAAC1B,WAAW;QAAEJ;IAAQ;IAC/C+B,iBAAiB,QAAQ,CAAC3B,WAAW;QAAEJ;IAAQ;IAC/CgC,gBAAgB,QAAQ,CAAC5B,WAAWY;IACpCiB,cAAc,QAAQ,CAAC7B,WAAWY;IAElCkB,gCAAgC,QAAQ,CAAC9B;IACzC+B,gCAAgC,QAAQ,CAAC/B;IACzCgC,gCAAgC,QAAQ,CAAChC;IAEzCiC,mCAAmC,QAAQ,CAACjC;IAC5CkC,uCAAuC,QAAQ,CAAClC;IAEhD,MAAMmC,yBAAyBnC,UAAU,OAAO,CAACoC;IAEjDxC,QAAQ,GAAG,GAAG;QACV,QAAQyC,wBAAwB;YAC5BrC;YACAM;YACAK;YACAwB;QACJ;QACA,KAAKvB;IACT;IAEA,IAAIhB,QAAQ,GAAG,CAAC,4BAA4B,IACxC0C,cAAc,QAAQ,CAACtC;AAE/B;AAEO,MAAMuC,mBAAmB;IAC5B,MAAMC,eAAeC,8BAA8B7C,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAAC8C;QAC3B9C,QAAQ,SAAS,CAAC,QAAQ,CAAC+C;IAC/B;IAEA,MAAMC,mBAAmB,IAAIC,cAA0B,OAAMjD;QACzD,IAAI,CAAE,MAAMkD,mBAAmBlD,UAC3B;QAGJ,MAAMA,QAAQ,SAAS,CAAC,OAAO,CAAC,qBAAqB;YACjD,MAAMD,gBAAgBC;QAC1B;IACJ;IAEAgD,iBAAiB,IAAI,GAAG;IAExB,OAAO;QAACA;QAAkBJ;KAAa;AAC3C"}
1
+ {"version":3,"file":"createAcoContext.js","sources":["../src/createAcoContext.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { createFilterOperations } from \"~/filter/filter.so.js\";\nimport { createFilterCrudMethods } from \"~/filter/filter.crud.js\";\nimport type { AcoContext } from \"~/types.js\";\nimport { createFlpCrudMethods } from \"~/flp/index.js\";\nimport {\n FolderLevelPermissions,\n FolderLevelPermissionsFeature\n} from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { UpdateFolderFeature } from \"~/features/folder/UpdateFolder/index.js\";\nimport { DeleteFolderFeature } from \"~/features/folder/DeleteFolder/index.js\";\nimport { CreateFolderFeature } from \"~/features/folder/CreateFolder/index.js\";\nimport { GetFolderFeature } from \"~/features/folder/GetFolder/index.js\";\nimport { ListFoldersFeature } from \"~/features/folder/ListFolders/index.js\";\nimport { GetFolderHierarchyFeature } from \"~/features/folder/GetFolderHierarchy/index.js\";\nimport { GetAncestorsFeature } from \"~/features/folder/GetAncestors/index.js\";\nimport { UpdateFlpOnFolderUpdatedFeature } from \"~/features/flp/UpdateFlpOnFolderUpdated/index.js\";\nimport { DeleteFlpOnFolderDeletedFeature } from \"~/features/flp/DeleteFlpOnFolderDeleted/index.js\";\nimport { EnsureHcmsFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js\";\nimport { CreateFlpFeature } from \"~/features/flp/CreateFlp/index.js\";\nimport { DeleteFlpFeature } from \"~/features/flp/DeleteFlp/index.js\";\nimport { UpdateFlpFeature } from \"~/features/flp/UpdateFlp/index.js\";\nimport { EnsureFolderIsEmptyOnDeleteFeature } from \"~/features/folder/EnsureFolderIsEmptyOnDelete/index.js\";\nimport {\n FilterStorageOperations,\n FlpStorageOperations\n} from \"~/features/folder/shared/abstractions.js\";\nimport { ListFlpsFeature } from \"~/features/flp/ListFlps/feature.js\";\nimport { GetFlpFeature } from \"~/features/flp/GetFlp/feature.js\";\nimport { ListFolderLevelPermissionsTargetsFeature } from \"~/features/folder/ListFolderLevelPermissionsTargets/feature.js\";\nimport { Tenant } from \"@webiny/api-core/types/tenancy\";\nimport { CmsFlpFeature } from \"~/features/cms/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FolderModel as FolderModelAbstraction } from \"~/domain/folder/abstractions.js\";\nimport { CreateFlpOnFolderCreatedFeature } from \"~/features/flp/CreateFlpOnFolderCreated/index.js\";\nimport { EnsureFolderIsEmptyFeature } from \"~/features/folder/EnsureFolderIsEmpty/feature.js\";\nimport { FOLDER_MODEL_ID, FolderModel } from \"~/domain/folder/folder.model.js\";\nimport { FilterPrivateModel } from \"~/filter/filter.model.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport type { AcoStorageOperations } from \"~/types.js\";\n\nconst setupAcoContext = async (context: AcoContext): Promise<void> => {\n const { tenancy, security, cms, container } = context;\n\n const getModel = container.resolve(GetModelUseCase);\n\n const folderModelResult = await security.withoutAuthorization(async () => {\n return await getModel.execute(FOLDER_MODEL_ID);\n });\n if (folderModelResult.isFail()) {\n throw folderModelResult.error;\n }\n container.registerInstance(FolderModelAbstraction, folderModelResult.value);\n\n const getTenant = (): Tenant => {\n return tenancy.getCurrentTenant();\n };\n\n const flpSo = container.resolve(FlpStorageOperations);\n const filterSo = createFilterOperations({ cms, security, container });\n\n const storageOperations: AcoStorageOperations = {\n filter: filterSo,\n flp: flpSo\n };\n\n const flpCrudMethods = createFlpCrudMethods({\n getTenant,\n storageOperations\n });\n\n FolderLevelPermissionsFeature.register(container);\n\n container.registerInstance(FilterStorageOperations, storageOperations.filter);\n\n CreateFolderFeature.register(container);\n UpdateFolderFeature.register(container);\n DeleteFolderFeature.register(container);\n GetFolderFeature.register(container);\n ListFoldersFeature.register(container);\n ListFolderLevelPermissionsTargetsFeature.register(container);\n GetFolderHierarchyFeature.register(container);\n GetAncestorsFeature.register(container);\n EnsureFolderIsEmptyFeature.register(container);\n\n CreateFlpFeature.register(container, { context });\n UpdateFlpFeature.register(container, { context });\n DeleteFlpFeature.register(container, { context });\n ListFlpsFeature.register(container, flpCrudMethods);\n GetFlpFeature.register(container, flpCrudMethods);\n\n CreateFlpOnFolderCreatedFeature.register(container);\n UpdateFlpOnFolderUpdatedFeature.register(container);\n DeleteFlpOnFolderDeletedFeature.register(container);\n\n EnsureFolderIsEmptyOnDeleteFeature.register(container);\n EnsureHcmsFolderIsEmptyOnDeleteFeature.register(container);\n\n const folderLevelPermissions = container.resolve(FolderLevelPermissions);\n\n context.aco = {\n filter: createFilterCrudMethods({\n container,\n getTenant,\n storageOperations,\n folderLevelPermissions\n }),\n flp: flpCrudMethods\n };\n\n if (context.wcp.canUseFolderLevelPermissions()) {\n CmsFlpFeature.register(container);\n }\n};\n\nexport const createAcoContext = () => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(FolderModel);\n context.container.register(FilterPrivateModel);\n });\n\n const acoContextPlugin = new ContextPlugin<AcoContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.benchmark.measure(\"aco.context.setup\", async () => {\n await setupAcoContext(context);\n });\n });\n\n acoContextPlugin.name = \"aco.createContext\";\n\n return [acoContextPlugin, modelsPlugin];\n};\n"],"names":["setupAcoContext","context","tenancy","security","cms","container","getModel","GetModelUseCase","folderModelResult","FOLDER_MODEL_ID","FolderModelAbstraction","getTenant","flpSo","FlpStorageOperations","filterSo","createFilterOperations","storageOperations","flpCrudMethods","createFlpCrudMethods","FolderLevelPermissionsFeature","FilterStorageOperations","CreateFolderFeature","UpdateFolderFeature","DeleteFolderFeature","GetFolderFeature","ListFoldersFeature","ListFolderLevelPermissionsTargetsFeature","GetFolderHierarchyFeature","GetAncestorsFeature","EnsureFolderIsEmptyFeature","CreateFlpFeature","UpdateFlpFeature","DeleteFlpFeature","ListFlpsFeature","GetFlpFeature","CreateFlpOnFolderCreatedFeature","UpdateFlpOnFolderUpdatedFeature","DeleteFlpOnFolderDeletedFeature","EnsureFolderIsEmptyOnDeleteFeature","EnsureHcmsFolderIsEmptyOnDeleteFeature","folderLevelPermissions","FolderLevelPermissions","createFilterCrudMethods","CmsFlpFeature","createAcoContext","modelsPlugin","createRegisterExtensionPlugin","FolderModel","FilterPrivateModel","acoContextPlugin","ContextPlugin","isHeadlessCmsReady"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,MAAMA,kBAAkB,OAAOC;IAC3B,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,SAAS,EAAE,GAAGJ;IAE9C,MAAMK,WAAWD,UAAU,OAAO,CAACE;IAEnC,MAAMC,oBAAoB,MAAML,SAAS,oBAAoB,CAAC,UACnD,MAAMG,SAAS,OAAO,CAACG;IAElC,IAAID,kBAAkB,MAAM,IACxB,MAAMA,kBAAkB,KAAK;IAEjCH,UAAU,gBAAgB,CAACK,aAAwBF,kBAAkB,KAAK;IAE1E,MAAMG,YAAY,IACPT,QAAQ,gBAAgB;IAGnC,MAAMU,QAAQP,UAAU,OAAO,CAACQ;IAChC,MAAMC,WAAWC,uBAAuB;QAAEX;QAAKD;QAAUE;IAAU;IAEnE,MAAMW,oBAA0C;QAC5C,QAAQF;QACR,KAAKF;IACT;IAEA,MAAMK,iBAAiBC,qBAAqB;QACxCP;QACAK;IACJ;IAEAG,8BAA8B,QAAQ,CAACd;IAEvCA,UAAU,gBAAgB,CAACe,yBAAyBJ,kBAAkB,MAAM;IAE5EK,oBAAoB,QAAQ,CAAChB;IAC7BiB,oBAAoB,QAAQ,CAACjB;IAC7BkB,oBAAoB,QAAQ,CAAClB;IAC7BmB,iBAAiB,QAAQ,CAACnB;IAC1BoB,mBAAmB,QAAQ,CAACpB;IAC5BqB,yCAAyC,QAAQ,CAACrB;IAClDsB,0BAA0B,QAAQ,CAACtB;IACnCuB,oBAAoB,QAAQ,CAACvB;IAC7BwB,2BAA2B,QAAQ,CAACxB;IAEpCyB,iBAAiB,QAAQ,CAACzB,WAAW;QAAEJ;IAAQ;IAC/C8B,iBAAiB,QAAQ,CAAC1B,WAAW;QAAEJ;IAAQ;IAC/C+B,iBAAiB,QAAQ,CAAC3B,WAAW;QAAEJ;IAAQ;IAC/CgC,gBAAgB,QAAQ,CAAC5B,WAAWY;IACpCiB,cAAc,QAAQ,CAAC7B,WAAWY;IAElCkB,gCAAgC,QAAQ,CAAC9B;IACzC+B,gCAAgC,QAAQ,CAAC/B;IACzCgC,gCAAgC,QAAQ,CAAChC;IAEzCiC,mCAAmC,QAAQ,CAACjC;IAC5CkC,uCAAuC,QAAQ,CAAClC;IAEhD,MAAMmC,yBAAyBnC,UAAU,OAAO,CAACoC;IAEjDxC,QAAQ,GAAG,GAAG;QACV,QAAQyC,wBAAwB;YAC5BrC;YACAM;YACAK;YACAwB;QACJ;QACA,KAAKvB;IACT;IAEA,IAAIhB,QAAQ,GAAG,CAAC,4BAA4B,IACxC0C,cAAc,QAAQ,CAACtC;AAE/B;AAEO,MAAMuC,mBAAmB;IAC5B,MAAMC,eAAeC,8BAA8B7C,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAAC8C;QAC3B9C,QAAQ,SAAS,CAAC,QAAQ,CAAC+C;IAC/B;IAEA,MAAMC,mBAAmB,IAAIC,cAA0B,OAAMjD;QACzD,IAAI,CAAE,MAAMkD,mBAAmBlD,UAC3B;QAGJ,MAAMA,QAAQ,SAAS,CAAC,OAAO,CAAC,qBAAqB;YACjD,MAAMD,gBAAgBC;QAC1B;IACJ;IAEAgD,iBAAiB,IAAI,GAAG;IAExB,OAAO;QAACA;QAAkBJ;KAAa;AAC3C"}
@@ -1,12 +1,14 @@
1
1
  import { FolderLevelPermissions } from "../../../features/flp/FolderLevelPermissions/index.js";
2
2
  import { ListFoldersUseCase } from "../../../features/folder/ListFolders/index.js";
3
3
  import { EnsureFolderIsEmpty as Abstraction } from "../../../features/folder/EnsureFolderIsEmpty/abstractions.js";
4
+ import { Logger } from "@webiny/api-core/exports/api/logger.js";
4
5
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
6
  declare class EnsureFolderIsEmptyImpl implements Abstraction.Interface {
6
7
  private identityContext;
7
8
  private folderLevelPermissions;
8
9
  private listFoldersUseCase;
9
- constructor(identityContext: IdentityContext.Interface, folderLevelPermissions: FolderLevelPermissions.Interface, listFoldersUseCase: ListFoldersUseCase.Interface);
10
+ private logger;
11
+ constructor(identityContext: IdentityContext.Interface, folderLevelPermissions: FolderLevelPermissions.Interface, listFoldersUseCase: ListFoldersUseCase.Interface, logger: Logger.Interface);
10
12
  execute(type: string, id: string, hasContentCallback: Abstraction.HasContentCallback): Abstraction.Return;
11
13
  }
12
14
  export declare const EnsureFolderIsEmpty: typeof EnsureFolderIsEmptyImpl & {
@@ -1,14 +1,16 @@
1
1
  import { FolderLevelPermissions } from "../../flp/FolderLevelPermissions/index.js";
2
2
  import { ListFoldersUseCase } from "../ListFolders/index.js";
3
3
  import { EnsureFolderIsEmpty } from "./abstractions.js";
4
+ import { Logger } from "@webiny/api-core/exports/api/logger.js";
4
5
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
6
  import { FolderNotAuthorizedError, FolderNotEmptyError } from "../../../domain/folder/errors.js";
6
7
  import { Result } from "@webiny/feature/api";
7
8
  class EnsureFolderIsEmptyImpl {
8
- constructor(identityContext, folderLevelPermissions, listFoldersUseCase){
9
+ constructor(identityContext, folderLevelPermissions, listFoldersUseCase, logger){
9
10
  this.identityContext = identityContext;
10
11
  this.folderLevelPermissions = folderLevelPermissions;
11
12
  this.listFoldersUseCase = listFoldersUseCase;
13
+ this.logger = logger;
12
14
  }
13
15
  async execute(type, id, hasContentCallback) {
14
16
  const hasFoldersCallback = async ()=>{
@@ -20,7 +22,7 @@ class EnsureFolderIsEmptyImpl {
20
22
  limit: 1
21
23
  });
22
24
  if (result.isFail()) {
23
- console.error(result.error.message);
25
+ this.logger.error(result.error);
24
26
  return true;
25
27
  }
26
28
  const { folders } = result.value;
@@ -51,7 +53,8 @@ const EnsureFolderIsEmpty_EnsureFolderIsEmpty = EnsureFolderIsEmpty.createImplem
51
53
  dependencies: [
52
54
  IdentityContext,
53
55
  FolderLevelPermissions,
54
- ListFoldersUseCase
56
+ ListFoldersUseCase,
57
+ Logger
55
58
  ]
56
59
  });
57
60
  export { EnsureFolderIsEmpty_EnsureFolderIsEmpty as EnsureFolderIsEmpty };
@@ -1 +1 @@
1
- {"version":3,"file":"features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n\n if (result.isFail()) {\n console.error(result.error.message);\n return true;\n }\n\n const { folders } = result.value;\n\n return folders.length > 0;\n };\n\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n\n if (hasFolders || hasContent) {\n return Result.fail(new FolderNotEmptyError());\n }\n\n // Let's also check if there are folders / content that are not visible because of folder permissions.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n // If folder level permissions are not enabled, we can skip this check. This is because\n // in that case, all folders and content are visible to the user.\n return Result.ok();\n }\n\n const [hasInvisibleFolders, hasInvisibleContent] =\n await this.identityContext.withoutAuthorization(async () => {\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n return [hasFolders, hasContent];\n });\n\n // In case there are invisible folders or content, we'll throw a different error.\n // This is to prevent users from deleting folders that contain content they can't see.\n if (hasInvisibleFolders || hasInvisibleContent) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n return Result.ok();\n }\n}\n\nexport const EnsureFolderIsEmpty = Abstraction.createImplementation({\n implementation: EnsureFolderIsEmptyImpl,\n dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase]\n});\n"],"names":["EnsureFolderIsEmptyImpl","identityContext","folderLevelPermissions","listFoldersUseCase","type","id","hasContentCallback","hasFoldersCallback","result","console","folders","hasFolders","hasContent","Promise","Result","FolderNotEmptyError","hasInvisibleFolders","hasInvisibleContent","FolderNotAuthorizedError","EnsureFolderIsEmpty","Abstraction","IdentityContext","FolderLevelPermissions","ListFoldersUseCase"],"mappings":";;;;;;AAOA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,sBAAwD,EACxDC,kBAAgD,CAC1D;aAHUF,eAAe,GAAfA;aACAC,sBAAsB,GAAtBA;aACAC,kBAAkB,GAAlBA;IACT;IAEH,MAAM,QACFC,IAAY,EACZC,EAAU,EACVC,kBAAkD,EAChC;QAClB,MAAMC,qBAAqB;YACvB,MAAMC,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACjD,OAAO;oBACHJ;oBACA,UAAUC;gBACd;gBACA,OAAO;YACX;YAEA,IAAIG,OAAO,MAAM,IAAI;gBACjBC,QAAQ,KAAK,CAACD,OAAO,KAAK,CAAC,OAAO;gBAClC,OAAO;YACX;YAEA,MAAM,EAAEE,OAAO,EAAE,GAAGF,OAAO,KAAK;YAEhC,OAAOE,QAAQ,MAAM,GAAG;QAC5B;QAEA,MAAM,CAACC,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;YAC/CN;YACAD;SACH;QAED,IAAIK,cAAcC,YACd,OAAOE,OAAO,IAAI,CAAC,IAAIC;QAI3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IAGzD,OAAOD,OAAO,EAAE;QAGpB,MAAM,CAACE,qBAAqBC,oBAAoB,GAC5C,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;YAC5C,MAAM,CAACN,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;gBAC/CN;gBACAD;aACH;YACD,OAAO;gBAACK;gBAAYC;aAAW;QACnC;QAIJ,IAAII,uBAAuBC,qBACvB,OAAOH,OAAO,IAAI,CAAC,IAAII;QAG3B,OAAOJ,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMK,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBpB;IAChB,cAAc;QAACqB;QAAiBC;QAAwBC;KAAmB;AAC/E"}
1
+ {"version":3,"file":"features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js","sources":["../../../../src/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.ts"],"sourcesContent":["import { FolderLevelPermissions } from \"~/features/flp/FolderLevelPermissions/index.js\";\nimport { ListFoldersUseCase } from \"~/features/folder/ListFolders/index.js\";\nimport { EnsureFolderIsEmpty as Abstraction } from \"~/features/folder/EnsureFolderIsEmpty/abstractions.js\";\nimport { Logger } from \"@webiny/api-core/exports/api/logger.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { FolderNotAuthorizedError, FolderNotEmptyError } from \"~/domain/folder/errors.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass EnsureFolderIsEmptyImpl implements Abstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private folderLevelPermissions: FolderLevelPermissions.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n async execute(\n type: string,\n id: string,\n hasContentCallback: Abstraction.HasContentCallback\n ): Abstraction.Return {\n const hasFoldersCallback = async () => {\n const result = await this.listFoldersUseCase.execute({\n where: {\n type,\n parentId: id\n },\n limit: 1\n });\n if (result.isFail()) {\n this.logger.error(result.error);\n // Report the folder as non-empty so a failed lookup cannot green-light a delete.\n return true;\n }\n\n const { folders } = result.value;\n\n return folders.length > 0;\n };\n\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n\n if (hasFolders || hasContent) {\n return Result.fail(new FolderNotEmptyError());\n }\n\n // Let's also check if there are folders / content that are not visible because of folder permissions.\n if (!this.folderLevelPermissions.canUseFolderLevelPermissions()) {\n // If folder level permissions are not enabled, we can skip this check. This is because\n // in that case, all folders and content are visible to the user.\n return Result.ok();\n }\n\n const [hasInvisibleFolders, hasInvisibleContent] =\n await this.identityContext.withoutAuthorization(async () => {\n const [hasFolders, hasContent] = await Promise.all([\n hasFoldersCallback(),\n hasContentCallback()\n ]);\n return [hasFolders, hasContent];\n });\n\n // In case there are invisible folders or content, we'll throw a different error.\n // This is to prevent users from deleting folders that contain content they can't see.\n if (hasInvisibleFolders || hasInvisibleContent) {\n return Result.fail(new FolderNotAuthorizedError());\n }\n\n return Result.ok();\n }\n}\n\nexport const EnsureFolderIsEmpty = Abstraction.createImplementation({\n implementation: EnsureFolderIsEmptyImpl,\n dependencies: [IdentityContext, FolderLevelPermissions, ListFoldersUseCase, Logger]\n});\n"],"names":["EnsureFolderIsEmptyImpl","identityContext","folderLevelPermissions","listFoldersUseCase","logger","type","id","hasContentCallback","hasFoldersCallback","result","folders","hasFolders","hasContent","Promise","Result","FolderNotEmptyError","hasInvisibleFolders","hasInvisibleContent","FolderNotAuthorizedError","EnsureFolderIsEmpty","Abstraction","IdentityContext","FolderLevelPermissions","ListFoldersUseCase","Logger"],"mappings":";;;;;;;AAQA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,sBAAwD,EACxDC,kBAAgD,EAChDC,MAAwB,CAClC;aAJUH,eAAe,GAAfA;aACAC,sBAAsB,GAAtBA;aACAC,kBAAkB,GAAlBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,QACFC,IAAY,EACZC,EAAU,EACVC,kBAAkD,EAChC;QAClB,MAAMC,qBAAqB;YACvB,MAAMC,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACjD,OAAO;oBACHJ;oBACA,UAAUC;gBACd;gBACA,OAAO;YACX;YACA,IAAIG,OAAO,MAAM,IAAI;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAACA,OAAO,KAAK;gBAE9B,OAAO;YACX;YAEA,MAAM,EAAEC,OAAO,EAAE,GAAGD,OAAO,KAAK;YAEhC,OAAOC,QAAQ,MAAM,GAAG;QAC5B;QAEA,MAAM,CAACC,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;YAC/CL;YACAD;SACH;QAED,IAAII,cAAcC,YACd,OAAOE,OAAO,IAAI,CAAC,IAAIC;QAI3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,IAGzD,OAAOD,OAAO,EAAE;QAGpB,MAAM,CAACE,qBAAqBC,oBAAoB,GAC5C,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC;YAC5C,MAAM,CAACN,YAAYC,WAAW,GAAG,MAAMC,QAAQ,GAAG,CAAC;gBAC/CL;gBACAD;aACH;YACD,OAAO;gBAACI;gBAAYC;aAAW;QACnC;QAIJ,IAAII,uBAAuBC,qBACvB,OAAOH,OAAO,IAAI,CAAC,IAAII;QAG3B,OAAOJ,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMK,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBpB;IAChB,cAAc;QAACqB;QAAiBC;QAAwBC;QAAoBC;KAAO;AACvF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-aco",
3
- "version": "0.0.0-unstable.9f53ea597d",
3
+ "version": "0.0.0-unstable.a4f3e4ea8b",
4
4
  "type": "module",
5
5
  "keywords": [
6
6
  "aco:base"
@@ -21,27 +21,27 @@
21
21
  ".": "./index.js"
22
22
  },
23
23
  "dependencies": {
24
- "@webiny/api": "0.0.0-unstable.9f53ea597d",
25
- "@webiny/api-core": "0.0.0-unstable.9f53ea597d",
26
- "@webiny/api-headless-cms": "0.0.0-unstable.9f53ea597d",
27
- "@webiny/background-tasks": "0.0.0-unstable.9f53ea597d",
24
+ "@webiny/api": "0.0.0-unstable.a4f3e4ea8b",
25
+ "@webiny/api-core": "0.0.0-unstable.a4f3e4ea8b",
26
+ "@webiny/api-headless-cms": "0.0.0-unstable.a4f3e4ea8b",
27
+ "@webiny/background-tasks": "0.0.0-unstable.a4f3e4ea8b",
28
28
  "@webiny/di": "1.0.2",
29
- "@webiny/error": "0.0.0-unstable.9f53ea597d",
30
- "@webiny/feature": "0.0.0-unstable.9f53ea597d",
31
- "@webiny/handler": "0.0.0-unstable.9f53ea597d",
32
- "@webiny/handler-graphql": "0.0.0-unstable.9f53ea597d",
33
- "@webiny/shared-aco": "0.0.0-unstable.9f53ea597d",
34
- "@webiny/utils": "0.0.0-unstable.9f53ea597d",
35
- "@webiny/validation": "0.0.0-unstable.9f53ea597d",
29
+ "@webiny/error": "0.0.0-unstable.a4f3e4ea8b",
30
+ "@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
31
+ "@webiny/handler": "0.0.0-unstable.a4f3e4ea8b",
32
+ "@webiny/handler-graphql": "0.0.0-unstable.a4f3e4ea8b",
33
+ "@webiny/shared-aco": "0.0.0-unstable.a4f3e4ea8b",
34
+ "@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
35
+ "@webiny/validation": "0.0.0-unstable.a4f3e4ea8b",
36
36
  "lodash": "4.18.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@webiny/api-file-manager": "0.0.0-unstable.9f53ea597d",
40
- "@webiny/build-tools": "0.0.0-unstable.9f53ea597d",
41
- "@webiny/handler-aws": "0.0.0-unstable.9f53ea597d",
42
- "@webiny/plugins": "0.0.0-unstable.9f53ea597d",
43
- "@webiny/project-utils": "0.0.0-unstable.9f53ea597d",
44
- "@webiny/wcp": "0.0.0-unstable.9f53ea597d",
39
+ "@webiny/api-file-manager": "0.0.0-unstable.a4f3e4ea8b",
40
+ "@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
41
+ "@webiny/handler-aws": "0.0.0-unstable.a4f3e4ea8b",
42
+ "@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
43
+ "@webiny/project-utils": "0.0.0-unstable.a4f3e4ea8b",
44
+ "@webiny/wcp": "0.0.0-unstable.a4f3e4ea8b",
45
45
  "graphql": "16.14.2",
46
46
  "rimraf": "6.1.3",
47
47
  "typescript": "7.0.2",