@webiny/api-aco 5.43.0-beta.4 → 5.43.0-beta.5

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.
package/constants.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const ROOT_FOLDER = "root";
1
+ export * from "@webiny/shared-aco";
2
2
  export declare const PB_PAGE_TYPE = "PbPage";
3
3
  export declare const FM_FILE_TYPE = "FmFile";
package/constants.js CHANGED
@@ -3,8 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ROOT_FOLDER = exports.PB_PAGE_TYPE = exports.FM_FILE_TYPE = void 0;
7
- const ROOT_FOLDER = exports.ROOT_FOLDER = "root";
6
+ var _exportNames = {
7
+ PB_PAGE_TYPE: true,
8
+ FM_FILE_TYPE: true
9
+ };
10
+ exports.PB_PAGE_TYPE = exports.FM_FILE_TYPE = void 0;
11
+ var _sharedAco = require("@webiny/shared-aco");
12
+ Object.keys(_sharedAco).forEach(function (key) {
13
+ if (key === "default" || key === "__esModule") return;
14
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
15
+ if (key in exports && exports[key] === _sharedAco[key]) return;
16
+ Object.defineProperty(exports, key, {
17
+ enumerable: true,
18
+ get: function () {
19
+ return _sharedAco[key];
20
+ }
21
+ });
22
+ });
8
23
  const PB_PAGE_TYPE = exports.PB_PAGE_TYPE = "PbPage";
9
24
  const FM_FILE_TYPE = exports.FM_FILE_TYPE = "FmFile";
10
25
 
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ROOT_FOLDER","exports","PB_PAGE_TYPE","FM_FILE_TYPE"],"sources":["constants.ts"],"sourcesContent":["export const ROOT_FOLDER = \"root\";\nexport const PB_PAGE_TYPE = \"PbPage\";\nexport const FM_FILE_TYPE = \"FmFile\";\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,MAAM;AAC1B,MAAME,YAAY,GAAAD,OAAA,CAAAC,YAAA,GAAG,QAAQ;AAC7B,MAAMC,YAAY,GAAAF,OAAA,CAAAE,YAAA,GAAG,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["_sharedAco","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","PB_PAGE_TYPE","FM_FILE_TYPE"],"sources":["constants.ts"],"sourcesContent":["export * from \"@webiny/shared-aco\";\nexport const PB_PAGE_TYPE = \"PbPage\";\nexport const FM_FILE_TYPE = \"FmFile\";\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,UAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,UAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,UAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACO,MAAMS,YAAY,GAAAJ,OAAA,CAAAI,YAAA,GAAG,QAAQ;AAC7B,MAAMC,YAAY,GAAAL,OAAA,CAAAK,YAAA,GAAG,QAAQ","ignoreList":[]}
@@ -1,20 +1,8 @@
1
1
  import { Topic } from "@webiny/pubsub/types";
2
2
  import { ITaskRunParams } from "@webiny/tasks/types";
3
3
  import { type AcoContext, type Folder } from "../types";
4
- export type FolderAccessLevel = "owner" | "viewer" | "editor" | "public" | "no-access";
5
- export interface FolderPermission {
6
- target: string;
7
- level: FolderAccessLevel;
8
- inheritedFrom?: string;
9
- }
10
- export interface FolderLevelPermission {
11
- id: string;
12
- parentId: string;
13
- slug: string;
14
- path: string;
15
- permissions: FolderPermission[];
16
- type: string;
17
- }
4
+ import type { FolderLevelPermission, FolderPermission } from "@webiny/shared-aco/flp/flp.types";
5
+ export * from "@webiny/shared-aco/flp/flp.types";
18
6
  /********
19
7
  * CRUD operations
20
8
  *******/
package/flp/flp.types.js CHANGED
@@ -3,5 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _flp = require("@webiny/shared-aco/flp/flp.types");
7
+ Object.keys(_flp).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _flp[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _flp[key];
14
+ }
15
+ });
16
+ });
6
17
 
7
18
  //# sourceMappingURL=flp.types.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["flp.types.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { ITaskRunParams } from \"@webiny/tasks/types\";\nimport { type AcoContext, type Folder } from \"~/types\";\n\nexport type FolderAccessLevel = \"owner\" | \"viewer\" | \"editor\" | \"public\" | \"no-access\";\n\nexport interface FolderPermission {\n target: string;\n level: FolderAccessLevel;\n inheritedFrom?: string;\n}\n\nexport interface FolderLevelPermission {\n id: string;\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n type: string;\n}\n\n/********\n * CRUD operations\n *******/\n\nexport interface ListFlpsParams {\n where: {\n path_startsWith?: string;\n parentId?: string;\n type: string;\n };\n}\n\nexport type CreateFlpParams = Pick<\n FolderLevelPermission,\n \"id\" | \"type\" | \"permissions\" | \"path\" | \"parentId\" | \"slug\"\n>;\n\nexport interface UpdateFlpParams {\n parentId?: string;\n slug?: string;\n path?: string;\n permissions?: FolderPermission[];\n type?: string;\n}\n\nexport interface OnFlpBeforeCreateTopicParams {\n input: CreateFlpParams;\n}\n\nexport interface OnFlpAfterCreateTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBeforeUpdateTopicParams {\n original: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpAfterUpdateTopicParams {\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpBeforeDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpAfterDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBatchBeforeUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface OnFlpBatchAfterUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsCrud {\n list(params: ListFlpsParams): Promise<FolderLevelPermission[]>;\n get(id: string): Promise<FolderLevelPermission | null>;\n create(params: CreateFlpParams): Promise<FolderLevelPermission>;\n update(id: string, data: UpdateFlpParams): Promise<FolderLevelPermission>;\n delete(id: string): Promise<boolean>;\n batchUpdate(\n items: Array<{ id: string; data: UpdateFlpParams }>\n ): Promise<FolderLevelPermission[]>;\n onFlpBeforeCreate: Topic<OnFlpBeforeCreateTopicParams>;\n onFlpAfterCreate: Topic<OnFlpAfterCreateTopicParams>;\n onFlpBeforeUpdate: Topic<OnFlpBeforeUpdateTopicParams>;\n onFlpAfterUpdate: Topic<OnFlpAfterUpdateTopicParams>;\n onFlpBeforeDelete: Topic<OnFlpBeforeDeleteTopicParams>;\n onFlpAfterDelete: Topic<OnFlpAfterDeleteTopicParams>;\n onFlpBatchBeforeUpdate: Topic<OnFlpBatchBeforeUpdateTopicParams>;\n onFlpBatchAfterUpdate: Topic<OnFlpBatchAfterUpdateTopicParams>;\n}\n\n/********\n * Storage operations\n *******/\n\nexport interface StorageOperationsListFlpsParams {\n where: ListFlpsParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n}\n\nexport interface StorageOperationsGetFlpParams {\n id: string;\n tenant: string;\n locale: string;\n}\n\nexport type StorageOperationsCreateFlpParams = {\n data: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsUpdateFlpParams = {\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsDeleteFlpParams = {\n flp: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport interface StorageOperationsBatchUpdateFlpParams {\n items: Array<{\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsStorageOperations {\n list(params: StorageOperationsListFlpsParams): Promise<FolderLevelPermission[]>;\n get(params: StorageOperationsGetFlpParams): Promise<FolderLevelPermission | null>;\n create(params: StorageOperationsCreateFlpParams): Promise<FolderLevelPermission>;\n update(params: StorageOperationsUpdateFlpParams): Promise<FolderLevelPermission>;\n delete(params: StorageOperationsDeleteFlpParams): Promise<void>;\n batchUpdate(params: StorageOperationsBatchUpdateFlpParams): Promise<FolderLevelPermission[]>;\n}\n\n/********\n * Background Tasks\n *******/\n\nexport interface ICreateFlpTaskInput {\n folder: Folder;\n}\n\nexport type ICreateFlpTaskParams = ITaskRunParams<AcoContext, ICreateFlpTaskInput>;\n\nexport interface IUpdateFlpTaskInput {\n folder: Folder;\n queued?: string[];\n}\n\nexport type IUpdateFlpTaskParams = ITaskRunParams<AcoContext, IUpdateFlpTaskInput>;\n\nexport interface IDeleteFlpTaskInput {\n folder: Folder;\n}\n\nexport type IDeleteFlpTaskParams = ITaskRunParams<AcoContext, IDeleteFlpTaskInput>;\n\nexport interface ISyncFlpTaskInput {\n type?: string;\n folderId?: string;\n}\n\nexport type ISyncFlpTaskParams = ITaskRunParams<AcoContext, ISyncFlpTaskInput>;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":["_flp","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["flp.types.ts"],"sourcesContent":["import { Topic } from \"@webiny/pubsub/types\";\nimport { ITaskRunParams } from \"@webiny/tasks/types\";\nimport { type AcoContext, type Folder } from \"~/types\";\nimport type { FolderLevelPermission, FolderPermission } from \"@webiny/shared-aco/flp/flp.types\";\n\nexport * from \"@webiny/shared-aco/flp/flp.types\";\n\n/********\n * CRUD operations\n *******/\n\nexport interface ListFlpsParams {\n where: {\n path_startsWith?: string;\n parentId?: string;\n type: string;\n };\n}\n\nexport type CreateFlpParams = Pick<\n FolderLevelPermission,\n \"id\" | \"type\" | \"permissions\" | \"path\" | \"parentId\" | \"slug\"\n>;\n\nexport interface UpdateFlpParams {\n parentId?: string;\n slug?: string;\n path?: string;\n permissions?: FolderPermission[];\n type?: string;\n}\n\nexport interface OnFlpBeforeCreateTopicParams {\n input: CreateFlpParams;\n}\n\nexport interface OnFlpAfterCreateTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBeforeUpdateTopicParams {\n original: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpAfterUpdateTopicParams {\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: Record<string, any>;\n}\n\nexport interface OnFlpBeforeDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpAfterDeleteTopicParams {\n flp: FolderLevelPermission;\n}\n\nexport interface OnFlpBatchBeforeUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface OnFlpBatchAfterUpdateTopicParams {\n items: Array<{\n original: FolderLevelPermission;\n flp: FolderLevelPermission;\n input: UpdateFlpParams;\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsCrud {\n list(params: ListFlpsParams): Promise<FolderLevelPermission[]>;\n get(id: string): Promise<FolderLevelPermission | null>;\n create(params: CreateFlpParams): Promise<FolderLevelPermission>;\n update(id: string, data: UpdateFlpParams): Promise<FolderLevelPermission>;\n delete(id: string): Promise<boolean>;\n batchUpdate(\n items: Array<{ id: string; data: UpdateFlpParams }>\n ): Promise<FolderLevelPermission[]>;\n onFlpBeforeCreate: Topic<OnFlpBeforeCreateTopicParams>;\n onFlpAfterCreate: Topic<OnFlpAfterCreateTopicParams>;\n onFlpBeforeUpdate: Topic<OnFlpBeforeUpdateTopicParams>;\n onFlpAfterUpdate: Topic<OnFlpAfterUpdateTopicParams>;\n onFlpBeforeDelete: Topic<OnFlpBeforeDeleteTopicParams>;\n onFlpAfterDelete: Topic<OnFlpAfterDeleteTopicParams>;\n onFlpBatchBeforeUpdate: Topic<OnFlpBatchBeforeUpdateTopicParams>;\n onFlpBatchAfterUpdate: Topic<OnFlpBatchAfterUpdateTopicParams>;\n}\n\n/********\n * Storage operations\n *******/\n\nexport interface StorageOperationsListFlpsParams {\n where: ListFlpsParams[\"where\"] & {\n tenant: string;\n locale: string;\n };\n}\n\nexport interface StorageOperationsGetFlpParams {\n id: string;\n tenant: string;\n locale: string;\n}\n\nexport type StorageOperationsCreateFlpParams = {\n data: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsUpdateFlpParams = {\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n};\n\nexport type StorageOperationsDeleteFlpParams = {\n flp: FolderLevelPermission & {\n tenant: string;\n locale: string;\n };\n};\n\nexport interface StorageOperationsBatchUpdateFlpParams {\n items: Array<{\n original: FolderLevelPermission;\n data: UpdateFlpParams & {\n tenant: string;\n locale: string;\n };\n }>;\n}\n\nexport interface AcoFolderLevelPermissionsStorageOperations {\n list(params: StorageOperationsListFlpsParams): Promise<FolderLevelPermission[]>;\n get(params: StorageOperationsGetFlpParams): Promise<FolderLevelPermission | null>;\n create(params: StorageOperationsCreateFlpParams): Promise<FolderLevelPermission>;\n update(params: StorageOperationsUpdateFlpParams): Promise<FolderLevelPermission>;\n delete(params: StorageOperationsDeleteFlpParams): Promise<void>;\n batchUpdate(params: StorageOperationsBatchUpdateFlpParams): Promise<FolderLevelPermission[]>;\n}\n\n/********\n * Background Tasks\n *******/\n\nexport interface ICreateFlpTaskInput {\n folder: Folder;\n}\n\nexport type ICreateFlpTaskParams = ITaskRunParams<AcoContext, ICreateFlpTaskInput>;\n\nexport interface IUpdateFlpTaskInput {\n folder: Folder;\n queued?: string[];\n}\n\nexport type IUpdateFlpTaskParams = ITaskRunParams<AcoContext, IUpdateFlpTaskInput>;\n\nexport interface IDeleteFlpTaskInput {\n folder: Folder;\n}\n\nexport type IDeleteFlpTaskParams = ITaskRunParams<AcoContext, IDeleteFlpTaskInput>;\n\nexport interface ISyncFlpTaskInput {\n type?: string;\n folderId?: string;\n}\n\nexport type ISyncFlpTaskParams = ITaskRunParams<AcoContext, ISyncFlpTaskInput>;\n"],"mappings":";;;;;AAKA,IAAAA,IAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,IAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,IAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,IAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.CreateFlp = void 0;
7
7
  var _error = require("@webiny/error");
8
8
  var _Path = require("../../utils/Path");
9
- var _Permissions = require("./Permissions");
10
- var _constants = require("../../constants");
9
+ var _sharedAco = require("@webiny/shared-aco");
11
10
  class CreateFlp {
12
11
  constructor(context) {
13
12
  this.context = context;
@@ -35,9 +34,9 @@ class CreateFlp {
35
34
  id,
36
35
  type,
37
36
  slug,
38
- parentId: parentId ?? _constants.ROOT_FOLDER,
37
+ parentId: parentId ?? _sharedAco.ROOT_FOLDER,
39
38
  path: _Path.Path.create(slug, parentFlp?.path),
40
- permissions: _Permissions.Permissions.create(permissions, parentFlp)
39
+ permissions: _sharedAco.Permissions.create(permissions, parentFlp)
41
40
  });
42
41
  } catch (error) {
43
42
  throw _error.WebinyError.from(error, {
@@ -1 +1 @@
1
- {"version":3,"names":["_error","require","_Path","_Permissions","_constants","CreateFlp","constructor","context","execute","folder","WebinyError","id","type","slug","parentId","permissions","parentFlp","aco","flp","get","create","ROOT_FOLDER","path","Path","Permissions","error","from","message","code","exports"],"sources":["CreateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions } from \"./Permissions\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types\";\nimport type { Folder } from \"~/folder/folder.types\";\nimport type { AcoContext } from \"~/types\";\nimport { ROOT_FOLDER } from \"~/constants\";\n\nexport class CreateFlp {\n private context: AcoContext;\n\n constructor(context: AcoContext) {\n this.context = context;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't create a new record into the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\"\n );\n }\n\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"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAIA,IAAAG,UAAA,GAAAH,OAAA;AAEO,MAAMI,SAAS,CAAC;EAGnBC,WAAWA,CAACC,OAAmB,EAAE;IAC7B,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAE;IAC1B,IAAI;MACA,IAAI,CAACA,MAAM,EAAE;QACT,MAAM,IAAIC,kBAAW,CACjB,qEAAqE,EACrE,+CACJ,CAAC;MACL;MAEA,MAAM;QAAEC,EAAE;QAAEC,IAAI;QAAEC,IAAI;QAAEC,QAAQ;QAAEC;MAAY,CAAC,GAAGN,MAAM;MACxD,IAAIO,SAAwC,GAAG,IAAI;MAEnD,IAAIF,QAAQ,EAAE;QACVE,SAAS,GAAG,MAAM,IAAI,CAACT,OAAO,CAACU,GAAG,CAACC,GAAG,CAACC,GAAG,CAACL,QAAQ,CAAC;QAEpD,IAAI,CAACE,SAAS,EAAE;UACZ,MAAM,IAAIN,kBAAW,CACjB,6FAA6F,EAC7F,gDACJ,CAAC;QACL;MACJ;MAEA,MAAM,IAAI,CAACH,OAAO,CAACU,GAAG,CAACC,GAAG,CAACE,MAAM,CAAC;QAC9BT,EAAE;QACFC,IAAI;QACJC,IAAI;QACJC,QAAQ,EAAEA,QAAQ,IAAIO,sBAAW;QACjCC,IAAI,EAAEC,UAAI,CAACH,MAAM,CAACP,IAAI,EAAEG,SAAS,EAAEM,IAAI,CAAC;QACxCP,WAAW,EAAES,wBAAW,CAACJ,MAAM,CAACL,WAAW,EAAEC,SAAS;MAC1D,CAAC,CAAC;IACN,CAAC,CAAC,OAAOS,KAAK,EAAE;MACZ,MAAMf,kBAAW,CAACgB,IAAI,CAACD,KAAK,EAAE;QAC1BE,OAAO,EAAE,0BAA0B;QACnCC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAACC,OAAA,CAAAxB,SAAA,GAAAA,SAAA","ignoreList":[]}
1
+ {"version":3,"names":["_error","require","_Path","_sharedAco","CreateFlp","constructor","context","execute","folder","WebinyError","id","type","slug","parentId","permissions","parentFlp","aco","flp","get","create","ROOT_FOLDER","path","Path","Permissions","error","from","message","code","exports"],"sources":["CreateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { FolderLevelPermission as IFolderLevelPermission } from \"~/flp/flp.types\";\nimport type { Folder } from \"~/folder/folder.types\";\nimport type { AcoContext } from \"~/types\";\n\nexport class CreateFlp {\n private context: AcoContext;\n\n constructor(context: AcoContext) {\n this.context = context;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't create a new record into the FLP catalog.\",\n \"ERROR_CREATE_FLP_USE_CASE_FOLDER_NOT_PROVIDED\"\n );\n }\n\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"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAKO,MAAMG,SAAS,CAAC;EAGnBC,WAAWA,CAACC,OAAmB,EAAE;IAC7B,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAMC,OAAOA,CAACC,MAAc,EAAE;IAC1B,IAAI;MACA,IAAI,CAACA,MAAM,EAAE;QACT,MAAM,IAAIC,kBAAW,CACjB,qEAAqE,EACrE,+CACJ,CAAC;MACL;MAEA,MAAM;QAAEC,EAAE;QAAEC,IAAI;QAAEC,IAAI;QAAEC,QAAQ;QAAEC;MAAY,CAAC,GAAGN,MAAM;MACxD,IAAIO,SAAwC,GAAG,IAAI;MAEnD,IAAIF,QAAQ,EAAE;QACVE,SAAS,GAAG,MAAM,IAAI,CAACT,OAAO,CAACU,GAAG,CAACC,GAAG,CAACC,GAAG,CAACL,QAAQ,CAAC;QAEpD,IAAI,CAACE,SAAS,EAAE;UACZ,MAAM,IAAIN,kBAAW,CACjB,6FAA6F,EAC7F,gDACJ,CAAC;QACL;MACJ;MAEA,MAAM,IAAI,CAACH,OAAO,CAACU,GAAG,CAACC,GAAG,CAACE,MAAM,CAAC;QAC9BT,EAAE;QACFC,IAAI;QACJC,IAAI;QACJC,QAAQ,EAAEA,QAAQ,IAAIO,sBAAW;QACjCC,IAAI,EAAEC,UAAI,CAACH,MAAM,CAACP,IAAI,EAAEG,SAAS,EAAEM,IAAI,CAAC;QACxCP,WAAW,EAAES,sBAAW,CAACJ,MAAM,CAACL,WAAW,EAAEC,SAAS;MAC1D,CAAC,CAAC;IACN,CAAC,CAAC,OAAOS,KAAK,EAAE;MACZ,MAAMf,kBAAW,CAACgB,IAAI,CAACD,KAAK,EAAE;QAC1BE,OAAO,EAAE,0BAA0B;QACnCC,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ;AACJ;AAACC,OAAA,CAAAxB,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.UpdateFlp = void 0;
7
7
  var _error = require("@webiny/error");
8
8
  var _Path = require("../../utils/Path");
9
- var _Permissions = require("./Permissions");
10
- var _constants = require("../../constants");
9
+ var _sharedAco = require("@webiny/shared-aco");
11
10
  var _folder = require("../../folder/folder.model");
12
11
  class UpdateFlp {
13
12
  queued = new Set();
@@ -31,9 +30,9 @@ class UpdateFlp {
31
30
  // Add the root folder to the update collection
32
31
  this.flpsToUpdate.set(folder.id, {
33
32
  slug: folder.slug,
34
- parentId: folder.parentId ?? _constants.ROOT_FOLDER,
33
+ parentId: folder.parentId ?? _sharedAco.ROOT_FOLDER,
35
34
  path: _Path.Path.create(folder.slug, parentFlp?.path),
36
- permissions: _Permissions.Permissions.create(folder.permissions, parentFlp)
35
+ permissions: _sharedAco.Permissions.create(folder.permissions, parentFlp)
37
36
  });
38
37
 
39
38
  // Let's set the FLP as in queue
@@ -81,7 +80,7 @@ class UpdateFlp {
81
80
  slug: flp.slug,
82
81
  parentId: flp.parentId,
83
82
  path: _Path.Path.create(flp.slug, currentParentFlp.path),
84
- permissions: _Permissions.Permissions.create(flp.permissions, currentParentFlp)
83
+ permissions: _sharedAco.Permissions.create(flp.permissions, currentParentFlp)
85
84
  });
86
85
 
87
86
  // Add the FLP to the queue list so we don't fetch it again
@@ -183,9 +182,9 @@ class UpdateFlp {
183
182
  id,
184
183
  type,
185
184
  slug,
186
- parentId: parentId ?? _constants.ROOT_FOLDER,
185
+ parentId: parentId ?? _sharedAco.ROOT_FOLDER,
187
186
  path: _Path.Path.create(slug, parentFlp?.path),
188
- permissions: _Permissions.Permissions.create(permissions, parentFlp)
187
+ permissions: _sharedAco.Permissions.create(permissions, parentFlp)
189
188
  });
190
189
  }
191
190
  return flp;
@@ -1 +1 @@
1
- {"version":3,"names":["_error","require","_Path","_Permissions","_constants","_folder","UpdateFlp","queued","Set","flpsToUpdate","Map","constructor","params","context","isCloseToTimeout","handleTimeout","execute","folder","WebinyError","flp","getFlp","parentFlp","parentId","aco","get","set","id","slug","ROOT_FOLDER","path","Path","create","permissions","Permissions","setQueued","directChildren","listDirectChildren","child","executeBatchUpdate","getQueuedList","collectBranchForUpdate","error","clear","from","message","code","isQueued","parentFlpData","currentParentFlp","children","items","Array","entries","map","data","batchUpdate","folderModel","getFolderModel","item","cms","updateEntry","keys","clearQueuedList","add","has","folders","listAll","where","type","disablePermissions","Promise","all","getModel","FOLDER_MODEL_ID","exports"],"sources":["UpdateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions } from \"./Permissions\";\nimport { ROOT_FOLDER } from \"~/constants\";\nimport type { AcoContext, Folder, FolderLevelPermission, FolderPermission } from \"~/types\";\nimport { FOLDER_MODEL_ID } from \"~/folder/folder.model\";\n\ninterface UpdateFlpParams {\n context: AcoContext;\n queued?: string[];\n isCloseToTimeout?: () => boolean;\n handleTimeout?: (queued: string[]) => void;\n}\n\ninterface FlpUpdateData {\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n}\n\nexport class UpdateFlp {\n private context: AcoContext;\n private readonly isCloseToTimeout?: () => boolean;\n private readonly handleTimeout?: (updated: string[]) => void;\n\n private readonly queued: Set<string> = new Set();\n private readonly flpsToUpdate: Map<string, FlpUpdateData> = new Map();\n\n constructor(params: UpdateFlpParams) {\n this.context = params.context;\n this.queued = new Set(params.queued);\n this.isCloseToTimeout = params.isCloseToTimeout;\n this.handleTimeout = params.handleTimeout;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't update the FLP record.\",\n \"ERROR_UPDATING_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n\n const flp = await this.getFlp(folder);\n const parentFlp = folder.parentId\n ? await this.context.aco.flp.get(folder.parentId)\n : null;\n\n // Add the root folder to the update collection\n this.flpsToUpdate.set(folder.id, {\n slug: folder.slug,\n parentId: folder.parentId ?? ROOT_FOLDER,\n path: Path.create(folder.slug, parentFlp?.path),\n permissions: Permissions.create(folder.permissions, parentFlp)\n });\n\n // Let's set the FLP as in queue\n this.setQueued(flp.id);\n\n // Get direct children and process each branch completely\n const directChildren = await this.listDirectChildren(flp);\n\n for (const child of directChildren) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n await this.collectBranchForUpdate(child, flp);\n }\n\n // Execute batch update\n await this.executeBatchUpdate();\n } catch (error) {\n // Clear the update collection in case of error\n this.flpsToUpdate.clear();\n this.queued.clear();\n throw WebinyError.from(error, {\n message: \"Error while updating FLP\",\n code: \"ERROR_UPDATING_FLP_USE_CASE\"\n });\n }\n }\n\n private async collectBranchForUpdate(\n flp: FolderLevelPermission,\n parentFlp: FolderLevelPermission\n ) {\n if (this.isQueued(flp.id)) {\n return;\n }\n\n // Get the parent's permissions from the update collection if available\n const parentFlpData = this.flpsToUpdate.get(parentFlp.id);\n const currentParentFlp = {\n ...parentFlp,\n ...(parentFlpData && { ...parentFlpData })\n };\n\n // Add the FLP to the update collection with inherited permissions\n this.flpsToUpdate.set(flp.id, {\n slug: flp.slug,\n parentId: flp.parentId,\n path: Path.create(flp.slug, currentParentFlp.path),\n permissions: Permissions.create(flp.permissions, currentParentFlp)\n });\n\n // Add the FLP to the queue list so we don't fetch it again\n this.setQueued(flp.id);\n\n // Process all children of this folder before moving to siblings\n const children = await this.listDirectChildren(flp);\n\n for (const child of children) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n // Pass the current FLP as the parent for the child\n await this.collectBranchForUpdate(child, flp);\n }\n }\n\n private async executeBatchUpdate() {\n try {\n const items = Array.from(this.flpsToUpdate.entries()).map(\n ([id, { slug, parentId, path, permissions }]) => {\n return {\n id,\n data: {\n slug,\n parentId,\n path,\n permissions\n }\n };\n }\n );\n\n await this.context.aco.flp.batchUpdate(items);\n\n // Update all folders with the new path\n const folderModel = await this.getFolderModel();\n for (const item of items) {\n const { id, data } = item;\n // Directly update the folder in CMS storage to bypass any folder update event triggers.\n await this.context.cms.updateEntry(folderModel, id, { path: data.path });\n }\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing batch update of FLPs\",\n code: \"BATCH_UPDATE_FLP_ERROR\",\n data: {\n items: Array.from(this.flpsToUpdate.keys())\n }\n });\n } finally {\n // Clear the update collection after the batch update\n this.flpsToUpdate.clear();\n\n //Let's remove all the updated FLPs ids from the queue cache\n this.clearQueuedList();\n }\n }\n\n private getQueuedList() {\n return Array.from(this.queued);\n }\n\n private setQueued(id: string) {\n this.queued.add(id);\n }\n\n private isQueued(id: string) {\n return this.queued.has(id);\n }\n\n private clearQueuedList() {\n return this.queued.clear();\n }\n\n private async listDirectChildren(flp: FolderLevelPermission): Promise<FolderLevelPermission[]> {\n const [folders] = await this.context.aco.folder.listAll({\n where: {\n type: flp.type,\n parentId: flp.id\n },\n disablePermissions: true\n });\n\n return await Promise.all(folders.map(folder => this.getFlp(folder)));\n }\n\n private async getFlp({ id, type, parentId, slug, permissions }: Folder) {\n const flp = await this.context.aco.flp.get(id);\n\n if (!flp) {\n const parentFlp = parentId ? await this.context.aco.flp.get(parentId) : null;\n\n return 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 }\n\n return flp;\n }\n\n private async getFolderModel() {\n return await this.context.cms.getModel(FOLDER_MODEL_ID);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","require","_Path","_sharedAco","_folder","UpdateFlp","queued","Set","flpsToUpdate","Map","constructor","params","context","isCloseToTimeout","handleTimeout","execute","folder","WebinyError","flp","getFlp","parentFlp","parentId","aco","get","set","id","slug","ROOT_FOLDER","path","Path","create","permissions","Permissions","setQueued","directChildren","listDirectChildren","child","executeBatchUpdate","getQueuedList","collectBranchForUpdate","error","clear","from","message","code","isQueued","parentFlpData","currentParentFlp","children","items","Array","entries","map","data","batchUpdate","folderModel","getFolderModel","item","cms","updateEntry","keys","clearQueuedList","add","has","folders","listAll","where","type","disablePermissions","Promise","all","getModel","FOLDER_MODEL_ID","exports"],"sources":["UpdateFlp.ts"],"sourcesContent":["import { WebinyError } from \"@webiny/error\";\nimport { Path } from \"~/utils/Path\";\nimport { Permissions, ROOT_FOLDER } from \"@webiny/shared-aco\";\nimport type { AcoContext, Folder, FolderLevelPermission, FolderPermission } from \"~/types\";\nimport { FOLDER_MODEL_ID } from \"~/folder/folder.model\";\n\ninterface UpdateFlpParams {\n context: AcoContext;\n queued?: string[];\n isCloseToTimeout?: () => boolean;\n handleTimeout?: (queued: string[]) => void;\n}\n\ninterface FlpUpdateData {\n parentId: string;\n slug: string;\n path: string;\n permissions: FolderPermission[];\n}\n\nexport class UpdateFlp {\n private context: AcoContext;\n private readonly isCloseToTimeout?: () => boolean;\n private readonly handleTimeout?: (updated: string[]) => void;\n\n private readonly queued: Set<string> = new Set();\n private readonly flpsToUpdate: Map<string, FlpUpdateData> = new Map();\n\n constructor(params: UpdateFlpParams) {\n this.context = params.context;\n this.queued = new Set(params.queued);\n this.isCloseToTimeout = params.isCloseToTimeout;\n this.handleTimeout = params.handleTimeout;\n }\n\n async execute(folder: Folder) {\n try {\n if (!folder) {\n throw new WebinyError(\n \"Missing `folder`, I can't update the FLP record.\",\n \"ERROR_UPDATING_FLP_USE_CASE_FOLDER_NOT_PROVIDED\",\n { folder }\n );\n }\n\n const flp = await this.getFlp(folder);\n const parentFlp = folder.parentId\n ? await this.context.aco.flp.get(folder.parentId)\n : null;\n\n // Add the root folder to the update collection\n this.flpsToUpdate.set(folder.id, {\n slug: folder.slug,\n parentId: folder.parentId ?? ROOT_FOLDER,\n path: Path.create(folder.slug, parentFlp?.path),\n permissions: Permissions.create(folder.permissions, parentFlp)\n });\n\n // Let's set the FLP as in queue\n this.setQueued(flp.id);\n\n // Get direct children and process each branch completely\n const directChildren = await this.listDirectChildren(flp);\n\n for (const child of directChildren) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n await this.collectBranchForUpdate(child, flp);\n }\n\n // Execute batch update\n await this.executeBatchUpdate();\n } catch (error) {\n // Clear the update collection in case of error\n this.flpsToUpdate.clear();\n this.queued.clear();\n throw WebinyError.from(error, {\n message: \"Error while updating FLP\",\n code: \"ERROR_UPDATING_FLP_USE_CASE\"\n });\n }\n }\n\n private async collectBranchForUpdate(\n flp: FolderLevelPermission,\n parentFlp: FolderLevelPermission\n ) {\n if (this.isQueued(flp.id)) {\n return;\n }\n\n // Get the parent's permissions from the update collection if available\n const parentFlpData = this.flpsToUpdate.get(parentFlp.id);\n const currentParentFlp = {\n ...parentFlp,\n ...(parentFlpData && { ...parentFlpData })\n };\n\n // Add the FLP to the update collection with inherited permissions\n this.flpsToUpdate.set(flp.id, {\n slug: flp.slug,\n parentId: flp.parentId,\n path: Path.create(flp.slug, currentParentFlp.path),\n permissions: Permissions.create(flp.permissions, currentParentFlp)\n });\n\n // Add the FLP to the queue list so we don't fetch it again\n this.setQueued(flp.id);\n\n // Process all children of this folder before moving to siblings\n const children = await this.listDirectChildren(flp);\n\n for (const child of children) {\n if (this.isCloseToTimeout?.()) {\n await this.executeBatchUpdate();\n this.handleTimeout?.(this.getQueuedList());\n return;\n }\n // Pass the current FLP as the parent for the child\n await this.collectBranchForUpdate(child, flp);\n }\n }\n\n private async executeBatchUpdate() {\n try {\n const items = Array.from(this.flpsToUpdate.entries()).map(\n ([id, { slug, parentId, path, permissions }]) => {\n return {\n id,\n data: {\n slug,\n parentId,\n path,\n permissions\n }\n };\n }\n );\n\n await this.context.aco.flp.batchUpdate(items);\n\n // Update all folders with the new path\n const folderModel = await this.getFolderModel();\n for (const item of items) {\n const { id, data } = item;\n // Directly update the folder in CMS storage to bypass any folder update event triggers.\n await this.context.cms.updateEntry(folderModel, id, { path: data.path });\n }\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while executing batch update of FLPs\",\n code: \"BATCH_UPDATE_FLP_ERROR\",\n data: {\n items: Array.from(this.flpsToUpdate.keys())\n }\n });\n } finally {\n // Clear the update collection after the batch update\n this.flpsToUpdate.clear();\n\n //Let's remove all the updated FLPs ids from the queue cache\n this.clearQueuedList();\n }\n }\n\n private getQueuedList() {\n return Array.from(this.queued);\n }\n\n private setQueued(id: string) {\n this.queued.add(id);\n }\n\n private isQueued(id: string) {\n return this.queued.has(id);\n }\n\n private clearQueuedList() {\n return this.queued.clear();\n }\n\n private async listDirectChildren(flp: FolderLevelPermission): Promise<FolderLevelPermission[]> {\n const [folders] = await this.context.aco.folder.listAll({\n where: {\n type: flp.type,\n parentId: flp.id\n },\n disablePermissions: true\n });\n\n return await Promise.all(folders.map(folder => this.getFlp(folder)));\n }\n\n private async getFlp({ id, type, parentId, slug, permissions }: Folder) {\n const flp = await this.context.aco.flp.get(id);\n\n if (!flp) {\n const parentFlp = parentId ? await this.context.aco.flp.get(parentId) : null;\n\n return 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 }\n\n return flp;\n }\n\n private async getFolderModel() {\n return await this.context.cms.getModel(FOLDER_MODEL_ID);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,7 +6,7 @@ export declare class CreateFolderWithFolderLevelPermissions implements ICreateFo
6
6
  private readonly decoretee;
7
7
  constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: ICreateFolder);
8
8
  execute(params: CreateFolderParams): Promise<{
9
- permissions: import("../../../types").FolderPermission[];
9
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
10
10
  id: string;
11
11
  entryId: string;
12
12
  createdOn: string;
@@ -6,7 +6,7 @@ export declare class GetFolderWithFolderLevelPermissions implements IGetFolder {
6
6
  private readonly decoretee;
7
7
  constructor(folderLevelPermissions: FolderLevelPermissions, decoretee: IGetFolder);
8
8
  execute(params: GetFolderParams): Promise<{
9
- permissions: import("../../../types").FolderPermission[];
9
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
10
10
  id: string;
11
11
  entryId: string;
12
12
  createdOn: string;
@@ -7,7 +7,7 @@ export declare class UpdateFolderWithFolderLevelPermissions implements IUpdateFo
7
7
  private readonly decoretee;
8
8
  constructor(folderLevelPermissions: FolderLevelPermissions, getOperation: AcoFolderStorageOperations["getFolder"], decoretee: IUpdateFolder);
9
9
  execute(id: string, params: UpdateFolderParams): Promise<{
10
- permissions: import("../../../types").FolderPermission[];
10
+ permissions: import("@webiny/shared-aco/flp/flp.types").FolderPermission[];
11
11
  id: string;
12
12
  entryId: string;
13
13
  createdOn: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-aco",
3
- "version": "5.43.0-beta.4",
3
+ "version": "5.43.0-beta.5",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "aco:base"
@@ -22,38 +22,39 @@
22
22
  "directory": "dist"
23
23
  },
24
24
  "dependencies": {
25
- "@webiny/api": "5.43.0-beta.4",
26
- "@webiny/api-authentication": "5.43.0-beta.4",
27
- "@webiny/api-headless-cms": "5.43.0-beta.4",
28
- "@webiny/api-i18n": "5.43.0-beta.4",
29
- "@webiny/api-security": "5.43.0-beta.4",
30
- "@webiny/api-tenancy": "5.43.0-beta.4",
31
- "@webiny/aws-sdk": "5.43.0-beta.4",
32
- "@webiny/db-dynamodb": "5.43.0-beta.4",
33
- "@webiny/error": "5.43.0-beta.4",
34
- "@webiny/handler": "5.43.0-beta.4",
35
- "@webiny/handler-graphql": "5.43.0-beta.4",
36
- "@webiny/pubsub": "5.43.0-beta.4",
37
- "@webiny/tasks": "5.43.0-beta.4",
38
- "@webiny/utils": "5.43.0-beta.4",
39
- "@webiny/validation": "5.43.0-beta.4",
25
+ "@webiny/api": "5.43.0-beta.5",
26
+ "@webiny/api-authentication": "5.43.0-beta.5",
27
+ "@webiny/api-headless-cms": "5.43.0-beta.5",
28
+ "@webiny/api-i18n": "5.43.0-beta.5",
29
+ "@webiny/api-security": "5.43.0-beta.5",
30
+ "@webiny/api-tenancy": "5.43.0-beta.5",
31
+ "@webiny/aws-sdk": "5.43.0-beta.5",
32
+ "@webiny/db-dynamodb": "5.43.0-beta.5",
33
+ "@webiny/error": "5.43.0-beta.5",
34
+ "@webiny/handler": "5.43.0-beta.5",
35
+ "@webiny/handler-graphql": "5.43.0-beta.5",
36
+ "@webiny/pubsub": "5.43.0-beta.5",
37
+ "@webiny/shared-aco": "5.43.0-beta.5",
38
+ "@webiny/tasks": "5.43.0-beta.5",
39
+ "@webiny/utils": "5.43.0-beta.5",
40
+ "@webiny/validation": "5.43.0-beta.5",
40
41
  "lodash": "4.17.21"
41
42
  },
42
43
  "devDependencies": {
43
- "@webiny/api-admin-users": "5.43.0-beta.4",
44
- "@webiny/api-file-manager": "5.43.0-beta.4",
45
- "@webiny/api-i18n-ddb": "5.43.0-beta.4",
46
- "@webiny/api-security-so-ddb": "5.43.0-beta.4",
47
- "@webiny/api-tenancy-so-ddb": "5.43.0-beta.4",
48
- "@webiny/api-wcp": "5.43.0-beta.4",
49
- "@webiny/handler-aws": "5.43.0-beta.4",
50
- "@webiny/plugins": "5.43.0-beta.4",
51
- "@webiny/project-utils": "5.43.0-beta.4",
52
- "@webiny/wcp": "5.43.0-beta.4",
44
+ "@webiny/api-admin-users": "5.43.0-beta.5",
45
+ "@webiny/api-file-manager": "5.43.0-beta.5",
46
+ "@webiny/api-i18n-ddb": "5.43.0-beta.5",
47
+ "@webiny/api-security-so-ddb": "5.43.0-beta.5",
48
+ "@webiny/api-tenancy-so-ddb": "5.43.0-beta.5",
49
+ "@webiny/api-wcp": "5.43.0-beta.5",
50
+ "@webiny/handler-aws": "5.43.0-beta.5",
51
+ "@webiny/plugins": "5.43.0-beta.5",
52
+ "@webiny/project-utils": "5.43.0-beta.5",
53
+ "@webiny/wcp": "5.43.0-beta.5",
53
54
  "graphql": "15.9.0",
54
55
  "prettier": "2.8.8",
55
56
  "rimraf": "6.0.1",
56
57
  "typescript": "5.3.3"
57
58
  },
58
- "gitHead": "e603e8424527889681407f3ebfcdf6fa4dfc3089"
59
+ "gitHead": "4033580d3aaaa66cf5e0006af6926203c89919f2"
59
60
  }
@@ -1,4 +0,0 @@
1
- import type { FolderLevelPermission, FolderPermission } from "../flp.types";
2
- export declare class Permissions {
3
- static create(permissions?: FolderPermission[], parentFlp?: FolderLevelPermission | null): FolderPermission[];
4
- }
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Permissions = void 0;
7
- class Permissions {
8
- static create(permissions, parentFlp) {
9
- const parentFolderPermissions = parentFlp?.permissions || [];
10
- const currentFolderPermissions = permissions?.filter(p => p.inheritedFrom !== `parent:${parentFlp?.id}`) || [];
11
- if (!parentFolderPermissions.length) {
12
- return currentFolderPermissions;
13
- }
14
-
15
- // Merge parent and current folder permissions:
16
- // - current folder permissions take precedence over parent permissions
17
- // - only if parent permission's level is set to `no-access`, then we ignore the current folder permission
18
- const permissionsInheritedFromParentFolder = [];
19
- for (const parentFolderPermission of parentFolderPermissions) {
20
- if (parentFolderPermission.level === "no-access") {
21
- permissionsInheritedFromParentFolder.push({
22
- ...parentFolderPermission,
23
- inheritedFrom: `parent:${parentFlp.id}`
24
- });
25
- continue;
26
- }
27
- const currentFolderHasOverridePermission = currentFolderPermissions.some(permission => permission.target === parentFolderPermission.target);
28
- if (currentFolderHasOverridePermission) {
29
- continue;
30
- }
31
- permissionsInheritedFromParentFolder.push({
32
- ...parentFolderPermission,
33
- inheritedFrom: `parent:${parentFlp.id}`
34
- });
35
- }
36
-
37
- // Add current folder permissions that are not present in the parent folder permissions.
38
- const applicableCurrentFolderPermissions = currentFolderPermissions.filter(permission => {
39
- const alreadyInInheritedPermissions = permissionsInheritedFromParentFolder.some(p => p.target === permission.target);
40
- return !alreadyInInheritedPermissions;
41
- });
42
- return [...applicableCurrentFolderPermissions, ...permissionsInheritedFromParentFolder];
43
- }
44
- }
45
- exports.Permissions = Permissions;
46
-
47
- //# sourceMappingURL=Permissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Permissions","create","permissions","parentFlp","parentFolderPermissions","currentFolderPermissions","filter","p","inheritedFrom","id","length","permissionsInheritedFromParentFolder","parentFolderPermission","level","push","currentFolderHasOverridePermission","some","permission","target","applicableCurrentFolderPermissions","alreadyInInheritedPermissions","exports"],"sources":["Permissions.ts"],"sourcesContent":["import type { FolderLevelPermission, FolderPermission } from \"~/flp/flp.types\";\n\nexport class Permissions {\n public static create(\n permissions?: FolderPermission[],\n parentFlp?: FolderLevelPermission | null\n ): FolderPermission[] {\n const parentFolderPermissions = parentFlp?.permissions || [];\n const currentFolderPermissions =\n permissions?.filter(p => p.inheritedFrom !== `parent:${parentFlp?.id}`) || [];\n\n if (!parentFolderPermissions.length) {\n return currentFolderPermissions;\n }\n\n // Merge parent and current folder permissions:\n // - current folder permissions take precedence over parent permissions\n // - only if parent permission's level is set to `no-access`, then we ignore the current folder permission\n const permissionsInheritedFromParentFolder: FolderPermission[] = [];\n\n for (const parentFolderPermission of parentFolderPermissions) {\n if (parentFolderPermission.level === \"no-access\") {\n permissionsInheritedFromParentFolder.push({\n ...parentFolderPermission,\n inheritedFrom: `parent:${parentFlp!.id}`\n });\n continue;\n }\n\n const currentFolderHasOverridePermission = currentFolderPermissions.some(\n permission => permission.target === parentFolderPermission.target\n );\n\n if (currentFolderHasOverridePermission) {\n continue;\n }\n\n permissionsInheritedFromParentFolder.push({\n ...parentFolderPermission,\n inheritedFrom: `parent:${parentFlp!.id}`\n });\n }\n\n // Add current folder permissions that are not present in the parent folder permissions.\n const applicableCurrentFolderPermissions = currentFolderPermissions.filter(permission => {\n const alreadyInInheritedPermissions = permissionsInheritedFromParentFolder.some(\n p => p.target === permission.target\n );\n\n return !alreadyInInheritedPermissions;\n });\n\n return [...applicableCurrentFolderPermissions, ...permissionsInheritedFromParentFolder];\n }\n}\n"],"mappings":";;;;;;AAEO,MAAMA,WAAW,CAAC;EACrB,OAAcC,MAAMA,CAChBC,WAAgC,EAChCC,SAAwC,EACtB;IAClB,MAAMC,uBAAuB,GAAGD,SAAS,EAAED,WAAW,IAAI,EAAE;IAC5D,MAAMG,wBAAwB,GAC1BH,WAAW,EAAEI,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACC,aAAa,KAAK,UAAUL,SAAS,EAAEM,EAAE,EAAE,CAAC,IAAI,EAAE;IAEjF,IAAI,CAACL,uBAAuB,CAACM,MAAM,EAAE;MACjC,OAAOL,wBAAwB;IACnC;;IAEA;IACA;IACA;IACA,MAAMM,oCAAwD,GAAG,EAAE;IAEnE,KAAK,MAAMC,sBAAsB,IAAIR,uBAAuB,EAAE;MAC1D,IAAIQ,sBAAsB,CAACC,KAAK,KAAK,WAAW,EAAE;QAC9CF,oCAAoC,CAACG,IAAI,CAAC;UACtC,GAAGF,sBAAsB;UACzBJ,aAAa,EAAE,UAAUL,SAAS,CAAEM,EAAE;QAC1C,CAAC,CAAC;QACF;MACJ;MAEA,MAAMM,kCAAkC,GAAGV,wBAAwB,CAACW,IAAI,CACpEC,UAAU,IAAIA,UAAU,CAACC,MAAM,KAAKN,sBAAsB,CAACM,MAC/D,CAAC;MAED,IAAIH,kCAAkC,EAAE;QACpC;MACJ;MAEAJ,oCAAoC,CAACG,IAAI,CAAC;QACtC,GAAGF,sBAAsB;QACzBJ,aAAa,EAAE,UAAUL,SAAS,CAAEM,EAAE;MAC1C,CAAC,CAAC;IACN;;IAEA;IACA,MAAMU,kCAAkC,GAAGd,wBAAwB,CAACC,MAAM,CAACW,UAAU,IAAI;MACrF,MAAMG,6BAA6B,GAAGT,oCAAoC,CAACK,IAAI,CAC3ET,CAAC,IAAIA,CAAC,CAACW,MAAM,KAAKD,UAAU,CAACC,MACjC,CAAC;MAED,OAAO,CAACE,6BAA6B;IACzC,CAAC,CAAC;IAEF,OAAO,CAAC,GAAGD,kCAAkC,EAAE,GAAGR,oCAAoC,CAAC;EAC3F;AACJ;AAACU,OAAA,CAAArB,WAAA,GAAAA,WAAA","ignoreList":[]}