@webiny/api-website-builder 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf

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 (121) hide show
  1. package/domain/page/EntryToPageMapper.js +2 -1
  2. package/domain/page/EntryToPageMapper.js.map +1 -1
  3. package/domain/page/abstractions.d.ts +3 -2
  4. package/domain/page/abstractions.js.map +1 -1
  5. package/domain/permissions.d.ts +125 -0
  6. package/domain/permissions.js +33 -0
  7. package/domain/permissions.js.map +1 -0
  8. package/features/installer/ApiKeyInstaller.js +4 -1
  9. package/features/installer/ApiKeyInstaller.js.map +1 -1
  10. package/features/pages/CreatePage/CreatePageUseCase.d.ts +3 -1
  11. package/features/pages/CreatePage/CreatePageUseCase.js +10 -2
  12. package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
  13. package/features/pages/CreatePage/abstractions.d.ts +2 -1
  14. package/features/pages/CreatePage/abstractions.js.map +1 -1
  15. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.d.ts +5 -1
  16. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +18 -2
  17. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
  18. package/features/pages/CreatePageRevisionFrom/abstractions.d.ts +2 -1
  19. package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
  20. package/features/pages/DeletePage/DeletePageUseCase.d.ts +3 -1
  21. package/features/pages/DeletePage/DeletePageUseCase.js +10 -3
  22. package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
  23. package/features/pages/DeletePage/abstractions.d.ts +2 -1
  24. package/features/pages/DeletePage/abstractions.js.map +1 -1
  25. package/features/pages/DuplicatePage/DuplicatePageUseCase.d.ts +3 -1
  26. package/features/pages/DuplicatePage/DuplicatePageUseCase.js +10 -2
  27. package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
  28. package/features/pages/DuplicatePage/abstractions.d.ts +2 -1
  29. package/features/pages/DuplicatePage/abstractions.js.map +1 -1
  30. package/features/pages/GetPageById/GetPageByIdUseCase.d.ts +3 -1
  31. package/features/pages/GetPageById/GetPageByIdUseCase.js +19 -3
  32. package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
  33. package/features/pages/GetPageById/abstractions.d.ts +2 -1
  34. package/features/pages/GetPageById/abstractions.js.map +1 -1
  35. package/features/pages/GetPageByPath/GetPageByPathUseCase.d.ts +3 -1
  36. package/features/pages/GetPageByPath/GetPageByPathUseCase.js +19 -3
  37. package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
  38. package/features/pages/GetPageByPath/abstractions.d.ts +2 -1
  39. package/features/pages/GetPageByPath/abstractions.js.map +1 -1
  40. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.d.ts +3 -1
  41. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +22 -3
  42. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
  43. package/features/pages/GetPageRevisions/abstractions.d.ts +2 -1
  44. package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
  45. package/features/pages/ListPages/ListPagesRepository.d.ts +5 -1
  46. package/features/pages/ListPages/ListPagesRepository.js +14 -4
  47. package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
  48. package/features/pages/ListPages/ListPagesUseCase.d.ts +5 -1
  49. package/features/pages/ListPages/ListPagesUseCase.js +24 -4
  50. package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
  51. package/features/pages/ListPages/abstractions.d.ts +2 -1
  52. package/features/pages/ListPages/abstractions.js.map +1 -1
  53. package/features/pages/MovePage/MovePageUseCase.d.ts +3 -1
  54. package/features/pages/MovePage/MovePageUseCase.js +14 -2
  55. package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
  56. package/features/pages/MovePage/abstractions.d.ts +2 -1
  57. package/features/pages/MovePage/abstractions.js.map +1 -1
  58. package/features/pages/PublishPage/PublishPageUseCase.d.ts +3 -1
  59. package/features/pages/PublishPage/PublishPageUseCase.js +14 -2
  60. package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
  61. package/features/pages/PublishPage/abstractions.d.ts +2 -1
  62. package/features/pages/PublishPage/abstractions.js.map +1 -1
  63. package/features/pages/UnpublishPage/UnpublishPageUseCase.d.ts +3 -1
  64. package/features/pages/UnpublishPage/UnpublishPageUseCase.js +14 -2
  65. package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
  66. package/features/pages/UnpublishPage/abstractions.d.ts +2 -1
  67. package/features/pages/UnpublishPage/abstractions.js.map +1 -1
  68. package/features/pages/UpdatePage/UpdatePageUseCase.d.ts +3 -1
  69. package/features/pages/UpdatePage/UpdatePageUseCase.js +14 -2
  70. package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
  71. package/features/pages/UpdatePage/abstractions.d.ts +5 -5
  72. package/features/pages/UpdatePage/abstractions.js.map +1 -1
  73. package/features/redirects/CreateRedirect/CreateRedirectUseCase.d.ts +3 -1
  74. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +10 -2
  75. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
  76. package/features/redirects/CreateRedirect/abstractions.d.ts +2 -1
  77. package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
  78. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.d.ts +3 -1
  79. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +10 -3
  80. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
  81. package/features/redirects/DeleteRedirect/abstractions.d.ts +2 -1
  82. package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
  83. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.d.ts +3 -1
  84. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +10 -3
  85. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
  86. package/features/redirects/GetActiveRedirects/abstractions.d.ts +2 -1
  87. package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
  88. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.d.ts +3 -1
  89. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +19 -4
  90. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
  91. package/features/redirects/GetRedirectById/abstractions.d.ts +2 -1
  92. package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
  93. package/features/redirects/ListRedirects/ListRedirectsUseCase.d.ts +5 -1
  94. package/features/redirects/ListRedirects/ListRedirectsUseCase.js +23 -4
  95. package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
  96. package/features/redirects/ListRedirects/abstractions.d.ts +3 -1
  97. package/features/redirects/ListRedirects/abstractions.js.map +1 -1
  98. package/features/redirects/MoveRedirect/MoveRedirectUseCase.d.ts +3 -1
  99. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +14 -2
  100. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
  101. package/features/redirects/MoveRedirect/abstractions.d.ts +2 -1
  102. package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
  103. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.d.ts +3 -1
  104. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +14 -2
  105. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
  106. package/features/redirects/UpdateRedirect/abstractions.d.ts +2 -1
  107. package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
  108. package/features/tenantManager/TenantModelExtension.js +5 -5
  109. package/features/tenantManager/TenantModelExtension.js.map +1 -1
  110. package/graphql/pages/pages.typeDefs.d.ts +1 -1
  111. package/graphql/pages/pages.typeDefs.js +6 -0
  112. package/graphql/pages/pages.typeDefs.js.map +1 -1
  113. package/index.js +4 -4
  114. package/index.js.map +1 -1
  115. package/package.json +19 -20
  116. package/features/pages/PagePermissions/feature.d.ts +0 -1
  117. package/features/pages/PagePermissions/feature.js +0 -53
  118. package/features/pages/PagePermissions/feature.js.map +0 -1
  119. package/features/redirects/RedirectPermissions/feature.d.ts +0 -1
  120. package/features/redirects/RedirectPermissions/feature.js +0 -45
  121. package/features/redirects/RedirectPermissions/feature.js.map +0 -1
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { DuplicatePageUseCase as UseCaseAbstraction, DuplicatePageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class DuplicatePageUseCaseImpl implements UseCaseAbstraction.Interface {
6
+ private permissions;
5
7
  private eventPublisher;
6
8
  private getPageById;
7
9
  private repository;
8
- constructor(eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: DuplicatePageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: DuplicatePageRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const DuplicatePageUseCase: import("@webiny/di").Implementation<typeof DuplicatePageUseCaseImpl>;
@@ -3,13 +3,21 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { DuplicatePageUseCase as UseCaseAbstraction, DuplicatePageRepository } from "./abstractions.js";
4
4
  import { PageBeforeDuplicateEvent, PageAfterDuplicateEvent } from "./events.js";
5
5
  import { GetPageByIdUseCase } from "../GetPageById/index.js";
6
+ import { WbPermissions } from "../../../domain/permissions.js";
7
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
6
8
  class DuplicatePageUseCaseImpl {
7
- constructor(eventPublisher, getPageById, repository) {
9
+ constructor(permissions, eventPublisher, getPageById, repository) {
10
+ this.permissions = permissions;
8
11
  this.eventPublisher = eventPublisher;
9
12
  this.getPageById = getPageById;
10
13
  this.repository = repository;
11
14
  }
12
15
  async execute(params) {
16
+ const hasPermission = await this.permissions.canCreate("page");
17
+ if (!hasPermission) {
18
+ return Result.fail(new PageNotAuthorizedError());
19
+ }
20
+
13
21
  // Get the original page for events
14
22
  const getResult = await this.getPageById.execute(params.id);
15
23
  if (getResult.isFail()) {
@@ -41,7 +49,7 @@ class DuplicatePageUseCaseImpl {
41
49
  export const DuplicatePageUseCase = createImplementation({
42
50
  abstraction: UseCaseAbstraction,
43
51
  implementation: DuplicatePageUseCaseImpl,
44
- dependencies: [EventPublisher, GetPageByIdUseCase, DuplicatePageRepository]
52
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, DuplicatePageRepository]
45
53
  });
46
54
 
47
55
  //# sourceMappingURL=DuplicatePageUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","createImplementation","EventPublisher","DuplicatePageUseCase","UseCaseAbstraction","DuplicatePageRepository","PageBeforeDuplicateEvent","PageAfterDuplicateEvent","GetPageByIdUseCase","DuplicatePageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","original","value","beforeEvent","publish","result","afterEvent","page","ok","abstraction","implementation","dependencies"],"sources":["DuplicatePageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n DuplicatePageUseCase as UseCaseAbstraction,\n DuplicatePageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeDuplicateEvent, PageAfterDuplicateEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass DuplicatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: DuplicatePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the original page for events\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before duplicate event\n const beforeEvent = new PageBeforeDuplicateEvent({\n original\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the duplicate operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after duplicate event\n const afterEvent = new PageAfterDuplicateEvent({\n original,\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const DuplicatePageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DuplicatePageUseCaseImpl,\n dependencies: [EventPublisher, GetPageByIdUseCase, DuplicatePageRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,wBAAwB,EAAEC,uBAAuB;AAC1D,SAASC,kBAAkB;AAE3B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA6C,EACvD;IAAA,KAHUF,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACE,OAAO,CAACC,MAAM,CAACE,EAAE,CAAC;IAE3D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,QAAQ,GAAGH,SAAS,CAACI,KAAK;;IAEhC;IACA,MAAMC,WAAW,GAAG,IAAIf,wBAAwB,CAAC;MAC7Ca;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACR,cAAc,CAACW,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACV,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIQ,MAAM,CAACL,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOK,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIjB,uBAAuB,CAAC;MAC3CY,QAAQ;MACRM,IAAI,EAAEF,MAAM,CAACH;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACT,cAAc,CAACW,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOxB,MAAM,CAAC0B,EAAE,CAACH,MAAM,CAACH,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMjB,oBAAoB,GAAGF,oBAAoB,CAAC;EACrD0B,WAAW,EAAEvB,kBAAkB;EAC/BwB,cAAc,EAAEnB,wBAAwB;EACxCoB,YAAY,EAAE,CAAC3B,cAAc,EAAEM,kBAAkB,EAAEH,uBAAuB;AAC9E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","createImplementation","EventPublisher","DuplicatePageUseCase","UseCaseAbstraction","DuplicatePageRepository","PageBeforeDuplicateEvent","PageAfterDuplicateEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","DuplicatePageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canCreate","fail","getResult","id","isFail","original","value","beforeEvent","publish","result","afterEvent","page","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["DuplicatePageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n DuplicatePageUseCase as UseCaseAbstraction,\n DuplicatePageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeDuplicateEvent, PageAfterDuplicateEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass DuplicatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: DuplicatePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canCreate(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the original page for events\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before duplicate event\n const beforeEvent = new PageBeforeDuplicateEvent({\n original\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the duplicate operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after duplicate event\n const afterEvent = new PageAfterDuplicateEvent({\n original,\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const DuplicatePageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DuplicatePageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n DuplicatePageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,wBAAwB,EAAEC,uBAAuB;AAC1D,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA6C,EACvD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,SAAS,CAAC,MAAM,CAAC;IAC9D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOnB,MAAM,CAACqB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMY,SAAS,GAAG,MAAM,IAAI,CAACP,WAAW,CAACE,OAAO,CAACC,MAAM,CAACK,EAAE,CAAC;IAE3D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,QAAQ,GAAGH,SAAS,CAACI,KAAK;;IAEhC;IACA,MAAMC,WAAW,GAAG,IAAIrB,wBAAwB,CAAC;MAC7CmB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACX,cAAc,CAACc,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACb,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIW,MAAM,CAACL,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOK,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIvB,uBAAuB,CAAC;MAC3CkB,QAAQ;MACRM,IAAI,EAAEF,MAAM,CAACH;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACc,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO9B,MAAM,CAACgC,EAAE,CAACH,MAAM,CAACH,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,oBAAoB,GAAGF,oBAAoB,CAAC;EACrDgC,WAAW,EAAE7B,kBAAkB;EAC/B8B,cAAc,EAAEvB,wBAAwB;EACxCwB,YAAY,EAAE,CACV1B,aAAa,CAAC2B,WAAW,EACzBlC,cAAc,EACdM,kBAAkB,EAClBH,uBAAuB;AAE/B,CAAC,CAAC","ignoreList":[]}
@@ -2,7 +2,7 @@ import { type Result } from "@webiny/feature/api";
2
2
  import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
3
3
  import type { DomainEvent } from "@webiny/api-core/features/EventPublisher";
4
4
  import type { WbPage } from "../../../domain/page/abstractions.js";
5
- import { PageValidationError, PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
5
+ import { PageValidationError, PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
6
6
  export interface IDuplicateWbPageParams {
7
7
  id: string;
8
8
  }
@@ -26,6 +26,7 @@ export interface IDuplicatePageUseCase {
26
26
  execute(params: IDuplicateWbPageParams): Promise<Result<WbPage, UseCaseError>>;
27
27
  }
28
28
  export interface IDuplicatePageUseCaseErrors {
29
+ notAuthorized: PageNotAuthorizedError;
29
30
  validation: PageValidationError;
30
31
  notFound: PageNotFoundError;
31
32
  persistence: PagePersistenceError;
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DuplicatePageRepository","DuplicatePageUseCase","PageBeforeDuplicateHandler","PageAfterDuplicateHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PageValidationError,\n PageNotFoundError,\n PagePersistenceError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IDuplicateWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IDuplicatePageRepository {\n execute(params: IDuplicateWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IDuplicatePageRepositoryErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IDuplicatePageRepositoryErrors[keyof IDuplicatePageRepositoryErrors];\n\nexport const DuplicatePageRepository = createAbstraction<IDuplicatePageRepository>(\n \"Wb/DuplicatePageRepository\"\n);\n\nexport namespace DuplicatePageRepository {\n export type Interface = IDuplicatePageRepository;\n export type Params = IDuplicateWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IDuplicatePageUseCase {\n execute(params: IDuplicateWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IDuplicatePageUseCaseErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IDuplicatePageUseCaseErrors[keyof IDuplicatePageUseCaseErrors];\n\nexport const DuplicatePageUseCase =\n createAbstraction<IDuplicatePageUseCase>(\"Wb/DuplicatePageUseCase\");\n\nexport namespace DuplicatePageUseCase {\n export type Interface = IDuplicatePageUseCase;\n export type Params = IDuplicateWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeDuplicatePayload {\n original: WbPage;\n}\n\nexport interface PageAfterDuplicatePayload {\n original: WbPage;\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeDuplicateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>\n>(\"Wb/PageBeforeDuplicateHandler\");\n\nexport namespace PageBeforeDuplicateHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>;\n export type Event = DomainEvent<PageBeforeDuplicatePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterDuplicateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterDuplicatePayload>>\n>(\"Wb/PageAfterDuplicateHandler\");\n\nexport namespace PageAfterDuplicateHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterDuplicatePayload>>;\n export type Event = DomainEvent<PageAfterDuplicatePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAcA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AASD;AACA;AACA;;AAcA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC;;AAUvE;AACA;AACA;;AAWA;AACA;AACA;;AAEA,OAAO,MAAMG,0BAA0B,GAAGH,iBAAiB,CAEzD,+BAA+B,CAAC;AAQlC,OAAO,MAAMI,yBAAyB,GAAGJ,iBAAiB,CAExD,8BAA8B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DuplicatePageRepository","DuplicatePageUseCase","PageBeforeDuplicateHandler","PageAfterDuplicateHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PageValidationError,\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IDuplicateWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IDuplicatePageRepository {\n execute(params: IDuplicateWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IDuplicatePageRepositoryErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IDuplicatePageRepositoryErrors[keyof IDuplicatePageRepositoryErrors];\n\nexport const DuplicatePageRepository = createAbstraction<IDuplicatePageRepository>(\n \"Wb/DuplicatePageRepository\"\n);\n\nexport namespace DuplicatePageRepository {\n export type Interface = IDuplicatePageRepository;\n export type Params = IDuplicateWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IDuplicatePageUseCase {\n execute(params: IDuplicateWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IDuplicatePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IDuplicatePageUseCaseErrors[keyof IDuplicatePageUseCaseErrors];\n\nexport const DuplicatePageUseCase =\n createAbstraction<IDuplicatePageUseCase>(\"Wb/DuplicatePageUseCase\");\n\nexport namespace DuplicatePageUseCase {\n export type Interface = IDuplicatePageUseCase;\n export type Params = IDuplicateWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeDuplicatePayload {\n original: WbPage;\n}\n\nexport interface PageAfterDuplicatePayload {\n original: WbPage;\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeDuplicateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>\n>(\"Wb/PageBeforeDuplicateHandler\");\n\nexport namespace PageBeforeDuplicateHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>;\n export type Event = DomainEvent<PageBeforeDuplicatePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterDuplicateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterDuplicatePayload>>\n>(\"Wb/PageAfterDuplicateHandler\");\n\nexport namespace PageAfterDuplicateHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterDuplicatePayload>>;\n export type Event = DomainEvent<PageAfterDuplicatePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAWpE;AACA;AACA;;AAMA;AACA;AACA;;AAcA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AASD;AACA;AACA;;AAeA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC;;AAUvE;AACA;AACA;;AAWA;AACA;AACA;;AAEA,OAAO,MAAMG,0BAA0B,GAAGH,iBAAiB,CAEzD,+BAA+B,CAAC;AAQlC,OAAO,MAAMI,yBAAyB,GAAGJ,iBAAiB,CAExD,8BAA8B,CAAC","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
2
3
  declare class GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {
4
+ private permissions;
3
5
  private repository;
4
- constructor(repository: GetPageByIdRepository.Interface);
6
+ constructor(permissions: WbPermissions.Interface, repository: GetPageByIdRepository.Interface);
5
7
  execute(id: string): UseCaseAbstraction.Return;
6
8
  }
7
9
  export declare const GetPageByIdUseCase: typeof GetPageByIdUseCaseImpl & {
@@ -1,15 +1,31 @@
1
+ import { Result } from "@webiny/feature/api";
1
2
  import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
2
5
  class GetPageByIdUseCaseImpl {
3
- constructor(repository) {
6
+ constructor(permissions, repository) {
7
+ this.permissions = permissions;
4
8
  this.repository = repository;
5
9
  }
6
10
  async execute(id) {
7
- return this.repository.execute(id);
11
+ const hasPermission = await this.permissions.canRead("page");
12
+ if (!hasPermission) {
13
+ return Result.fail(new PageNotAuthorizedError());
14
+ }
15
+ const result = await this.repository.execute(id);
16
+ if (result.isFail()) {
17
+ return result;
18
+ }
19
+ const canAccess = await this.permissions.canAccess("page", result.value);
20
+ if (!canAccess) {
21
+ return Result.fail(new PageNotAuthorizedError());
22
+ }
23
+ return result;
8
24
  }
9
25
  }
10
26
  export const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({
11
27
  implementation: GetPageByIdUseCaseImpl,
12
- dependencies: [GetPageByIdRepository]
28
+ dependencies: [WbPermissions.Abstraction, GetPageByIdRepository]
13
29
  });
14
30
 
15
31
  //# sourceMappingURL=GetPageByIdUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GetPageByIdUseCase","UseCaseAbstraction","GetPageByIdRepository","GetPageByIdUseCaseImpl","constructor","repository","execute","id","createImplementation","implementation","dependencies"],"sources":["GetPageByIdUseCase.ts"],"sourcesContent":["import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from \"./abstractions.js\";\n\nclass GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageByIdRepository.Interface) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n return this.repository.execute(id);\n }\n}\n\nexport const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByIdUseCaseImpl,\n dependencies: [GetPageByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AAExE,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CAASC,UAA2C,EAAE;IAAA,KAA7CA,UAA2C,GAA3CA,UAA2C;EAAG;EAElE,MAAMC,OAAOA,CAACC,EAAU,EAA6B;IACjD,OAAO,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,EAAE,CAAC;EACtC;AACJ;AAEA,OAAO,MAAMP,kBAAkB,GAAGC,kBAAkB,CAACO,oBAAoB,CAAC;EACtEC,cAAc,EAAEN,sBAAsB;EACtCO,YAAY,EAAE,CAACR,qBAAqB;AACxC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","GetPageByIdUseCase","UseCaseAbstraction","GetPageByIdRepository","WbPermissions","PageNotAuthorizedError","GetPageByIdUseCaseImpl","constructor","permissions","repository","execute","id","hasPermission","canRead","fail","result","isFail","canAccess","value","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageByIdUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageByIdRepository.Interface\n ) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(id);\n\n if (result.isFail()) {\n return result;\n }\n\n const canAccess = await this.permissions.canAccess(\"page\", result.value);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n return result;\n }\n}\n\nexport const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByIdUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AACxE,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CACCC,WAAoC,EACpCC,UAA2C,EACrD;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAA2C,GAA3CA,UAA2C;EACpD;EAEH,MAAMC,OAAOA,CAACC,EAAU,EAA6B;IACjD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,EAAE,CAAC;IAEhD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACT,WAAW,CAACS,SAAS,CAAC,MAAM,EAAEF,MAAM,CAACG,KAAK,CAAC;IACxE,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOjB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,kBAAkB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACtEC,cAAc,EAAEd,sBAAsB;EACtCe,YAAY,EAAE,CAACjB,aAAa,CAACkB,WAAW,EAAEnB,qBAAqB;AACnE,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbPage } from "../../../domain/page/abstractions.js";
3
- import type { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
3
+ import type { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
4
4
  /**
5
5
  * GetPageById repository interface
6
6
  */
@@ -25,6 +25,7 @@ export interface IGetPageByIdUseCase {
25
25
  execute(id: string): Promise<Result<WbPage, UseCaseError>>;
26
26
  }
27
27
  export interface IGetPageByIdUseCaseErrors {
28
+ notAuthorized: PageNotAuthorizedError;
28
29
  notFound: PageNotFoundError;
29
30
  persistence: PagePersistenceError;
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetPageByIdRepository","GetPageByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PageNotFoundError, PagePersistenceError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageById repository interface\n */\nexport interface IGetPageByIdRepository {\n execute(id: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByIdRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByIdRepositoryErrors[keyof IGetPageByIdRepositoryErrors];\n\nexport const GetPageByIdRepository = createAbstraction<IGetPageByIdRepository>(\n \"Wb/GetPageByIdRepository\"\n);\n\nexport namespace GetPageByIdRepository {\n export type Interface = IGetPageByIdRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageById use case interface\n */\nexport interface IGetPageByIdUseCase {\n execute(id: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByIdUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByIdUseCaseErrors[keyof IGetPageByIdUseCaseErrors];\n\nexport const GetPageByIdUseCase = createAbstraction<IGetPageByIdUseCase>(\"Wb/GetPageByIdUseCase\");\n\nexport namespace GetPageByIdUseCase {\n export type Interface = IGetPageByIdUseCase;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAYA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AAQD;AACA;AACA;;AAYA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetPageByIdRepository","GetPageByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n/**\n * GetPageById repository interface\n */\nexport interface IGetPageByIdRepository {\n execute(id: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByIdRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByIdRepositoryErrors[keyof IGetPageByIdRepositoryErrors];\n\nexport const GetPageByIdRepository = createAbstraction<IGetPageByIdRepository>(\n \"Wb/GetPageByIdRepository\"\n);\n\nexport namespace GetPageByIdRepository {\n export type Interface = IGetPageByIdRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageById use case interface\n */\nexport interface IGetPageByIdUseCase {\n execute(id: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByIdUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByIdUseCaseErrors[keyof IGetPageByIdUseCaseErrors];\n\nexport const GetPageByIdUseCase = createAbstraction<IGetPageByIdUseCase>(\"Wb/GetPageByIdUseCase\");\n\nexport namespace GetPageByIdUseCase {\n export type Interface = IGetPageByIdUseCase;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AASvD;AACA;AACA;;AAYA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AAQD;AACA;AACA;;AAaA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  import { GetPageByPathUseCase as UseCaseAbstraction, GetPageByPathRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
2
3
  declare class GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {
4
+ private permissions;
3
5
  private repository;
4
- constructor(repository: GetPageByPathRepository.Interface);
6
+ constructor(permissions: WbPermissions.Interface, repository: GetPageByPathRepository.Interface);
5
7
  execute(path: string): UseCaseAbstraction.Return;
6
8
  }
7
9
  export declare const GetPageByPathUseCase: typeof GetPageByPathUseCaseImpl & {
@@ -1,15 +1,31 @@
1
+ import { Result } from "@webiny/feature/api";
1
2
  import { GetPageByPathUseCase as UseCaseAbstraction, GetPageByPathRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
2
5
  class GetPageByPathUseCaseImpl {
3
- constructor(repository) {
6
+ constructor(permissions, repository) {
7
+ this.permissions = permissions;
4
8
  this.repository = repository;
5
9
  }
6
10
  async execute(path) {
7
- return this.repository.execute(path);
11
+ const hasPermission = await this.permissions.canRead("page");
12
+ if (!hasPermission) {
13
+ return Result.fail(new PageNotAuthorizedError());
14
+ }
15
+ const result = await this.repository.execute(path);
16
+ if (result.isFail()) {
17
+ return result;
18
+ }
19
+ const canAccess = await this.permissions.canAccess("page", result.value);
20
+ if (!canAccess) {
21
+ return Result.fail(new PageNotAuthorizedError());
22
+ }
23
+ return result;
8
24
  }
9
25
  }
10
26
  export const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({
11
27
  implementation: GetPageByPathUseCaseImpl,
12
- dependencies: [GetPageByPathRepository]
28
+ dependencies: [WbPermissions.Abstraction, GetPageByPathRepository]
13
29
  });
14
30
 
15
31
  //# sourceMappingURL=GetPageByPathUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GetPageByPathUseCase","UseCaseAbstraction","GetPageByPathRepository","GetPageByPathUseCaseImpl","constructor","repository","execute","path","createImplementation","implementation","dependencies"],"sources":["GetPageByPathUseCase.ts"],"sourcesContent":["import {\n GetPageByPathUseCase as UseCaseAbstraction,\n GetPageByPathRepository\n} from \"./abstractions.js\";\n\nclass GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageByPathRepository.Interface) {}\n\n async execute(path: string): UseCaseAbstraction.Return {\n return this.repository.execute(path);\n }\n}\n\nexport const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByPathUseCaseImpl,\n dependencies: [GetPageByPathRepository]\n});\n"],"mappings":"AAAA,SACIA,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAG3B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CAASC,UAA6C,EAAE;IAAA,KAA/CA,UAA6C,GAA7CA,UAA6C;EAAG;EAEpE,MAAMC,OAAOA,CAACC,IAAY,EAA6B;IACnD,OAAO,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,IAAI,CAAC;EACxC;AACJ;AAEA,OAAO,MAAMP,oBAAoB,GAAGC,kBAAkB,CAACO,oBAAoB,CAAC;EACxEC,cAAc,EAAEN,wBAAwB;EACxCO,YAAY,EAAE,CAACR,uBAAuB;AAC1C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","GetPageByPathUseCase","UseCaseAbstraction","GetPageByPathRepository","WbPermissions","PageNotAuthorizedError","GetPageByPathUseCaseImpl","constructor","permissions","repository","execute","path","hasPermission","canRead","fail","result","isFail","canAccess","value","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageByPathUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetPageByPathUseCase as UseCaseAbstraction,\n GetPageByPathRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageByPathRepository.Interface\n ) {}\n\n async execute(path: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(path);\n\n if (result.isFail()) {\n return result;\n }\n\n const canAccess = await this.permissions.canAccess(\"page\", result.value);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n return result;\n }\n}\n\nexport const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByPathUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageByPathRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,WAAoC,EACpCC,UAA6C,EACvD;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,IAAY,EAA6B;IACnD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,IAAI,CAAC;IAElD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACT,WAAW,CAACS,SAAS,CAAC,MAAM,EAAEF,MAAM,CAACG,KAAK,CAAC;IACxE,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOjB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,oBAAoB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACxEC,cAAc,EAAEd,wBAAwB;EACxCe,YAAY,EAAE,CAACjB,aAAa,CAACkB,WAAW,EAAEnB,uBAAuB;AACrE,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbPage } from "../../../domain/page/abstractions.js";
3
- import type { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
3
+ import type { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
4
4
  /**
5
5
  * GetPageByPath repository interface
6
6
  */
@@ -25,6 +25,7 @@ export interface IGetPageByPathUseCase {
25
25
  execute(path: string): Promise<Result<WbPage, UseCaseError>>;
26
26
  }
27
27
  export interface IGetPageByPathUseCaseErrors {
28
+ notAuthorized: PageNotAuthorizedError;
28
29
  notFound: PageNotFoundError;
29
30
  persistence: PagePersistenceError;
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetPageByPathRepository","GetPageByPathUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PageNotFoundError, PagePersistenceError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageByPath repository interface\n */\nexport interface IGetPageByPathRepository {\n execute(path: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByPathRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByPathRepositoryErrors[keyof IGetPageByPathRepositoryErrors];\n\nexport const GetPageByPathRepository = createAbstraction<IGetPageByPathRepository>(\n \"Wb/GetPageByPathRepository\"\n);\n\nexport namespace GetPageByPathRepository {\n export type Interface = IGetPageByPathRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageByPath use case interface\n */\nexport interface IGetPageByPathUseCase {\n execute(path: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByPathUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByPathUseCaseErrors[keyof IGetPageByPathUseCaseErrors];\n\nexport const GetPageByPathUseCase =\n createAbstraction<IGetPageByPathUseCase>(\"Wb/GetPageByPathUseCase\");\n\nexport namespace GetPageByPathUseCase {\n export type Interface = IGetPageByPathUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAYA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AAQD;AACA;AACA;;AAYA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetPageByPathRepository","GetPageByPathUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n/**\n * GetPageByPath repository interface\n */\nexport interface IGetPageByPathRepository {\n execute(path: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByPathRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByPathRepositoryErrors[keyof IGetPageByPathRepositoryErrors];\n\nexport const GetPageByPathRepository = createAbstraction<IGetPageByPathRepository>(\n \"Wb/GetPageByPathRepository\"\n);\n\nexport namespace GetPageByPathRepository {\n export type Interface = IGetPageByPathRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageByPath use case interface\n */\nexport interface IGetPageByPathUseCase {\n execute(path: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByPathUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByPathUseCaseErrors[keyof IGetPageByPathUseCaseErrors];\n\nexport const GetPageByPathUseCase =\n createAbstraction<IGetPageByPathUseCase>(\"Wb/GetPageByPathUseCase\");\n\nexport namespace GetPageByPathUseCase {\n export type Interface = IGetPageByPathUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AASvD;AACA;AACA;;AAYA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AAQD;AACA;AACA;;AAaA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  import { GetPageRevisionsUseCase as UseCaseAbstraction, GetPageRevisionsRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
2
3
  declare class GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {
4
+ private permissions;
3
5
  private repository;
4
- constructor(repository: GetPageRevisionsRepository.Interface);
6
+ constructor(permissions: WbPermissions.Interface, repository: GetPageRevisionsRepository.Interface);
5
7
  execute(entryId: string): UseCaseAbstraction.Return;
6
8
  }
7
9
  export declare const GetPageRevisionsUseCase: typeof GetPageRevisionsUseCaseImpl & {
@@ -1,15 +1,34 @@
1
+ import { Result } from "@webiny/feature/api";
1
2
  import { GetPageRevisionsUseCase as UseCaseAbstraction, GetPageRevisionsRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
2
5
  class GetPageRevisionsUseCaseImpl {
3
- constructor(repository) {
6
+ constructor(permissions, repository) {
7
+ this.permissions = permissions;
4
8
  this.repository = repository;
5
9
  }
6
10
  async execute(entryId) {
7
- return this.repository.execute(entryId);
11
+ const hasPermission = await this.permissions.canRead("page");
12
+ if (!hasPermission) {
13
+ return Result.fail(new PageNotAuthorizedError());
14
+ }
15
+ const result = await this.repository.execute(entryId);
16
+ if (result.isFail()) {
17
+ return result;
18
+ }
19
+ const pages = result.value;
20
+ if (pages.length > 0) {
21
+ const canAccess = await this.permissions.canAccess("page", pages[0]);
22
+ if (!canAccess) {
23
+ return Result.fail(new PageNotAuthorizedError());
24
+ }
25
+ }
26
+ return result;
8
27
  }
9
28
  }
10
29
  export const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({
11
30
  implementation: GetPageRevisionsUseCaseImpl,
12
- dependencies: [GetPageRevisionsRepository]
31
+ dependencies: [WbPermissions.Abstraction, GetPageRevisionsRepository]
13
32
  });
14
33
 
15
34
  //# sourceMappingURL=GetPageRevisionsUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GetPageRevisionsUseCase","UseCaseAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCaseImpl","constructor","repository","execute","entryId","createImplementation","implementation","dependencies"],"sources":["GetPageRevisionsUseCase.ts"],"sourcesContent":["import {\n GetPageRevisionsUseCase as UseCaseAbstraction,\n GetPageRevisionsRepository\n} from \"./abstractions.js\";\n\nclass GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageRevisionsRepository.Interface) {}\n\n async execute(entryId: string): UseCaseAbstraction.Return {\n return this.repository.execute(entryId);\n }\n}\n\nexport const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageRevisionsUseCaseImpl,\n dependencies: [GetPageRevisionsRepository]\n});\n"],"mappings":"AAAA,SACIA,uBAAuB,IAAIC,kBAAkB,EAC7CC,0BAA0B;AAG9B,MAAMC,2BAA2B,CAAyC;EACtEC,WAAWA,CAASC,UAAgD,EAAE;IAAA,KAAlDA,UAAgD,GAAhDA,UAAgD;EAAG;EAEvE,MAAMC,OAAOA,CAACC,OAAe,EAA6B;IACtD,OAAO,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,OAAO,CAAC;EAC3C;AACJ;AAEA,OAAO,MAAMP,uBAAuB,GAAGC,kBAAkB,CAACO,oBAAoB,CAAC;EAC3EC,cAAc,EAAEN,2BAA2B;EAC3CO,YAAY,EAAE,CAACR,0BAA0B;AAC7C,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","GetPageRevisionsUseCase","UseCaseAbstraction","GetPageRevisionsRepository","WbPermissions","PageNotAuthorizedError","GetPageRevisionsUseCaseImpl","constructor","permissions","repository","execute","entryId","hasPermission","canRead","fail","result","isFail","pages","value","length","canAccess","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageRevisionsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetPageRevisionsUseCase as UseCaseAbstraction,\n GetPageRevisionsRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageRevisionsRepository.Interface\n ) {}\n\n async execute(entryId: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(entryId);\n\n if (result.isFail()) {\n return result;\n }\n\n const pages = result.value;\n if (pages.length > 0) {\n const canAccess = await this.permissions.canAccess(\"page\", pages[0]);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n }\n\n return result;\n }\n}\n\nexport const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageRevisionsUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageRevisionsRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,uBAAuB,IAAIC,kBAAkB,EAC7CC,0BAA0B;AAE9B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,2BAA2B,CAAyC;EACtEC,WAAWA,CACCC,WAAoC,EACpCC,UAAgD,EAC1D;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAAgD,GAAhDA,UAAgD;EACzD;EAEH,MAAMC,OAAOA,CAACC,OAAe,EAA6B;IACtD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,OAAO,CAAC;IAErD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,KAAK,GAAGF,MAAM,CAACG,KAAK;IAC1B,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;MAClB,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACZ,WAAW,CAACY,SAAS,CAAC,MAAM,EAAEH,KAAK,CAAC,CAAC,CAAC,CAAC;MACpE,IAAI,CAACG,SAAS,EAAE;QACZ,OAAOpB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;MACpD;IACJ;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,uBAAuB,GAAGC,kBAAkB,CAACmB,oBAAoB,CAAC;EAC3EC,cAAc,EAAEhB,2BAA2B;EAC3CiB,YAAY,EAAE,CAACnB,aAAa,CAACoB,WAAW,EAAErB,0BAA0B;AACxE,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbPage } from "../../../domain/page/abstractions.js";
3
- import type { PagePersistenceError } from "../../../domain/page/errors.js";
3
+ import type { PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
4
4
  /**
5
5
  * GetPageRevisions repository interface
6
6
  */
@@ -24,6 +24,7 @@ export interface IGetPageRevisionsUseCase {
24
24
  execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;
25
25
  }
26
26
  export interface IGetPageRevisionsUseCaseErrors {
27
+ notAuthorized: PageNotAuthorizedError;
27
28
  persistence: PagePersistenceError;
28
29
  }
29
30
  type UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageRevisions repository interface\n */\nexport interface IGetPageRevisionsRepository {\n execute(entryId: string): Promise<Result<WbPage[], RepositoryError>>;\n}\n\nexport interface IGetPageRevisionsRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageRevisionsRepositoryErrors[keyof IGetPageRevisionsRepositoryErrors];\n\nexport const GetPageRevisionsRepository = createAbstraction<IGetPageRevisionsRepository>(\n \"Wb/GetPageRevisionsRepository\"\n);\n\nexport namespace GetPageRevisionsRepository {\n export type Interface = IGetPageRevisionsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage[], RepositoryError>>;\n}\n\n/**\n * GetPageRevisions use case interface\n */\nexport interface IGetPageRevisionsUseCase {\n execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;\n}\n\nexport interface IGetPageRevisionsUseCaseErrors {\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];\n\nexport const GetPageRevisionsUseCase = createAbstraction<IGetPageRevisionsUseCase>(\n \"Wb/GetPageRevisionsUseCase\"\n);\n\nexport namespace GetPageRevisionsUseCase {\n export type Interface = IGetPageRevisionsUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage[], UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAWA,OAAO,MAAMC,0BAA0B,GAAGD,iBAAiB,CACvD,+BACJ,CAAC;;AAQD;AACA;AACA;;AAWA,OAAO,MAAME,uBAAuB,GAAGF,iBAAiB,CACpD,4BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError, PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageRevisions repository interface\n */\nexport interface IGetPageRevisionsRepository {\n execute(entryId: string): Promise<Result<WbPage[], RepositoryError>>;\n}\n\nexport interface IGetPageRevisionsRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageRevisionsRepositoryErrors[keyof IGetPageRevisionsRepositoryErrors];\n\nexport const GetPageRevisionsRepository = createAbstraction<IGetPageRevisionsRepository>(\n \"Wb/GetPageRevisionsRepository\"\n);\n\nexport namespace GetPageRevisionsRepository {\n export type Interface = IGetPageRevisionsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage[], RepositoryError>>;\n}\n\n/**\n * GetPageRevisions use case interface\n */\nexport interface IGetPageRevisionsUseCase {\n execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;\n}\n\nexport interface IGetPageRevisionsUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];\n\nexport const GetPageRevisionsUseCase = createAbstraction<IGetPageRevisionsUseCase>(\n \"Wb/GetPageRevisionsUseCase\"\n);\n\nexport namespace GetPageRevisionsUseCase {\n export type Interface = IGetPageRevisionsUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage[], UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAWA,OAAO,MAAMC,0BAA0B,GAAGD,iBAAiB,CACvD,+BACJ,CAAC;;AAQD;AACA;AACA;;AAYA,OAAO,MAAME,uBAAuB,GAAGF,iBAAiB,CACpD,4BACJ,CAAC","ignoreList":[]}
@@ -1,10 +1,14 @@
1
1
  import { ListPagesRepository as RepositoryAbstraction } from "./abstractions.js";
2
2
  import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
3
3
  import { PageModel } from "../../../domain/page/abstractions.js";
4
+ import { CmsWhereMapper } from "@webiny/api-headless-cms/features/whereMapper/abstractions.js";
5
+ import { CmsSortMapper } from "@webiny/api-headless-cms/features/sortMapper/abstractions.js";
4
6
  declare class ListPagesRepositoryImpl implements RepositoryAbstraction.Interface {
5
7
  private pageModel;
6
8
  private listLatestEntries;
7
- constructor(pageModel: PageModel.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface);
9
+ private whereMapper;
10
+ private sortMapper;
11
+ constructor(pageModel: PageModel.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface, whereMapper: CmsWhereMapper.Interface, sortMapper: CmsSortMapper.Interface);
8
12
  execute(params: RepositoryAbstraction.Params): RepositoryAbstraction.Return;
9
13
  }
10
14
  export declare const ListPagesRepository: typeof ListPagesRepositoryImpl & {
@@ -4,15 +4,25 @@ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/cont
4
4
  import { PageModel } from "../../../domain/page/abstractions.js";
5
5
  import { EntryToPageMapper } from "../../../domain/page/EntryToPageMapper.js";
6
6
  import { PagePersistenceError } from "../../../domain/page/errors.js";
7
+ import { CmsWhereMapper } from "@webiny/api-headless-cms/features/whereMapper/abstractions.js";
8
+ import { CmsSortMapper } from "@webiny/api-headless-cms/features/sortMapper/abstractions.js";
7
9
  class ListPagesRepositoryImpl {
8
- constructor(pageModel, listLatestEntries) {
10
+ constructor(pageModel, listLatestEntries, whereMapper, sortMapper) {
9
11
  this.pageModel = pageModel;
10
12
  this.listLatestEntries = listLatestEntries;
13
+ this.whereMapper = whereMapper;
14
+ this.sortMapper = sortMapper;
11
15
  }
12
16
  async execute(params) {
13
17
  const result = await this.listLatestEntries.execute(this.pageModel, {
14
- where: params.where,
15
- sort: params.sort,
18
+ where: this.whereMapper.map({
19
+ fields: this.pageModel.fields,
20
+ input: params.where
21
+ }),
22
+ sort: this.sortMapper.map({
23
+ fields: this.pageModel.fields,
24
+ input: params.sort
25
+ }),
16
26
  limit: params.limit,
17
27
  after: params.after,
18
28
  search: params.search
@@ -33,7 +43,7 @@ class ListPagesRepositoryImpl {
33
43
  }
34
44
  export const ListPagesRepository = RepositoryAbstraction.createImplementation({
35
45
  implementation: ListPagesRepositoryImpl,
36
- dependencies: [PageModel, ListLatestEntriesUseCase]
46
+ dependencies: [PageModel, ListLatestEntriesUseCase, CmsWhereMapper, CmsSortMapper]
37
47
  });
38
48
 
39
49
  //# sourceMappingURL=ListPagesRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","ListPagesRepository","RepositoryAbstraction","ListLatestEntriesUseCase","PageModel","EntryToPageMapper","PagePersistenceError","ListPagesRepositoryImpl","constructor","pageModel","listLatestEntries","execute","params","result","where","sort","limit","after","search","isFail","fail","error","entries","meta","value","pages","map","entry","toPage","ok","createImplementation","implementation","dependencies"],"sources":["ListPagesRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListPagesRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { PageModel } from \"~/domain/page/abstractions.js\";\nimport { EntryToPageMapper } from \"~/domain/page/EntryToPageMapper.js\";\nimport { PagePersistenceError } from \"~/domain/page/errors.js\";\n\nclass ListPagesRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private pageModel: PageModel.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface\n ) {}\n\n async execute(params: RepositoryAbstraction.Params): RepositoryAbstraction.Return {\n const result = await this.listLatestEntries.execute(this.pageModel, {\n where: params.where,\n sort: params.sort,\n limit: params.limit,\n after: params.after,\n search: params.search\n });\n\n if (result.isFail()) {\n return Result.fail(new PagePersistenceError(result.error));\n }\n\n const { entries, meta } = result.value;\n const pages = entries.map(entry => EntryToPageMapper.toPage(entry));\n\n return Result.ok({ pages, meta });\n }\n}\n\nexport const ListPagesRepository = RepositoryAbstraction.createImplementation({\n implementation: ListPagesRepositoryImpl,\n dependencies: [PageModel, ListLatestEntriesUseCase]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,mBAAmB,IAAIC,qBAAqB;AACrD,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SAASC,SAAS;AAClB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAE7B,MAAMC,uBAAuB,CAA4C;EACrEC,WAAWA,CACCC,SAA8B,EAC9BC,iBAAqD,EAC/D;IAAA,KAFUD,SAA8B,GAA9BA,SAA8B;IAAA,KAC9BC,iBAAqD,GAArDA,iBAAqD;EAC9D;EAEH,MAAMC,OAAOA,CAACC,MAAoC,EAAgC;IAC9E,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACH,iBAAiB,CAACC,OAAO,CAAC,IAAI,CAACF,SAAS,EAAE;MAChEK,KAAK,EAAEF,MAAM,CAACE,KAAK;MACnBC,IAAI,EAAEH,MAAM,CAACG,IAAI;MACjBC,KAAK,EAAEJ,MAAM,CAACI,KAAK;MACnBC,KAAK,EAAEL,MAAM,CAACK,KAAK;MACnBC,MAAM,EAAEN,MAAM,CAACM;IACnB,CAAC,CAAC;IAEF,IAAIL,MAAM,CAACM,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOnB,MAAM,CAACoB,IAAI,CAAC,IAAId,oBAAoB,CAACO,MAAM,CAACQ,KAAK,CAAC,CAAC;IAC9D;IAEA,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGV,MAAM,CAACW,KAAK;IACtC,MAAMC,KAAK,GAAGH,OAAO,CAACI,GAAG,CAACC,KAAK,IAAItB,iBAAiB,CAACuB,MAAM,CAACD,KAAK,CAAC,CAAC;IAEnE,OAAO3B,MAAM,CAAC6B,EAAE,CAAC;MAAEJ,KAAK;MAAEF;IAAK,CAAC,CAAC;EACrC;AACJ;AAEA,OAAO,MAAMtB,mBAAmB,GAAGC,qBAAqB,CAAC4B,oBAAoB,CAAC;EAC1EC,cAAc,EAAExB,uBAAuB;EACvCyB,YAAY,EAAE,CAAC5B,SAAS,EAAED,wBAAwB;AACtD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","ListPagesRepository","RepositoryAbstraction","ListLatestEntriesUseCase","PageModel","EntryToPageMapper","PagePersistenceError","CmsWhereMapper","CmsSortMapper","ListPagesRepositoryImpl","constructor","pageModel","listLatestEntries","whereMapper","sortMapper","execute","params","result","where","map","fields","input","sort","limit","after","search","isFail","fail","error","entries","meta","value","pages","entry","toPage","ok","createImplementation","implementation","dependencies"],"sources":["ListPagesRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListPagesRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { PageModel } from \"~/domain/page/abstractions.js\";\nimport { EntryToPageMapper } from \"~/domain/page/EntryToPageMapper.js\";\nimport { PagePersistenceError } from \"~/domain/page/errors.js\";\nimport { CmsWhereMapper } from \"@webiny/api-headless-cms/features/whereMapper/abstractions.js\";\nimport { CmsSortMapper } from \"@webiny/api-headless-cms/features/sortMapper/abstractions.js\";\n\nclass ListPagesRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private pageModel: PageModel.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private whereMapper: CmsWhereMapper.Interface,\n private sortMapper: CmsSortMapper.Interface\n ) {}\n\n async execute(params: RepositoryAbstraction.Params): RepositoryAbstraction.Return {\n const result = await this.listLatestEntries.execute(this.pageModel, {\n where: this.whereMapper.map({\n fields: this.pageModel.fields,\n input: params.where\n }),\n sort: this.sortMapper.map({\n fields: this.pageModel.fields,\n input: params.sort\n }),\n limit: params.limit,\n after: params.after,\n search: params.search\n });\n\n if (result.isFail()) {\n return Result.fail(new PagePersistenceError(result.error));\n }\n\n const { entries, meta } = result.value;\n const pages = entries.map(entry => EntryToPageMapper.toPage(entry));\n\n return Result.ok({ pages, meta });\n }\n}\n\nexport const ListPagesRepository = RepositoryAbstraction.createImplementation({\n implementation: ListPagesRepositoryImpl,\n dependencies: [PageModel, ListLatestEntriesUseCase, CmsWhereMapper, CmsSortMapper]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,mBAAmB,IAAIC,qBAAqB;AACrD,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SAASC,SAAS;AAClB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,cAAc,QAAQ,+DAA+D;AAC9F,SAASC,aAAa,QAAQ,8DAA8D;AAE5F,MAAMC,uBAAuB,CAA4C;EACrEC,WAAWA,CACCC,SAA8B,EAC9BC,iBAAqD,EACrDC,WAAqC,EACrCC,UAAmC,EAC7C;IAAA,KAJUH,SAA8B,GAA9BA,SAA8B;IAAA,KAC9BC,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,WAAqC,GAArCA,WAAqC;IAAA,KACrCC,UAAmC,GAAnCA,UAAmC;EAC5C;EAEH,MAAMC,OAAOA,CAACC,MAAoC,EAAgC;IAC9E,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAACG,OAAO,CAAC,IAAI,CAACJ,SAAS,EAAE;MAChEO,KAAK,EAAE,IAAI,CAACL,WAAW,CAACM,GAAG,CAAC;QACxBC,MAAM,EAAE,IAAI,CAACT,SAAS,CAACS,MAAM;QAC7BC,KAAK,EAAEL,MAAM,CAACE;MAClB,CAAC,CAAC;MACFI,IAAI,EAAE,IAAI,CAACR,UAAU,CAACK,GAAG,CAAC;QACtBC,MAAM,EAAE,IAAI,CAACT,SAAS,CAACS,MAAM;QAC7BC,KAAK,EAAEL,MAAM,CAACM;MAClB,CAAC,CAAC;MACFC,KAAK,EAAEP,MAAM,CAACO,KAAK;MACnBC,KAAK,EAAER,MAAM,CAACQ,KAAK;MACnBC,MAAM,EAAET,MAAM,CAACS;IACnB,CAAC,CAAC;IAEF,IAAIR,MAAM,CAACS,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO1B,MAAM,CAAC2B,IAAI,CAAC,IAAIrB,oBAAoB,CAACW,MAAM,CAACW,KAAK,CAAC,CAAC;IAC9D;IAEA,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGb,MAAM,CAACc,KAAK;IACtC,MAAMC,KAAK,GAAGH,OAAO,CAACV,GAAG,CAACc,KAAK,IAAI5B,iBAAiB,CAAC6B,MAAM,CAACD,KAAK,CAAC,CAAC;IAEnE,OAAOjC,MAAM,CAACmC,EAAE,CAAC;MAAEH,KAAK;MAAEF;IAAK,CAAC,CAAC;EACrC;AACJ;AAEA,OAAO,MAAM7B,mBAAmB,GAAGC,qBAAqB,CAACkC,oBAAoB,CAAC;EAC1EC,cAAc,EAAE5B,uBAAuB;EACvC6B,YAAY,EAAE,CAAClC,SAAS,EAAED,wBAAwB,EAAEI,cAAc,EAAEC,aAAa;AACrF,CAAC,CAAC","ignoreList":[]}
@@ -1,7 +1,11 @@
1
1
  import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from "./abstractions.js";
2
+ import { WbPermissions } from "../../../domain/permissions.js";
3
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
4
  declare class ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {
5
+ private permissions;
6
+ private identityContext;
3
7
  private repository;
4
- constructor(repository: ListPagesRepository.Interface);
8
+ constructor(permissions: WbPermissions.Interface, identityContext: IdentityContext.Interface, repository: ListPagesRepository.Interface);
5
9
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
6
10
  }
7
11
  export declare const ListPagesUseCase: typeof ListPagesUseCaseImpl & {
@@ -1,15 +1,35 @@
1
+ import { Result } from "@webiny/feature/api";
1
2
  import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from "./abstractions.js";
3
+ import { WbPermissions } from "../../../domain/permissions.js";
4
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
5
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
2
6
  class ListPagesUseCaseImpl {
3
- constructor(repository) {
7
+ constructor(permissions, identityContext, repository) {
8
+ this.permissions = permissions;
9
+ this.identityContext = identityContext;
4
10
  this.repository = repository;
5
11
  }
6
- execute(params) {
7
- return this.repository.execute(params);
12
+ async execute(params) {
13
+ const hasPermission = await this.permissions.canRead("page");
14
+ if (!hasPermission) {
15
+ return Result.fail(new PageNotAuthorizedError());
16
+ }
17
+ const where = {
18
+ ...params.where
19
+ };
20
+ if (await this.permissions.onlyOwnRecords("page")) {
21
+ const identity = this.identityContext.getIdentity();
22
+ where.createdBy = identity.id;
23
+ }
24
+ return this.repository.execute({
25
+ ...params,
26
+ where
27
+ });
8
28
  }
9
29
  }
10
30
  export const ListPagesUseCase = UseCaseAbstraction.createImplementation({
11
31
  implementation: ListPagesUseCaseImpl,
12
- dependencies: [ListPagesRepository]
32
+ dependencies: [WbPermissions.Abstraction, IdentityContext, ListPagesRepository]
13
33
  });
14
34
 
15
35
  //# sourceMappingURL=ListPagesUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ListPagesUseCase","UseCaseAbstraction","ListPagesRepository","ListPagesUseCaseImpl","constructor","repository","execute","params","createImplementation","implementation","dependencies"],"sources":["ListPagesUseCase.ts"],"sourcesContent":["import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from \"./abstractions.js\";\n\nclass ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: ListPagesRepository.Interface) {}\n\n execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n return this.repository.execute(params);\n }\n}\n\nexport const ListPagesUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListPagesUseCaseImpl,\n dependencies: [ListPagesRepository]\n});\n"],"mappings":"AAAA,SAASA,gBAAgB,IAAIC,kBAAkB,EAAEC,mBAAmB;AAEpE,MAAMC,oBAAoB,CAAyC;EAC/DC,WAAWA,CAASC,UAAyC,EAAE;IAAA,KAA3CA,UAAyC,GAAzCA,UAAyC;EAAG;EAEhEC,OAAOA,CAACC,MAAiC,EAA6B;IAClE,OAAO,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;EAC1C;AACJ;AAEA,OAAO,MAAMP,gBAAgB,GAAGC,kBAAkB,CAACO,oBAAoB,CAAC;EACpEC,cAAc,EAAEN,oBAAoB;EACpCO,YAAY,EAAE,CAACR,mBAAmB;AACtC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","ListPagesUseCase","UseCaseAbstraction","ListPagesRepository","WbPermissions","PageNotAuthorizedError","IdentityContext","ListPagesUseCaseImpl","constructor","permissions","identityContext","repository","execute","params","hasPermission","canRead","fail","where","onlyOwnRecords","identity","getIdentity","createdBy","id","createImplementation","implementation","dependencies","Abstraction"],"sources":["ListPagesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\nclass ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private identityContext: IdentityContext.Interface,\n private repository: ListPagesRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const where = { ...params.where };\n\n if (await this.permissions.onlyOwnRecords(\"page\")) {\n const identity = this.identityContext.getIdentity();\n where.createdBy = identity.id;\n }\n\n return this.repository.execute({ ...params, where });\n }\n}\n\nexport const ListPagesUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListPagesUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, IdentityContext, ListPagesRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,gBAAgB,IAAIC,kBAAkB,EAAEC,mBAAmB;AACpE,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,eAAe,QAAQ,6DAA6D;AAE7F,MAAMC,oBAAoB,CAAyC;EAC/DC,WAAWA,CACCC,WAAoC,EACpCC,eAA0C,EAC1CC,UAAyC,EACnD;IAAA,KAHUF,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,UAAyC,GAAzCA,UAAyC;EAClD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,WAAW,CAACM,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOd,MAAM,CAACgB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMY,KAAK,GAAG;MAAE,GAAGJ,MAAM,CAACI;IAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,CAACR,WAAW,CAACS,cAAc,CAAC,MAAM,CAAC,EAAE;MAC/C,MAAMC,QAAQ,GAAG,IAAI,CAACT,eAAe,CAACU,WAAW,CAAC,CAAC;MACnDH,KAAK,CAACI,SAAS,GAAGF,QAAQ,CAACG,EAAE;IACjC;IAEA,OAAO,IAAI,CAACX,UAAU,CAACC,OAAO,CAAC;MAAE,GAAGC,MAAM;MAAEI;IAAM,CAAC,CAAC;EACxD;AACJ;AAEA,OAAO,MAAMhB,gBAAgB,GAAGC,kBAAkB,CAACqB,oBAAoB,CAAC;EACpEC,cAAc,EAAEjB,oBAAoB;EACpCkB,YAAY,EAAE,CAACrB,aAAa,CAACsB,WAAW,EAAEpB,eAAe,EAAEH,mBAAmB;AAClF,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import type { Result } from "@webiny/feature/api";
2
2
  import type { WbPage } from "../../../domain/page/abstractions.js";
3
- import type { PagePersistenceError } from "../../../domain/page/errors.js";
3
+ import type { PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
4
4
  import type { CmsEntryListSort, CmsEntryListWhere } from "@webiny/api-headless-cms/types/index.js";
5
5
  export interface IListPagesParams {
6
6
  where: CmsEntryListWhere;
@@ -42,6 +42,7 @@ export interface IListPagesUseCase {
42
42
  execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;
43
43
  }
44
44
  export interface IListPagesUseCaseErrors {
45
+ notAuthorized: PageNotAuthorizedError;
45
46
  persistence: PagePersistenceError;
46
47
  }
47
48
  type UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","ListPagesRepository","ListPagesUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError } from \"~/domain/page/errors.js\";\nimport type { CmsEntryListSort, CmsEntryListWhere } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IListPagesParams {\n where: CmsEntryListWhere;\n sort: CmsEntryListSort;\n limit: number;\n after: string | null;\n search?: string;\n}\n\nexport interface IListPagesMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type IListPagesResult = { pages: WbPage[]; meta: IListPagesMeta };\n\n/**\n * ListPages repository interface\n */\nexport interface IListPagesRepository {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\nexport interface IListPagesRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IListPagesRepositoryErrors[keyof IListPagesRepositoryErrors];\n\nexport const ListPagesRepository =\n createAbstraction<IListPagesRepository>(\"Wb/ListPagesRepository\");\n\nexport namespace ListPagesRepository {\n export type Interface = IListPagesRepository;\n export type Error = RepositoryError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\n/**\n * ListPages use case interface\n */\nexport interface IListPagesUseCase {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;\n}\n\nexport interface IListPagesUseCaseErrors {\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];\n\nexport const ListPagesUseCase = createAbstraction<IListPagesUseCase>(\"Wb/ListPagesUseCase\");\n\nexport namespace ListPagesUseCase {\n export type Interface = IListPagesUseCase;\n export type Error = UseCaseError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, UseCaseError>>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAsBvD;AACA;AACA;;AAWA,OAAO,MAAMC,mBAAmB,GAC5BD,iBAAiB,CAAuB,wBAAwB,CAAC;;AASrE;AACA;AACA;;AAWA,OAAO,MAAME,gBAAgB,GAAGF,iBAAiB,CAAoB,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","ListPagesRepository","ListPagesUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError, PageNotAuthorizedError } from \"~/domain/page/errors.js\";\nimport type { CmsEntryListSort, CmsEntryListWhere } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IListPagesParams {\n where: CmsEntryListWhere;\n sort: CmsEntryListSort;\n limit: number;\n after: string | null;\n search?: string;\n}\n\nexport interface IListPagesMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type IListPagesResult = { pages: WbPage[]; meta: IListPagesMeta };\n\n/**\n * ListPages repository interface\n */\nexport interface IListPagesRepository {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\nexport interface IListPagesRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IListPagesRepositoryErrors[keyof IListPagesRepositoryErrors];\n\nexport const ListPagesRepository =\n createAbstraction<IListPagesRepository>(\"Wb/ListPagesRepository\");\n\nexport namespace ListPagesRepository {\n export type Interface = IListPagesRepository;\n export type Error = RepositoryError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\n/**\n * ListPages use case interface\n */\nexport interface IListPagesUseCase {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;\n}\n\nexport interface IListPagesUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];\n\nexport const ListPagesUseCase = createAbstraction<IListPagesUseCase>(\"Wb/ListPagesUseCase\");\n\nexport namespace ListPagesUseCase {\n export type Interface = IListPagesUseCase;\n export type Error = UseCaseError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, UseCaseError>>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAsBvD;AACA;AACA;;AAWA,OAAO,MAAMC,mBAAmB,GAC5BD,iBAAiB,CAAuB,wBAAwB,CAAC;;AASrE;AACA;AACA;;AAYA,OAAO,MAAME,gBAAgB,GAAGF,iBAAiB,CAAoB,qBAAqB,CAAC","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { MovePageUseCase as UseCaseAbstraction, MovePageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class MovePageUseCaseImpl implements UseCaseAbstraction.Interface {
6
+ private permissions;
5
7
  private eventPublisher;
6
8
  private getPageById;
7
9
  private repository;
8
- constructor(eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: MovePageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: MovePageRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const MovePageUseCase: import("@webiny/di").Implementation<typeof MovePageUseCaseImpl>;