@webiny/api-headless-cms-workflows 0.0.0-unstable.c27f4d8a31 → 0.0.0-unstable.d0f34a8194

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 (500) hide show
  1. package/CmsWorkflowsFeature.d.ts +4 -0
  2. package/CmsWorkflowsFeature.js +28 -0
  3. package/CmsWorkflowsFeature.js.map +1 -0
  4. package/domain/errors.d.ts +27 -0
  5. package/domain/errors.js +14 -0
  6. package/domain/errors.js.map +1 -0
  7. package/features/Workflows/feature.d.ts +4 -1
  8. package/features/Workflows/feature.js +8 -5
  9. package/features/Workflows/feature.js.map +1 -1
  10. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.d.ts +18 -6
  11. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js +36 -24
  12. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeCreate.js.map +1 -1
  13. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.d.ts +23 -0
  14. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js +44 -0
  15. package/features/Workflows/handlers/DisallowUnpublishableModelsOnBeforeUpdate.js.map +1 -0
  16. package/features/Workflows/index.js +0 -2
  17. package/features/hooks/BlockDeleteMultipleWhileInReview.d.ts +22 -0
  18. package/features/hooks/BlockDeleteMultipleWhileInReview.js +64 -0
  19. package/features/hooks/BlockDeleteMultipleWhileInReview.js.map +1 -0
  20. package/features/hooks/BlockDeleteWhileInReview.d.ts +18 -0
  21. package/features/hooks/BlockDeleteWhileInReview.js +45 -0
  22. package/features/hooks/BlockDeleteWhileInReview.js.map +1 -0
  23. package/features/hooks/BlockFolderChangeWhileInReview.d.ts +21 -0
  24. package/features/hooks/BlockFolderChangeWhileInReview.js +44 -0
  25. package/features/hooks/BlockFolderChangeWhileInReview.js.map +1 -0
  26. package/features/hooks/BlockMoveWhileInReview.d.ts +19 -0
  27. package/features/hooks/BlockMoveWhileInReview.js +46 -0
  28. package/features/hooks/BlockMoveWhileInReview.js.map +1 -0
  29. package/features/hooks/BlockRevisionDeleteWhileInReview.d.ts +17 -0
  30. package/features/hooks/BlockRevisionDeleteWhileInReview.js +46 -0
  31. package/features/hooks/BlockRevisionDeleteWhileInReview.js.map +1 -0
  32. package/features/hooks/BlockUpdateWhileInReview.d.ts +25 -0
  33. package/features/hooks/BlockUpdateWhileInReview.js +43 -0
  34. package/features/hooks/BlockUpdateWhileInReview.js.map +1 -0
  35. package/features/hooks/DeleteModelBoundToWorkflowDecorator.d.ts +22 -0
  36. package/features/hooks/DeleteModelBoundToWorkflowDecorator.js +52 -0
  37. package/features/hooks/DeleteModelBoundToWorkflowDecorator.js.map +1 -0
  38. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.d.ts +27 -0
  39. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js +64 -0
  40. package/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js.map +1 -0
  41. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.d.ts +19 -0
  42. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js +47 -0
  43. package/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js.map +1 -0
  44. package/features/hooks/DeleteReviewsOnEntryDelete.d.ts +19 -0
  45. package/features/hooks/DeleteReviewsOnEntryDelete.js +46 -0
  46. package/features/hooks/DeleteReviewsOnEntryDelete.js.map +1 -0
  47. package/features/hooks/DeleteReviewsOnRevisionDelete.d.ts +18 -0
  48. package/features/hooks/DeleteReviewsOnRevisionDelete.js +46 -0
  49. package/features/hooks/DeleteReviewsOnRevisionDelete.js.map +1 -0
  50. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.d.ts +28 -0
  51. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js +63 -0
  52. package/features/hooks/FullyDeleteModelBoundToWorkflowDecorator.js.map +1 -0
  53. package/features/hooks/NullReviewStateOnRevisionCreate.d.ts +15 -0
  54. package/features/hooks/NullReviewStateOnRevisionCreate.js +17 -0
  55. package/features/hooks/NullReviewStateOnRevisionCreate.js.map +1 -0
  56. package/features/hooks/RequireApprovedReviewOnPublish.d.ts +22 -0
  57. package/features/hooks/RequireApprovedReviewOnPublish.js +43 -0
  58. package/features/hooks/RequireApprovedReviewOnPublish.js.map +1 -0
  59. package/features/hooks/RequireApprovedReviewOnRepublish.d.ts +23 -0
  60. package/features/hooks/RequireApprovedReviewOnRepublish.js +49 -0
  61. package/features/hooks/RequireApprovedReviewOnRepublish.js.map +1 -0
  62. package/features/hooks/feature.d.ts +8 -0
  63. package/features/hooks/feature.js +39 -0
  64. package/features/hooks/feature.js.map +1 -0
  65. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.d.ts +18 -0
  66. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js +97 -0
  67. package/features/target/CandidateFolderReadRules/CandidateFolderReadRules.js.map +1 -0
  68. package/features/target/CandidateFolderReadRules/abstractions.d.ts +35 -0
  69. package/features/target/CandidateFolderReadRules/abstractions.js +5 -0
  70. package/features/target/CandidateFolderReadRules/abstractions.js.map +1 -0
  71. package/features/target/CandidateFolderReadRules/index.d.ts +1 -0
  72. package/features/target/CandidateFolderReadRules/index.js +1 -0
  73. package/features/target/CmsEntryAccess/CmsEntryAccess.d.ts +32 -0
  74. package/features/target/CmsEntryAccess/CmsEntryAccess.js +141 -0
  75. package/features/target/CmsEntryAccess/CmsEntryAccess.js.map +1 -0
  76. package/features/target/CmsEntryAccess/abstractions.d.ts +48 -0
  77. package/features/target/CmsEntryAccess/abstractions.js +5 -0
  78. package/features/target/CmsEntryAccess/abstractions.js.map +1 -0
  79. package/features/target/CmsEntryAccess/index.d.ts +2 -0
  80. package/features/target/CmsEntryAccess/index.js +2 -0
  81. package/features/target/CmsEntryAccess/unreadableCodes.d.ts +1 -0
  82. package/features/target/CmsEntryAccess/unreadableCodes.js +9 -0
  83. package/features/target/CmsEntryAccess/unreadableCodes.js.map +1 -0
  84. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.d.ts +21 -0
  85. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js +66 -0
  86. package/features/target/CmsEntryDeniedFolders/CmsEntryDeniedFolders.js.map +1 -0
  87. package/features/target/CmsEntryDeniedFolders/abstractions.d.ts +23 -0
  88. package/features/target/CmsEntryDeniedFolders/abstractions.js +5 -0
  89. package/features/target/CmsEntryDeniedFolders/abstractions.js.map +1 -0
  90. package/features/target/CmsEntryDeniedFolders/index.d.ts +1 -0
  91. package/features/target/CmsEntryDeniedFolders/index.js +1 -0
  92. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.d.ts +18 -0
  93. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js +43 -0
  94. package/features/target/CmsEntryFolderExistsService/CmsEntryFolderExistsService.js.map +1 -0
  95. package/features/target/CmsEntryFolderExistsService/abstractions.d.ts +23 -0
  96. package/features/target/CmsEntryFolderExistsService/abstractions.js +5 -0
  97. package/features/target/CmsEntryFolderExistsService/abstractions.js.map +1 -0
  98. package/features/target/CmsEntryFolderExistsService/index.d.ts +1 -0
  99. package/features/target/CmsEntryFolderExistsService/index.js +1 -0
  100. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.d.ts +10 -0
  101. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js +14 -0
  102. package/features/target/CmsEntryReviewNamespace/CmsModelReviewNamespace.js.map +1 -0
  103. package/features/target/CmsEntryReviewNamespace/abstractions.d.ts +17 -0
  104. package/features/target/CmsEntryReviewNamespace/abstractions.js +5 -0
  105. package/features/target/CmsEntryReviewNamespace/abstractions.js.map +1 -0
  106. package/features/target/CmsEntryReviewNamespace/index.d.ts +1 -0
  107. package/features/target/CmsEntryReviewNamespace/index.js +1 -0
  108. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.d.ts +20 -0
  109. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js +80 -0
  110. package/features/target/CmsEntryReviewReadFilter/CmsEntryReviewReadFilter.js.map +1 -0
  111. package/features/target/CmsEntryReviewReadFilter/abstractions.d.ts +24 -0
  112. package/features/target/CmsEntryReviewReadFilter/abstractions.js +5 -0
  113. package/features/target/CmsEntryReviewReadFilter/abstractions.js.map +1 -0
  114. package/features/target/CmsEntryReviewReadFilter/index.d.ts +1 -0
  115. package/features/target/CmsEntryReviewReadFilter/index.js +1 -0
  116. package/features/target/CmsEntryReviewTargetEditor.d.ts +28 -0
  117. package/features/target/CmsEntryReviewTargetEditor.js +128 -0
  118. package/features/target/CmsEntryReviewTargetEditor.js.map +1 -0
  119. package/features/target/CmsEntryReviewTargetFolderChain.d.ts +22 -0
  120. package/features/target/CmsEntryReviewTargetFolderChain.js +37 -0
  121. package/features/target/CmsEntryReviewTargetFolderChain.js.map +1 -0
  122. package/features/target/CmsEntryReviewTargetLink.d.ts +17 -0
  123. package/features/target/CmsEntryReviewTargetLink.js +18 -0
  124. package/features/target/CmsEntryReviewTargetLink.js.map +1 -0
  125. package/features/target/CmsEntryReviewTargetLoader.d.ts +16 -0
  126. package/features/target/CmsEntryReviewTargetLoader.js +29 -0
  127. package/features/target/CmsEntryReviewTargetLoader.js.map +1 -0
  128. package/features/target/CmsEntryReviewTargetReadAccess.d.ts +41 -0
  129. package/features/target/CmsEntryReviewTargetReadAccess.js +91 -0
  130. package/features/target/CmsEntryReviewTargetReadAccess.js.map +1 -0
  131. package/features/target/CmsEntryReviewTargetSync.d.ts +23 -0
  132. package/features/target/CmsEntryReviewTargetSync.js +42 -0
  133. package/features/target/CmsEntryReviewTargetSync.js.map +1 -0
  134. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.d.ts +27 -0
  135. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js +81 -0
  136. package/features/target/CmsEntryTargetReader/CmsEntryTargetReader.js.map +1 -0
  137. package/features/target/CmsEntryTargetReader/abstractions.d.ts +40 -0
  138. package/features/target/CmsEntryTargetReader/abstractions.js +5 -0
  139. package/features/target/CmsEntryTargetReader/abstractions.js.map +1 -0
  140. package/features/target/CmsEntryTargetReader/index.d.ts +1 -0
  141. package/features/target/CmsEntryTargetReader/index.js +1 -0
  142. package/features/target/CmsModelGroupService/CmsModelGroupService.d.ts +12 -0
  143. package/features/target/CmsModelGroupService/CmsModelGroupService.js +25 -0
  144. package/features/target/CmsModelGroupService/CmsModelGroupService.js.map +1 -0
  145. package/features/target/CmsModelGroupService/abstractions.d.ts +24 -0
  146. package/features/target/CmsModelGroupService/abstractions.js +5 -0
  147. package/features/target/CmsModelGroupService/abstractions.js.map +1 -0
  148. package/features/target/CmsModelGroupService/index.d.ts +1 -0
  149. package/features/target/CmsModelGroupService/index.js +1 -0
  150. package/features/target/CmsWorkflowModelParser.d.ts +9 -0
  151. package/features/target/CmsWorkflowModelParser.js +18 -0
  152. package/features/target/CmsWorkflowModelParser.js.map +1 -0
  153. package/features/target/FolderReadRule.d.ts +9 -0
  154. package/features/target/FolderReadRule.js +0 -0
  155. package/features/target/WorkflowEntrySystemField.d.ts +13 -0
  156. package/features/target/WorkflowEntrySystemField.js +35 -0
  157. package/features/target/WorkflowEntrySystemField.js.map +1 -0
  158. package/features/target/feature.d.ts +5 -0
  159. package/features/target/feature.js +41 -0
  160. package/features/target/feature.js.map +1 -0
  161. package/features/target/getModelSafeValidationMessage.d.ts +11 -0
  162. package/features/target/getModelSafeValidationMessage.js +28 -0
  163. package/features/target/getModelSafeValidationMessage.js.map +1 -0
  164. package/features/target/isEditorFieldValue.d.ts +9 -0
  165. package/features/target/isEditorFieldValue.js +30 -0
  166. package/features/target/isEditorFieldValue.js.map +1 -0
  167. package/features/target/toCmsReviewTarget.d.ts +4 -0
  168. package/features/target/toCmsReviewTarget.js +26 -0
  169. package/features/target/toCmsReviewTarget.js.map +1 -0
  170. package/features/target/toEditorFields.d.ts +9 -0
  171. package/features/target/toEditorFields.js +48 -0
  172. package/features/target/toEditorFields.js.map +1 -0
  173. package/features/target/toEntryValuesPatch.d.ts +9 -0
  174. package/features/target/toEntryValuesPatch.js +31 -0
  175. package/features/target/toEntryValuesPatch.js.map +1 -0
  176. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.d.ts +13 -0
  177. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js +35 -0
  178. package/features/wrappers/ApproveCmsEntryReviewStep/ApproveCmsEntryReviewStepUseCase.js.map +1 -0
  179. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.d.ts +26 -0
  180. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js +5 -0
  181. package/features/wrappers/ApproveCmsEntryReviewStep/abstractions.js.map +1 -0
  182. package/features/wrappers/ApproveCmsEntryReviewStep/feature.d.ts +4 -0
  183. package/features/wrappers/ApproveCmsEntryReviewStep/feature.js +11 -0
  184. package/features/wrappers/ApproveCmsEntryReviewStep/feature.js.map +1 -0
  185. package/features/wrappers/ApproveCmsEntryReviewStep/index.d.ts +1 -0
  186. package/features/wrappers/ApproveCmsEntryReviewStep/index.js +1 -0
  187. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.d.ts +13 -0
  188. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js +37 -0
  189. package/features/wrappers/CancelCmsEntryReview/CancelCmsEntryReviewUseCase.js.map +1 -0
  190. package/features/wrappers/CancelCmsEntryReview/abstractions.d.ts +30 -0
  191. package/features/wrappers/CancelCmsEntryReview/abstractions.js +5 -0
  192. package/features/wrappers/CancelCmsEntryReview/abstractions.js.map +1 -0
  193. package/features/wrappers/CancelCmsEntryReview/feature.d.ts +4 -0
  194. package/features/wrappers/CancelCmsEntryReview/feature.js +11 -0
  195. package/features/wrappers/CancelCmsEntryReview/feature.js.map +1 -0
  196. package/features/wrappers/CancelCmsEntryReview/index.d.ts +1 -0
  197. package/features/wrappers/CancelCmsEntryReview/index.js +1 -0
  198. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.d.ts +19 -0
  199. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js +85 -0
  200. package/features/wrappers/CancelCmsEntryReviewsForDelete/CancelCmsEntryReviewsForDeleteUseCase.js.map +1 -0
  201. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.d.ts +41 -0
  202. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js +5 -0
  203. package/features/wrappers/CancelCmsEntryReviewsForDelete/abstractions.js.map +1 -0
  204. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.d.ts +4 -0
  205. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js +11 -0
  206. package/features/wrappers/CancelCmsEntryReviewsForDelete/feature.js.map +1 -0
  207. package/features/wrappers/CancelCmsEntryReviewsForDelete/index.d.ts +1 -0
  208. package/features/wrappers/CancelCmsEntryReviewsForDelete/index.js +1 -0
  209. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.d.ts +15 -0
  210. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js +46 -0
  211. package/features/wrappers/CmsEntryFolderExists/CmsEntryFolderExistsUseCase.js.map +1 -0
  212. package/features/wrappers/CmsEntryFolderExists/abstractions.d.ts +29 -0
  213. package/features/wrappers/CmsEntryFolderExists/abstractions.js +5 -0
  214. package/features/wrappers/CmsEntryFolderExists/abstractions.js.map +1 -0
  215. package/features/wrappers/CmsEntryFolderExists/feature.d.ts +4 -0
  216. package/features/wrappers/CmsEntryFolderExists/feature.js +11 -0
  217. package/features/wrappers/CmsEntryFolderExists/feature.js.map +1 -0
  218. package/features/wrappers/CmsEntryFolderExists/index.d.ts +1 -0
  219. package/features/wrappers/CmsEntryFolderExists/index.js +1 -0
  220. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.d.ts +17 -0
  221. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js +63 -0
  222. package/features/wrappers/CmsEntryReviewGuardService/CmsEntryReviewGuardService.js.map +1 -0
  223. package/features/wrappers/CmsEntryReviewGuardService/abstractions.d.ts +37 -0
  224. package/features/wrappers/CmsEntryReviewGuardService/abstractions.js +5 -0
  225. package/features/wrappers/CmsEntryReviewGuardService/abstractions.js.map +1 -0
  226. package/features/wrappers/CmsEntryReviewGuardService/index.d.ts +1 -0
  227. package/features/wrappers/CmsEntryReviewGuardService/index.js +1 -0
  228. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.d.ts +25 -0
  229. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js +98 -0
  230. package/features/wrappers/DeleteCmsEntryWorkflow/DeleteCmsEntryWorkflowUseCase.js.map +1 -0
  231. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.d.ts +32 -0
  232. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js +5 -0
  233. package/features/wrappers/DeleteCmsEntryWorkflow/abstractions.js.map +1 -0
  234. package/features/wrappers/DeleteCmsEntryWorkflow/feature.d.ts +4 -0
  235. package/features/wrappers/DeleteCmsEntryWorkflow/feature.js +11 -0
  236. package/features/wrappers/DeleteCmsEntryWorkflow/feature.js.map +1 -0
  237. package/features/wrappers/DeleteCmsEntryWorkflow/index.d.ts +1 -0
  238. package/features/wrappers/DeleteCmsEntryWorkflow/index.js +1 -0
  239. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.d.ts +13 -0
  240. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js +40 -0
  241. package/features/wrappers/GetCmsEntryReview/GetCmsEntryReviewUseCase.js.map +1 -0
  242. package/features/wrappers/GetCmsEntryReview/abstractions.d.ts +28 -0
  243. package/features/wrappers/GetCmsEntryReview/abstractions.js +5 -0
  244. package/features/wrappers/GetCmsEntryReview/abstractions.js.map +1 -0
  245. package/features/wrappers/GetCmsEntryReview/feature.d.ts +4 -0
  246. package/features/wrappers/GetCmsEntryReview/feature.js +11 -0
  247. package/features/wrappers/GetCmsEntryReview/feature.js.map +1 -0
  248. package/features/wrappers/GetCmsEntryReview/index.d.ts +1 -0
  249. package/features/wrappers/GetCmsEntryReview/index.js +1 -0
  250. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.d.ts +13 -0
  251. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js +39 -0
  252. package/features/wrappers/GetCmsEntryReviewStepRun/GetCmsEntryReviewStepRunUseCase.js.map +1 -0
  253. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.d.ts +33 -0
  254. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js +5 -0
  255. package/features/wrappers/GetCmsEntryReviewStepRun/abstractions.js.map +1 -0
  256. package/features/wrappers/GetCmsEntryReviewStepRun/feature.d.ts +4 -0
  257. package/features/wrappers/GetCmsEntryReviewStepRun/feature.js +11 -0
  258. package/features/wrappers/GetCmsEntryReviewStepRun/feature.js.map +1 -0
  259. package/features/wrappers/GetCmsEntryReviewStepRun/index.d.ts +1 -0
  260. package/features/wrappers/GetCmsEntryReviewStepRun/index.js +1 -0
  261. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.d.ts +19 -0
  262. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js +76 -0
  263. package/features/wrappers/GetCmsEntryTargetReview/GetCmsEntryTargetReviewUseCase.js.map +1 -0
  264. package/features/wrappers/GetCmsEntryTargetReview/abstractions.d.ts +36 -0
  265. package/features/wrappers/GetCmsEntryTargetReview/abstractions.js +5 -0
  266. package/features/wrappers/GetCmsEntryTargetReview/abstractions.js.map +1 -0
  267. package/features/wrappers/GetCmsEntryTargetReview/feature.d.ts +4 -0
  268. package/features/wrappers/GetCmsEntryTargetReview/feature.js +11 -0
  269. package/features/wrappers/GetCmsEntryTargetReview/feature.js.map +1 -0
  270. package/features/wrappers/GetCmsEntryTargetReview/index.d.ts +1 -0
  271. package/features/wrappers/GetCmsEntryTargetReview/index.js +1 -0
  272. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.d.ts +13 -0
  273. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js +34 -0
  274. package/features/wrappers/GetCmsEntryWorkflow/GetCmsEntryWorkflowUseCase.js.map +1 -0
  275. package/features/wrappers/GetCmsEntryWorkflow/abstractions.d.ts +24 -0
  276. package/features/wrappers/GetCmsEntryWorkflow/abstractions.js +5 -0
  277. package/features/wrappers/GetCmsEntryWorkflow/abstractions.js.map +1 -0
  278. package/features/wrappers/GetCmsEntryWorkflow/feature.d.ts +4 -0
  279. package/features/wrappers/GetCmsEntryWorkflow/feature.js +11 -0
  280. package/features/wrappers/GetCmsEntryWorkflow/feature.js.map +1 -0
  281. package/features/wrappers/GetCmsEntryWorkflow/index.d.ts +1 -0
  282. package/features/wrappers/GetCmsEntryWorkflow/index.js +1 -0
  283. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.d.ts +19 -0
  284. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js +54 -0
  285. package/features/wrappers/InspectCmsEntryRouting/InspectCmsEntryRoutingUseCase.js.map +1 -0
  286. package/features/wrappers/InspectCmsEntryRouting/abstractions.d.ts +37 -0
  287. package/features/wrappers/InspectCmsEntryRouting/abstractions.js +5 -0
  288. package/features/wrappers/InspectCmsEntryRouting/abstractions.js.map +1 -0
  289. package/features/wrappers/InspectCmsEntryRouting/feature.d.ts +4 -0
  290. package/features/wrappers/InspectCmsEntryRouting/feature.js +11 -0
  291. package/features/wrappers/InspectCmsEntryRouting/feature.js.map +1 -0
  292. package/features/wrappers/InspectCmsEntryRouting/index.d.ts +1 -0
  293. package/features/wrappers/InspectCmsEntryRouting/index.js +1 -0
  294. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.d.ts +25 -0
  295. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js +109 -0
  296. package/features/wrappers/ListCmsEntryBlockingReviews/ListCmsEntryBlockingReviewsUseCase.js.map +1 -0
  297. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.d.ts +36 -0
  298. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js +6 -0
  299. package/features/wrappers/ListCmsEntryBlockingReviews/abstractions.js.map +1 -0
  300. package/features/wrappers/ListCmsEntryBlockingReviews/feature.d.ts +4 -0
  301. package/features/wrappers/ListCmsEntryBlockingReviews/feature.js +11 -0
  302. package/features/wrappers/ListCmsEntryBlockingReviews/feature.js.map +1 -0
  303. package/features/wrappers/ListCmsEntryBlockingReviews/index.d.ts +1 -0
  304. package/features/wrappers/ListCmsEntryBlockingReviews/index.js +1 -0
  305. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.d.ts +13 -0
  306. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js +41 -0
  307. package/features/wrappers/ListCmsEntryReviewStepCandidates/ListCmsEntryReviewStepCandidatesUseCase.js.map +1 -0
  308. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.d.ts +30 -0
  309. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js +5 -0
  310. package/features/wrappers/ListCmsEntryReviewStepCandidates/abstractions.js.map +1 -0
  311. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.d.ts +4 -0
  312. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js +11 -0
  313. package/features/wrappers/ListCmsEntryReviewStepCandidates/feature.js.map +1 -0
  314. package/features/wrappers/ListCmsEntryReviewStepCandidates/index.d.ts +1 -0
  315. package/features/wrappers/ListCmsEntryReviewStepCandidates/index.js +1 -0
  316. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.d.ts +17 -0
  317. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js +85 -0
  318. package/features/wrappers/ListCmsEntryReviews/ListCmsEntryReviewsUseCase.js.map +1 -0
  319. package/features/wrappers/ListCmsEntryReviews/abstractions.d.ts +50 -0
  320. package/features/wrappers/ListCmsEntryReviews/abstractions.js +5 -0
  321. package/features/wrappers/ListCmsEntryReviews/abstractions.js.map +1 -0
  322. package/features/wrappers/ListCmsEntryReviews/feature.d.ts +4 -0
  323. package/features/wrappers/ListCmsEntryReviews/feature.js +11 -0
  324. package/features/wrappers/ListCmsEntryReviews/feature.js.map +1 -0
  325. package/features/wrappers/ListCmsEntryReviews/index.d.ts +1 -0
  326. package/features/wrappers/ListCmsEntryReviews/index.js +1 -0
  327. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.d.ts +25 -0
  328. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js +83 -0
  329. package/features/wrappers/ListCmsEntryStepCandidates/ListCmsEntryStepCandidatesUseCase.js.map +1 -0
  330. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.d.ts +41 -0
  331. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js +5 -0
  332. package/features/wrappers/ListCmsEntryStepCandidates/abstractions.js.map +1 -0
  333. package/features/wrappers/ListCmsEntryStepCandidates/feature.d.ts +4 -0
  334. package/features/wrappers/ListCmsEntryStepCandidates/feature.js +11 -0
  335. package/features/wrappers/ListCmsEntryStepCandidates/feature.js.map +1 -0
  336. package/features/wrappers/ListCmsEntryStepCandidates/index.d.ts +1 -0
  337. package/features/wrappers/ListCmsEntryStepCandidates/index.js +1 -0
  338. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.d.ts +17 -0
  339. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js +106 -0
  340. package/features/wrappers/ListCmsEntryWorkflowModels/ListCmsEntryWorkflowModelsUseCase.js.map +1 -0
  341. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.d.ts +58 -0
  342. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js +5 -0
  343. package/features/wrappers/ListCmsEntryWorkflowModels/abstractions.js.map +1 -0
  344. package/features/wrappers/ListCmsEntryWorkflowModels/feature.d.ts +4 -0
  345. package/features/wrappers/ListCmsEntryWorkflowModels/feature.js +11 -0
  346. package/features/wrappers/ListCmsEntryWorkflowModels/feature.js.map +1 -0
  347. package/features/wrappers/ListCmsEntryWorkflowModels/index.d.ts +2 -0
  348. package/features/wrappers/ListCmsEntryWorkflowModels/index.js +1 -0
  349. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.d.ts +8 -0
  350. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js +20 -0
  351. package/features/wrappers/ListCmsEntryWorkflowModels/modelListCursor.js.map +1 -0
  352. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.d.ts +17 -0
  353. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js +43 -0
  354. package/features/wrappers/ListCmsEntryWorkflows/ListCmsEntryWorkflowsUseCase.js.map +1 -0
  355. package/features/wrappers/ListCmsEntryWorkflows/abstractions.d.ts +24 -0
  356. package/features/wrappers/ListCmsEntryWorkflows/abstractions.js +5 -0
  357. package/features/wrappers/ListCmsEntryWorkflows/abstractions.js.map +1 -0
  358. package/features/wrappers/ListCmsEntryWorkflows/feature.d.ts +4 -0
  359. package/features/wrappers/ListCmsEntryWorkflows/feature.js +11 -0
  360. package/features/wrappers/ListCmsEntryWorkflows/feature.js.map +1 -0
  361. package/features/wrappers/ListCmsEntryWorkflows/index.d.ts +1 -0
  362. package/features/wrappers/ListCmsEntryWorkflows/index.js +1 -0
  363. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.d.ts +13 -0
  364. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js +40 -0
  365. package/features/wrappers/ReassignCmsEntryReviewStep/ReassignCmsEntryReviewStepUseCase.js.map +1 -0
  366. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.d.ts +32 -0
  367. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js +5 -0
  368. package/features/wrappers/ReassignCmsEntryReviewStep/abstractions.js.map +1 -0
  369. package/features/wrappers/ReassignCmsEntryReviewStep/feature.d.ts +4 -0
  370. package/features/wrappers/ReassignCmsEntryReviewStep/feature.js +11 -0
  371. package/features/wrappers/ReassignCmsEntryReviewStep/feature.js.map +1 -0
  372. package/features/wrappers/ReassignCmsEntryReviewStep/index.d.ts +1 -0
  373. package/features/wrappers/ReassignCmsEntryReviewStep/index.js +1 -0
  374. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.d.ts +13 -0
  375. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js +35 -0
  376. package/features/wrappers/RejectCmsEntryReviewStep/RejectCmsEntryReviewStepUseCase.js.map +1 -0
  377. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.d.ts +26 -0
  378. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js +5 -0
  379. package/features/wrappers/RejectCmsEntryReviewStep/abstractions.js.map +1 -0
  380. package/features/wrappers/RejectCmsEntryReviewStep/feature.d.ts +4 -0
  381. package/features/wrappers/RejectCmsEntryReviewStep/feature.js +11 -0
  382. package/features/wrappers/RejectCmsEntryReviewStep/feature.js.map +1 -0
  383. package/features/wrappers/RejectCmsEntryReviewStep/index.d.ts +1 -0
  384. package/features/wrappers/RejectCmsEntryReviewStep/index.js +1 -0
  385. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.d.ts +21 -0
  386. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js +63 -0
  387. package/features/wrappers/RequestCmsEntryReview/RequestCmsEntryReviewUseCase.js.map +1 -0
  388. package/features/wrappers/RequestCmsEntryReview/abstractions.d.ts +38 -0
  389. package/features/wrappers/RequestCmsEntryReview/abstractions.js +5 -0
  390. package/features/wrappers/RequestCmsEntryReview/abstractions.js.map +1 -0
  391. package/features/wrappers/RequestCmsEntryReview/feature.d.ts +4 -0
  392. package/features/wrappers/RequestCmsEntryReview/feature.js +11 -0
  393. package/features/wrappers/RequestCmsEntryReview/feature.js.map +1 -0
  394. package/features/wrappers/RequestCmsEntryReview/index.d.ts +1 -0
  395. package/features/wrappers/RequestCmsEntryReview/index.js +1 -0
  396. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.d.ts +13 -0
  397. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js +39 -0
  398. package/features/wrappers/RestartCmsEntryReviewStep/RestartCmsEntryReviewStepUseCase.js.map +1 -0
  399. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.d.ts +30 -0
  400. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js +5 -0
  401. package/features/wrappers/RestartCmsEntryReviewStep/abstractions.js.map +1 -0
  402. package/features/wrappers/RestartCmsEntryReviewStep/feature.d.ts +4 -0
  403. package/features/wrappers/RestartCmsEntryReviewStep/feature.js +11 -0
  404. package/features/wrappers/RestartCmsEntryReviewStep/feature.js.map +1 -0
  405. package/features/wrappers/RestartCmsEntryReviewStep/index.d.ts +1 -0
  406. package/features/wrappers/RestartCmsEntryReviewStep/index.js +1 -0
  407. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.d.ts +13 -0
  408. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js +34 -0
  409. package/features/wrappers/StartCmsEntryReviewStep/StartCmsEntryReviewStepUseCase.js.map +1 -0
  410. package/features/wrappers/StartCmsEntryReviewStep/abstractions.d.ts +25 -0
  411. package/features/wrappers/StartCmsEntryReviewStep/abstractions.js +5 -0
  412. package/features/wrappers/StartCmsEntryReviewStep/abstractions.js.map +1 -0
  413. package/features/wrappers/StartCmsEntryReviewStep/feature.d.ts +4 -0
  414. package/features/wrappers/StartCmsEntryReviewStep/feature.js +11 -0
  415. package/features/wrappers/StartCmsEntryReviewStep/feature.js.map +1 -0
  416. package/features/wrappers/StartCmsEntryReviewStep/index.d.ts +1 -0
  417. package/features/wrappers/StartCmsEntryReviewStep/index.js +1 -0
  418. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.d.ts +17 -0
  419. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js +57 -0
  420. package/features/wrappers/StoreCmsEntryWorkflow/StoreCmsEntryWorkflowUseCase.js.map +1 -0
  421. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.d.ts +32 -0
  422. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js +5 -0
  423. package/features/wrappers/StoreCmsEntryWorkflow/abstractions.js.map +1 -0
  424. package/features/wrappers/StoreCmsEntryWorkflow/feature.d.ts +4 -0
  425. package/features/wrappers/StoreCmsEntryWorkflow/feature.js +11 -0
  426. package/features/wrappers/StoreCmsEntryWorkflow/feature.js.map +1 -0
  427. package/features/wrappers/StoreCmsEntryWorkflow/index.d.ts +1 -0
  428. package/features/wrappers/StoreCmsEntryWorkflow/index.js +1 -0
  429. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.d.ts +13 -0
  430. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js +35 -0
  431. package/features/wrappers/TakeOverCmsEntryReviewStep/TakeOverCmsEntryReviewStepUseCase.js.map +1 -0
  432. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.d.ts +27 -0
  433. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js +5 -0
  434. package/features/wrappers/TakeOverCmsEntryReviewStep/abstractions.js.map +1 -0
  435. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.d.ts +4 -0
  436. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js +11 -0
  437. package/features/wrappers/TakeOverCmsEntryReviewStep/feature.js.map +1 -0
  438. package/features/wrappers/TakeOverCmsEntryReviewStep/index.d.ts +1 -0
  439. package/features/wrappers/TakeOverCmsEntryReviewStep/index.js +1 -0
  440. package/features/wrappers/feature.d.ts +9 -0
  441. package/features/wrappers/feature.js +57 -0
  442. package/features/wrappers/feature.js.map +1 -0
  443. package/features/wrappers/shared/cmsWorkflows.d.ts +6 -0
  444. package/features/wrappers/shared/cmsWorkflows.js +8 -0
  445. package/features/wrappers/shared/cmsWorkflows.js.map +1 -0
  446. package/graphql/CmsWorkflowsSchemaFactory.d.ts +14 -0
  447. package/graphql/CmsWorkflowsSchemaFactory.js +695 -0
  448. package/graphql/CmsWorkflowsSchemaFactory.js.map +1 -0
  449. package/graphql/entrySystemSchema.d.ts +6 -0
  450. package/graphql/entrySystemSchema.js +19 -0
  451. package/graphql/entrySystemSchema.js.map +1 -0
  452. package/graphql/isValidRevisionId.d.ts +6 -0
  453. package/graphql/isValidRevisionId.js +9 -0
  454. package/graphql/isValidRevisionId.js.map +1 -0
  455. package/index.d.ts +2 -1
  456. package/index.js +1 -20
  457. package/package.json +31 -18
  458. package/types.d.ts +24 -0
  459. package/types.js +0 -0
  460. package/utils/appName.d.ts +9 -5
  461. package/utils/appName.js +8 -11
  462. package/utils/appName.js.map +1 -1
  463. package/utils/folderType.d.ts +4 -0
  464. package/utils/folderType.js +9 -0
  465. package/utils/folderType.js.map +1 -0
  466. package/utils/isBindableModel.d.ts +9 -0
  467. package/utils/isBindableModel.js +8 -0
  468. package/utils/isBindableModel.js.map +1 -0
  469. package/features/EntryWorkflows/feature.d.ts +0 -1
  470. package/features/EntryWorkflows/feature.js +0 -20
  471. package/features/EntryWorkflows/feature.js.map +0 -1
  472. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.d.ts +0 -13
  473. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.js +0 -35
  474. package/features/EntryWorkflows/handlers/ClearEntryStateOnWorkflowStateAfterDelete.js.map +0 -1
  475. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.d.ts +0 -11
  476. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.js +0 -29
  477. package/features/EntryWorkflows/handlers/DeleteWorkflowStateOnEntryAfterDelete.js.map +0 -1
  478. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.d.ts +0 -13
  479. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.js +0 -45
  480. package/features/EntryWorkflows/handlers/DeleteWorkflowsOnModelAfterDelete.js.map +0 -1
  481. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.d.ts +0 -13
  482. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.js +0 -37
  483. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterCreate.js.map +0 -1
  484. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.d.ts +0 -13
  485. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.js +0 -37
  486. package/features/EntryWorkflows/handlers/UpdateEntryOnWorkflowStateAfterUpdate.js.map +0 -1
  487. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.d.ts +0 -11
  488. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.js +0 -51
  489. package/features/EntryWorkflows/handlers/ValidateWorkflowStateOnEntryBeforePublish.js.map +0 -1
  490. package/features/EntryWorkflows/index.d.ts +0 -1
  491. package/features/EntryWorkflows/index.js +0 -3
  492. package/features/EntryWorkflows/index.js.map +0 -1
  493. package/features/Workflows/index.js.map +0 -1
  494. package/index.js.map +0 -1
  495. package/utils/modelAllowed.d.ts +0 -2
  496. package/utils/modelAllowed.js +0 -13
  497. package/utils/modelAllowed.js.map +0 -1
  498. package/utils/state.d.ts +0 -3
  499. package/utils/state.js +0 -11
  500. package/utils/state.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ import { EntryBeforeMoveEventHandler } from "@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js";
2
+ import { GetBoundWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js";
3
+ import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
4
+ /**
5
+ * Move rule of the `cms.*` adapter (spec 9.3, D84, R55): on a bound model, no folder move while
6
+ * the review is in progress. The location belongs to the entry, not the revision, so any revision
7
+ * in review blocks (A24). Approved, rejected and cancelled reviews do not block. Unbound models
8
+ * never look up reviews; lookup failures on bound models block.
9
+ */
10
+ declare class BlockMoveWhileInReviewImpl implements EntryBeforeMoveEventHandler.Interface {
11
+ private getBoundWorkflow;
12
+ private listTargetReviews;
13
+ constructor(getBoundWorkflow: GetBoundWorkflowUseCase.Interface, listTargetReviews: ListTargetReviewsUseCase.Interface);
14
+ handle(event: EntryBeforeMoveEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const BlockMoveWhileInReview: typeof BlockMoveWhileInReviewImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/MoveEntry/events").EntryBeforeMoveEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,46 @@
1
+ import { EntryBeforeMoveEventHandler } from "@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js";
2
+ import { GetBoundWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js";
3
+ import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
4
+ import { ReviewTargetLockedError } from "@webiny/api-workflows/domain/review/errors.js";
5
+ import { getCmsNamespace } from "../../utils/appName.js";
6
+ class BlockMoveWhileInReviewImpl {
7
+ constructor(getBoundWorkflow, listTargetReviews){
8
+ this.getBoundWorkflow = getBoundWorkflow;
9
+ this.listTargetReviews = listTargetReviews;
10
+ }
11
+ async handle(event) {
12
+ const { model, entry } = event.payload;
13
+ const namespace = getCmsNamespace(model);
14
+ if (!namespace) return;
15
+ const bound = await this.getBoundWorkflow.execute({
16
+ model: namespace
17
+ });
18
+ if (bound.isFail()) throw bound.error;
19
+ if (!bound.value) return;
20
+ const reviews = await this.listTargetReviews.execute({
21
+ model: namespace,
22
+ targetId: entry.entryId,
23
+ state: "inProgress"
24
+ });
25
+ if (reviews.isFail()) throw reviews.error;
26
+ const [inProgress] = reviews.value;
27
+ if (!inProgress) return;
28
+ throw new ReviewTargetLockedError({
29
+ reviewId: inProgress.id,
30
+ model: namespace,
31
+ targetRevisionId: inProgress.targetRevisionId,
32
+ reviewState: inProgress.state,
33
+ action: "move"
34
+ });
35
+ }
36
+ }
37
+ const BlockMoveWhileInReview = EntryBeforeMoveEventHandler.createImplementation({
38
+ implementation: BlockMoveWhileInReviewImpl,
39
+ dependencies: [
40
+ GetBoundWorkflowUseCase,
41
+ ListTargetReviewsUseCase
42
+ ]
43
+ });
44
+ export { BlockMoveWhileInReview };
45
+
46
+ //# sourceMappingURL=BlockMoveWhileInReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/BlockMoveWhileInReview.js","sources":["../../../src/features/hooks/BlockMoveWhileInReview.ts"],"sourcesContent":["import { EntryBeforeMoveEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/MoveEntry/index.js\";\nimport { GetBoundWorkflowUseCase } from \"@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js\";\nimport { ListTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/ListTargetReviews/index.js\";\nimport { ReviewTargetLockedError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { getCmsNamespace } from \"~/utils/appName.js\";\n\n/**\n * Move rule of the `cms.*` adapter (spec 9.3, D84, R55): on a bound model, no folder move while\n * the review is in progress. The location belongs to the entry, not the revision, so any revision\n * in review blocks (A24). Approved, rejected and cancelled reviews do not block. Unbound models\n * never look up reviews; lookup failures on bound models block.\n */\nclass BlockMoveWhileInReviewImpl implements EntryBeforeMoveEventHandler.Interface {\n public constructor(\n private getBoundWorkflow: GetBoundWorkflowUseCase.Interface,\n private listTargetReviews: ListTargetReviewsUseCase.Interface\n ) {}\n\n public async handle(event: EntryBeforeMoveEventHandler.Event): Promise<void> {\n const { model, entry } = event.payload;\n const namespace = getCmsNamespace(model);\n if (!namespace) {\n return;\n }\n\n const bound = await this.getBoundWorkflow.execute({ model: namespace });\n if (bound.isFail()) {\n throw bound.error;\n }\n if (!bound.value) {\n return;\n }\n\n const reviews = await this.listTargetReviews.execute({\n model: namespace,\n targetId: entry.entryId,\n state: \"inProgress\"\n });\n if (reviews.isFail()) {\n throw reviews.error;\n }\n const [inProgress] = reviews.value;\n if (!inProgress) {\n return;\n }\n\n throw new ReviewTargetLockedError({\n reviewId: inProgress.id,\n model: namespace,\n targetRevisionId: inProgress.targetRevisionId,\n reviewState: inProgress.state,\n action: \"move\"\n });\n }\n}\n\nexport const BlockMoveWhileInReview = EntryBeforeMoveEventHandler.createImplementation({\n implementation: BlockMoveWhileInReviewImpl,\n dependencies: [GetBoundWorkflowUseCase, ListTargetReviewsUseCase]\n});\n"],"names":["BlockMoveWhileInReviewImpl","getBoundWorkflow","listTargetReviews","event","model","entry","namespace","getCmsNamespace","bound","reviews","inProgress","ReviewTargetLockedError","BlockMoveWhileInReview","EntryBeforeMoveEventHandler","GetBoundWorkflowUseCase","ListTargetReviewsUseCase"],"mappings":";;;;;AAYA,MAAMA;IACF,YACYC,gBAAmD,EACnDC,iBAAqD,CAC/D;aAFUD,gBAAgB,GAAhBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAa,OAAOC,KAAwC,EAAiB;QACzE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAMG,YAAYC,gBAAgBH;QAClC,IAAI,CAACE,WACD;QAGJ,MAAME,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAAE,OAAOF;QAAU;QACrE,IAAIE,MAAM,MAAM,IACZ,MAAMA,MAAM,KAAK;QAErB,IAAI,CAACA,MAAM,KAAK,EACZ;QAGJ,MAAMC,UAAU,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACjD,OAAOH;YACP,UAAUD,MAAM,OAAO;YACvB,OAAO;QACX;QACA,IAAII,QAAQ,MAAM,IACd,MAAMA,QAAQ,KAAK;QAEvB,MAAM,CAACC,WAAW,GAAGD,QAAQ,KAAK;QAClC,IAAI,CAACC,YACD;QAGJ,MAAM,IAAIC,wBAAwB;YAC9B,UAAUD,WAAW,EAAE;YACvB,OAAOJ;YACP,kBAAkBI,WAAW,gBAAgB;YAC7C,aAAaA,WAAW,KAAK;YAC7B,QAAQ;QACZ;IACJ;AACJ;AAEO,MAAME,yBAAyBC,4BAA4B,oBAAoB,CAAC;IACnF,gBAAgBb;IAChB,cAAc;QAACc;QAAyBC;KAAyB;AACrE"}
@@ -0,0 +1,17 @@
1
+ import { EntryRevisionBeforeDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/index.js";
2
+ import { GetBoundWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js";
3
+ import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
4
+ /**
5
+ * Deleting one revision is refused while that revision's review is in progress (D134, R73).
6
+ * Deleting the only revision deletes the entry, which `BlockDeleteWhileInReview` guards.
7
+ */
8
+ declare class BlockRevisionDeleteWhileInReviewImpl implements EntryRevisionBeforeDeleteEventHandler.Interface {
9
+ private getBoundWorkflow;
10
+ private listTargetReviews;
11
+ constructor(getBoundWorkflow: GetBoundWorkflowUseCase.Interface, listTargetReviews: ListTargetReviewsUseCase.Interface);
12
+ handle(event: EntryRevisionBeforeDeleteEventHandler.Event): Promise<void>;
13
+ }
14
+ export declare const BlockRevisionDeleteWhileInReview: typeof BlockRevisionDeleteWhileInReviewImpl & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/events").EntryRevisionBeforeDeleteEvent>>;
16
+ };
17
+ export {};
@@ -0,0 +1,46 @@
1
+ import { EntryRevisionBeforeDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/index.js";
2
+ import { GetBoundWorkflowUseCase } from "@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js";
3
+ import { ListTargetReviewsUseCase } from "@webiny/api-workflows/features/review/ListTargetReviews/index.js";
4
+ import { ReviewActiveOnTrashError } from "@webiny/api-workflows/domain/review/errors.js";
5
+ import { toBlockingReview } from "@webiny/api-workflows/domain/review/toBlockingReview.js";
6
+ import { getCmsNamespace } from "../../utils/appName.js";
7
+ class BlockRevisionDeleteWhileInReviewImpl {
8
+ constructor(getBoundWorkflow, listTargetReviews){
9
+ this.getBoundWorkflow = getBoundWorkflow;
10
+ this.listTargetReviews = listTargetReviews;
11
+ }
12
+ async handle(event) {
13
+ const { model, entry } = event.payload;
14
+ const namespace = getCmsNamespace(model);
15
+ if (!namespace) return;
16
+ const bound = await this.getBoundWorkflow.execute({
17
+ model: namespace
18
+ });
19
+ if (bound.isFail()) throw bound.error;
20
+ if (!bound.value) return;
21
+ const reviews = await this.listTargetReviews.execute({
22
+ model: namespace,
23
+ targetId: entry.entryId,
24
+ targetRevisionId: entry.id,
25
+ state: "inProgress"
26
+ });
27
+ if (reviews.isFail()) throw reviews.error;
28
+ const inProgress = reviews.value;
29
+ if (0 === inProgress.length) return;
30
+ throw new ReviewActiveOnTrashError({
31
+ model: namespace,
32
+ action: "delete",
33
+ reviews: inProgress.map(toBlockingReview)
34
+ });
35
+ }
36
+ }
37
+ const BlockRevisionDeleteWhileInReview = EntryRevisionBeforeDeleteEventHandler.createImplementation({
38
+ implementation: BlockRevisionDeleteWhileInReviewImpl,
39
+ dependencies: [
40
+ GetBoundWorkflowUseCase,
41
+ ListTargetReviewsUseCase
42
+ ]
43
+ });
44
+ export { BlockRevisionDeleteWhileInReview };
45
+
46
+ //# sourceMappingURL=BlockRevisionDeleteWhileInReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/BlockRevisionDeleteWhileInReview.js","sources":["../../../src/features/hooks/BlockRevisionDeleteWhileInReview.ts"],"sourcesContent":["import { EntryRevisionBeforeDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/index.js\";\nimport { GetBoundWorkflowUseCase } from \"@webiny/api-workflows/features/workflow/GetBoundWorkflow/index.js\";\nimport { ListTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/ListTargetReviews/index.js\";\nimport { ReviewActiveOnTrashError } from \"@webiny/api-workflows/domain/review/errors.js\";\nimport { toBlockingReview } from \"@webiny/api-workflows/domain/review/toBlockingReview.js\";\nimport { getCmsNamespace } from \"~/utils/appName.js\";\n\n/**\n * Deleting one revision is refused while that revision's review is in progress (D134, R73).\n * Deleting the only revision deletes the entry, which `BlockDeleteWhileInReview` guards.\n */\nclass BlockRevisionDeleteWhileInReviewImpl\n implements EntryRevisionBeforeDeleteEventHandler.Interface\n{\n public constructor(\n private getBoundWorkflow: GetBoundWorkflowUseCase.Interface,\n private listTargetReviews: ListTargetReviewsUseCase.Interface\n ) {}\n\n public async handle(event: EntryRevisionBeforeDeleteEventHandler.Event): Promise<void> {\n const { model, entry } = event.payload;\n const namespace = getCmsNamespace(model);\n if (!namespace) {\n return;\n }\n\n const bound = await this.getBoundWorkflow.execute({ model: namespace });\n if (bound.isFail()) {\n throw bound.error;\n }\n if (!bound.value) {\n return;\n }\n\n const reviews = await this.listTargetReviews.execute({\n model: namespace,\n targetId: entry.entryId,\n targetRevisionId: entry.id,\n state: \"inProgress\"\n });\n if (reviews.isFail()) {\n throw reviews.error;\n }\n const inProgress = reviews.value;\n if (inProgress.length === 0) {\n return;\n }\n\n throw new ReviewActiveOnTrashError({\n model: namespace,\n action: \"delete\",\n reviews: inProgress.map(toBlockingReview)\n });\n }\n}\n\nexport const BlockRevisionDeleteWhileInReview =\n EntryRevisionBeforeDeleteEventHandler.createImplementation({\n implementation: BlockRevisionDeleteWhileInReviewImpl,\n dependencies: [GetBoundWorkflowUseCase, ListTargetReviewsUseCase]\n });\n"],"names":["BlockRevisionDeleteWhileInReviewImpl","getBoundWorkflow","listTargetReviews","event","model","entry","namespace","getCmsNamespace","bound","reviews","inProgress","ReviewActiveOnTrashError","toBlockingReview","BlockRevisionDeleteWhileInReview","EntryRevisionBeforeDeleteEventHandler","GetBoundWorkflowUseCase","ListTargetReviewsUseCase"],"mappings":";;;;;;AAWA,MAAMA;IAGF,YACYC,gBAAmD,EACnDC,iBAAqD,CAC/D;aAFUD,gBAAgB,GAAhBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAa,OAAOC,KAAkD,EAAiB;QACnF,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QACtC,MAAMG,YAAYC,gBAAgBH;QAClC,IAAI,CAACE,WACD;QAGJ,MAAME,QAAQ,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAAE,OAAOF;QAAU;QACrE,IAAIE,MAAM,MAAM,IACZ,MAAMA,MAAM,KAAK;QAErB,IAAI,CAACA,MAAM,KAAK,EACZ;QAGJ,MAAMC,UAAU,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACjD,OAAOH;YACP,UAAUD,MAAM,OAAO;YACvB,kBAAkBA,MAAM,EAAE;YAC1B,OAAO;QACX;QACA,IAAII,QAAQ,MAAM,IACd,MAAMA,QAAQ,KAAK;QAEvB,MAAMC,aAAaD,QAAQ,KAAK;QAChC,IAAIC,AAAsB,MAAtBA,WAAW,MAAM,EACjB;QAGJ,MAAM,IAAIC,yBAAyB;YAC/B,OAAOL;YACP,QAAQ;YACR,SAASI,WAAW,GAAG,CAACE;QAC5B;IACJ;AACJ;AAEO,MAAMC,mCACTC,sCAAsC,oBAAoB,CAAC;IACvD,gBAAgBd;IAChB,cAAc;QAACe;QAAyBC;KAAyB;AACrE"}
@@ -0,0 +1,25 @@
1
+ import { EntryBeforeUpdateEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/index.js";
2
+ import { ReviewTargetUpdateGuard } from "@webiny/api-workflows/features/review/ReviewTargetUpdateGuard/index.js";
3
+ import { CmsEntryReviewNamespace } from "../../features/target/CmsEntryReviewNamespace/index.js";
4
+ /**
5
+ * The save block (spec 9.2, D62, D80, D134, R54): on a model bound to a workflow, a revision with
6
+ * an active review cannot be updated, including an approved or rejected one. Covers every CMS
7
+ * model with a review namespace (R51); private models without one (the workflows' own) are
8
+ * skipped. Website Builder pages publish no CMS entry events, so their adapter has its own update
9
+ * handler. Unbound models never look up reviews. Failed lookups block the update. Exempt, because they publish
10
+ * other events: the `system.workflow` sync (`UpdateEntrySystemUseCase` publishes
11
+ * `EntryBeforeUpdateSystem`) and revision-description changes (`UpdateRevisionDescriptionUseCase`
12
+ * publishes `EntryBeforeUpdateRevisionDescription`; metadata only, not content). The rule itself
13
+ * (binding lookup, review lookup, the automation bypass) is `ReviewTargetUpdateGuard`, shared with
14
+ * the Website Builder page handler.
15
+ */
16
+ declare class BlockUpdateWhileInReviewImpl implements EntryBeforeUpdateEventHandler.Interface {
17
+ private namespaces;
18
+ private updateGuard;
19
+ constructor(namespaces: CmsEntryReviewNamespace.Interface[], updateGuard: ReviewTargetUpdateGuard.Interface);
20
+ handle(event: EntryBeforeUpdateEventHandler.Event): Promise<void>;
21
+ }
22
+ export declare const BlockUpdateWhileInReview: typeof BlockUpdateWhileInReviewImpl & {
23
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/UpdateEntry/events").EntryBeforeUpdateEvent>>;
24
+ };
25
+ export {};
@@ -0,0 +1,43 @@
1
+ import { EntryBeforeUpdateEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry/index.js";
2
+ import { ReviewTargetUpdateGuard } from "@webiny/api-workflows/features/review/ReviewTargetUpdateGuard/index.js";
3
+ import { CmsEntryReviewNamespace } from "../target/CmsEntryReviewNamespace/index.js";
4
+ class BlockUpdateWhileInReviewImpl {
5
+ constructor(namespaces, updateGuard){
6
+ this.namespaces = namespaces;
7
+ this.updateGuard = updateGuard;
8
+ }
9
+ async handle(event) {
10
+ const { model, original } = event.payload;
11
+ let namespace = null;
12
+ for (const candidate of [
13
+ ...this.namespaces
14
+ ].reverse()){
15
+ const resolved = candidate.resolve(model);
16
+ if (resolved) {
17
+ namespace = resolved;
18
+ break;
19
+ }
20
+ }
21
+ if (!namespace) return;
22
+ const checked = await this.updateGuard.check({
23
+ model: namespace,
24
+ targetRevisionId: original.id
25
+ });
26
+ if (checked.isFail()) throw checked.error;
27
+ }
28
+ }
29
+ const BlockUpdateWhileInReview = EntryBeforeUpdateEventHandler.createImplementation({
30
+ implementation: BlockUpdateWhileInReviewImpl,
31
+ dependencies: [
32
+ [
33
+ CmsEntryReviewNamespace,
34
+ {
35
+ multiple: true
36
+ }
37
+ ],
38
+ ReviewTargetUpdateGuard
39
+ ]
40
+ });
41
+ export { BlockUpdateWhileInReview };
42
+
43
+ //# sourceMappingURL=BlockUpdateWhileInReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/BlockUpdateWhileInReview.js","sources":["../../../src/features/hooks/BlockUpdateWhileInReview.ts"],"sourcesContent":["import { EntryBeforeUpdateEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry/index.js\";\nimport { ReviewTargetUpdateGuard } from \"@webiny/api-workflows/features/review/ReviewTargetUpdateGuard/index.js\";\nimport { CmsEntryReviewNamespace } from \"~/features/target/CmsEntryReviewNamespace/index.js\";\n\n/**\n * The save block (spec 9.2, D62, D80, D134, R54): on a model bound to a workflow, a revision with\n * an active review cannot be updated, including an approved or rejected one. Covers every CMS\n * model with a review namespace (R51); private models without one (the workflows' own) are\n * skipped. Website Builder pages publish no CMS entry events, so their adapter has its own update\n * handler. Unbound models never look up reviews. Failed lookups block the update. Exempt, because they publish\n * other events: the `system.workflow` sync (`UpdateEntrySystemUseCase` publishes\n * `EntryBeforeUpdateSystem`) and revision-description changes (`UpdateRevisionDescriptionUseCase`\n * publishes `EntryBeforeUpdateRevisionDescription`; metadata only, not content). The rule itself\n * (binding lookup, review lookup, the automation bypass) is `ReviewTargetUpdateGuard`, shared with\n * the Website Builder page handler.\n */\nclass BlockUpdateWhileInReviewImpl implements EntryBeforeUpdateEventHandler.Interface {\n public constructor(\n private namespaces: CmsEntryReviewNamespace.Interface[],\n private updateGuard: ReviewTargetUpdateGuard.Interface\n ) {}\n\n public async handle(event: EntryBeforeUpdateEventHandler.Event): Promise<void> {\n const { model, original } = event.payload;\n // The last registered non-null namespace for the model wins (R51).\n let namespace: string | null = null;\n for (const candidate of [...this.namespaces].reverse()) {\n const resolved = candidate.resolve(model);\n if (resolved) {\n namespace = resolved;\n break;\n }\n }\n if (!namespace) {\n return;\n }\n\n const checked = await this.updateGuard.check({\n model: namespace,\n targetRevisionId: original.id\n });\n if (checked.isFail()) {\n throw checked.error;\n }\n }\n}\n\nexport const BlockUpdateWhileInReview = EntryBeforeUpdateEventHandler.createImplementation({\n implementation: BlockUpdateWhileInReviewImpl,\n dependencies: [[CmsEntryReviewNamespace, { multiple: true }], ReviewTargetUpdateGuard]\n});\n"],"names":["BlockUpdateWhileInReviewImpl","namespaces","updateGuard","event","model","original","namespace","candidate","resolved","checked","BlockUpdateWhileInReview","EntryBeforeUpdateEventHandler","CmsEntryReviewNamespace","ReviewTargetUpdateGuard"],"mappings":";;;AAgBA,MAAMA;IACF,YACYC,UAA+C,EAC/CC,WAA8C,CACxD;aAFUD,UAAU,GAAVA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAa,OAAOC,KAA0C,EAAiB;QAC3E,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGF,MAAM,OAAO;QAEzC,IAAIG,YAA2B;QAC/B,KAAK,MAAMC,aAAa;eAAI,IAAI,CAAC,UAAU;SAAC,CAAC,OAAO,GAAI;YACpD,MAAMC,WAAWD,UAAU,OAAO,CAACH;YACnC,IAAII,UAAU;gBACVF,YAAYE;gBACZ;YACJ;QACJ;QACA,IAAI,CAACF,WACD;QAGJ,MAAMG,UAAU,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACzC,OAAOH;YACP,kBAAkBD,SAAS,EAAE;QACjC;QACA,IAAII,QAAQ,MAAM,IACd,MAAMA,QAAQ,KAAK;IAE3B;AACJ;AAEO,MAAMC,2BAA2BC,8BAA8B,oBAAoB,CAAC;IACvF,gBAAgBX;IAChB,cAAc;QAAC;YAACY;YAAyB;gBAAE,UAAU;YAAK;SAAE;QAAEC;KAAwB;AAC1F"}
@@ -0,0 +1,22 @@
1
+ import { DeleteModelUseCase } from "@webiny/api-headless-cms/features/contentModel/DeleteModel/index.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
4
+ import { ListWorkflowsUseCase } from "@webiny/api-workflows/features/workflow/ListWorkflows/index.js";
5
+ /**
6
+ * Blocks deleting a model bound to a workflow (spec 9.2, D41, D64, R64), following
7
+ * `DeleteModelWithEntryCleanup`. Registered after the CMS's decorators, so it runs first and a
8
+ * bound singleton model keeps its entries. A caller who cannot delete the model is left to the
9
+ * CMS's own checks; a failed lookup blocks the delete with the workflows error.
10
+ */
11
+ declare class DeleteModelBoundToWorkflowDecoratorImpl implements DeleteModelUseCase.Interface {
12
+ private getModel;
13
+ private accessControl;
14
+ private listWorkflows;
15
+ private decoratee;
16
+ constructor(getModel: GetModelUseCase.Interface, accessControl: AccessControl.Interface, listWorkflows: ListWorkflowsUseCase.Interface, decoratee: DeleteModelUseCase.Interface);
17
+ execute(modelId: string): DeleteModelUseCase.Return;
18
+ }
19
+ export declare const DeleteModelBoundToWorkflowDecorator: typeof DeleteModelBoundToWorkflowDecoratorImpl & {
20
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/contentModel/DeleteModel/abstractions.js").IDeleteModelUseCase>;
21
+ };
22
+ export {};
@@ -0,0 +1,52 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { DeleteModelUseCase } from "@webiny/api-headless-cms/features/contentModel/DeleteModel/index.js";
3
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
4
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
5
+ import { ListWorkflowsUseCase } from "@webiny/api-workflows/features/workflow/ListWorkflows/index.js";
6
+ import { ModelBoundToWorkflowError } from "../../domain/errors.js";
7
+ import { toCmsNamespace } from "../../utils/appName.js";
8
+ const BOUND_WORKFLOWS_LIMIT = 10;
9
+ class DeleteModelBoundToWorkflowDecoratorImpl {
10
+ constructor(getModel, accessControl, listWorkflows, decoratee){
11
+ this.getModel = getModel;
12
+ this.accessControl = accessControl;
13
+ this.listWorkflows = listWorkflows;
14
+ this.decoratee = decoratee;
15
+ }
16
+ async execute(modelId) {
17
+ const model = await this.getModel.execute(modelId);
18
+ if (model.isFail()) return this.decoratee.execute(modelId);
19
+ if (!await this.accessControl.canAccessModel({
20
+ model: model.value,
21
+ rwd: "d"
22
+ })) return this.decoratee.execute(modelId);
23
+ const workflows = await this.listWorkflows.execute({
24
+ where: {
25
+ models_in: [
26
+ toCmsNamespace(modelId)
27
+ ]
28
+ },
29
+ limit: BOUND_WORKFLOWS_LIMIT
30
+ });
31
+ if (workflows.isFail()) return Result.fail(workflows.error);
32
+ if (workflows.value.items.length > 0) return Result.fail(new ModelBoundToWorkflowError({
33
+ modelId,
34
+ workflows: workflows.value.items.map((workflow)=>({
35
+ id: workflow.id,
36
+ name: workflow.name
37
+ }))
38
+ }));
39
+ return this.decoratee.execute(modelId);
40
+ }
41
+ }
42
+ const DeleteModelBoundToWorkflowDecorator = DeleteModelUseCase.createDecorator({
43
+ decorator: DeleteModelBoundToWorkflowDecoratorImpl,
44
+ dependencies: [
45
+ GetModelUseCase,
46
+ AccessControl,
47
+ ListWorkflowsUseCase
48
+ ]
49
+ });
50
+ export { DeleteModelBoundToWorkflowDecorator };
51
+
52
+ //# sourceMappingURL=DeleteModelBoundToWorkflowDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/DeleteModelBoundToWorkflowDecorator.js","sources":["../../../src/features/hooks/DeleteModelBoundToWorkflowDecorator.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { DeleteModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/DeleteModel/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { ListWorkflowsUseCase } from \"@webiny/api-workflows/features/workflow/ListWorkflows/index.js\";\nimport { ModelBoundToWorkflowError } from \"~/domain/errors.js\";\nimport { toCmsNamespace } from \"~/utils/appName.js\";\n\n/** v1 binds one workflow per model (D15); a few extra cover the accepted save race (D41). */\nconst BOUND_WORKFLOWS_LIMIT = 10;\n\n/**\n * Blocks deleting a model bound to a workflow (spec 9.2, D41, D64, R64), following\n * `DeleteModelWithEntryCleanup`. Registered after the CMS's decorators, so it runs first and a\n * bound singleton model keeps its entries. A caller who cannot delete the model is left to the\n * CMS's own checks; a failed lookup blocks the delete with the workflows error.\n */\nclass DeleteModelBoundToWorkflowDecoratorImpl implements DeleteModelUseCase.Interface {\n public constructor(\n private getModel: GetModelUseCase.Interface,\n private accessControl: AccessControl.Interface,\n private listWorkflows: ListWorkflowsUseCase.Interface,\n private decoratee: DeleteModelUseCase.Interface\n ) {}\n\n public async execute(modelId: string): DeleteModelUseCase.Return {\n // A caller who cannot read and delete the model gets the CMS's own error from the decorated\n // chain, never the bound workflows' ids and names (R64).\n const model = await this.getModel.execute(modelId);\n if (model.isFail()) {\n return this.decoratee.execute(modelId);\n }\n if (!(await this.accessControl.canAccessModel({ model: model.value, rwd: \"d\" }))) {\n return this.decoratee.execute(modelId);\n }\n\n const workflows = await this.listWorkflows.execute({\n where: { models_in: [toCmsNamespace(modelId)] },\n limit: BOUND_WORKFLOWS_LIMIT\n });\n if (workflows.isFail()) {\n return Result.fail(workflows.error);\n }\n if (workflows.value.items.length > 0) {\n return Result.fail(\n new ModelBoundToWorkflowError({\n modelId,\n workflows: workflows.value.items.map(workflow => {\n return { id: workflow.id, name: workflow.name };\n })\n })\n );\n }\n return this.decoratee.execute(modelId);\n }\n}\n\nexport const DeleteModelBoundToWorkflowDecorator = DeleteModelUseCase.createDecorator({\n decorator: DeleteModelBoundToWorkflowDecoratorImpl,\n dependencies: [GetModelUseCase, AccessControl, ListWorkflowsUseCase]\n});\n"],"names":["BOUND_WORKFLOWS_LIMIT","DeleteModelBoundToWorkflowDecoratorImpl","getModel","accessControl","listWorkflows","decoratee","modelId","model","workflows","toCmsNamespace","Result","ModelBoundToWorkflowError","workflow","DeleteModelBoundToWorkflowDecorator","DeleteModelUseCase","GetModelUseCase","AccessControl","ListWorkflowsUseCase"],"mappings":";;;;;;;AASA,MAAMA,wBAAwB;AAQ9B,MAAMC;IACF,YACYC,QAAmC,EACnCC,aAAsC,EACtCC,aAA6C,EAC7CC,SAAuC,CACjD;aAJUH,QAAQ,GAARA;aACAC,aAAa,GAAbA;aACAC,aAAa,GAAbA;aACAC,SAAS,GAATA;IACT;IAEH,MAAa,QAAQC,OAAe,EAA6B;QAG7D,MAAMC,QAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD;QAC1C,IAAIC,MAAM,MAAM,IACZ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QAElC,IAAI,CAAE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAE,OAAOC,MAAM,KAAK;YAAE,KAAK;QAAI,IACzE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QAGlC,MAAME,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAC/C,OAAO;gBAAE,WAAW;oBAACC,eAAeH;iBAAS;YAAC;YAC9C,OAAON;QACX;QACA,IAAIQ,UAAU,MAAM,IAChB,OAAOE,OAAO,IAAI,CAACF,UAAU,KAAK;QAEtC,IAAIA,UAAU,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAC/B,OAAOE,OAAO,IAAI,CACd,IAAIC,0BAA0B;YAC1BL;YACA,WAAWE,UAAU,KAAK,CAAC,KAAK,CAAC,GAAG,CAACI,CAAAA,WAC1B;oBAAE,IAAIA,SAAS,EAAE;oBAAE,MAAMA,SAAS,IAAI;gBAAC;QAEtD;QAGR,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACN;IAClC;AACJ;AAEO,MAAMO,sCAAsCC,mBAAmB,eAAe,CAAC;IAClF,WAAWb;IACX,cAAc;QAACc;QAAiBC;QAAeC;KAAqB;AACxE"}
@@ -0,0 +1,27 @@
1
+ import { TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { ListWorkflowsUseCase } from "@webiny/api-workflows/features/workflow/ListWorkflows/index.js";
3
+ /**
4
+ * Refuses every run of the "delete model and entries" task for a model bound to a workflow (D134
5
+ * point 4, R64), before anything is deleted. `triggerTask(definition: "deleteModelAndEntries")`
6
+ * starts the task without `DeleteModelOperations.fullyDeleteModel`, so the guard there alone can
7
+ * be bypassed. Registered against `TaskHandler`, so it wraps every task's handler and acts only on
8
+ * this task, identified by `params.definition`. The runner runs tasks without authorization, so
9
+ * no model is read here: the binding is looked up by the input's model id. A failed lookup refuses
10
+ * the run (fail closed); the runner turns the throw into a task error.
11
+ */
12
+ declare class DeleteModelTaskBoundToWorkflowDecoratorImpl implements TaskHandler.Interface {
13
+ private listWorkflows;
14
+ private decoratee;
15
+ constructor(listWorkflows: ListWorkflowsUseCase.Interface, decoratee: TaskHandler.Interface);
16
+ get run(): TaskHandler.Interface["run"];
17
+ get onBeforeTrigger(): TaskHandler.Interface["onBeforeTrigger"];
18
+ get onDone(): TaskHandler.Interface["onDone"];
19
+ get onError(): TaskHandler.Interface["onError"];
20
+ get onAbort(): TaskHandler.Interface["onAbort"];
21
+ get onMaxIterations(): TaskHandler.Interface["onMaxIterations"];
22
+ get createInputValidation(): TaskHandler.Interface["createInputValidation"];
23
+ }
24
+ export declare const DeleteModelTaskBoundToWorkflowDecorator: typeof DeleteModelTaskBoundToWorkflowDecoratorImpl & {
25
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskHandler<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
26
+ };
27
+ export {};
@@ -0,0 +1,64 @@
1
+ import { TaskHandler } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { DELETE_MODEL_TASK } from "@webiny/api-headless-cms-tasks/constants.js";
3
+ import { ListWorkflowsUseCase } from "@webiny/api-workflows/features/workflow/ListWorkflows/index.js";
4
+ import { ModelBoundToWorkflowError } from "../../domain/errors.js";
5
+ import { toCmsNamespace } from "../../utils/appName.js";
6
+ const BOUND_WORKFLOWS_LIMIT = 10;
7
+ class DeleteModelTaskBoundToWorkflowDecoratorImpl {
8
+ constructor(listWorkflows, decoratee){
9
+ this.listWorkflows = listWorkflows;
10
+ this.decoratee = decoratee;
11
+ }
12
+ get run() {
13
+ return async (params)=>{
14
+ if (params.definition.id === DELETE_MODEL_TASK) {
15
+ const input = params.input;
16
+ const modelId = String(input.modelId);
17
+ const workflows = await this.listWorkflows.execute({
18
+ where: {
19
+ models_in: [
20
+ toCmsNamespace(modelId)
21
+ ]
22
+ },
23
+ limit: BOUND_WORKFLOWS_LIMIT
24
+ });
25
+ if (workflows.isFail()) throw workflows.error;
26
+ if (workflows.value.items.length > 0) throw new ModelBoundToWorkflowError({
27
+ modelId,
28
+ workflows: workflows.value.items.map((workflow)=>({
29
+ id: workflow.id,
30
+ name: workflow.name
31
+ }))
32
+ });
33
+ }
34
+ return this.decoratee.run(params);
35
+ };
36
+ }
37
+ get onBeforeTrigger() {
38
+ return this.decoratee.onBeforeTrigger?.bind(this.decoratee);
39
+ }
40
+ get onDone() {
41
+ return this.decoratee.onDone?.bind(this.decoratee);
42
+ }
43
+ get onError() {
44
+ return this.decoratee.onError?.bind(this.decoratee);
45
+ }
46
+ get onAbort() {
47
+ return this.decoratee.onAbort?.bind(this.decoratee);
48
+ }
49
+ get onMaxIterations() {
50
+ return this.decoratee.onMaxIterations?.bind(this.decoratee);
51
+ }
52
+ get createInputValidation() {
53
+ return this.decoratee.createInputValidation?.bind(this.decoratee);
54
+ }
55
+ }
56
+ const DeleteModelTaskBoundToWorkflowDecorator = TaskHandler.createDecorator({
57
+ decorator: DeleteModelTaskBoundToWorkflowDecoratorImpl,
58
+ dependencies: [
59
+ ListWorkflowsUseCase
60
+ ]
61
+ });
62
+ export { DeleteModelTaskBoundToWorkflowDecorator };
63
+
64
+ //# sourceMappingURL=DeleteModelTaskBoundToWorkflowDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/DeleteModelTaskBoundToWorkflowDecorator.js","sources":["../../../src/features/hooks/DeleteModelTaskBoundToWorkflowDecorator.ts"],"sourcesContent":["import { TaskHandler } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { DELETE_MODEL_TASK } from \"@webiny/api-headless-cms-tasks/constants.js\";\nimport type { IDeleteModelTaskInput } from \"@webiny/api-headless-cms-tasks/features/DeleteModelTask/types.js\";\nimport { ListWorkflowsUseCase } from \"@webiny/api-workflows/features/workflow/ListWorkflows/index.js\";\nimport { ModelBoundToWorkflowError } from \"~/domain/errors.js\";\nimport { toCmsNamespace } from \"~/utils/appName.js\";\n\n/** v1 binds one workflow per model (D15); a few extra cover the accepted save race (D41). */\nconst BOUND_WORKFLOWS_LIMIT = 10;\n\n/**\n * Refuses every run of the \"delete model and entries\" task for a model bound to a workflow (D134\n * point 4, R64), before anything is deleted. `triggerTask(definition: \"deleteModelAndEntries\")`\n * starts the task without `DeleteModelOperations.fullyDeleteModel`, so the guard there alone can\n * be bypassed. Registered against `TaskHandler`, so it wraps every task's handler and acts only on\n * this task, identified by `params.definition`. The runner runs tasks without authorization, so\n * no model is read here: the binding is looked up by the input's model id. A failed lookup refuses\n * the run (fail closed); the runner turns the throw into a task error.\n */\nclass DeleteModelTaskBoundToWorkflowDecoratorImpl implements TaskHandler.Interface {\n public constructor(\n private listWorkflows: ListWorkflowsUseCase.Interface,\n private decoratee: TaskHandler.Interface\n ) {}\n\n public get run(): TaskHandler.Interface[\"run\"] {\n return async params => {\n if (params.definition.id === DELETE_MODEL_TASK) {\n const input: Partial<IDeleteModelTaskInput> = params.input;\n const modelId = String(input.modelId);\n const workflows = await this.listWorkflows.execute({\n where: { models_in: [toCmsNamespace(modelId)] },\n limit: BOUND_WORKFLOWS_LIMIT\n });\n if (workflows.isFail()) {\n throw workflows.error;\n }\n if (workflows.value.items.length > 0) {\n throw new ModelBoundToWorkflowError({\n modelId,\n workflows: workflows.value.items.map(workflow => {\n return { id: workflow.id, name: workflow.name };\n })\n });\n }\n }\n return this.decoratee.run(params);\n };\n }\n\n public get onBeforeTrigger(): TaskHandler.Interface[\"onBeforeTrigger\"] {\n return this.decoratee.onBeforeTrigger?.bind(this.decoratee);\n }\n\n public get onDone(): TaskHandler.Interface[\"onDone\"] {\n return this.decoratee.onDone?.bind(this.decoratee);\n }\n\n public get onError(): TaskHandler.Interface[\"onError\"] {\n return this.decoratee.onError?.bind(this.decoratee);\n }\n\n public get onAbort(): TaskHandler.Interface[\"onAbort\"] {\n return this.decoratee.onAbort?.bind(this.decoratee);\n }\n\n public get onMaxIterations(): TaskHandler.Interface[\"onMaxIterations\"] {\n return this.decoratee.onMaxIterations?.bind(this.decoratee);\n }\n\n public get createInputValidation(): TaskHandler.Interface[\"createInputValidation\"] {\n return this.decoratee.createInputValidation?.bind(this.decoratee);\n }\n}\n\nexport const DeleteModelTaskBoundToWorkflowDecorator = TaskHandler.createDecorator({\n decorator: DeleteModelTaskBoundToWorkflowDecoratorImpl,\n dependencies: [ListWorkflowsUseCase]\n});\n"],"names":["BOUND_WORKFLOWS_LIMIT","DeleteModelTaskBoundToWorkflowDecoratorImpl","listWorkflows","decoratee","params","DELETE_MODEL_TASK","input","modelId","String","workflows","toCmsNamespace","ModelBoundToWorkflowError","workflow","DeleteModelTaskBoundToWorkflowDecorator","TaskHandler","ListWorkflowsUseCase"],"mappings":";;;;;AAQA,MAAMA,wBAAwB;AAW9B,MAAMC;IACF,YACYC,aAA6C,EAC7CC,SAAgC,CAC1C;aAFUD,aAAa,GAAbA;aACAC,SAAS,GAATA;IACT;IAEH,IAAW,MAAoC;QAC3C,OAAO,OAAMC;YACT,IAAIA,OAAO,UAAU,CAAC,EAAE,KAAKC,mBAAmB;gBAC5C,MAAMC,QAAwCF,OAAO,KAAK;gBAC1D,MAAMG,UAAUC,OAAOF,MAAM,OAAO;gBACpC,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;oBAC/C,OAAO;wBAAE,WAAW;4BAACC,eAAeH;yBAAS;oBAAC;oBAC9C,OAAOP;gBACX;gBACA,IAAIS,UAAU,MAAM,IAChB,MAAMA,UAAU,KAAK;gBAEzB,IAAIA,UAAU,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAC/B,MAAM,IAAIE,0BAA0B;oBAChCJ;oBACA,WAAWE,UAAU,KAAK,CAAC,KAAK,CAAC,GAAG,CAACG,CAAAA,WAC1B;4BAAE,IAAIA,SAAS,EAAE;4BAAE,MAAMA,SAAS,IAAI;wBAAC;gBAEtD;YAER;YACA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAACR;QAC9B;IACJ;IAEA,IAAW,kBAA4D;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IAEA,IAAW,SAA0C;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS;IACrD;IAEA,IAAW,UAA4C;QACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS;IACtD;IAEA,IAAW,UAA4C;QACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS;IACtD;IAEA,IAAW,kBAA4D;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IAEA,IAAW,wBAAwE;QAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,KAAK,IAAI,CAAC,SAAS;IACpE;AACJ;AAEO,MAAMS,0CAA0CC,YAAY,eAAe,CAAC;IAC/E,WAAWb;IACX,cAAc;QAACc;KAAqB;AACxC"}
@@ -0,0 +1,19 @@
1
+ import { EntryAfterDeleteMultipleEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteMultipleEntries/index.js";
2
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
+ import { DeleteTargetReviewsUseCase } from "@webiny/api-workflows/features/review/DeleteTargetReviews/index.js";
4
+ /**
5
+ * Deletes the reviews of entries deleted by `deleteMultiple` (spec 9.3, R56), which publishes no
6
+ * per-entry delete event. The event lists exactly the entries that were deleted (permanently),
7
+ * so their reviews are deleted with one call (Q79). Failures, failed results and throws alike,
8
+ * are logged, never thrown (R81).
9
+ */
10
+ declare class DeleteReviewsOnEntriesDeleteMultipleImpl implements EntryAfterDeleteMultipleEventHandler.Interface {
11
+ private deleteTargetReviews;
12
+ private logger;
13
+ constructor(deleteTargetReviews: DeleteTargetReviewsUseCase.Interface, logger: Logger.Interface);
14
+ handle(event: EntryAfterDeleteMultipleEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const DeleteReviewsOnEntriesDeleteMultiple: typeof DeleteReviewsOnEntriesDeleteMultipleImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteMultipleEntries/events").EntryAfterDeleteMultipleEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,47 @@
1
+ import { EntryAfterDeleteMultipleEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteMultipleEntries/index.js";
2
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
+ import { DeleteTargetReviewsUseCase } from "@webiny/api-workflows/features/review/DeleteTargetReviews/index.js";
4
+ import { getCmsNamespace } from "../../utils/appName.js";
5
+ import { hasErrorSource } from "@webiny/api-workflows/domain/hasErrorSource.js";
6
+ class DeleteReviewsOnEntriesDeleteMultipleImpl {
7
+ constructor(deleteTargetReviews, logger){
8
+ this.deleteTargetReviews = deleteTargetReviews;
9
+ this.logger = logger;
10
+ }
11
+ async handle(event) {
12
+ const { model, entries } = event.payload;
13
+ const namespace = getCmsNamespace(model);
14
+ if (!namespace) return;
15
+ const targetIds = [
16
+ ...new Set(entries.map((entry)=>entry.entryId))
17
+ ];
18
+ if (0 === targetIds.length) return;
19
+ try {
20
+ const deleted = await this.deleteTargetReviews.execute({
21
+ model: namespace,
22
+ targetIds
23
+ });
24
+ if (deleted.isFail()) this.logger.error({
25
+ err: hasErrorSource(deleted.error) ? deleted.error.source : deleted.error,
26
+ model: namespace,
27
+ targetIds
28
+ }, "Could not delete the reviews of deleted entries; they are left orphaned.");
29
+ } catch (error) {
30
+ this.logger.error({
31
+ err: error,
32
+ model: namespace,
33
+ targetIds
34
+ }, "Could not delete the reviews of deleted entries; they are left orphaned.");
35
+ }
36
+ }
37
+ }
38
+ const DeleteReviewsOnEntriesDeleteMultiple = EntryAfterDeleteMultipleEventHandler.createImplementation({
39
+ implementation: DeleteReviewsOnEntriesDeleteMultipleImpl,
40
+ dependencies: [
41
+ DeleteTargetReviewsUseCase,
42
+ Logger
43
+ ]
44
+ });
45
+ export { DeleteReviewsOnEntriesDeleteMultiple };
46
+
47
+ //# sourceMappingURL=DeleteReviewsOnEntriesDeleteMultiple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/DeleteReviewsOnEntriesDeleteMultiple.js","sources":["../../../src/features/hooks/DeleteReviewsOnEntriesDeleteMultiple.ts"],"sourcesContent":["import { EntryAfterDeleteMultipleEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteMultipleEntries/index.js\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\nimport { DeleteTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/DeleteTargetReviews/index.js\";\nimport { getCmsNamespace } from \"~/utils/appName.js\";\nimport { hasErrorSource } from \"@webiny/api-workflows/domain/hasErrorSource.js\";\n\n/**\n * Deletes the reviews of entries deleted by `deleteMultiple` (spec 9.3, R56), which publishes no\n * per-entry delete event. The event lists exactly the entries that were deleted (permanently),\n * so their reviews are deleted with one call (Q79). Failures, failed results and throws alike,\n * are logged, never thrown (R81).\n */\nclass DeleteReviewsOnEntriesDeleteMultipleImpl\n implements EntryAfterDeleteMultipleEventHandler.Interface\n{\n public constructor(\n private deleteTargetReviews: DeleteTargetReviewsUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n public async handle(event: EntryAfterDeleteMultipleEventHandler.Event): Promise<void> {\n const { model, entries } = event.payload;\n const namespace = getCmsNamespace(model);\n if (!namespace) {\n return;\n }\n const targetIds = [...new Set(entries.map(entry => entry.entryId))];\n if (targetIds.length === 0) {\n return;\n }\n\n try {\n const deleted = await this.deleteTargetReviews.execute({\n model: namespace,\n targetIds\n });\n if (deleted.isFail()) {\n this.logger.error(\n {\n err: hasErrorSource(deleted.error) ? deleted.error.source : deleted.error,\n model: namespace,\n targetIds\n },\n \"Could not delete the reviews of deleted entries; they are left orphaned.\"\n );\n }\n } catch (error) {\n this.logger.error(\n { err: error, model: namespace, targetIds },\n \"Could not delete the reviews of deleted entries; they are left orphaned.\"\n );\n }\n }\n}\n\nexport const DeleteReviewsOnEntriesDeleteMultiple =\n EntryAfterDeleteMultipleEventHandler.createImplementation({\n implementation: DeleteReviewsOnEntriesDeleteMultipleImpl,\n dependencies: [DeleteTargetReviewsUseCase, Logger]\n });\n"],"names":["DeleteReviewsOnEntriesDeleteMultipleImpl","deleteTargetReviews","logger","event","model","entries","namespace","getCmsNamespace","targetIds","Set","entry","deleted","hasErrorSource","error","DeleteReviewsOnEntriesDeleteMultiple","EntryAfterDeleteMultipleEventHandler","DeleteTargetReviewsUseCase","Logger"],"mappings":";;;;;AAYA,MAAMA;IAGF,YACYC,mBAAyD,EACzDC,MAAwB,CAClC;aAFUD,mBAAmB,GAAnBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAa,OAAOC,KAAiD,EAAiB;QAClF,MAAM,EAAEC,KAAK,EAAEC,OAAO,EAAE,GAAGF,MAAM,OAAO;QACxC,MAAMG,YAAYC,gBAAgBH;QAClC,IAAI,CAACE,WACD;QAEJ,MAAME,YAAY;eAAI,IAAIC,IAAIJ,QAAQ,GAAG,CAACK,CAAAA,QAASA,MAAM,OAAO;SAAG;QACnE,IAAIF,AAAqB,MAArBA,UAAU,MAAM,EAChB;QAGJ,IAAI;YACA,MAAMG,UAAU,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBACnD,OAAOL;gBACPE;YACJ;YACA,IAAIG,QAAQ,MAAM,IACd,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBACI,KAAKC,eAAeD,QAAQ,KAAK,IAAIA,QAAQ,KAAK,CAAC,MAAM,GAAGA,QAAQ,KAAK;gBACzE,OAAOL;gBACPE;YACJ,GACA;QAGZ,EAAE,OAAOK,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,KAAKA;gBAAO,OAAOP;gBAAWE;YAAU,GAC1C;QAER;IACJ;AACJ;AAEO,MAAMM,uCACTC,qCAAqC,oBAAoB,CAAC;IACtD,gBAAgBf;IAChB,cAAc;QAACgB;QAA4BC;KAAO;AACtD"}
@@ -0,0 +1,19 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js";
2
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
+ import { DeleteTargetReviewsUseCase } from "@webiny/api-workflows/features/review/DeleteTargetReviews/index.js";
4
+ /**
5
+ * Deletes every review of a permanently deleted CMS entry with its assignment records (spec 9.3,
6
+ * R56). Trashing keeps them: the entry can be restored. A failure (a failed result or a throw) is logged, not thrown: the entry
7
+ * is already deleted, and a throw would make the use case report a failure and publish its error
8
+ * event for a delete that happened (R81). The reviews then stay orphaned (A34).
9
+ */
10
+ declare class DeleteReviewsOnEntryDeleteImpl implements EntryAfterDeleteEventHandler.Interface {
11
+ private deleteTargetReviews;
12
+ private logger;
13
+ constructor(deleteTargetReviews: DeleteTargetReviewsUseCase.Interface, logger: Logger.Interface);
14
+ handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const DeleteReviewsOnEntryDelete: typeof DeleteReviewsOnEntryDeleteImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events").EntryAfterDeleteEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,46 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js";
2
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
+ import { DeleteTargetReviewsUseCase } from "@webiny/api-workflows/features/review/DeleteTargetReviews/index.js";
4
+ import { getCmsNamespace } from "../../utils/appName.js";
5
+ import { hasErrorSource } from "@webiny/api-workflows/domain/hasErrorSource.js";
6
+ class DeleteReviewsOnEntryDeleteImpl {
7
+ constructor(deleteTargetReviews, logger){
8
+ this.deleteTargetReviews = deleteTargetReviews;
9
+ this.logger = logger;
10
+ }
11
+ async handle(event) {
12
+ const { model, entry, permanent } = event.payload;
13
+ if (!permanent) return;
14
+ const namespace = getCmsNamespace(model);
15
+ if (!namespace) return;
16
+ try {
17
+ const deleted = await this.deleteTargetReviews.execute({
18
+ model: namespace,
19
+ targetIds: [
20
+ entry.entryId
21
+ ]
22
+ });
23
+ if (deleted.isFail()) this.logger.error({
24
+ err: hasErrorSource(deleted.error) ? deleted.error.source : deleted.error,
25
+ model: namespace,
26
+ targetId: entry.entryId
27
+ }, "Could not delete the reviews of a deleted entry; they are left orphaned.");
28
+ } catch (error) {
29
+ this.logger.error({
30
+ err: error,
31
+ model: namespace,
32
+ targetId: entry.entryId
33
+ }, "Could not delete the reviews of a deleted entry; they are left orphaned.");
34
+ }
35
+ }
36
+ }
37
+ const DeleteReviewsOnEntryDelete = EntryAfterDeleteEventHandler.createImplementation({
38
+ implementation: DeleteReviewsOnEntryDeleteImpl,
39
+ dependencies: [
40
+ DeleteTargetReviewsUseCase,
41
+ Logger
42
+ ]
43
+ });
44
+ export { DeleteReviewsOnEntryDelete };
45
+
46
+ //# sourceMappingURL=DeleteReviewsOnEntryDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/hooks/DeleteReviewsOnEntryDelete.js","sources":["../../../src/features/hooks/DeleteReviewsOnEntryDelete.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js\";\nimport { Logger } from \"@webiny/api-core/features/logger/index.js\";\nimport { DeleteTargetReviewsUseCase } from \"@webiny/api-workflows/features/review/DeleteTargetReviews/index.js\";\nimport { getCmsNamespace } from \"~/utils/appName.js\";\nimport { hasErrorSource } from \"@webiny/api-workflows/domain/hasErrorSource.js\";\n\n/**\n * Deletes every review of a permanently deleted CMS entry with its assignment records (spec 9.3,\n * R56). Trashing keeps them: the entry can be restored. A failure (a failed result or a throw) is logged, not thrown: the entry\n * is already deleted, and a throw would make the use case report a failure and publish its error\n * event for a delete that happened (R81). The reviews then stay orphaned (A34).\n */\nclass DeleteReviewsOnEntryDeleteImpl implements EntryAfterDeleteEventHandler.Interface {\n public constructor(\n private deleteTargetReviews: DeleteTargetReviewsUseCase.Interface,\n private logger: Logger.Interface\n ) {}\n\n public async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { model, entry, permanent } = event.payload;\n if (!permanent) {\n return;\n }\n const namespace = getCmsNamespace(model);\n if (!namespace) {\n return;\n }\n\n try {\n const deleted = await this.deleteTargetReviews.execute({\n model: namespace,\n targetIds: [entry.entryId]\n });\n if (deleted.isFail()) {\n this.logger.error(\n {\n err: hasErrorSource(deleted.error) ? deleted.error.source : deleted.error,\n model: namespace,\n targetId: entry.entryId\n },\n \"Could not delete the reviews of a deleted entry; they are left orphaned.\"\n );\n }\n } catch (error) {\n this.logger.error(\n { err: error, model: namespace, targetId: entry.entryId },\n \"Could not delete the reviews of a deleted entry; they are left orphaned.\"\n );\n }\n }\n}\n\nexport const DeleteReviewsOnEntryDelete = EntryAfterDeleteEventHandler.createImplementation({\n implementation: DeleteReviewsOnEntryDeleteImpl,\n dependencies: [DeleteTargetReviewsUseCase, Logger]\n});\n"],"names":["DeleteReviewsOnEntryDeleteImpl","deleteTargetReviews","logger","event","model","entry","permanent","namespace","getCmsNamespace","deleted","hasErrorSource","error","DeleteReviewsOnEntryDelete","EntryAfterDeleteEventHandler","DeleteTargetReviewsUseCase","Logger"],"mappings":";;;;;AAYA,MAAMA;IACF,YACYC,mBAAyD,EACzDC,MAAwB,CAClC;aAFUD,mBAAmB,GAAnBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAa,OAAOC,KAAyC,EAAiB;QAC1E,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGH,MAAM,OAAO;QACjD,IAAI,CAACG,WACD;QAEJ,MAAMC,YAAYC,gBAAgBJ;QAClC,IAAI,CAACG,WACD;QAGJ,IAAI;YACA,MAAME,UAAU,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;gBACnD,OAAOF;gBACP,WAAW;oBAACF,MAAM,OAAO;iBAAC;YAC9B;YACA,IAAII,QAAQ,MAAM,IACd,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBACI,KAAKC,eAAeD,QAAQ,KAAK,IAAIA,QAAQ,KAAK,CAAC,MAAM,GAAGA,QAAQ,KAAK;gBACzE,OAAOF;gBACP,UAAUF,MAAM,OAAO;YAC3B,GACA;QAGZ,EAAE,OAAOM,OAAO;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,KAAKA;gBAAO,OAAOJ;gBAAW,UAAUF,MAAM,OAAO;YAAC,GACxD;QAER;IACJ;AACJ;AAEO,MAAMO,6BAA6BC,6BAA6B,oBAAoB,CAAC;IACxF,gBAAgBb;IAChB,cAAc;QAACc;QAA4BC;KAAO;AACtD"}
@@ -0,0 +1,18 @@
1
+ import { EntryRevisionAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/index.js";
2
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
+ import { DeleteTargetReviewsUseCase } from "@webiny/api-workflows/features/review/DeleteTargetReviews/index.js";
4
+ /**
5
+ * Deletes the reviews of a deleted CMS revision with their assignment records (spec 9.3, R56).
6
+ * Deleting the last revision deletes the entry, which `DeleteReviewsOnEntryDelete` handles.
7
+ * Failures, failed results and throws alike, are logged, never thrown (R81).
8
+ */
9
+ declare class DeleteReviewsOnRevisionDeleteImpl implements EntryRevisionAfterDeleteEventHandler.Interface {
10
+ private deleteTargetReviews;
11
+ private logger;
12
+ constructor(deleteTargetReviews: DeleteTargetReviewsUseCase.Interface, logger: Logger.Interface);
13
+ handle(event: EntryRevisionAfterDeleteEventHandler.Event): Promise<void>;
14
+ }
15
+ export declare const DeleteReviewsOnRevisionDelete: typeof DeleteReviewsOnRevisionDeleteImpl & {
16
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntryRevision/events").EntryRevisionAfterDeleteEvent>>;
17
+ };
18
+ export {};