@webiny/api-website-builder 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.c27f4d8a31

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 (208) 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/exports/api/website-builder/page.d.ts +8 -8
  9. package/exports/api/website-builder/page.js +8 -8
  10. package/exports/api/website-builder/page.js.map +1 -1
  11. package/exports/api/website-builder/redirect.d.ts +4 -4
  12. package/exports/api/website-builder/redirect.js +4 -4
  13. package/exports/api/website-builder/redirect.js.map +1 -1
  14. package/features/installer/ApiKeyInstaller.js +4 -1
  15. package/features/installer/ApiKeyInstaller.js.map +1 -1
  16. package/features/pages/CreatePage/CreatePageUseCase.d.ts +3 -1
  17. package/features/pages/CreatePage/CreatePageUseCase.js +10 -2
  18. package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
  19. package/features/pages/CreatePage/abstractions.d.ts +6 -5
  20. package/features/pages/CreatePage/abstractions.js +2 -2
  21. package/features/pages/CreatePage/abstractions.js.map +1 -1
  22. package/features/pages/CreatePage/events.js +3 -3
  23. package/features/pages/CreatePage/events.js.map +1 -1
  24. package/features/pages/CreatePage/index.d.ts +1 -1
  25. package/features/pages/CreatePage/index.js +1 -1
  26. package/features/pages/CreatePage/index.js.map +1 -1
  27. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.d.ts +5 -1
  28. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +18 -2
  29. package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
  30. package/features/pages/CreatePageRevisionFrom/abstractions.d.ts +6 -5
  31. package/features/pages/CreatePageRevisionFrom/abstractions.js +2 -2
  32. package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
  33. package/features/pages/CreatePageRevisionFrom/events.js +3 -3
  34. package/features/pages/CreatePageRevisionFrom/events.js.map +1 -1
  35. package/features/pages/CreatePageRevisionFrom/index.d.ts +1 -1
  36. package/features/pages/CreatePageRevisionFrom/index.js +1 -1
  37. package/features/pages/CreatePageRevisionFrom/index.js.map +1 -1
  38. package/features/pages/DeletePage/DeletePageUseCase.d.ts +3 -1
  39. package/features/pages/DeletePage/DeletePageUseCase.js +10 -3
  40. package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
  41. package/features/pages/DeletePage/abstractions.d.ts +6 -5
  42. package/features/pages/DeletePage/abstractions.js +2 -2
  43. package/features/pages/DeletePage/abstractions.js.map +1 -1
  44. package/features/pages/DeletePage/events.js +3 -3
  45. package/features/pages/DeletePage/events.js.map +1 -1
  46. package/features/pages/DeletePage/index.d.ts +1 -1
  47. package/features/pages/DeletePage/index.js +1 -1
  48. package/features/pages/DeletePage/index.js.map +1 -1
  49. package/features/pages/DuplicatePage/DuplicatePageUseCase.d.ts +3 -1
  50. package/features/pages/DuplicatePage/DuplicatePageUseCase.js +10 -2
  51. package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
  52. package/features/pages/DuplicatePage/abstractions.d.ts +6 -5
  53. package/features/pages/DuplicatePage/abstractions.js +2 -2
  54. package/features/pages/DuplicatePage/abstractions.js.map +1 -1
  55. package/features/pages/DuplicatePage/events.js +3 -3
  56. package/features/pages/DuplicatePage/events.js.map +1 -1
  57. package/features/pages/DuplicatePage/index.d.ts +1 -1
  58. package/features/pages/DuplicatePage/index.js +1 -1
  59. package/features/pages/DuplicatePage/index.js.map +1 -1
  60. package/features/pages/GetPageById/GetPageByIdUseCase.d.ts +3 -1
  61. package/features/pages/GetPageById/GetPageByIdUseCase.js +19 -3
  62. package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
  63. package/features/pages/GetPageById/abstractions.d.ts +2 -1
  64. package/features/pages/GetPageById/abstractions.js.map +1 -1
  65. package/features/pages/GetPageByPath/GetPageByPathUseCase.d.ts +3 -1
  66. package/features/pages/GetPageByPath/GetPageByPathUseCase.js +19 -3
  67. package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
  68. package/features/pages/GetPageByPath/abstractions.d.ts +2 -1
  69. package/features/pages/GetPageByPath/abstractions.js.map +1 -1
  70. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.d.ts +3 -1
  71. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +22 -3
  72. package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
  73. package/features/pages/GetPageRevisions/abstractions.d.ts +2 -1
  74. package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
  75. package/features/pages/ListPages/ListPagesRepository.d.ts +5 -1
  76. package/features/pages/ListPages/ListPagesRepository.js +14 -4
  77. package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
  78. package/features/pages/ListPages/ListPagesUseCase.d.ts +5 -1
  79. package/features/pages/ListPages/ListPagesUseCase.js +24 -4
  80. package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
  81. package/features/pages/ListPages/abstractions.d.ts +2 -1
  82. package/features/pages/ListPages/abstractions.js.map +1 -1
  83. package/features/pages/MovePage/MovePageUseCase.d.ts +3 -1
  84. package/features/pages/MovePage/MovePageUseCase.js +14 -2
  85. package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
  86. package/features/pages/MovePage/abstractions.d.ts +6 -5
  87. package/features/pages/MovePage/abstractions.js +2 -2
  88. package/features/pages/MovePage/abstractions.js.map +1 -1
  89. package/features/pages/MovePage/events.js +3 -3
  90. package/features/pages/MovePage/events.js.map +1 -1
  91. package/features/pages/MovePage/index.d.ts +1 -1
  92. package/features/pages/MovePage/index.js +1 -1
  93. package/features/pages/MovePage/index.js.map +1 -1
  94. package/features/pages/PublishPage/PublishPageUseCase.d.ts +3 -1
  95. package/features/pages/PublishPage/PublishPageUseCase.js +14 -2
  96. package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
  97. package/features/pages/PublishPage/abstractions.d.ts +6 -5
  98. package/features/pages/PublishPage/abstractions.js +2 -2
  99. package/features/pages/PublishPage/abstractions.js.map +1 -1
  100. package/features/pages/PublishPage/events.js +3 -3
  101. package/features/pages/PublishPage/events.js.map +1 -1
  102. package/features/pages/PublishPage/index.d.ts +1 -1
  103. package/features/pages/PublishPage/index.js +1 -1
  104. package/features/pages/PublishPage/index.js.map +1 -1
  105. package/features/pages/UnpublishPage/UnpublishPageUseCase.d.ts +3 -1
  106. package/features/pages/UnpublishPage/UnpublishPageUseCase.js +14 -2
  107. package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
  108. package/features/pages/UnpublishPage/abstractions.d.ts +6 -5
  109. package/features/pages/UnpublishPage/abstractions.js +2 -2
  110. package/features/pages/UnpublishPage/abstractions.js.map +1 -1
  111. package/features/pages/UnpublishPage/events.js +3 -3
  112. package/features/pages/UnpublishPage/events.js.map +1 -1
  113. package/features/pages/UnpublishPage/index.d.ts +1 -1
  114. package/features/pages/UnpublishPage/index.js +1 -1
  115. package/features/pages/UnpublishPage/index.js.map +1 -1
  116. package/features/pages/UpdatePage/UpdatePageUseCase.d.ts +3 -1
  117. package/features/pages/UpdatePage/UpdatePageUseCase.js +14 -2
  118. package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
  119. package/features/pages/UpdatePage/abstractions.d.ts +9 -9
  120. package/features/pages/UpdatePage/abstractions.js +2 -2
  121. package/features/pages/UpdatePage/abstractions.js.map +1 -1
  122. package/features/pages/UpdatePage/events.js +3 -3
  123. package/features/pages/UpdatePage/events.js.map +1 -1
  124. package/features/pages/UpdatePage/index.d.ts +1 -1
  125. package/features/pages/UpdatePage/index.js +1 -1
  126. package/features/pages/UpdatePage/index.js.map +1 -1
  127. package/features/redirects/CreateRedirect/CreateRedirectUseCase.d.ts +3 -1
  128. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +10 -2
  129. package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
  130. package/features/redirects/CreateRedirect/abstractions.d.ts +6 -5
  131. package/features/redirects/CreateRedirect/abstractions.js +2 -2
  132. package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
  133. package/features/redirects/CreateRedirect/events.js +3 -3
  134. package/features/redirects/CreateRedirect/events.js.map +1 -1
  135. package/features/redirects/CreateRedirect/index.d.ts +1 -1
  136. package/features/redirects/CreateRedirect/index.js +1 -1
  137. package/features/redirects/CreateRedirect/index.js.map +1 -1
  138. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.d.ts +3 -1
  139. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +10 -3
  140. package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
  141. package/features/redirects/DeleteRedirect/abstractions.d.ts +6 -5
  142. package/features/redirects/DeleteRedirect/abstractions.js +2 -2
  143. package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
  144. package/features/redirects/DeleteRedirect/events.js +3 -3
  145. package/features/redirects/DeleteRedirect/events.js.map +1 -1
  146. package/features/redirects/DeleteRedirect/index.d.ts +1 -1
  147. package/features/redirects/DeleteRedirect/index.js +1 -1
  148. package/features/redirects/DeleteRedirect/index.js.map +1 -1
  149. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.d.ts +3 -1
  150. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +10 -3
  151. package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
  152. package/features/redirects/GetActiveRedirects/abstractions.d.ts +2 -1
  153. package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
  154. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.d.ts +3 -1
  155. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +19 -4
  156. package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
  157. package/features/redirects/GetRedirectById/abstractions.d.ts +2 -1
  158. package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
  159. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.d.ts +3 -3
  160. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js +2 -2
  161. package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js.map +1 -1
  162. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.d.ts +3 -3
  163. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js +2 -2
  164. package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js.map +1 -1
  165. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.d.ts +3 -3
  166. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js +2 -2
  167. package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js.map +1 -1
  168. package/features/redirects/ListRedirects/ListRedirectsUseCase.d.ts +5 -1
  169. package/features/redirects/ListRedirects/ListRedirectsUseCase.js +23 -4
  170. package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
  171. package/features/redirects/ListRedirects/abstractions.d.ts +3 -1
  172. package/features/redirects/ListRedirects/abstractions.js.map +1 -1
  173. package/features/redirects/MoveRedirect/MoveRedirectUseCase.d.ts +3 -1
  174. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +14 -2
  175. package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
  176. package/features/redirects/MoveRedirect/abstractions.d.ts +6 -5
  177. package/features/redirects/MoveRedirect/abstractions.js +2 -2
  178. package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
  179. package/features/redirects/MoveRedirect/events.js +3 -3
  180. package/features/redirects/MoveRedirect/events.js.map +1 -1
  181. package/features/redirects/MoveRedirect/index.d.ts +1 -1
  182. package/features/redirects/MoveRedirect/index.js +1 -1
  183. package/features/redirects/MoveRedirect/index.js.map +1 -1
  184. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.d.ts +3 -1
  185. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +14 -2
  186. package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
  187. package/features/redirects/UpdateRedirect/abstractions.d.ts +6 -5
  188. package/features/redirects/UpdateRedirect/abstractions.js +2 -2
  189. package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
  190. package/features/redirects/UpdateRedirect/events.js +3 -3
  191. package/features/redirects/UpdateRedirect/events.js.map +1 -1
  192. package/features/redirects/UpdateRedirect/index.d.ts +1 -1
  193. package/features/redirects/UpdateRedirect/index.js +1 -1
  194. package/features/redirects/UpdateRedirect/index.js.map +1 -1
  195. package/features/tenantManager/TenantModelExtension.js +5 -5
  196. package/features/tenantManager/TenantModelExtension.js.map +1 -1
  197. package/graphql/pages/pages.typeDefs.d.ts +1 -1
  198. package/graphql/pages/pages.typeDefs.js +6 -0
  199. package/graphql/pages/pages.typeDefs.js.map +1 -1
  200. package/index.js +4 -4
  201. package/index.js.map +1 -1
  202. package/package.json +19 -20
  203. package/features/pages/PagePermissions/feature.d.ts +0 -1
  204. package/features/pages/PagePermissions/feature.js +0 -53
  205. package/features/pages/PagePermissions/feature.js.map +0 -1
  206. package/features/redirects/RedirectPermissions/feature.d.ts +0 -1
  207. package/features/redirects/RedirectPermissions/feature.js +0 -45
  208. package/features/redirects/RedirectPermissions/feature.js.map +0 -1
@@ -2,12 +2,28 @@ import { Result } from "@webiny/feature/api";
2
2
  import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { CreatePageRevisionFromUseCase as UseCaseAbstraction, CreatePageRevisionFromRepository } from "./abstractions.js";
4
4
  import { PageBeforeCreateRevisionFromEvent, PageAfterCreateRevisionFromEvent } from "./events.js";
5
+ import { GetPageByIdUseCase } from "../GetPageById/index.js";
6
+ import { WbPermissions } from "../../../domain/permissions.js";
7
+ import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
5
8
  class CreatePageRevisionFromUseCaseImpl {
6
- constructor(eventPublisher, repository) {
9
+ constructor(permissions, eventPublisher, getPageById, repository) {
10
+ this.permissions = permissions;
7
11
  this.eventPublisher = eventPublisher;
12
+ this.getPageById = getPageById;
8
13
  this.repository = repository;
9
14
  }
10
15
  async execute(params) {
16
+ const hasPermission = await this.permissions.canCreate("page");
17
+ if (!hasPermission) {
18
+ return Result.fail(new PageNotAuthorizedError());
19
+ }
20
+
21
+ // Verify ownership of the source page
22
+ const getResult = await this.getPageById.execute(params.id);
23
+ if (getResult.isFail()) {
24
+ return getResult;
25
+ }
26
+
11
27
  // Publish before event
12
28
  const beforeEvent = new PageBeforeCreateRevisionFromEvent({
13
29
  params
@@ -31,7 +47,7 @@ class CreatePageRevisionFromUseCaseImpl {
31
47
  }
32
48
  export const CreatePageRevisionFromUseCase = UseCaseAbstraction.createImplementation({
33
49
  implementation: CreatePageRevisionFromUseCaseImpl,
34
- dependencies: [EventPublisher, CreatePageRevisionFromRepository]
50
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, CreatePageRevisionFromRepository]
35
51
  });
36
52
 
37
53
  //# sourceMappingURL=CreatePageRevisionFromUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","EventPublisher","CreatePageRevisionFromUseCase","UseCaseAbstraction","CreatePageRevisionFromRepository","PageBeforeCreateRevisionFromEvent","PageAfterCreateRevisionFromEvent","CreatePageRevisionFromUseCaseImpl","constructor","eventPublisher","repository","execute","params","beforeEvent","publish","result","isFail","page","value","afterEvent","ok","createImplementation","implementation","dependencies"],"sources":["CreatePageRevisionFromUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromRepository\n} from \"./abstractions.js\";\nimport { PageBeforeCreateRevisionFromEvent, PageAfterCreateRevisionFromEvent } from \"./events.js\";\n\nclass CreatePageRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private repository: CreatePageRevisionFromRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Publish before event\n const beforeEvent = new PageBeforeCreateRevisionFromEvent({\n params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the create revision operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n const page = result.value;\n\n // Publish after event\n const afterEvent = new PageAfterCreateRevisionFromEvent({\n page\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(page);\n }\n}\n\nexport const CreatePageRevisionFromUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreatePageRevisionFromUseCaseImpl,\n dependencies: [EventPublisher, CreatePageRevisionFromRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,6BAA6B,IAAIC,kBAAkB,EACnDC,gCAAgC;AAEpC,SAASC,iCAAiC,EAAEC,gCAAgC;AAE5E,MAAMC,iCAAiC,CAAyC;EAC5EC,WAAWA,CACCC,cAAmD,EACnDC,UAAsD,EAChE;IAAA,KAFUD,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,UAAsD,GAAtDA,UAAsD;EAC/D;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE;IACA,MAAMC,WAAW,GAAG,IAAIR,iCAAiC,CAAC;MACtDO;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACH,cAAc,CAACK,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACL,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIG,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,IAAI,GAAGF,MAAM,CAACG,KAAK;;IAEzB;IACA,MAAMC,UAAU,GAAG,IAAIb,gCAAgC,CAAC;MACpDW;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACR,cAAc,CAACK,OAAO,CAACK,UAAU,CAAC;IAE7C,OAAOnB,MAAM,CAACoB,EAAE,CAACH,IAAI,CAAC;EAC1B;AACJ;AAEA,OAAO,MAAMf,6BAA6B,GAAGC,kBAAkB,CAACkB,oBAAoB,CAAC;EACjFC,cAAc,EAAEf,iCAAiC;EACjDgB,YAAY,EAAE,CAACtB,cAAc,EAAEG,gCAAgC;AACnE,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","EventPublisher","CreatePageRevisionFromUseCase","UseCaseAbstraction","CreatePageRevisionFromRepository","PageBeforeCreateRevisionFromEvent","PageAfterCreateRevisionFromEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","CreatePageRevisionFromUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canCreate","fail","getResult","id","isFail","beforeEvent","publish","result","page","value","afterEvent","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["CreatePageRevisionFromUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromRepository\n} from \"./abstractions.js\";\nimport { PageBeforeCreateRevisionFromEvent, PageAfterCreateRevisionFromEvent } 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 CreatePageRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: CreatePageRevisionFromRepository.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 // Verify ownership of the source page\n const getResult = await this.getPageById.execute(params.id);\n if (getResult.isFail()) {\n return getResult;\n }\n\n // Publish before event\n const beforeEvent = new PageBeforeCreateRevisionFromEvent({\n params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the create revision operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n const page = result.value;\n\n // Publish after event\n const afterEvent = new PageAfterCreateRevisionFromEvent({\n page\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(page);\n }\n}\n\nexport const CreatePageRevisionFromUseCase = UseCaseAbstraction.createImplementation({\n implementation: CreatePageRevisionFromUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n CreatePageRevisionFromRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,6BAA6B,IAAIC,kBAAkB,EACnDC,gCAAgC;AAEpC,SAASC,iCAAiC,EAAEC,gCAAgC;AAC5E,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,iCAAiC,CAAyC;EAC5EC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAAsD,EAChE;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAAsD,GAAtDA,UAAsD;EAC/D;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,OAAOlB,MAAM,CAACoB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMY,SAAS,GAAG,MAAM,IAAI,CAACP,WAAW,CAACE,OAAO,CAACC,MAAM,CAACK,EAAE,CAAC;IAC3D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;;IAEA;IACA,MAAMG,WAAW,GAAG,IAAInB,iCAAiC,CAAC;MACtDY;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACJ,cAAc,CAACY,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACX,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIS,MAAM,CAACH,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOG,MAAM;IACjB;IAEA,MAAMC,IAAI,GAAGD,MAAM,CAACE,KAAK;;IAEzB;IACA,MAAMC,UAAU,GAAG,IAAIvB,gCAAgC,CAAC;MACpDqB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACd,cAAc,CAACY,OAAO,CAACI,UAAU,CAAC;IAE7C,OAAO7B,MAAM,CAAC8B,EAAE,CAACH,IAAI,CAAC;EAC1B;AACJ;AAEA,OAAO,MAAMzB,6BAA6B,GAAGC,kBAAkB,CAAC4B,oBAAoB,CAAC;EACjFC,cAAc,EAAEtB,iCAAiC;EACjDuB,YAAY,EAAE,CACVzB,aAAa,CAAC0B,WAAW,EACzBjC,cAAc,EACdM,kBAAkB,EAClBH,gCAAgC;AAExC,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 { PageNotFoundError, PagePersistenceError, PageValidationError } from "../../../domain/page/errors.js";
5
+ import { PageNotFoundError, PagePersistenceError, PageValidationError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
6
6
  export interface ICreateWbPageRevisionFromParams {
7
7
  id: string;
8
8
  }
@@ -26,6 +26,7 @@ export interface ICreatePageRevisionFromUseCase {
26
26
  execute(params: ICreateWbPageRevisionFromParams): Promise<Result<WbPage, UseCaseError>>;
27
27
  }
28
28
  export interface ICreatePageRevisionFromUseCaseErrors {
29
+ notAuthorized: PageNotAuthorizedError;
29
30
  validation: PageValidationError;
30
31
  notFound: PageNotFoundError;
31
32
  persistence: PagePersistenceError;
@@ -45,14 +46,14 @@ export interface PageBeforeCreateRevisionFromPayload {
45
46
  export interface PageAfterCreateRevisionFromPayload {
46
47
  page: WbPage;
47
48
  }
48
- export declare const PageBeforeCreateRevisionFromHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>>;
49
- export declare namespace PageBeforeCreateRevisionFromHandler {
49
+ export declare const PageBeforeCreateRevisionFromEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>>;
50
+ export declare namespace PageBeforeCreateRevisionFromEventHandler {
50
51
  type Interface = IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>;
51
52
  type Event = DomainEvent<PageBeforeCreateRevisionFromPayload>;
52
53
  type Page = WbPage;
53
54
  }
54
- export declare const PageAfterCreateRevisionFromHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>>;
55
- export declare namespace PageAfterCreateRevisionFromHandler {
55
+ export declare const PageAfterCreateRevisionFromEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>>;
56
+ export declare namespace PageAfterCreateRevisionFromEventHandler {
56
57
  type Interface = IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>;
57
58
  type Event = DomainEvent<PageAfterCreateRevisionFromPayload>;
58
59
  type Page = WbPage;
@@ -24,7 +24,7 @@ export const CreatePageRevisionFromUseCase = createAbstraction("Wb/CreatePageRev
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const PageBeforeCreateRevisionFromHandler = createAbstraction("Wb/PageBeforeCreateRevisionFromHandler");
28
- export const PageAfterCreateRevisionFromHandler = createAbstraction("Wb/PageAfterCreateRevisionFromHandler");
27
+ export const PageBeforeCreateRevisionFromEventHandler = createAbstraction("Wb/PageBeforeCreateRevisionFromEventHandler");
28
+ export const PageAfterCreateRevisionFromEventHandler = createAbstraction("Wb/PageAfterCreateRevisionFromEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","PageBeforeCreateRevisionFromHandler","PageAfterCreateRevisionFromHandler"],"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 PageNotFoundError,\n PagePersistenceError,\n PageValidationError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface ICreateWbPageRevisionFromParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface ICreatePageRevisionFromRepository {\n execute(params: ICreateWbPageRevisionFromParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface ICreatePageRevisionFromRepositoryErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError =\n ICreatePageRevisionFromRepositoryErrors[keyof ICreatePageRevisionFromRepositoryErrors];\n\nexport const CreatePageRevisionFromRepository =\n createAbstraction<ICreatePageRevisionFromRepository>(\"Wb/CreatePageRevisionFromRepository\");\n\nexport namespace CreatePageRevisionFromRepository {\n export type Interface = ICreatePageRevisionFromRepository;\n export type Params = ICreateWbPageRevisionFromParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface ICreatePageRevisionFromUseCase {\n execute(params: ICreateWbPageRevisionFromParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface ICreatePageRevisionFromUseCaseErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError =\n ICreatePageRevisionFromUseCaseErrors[keyof ICreatePageRevisionFromUseCaseErrors];\n\nexport const CreatePageRevisionFromUseCase = createAbstraction<ICreatePageRevisionFromUseCase>(\n \"Wb/CreatePageRevisionFromUseCase\"\n);\n\nexport namespace CreatePageRevisionFromUseCase {\n export type Interface = ICreatePageRevisionFromUseCase;\n export type Params = ICreateWbPageRevisionFromParams;\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 PageBeforeCreateRevisionFromPayload {\n params: ICreateWbPageRevisionFromParams;\n}\n\nexport interface PageAfterCreateRevisionFromPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeCreateRevisionFromHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>\n>(\"Wb/PageBeforeCreateRevisionFromHandler\");\n\nexport namespace PageBeforeCreateRevisionFromHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>;\n export type Event = DomainEvent<PageBeforeCreateRevisionFromPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterCreateRevisionFromHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>\n>(\"Wb/PageAfterCreateRevisionFromHandler\");\n\nexport namespace PageAfterCreateRevisionFromHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>;\n export type Event = DomainEvent<PageAfterCreateRevisionFromPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAeA,OAAO,MAAMC,gCAAgC,GACzCD,iBAAiB,CAAoC,qCAAqC,CAAC;;AAS/F;AACA;AACA;;AAeA,OAAO,MAAME,6BAA6B,GAAGF,iBAAiB,CAC1D,kCACJ,CAAC;;AAUD;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,mCAAmC,GAAGH,iBAAiB,CAElE,wCAAwC,CAAC;AAQ3C,OAAO,MAAMI,kCAAkC,GAAGJ,iBAAiB,CAEjE,uCAAuC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","PageBeforeCreateRevisionFromEventHandler","PageAfterCreateRevisionFromEventHandler"],"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 PageNotFoundError,\n PagePersistenceError,\n PageValidationError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface ICreateWbPageRevisionFromParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface ICreatePageRevisionFromRepository {\n execute(params: ICreateWbPageRevisionFromParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface ICreatePageRevisionFromRepositoryErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError =\n ICreatePageRevisionFromRepositoryErrors[keyof ICreatePageRevisionFromRepositoryErrors];\n\nexport const CreatePageRevisionFromRepository =\n createAbstraction<ICreatePageRevisionFromRepository>(\"Wb/CreatePageRevisionFromRepository\");\n\nexport namespace CreatePageRevisionFromRepository {\n export type Interface = ICreatePageRevisionFromRepository;\n export type Params = ICreateWbPageRevisionFromParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface ICreatePageRevisionFromUseCase {\n execute(params: ICreateWbPageRevisionFromParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface ICreatePageRevisionFromUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError =\n ICreatePageRevisionFromUseCaseErrors[keyof ICreatePageRevisionFromUseCaseErrors];\n\nexport const CreatePageRevisionFromUseCase = createAbstraction<ICreatePageRevisionFromUseCase>(\n \"Wb/CreatePageRevisionFromUseCase\"\n);\n\nexport namespace CreatePageRevisionFromUseCase {\n export type Interface = ICreatePageRevisionFromUseCase;\n export type Params = ICreateWbPageRevisionFromParams;\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 PageBeforeCreateRevisionFromPayload {\n params: ICreateWbPageRevisionFromParams;\n}\n\nexport interface PageAfterCreateRevisionFromPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeCreateRevisionFromEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>\n>(\"Wb/PageBeforeCreateRevisionFromEventHandler\");\n\nexport namespace PageBeforeCreateRevisionFromEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeCreateRevisionFromPayload>>;\n export type Event = DomainEvent<PageBeforeCreateRevisionFromPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterCreateRevisionFromEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>\n>(\"Wb/PageAfterCreateRevisionFromEventHandler\");\n\nexport namespace PageAfterCreateRevisionFromEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterCreateRevisionFromPayload>>;\n export type Event = DomainEvent<PageAfterCreateRevisionFromPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAWpE;AACA;AACA;;AAMA;AACA;AACA;;AAeA,OAAO,MAAMC,gCAAgC,GACzCD,iBAAiB,CAAoC,qCAAqC,CAAC;;AAS/F;AACA;AACA;;AAgBA,OAAO,MAAME,6BAA6B,GAAGF,iBAAiB,CAC1D,kCACJ,CAAC;;AAUD;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,wCAAwC,GAAGH,iBAAiB,CAEvE,6CAA6C,CAAC;AAQhD,OAAO,MAAMI,uCAAuC,GAAGJ,iBAAiB,CAEtE,4CAA4C,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { PageBeforeCreateRevisionFromHandler, PageAfterCreateRevisionFromHandler } from "./abstractions.js";
2
+ import { PageBeforeCreateRevisionFromEventHandler, PageAfterCreateRevisionFromEventHandler } from "./abstractions.js";
3
3
  // PageBeforeCreateRevisionFrom Event
4
4
  export class PageBeforeCreateRevisionFromEvent extends DomainEvent {
5
5
  eventType = "page.beforeCreateRevisionFrom";
6
6
  getHandlerAbstraction() {
7
- return PageBeforeCreateRevisionFromHandler;
7
+ return PageBeforeCreateRevisionFromEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforeCreateRevisionFromEvent extends DomainEvent {
12
12
  export class PageAfterCreateRevisionFromEvent extends DomainEvent {
13
13
  eventType = "page.afterCreateRevisionFrom";
14
14
  getHandlerAbstraction() {
15
- return PageAfterCreateRevisionFromHandler;
15
+ return PageAfterCreateRevisionFromEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforeCreateRevisionFromHandler","PageAfterCreateRevisionFromHandler","PageBeforeCreateRevisionFromEvent","eventType","getHandlerAbstraction","PageAfterCreateRevisionFromEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport {\n PageBeforeCreateRevisionFromHandler,\n PageAfterCreateRevisionFromHandler\n} from \"./abstractions.js\";\nimport type {\n PageBeforeCreateRevisionFromPayload,\n PageAfterCreateRevisionFromPayload\n} from \"./abstractions.js\";\n\n// PageBeforeCreateRevisionFrom Event\nexport class PageBeforeCreateRevisionFromEvent extends DomainEvent<PageBeforeCreateRevisionFromPayload> {\n eventType = \"page.beforeCreateRevisionFrom\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeCreateRevisionFromHandler;\n }\n}\n\n// PageAfterCreateRevisionFrom Event\nexport class PageAfterCreateRevisionFromEvent extends DomainEvent<PageAfterCreateRevisionFromPayload> {\n eventType = \"page.afterCreateRevisionFrom\" as const;\n\n getHandlerAbstraction() {\n return PageAfterCreateRevisionFromHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SACIC,mCAAmC,EACnCC,kCAAkC;AAOtC;AACA,OAAO,MAAMC,iCAAiC,SAASH,WAAW,CAAsC;EACpGI,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,mCAAmC;EAC9C;AACJ;;AAEA;AACA,OAAO,MAAMK,gCAAgC,SAASN,WAAW,CAAqC;EAClGI,SAAS,GAAG,8BAA8B;EAE1CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,kCAAkC;EAC7C;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","PageBeforeCreateRevisionFromEventHandler","PageAfterCreateRevisionFromEventHandler","PageBeforeCreateRevisionFromEvent","eventType","getHandlerAbstraction","PageAfterCreateRevisionFromEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport {\n PageBeforeCreateRevisionFromEventHandler,\n PageAfterCreateRevisionFromEventHandler\n} from \"./abstractions.js\";\nimport type {\n PageBeforeCreateRevisionFromPayload,\n PageAfterCreateRevisionFromPayload\n} from \"./abstractions.js\";\n\n// PageBeforeCreateRevisionFrom Event\nexport class PageBeforeCreateRevisionFromEvent extends DomainEvent<PageBeforeCreateRevisionFromPayload> {\n eventType = \"page.beforeCreateRevisionFrom\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeCreateRevisionFromEventHandler;\n }\n}\n\n// PageAfterCreateRevisionFrom Event\nexport class PageAfterCreateRevisionFromEvent extends DomainEvent<PageAfterCreateRevisionFromPayload> {\n eventType = \"page.afterCreateRevisionFrom\" as const;\n\n getHandlerAbstraction() {\n return PageAfterCreateRevisionFromEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SACIC,wCAAwC,EACxCC,uCAAuC;AAO3C;AACA,OAAO,MAAMC,iCAAiC,SAASH,WAAW,CAAsC;EACpGI,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,wCAAwC;EACnD;AACJ;;AAEA;AACA,OAAO,MAAMK,gCAAgC,SAASN,WAAW,CAAqC;EAClGI,SAAS,GAAG,8BAA8B;EAE1CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,uCAAuC;EAClD;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { PageAfterCreateRevisionFromHandler, PageBeforeCreateRevisionFromHandler, CreatePageRevisionFromUseCase } from "./abstractions.js";
1
+ export { PageAfterCreateRevisionFromEventHandler, PageBeforeCreateRevisionFromEventHandler, CreatePageRevisionFromUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterCreateRevisionFromHandler, PageBeforeCreateRevisionFromHandler, CreatePageRevisionFromUseCase } from "./abstractions.js";
1
+ export { PageAfterCreateRevisionFromEventHandler, PageBeforeCreateRevisionFromEventHandler, CreatePageRevisionFromUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterCreateRevisionFromHandler","PageBeforeCreateRevisionFromHandler","CreatePageRevisionFromUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterCreateRevisionFromHandler,\n PageBeforeCreateRevisionFromHandler,\n CreatePageRevisionFromUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,kCAAkC,EAClCC,mCAAmC,EACnCC,6BAA6B","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterCreateRevisionFromEventHandler","PageBeforeCreateRevisionFromEventHandler","CreatePageRevisionFromUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterCreateRevisionFromEventHandler,\n PageBeforeCreateRevisionFromEventHandler,\n CreatePageRevisionFromUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,uCAAuC,EACvCC,wCAAwC,EACxCC,6BAA6B","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { DeletePageUseCase as UseCaseAbstraction, DeletePageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class DeletePageUseCaseImpl 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: DeletePageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: DeletePageRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const DeletePageUseCase: typeof DeletePageUseCaseImpl & {
@@ -3,19 +3,26 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { DeletePageUseCase as UseCaseAbstraction, DeletePageRepository } from "./abstractions.js";
4
4
  import { PageBeforeDeleteEvent, PageAfterDeleteEvent } 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 DeletePageUseCaseImpl {
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) {
13
- // Get the page first to include in events
16
+ // Get the page first to include in events and for item-level permission check
14
17
  const getResult = await this.getPageById.execute(params.id);
15
18
  if (getResult.isFail()) {
16
19
  return Result.fail(getResult.error);
17
20
  }
18
21
  const page = getResult.value;
22
+ const canDelete = await this.permissions.canDelete("page", page);
23
+ if (!canDelete) {
24
+ return Result.fail(new PageNotAuthorizedError());
25
+ }
19
26
 
20
27
  // Publish before delete event
21
28
  const beforeEvent = new PageBeforeDeleteEvent({
@@ -39,7 +46,7 @@ class DeletePageUseCaseImpl {
39
46
  }
40
47
  export const DeletePageUseCase = UseCaseAbstraction.createImplementation({
41
48
  implementation: DeletePageUseCaseImpl,
42
- dependencies: [EventPublisher, GetPageByIdUseCase, DeletePageRepository]
49
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, DeletePageRepository]
43
50
  });
44
51
 
45
52
  //# sourceMappingURL=DeletePageUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","EventPublisher","DeletePageUseCase","UseCaseAbstraction","DeletePageRepository","PageBeforeDeleteEvent","PageAfterDeleteEvent","GetPageByIdUseCase","DeletePageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","fail","error","page","value","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies"],"sources":["DeletePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { DeletePageUseCase as UseCaseAbstraction, DeletePageRepository } from \"./abstractions.js\";\nimport { PageBeforeDeleteEvent, PageAfterDeleteEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass DeletePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: DeletePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first to include in events\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return Result.fail(getResult.error);\n }\n\n const page = getResult.value;\n\n // Publish before delete event\n const beforeEvent = new PageBeforeDeleteEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the delete operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after delete event\n const afterEvent = new PageAfterDeleteEvent({\n page\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok();\n }\n}\n\nexport const DeletePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: DeletePageUseCaseImpl,\n dependencies: [EventPublisher, GetPageByIdUseCase, DeletePageRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,iBAAiB,IAAIC,kBAAkB,EAAEC,oBAAoB;AACtE,SAASC,qBAAqB,EAAEC,oBAAoB;AACpD,SAASC,kBAAkB;AAE3B,MAAMC,qBAAqB,CAAyC;EAChEC,WAAWA,CACCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA0C,EACpD;IAAA,KAHUF,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA0C,GAA1CA,UAA0C;EACnD;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,OAAOjB,MAAM,CAACkB,IAAI,CAACH,SAAS,CAACI,KAAK,CAAC;IACvC;IAEA,MAAMC,IAAI,GAAGL,SAAS,CAACM,KAAK;;IAE5B;IACA,MAAMC,WAAW,GAAG,IAAIjB,qBAAqB,CAAC;MAC1Ce;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACV,cAAc,CAACa,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACZ,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIU,MAAM,CAACP,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOO,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAInB,oBAAoB,CAAC;MACxCc;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACV,cAAc,CAACa,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOzB,MAAM,CAAC0B,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,OAAO,MAAMxB,iBAAiB,GAAGC,kBAAkB,CAACwB,oBAAoB,CAAC;EACrEC,cAAc,EAAEpB,qBAAqB;EACrCqB,YAAY,EAAE,CAAC5B,cAAc,EAAEM,kBAAkB,EAAEH,oBAAoB;AAC3E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","EventPublisher","DeletePageUseCase","UseCaseAbstraction","DeletePageRepository","PageBeforeDeleteEvent","PageAfterDeleteEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","DeletePageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","fail","error","page","value","canDelete","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["DeletePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { DeletePageUseCase as UseCaseAbstraction, DeletePageRepository } from \"./abstractions.js\";\nimport { PageBeforeDeleteEvent, PageAfterDeleteEvent } 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 DeletePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: DeletePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first to include in events and for item-level permission check\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return Result.fail(getResult.error);\n }\n\n const page = getResult.value;\n\n const canDelete = await this.permissions.canDelete(\"page\", page);\n if (!canDelete) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before delete event\n const beforeEvent = new PageBeforeDeleteEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the delete operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after delete event\n const afterEvent = new PageAfterDeleteEvent({\n page\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok();\n }\n}\n\nexport const DeletePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: DeletePageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n DeletePageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,iBAAiB,IAAIC,kBAAkB,EAAEC,oBAAoB;AACtE,SAASC,qBAAqB,EAAEC,oBAAoB;AACpD,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,qBAAqB,CAAyC;EAChEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA0C,EACpD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA0C,GAA1CA,UAA0C;EACnD;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,OAAOpB,MAAM,CAACqB,IAAI,CAACH,SAAS,CAACI,KAAK,CAAC;IACvC;IAEA,MAAMC,IAAI,GAAGL,SAAS,CAACM,KAAK;IAE5B,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACb,WAAW,CAACa,SAAS,CAAC,MAAM,EAAEF,IAAI,CAAC;IAChE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAOzB,MAAM,CAACqB,IAAI,CAAC,IAAIZ,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMiB,WAAW,GAAG,IAAIrB,qBAAqB,CAAC;MAC1CkB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACV,cAAc,CAACc,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACb,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIW,MAAM,CAACR,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOQ,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIvB,oBAAoB,CAAC;MACxCiB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACV,cAAc,CAACc,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO7B,MAAM,CAAC8B,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,OAAO,MAAM5B,iBAAiB,GAAGC,kBAAkB,CAAC4B,oBAAoB,CAAC;EACrEC,cAAc,EAAEtB,qBAAqB;EACrCuB,YAAY,EAAE,CACVzB,aAAa,CAAC0B,WAAW,EACzBjC,cAAc,EACdM,kBAAkB,EAClBH,oBAAoB;AAE5B,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 { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
5
+ import { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
6
6
  export interface IDeleteWbPageParams {
7
7
  id: string;
8
8
  }
@@ -25,6 +25,7 @@ export interface IDeletePageUseCase {
25
25
  execute(params: IDeleteWbPageParams): Promise<Result<void, UseCaseError>>;
26
26
  }
27
27
  export interface IDeletePageUseCaseErrors {
28
+ notAuthorized: PageNotAuthorizedError;
28
29
  notFound: PageNotFoundError;
29
30
  persistence: PagePersistenceError;
30
31
  }
@@ -42,14 +43,14 @@ export interface PageBeforeDeletePayload {
42
43
  export interface PageAfterDeletePayload {
43
44
  page: WbPage;
44
45
  }
45
- export declare const PageBeforeDeleteHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeDeletePayload>>>;
46
- export declare namespace PageBeforeDeleteHandler {
46
+ export declare const PageBeforeDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeDeletePayload>>>;
47
+ export declare namespace PageBeforeDeleteEventHandler {
47
48
  type Interface = IEventHandler<DomainEvent<PageBeforeDeletePayload>>;
48
49
  type Event = DomainEvent<PageBeforeDeletePayload>;
49
50
  type Page = WbPage;
50
51
  }
51
- export declare const PageAfterDeleteHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterDeletePayload>>>;
52
- export declare namespace PageAfterDeleteHandler {
52
+ export declare const PageAfterDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterDeletePayload>>>;
53
+ export declare namespace PageAfterDeleteEventHandler {
53
54
  type Interface = IEventHandler<DomainEvent<PageAfterDeletePayload>>;
54
55
  type Event = DomainEvent<PageAfterDeletePayload>;
55
56
  type Page = WbPage;
@@ -24,7 +24,7 @@ export const DeletePageUseCase = createAbstraction("Wb/DeletePageUseCase");
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const PageBeforeDeleteHandler = createAbstraction("Wb/PageBeforeDeleteHandler");
28
- export const PageAfterDeleteHandler = createAbstraction("Wb/PageAfterDeleteHandler");
27
+ export const PageBeforeDeleteEventHandler = createAbstraction("Wb/PageBeforeDeleteEventHandler");
28
+ export const PageAfterDeleteEventHandler = createAbstraction("Wb/PageAfterDeleteEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DeletePageRepository","DeletePageUseCase","PageBeforeDeleteHandler","PageAfterDeleteHandler"],"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 { PageNotFoundError, PagePersistenceError } from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IDeleteWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IDeletePageRepository {\n execute(params: IDeleteWbPageParams): Promise<Result<void, RepositoryError>>;\n}\n\nexport interface IDeletePageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IDeletePageRepositoryErrors[keyof IDeletePageRepositoryErrors];\n\nexport const DeletePageRepository =\n createAbstraction<IDeletePageRepository>(\"Wb/DeletePageRepository\");\n\nexport namespace DeletePageRepository {\n export type Interface = IDeletePageRepository;\n export type Params = IDeleteWbPageParams;\n export type Return = Promise<Result<void, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IDeletePageUseCase {\n execute(params: IDeleteWbPageParams): Promise<Result<void, UseCaseError>>;\n}\n\nexport interface IDeletePageUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IDeletePageUseCaseErrors[keyof IDeletePageUseCaseErrors];\n\nexport const DeletePageUseCase = createAbstraction<IDeletePageUseCase>(\"Wb/DeletePageUseCase\");\n\nexport namespace DeletePageUseCase {\n export type Interface = IDeletePageUseCase;\n export type Params = IDeleteWbPageParams;\n export type Return = Promise<Result<void, UseCaseError>>;\n export type Error = UseCaseError;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeDeletePayload {\n page: WbPage;\n}\n\nexport interface PageAfterDeletePayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeDeleteHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeDeletePayload>>\n>(\"Wb/PageBeforeDeleteHandler\");\n\nexport namespace PageBeforeDeleteHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeDeletePayload>>;\n export type Event = DomainEvent<PageBeforeDeletePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterDeleteHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterDeletePayload>>\n>(\"Wb/PageAfterDeleteHandler\");\n\nexport namespace PageAfterDeleteHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterDeletePayload>>;\n export type Event = DomainEvent<PageAfterDeletePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAMpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,yBAAyB,CAAC;;AASvE;AACA;AACA;;AAaA,OAAO,MAAME,iBAAiB,GAAGF,iBAAiB,CAAqB,sBAAsB,CAAC;;AAS9F;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,uBAAuB,GAAGH,iBAAiB,CAEtD,4BAA4B,CAAC;AAQ/B,OAAO,MAAMI,sBAAsB,GAAGJ,iBAAiB,CAErD,2BAA2B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","DeletePageRepository","DeletePageUseCase","PageBeforeDeleteEventHandler","PageAfterDeleteEventHandler"],"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 PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IDeleteWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IDeletePageRepository {\n execute(params: IDeleteWbPageParams): Promise<Result<void, RepositoryError>>;\n}\n\nexport interface IDeletePageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IDeletePageRepositoryErrors[keyof IDeletePageRepositoryErrors];\n\nexport const DeletePageRepository =\n createAbstraction<IDeletePageRepository>(\"Wb/DeletePageRepository\");\n\nexport namespace DeletePageRepository {\n export type Interface = IDeletePageRepository;\n export type Params = IDeleteWbPageParams;\n export type Return = Promise<Result<void, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IDeletePageUseCase {\n execute(params: IDeleteWbPageParams): Promise<Result<void, UseCaseError>>;\n}\n\nexport interface IDeletePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IDeletePageUseCaseErrors[keyof IDeletePageUseCaseErrors];\n\nexport const DeletePageUseCase = createAbstraction<IDeletePageUseCase>(\"Wb/DeletePageUseCase\");\n\nexport namespace DeletePageUseCase {\n export type Interface = IDeletePageUseCase;\n export type Params = IDeleteWbPageParams;\n export type Return = Promise<Result<void, UseCaseError>>;\n export type Error = UseCaseError;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeDeletePayload {\n page: WbPage;\n}\n\nexport interface PageAfterDeletePayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeDeletePayload>>\n>(\"Wb/PageBeforeDeleteEventHandler\");\n\nexport namespace PageBeforeDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeDeletePayload>>;\n export type Event = DomainEvent<PageBeforeDeletePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterDeleteEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterDeletePayload>>\n>(\"Wb/PageAfterDeleteEventHandler\");\n\nexport namespace PageAfterDeleteEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterDeletePayload>>;\n export type Event = DomainEvent<PageAfterDeletePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,yBAAyB,CAAC;;AASvE;AACA;AACA;;AAcA,OAAO,MAAME,iBAAiB,GAAGF,iBAAiB,CAAqB,sBAAsB,CAAC;;AAS9F;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,4BAA4B,GAAGH,iBAAiB,CAE3D,iCAAiC,CAAC;AAQpC,OAAO,MAAMI,2BAA2B,GAAGJ,iBAAiB,CAE1D,gCAAgC,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { PageBeforeDeleteHandler, PageAfterDeleteHandler } from "./abstractions.js";
2
+ import { PageBeforeDeleteEventHandler, PageAfterDeleteEventHandler } from "./abstractions.js";
3
3
  // PageBeforeDelete Event
4
4
  export class PageBeforeDeleteEvent extends DomainEvent {
5
5
  eventType = "page.beforeDelete";
6
6
  getHandlerAbstraction() {
7
- return PageBeforeDeleteHandler;
7
+ return PageBeforeDeleteEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforeDeleteEvent extends DomainEvent {
12
12
  export class PageAfterDeleteEvent extends DomainEvent {
13
13
  eventType = "page.afterDelete";
14
14
  getHandlerAbstraction() {
15
- return PageAfterDeleteHandler;
15
+ return PageAfterDeleteEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforeDeleteHandler","PageAfterDeleteHandler","PageBeforeDeleteEvent","eventType","getHandlerAbstraction","PageAfterDeleteEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeDeleteHandler, PageAfterDeleteHandler } from \"./abstractions.js\";\nimport type { PageBeforeDeletePayload, PageAfterDeletePayload } from \"./abstractions.js\";\n\n// PageBeforeDelete Event\nexport class PageBeforeDeleteEvent extends DomainEvent<PageBeforeDeletePayload> {\n eventType = \"page.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeDeleteHandler;\n }\n}\n\n// PageAfterDelete Event\nexport class PageAfterDeleteEvent extends DomainEvent<PageAfterDeletePayload> {\n eventType = \"page.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return PageAfterDeleteHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,uBAAuB,EAAEC,sBAAsB;AAGxD;AACA,OAAO,MAAMC,qBAAqB,SAASH,WAAW,CAA0B;EAC5EI,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,uBAAuB;EAClC;AACJ;;AAEA;AACA,OAAO,MAAMK,oBAAoB,SAASN,WAAW,CAAyB;EAC1EI,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,sBAAsB;EACjC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","PageBeforeDeleteEventHandler","PageAfterDeleteEventHandler","PageBeforeDeleteEvent","eventType","getHandlerAbstraction","PageAfterDeleteEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeDeleteEventHandler, PageAfterDeleteEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeDeletePayload, PageAfterDeletePayload } from \"./abstractions.js\";\n\n// PageBeforeDelete Event\nexport class PageBeforeDeleteEvent extends DomainEvent<PageBeforeDeletePayload> {\n eventType = \"page.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeDeleteEventHandler;\n }\n}\n\n// PageAfterDelete Event\nexport class PageAfterDeleteEvent extends DomainEvent<PageAfterDeletePayload> {\n eventType = \"page.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return PageAfterDeleteEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,4BAA4B,EAAEC,2BAA2B;AAGlE;AACA,OAAO,MAAMC,qBAAqB,SAASH,WAAW,CAA0B;EAC5EI,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMK,oBAAoB,SAASN,WAAW,CAAyB;EAC1EI,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,2BAA2B;EACtC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { PageAfterDeleteHandler, PageBeforeDeleteHandler, DeletePageUseCase } from "./abstractions.js";
1
+ export { PageAfterDeleteEventHandler, PageBeforeDeleteEventHandler, DeletePageUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterDeleteHandler, PageBeforeDeleteHandler, DeletePageUseCase } from "./abstractions.js";
1
+ export { PageAfterDeleteEventHandler, PageBeforeDeleteEventHandler, DeletePageUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterDeleteHandler","PageBeforeDeleteHandler","DeletePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterDeleteHandler,\n PageBeforeDeleteHandler,\n DeletePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,sBAAsB,EACtBC,uBAAuB,EACvBC,iBAAiB","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterDeleteEventHandler","PageBeforeDeleteEventHandler","DeletePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterDeleteEventHandler,\n PageBeforeDeleteEventHandler,\n DeletePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,2BAA2B,EAC3BC,4BAA4B,EAC5BC,iBAAiB","ignoreList":[]}
@@ -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;
@@ -46,14 +47,14 @@ export interface PageAfterDuplicatePayload {
46
47
  original: WbPage;
47
48
  page: WbPage;
48
49
  }
49
- export declare const PageBeforeDuplicateHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>>;
50
- export declare namespace PageBeforeDuplicateHandler {
50
+ export declare const PageBeforeDuplicateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>>;
51
+ export declare namespace PageBeforeDuplicateEventHandler {
51
52
  type Interface = IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>;
52
53
  type Event = DomainEvent<PageBeforeDuplicatePayload>;
53
54
  type Page = WbPage;
54
55
  }
55
- export declare const PageAfterDuplicateHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterDuplicatePayload>>>;
56
- export declare namespace PageAfterDuplicateHandler {
56
+ export declare const PageAfterDuplicateEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterDuplicatePayload>>>;
57
+ export declare namespace PageAfterDuplicateEventHandler {
57
58
  type Interface = IEventHandler<DomainEvent<PageAfterDuplicatePayload>>;
58
59
  type Event = DomainEvent<PageAfterDuplicatePayload>;
59
60
  type Page = WbPage;
@@ -24,7 +24,7 @@ export const DuplicatePageUseCase = createAbstraction("Wb/DuplicatePageUseCase")
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const PageBeforeDuplicateHandler = createAbstraction("Wb/PageBeforeDuplicateHandler");
28
- export const PageAfterDuplicateHandler = createAbstraction("Wb/PageAfterDuplicateHandler");
27
+ export const PageBeforeDuplicateEventHandler = createAbstraction("Wb/PageBeforeDuplicateEventHandler");
28
+ export const PageAfterDuplicateEventHandler = createAbstraction("Wb/PageAfterDuplicateEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -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","PageBeforeDuplicateEventHandler","PageAfterDuplicateEventHandler"],"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 PageBeforeDuplicateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>\n>(\"Wb/PageBeforeDuplicateEventHandler\");\n\nexport namespace PageBeforeDuplicateEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeDuplicatePayload>>;\n export type Event = DomainEvent<PageBeforeDuplicatePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterDuplicateEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterDuplicatePayload>>\n>(\"Wb/PageAfterDuplicateEventHandler\");\n\nexport namespace PageAfterDuplicateEventHandler {\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,+BAA+B,GAAGH,iBAAiB,CAE9D,oCAAoC,CAAC;AAQvC,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,mCAAmC,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { PageBeforeDuplicateHandler, PageAfterDuplicateHandler } from "./abstractions.js";
2
+ import { PageBeforeDuplicateEventHandler, PageAfterDuplicateEventHandler } from "./abstractions.js";
3
3
  // PageBeforeDuplicate Event
4
4
  export class PageBeforeDuplicateEvent extends DomainEvent {
5
5
  eventType = "page.beforeDuplicate";
6
6
  getHandlerAbstraction() {
7
- return PageBeforeDuplicateHandler;
7
+ return PageBeforeDuplicateEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforeDuplicateEvent extends DomainEvent {
12
12
  export class PageAfterDuplicateEvent extends DomainEvent {
13
13
  eventType = "page.afterDuplicate";
14
14
  getHandlerAbstraction() {
15
- return PageAfterDuplicateHandler;
15
+ return PageAfterDuplicateEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforeDuplicateHandler","PageAfterDuplicateHandler","PageBeforeDuplicateEvent","eventType","getHandlerAbstraction","PageAfterDuplicateEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeDuplicateHandler, PageAfterDuplicateHandler } from \"./abstractions.js\";\nimport type { PageBeforeDuplicatePayload, PageAfterDuplicatePayload } from \"./abstractions.js\";\n\n// PageBeforeDuplicate Event\nexport class PageBeforeDuplicateEvent extends DomainEvent<PageBeforeDuplicatePayload> {\n eventType = \"page.beforeDuplicate\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeDuplicateHandler;\n }\n}\n\n// PageAfterDuplicate Event\nexport class PageAfterDuplicateEvent extends DomainEvent<PageAfterDuplicatePayload> {\n eventType = \"page.afterDuplicate\" as const;\n\n getHandlerAbstraction() {\n return PageAfterDuplicateHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,0BAA0B,EAAEC,yBAAyB;AAG9D;AACA,OAAO,MAAMC,wBAAwB,SAASH,WAAW,CAA6B;EAClFI,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,0BAA0B;EACrC;AACJ;;AAEA;AACA,OAAO,MAAMK,uBAAuB,SAASN,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,yBAAyB;EACpC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","PageBeforeDuplicateEventHandler","PageAfterDuplicateEventHandler","PageBeforeDuplicateEvent","eventType","getHandlerAbstraction","PageAfterDuplicateEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeDuplicateEventHandler, PageAfterDuplicateEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeDuplicatePayload, PageAfterDuplicatePayload } from \"./abstractions.js\";\n\n// PageBeforeDuplicate Event\nexport class PageBeforeDuplicateEvent extends DomainEvent<PageBeforeDuplicatePayload> {\n eventType = \"page.beforeDuplicate\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeDuplicateEventHandler;\n }\n}\n\n// PageAfterDuplicate Event\nexport class PageAfterDuplicateEvent extends DomainEvent<PageAfterDuplicatePayload> {\n eventType = \"page.afterDuplicate\" as const;\n\n getHandlerAbstraction() {\n return PageAfterDuplicateEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,+BAA+B,EAAEC,8BAA8B;AAGxE;AACA,OAAO,MAAMC,wBAAwB,SAASH,WAAW,CAA6B;EAClFI,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,+BAA+B;EAC1C;AACJ;;AAEA;AACA,OAAO,MAAMK,uBAAuB,SAASN,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,8BAA8B;EACzC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { PageAfterDuplicateHandler, PageBeforeDuplicateHandler, DuplicatePageUseCase } from "./abstractions.js";
1
+ export { PageAfterDuplicateEventHandler, PageBeforeDuplicateEventHandler, DuplicatePageUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterDuplicateHandler, PageBeforeDuplicateHandler, DuplicatePageUseCase } from "./abstractions.js";
1
+ export { PageAfterDuplicateEventHandler, PageBeforeDuplicateEventHandler, DuplicatePageUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterDuplicateHandler","PageBeforeDuplicateHandler","DuplicatePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterDuplicateHandler,\n PageBeforeDuplicateHandler,\n DuplicatePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,yBAAyB,EACzBC,0BAA0B,EAC1BC,oBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterDuplicateEventHandler","PageBeforeDuplicateEventHandler","DuplicatePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterDuplicateEventHandler,\n PageBeforeDuplicateEventHandler,\n DuplicatePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,8BAA8B,EAC9BC,+BAA+B,EAC/BC,oBAAoB","ignoreList":[]}