@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
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","PageBeforeMoveHandler","PageAfterMoveHandler"],"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 IMoveWbPageParams {\n id: string;\n folderId: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IMovePageRepository {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IMovePageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IMovePageRepositoryErrors[keyof IMovePageRepositoryErrors];\n\nexport const MovePageRepository = createAbstraction<IMovePageRepository>(\"Wb/MovePageRepository\");\n\nexport namespace MovePageRepository {\n export type Interface = IMovePageRepository;\n export type Params = IMoveWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IMovePageUseCase {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IMovePageUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IMovePageUseCaseErrors[keyof IMovePageUseCaseErrors];\n\nexport const MovePageUseCase = createAbstraction<IMovePageUseCase>(\"Wb/MovePageUseCase\");\n\nexport namespace MovePageUseCase {\n export type Interface = IMovePageUseCase;\n export type Params = IMoveWbPageParams;\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 PageBeforeMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n}\n\nexport interface PageAfterMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeMoveHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeMovePayload>>\n>(\"Wb/PageBeforeMoveHandler\");\n\nexport namespace PageBeforeMoveHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeMovePayload>>;\n export type Event = DomainEvent<PageBeforeMovePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterMoveHandler =\n createAbstraction<IEventHandler<DomainEvent<PageAfterMovePayload>>>(\"Wb/PageAfterMoveHandler\");\n\nexport namespace PageAfterMoveHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterMovePayload>>;\n export type Event = DomainEvent<PageAfterMovePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAMpE;AACA;AACA;;AAOA;AACA;AACA;;AAaA,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,uBAAuB,CAAC;;AASjG;AACA;AACA;;AAaA,OAAO,MAAME,eAAe,GAAGF,iBAAiB,CAAmB,oBAAoB,CAAC;;AAUxF;AACA;AACA;;AAaA;AACA;AACA;;AAEA,OAAO,MAAMG,qBAAqB,GAAGH,iBAAiB,CAEpD,0BAA0B,CAAC;AAQ7B,OAAO,MAAMI,oBAAoB,GAC7BJ,iBAAiB,CAAmD,yBAAyB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","PageBeforeMoveEventHandler","PageAfterMoveEventHandler"],"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 IMoveWbPageParams {\n id: string;\n folderId: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IMovePageRepository {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IMovePageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IMovePageRepositoryErrors[keyof IMovePageRepositoryErrors];\n\nexport const MovePageRepository = createAbstraction<IMovePageRepository>(\"Wb/MovePageRepository\");\n\nexport namespace MovePageRepository {\n export type Interface = IMovePageRepository;\n export type Params = IMoveWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IMovePageUseCase {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IMovePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IMovePageUseCaseErrors[keyof IMovePageUseCaseErrors];\n\nexport const MovePageUseCase = createAbstraction<IMovePageUseCase>(\"Wb/MovePageUseCase\");\n\nexport namespace MovePageUseCase {\n export type Interface = IMovePageUseCase;\n export type Params = IMoveWbPageParams;\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 PageBeforeMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n}\n\nexport interface PageAfterMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeMovePayload>>\n>(\"Wb/PageBeforeMoveEventHandler\");\n\nexport namespace PageBeforeMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeMovePayload>>;\n export type Event = DomainEvent<PageBeforeMovePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterMovePayload>>\n>(\"Wb/PageAfterMoveEventHandler\");\n\nexport namespace PageAfterMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterMovePayload>>;\n export type Event = DomainEvent<PageAfterMovePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAOA;AACA;AACA;;AAaA,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,uBAAuB,CAAC;;AASjG;AACA;AACA;;AAcA,OAAO,MAAME,eAAe,GAAGF,iBAAiB,CAAmB,oBAAoB,CAAC;;AAUxF;AACA;AACA;;AAaA;AACA;AACA;;AAEA,OAAO,MAAMG,0BAA0B,GAAGH,iBAAiB,CAEzD,+BAA+B,CAAC;AAQlC,OAAO,MAAMI,yBAAyB,GAAGJ,iBAAiB,CAExD,8BAA8B,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { PageBeforeMoveHandler, PageAfterMoveHandler } from "./abstractions.js";
2
+ import { PageBeforeMoveEventHandler, PageAfterMoveEventHandler } from "./abstractions.js";
3
3
  // PageBeforeMove Event
4
4
  export class PageBeforeMoveEvent extends DomainEvent {
5
5
  eventType = "page.beforeMove";
6
6
  getHandlerAbstraction() {
7
- return PageBeforeMoveHandler;
7
+ return PageBeforeMoveEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforeMoveEvent extends DomainEvent {
12
12
  export class PageAfterMoveEvent extends DomainEvent {
13
13
  eventType = "page.afterMove";
14
14
  getHandlerAbstraction() {
15
- return PageAfterMoveHandler;
15
+ return PageAfterMoveEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforeMoveHandler","PageAfterMoveHandler","PageBeforeMoveEvent","eventType","getHandlerAbstraction","PageAfterMoveEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeMoveHandler, PageAfterMoveHandler } from \"./abstractions.js\";\nimport type { PageBeforeMovePayload, PageAfterMovePayload } from \"./abstractions.js\";\n\n// PageBeforeMove Event\nexport class PageBeforeMoveEvent extends DomainEvent<PageBeforeMovePayload> {\n eventType = \"page.beforeMove\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeMoveHandler;\n }\n}\n\n// PageAfterMove Event\nexport class PageAfterMoveEvent extends DomainEvent<PageAfterMovePayload> {\n eventType = \"page.afterMove\" as const;\n\n getHandlerAbstraction() {\n return PageAfterMoveHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,qBAAqB,EAAEC,oBAAoB;AAGpD;AACA,OAAO,MAAMC,mBAAmB,SAASH,WAAW,CAAwB;EACxEI,SAAS,GAAG,iBAAiB;EAE7BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,qBAAqB;EAChC;AACJ;;AAEA;AACA,OAAO,MAAMK,kBAAkB,SAASN,WAAW,CAAuB;EACtEI,SAAS,GAAG,gBAAgB;EAE5BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,oBAAoB;EAC/B;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","PageBeforeMoveEventHandler","PageAfterMoveEventHandler","PageBeforeMoveEvent","eventType","getHandlerAbstraction","PageAfterMoveEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeMoveEventHandler, PageAfterMoveEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeMovePayload, PageAfterMovePayload } from \"./abstractions.js\";\n\n// PageBeforeMove Event\nexport class PageBeforeMoveEvent extends DomainEvent<PageBeforeMovePayload> {\n eventType = \"page.beforeMove\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeMoveEventHandler;\n }\n}\n\n// PageAfterMove Event\nexport class PageAfterMoveEvent extends DomainEvent<PageAfterMovePayload> {\n eventType = \"page.afterMove\" as const;\n\n getHandlerAbstraction() {\n return PageAfterMoveEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,0BAA0B,EAAEC,yBAAyB;AAG9D;AACA,OAAO,MAAMC,mBAAmB,SAASH,WAAW,CAAwB;EACxEI,SAAS,GAAG,iBAAiB;EAE7BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,0BAA0B;EACrC;AACJ;;AAEA;AACA,OAAO,MAAMK,kBAAkB,SAASN,WAAW,CAAuB;EACtEI,SAAS,GAAG,gBAAgB;EAE5BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,yBAAyB;EACpC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { PageAfterMoveHandler, PageBeforeMoveHandler, MovePageUseCase } from "./abstractions.js";
1
+ export { PageAfterMoveEventHandler, PageBeforeMoveEventHandler, MovePageUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterMoveHandler, PageBeforeMoveHandler, MovePageUseCase } from "./abstractions.js";
1
+ export { PageAfterMoveEventHandler, PageBeforeMoveEventHandler, MovePageUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterMoveHandler","PageBeforeMoveHandler","MovePageUseCase"],"sources":["index.ts"],"sourcesContent":["export { PageAfterMoveHandler, PageBeforeMoveHandler, MovePageUseCase } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,oBAAoB,EAAEC,qBAAqB,EAAEC,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterMoveEventHandler","PageBeforeMoveEventHandler","MovePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterMoveEventHandler,\n PageBeforeMoveEventHandler,\n MovePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,yBAAyB,EACzBC,0BAA0B,EAC1BC,eAAe","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class PublishPageUseCaseImpl 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: PublishPageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: PublishPageRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const PublishPageUseCase: import("@webiny/di").Implementation<typeof PublishPageUseCaseImpl>;
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from "./abstractions.js";
4
4
  import { PageBeforePublishEvent, PageAfterPublishEvent } 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 PublishPageUseCaseImpl {
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.canPublish("page");
17
+ if (!hasPermission) {
18
+ return Result.fail(new PageNotAuthorizedError());
19
+ }
20
+
13
21
  // Get the page first for the before event
14
22
  const getResult = await this.getPageById.execute(params.id);
15
23
  if (getResult.isFail()) {
16
24
  return getResult;
17
25
  }
18
26
  const page = getResult.value;
27
+ const canAccess = await this.permissions.canAccess("page", page);
28
+ if (!canAccess) {
29
+ return Result.fail(new PageNotAuthorizedError());
30
+ }
19
31
 
20
32
  // Publish before publish event
21
33
  const beforeEvent = new PageBeforePublishEvent({
@@ -40,7 +52,7 @@ class PublishPageUseCaseImpl {
40
52
  export const PublishPageUseCase = createImplementation({
41
53
  abstraction: UseCaseAbstraction,
42
54
  implementation: PublishPageUseCaseImpl,
43
- dependencies: [EventPublisher, GetPageByIdUseCase, PublishPageRepository]
55
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, PublishPageRepository]
44
56
  });
45
57
 
46
58
  //# sourceMappingURL=PublishPageUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","createImplementation","EventPublisher","PublishPageUseCase","UseCaseAbstraction","PublishPageRepository","PageBeforePublishEvent","PageAfterPublishEvent","GetPageByIdUseCase","PublishPageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","page","value","beforeEvent","publish","result","afterEvent","ok","abstraction","implementation","dependencies"],"sources":["PublishPageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from \"./abstractions.js\";\nimport { PageBeforePublishEvent, PageAfterPublishEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass PublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: PublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n // Publish before publish event\n const beforeEvent = new PageBeforePublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the publish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after publish event\n const afterEvent = new PageAfterPublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const PublishPageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishPageUseCaseImpl,\n dependencies: [EventPublisher, GetPageByIdUseCase, PublishPageRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AACxE,SAASC,sBAAsB,EAAEC,qBAAqB;AACtD,SAASC,kBAAkB;AAE3B,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CACCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA2C,EACrD;IAAA,KAHUF,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA2C,GAA3CA,UAA2C;EACpD;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,IAAI,GAAGH,SAAS,CAACI,KAAK;;IAE5B;IACA,MAAMC,WAAW,GAAG,IAAIf,sBAAsB,CAAC;MAC3Ca;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,qBAAqB,CAAC;MACzCY,IAAI,EAAEI,MAAM,CAACH;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACT,cAAc,CAACW,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOxB,MAAM,CAACyB,EAAE,CAACF,MAAM,CAACH,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMjB,kBAAkB,GAAGF,oBAAoB,CAAC;EACnDyB,WAAW,EAAEtB,kBAAkB;EAC/BuB,cAAc,EAAElB,sBAAsB;EACtCmB,YAAY,EAAE,CAAC1B,cAAc,EAAEM,kBAAkB,EAAEH,qBAAqB;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","createImplementation","EventPublisher","PublishPageUseCase","UseCaseAbstraction","PublishPageRepository","PageBeforePublishEvent","PageAfterPublishEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","PublishPageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canPublish","fail","getResult","id","isFail","page","value","canAccess","beforeEvent","publish","result","afterEvent","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["PublishPageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from \"./abstractions.js\";\nimport { PageBeforePublishEvent, PageAfterPublishEvent } 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 PublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: PublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canPublish(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n const canAccess = await this.permissions.canAccess(\"page\", page);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before publish event\n const beforeEvent = new PageBeforePublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the publish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after publish event\n const afterEvent = new PageAfterPublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const PublishPageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishPageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n PublishPageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AACxE,SAASC,sBAAsB,EAAEC,qBAAqB;AACtD,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA2C,EACrD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA2C,GAA3CA,UAA2C;EACpD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,UAAU,CAAC,MAAM,CAAC;IAC/D,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,IAAI,GAAGH,SAAS,CAACI,KAAK;IAE5B,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACd,WAAW,CAACc,SAAS,CAAC,MAAM,EAAEF,IAAI,CAAC;IAChE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAO3B,MAAM,CAACqB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMkB,WAAW,GAAG,IAAItB,sBAAsB,CAAC;MAC3CmB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACX,cAAc,CAACe,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIY,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,qBAAqB,CAAC;MACzCkB,IAAI,EAAEK,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO/B,MAAM,CAACgC,EAAE,CAACF,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,kBAAkB,GAAGF,oBAAoB,CAAC;EACnDgC,WAAW,EAAE7B,kBAAkB;EAC/B8B,cAAc,EAAEvB,sBAAsB;EACtCwB,YAAY,EAAE,CACV1B,aAAa,CAAC2B,WAAW,EACzBlC,cAAc,EACdM,kBAAkB,EAClBH,qBAAqB;AAE7B,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 IPublishWbPageParams {
7
7
  id: string;
8
8
  }
@@ -25,6 +25,7 @@ export interface IPublishPageUseCase {
25
25
  execute(params: IPublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;
26
26
  }
27
27
  export interface IPublishPageUseCaseErrors {
28
+ notAuthorized: PageNotAuthorizedError;
28
29
  notFound: PageNotFoundError;
29
30
  persistence: PagePersistenceError;
30
31
  }
@@ -43,14 +44,14 @@ export interface PageBeforePublishPayload {
43
44
  export interface PageAfterPublishPayload {
44
45
  page: WbPage;
45
46
  }
46
- export declare const PageBeforePublishHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforePublishPayload>>>;
47
- export declare namespace PageBeforePublishHandler {
47
+ export declare const PageBeforePublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforePublishPayload>>>;
48
+ export declare namespace PageBeforePublishEventHandler {
48
49
  type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;
49
50
  type Event = DomainEvent<PageBeforePublishPayload>;
50
51
  type Page = WbPage;
51
52
  }
52
- export declare const PageAfterPublishHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterPublishPayload>>>;
53
- export declare namespace PageAfterPublishHandler {
53
+ export declare const PageAfterPublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterPublishPayload>>>;
54
+ export declare namespace PageAfterPublishEventHandler {
54
55
  type Interface = IEventHandler<DomainEvent<PageAfterPublishPayload>>;
55
56
  type Event = DomainEvent<PageAfterPublishPayload>;
56
57
  type Page = WbPage;
@@ -24,7 +24,7 @@ export const PublishPageUseCase = createAbstraction("Wb/PublishPageUseCase");
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const PageBeforePublishHandler = createAbstraction("Wb/PageBeforePublishHandler");
28
- export const PageAfterPublishHandler = createAbstraction("Wb/PageAfterPublishHandler");
27
+ export const PageBeforePublishEventHandler = createAbstraction("Wb/PageBeforePublishEventHandler");
28
+ export const PageAfterPublishEventHandler = createAbstraction("Wb/PageAfterPublishEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","PageBeforePublishHandler","PageAfterPublishHandler"],"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 IPublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IPublishPageRepository {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IPublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IPublishPageRepositoryErrors[keyof IPublishPageRepositoryErrors];\n\nexport const PublishPageRepository = createAbstraction<IPublishPageRepository>(\n \"Wb/PublishPageRepository\"\n);\n\nexport namespace PublishPageRepository {\n export type Interface = IPublishPageRepository;\n export type Params = IPublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IPublishPageUseCase {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IPublishPageUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IPublishPageUseCaseErrors[keyof IPublishPageUseCaseErrors];\n\nexport const PublishPageUseCase = createAbstraction<IPublishPageUseCase>(\"Wb/PublishPageUseCase\");\n\nexport namespace PublishPageUseCase {\n export type Interface = IPublishPageUseCase;\n export type Params = IPublishWbPageParams;\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 PageBeforePublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterPublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforePublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforePublishPayload>>\n>(\"Wb/PageBeforePublishHandler\");\n\nexport namespace PageBeforePublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;\n export type Event = DomainEvent<PageBeforePublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterPublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterPublishPayload>>\n>(\"Wb/PageAfterPublishHandler\");\n\nexport namespace PageAfterPublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterPublishPayload>>;\n export type Event = DomainEvent<PageAfterPublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAMpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AASD;AACA;AACA;;AAaA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC;;AAUjG;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,wBAAwB,GAAGH,iBAAiB,CAEvD,6BAA6B,CAAC;AAQhC,OAAO,MAAMI,uBAAuB,GAAGJ,iBAAiB,CAEtD,4BAA4B,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","PageBeforePublishEventHandler","PageAfterPublishEventHandler"],"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 IPublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IPublishPageRepository {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IPublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IPublishPageRepositoryErrors[keyof IPublishPageRepositoryErrors];\n\nexport const PublishPageRepository = createAbstraction<IPublishPageRepository>(\n \"Wb/PublishPageRepository\"\n);\n\nexport namespace PublishPageRepository {\n export type Interface = IPublishPageRepository;\n export type Params = IPublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IPublishPageUseCase {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IPublishPageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IPublishPageUseCaseErrors[keyof IPublishPageUseCaseErrors];\n\nexport const PublishPageUseCase = createAbstraction<IPublishPageUseCase>(\"Wb/PublishPageUseCase\");\n\nexport namespace PublishPageUseCase {\n export type Interface = IPublishPageUseCase;\n export type Params = IPublishWbPageParams;\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 PageBeforePublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterPublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforePublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforePublishPayload>>\n>(\"Wb/PageBeforePublishEventHandler\");\n\nexport namespace PageBeforePublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;\n export type Event = DomainEvent<PageBeforePublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterPublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterPublishPayload>>\n>(\"Wb/PageAfterPublishEventHandler\");\n\nexport namespace PageAfterPublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterPublishPayload>>;\n export type Event = DomainEvent<PageAfterPublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AASD;AACA;AACA;;AAcA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC;;AAUjG;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,6BAA6B,GAAGH,iBAAiB,CAE5D,kCAAkC,CAAC;AAQrC,OAAO,MAAMI,4BAA4B,GAAGJ,iBAAiB,CAE3D,iCAAiC,CAAC","ignoreList":[]}
@@ -1,10 +1,10 @@
1
1
  import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
2
- import { PageBeforePublishHandler, PageAfterPublishHandler } from "./abstractions.js";
2
+ import { PageBeforePublishEventHandler, PageAfterPublishEventHandler } from "./abstractions.js";
3
3
  // PageBeforePublish Event
4
4
  export class PageBeforePublishEvent extends DomainEvent {
5
5
  eventType = "page.beforePublish";
6
6
  getHandlerAbstraction() {
7
- return PageBeforePublishHandler;
7
+ return PageBeforePublishEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforePublishEvent extends DomainEvent {
12
12
  export class PageAfterPublishEvent extends DomainEvent {
13
13
  eventType = "page.afterPublish";
14
14
  getHandlerAbstraction() {
15
- return PageAfterPublishHandler;
15
+ return PageAfterPublishEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforePublishHandler","PageAfterPublishHandler","PageBeforePublishEvent","eventType","getHandlerAbstraction","PageAfterPublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforePublishHandler, PageAfterPublishHandler } from \"./abstractions.js\";\nimport type { PageBeforePublishPayload, PageAfterPublishPayload } from \"./abstractions.js\";\n\n// PageBeforePublish Event\nexport class PageBeforePublishEvent extends DomainEvent<PageBeforePublishPayload> {\n eventType = \"page.beforePublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforePublishHandler;\n }\n}\n\n// PageAfterPublish Event\nexport class PageAfterPublishEvent extends DomainEvent<PageAfterPublishPayload> {\n eventType = \"page.afterPublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterPublishHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,wBAAwB,EAAEC,uBAAuB;AAG1D;AACA,OAAO,MAAMC,sBAAsB,SAASH,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,wBAAwB;EACnC;AACJ;;AAEA;AACA,OAAO,MAAMK,qBAAqB,SAASN,WAAW,CAA0B;EAC5EI,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,uBAAuB;EAClC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["DomainEvent","PageBeforePublishEventHandler","PageAfterPublishEventHandler","PageBeforePublishEvent","eventType","getHandlerAbstraction","PageAfterPublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforePublishEventHandler, PageAfterPublishEventHandler } from \"./abstractions.js\";\nimport type { PageBeforePublishPayload, PageAfterPublishPayload } from \"./abstractions.js\";\n\n// PageBeforePublish Event\nexport class PageBeforePublishEvent extends DomainEvent<PageBeforePublishPayload> {\n eventType = \"page.beforePublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforePublishEventHandler;\n }\n}\n\n// PageAfterPublish Event\nexport class PageAfterPublishEvent extends DomainEvent<PageAfterPublishPayload> {\n eventType = \"page.afterPublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterPublishEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,6BAA6B,EAAEC,4BAA4B;AAGpE;AACA,OAAO,MAAMC,sBAAsB,SAASH,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMK,qBAAqB,SAASN,WAAW,CAA0B;EAC5EI,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,4BAA4B;EACvC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- export { PageAfterPublishHandler, PageBeforePublishHandler, PublishPageUseCase } from "./abstractions.js";
1
+ export { PageAfterPublishEventHandler, PageBeforePublishEventHandler, PublishPageUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterPublishHandler, PageBeforePublishHandler, PublishPageUseCase } from "./abstractions.js";
1
+ export { PageAfterPublishEventHandler, PageBeforePublishEventHandler, PublishPageUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterPublishHandler","PageBeforePublishHandler","PublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterPublishHandler,\n PageBeforePublishHandler,\n PublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,uBAAuB,EACvBC,wBAAwB,EACxBC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterPublishEventHandler","PageBeforePublishEventHandler","PublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterPublishEventHandler,\n PageBeforePublishEventHandler,\n PublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,4BAA4B,EAC5BC,6BAA6B,EAC7BC,kBAAkB","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { UnpublishPageUseCase as UseCaseAbstraction, UnpublishPageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class UnpublishPageUseCaseImpl 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: UnpublishPageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: UnpublishPageRepository.Interface);
9
11
  execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const UnpublishPageUseCase: typeof UnpublishPageUseCaseImpl & {
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { UnpublishPageUseCase as UseCaseAbstraction, UnpublishPageRepository } from "./abstractions.js";
4
4
  import { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } 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 UnpublishPageUseCaseImpl {
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.canUnpublish("page");
17
+ if (!hasPermission) {
18
+ return Result.fail(new PageNotAuthorizedError());
19
+ }
20
+
13
21
  // Get the page first for the before event
14
22
  const getResult = await this.getPageById.execute(params.id);
15
23
  if (getResult.isFail()) {
16
24
  return getResult;
17
25
  }
18
26
  const page = getResult.value;
27
+ const canAccess = await this.permissions.canAccess("page", page);
28
+ if (!canAccess) {
29
+ return Result.fail(new PageNotAuthorizedError());
30
+ }
19
31
 
20
32
  // Publish before unpublish event
21
33
  const beforeEvent = new PageBeforeUnpublishEvent({
@@ -39,7 +51,7 @@ class UnpublishPageUseCaseImpl {
39
51
  }
40
52
  export const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({
41
53
  implementation: UnpublishPageUseCaseImpl,
42
- dependencies: [EventPublisher, GetPageByIdUseCase, UnpublishPageRepository]
54
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, UnpublishPageRepository]
43
55
  });
44
56
 
45
57
  //# sourceMappingURL=UnpublishPageUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","EventPublisher","UnpublishPageUseCase","UseCaseAbstraction","UnpublishPageRepository","PageBeforeUnpublishEvent","PageAfterUnpublishEvent","GetPageByIdUseCase","UnpublishPageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","page","value","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies"],"sources":["UnpublishPageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass UnpublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UnpublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n // Publish before unpublish event\n const beforeEvent = new PageBeforeUnpublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the unpublish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after unpublish event\n const afterEvent = new PageAfterUnpublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UnpublishPageUseCaseImpl,\n dependencies: [EventPublisher, GetPageByIdUseCase, UnpublishPageRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,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,IAAI,GAAGH,SAAS,CAACI,KAAK;;IAE5B;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,IAAI,EAAEI,MAAM,CAACH;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACT,cAAc,CAACW,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOvB,MAAM,CAACwB,EAAE,CAACF,MAAM,CAACH,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMjB,oBAAoB,GAAGC,kBAAkB,CAACsB,oBAAoB,CAAC;EACxEC,cAAc,EAAElB,wBAAwB;EACxCmB,YAAY,EAAE,CAAC1B,cAAc,EAAEM,kBAAkB,EAAEH,uBAAuB;AAC9E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Result","EventPublisher","UnpublishPageUseCase","UseCaseAbstraction","UnpublishPageRepository","PageBeforeUnpublishEvent","PageAfterUnpublishEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","UnpublishPageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canUnpublish","fail","getResult","id","isFail","page","value","canAccess","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["UnpublishPageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } 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 UnpublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UnpublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canUnpublish(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n const canAccess = await this.permissions.canAccess(\"page\", page);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before unpublish event\n const beforeEvent = new PageBeforeUnpublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the unpublish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after unpublish event\n const afterEvent = new PageAfterUnpublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UnpublishPageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n UnpublishPageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,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,YAAY,CAAC,MAAM,CAAC;IACjE,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;IAE3D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,IAAI,GAAGH,SAAS,CAACI,KAAK;IAE5B,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACd,WAAW,CAACc,SAAS,CAAC,MAAM,EAAEF,IAAI,CAAC;IAChE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAO1B,MAAM,CAACoB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMkB,WAAW,GAAG,IAAItB,wBAAwB,CAAC;MAC7CmB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACX,cAAc,CAACe,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIY,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,uBAAuB,CAAC;MAC3CkB,IAAI,EAAEK,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO9B,MAAM,CAAC+B,EAAE,CAACF,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,oBAAoB,GAAGC,kBAAkB,CAAC6B,oBAAoB,CAAC;EACxEC,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 { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
5
+ import { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
6
6
  export interface IUnpublishWbPageParams {
7
7
  id: string;
8
8
  }
@@ -25,6 +25,7 @@ export interface IUnpublishPageUseCase {
25
25
  execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;
26
26
  }
27
27
  export interface IUnpublishPageUseCaseErrors {
28
+ notAuthorized: PageNotAuthorizedError;
28
29
  notFound: PageNotFoundError;
29
30
  persistence: PagePersistenceError;
30
31
  }
@@ -43,14 +44,14 @@ export interface PageBeforeUnpublishPayload {
43
44
  export interface PageAfterUnpublishPayload {
44
45
  page: WbPage;
45
46
  }
46
- export declare const PageBeforeUnpublishHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>>;
47
- export declare namespace PageBeforeUnpublishHandler {
47
+ export declare const PageBeforeUnpublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>>;
48
+ export declare namespace PageBeforeUnpublishEventHandler {
48
49
  type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;
49
50
  type Event = DomainEvent<PageBeforeUnpublishPayload>;
50
51
  type Page = WbPage;
51
52
  }
52
- export declare const PageAfterUnpublishHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterUnpublishPayload>>>;
53
- export declare namespace PageAfterUnpublishHandler {
53
+ export declare const PageAfterUnpublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterUnpublishPayload>>>;
54
+ export declare namespace PageAfterUnpublishEventHandler {
54
55
  type Interface = IEventHandler<DomainEvent<PageAfterUnpublishPayload>>;
55
56
  type Event = DomainEvent<PageAfterUnpublishPayload>;
56
57
  type Page = WbPage;
@@ -24,7 +24,7 @@ export const UnpublishPageUseCase = createAbstraction("Wb/UnpublishPageUseCase")
24
24
  // Event Handler Abstractions
25
25
  // ============================================================================
26
26
 
27
- export const PageBeforeUnpublishHandler = createAbstraction("Wb/PageBeforeUnpublishHandler");
28
- export const PageAfterUnpublishHandler = createAbstraction("Wb/PageAfterUnpublishHandler");
27
+ export const PageBeforeUnpublishEventHandler = createAbstraction("Wb/PageBeforeUnpublishEventHandler");
28
+ export const PageAfterUnpublishEventHandler = createAbstraction("Wb/PageAfterUnpublishEventHandler");
29
29
 
30
30
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","UnpublishPageRepository","UnpublishPageUseCase","PageBeforeUnpublishHandler","PageAfterUnpublishHandler"],"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 IUnpublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageRepository {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IUnpublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IUnpublishPageRepositoryErrors[keyof IUnpublishPageRepositoryErrors];\n\nexport const UnpublishPageRepository = createAbstraction<IUnpublishPageRepository>(\n \"Wb/UnpublishPageRepository\"\n);\n\nexport namespace UnpublishPageRepository {\n export type Interface = IUnpublishPageRepository;\n export type Params = IUnpublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageUseCase {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IUnpublishPageUseCaseErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IUnpublishPageUseCaseErrors[keyof IUnpublishPageUseCaseErrors];\n\nexport const UnpublishPageUseCase =\n createAbstraction<IUnpublishPageUseCase>(\"Wb/UnpublishPageUseCase\");\n\nexport namespace UnpublishPageUseCase {\n export type Interface = IUnpublishPageUseCase;\n export type Params = IUnpublishWbPageParams;\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 PageBeforeUnpublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterUnpublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeUnpublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>\n>(\"Wb/PageBeforeUnpublishHandler\");\n\nexport namespace PageBeforeUnpublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;\n export type Event = DomainEvent<PageBeforeUnpublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterUnpublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterUnpublishPayload>>\n>(\"Wb/PageAfterUnpublishHandler\");\n\nexport namespace PageAfterUnpublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterUnpublishPayload>>;\n export type Event = DomainEvent<PageAfterUnpublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAMpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AASD;AACA;AACA;;AAaA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC;;AAUvE;AACA;AACA;;AAUA;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","UnpublishPageRepository","UnpublishPageUseCase","PageBeforeUnpublishEventHandler","PageAfterUnpublishEventHandler"],"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 IUnpublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageRepository {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IUnpublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IUnpublishPageRepositoryErrors[keyof IUnpublishPageRepositoryErrors];\n\nexport const UnpublishPageRepository = createAbstraction<IUnpublishPageRepository>(\n \"Wb/UnpublishPageRepository\"\n);\n\nexport namespace UnpublishPageRepository {\n export type Interface = IUnpublishPageRepository;\n export type Params = IUnpublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageUseCase {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IUnpublishPageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IUnpublishPageUseCaseErrors[keyof IUnpublishPageUseCaseErrors];\n\nexport const UnpublishPageUseCase =\n createAbstraction<IUnpublishPageUseCase>(\"Wb/UnpublishPageUseCase\");\n\nexport namespace UnpublishPageUseCase {\n export type Interface = IUnpublishPageUseCase;\n export type Params = IUnpublishWbPageParams;\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 PageBeforeUnpublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterUnpublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeUnpublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>\n>(\"Wb/PageBeforeUnpublishEventHandler\");\n\nexport namespace PageBeforeUnpublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;\n export type Event = DomainEvent<PageBeforeUnpublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterUnpublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterUnpublishPayload>>\n>(\"Wb/PageAfterUnpublishEventHandler\");\n\nexport namespace PageAfterUnpublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterUnpublishPayload>>;\n export type Event = DomainEvent<PageAfterUnpublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AASD;AACA;AACA;;AAcA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC;;AAUvE;AACA;AACA;;AAUA;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 { PageBeforeUnpublishHandler, PageAfterUnpublishHandler } from "./abstractions.js";
2
+ import { PageBeforeUnpublishEventHandler, PageAfterUnpublishEventHandler } from "./abstractions.js";
3
3
  // PageBeforeUnpublish Event
4
4
  export class PageBeforeUnpublishEvent extends DomainEvent {
5
5
  eventType = "page.beforeUnpublish";
6
6
  getHandlerAbstraction() {
7
- return PageBeforeUnpublishHandler;
7
+ return PageBeforeUnpublishEventHandler;
8
8
  }
9
9
  }
10
10
 
@@ -12,7 +12,7 @@ export class PageBeforeUnpublishEvent extends DomainEvent {
12
12
  export class PageAfterUnpublishEvent extends DomainEvent {
13
13
  eventType = "page.afterUnpublish";
14
14
  getHandlerAbstraction() {
15
- return PageAfterUnpublishHandler;
15
+ return PageAfterUnpublishEventHandler;
16
16
  }
17
17
  }
18
18
 
@@ -1 +1 @@
1
- {"version":3,"names":["DomainEvent","PageBeforeUnpublishHandler","PageAfterUnpublishHandler","PageBeforeUnpublishEvent","eventType","getHandlerAbstraction","PageAfterUnpublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeUnpublishHandler, PageAfterUnpublishHandler } from \"./abstractions.js\";\nimport type { PageBeforeUnpublishPayload, PageAfterUnpublishPayload } from \"./abstractions.js\";\n\n// PageBeforeUnpublish Event\nexport class PageBeforeUnpublishEvent extends DomainEvent<PageBeforeUnpublishPayload> {\n eventType = \"page.beforeUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeUnpublishHandler;\n }\n}\n\n// PageAfterUnpublish Event\nexport class PageAfterUnpublishEvent extends DomainEvent<PageAfterUnpublishPayload> {\n eventType = \"page.afterUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterUnpublishHandler;\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","PageBeforeUnpublishEventHandler","PageAfterUnpublishEventHandler","PageBeforeUnpublishEvent","eventType","getHandlerAbstraction","PageAfterUnpublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeUnpublishEventHandler, PageAfterUnpublishEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeUnpublishPayload, PageAfterUnpublishPayload } from \"./abstractions.js\";\n\n// PageBeforeUnpublish Event\nexport class PageBeforeUnpublishEvent extends DomainEvent<PageBeforeUnpublishPayload> {\n eventType = \"page.beforeUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeUnpublishEventHandler;\n }\n}\n\n// PageAfterUnpublish Event\nexport class PageAfterUnpublishEvent extends DomainEvent<PageAfterUnpublishPayload> {\n eventType = \"page.afterUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterUnpublishEventHandler;\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 { PageAfterUnpublishHandler, PageBeforeUnpublishHandler, UnpublishPageUseCase } from "./abstractions.js";
1
+ export { PageAfterUnpublishEventHandler, PageBeforeUnpublishEventHandler, UnpublishPageUseCase } from "./abstractions.js";
@@ -1,3 +1,3 @@
1
- export { PageAfterUnpublishHandler, PageBeforeUnpublishHandler, UnpublishPageUseCase } from "./abstractions.js";
1
+ export { PageAfterUnpublishEventHandler, PageBeforeUnpublishEventHandler, UnpublishPageUseCase } from "./abstractions.js";
2
2
 
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PageAfterUnpublishHandler","PageBeforeUnpublishHandler","UnpublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterUnpublishHandler,\n PageBeforeUnpublishHandler,\n UnpublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,yBAAyB,EACzBC,0BAA0B,EAC1BC,oBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["PageAfterUnpublishEventHandler","PageBeforeUnpublishEventHandler","UnpublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterUnpublishEventHandler,\n PageBeforeUnpublishEventHandler,\n UnpublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,8BAA8B,EAC9BC,+BAA+B,EAC/BC,oBAAoB","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
2
2
  import { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from "./abstractions.js";
3
3
  import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
4
+ import { WbPermissions } from "../../../domain/permissions.js";
4
5
  declare class UpdatePageUseCaseImpl 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: UpdatePageRepository.Interface);
10
+ constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: UpdatePageRepository.Interface);
9
11
  execute(id: string, data: UseCaseAbstraction.UpdateData): UseCaseAbstraction.Return;
10
12
  }
11
13
  export declare const UpdatePageUseCase: typeof UpdatePageUseCaseImpl & {
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
3
3
  import { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from "./abstractions.js";
4
4
  import { PageBeforeUpdateEvent, PageAfterUpdateEvent } 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 UpdatePageUseCaseImpl {
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(id, data) {
16
+ const hasPermission = await this.permissions.canEdit("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(id);
15
23
  if (getResult.isFail()) {
16
24
  return getResult;
17
25
  }
18
26
  const original = getResult.value;
27
+ const canEdit = await this.permissions.canEdit("page", original);
28
+ if (!canEdit) {
29
+ return Result.fail(new PageNotAuthorizedError());
30
+ }
19
31
 
20
32
  // Publish before update event
21
33
  const beforeEvent = new PageBeforeUpdateEvent({
@@ -48,7 +60,7 @@ class UpdatePageUseCaseImpl {
48
60
  }
49
61
  export const UpdatePageUseCase = UseCaseAbstraction.createImplementation({
50
62
  implementation: UpdatePageUseCaseImpl,
51
- dependencies: [EventPublisher, GetPageByIdUseCase, UpdatePageRepository]
63
+ dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, UpdatePageRepository]
52
64
  });
53
65
 
54
66
  //# sourceMappingURL=UpdatePageUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","EventPublisher","UpdatePageUseCase","UseCaseAbstraction","UpdatePageRepository","PageBeforeUpdateEvent","PageAfterUpdateEvent","GetPageByIdUseCase","UpdatePageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","id","data","getResult","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","createImplementation","implementation","dependencies"],"sources":["UpdatePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from \"./abstractions.js\";\nimport { PageBeforeUpdateEvent, PageAfterUpdateEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass UpdatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UpdatePageRepository.Interface\n ) {}\n\n async execute(id: string, data: UseCaseAbstraction.UpdateData): UseCaseAbstraction.Return {\n // Get the original page for events\n const getResult = await this.getPageById.execute(id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before update event\n const beforeEvent = new PageBeforeUpdateEvent({\n original,\n input: { id, data }\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the update operation\n const result = await this.repository.execute(id, data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after update event\n const afterEvent = new PageAfterUpdateEvent({\n original,\n input: { id, data },\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdatePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdatePageUseCaseImpl,\n dependencies: [EventPublisher, GetPageByIdUseCase, UpdatePageRepository]\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,EAAU,EAAEC,IAAmC,EAA6B;IACtF;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACL,WAAW,CAACE,OAAO,CAACC,EAAE,CAAC;IAEpD,IAAIE,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOD,SAAS;IACpB;IAEA,MAAME,QAAQ,GAAGF,SAAS,CAACG,KAAK;;IAEhC;IACA,MAAMC,WAAW,GAAG,IAAIf,qBAAqB,CAAC;MAC1Ca,QAAQ;MACRG,KAAK,EAAE;QAAEP,EAAE;QAAEC;MAAK;IACtB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACL,cAAc,CAACY,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACX,UAAU,CAACC,OAAO,CAACC,EAAE,EAAEC,IAAI,CAAC;IAEtD,IAAIQ,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIlB,oBAAoB,CAAC;MACxCY,QAAQ;MACRG,KAAK,EAAE;QAAEP,EAAE;QAAEC;MAAK,CAAC;MACnBU,IAAI,EAAEF,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACT,cAAc,CAACY,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAOxB,MAAM,CAAC0B,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMjB,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","UpdatePageUseCase","UseCaseAbstraction","UpdatePageRepository","PageBeforeUpdateEvent","PageAfterUpdateEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","UpdatePageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","id","data","hasPermission","canEdit","fail","getResult","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["UpdatePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from \"./abstractions.js\";\nimport { PageBeforeUpdateEvent, PageAfterUpdateEvent } 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 UpdatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UpdatePageRepository.Interface\n ) {}\n\n async execute(id: string, data: UseCaseAbstraction.UpdateData): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canEdit(\"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(id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n const canEdit = await this.permissions.canEdit(\"page\", original);\n if (!canEdit) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before update event\n const beforeEvent = new PageBeforeUpdateEvent({\n original,\n input: { id, data }\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the update operation\n const result = await this.repository.execute(id, data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after update event\n const afterEvent = new PageAfterUpdateEvent({\n original,\n input: { id, data },\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdatePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdatePageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n UpdatePageRepository\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,EAAU,EAAEC,IAAmC,EAA6B;IACtF,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACP,WAAW,CAACQ,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOnB,MAAM,CAACqB,IAAI,CAAC,IAAIZ,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMa,SAAS,GAAG,MAAM,IAAI,CAACR,WAAW,CAACE,OAAO,CAACC,EAAE,CAAC;IAEpD,IAAIK,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOD,SAAS;IACpB;IAEA,MAAME,QAAQ,GAAGF,SAAS,CAACG,KAAK;IAEhC,MAAML,OAAO,GAAG,MAAM,IAAI,CAACR,WAAW,CAACQ,OAAO,CAAC,MAAM,EAAEI,QAAQ,CAAC;IAChE,IAAI,CAACJ,OAAO,EAAE;MACV,OAAOpB,MAAM,CAACqB,IAAI,CAAC,IAAIZ,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMiB,WAAW,GAAG,IAAIrB,qBAAqB,CAAC;MAC1CmB,QAAQ;MACRG,KAAK,EAAE;QAAEV,EAAE;QAAEC;MAAK;IACtB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACL,cAAc,CAACe,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,EAAE,EAAEC,IAAI,CAAC;IAEtD,IAAIW,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,oBAAoB,CAAC;MACxCkB,QAAQ;MACRG,KAAK,EAAE;QAAEV,EAAE;QAAEC;MAAK,CAAC;MACnBa,IAAI,EAAEF,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO9B,MAAM,CAACgC,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,iBAAiB,GAAGC,kBAAkB,CAAC8B,oBAAoB,CAAC;EACrEC,cAAc,EAAExB,qBAAqB;EACrCyB,YAAY,EAAE,CACV3B,aAAa,CAAC4B,WAAW,EACzBnC,cAAc,EACdM,kBAAkB,EAClBH,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}