@webiny/app-website-builder-workflows 0.0.0-unstable.0156a4c312

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 (402) hide show
  1. package/Components/ContentReviews/WbContentReviews.d.ts +2 -0
  2. package/Components/ContentReviews/WbContentReviews.js +41 -0
  3. package/Components/ContentReviews/WbContentReviews.js.map +1 -0
  4. package/Components/ContentReviews/WbContentReviews.smoke.test.d.ts +1 -0
  5. package/Components/ContentReviews/WbContentReviews.smoke.test.js +59 -0
  6. package/Components/ContentReviews/WbContentReviews.smoke.test.js.map +1 -0
  7. package/Components/ContentReviews/WbContentReviews.test.d.ts +1 -0
  8. package/Components/ContentReviews/WbContentReviews.test.js +80 -0
  9. package/Components/ContentReviews/WbContentReviews.test.js.map +1 -0
  10. package/Components/ContentReviews/WbContentReviewsSidebarItem.d.ts +2 -0
  11. package/Components/ContentReviews/WbContentReviewsSidebarItem.js +18 -0
  12. package/Components/ContentReviews/WbContentReviewsSidebarItem.js.map +1 -0
  13. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.d.ts +1 -0
  14. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js +67 -0
  15. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js.map +1 -0
  16. package/Components/PageEditor/DisabledPublishButton.d.ts +6 -0
  17. package/Components/PageEditor/DisabledPublishButton.js +17 -0
  18. package/Components/PageEditor/DisabledPublishButton.js.map +1 -0
  19. package/Components/PageEditor/DisabledPublishButton.test.d.ts +1 -0
  20. package/Components/PageEditor/DisabledPublishButton.test.js +67 -0
  21. package/Components/PageEditor/DisabledPublishButton.test.js.map +1 -0
  22. package/Components/PageEditor/PageBasePublishDecorator.d.ts +2 -0
  23. package/Components/PageEditor/PageBasePublishDecorator.js +23 -0
  24. package/Components/PageEditor/PageBasePublishDecorator.js.map +1 -0
  25. package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
  26. package/Components/PageEditor/PageEditorAutoSave.js +23 -0
  27. package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
  28. package/Components/PageEditor/PageEditorAutoSave.test.d.ts +1 -0
  29. package/Components/PageEditor/PageEditorAutoSave.test.js +111 -0
  30. package/Components/PageEditor/PageEditorAutoSave.test.js.map +1 -0
  31. package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
  32. package/Components/PageEditor/PageEditorConfig.js +13 -0
  33. package/Components/PageEditor/PageEditorConfig.js.map +1 -0
  34. package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
  35. package/Components/PageEditor/PageEditorLayout.js +10 -0
  36. package/Components/PageEditor/PageEditorLayout.js.map +1 -0
  37. package/Components/PageEditor/PageEditorLayout.test.d.ts +1 -0
  38. package/Components/PageEditor/PageEditorLayout.test.js +121 -0
  39. package/Components/PageEditor/PageEditorLayout.test.js.map +1 -0
  40. package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
  41. package/Components/PageEditor/PageEditorTopBar.js +10 -0
  42. package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
  43. package/Components/PageEditor/PageEditorTopBar.test.d.ts +1 -0
  44. package/Components/PageEditor/PageEditorTopBar.test.js +175 -0
  45. package/Components/PageEditor/PageEditorTopBar.test.js.map +1 -0
  46. package/Components/PageEditor/PageNewRevisionDecorator.d.ts +2 -0
  47. package/Components/PageEditor/PageNewRevisionDecorator.js +24 -0
  48. package/Components/PageEditor/PageNewRevisionDecorator.js.map +1 -0
  49. package/Components/PageEditor/PageNewRevisionDecorator.test.d.ts +1 -0
  50. package/Components/PageEditor/PageNewRevisionDecorator.test.js +107 -0
  51. package/Components/PageEditor/PageNewRevisionDecorator.test.js.map +1 -0
  52. package/Components/PageEditor/PageReadOnlySync.d.ts +3 -0
  53. package/Components/PageEditor/PageReadOnlySync.js +23 -0
  54. package/Components/PageEditor/PageReadOnlySync.js.map +1 -0
  55. package/Components/PageEditor/PageReviewBar.d.ts +4 -0
  56. package/Components/PageEditor/PageReviewBar.js +93 -0
  57. package/Components/PageEditor/PageReviewBar.js.map +1 -0
  58. package/Components/PageEditor/PageReviewBar.test.d.ts +1 -0
  59. package/Components/PageEditor/PageReviewBar.test.js +135 -0
  60. package/Components/PageEditor/PageReviewBar.test.js.map +1 -0
  61. package/Components/PageEditor/PageReviewPublishAction.d.ts +2 -0
  62. package/Components/PageEditor/PageReviewPublishAction.js +15 -0
  63. package/Components/PageEditor/PageReviewPublishAction.js.map +1 -0
  64. package/Components/PageEditor/PageReviewPublishButton.d.ts +4 -0
  65. package/Components/PageEditor/PageReviewPublishButton.js +23 -0
  66. package/Components/PageEditor/PageReviewPublishButton.js.map +1 -0
  67. package/Components/PageEditor/PageScheduleDecorator.d.ts +2 -0
  68. package/Components/PageEditor/PageScheduleDecorator.js +23 -0
  69. package/Components/PageEditor/PageScheduleDecorator.js.map +1 -0
  70. package/Components/PageEditor/PageScheduleDecorator.test.d.ts +1 -0
  71. package/Components/PageEditor/PageScheduleDecorator.test.js +75 -0
  72. package/Components/PageEditor/PageScheduleDecorator.test.js.map +1 -0
  73. package/Components/PageEditor/getPageReadOnlyReason.d.ts +4 -0
  74. package/Components/PageEditor/getPageReadOnlyReason.js +20 -0
  75. package/Components/PageEditor/getPageReadOnlyReason.js.map +1 -0
  76. package/Components/PageEditor/getPageReadOnlyReason.test.d.ts +1 -0
  77. package/Components/PageEditor/getPageReadOnlyReason.test.js +122 -0
  78. package/Components/PageEditor/getPageReadOnlyReason.test.js.map +1 -0
  79. package/Components/PageEditor/getPageReviewContext.d.ts +9 -0
  80. package/Components/PageEditor/getPageReviewContext.js +13 -0
  81. package/Components/PageEditor/getPageReviewContext.js.map +1 -0
  82. package/Components/PageEditor/getPageReviewContext.test.d.ts +1 -0
  83. package/Components/PageEditor/getPageReviewContext.test.js +42 -0
  84. package/Components/PageEditor/getPageReviewContext.test.js.map +1 -0
  85. package/Components/PageEditor/pageEditorDocument.d.ts +17 -0
  86. package/Components/PageEditor/pageEditorDocument.js +0 -0
  87. package/Components/PageEditor/pageReviewMatrix.test.d.ts +1 -0
  88. package/Components/PageEditor/pageReviewMatrix.test.js +223 -0
  89. package/Components/PageEditor/pageReviewMatrix.test.js.map +1 -0
  90. package/Components/PageEditor/publishMatrix.test.d.ts +1 -0
  91. package/Components/PageEditor/publishMatrix.test.js +313 -0
  92. package/Components/PageEditor/publishMatrix.test.js.map +1 -0
  93. package/Components/PagesList/PageListReviewGatedActions.d.ts +2 -0
  94. package/Components/PagesList/PageListReviewGatedActions.js +27 -0
  95. package/Components/PagesList/PageListReviewGatedActions.js.map +1 -0
  96. package/Components/PagesList/PageListReviewGatedActions.test.d.ts +1 -0
  97. package/Components/PagesList/PageListReviewGatedActions.test.js +94 -0
  98. package/Components/PagesList/PageListReviewGatedActions.test.js.map +1 -0
  99. package/Components/PagesList/PagesList.d.ts +2 -0
  100. package/Components/PagesList/PagesList.js +8 -0
  101. package/Components/PagesList/PagesList.js.map +1 -0
  102. package/Components/PagesList/PagesList.test.d.ts +1 -0
  103. package/Components/PagesList/PagesList.test.js +47 -0
  104. package/Components/PagesList/PagesList.test.js.map +1 -0
  105. package/Components/PagesList/index.d.ts +1 -0
  106. package/Components/PagesList/index.js +1 -0
  107. package/Components/index.d.ts +2 -0
  108. package/Components/index.js +2 -0
  109. package/LICENSE +21 -0
  110. package/README.md +11 -0
  111. package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
  112. package/Routes/WebsiteBuilderWorkflowsMenu.js +23 -0
  113. package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
  114. package/Routes/WebsiteBuilderWorkflowsMenu.test.d.ts +1 -0
  115. package/Routes/WebsiteBuilderWorkflowsMenu.test.js +141 -0
  116. package/Routes/WebsiteBuilderWorkflowsMenu.test.js.map +1 -0
  117. package/Routes/index.d.ts +1 -0
  118. package/Routes/index.js +1 -0
  119. package/constants.d.ts +1 -0
  120. package/constants.js +4 -0
  121. package/constants.js.map +1 -0
  122. package/editorGlue.wiring.test.d.ts +1 -0
  123. package/editorGlue.wiring.test.js +128 -0
  124. package/editorGlue.wiring.test.js.map +1 -0
  125. package/features/cache/WbReviewCacheSyncHandler.d.ts +8 -0
  126. package/features/cache/WbReviewCacheSyncHandler.js +14 -0
  127. package/features/cache/WbReviewCacheSyncHandler.js.map +1 -0
  128. package/features/cache/WbReviewPageCacheWriter.d.ts +17 -0
  129. package/features/cache/WbReviewPageCacheWriter.js +39 -0
  130. package/features/cache/WbReviewPageCacheWriter.js.map +1 -0
  131. package/features/cache/WbReviewPageCacheWriter.test.d.ts +1 -0
  132. package/features/cache/WbReviewPageCacheWriter.test.js +115 -0
  133. package/features/cache/WbReviewPageCacheWriter.test.js.map +1 -0
  134. package/features/cache/abstractions.d.ts +5 -0
  135. package/features/cache/abstractions.js +5 -0
  136. package/features/cache/abstractions.js.map +1 -0
  137. package/features/cache/feature.d.ts +1 -0
  138. package/features/cache/feature.js +13 -0
  139. package/features/cache/feature.js.map +1 -0
  140. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.d.ts +25 -0
  141. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js +112 -0
  142. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js.map +1 -0
  143. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.d.ts +1 -0
  144. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js +632 -0
  145. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js.map +1 -0
  146. package/features/editorGateway/feature.d.ts +1 -0
  147. package/features/editorGateway/feature.js +11 -0
  148. package/features/editorGateway/feature.js.map +1 -0
  149. package/features/editorGateway/feature.test.d.ts +1 -0
  150. package/features/editorGateway/feature.test.js +244 -0
  151. package/features/editorGateway/feature.test.js.map +1 -0
  152. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.d.ts +1 -0
  153. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js +19 -0
  154. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js.map +1 -0
  155. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.d.ts +1 -0
  156. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js +19 -0
  157. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js.map +1 -0
  158. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.d.ts +1 -0
  159. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js +19 -0
  160. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js.map +1 -0
  161. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.d.ts +1 -0
  162. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js +23 -0
  163. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js.map +1 -0
  164. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.d.ts +1 -0
  165. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js +19 -0
  166. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js.map +1 -0
  167. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.d.ts +1 -0
  168. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js +16 -0
  169. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js.map +1 -0
  170. package/features/editorMounting/WbWorkflowEditorAppAdapter.d.ts +21 -0
  171. package/features/editorMounting/WbWorkflowEditorAppAdapter.js +45 -0
  172. package/features/editorMounting/WbWorkflowEditorAppAdapter.js.map +1 -0
  173. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.d.ts +1 -0
  174. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js +115 -0
  175. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js.map +1 -0
  176. package/features/editorMounting/abstractions.d.ts +5 -0
  177. package/features/editorMounting/abstractions.js +5 -0
  178. package/features/editorMounting/abstractions.js.map +1 -0
  179. package/features/editorMounting/feature.d.ts +3 -0
  180. package/features/editorMounting/feature.js +19 -0
  181. package/features/editorMounting/feature.js.map +1 -0
  182. package/features/editorMounting/feature.test.d.ts +1 -0
  183. package/features/editorMounting/feature.test.js +93 -0
  184. package/features/editorMounting/feature.test.js.map +1 -0
  185. package/features/editorReview/WbPageContentReloader.d.ts +12 -0
  186. package/features/editorReview/WbPageContentReloader.js +40 -0
  187. package/features/editorReview/WbPageContentReloader.js.map +1 -0
  188. package/features/editorReview/WbPageContentReloader.test.d.ts +1 -0
  189. package/features/editorReview/WbPageContentReloader.test.js +222 -0
  190. package/features/editorReview/WbPageContentReloader.test.js.map +1 -0
  191. package/features/editorReview/WbPageReview.d.ts +8 -0
  192. package/features/editorReview/WbPageReview.js +14 -0
  193. package/features/editorReview/WbPageReview.js.map +1 -0
  194. package/features/editorReview/WbPageUnsavedChanges.d.ts +8 -0
  195. package/features/editorReview/WbPageUnsavedChanges.js +12 -0
  196. package/features/editorReview/WbPageUnsavedChanges.js.map +1 -0
  197. package/features/editorReview/WbPageUnsavedChanges.test.d.ts +1 -0
  198. package/features/editorReview/WbPageUnsavedChanges.test.js +33 -0
  199. package/features/editorReview/WbPageUnsavedChanges.test.js.map +1 -0
  200. package/features/editorReview/abstractions.d.ts +5 -0
  201. package/features/editorReview/abstractions.js +5 -0
  202. package/features/editorReview/abstractions.js.map +1 -0
  203. package/features/editorReview/feature.d.ts +3 -0
  204. package/features/editorReview/feature.js +17 -0
  205. package/features/editorReview/feature.js.map +1 -0
  206. package/features/gateway/WbReviewChangeMessageHandler.d.ts +8 -0
  207. package/features/gateway/WbReviewChangeMessageHandler.js +16 -0
  208. package/features/gateway/WbReviewChangeMessageHandler.js.map +1 -0
  209. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.d.ts +13 -0
  210. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js +35 -0
  211. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js.map +1 -0
  212. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.d.ts +1 -0
  213. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js +47 -0
  214. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js.map +1 -0
  215. package/features/gateway/WbReviewContentAdapter/abstractions.d.ts +5 -0
  216. package/features/gateway/WbReviewContentAdapter/abstractions.js +5 -0
  217. package/features/gateway/WbReviewContentAdapter/abstractions.js.map +1 -0
  218. package/features/gateway/WbReviewGateway/WbReviewGateway.d.ts +51 -0
  219. package/features/gateway/WbReviewGateway/WbReviewGateway.js +216 -0
  220. package/features/gateway/WbReviewGateway/WbReviewGateway.js.map +1 -0
  221. package/features/gateway/WbReviewGateway/WbReviewGateway.test.d.ts +1 -0
  222. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js +647 -0
  223. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js.map +1 -0
  224. package/features/gateway/WbReviewNotificationHandler.d.ts +8 -0
  225. package/features/gateway/WbReviewNotificationHandler.js +16 -0
  226. package/features/gateway/WbReviewNotificationHandler.js.map +1 -0
  227. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.d.ts +8 -0
  228. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js +14 -0
  229. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js.map +1 -0
  230. package/features/gateway/WbReviewRowProvider/abstractions.d.ts +5 -0
  231. package/features/gateway/WbReviewRowProvider/abstractions.js +5 -0
  232. package/features/gateway/WbReviewRowProvider/abstractions.js.map +1 -0
  233. package/features/gateway/assertWbPageNamespace.d.ts +1 -0
  234. package/features/gateway/assertWbPageNamespace.js +7 -0
  235. package/features/gateway/assertWbPageNamespace.js.map +1 -0
  236. package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
  237. package/features/gateway/contentReviewsBindings.test.js +159 -0
  238. package/features/gateway/contentReviewsBindings.test.js.map +1 -0
  239. package/features/gateway/feature.d.ts +4 -0
  240. package/features/gateway/feature.js +27 -0
  241. package/features/gateway/feature.js.map +1 -0
  242. package/features/gateway/feature.test.d.ts +1 -0
  243. package/features/gateway/feature.test.js +85 -0
  244. package/features/gateway/feature.test.js.map +1 -0
  245. package/features/gateway/graphql/WbOperationResponse.d.ts +3 -0
  246. package/features/gateway/graphql/WbOperationResponse.js +0 -0
  247. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.d.ts +1 -0
  248. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js +22 -0
  249. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js.map +1 -0
  250. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.d.ts +1 -0
  251. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js +18 -0
  252. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js.map +1 -0
  253. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.d.ts +1 -0
  254. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js +26 -0
  255. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js.map +1 -0
  256. package/features/gateway/graphql/getWebsiteBuilderPageReview.d.ts +1 -0
  257. package/features/gateway/graphql/getWebsiteBuilderPageReview.js +18 -0
  258. package/features/gateway/graphql/getWebsiteBuilderPageReview.js.map +1 -0
  259. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.d.ts +1 -0
  260. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js +18 -0
  261. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js.map +1 -0
  262. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.d.ts +1 -0
  263. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js +18 -0
  264. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js.map +1 -0
  265. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.d.ts +1 -0
  266. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js +18 -0
  267. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js.map +1 -0
  268. package/features/gateway/graphql/listWebsiteBuilderPageReviews.d.ts +1 -0
  269. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js +34 -0
  270. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js.map +1 -0
  271. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.d.ts +1 -0
  272. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js +22 -0
  273. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js.map +1 -0
  274. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.d.ts +1 -0
  275. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js +18 -0
  276. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js.map +1 -0
  277. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.d.ts +1 -0
  278. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js +22 -0
  279. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js.map +1 -0
  280. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.d.ts +1 -0
  281. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js +22 -0
  282. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js.map +1 -0
  283. package/features/gateway/graphql/requestWebsiteBuilderPageReview.d.ts +1 -0
  284. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js +26 -0
  285. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js.map +1 -0
  286. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.d.ts +1 -0
  287. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js +18 -0
  288. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js.map +1 -0
  289. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.d.ts +1 -0
  290. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js +18 -0
  291. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js.map +1 -0
  292. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.d.ts +1 -0
  293. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js +26 -0
  294. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js.map +1 -0
  295. package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +14 -0
  296. package/features/trash/BulkDeletePresenterReviewDecorator.js +27 -0
  297. package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
  298. package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
  299. package/features/trash/BulkDeletePresenterReviewDecorator.test.js +234 -0
  300. package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
  301. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.d.ts +13 -0
  302. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js +23 -0
  303. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js.map +1 -0
  304. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.d.ts +1 -0
  305. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js +114 -0
  306. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js.map +1 -0
  307. package/features/trash/DeletePageUseCaseReviewDecorator.d.ts +13 -0
  308. package/features/trash/DeletePageUseCaseReviewDecorator.js +23 -0
  309. package/features/trash/DeletePageUseCaseReviewDecorator.js.map +1 -0
  310. package/features/trash/DeletePageUseCaseReviewDecorator.test.d.ts +1 -0
  311. package/features/trash/DeletePageUseCaseReviewDecorator.test.js +134 -0
  312. package/features/trash/DeletePageUseCaseReviewDecorator.test.js.map +1 -0
  313. package/features/trash/feature.d.ts +1 -0
  314. package/features/trash/feature.js +15 -0
  315. package/features/trash/feature.js.map +1 -0
  316. package/features/trash/feature.test.d.ts +1 -0
  317. package/features/trash/feature.test.js +183 -0
  318. package/features/trash/feature.test.js.map +1 -0
  319. package/hooks/usePage.d.ts +5 -0
  320. package/hooks/usePage.js +15 -0
  321. package/hooks/usePage.js.map +1 -0
  322. package/hooks/usePage.test.d.ts +1 -0
  323. package/hooks/usePage.test.js +49 -0
  324. package/hooks/usePage.test.js.map +1 -0
  325. package/index.d.ts +2 -0
  326. package/index.js +40 -0
  327. package/index.js.map +1 -0
  328. package/index.mount.test.d.ts +1 -0
  329. package/index.mount.test.js +50 -0
  330. package/index.mount.test.js.map +1 -0
  331. package/index.test.d.ts +1 -0
  332. package/index.test.js +523 -0
  333. package/index.test.js.map +1 -0
  334. package/package.json +54 -0
  335. package/pageListChangeStatus.wiring.test.d.ts +1 -0
  336. package/pageListChangeStatus.wiring.test.js +175 -0
  337. package/pageListChangeStatus.wiring.test.js.map +1 -0
  338. package/pageListGlue.wiring.test.d.ts +1 -0
  339. package/pageListGlue.wiring.test.js +220 -0
  340. package/pageListGlue.wiring.test.js.map +1 -0
  341. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.d.ts +8 -0
  342. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js +16 -0
  343. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js.map +1 -0
  344. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.d.ts +1 -0
  345. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js +19 -0
  346. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js.map +1 -0
  347. package/presentation/page/PageGet/feature.d.ts +1 -0
  348. package/presentation/page/PageGet/feature.js +11 -0
  349. package/presentation/page/PageGet/feature.js.map +1 -0
  350. package/presentation/page/PageList/WbReviewListPagesFieldSelection.d.ts +8 -0
  351. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js +16 -0
  352. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js.map +1 -0
  353. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.d.ts +1 -0
  354. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js +19 -0
  355. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js.map +1 -0
  356. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.d.ts +12 -0
  357. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js +24 -0
  358. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js.map +1 -0
  359. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.d.ts +1 -0
  360. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js +70 -0
  361. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js.map +1 -0
  362. package/presentation/page/PageList/feature.d.ts +1 -0
  363. package/presentation/page/PageList/feature.js +13 -0
  364. package/presentation/page/PageList/feature.js.map +1 -0
  365. package/presentation/page/RevisionList/RevisionListPresenterDecorator.d.ts +15 -0
  366. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js +36 -0
  367. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js.map +1 -0
  368. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.d.ts +1 -0
  369. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js +119 -0
  370. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js.map +1 -0
  371. package/presentation/page/RevisionList/feature.d.ts +1 -0
  372. package/presentation/page/RevisionList/feature.js +11 -0
  373. package/presentation/page/RevisionList/feature.js.map +1 -0
  374. package/presentation/page/wbReviewPageSelection.d.ts +1 -0
  375. package/presentation/page/wbReviewPageSelection.js +9 -0
  376. package/presentation/page/wbReviewPageSelection.js.map +1 -0
  377. package/publishAutosave.wiring.test.d.ts +1 -0
  378. package/publishAutosave.wiring.test.js +162 -0
  379. package/publishAutosave.wiring.test.js.map +1 -0
  380. package/routes.d.ts +9 -0
  381. package/routes.js +19 -0
  382. package/routes.js.map +1 -0
  383. package/testing/WbEditorHarness.d.ts +11 -0
  384. package/testing/WbEditorHarness.js +22 -0
  385. package/testing/WbEditorHarness.js.map +1 -0
  386. package/testing/createFakeSession.d.ts +9 -0
  387. package/testing/createFakeSession.js +29 -0
  388. package/testing/createFakeSession.js.map +1 -0
  389. package/testing/createFakeVm.d.ts +3 -0
  390. package/testing/createFakeVm.js +51 -0
  391. package/testing/createFakeVm.js.map +1 -0
  392. package/testing/createFolder.d.ts +2 -0
  393. package/testing/createFolder.js +13 -0
  394. package/testing/createFolder.js.map +1 -0
  395. package/testing/createPageEditor.d.ts +4 -0
  396. package/testing/createPageEditor.js +26 -0
  397. package/testing/createPageEditor.js.map +1 -0
  398. package/testing/registerPageContent.d.ts +20 -0
  399. package/testing/registerPageContent.js +28 -0
  400. package/testing/registerPageContent.js.map +1 -0
  401. package/types.d.ts +9 -0
  402. package/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/WbReviewGateway/WbReviewGateway.test.js","sources":["../../../../src/features/gateway/WbReviewGateway/WbReviewGateway.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_RUN_INFO_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_CANDIDATE_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { WORKFLOW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport { ReviewAppGateway as GatewayAbstraction } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway.js\";\n\ndescribe(\"WbReviewGateway\", () => {\n const client = { execute: vi.fn() };\n let gateway: GatewayAbstraction.Interface;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n const container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n container.register(WbReviewGateway);\n gateway = container.resolve(GatewayAbstraction);\n });\n\n it(\"serves the wb app (R347)\", () => {\n expect(gateway.app).toBe(\"wb\");\n });\n\n it(\"claims only the page namespace (R347)\", () => {\n expect(gateway.canHandle(\"wb.page\")).toBe(true);\n expect(gateway.canHandle(\"wb.pages\")).toBe(false);\n expect(gateway.canHandle(\"wb\")).toBe(false);\n expect(gateway.canHandle(\"cms.article\")).toBe(false);\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"lists the page workflows without variables\", async () => {\n const envelope = { data: [{ id: \"workflow-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageWorkflows: envelope }\n });\n\n const result = await gateway.listWorkflows();\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toBeUndefined();\n expect(request.query).toContain(\"websiteBuilder\");\n expect(request.query).toContain(\"listWebsiteBuilderPageWorkflows\");\n expect(request.query).toContain(WORKFLOW_FIELDS);\n });\n\n it(\"reads the target review by revision id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: envelope }\n });\n\n const result = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ revisionId: \"page-1#0001\" });\n expect(request.query).toContain(\n \"getWebsiteBuilderPageTargetReview(revisionId: $revisionId)\"\n );\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"returns an empty target review as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: envelope }\n });\n\n const result = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"rejects a namespace other than wb.page before sending a request\", async () => {\n const cmsTarget = { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" };\n\n await expect(gateway.getTargetReview(cmsTarget)).rejects.toThrow(\n 'Invalid app name: \"cms.article\".'\n );\n await expect(\n gateway.requestReview({ target: cmsTarget, title: \"Review\", picks: [] })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n await expect(\n gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: cmsTarget\n })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n await expect(\n gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: null,\n action: \"trash\"\n })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"reads one review by id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.getReview(\"review-1\");\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ id: \"review-1\" });\n expect(request.query).toContain(\"getWebsiteBuilderPageReview(id: $id)\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"lists reviews, passes the My requests filters and drops the content type filter\", async () => {\n const envelope = {\n data: [{ review: { id: \"review-1\" }, flags: {} }],\n meta: { cursor: \"cursor-2\", hasMoreItems: true },\n error: null\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageReviews: envelope }\n });\n\n const result = await gateway.listReviews({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n list: \"myRequests\",\n where: {\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n expect(request.variables.where).not.toHaveProperty(\"modelId\");\n expect(request.query).toContain(\"$where: WbPageReviewListWhere\");\n expect(request.query).toContain(\"listWebsiteBuilderPageReviews(\");\n expect(request.query).toContain(\"meta\");\n expect(request.query).toContain(\"hasMoreItems\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_FIELDS);\n });\n\n it(\"lists the candidates of a step before a review exists\", async () => {\n const envelope = { data: [{ id: \"user-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageStepCandidates: envelope }\n });\n\n const result = await gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" }\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n revisionId: \"page-1#0001\"\n });\n expect(request.query).toContain(\"listWebsiteBuilderPageStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"lists who a step of a review can be reassigned to\", async () => {\n const envelope = { data: [{ id: \"user-2\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageReviewStepCandidates: envelope }\n });\n\n const result = await gateway.listReviewStepCandidates({\n reviewId: \"review-1\",\n stepId: \"step-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"listWebsiteBuilderPageReviewStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"requests a review with the title and the picks\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { requestWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.requestReview({\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" },\n title: \"Launch page\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n revisionId: \"page-1#0001\",\n title: \"Launch page\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n expect(request.query).toContain(\"requestWebsiteBuilderPageReview(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"starts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { startWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"startWebsiteBuilderPageReviewStep(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"takes a step over and passes the notify choice\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { takeOverWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.takeOverStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n expect(request.query).toContain(\"takeOverWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"reassigns a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { reassignWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.reassignStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n expect(request.query).toContain(\"reassignWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"approves a step with and without a comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { approveWebsiteBuilderPageReviewStep: envelope }\n });\n\n await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n const result = await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n\n expect(result).toEqual(envelope);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n expect(client.execute.mock.calls[1][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n expect(client.execute.mock.calls[0][0].query).toContain(\n \"approveWebsiteBuilderPageReviewStep(\"\n );\n });\n\n it(\"rejects a step with the comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { rejectWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.rejectStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The hero image is wrong.\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The hero image is wrong.\"\n });\n expect(request.query).toContain(\"rejectWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"cancels a review\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.cancelReview({ reviewId: \"review-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\" });\n expect(request.query).toContain(\"cancelWebsiteBuilderPageReview(reviewId: $reviewId)\");\n });\n\n it(\"cancels the reviews of one page revision before a delete\", async () => {\n const envelope = { data: [{ id: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReviewsForDelete: envelope }\n });\n\n const result = await gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0002\",\n action: \"delete\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n pageId: \"page-1\",\n revisionId: \"page-1#0002\",\n action: \"delete\"\n });\n expect(request.query).toContain(\"cancelWebsiteBuilderPageReviewsForDelete(\");\n });\n\n it(\"cancels every review of a page when no revision is given\", async () => {\n const envelope = { data: [], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReviewsForDelete: envelope }\n });\n\n await gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n pageId: \"page-1\",\n revisionId: null,\n action: \"trash\"\n });\n });\n\n it(\"restarts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { restartWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"mutation RestartWebsiteBuilderPageReviewStep\");\n expect(request.query).toContain(\n \"restartWebsiteBuilderPageReviewStep(reviewId: $reviewId, stepId: $stepId)\"\n );\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"returns a restart conflict as an envelope error and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/InvalidState\", message: \"Not failed.\", data: null }\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { restartWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"reads the run of a step by review, step and task id\", async () => {\n const envelope = { data: { taskId: \"task-1\", status: \"done\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReviewStepRun: envelope }\n });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n expect(request.query).toContain(\"query GetWebsiteBuilderPageReviewStepRun\");\n expect(request.query).toContain(\n \"getWebsiteBuilderPageReviewStepRun(reviewId: $reviewId, stepId: $stepId, taskId: $taskId)\"\n );\n expect(request.query).toContain(STEP_RUN_INFO_FIELDS);\n });\n\n it(\"returns a gone task (null data) as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReviewStepRun: envelope }\n });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"answers the blocking reviews with an empty list and sends no request (the WB bulk delete runs per item)\", async () => {\n const result = await gateway.listBlockingReviews({\n namespace: \"wb.page\",\n targetIds: [\"page-1\", \"page-2\"]\n });\n\n expect(result).toEqual({ data: [], error: null });\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"returns an envelope error as is and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/StepNotCurrent\", message: \"Not current.\", data: null }\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { startWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"lets a transport error pass through\", async () => {\n client.execute.mockRejectedValue(new Error(\"Network down.\"));\n\n await expect(gateway.getReview(\"review-1\")).rejects.toThrow(\"Network down.\");\n });\n});\n"],"names":["describe","client","vi","gateway","beforeEach","container","Container","MainGraphQLClient","WbReviewGateway","GatewayAbstraction","it","expect","envelope","result","request","WORKFLOW_FIELDS","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","cmsTarget","ReviewState","StepState","REVIEW_WITH_FLAGS_FIELDS","STEP_CANDIDATE_FIELDS","REVIEW_FIELDS","STEP_RUN_INFO_FIELDS","Error"],"mappings":";;;;;;;;AAkBAA,SAAS,mBAAmB;IACxB,MAAMC,SAAS;QAAE,SAASC,GAAG,EAAE;IAAG;IAClC,IAAIC;IAEJC,WAAW;QACPH,OAAO,OAAO,CAAC,SAAS;QAExB,MAAMI,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,mBAAmBN;QAC9CI,UAAU,QAAQ,CAACG;QACnBL,UAAUE,UAAU,OAAO,CAACI;IAChC;IAEAC,GAAG,4BAA4B;QAC3BC,OAAOR,QAAQ,GAAG,EAAE,IAAI,CAAC;IAC7B;IAEAO,GAAG,yCAAyC;QACxCC,OAAOR,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC;QAC1CQ,OAAOR,QAAQ,SAAS,CAAC,aAAa,IAAI,CAAC;QAC3CQ,OAAOR,QAAQ,SAAS,CAAC,OAAO,IAAI,CAAC;QACrCQ,OAAOR,QAAQ,SAAS,CAAC,gBAAgB,IAAI,CAAC;QAC9CQ,OAAOV,OAAO,OAAO,EAAE,GAAG,CAAC,gBAAgB;IAC/C;IAEAS,GAAG,8CAA8C;QAC7C,MAAME,WAAW;YAAE,MAAM;gBAAC;oBAAE,IAAI;gBAAa;aAAE;YAAE,OAAO;QAAK;QAC7DX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,iCAAiCW;YAAS;QAChE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,aAAa;QAE1CQ,OAAOE,QAAQ,OAAO,CAACD;QACvBD,OAAOV,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7C,MAAMa,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,aAAa;QACvCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACC;IACpC;IAEAL,GAAG,0CAA0C;QACzC,MAAME,WAAW;YAAE,MAAM;gBAAE,QAAQ;oBAAE,IAAI;gBAAW;gBAAG,OAAO,CAAC;YAAE;YAAG,OAAO;QAAK;QAChFX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmCW;YAAS;QAClE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,eAAe,CAAC;YACzC,WAAW;YACX,kBAAkB;QACtB;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,YAAY;QAAc;QAC9DH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAC3B;QAEJH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACE;IACpC;IAEAN,GAAG,wCAAwC;QACvC,MAAME,WAAW;YAAE,MAAM;YAAM,OAAO;QAAK;QAC3CX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmCW;YAAS;QAClE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,eAAe,CAAC;YACzC,WAAW;YACX,kBAAkB;QACtB;QAEAQ,OAAOE,QAAQ,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;IACrD;IAEAH,GAAG,mEAAmE;QAClE,MAAMO,YAAY;YAAE,WAAW;YAAe,kBAAkB;QAAe;QAE/E,MAAMN,OAAOR,QAAQ,eAAe,CAACc,YAAY,OAAO,CAAC,OAAO,CAC5D;QAEJ,MAAMN,OACFR,QAAQ,aAAa,CAAC;YAAE,QAAQc;YAAW,OAAO;YAAU,OAAO,EAAE;QAAC,IACxE,OAAO,CAAC,OAAO,CAAC;QAClB,MAAMN,OACFR,QAAQ,kBAAkB,CAAC;YACvB,YAAY;YACZ,QAAQ;YACR,QAAQc;QACZ,IACF,OAAO,CAAC,OAAO,CAAC;QAClB,MAAMN,OACFR,QAAQ,eAAe,CAAC;YACpB,WAAW;YACX,UAAU;YACV,kBAAkB;YAClB,QAAQ;QACZ,IACF,OAAO,CAAC,OAAO,CAAC;QAElBQ,OAAOV,OAAO,OAAO,EAAE,GAAG,CAAC,gBAAgB;IAC/C;IAEAS,GAAG,0BAA0B;QACzB,MAAME,WAAW;YAAE,MAAM;gBAAE,QAAQ;oBAAE,IAAI;gBAAW;gBAAG,OAAO,CAAC;YAAE;YAAG,OAAO;QAAK;QAChFX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,6BAA6BW;YAAS;QAC5D;QAEA,MAAMC,SAAS,MAAMV,QAAQ,SAAS,CAAC;QAEvCQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,IAAI;QAAW;QACnDH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACE;IACpC;IAEAN,GAAG,mFAAmF;QAClF,MAAME,WAAW;YACb,MAAM;gBAAC;oBAAE,QAAQ;wBAAE,IAAI;oBAAW;oBAAG,OAAO,CAAC;gBAAE;aAAE;YACjD,MAAM;gBAAE,QAAQ;gBAAY,cAAc;YAAK;YAC/C,OAAO;QACX;QACAX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,+BAA+BW;YAAS;QAC9D;QAEA,MAAMC,SAAS,MAAMV,QAAQ,WAAW,CAAC;YACrC,MAAM;YACN,OAAO;gBACH,SAAS;gBACT,eAAe;gBACf,aAAae,YAAY,QAAQ;gBACjC,WAAWC,UAAU,QAAQ;YACjC;YACA,MAAM;YACN,OAAO;YACP,OAAO;QACX;QAEAR,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,MAAM;YACN,OAAO;gBACH,eAAe;gBACf,aAAaI,YAAY,QAAQ;gBACjC,WAAWC,UAAU,QAAQ;YACjC;YACA,MAAM;YACN,OAAO;YACP,OAAO;QACX;QACAR,OAAOG,QAAQ,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,cAAc,CAAC;QACnDH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACM;IACpC;IAEAV,GAAG,yDAAyD;QACxD,MAAME,WAAW;YAAE,MAAM;gBAAC;oBAAE,IAAI;gBAAS;aAAE;YAAE,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,sCAAsCW;YAAS;QACrE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,kBAAkB,CAAC;YAC5C,YAAY;YACZ,QAAQ;YACR,QAAQ;gBAAE,WAAW;gBAAW,kBAAkB;YAAc;QACpE;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,YAAY;YACZ,QAAQ;YACR,YAAY;QAChB;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACO;IACpC;IAEAX,GAAG,qDAAqD;QACpD,MAAME,WAAW;YAAE,MAAM;gBAAC;oBAAE,IAAI;gBAAS;aAAE;YAAE,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,4CAA4CW;YAAS;QAC3E;QAEA,MAAMC,SAAS,MAAMV,QAAQ,wBAAwB,CAAC;YAClD,UAAU;YACV,QAAQ;QACZ;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAC3EH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACO;IACpC;IAEAX,GAAG,kDAAkD;QACjD,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,iCAAiCW;YAAS;QAChE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,aAAa,CAAC;YACvC,QAAQ;gBAAE,WAAW;gBAAW,kBAAkB;YAAc;YAChE,OAAO;YACP,OAAO;gBAAC;oBAAE,QAAQ;oBAAU,QAAQ;gBAAS;aAAE;QACnD;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,YAAY;YACZ,OAAO;YACP,OAAO;gBAAC;oBAAE,QAAQ;oBAAU,QAAQ;gBAAS;aAAE;QACnD;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACQ;IACpC;IAEAZ,GAAG,iBAAiB;QAChB,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmCW;YAAS;QAClE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,SAAS,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAEhFQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAC3EH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACQ;IACpC;IAEAZ,GAAG,kDAAkD;QACjD,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,sCAAsCW;YAAS;QACrE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,YAAY,CAAC;YACtC,UAAU;YACV,QAAQ;YACR,qBAAqB;QACzB;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,UAAU;YACV,QAAQ;YACR,qBAAqB;QACzB;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;IACpC;IAEAJ,GAAG,oBAAoB;QACnB,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,sCAAsCW;YAAS;QACrE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,YAAY,CAAC;YACtC,UAAU;YACV,QAAQ;YACR,QAAQ;QACZ;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,UAAU;YACV,QAAQ;YACR,QAAQ;QACZ;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;IACpC;IAEAJ,GAAG,8CAA8C;QAC7C,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,qCAAqCW;YAAS;QACpE;QAEA,MAAMT,QAAQ,WAAW,CAAC;YACtB,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QACA,MAAMU,SAAS,MAAMV,QAAQ,WAAW,CAAC;YACrC,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvBD,OAAOV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QACAU,OAAOV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QACAU,OAAOV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CACnD;IAER;IAEAS,GAAG,mCAAmC;QAClC,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,oCAAoCW;YAAS;QACnE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,UAAU,CAAC;YACpC,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,UAAU;YACV,QAAQ;YACR,SAAS;QACb;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;IACpC;IAEAJ,GAAG,oBAAoB;QACnB,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,gCAAgCW;YAAS;QAC/D;QAEA,MAAMC,SAAS,MAAMV,QAAQ,YAAY,CAAC;YAAE,UAAU;QAAW;QAEjEQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,UAAU;QAAW;QACzDH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;IACpC;IAEAJ,GAAG,4DAA4D;QAC3D,MAAME,WAAW;YAAE,MAAM;gBAAC;oBAAE,IAAI;gBAAW;aAAE;YAAE,OAAO;QAAK;QAC3DX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,0CAA0CW;YAAS;QACzE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,eAAe,CAAC;YACzC,WAAW;YACX,UAAU;YACV,kBAAkB;YAClB,QAAQ;QACZ;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,QAAQ;YACR,YAAY;YACZ,QAAQ;QACZ;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;IACpC;IAEAJ,GAAG,4DAA4D;QAC3D,MAAME,WAAW;YAAE,MAAM,EAAE;YAAE,OAAO;QAAK;QACzCX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,0CAA0CW;YAAS;QACzE;QAEA,MAAMT,QAAQ,eAAe,CAAC;YAC1B,WAAW;YACX,UAAU;YACV,kBAAkB;YAClB,QAAQ;QACZ;QAEAQ,OAAOV,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,QAAQ;YACR,YAAY;YACZ,QAAQ;QACZ;IACJ;IAEAS,GAAG,mBAAmB;QAClB,MAAME,WAAW;YAAE,MAAM;gBAAE,IAAI;YAAW;YAAG,OAAO;QAAK;QACzDX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,qCAAqCW;YAAS;QACpE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,WAAW,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAElFQ,OAAOE,QAAQ,OAAO,CAACD;QACvBD,OAAOV,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7C,MAAMa,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAC3EH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAC3B;QAEJH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACQ;IACpC;IAEAZ,GAAG,2EAA2E;QAC1E,MAAME,WAAW;YACb,MAAM;YACN,OAAO;gBAAE,MAAM;gBAAiC,SAAS;gBAAe,MAAM;YAAK;QACvF;QACAX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,qCAAqCW;YAAS;QACpE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,WAAW,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAElFQ,OAAOE,QAAQ,OAAO,CAACD;IAC3B;IAEAF,GAAG,uDAAuD;QACtD,MAAME,WAAW;YAAE,MAAM;gBAAE,QAAQ;gBAAU,QAAQ;YAAO;YAAG,OAAO;QAAK;QAC3EX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,oCAAoCW;YAAS;QACnE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,UAAU,CAAC;YACpC,UAAU;YACV,QAAQ;YACR,QAAQ;QACZ;QAEAQ,OAAOE,QAAQ,OAAO,CAACD;QACvB,MAAME,UAAUb,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QAC/CU,OAAOG,QAAQ,SAAS,EAAE,OAAO,CAAC;YAC9B,UAAU;YACV,QAAQ;YACR,QAAQ;QACZ;QACAH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAAC;QAChCH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAC3B;QAEJH,OAAOG,QAAQ,KAAK,EAAE,SAAS,CAACS;IACpC;IAEAb,GAAG,yCAAyC;QACxC,MAAME,WAAW;YAAE,MAAM;YAAM,OAAO;QAAK;QAC3CX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,oCAAoCW;YAAS;QACnE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,UAAU,CAAC;YACpC,UAAU;YACV,QAAQ;YACR,QAAQ;QACZ;QAEAQ,OAAOE,QAAQ,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;IACrD;IAEAH,GAAG,2GAA2G;QAC1G,MAAMG,SAAS,MAAMV,QAAQ,mBAAmB,CAAC;YAC7C,WAAW;YACX,WAAW;gBAAC;gBAAU;aAAS;QACnC;QAEAQ,OAAOE,QAAQ,OAAO,CAAC;YAAE,MAAM,EAAE;YAAE,OAAO;QAAK;QAC/CF,OAAOV,OAAO,OAAO,EAAE,GAAG,CAAC,gBAAgB;IAC/C;IAEAS,GAAG,2DAA2D;QAC1D,MAAME,WAAW;YACb,MAAM;YACN,OAAO;gBAAE,MAAM;gBAAmC,SAAS;gBAAgB,MAAM;YAAK;QAC1F;QACAX,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmCW;YAAS;QAClE;QAEA,MAAMC,SAAS,MAAMV,QAAQ,SAAS,CAAC;YAAE,UAAU;YAAY,QAAQ;QAAS;QAEhFQ,OAAOE,QAAQ,OAAO,CAACD;IAC3B;IAEAF,GAAG,uCAAuC;QACtCT,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAIuB,MAAM;QAE3C,MAAMb,OAAOR,QAAQ,SAAS,CAAC,aAAa,OAAO,CAAC,OAAO,CAAC;IAChE;AACJ"}
@@ -0,0 +1,8 @@
1
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
2
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
3
+ declare class WbReviewNotificationHandlerImpl extends ReviewNotificationHandler implements WebsocketEventHandler.Interface {
4
+ }
5
+ export declare const WbReviewNotificationHandler: typeof WbReviewNotificationHandlerImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/app-websockets/events/WebsocketEvent.js").WebsocketEvent>>;
7
+ };
8
+ export {};
@@ -0,0 +1,16 @@
1
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
2
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
3
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
4
+ import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
5
+ class WbReviewNotificationHandlerImpl extends ReviewNotificationHandler {
6
+ }
7
+ const WbReviewNotificationHandler = WebsocketEventHandler.createImplementation({
8
+ implementation: WbReviewNotificationHandlerImpl,
9
+ dependencies: [
10
+ ReviewNotificationService,
11
+ WbReviewContentAdapter
12
+ ]
13
+ });
14
+ export { WbReviewNotificationHandler };
15
+
16
+ //# sourceMappingURL=WbReviewNotificationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/WbReviewNotificationHandler.js","sources":["../../../src/features/gateway/WbReviewNotificationHandler.ts"],"sourcesContent":["import { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/abstractions.js\";\n\n// A subclass of its own (see WbReviewRowProviderImpl): the CMS binds its own.\nclass WbReviewNotificationHandlerImpl\n extends ReviewNotificationHandler\n implements WebsocketEventHandler.Interface {}\n\nexport const WbReviewNotificationHandler = WebsocketEventHandler.createImplementation({\n implementation: WbReviewNotificationHandlerImpl,\n dependencies: [ReviewNotificationService, WbReviewContentAdapter]\n});\n"],"names":["WbReviewNotificationHandlerImpl","ReviewNotificationHandler","WbReviewNotificationHandler","WebsocketEventHandler","ReviewNotificationService","WbReviewContentAdapter"],"mappings":";;;;AAMA,MAAMA,wCACMC;AACoC;AAEzC,MAAMC,8BAA8BC,sBAAsB,oBAAoB,CAAC;IAClF,gBAAgBH;IAChB,cAAc;QAACI;QAA2BC;KAAuB;AACrE"}
@@ -0,0 +1,8 @@
1
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
2
+ import { WbReviewRowProvider as Abstraction } from "./abstractions.js";
3
+ declare class WbReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {
4
+ }
5
+ export declare const WbReviewRowProvider: typeof WbReviewRowProviderImpl & {
6
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider>;
7
+ };
8
+ export {};
@@ -0,0 +1,14 @@
1
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
2
+ import { WbReviewContentAdapter } from "../WbReviewContentAdapter/abstractions.js";
3
+ import { WbReviewRowProvider } from "./abstractions.js";
4
+ class WbReviewRowProviderImpl extends AppReviewRowProvider {
5
+ }
6
+ const WbReviewRowProvider_WbReviewRowProvider = WbReviewRowProvider.createImplementation({
7
+ implementation: WbReviewRowProviderImpl,
8
+ dependencies: [
9
+ WbReviewContentAdapter
10
+ ]
11
+ });
12
+ export { WbReviewRowProvider_WbReviewRowProvider as WbReviewRowProvider };
13
+
14
+ //# sourceMappingURL=WbReviewRowProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/WbReviewRowProvider/WbReviewRowProvider.js","sources":["../../../../src/features/gateway/WbReviewRowProvider/WbReviewRowProvider.ts"],"sourcesContent":["import { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { WbReviewContentAdapter } from \"../WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider as Abstraction } from \"./abstractions.js\";\n\n// A subclass of its own: `createImplementation` stores the abstraction on the class, so the shared\n// class must never be bound directly (it would collide with the CMS binding).\nclass WbReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {}\n\nexport const WbReviewRowProvider = Abstraction.createImplementation({\n implementation: WbReviewRowProviderImpl,\n dependencies: [WbReviewContentAdapter]\n});\n"],"names":["WbReviewRowProviderImpl","AppReviewRowProvider","WbReviewRowProvider","Abstraction","WbReviewContentAdapter"],"mappings":";;;AAMA,MAAMA,gCAAgCC;AAAuD;AAEtF,MAAMC,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBH;IAChB,cAAc;QAACI;KAAuB;AAC1C"}
@@ -0,0 +1,5 @@
1
+ import type { IReviewRowProvider } from "@webiny/app-workflows/review/presentation/reviewList/abstractions.js";
2
+ export declare const WbReviewRowProvider: import("@webiny/di").Abstraction<IReviewRowProvider>;
3
+ export declare namespace WbReviewRowProvider {
4
+ type Interface = IReviewRowProvider;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const WbReviewRowProvider = createAbstraction("WebsiteBuilder/Workflows/ReviewRowProvider");
3
+ export { WbReviewRowProvider };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/WbReviewRowProvider/abstractions.js","sources":["../../../../src/features/gateway/WbReviewRowProvider/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IReviewRowProvider } from \"@webiny/app-workflows/review/presentation/reviewList/abstractions.js\";\n\nexport const WbReviewRowProvider = createAbstraction<IReviewRowProvider>(\n \"WebsiteBuilder/Workflows/ReviewRowProvider\"\n);\n\nexport namespace WbReviewRowProvider {\n export type Interface = IReviewRowProvider;\n}\n"],"names":["WbReviewRowProvider","createAbstraction"],"mappings":";AAGO,MAAMA,sBAAsBC,kBAC/B"}
@@ -0,0 +1 @@
1
+ export declare const assertWbPageNamespace: (namespace: string) => void;
@@ -0,0 +1,7 @@
1
+ import { WB_PAGE_APP } from "../../constants.js";
2
+ const assertWbPageNamespace = (namespace)=>{
3
+ if (namespace !== WB_PAGE_APP) throw new Error(`Invalid app name: "${namespace}".`);
4
+ };
5
+ export { assertWbPageNamespace };
6
+
7
+ //# sourceMappingURL=assertWbPageNamespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/assertWbPageNamespace.js","sources":["../../../src/features/gateway/assertWbPageNamespace.ts"],"sourcesContent":["import { WB_PAGE_APP } from \"~/constants.js\";\n\nexport const assertWbPageNamespace = (namespace: string): void => {\n if (namespace !== WB_PAGE_APP) {\n throw new Error(`Invalid app name: \"${namespace}\".`);\n }\n};\n"],"names":["assertWbPageNamespace","namespace","WB_PAGE_APP","Error"],"mappings":";AAEO,MAAMA,wBAAwB,CAACC;IAClC,IAAIA,cAAcC,aACd,MAAM,IAAIC,MAAM,CAAC,mBAAmB,EAAEF,UAAU,EAAE,CAAC;AAE3D"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,159 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { WebsocketEvent } from "@webiny/app-websockets/events/WebsocketEvent.js";
4
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
5
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
6
+ import { CmsReviewContentAdapter } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewContentAdapter/abstractions.js";
7
+ import { CmsReviewNotificationHandler } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewNotificationHandler.js";
8
+ import { CmsReviewRowProvider } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/abstractions.js";
9
+ import { CmsReviewRowProvider as CmsReviewRowProvider_js_CmsReviewRowProvider } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js";
10
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
11
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
12
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
13
+ import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
14
+ import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
15
+ import { WORKFLOWS_NOTIFICATION_ACTION, WORKFLOWS_REVIEW_CHANGED_ACTION } from "@webiny/app-workflows/review/domain/constants.js";
16
+ import { CmsReviewChangeMessageHandler } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewChangeMessageHandler.js";
17
+ import { WbReviewFeature } from "./feature.js";
18
+ import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
19
+ const handle = vi.fn();
20
+ const notify = vi.fn();
21
+ const createContainer = ()=>{
22
+ const container = new Container();
23
+ container.registerInstance(MainGraphQLClient, {
24
+ execute: vi.fn()
25
+ });
26
+ container.registerInstance(ReviewNotificationService, {
27
+ handle: handle
28
+ });
29
+ container.registerInstance(ReviewActivity, {
30
+ subscribe: vi.fn(),
31
+ notify: notify
32
+ });
33
+ return container;
34
+ };
35
+ const message = (namespace)=>new WebsocketEvent({
36
+ action: WORKFLOWS_NOTIFICATION_ACTION,
37
+ data: {
38
+ event: "assigned",
39
+ reviewId: "review-1",
40
+ stepId: "step-1",
41
+ namespace,
42
+ targetId: "page-1",
43
+ targetRevisionId: "page-1#0001",
44
+ title: "Review assigned",
45
+ body: "Maja Kos asked you to review Home"
46
+ }
47
+ });
48
+ const changeMessage = (namespace)=>new WebsocketEvent({
49
+ action: WORKFLOWS_REVIEW_CHANGED_ACTION,
50
+ data: {
51
+ kind: "stepStarted",
52
+ reviewId: "review-1",
53
+ stepId: "step-1",
54
+ namespace,
55
+ targetId: "page-1",
56
+ targetRevisionId: "page-1#0001"
57
+ }
58
+ });
59
+ describe("WbReviewFeature Content Reviews registrations", ()=>{
60
+ beforeEach(()=>{
61
+ handle.mockReset();
62
+ notify.mockReset();
63
+ });
64
+ it("registers a row provider that binds only the page namespace", ()=>{
65
+ const container = createContainer();
66
+ WbReviewFeature.register(container);
67
+ const provider = container.resolve(WbReviewRowProvider);
68
+ expect(provider).toBeInstanceOf(AppReviewRowProvider);
69
+ expect(provider.getBinding("wb.page")).not.toBeNull();
70
+ expect(provider.getBinding("cms.article")).toBeNull();
71
+ });
72
+ it("hands out the same provider as the feature export", ()=>{
73
+ const container = createContainer();
74
+ WbReviewFeature.register(container);
75
+ const { rowProvider } = WbReviewFeature.resolve(container);
76
+ expect(rowProvider).toBe(container.resolve(WbReviewRowProvider));
77
+ });
78
+ it("registers a notification handler that handles page messages and ignores cms messages (R223)", async ()=>{
79
+ const container = createContainer();
80
+ WbReviewFeature.register(container);
81
+ const handlers = container.resolveAll(WebsocketEventHandler);
82
+ const own = handlers.filter((handler)=>handler instanceof ReviewNotificationHandler);
83
+ expect(own).toHaveLength(1);
84
+ await own[0].handle(message("wb.page"));
85
+ expect(handle).toHaveBeenCalledTimes(1);
86
+ expect(handle.mock.calls[0][0].data.namespace).toBe("wb.page");
87
+ expect(handle.mock.calls[0][0].url).toContain("/website-builder/pages/editor/");
88
+ await own[0].handle(message("cms.article"));
89
+ expect(handle).toHaveBeenCalledTimes(1);
90
+ });
91
+ it("coexists with the CMS bindings in one container, each binding only its own namespace (R237)", async ()=>{
92
+ const container = createContainer();
93
+ WbReviewFeature.register(container);
94
+ const cmsAdapter = {
95
+ canHandle: (namespace)=>namespace.startsWith("cms."),
96
+ getContentUrl: ()=>"/cms/content-entries/article?id=entry-1%230001",
97
+ getContentTypeLabel: ()=>null,
98
+ renderContentTypeIcon: ()=>null
99
+ };
100
+ container.registerInstance(CmsReviewContentAdapter, cmsAdapter);
101
+ container.register(CmsReviewRowProvider_js_CmsReviewRowProvider).inSingletonScope();
102
+ container.register(CmsReviewNotificationHandler);
103
+ const wbProvider = container.resolve(WbReviewRowProvider);
104
+ const cmsProvider = container.resolve(CmsReviewRowProvider);
105
+ expect(cmsProvider).not.toBe(wbProvider);
106
+ expect(wbProvider.getBinding("wb.page")).not.toBeNull();
107
+ expect(wbProvider.getBinding("cms.article")).toBeNull();
108
+ expect(cmsProvider.getBinding("cms.article")).not.toBeNull();
109
+ expect(cmsProvider.getBinding("wb.page")).toBeNull();
110
+ const handlers = container.resolveAll(WebsocketEventHandler).filter((handler)=>handler instanceof ReviewNotificationHandler);
111
+ expect(handlers).toHaveLength(2);
112
+ for (const handler of handlers)await handler.handle(message("wb.page"));
113
+ expect(handle).toHaveBeenCalledTimes(1);
114
+ expect(handle.mock.calls[0][0].url).toContain("/website-builder/pages/editor/");
115
+ for (const handler of handlers)await handler.handle(message("cms.article"));
116
+ expect(handle).toHaveBeenCalledTimes(2);
117
+ expect(handle.mock.calls[1][0].url).toBe("/cms/content-entries/article?id=entry-1%230001");
118
+ });
119
+ it("registers a change message handler that signals page frames and ignores cms frames (R260)", async ()=>{
120
+ const container = createContainer();
121
+ WbReviewFeature.register(container);
122
+ const handlers = container.resolveAll(WebsocketEventHandler);
123
+ const own = handlers.filter((handler)=>handler instanceof ReviewChangeMessageHandler);
124
+ expect(own).toHaveLength(1);
125
+ await own[0].handle(changeMessage("wb.page"));
126
+ expect(notify).toHaveBeenCalledTimes(1);
127
+ expect(notify).toHaveBeenCalledWith({
128
+ namespace: "wb.page",
129
+ source: "remote",
130
+ reviewId: "review-1",
131
+ targetRevisionId: "page-1#0001"
132
+ });
133
+ await own[0].handle(changeMessage("cms.article"));
134
+ expect(notify).toHaveBeenCalledTimes(1);
135
+ expect(handle).not.toHaveBeenCalled();
136
+ });
137
+ it("coexists with the CMS change message handler, each signalling only its own namespace (R237)", async ()=>{
138
+ const container = createContainer();
139
+ WbReviewFeature.register(container);
140
+ const cmsAdapter = {
141
+ canHandle: (namespace)=>namespace.startsWith("cms."),
142
+ getContentUrl: ()=>"/cms/content-entries/article?id=entry-1%230001",
143
+ getContentTypeLabel: ()=>null,
144
+ renderContentTypeIcon: ()=>null
145
+ };
146
+ container.registerInstance(CmsReviewContentAdapter, cmsAdapter);
147
+ container.register(CmsReviewChangeMessageHandler);
148
+ const handlers = container.resolveAll(WebsocketEventHandler).filter((handler)=>handler instanceof ReviewChangeMessageHandler);
149
+ expect(handlers).toHaveLength(2);
150
+ for (const handler of handlers)await handler.handle(changeMessage("wb.page"));
151
+ expect(notify).toHaveBeenCalledTimes(1);
152
+ expect(notify.mock.calls[0][0].namespace).toBe("wb.page");
153
+ for (const handler of handlers)await handler.handle(changeMessage("cms.article"));
154
+ expect(notify).toHaveBeenCalledTimes(2);
155
+ expect(notify.mock.calls[1][0].namespace).toBe("cms.article");
156
+ });
157
+ });
158
+
159
+ //# sourceMappingURL=contentReviewsBindings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/contentReviewsBindings.test.js","sources":["../../../src/features/gateway/contentReviewsBindings.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WebsocketEvent } from \"@webiny/app-websockets/events/WebsocketEvent.js\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewNotificationHandler } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewNotificationHandler.js\";\nimport { CmsReviewRowProvider as CmsRowProviderAbstraction } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewRowProvider } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js\";\nimport type { IReviewContentAdapter } from \"@webiny/app-workflows/review/content/IReviewContentAdapter.js\";\nimport { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { ReviewActivity } from \"@webiny/app-workflows/review/activity/abstractions.js\";\nimport { ReviewChangeMessageHandler } from \"@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js\";\nimport { WORKFLOWS_REVIEW_CHANGED_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { CmsReviewChangeMessageHandler } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewChangeMessageHandler.js\";\nimport { WORKFLOWS_NOTIFICATION_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { WbReviewFeature } from \"./feature.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/abstractions.js\";\n\nconst handle = vi.fn();\nconst notify = vi.fn();\n\n// The leaf dependency of Task 12's gateway (the fake its feature test registers) and the shared\n// service the handler reports to.\nconst createContainer = (): Container => {\n const container = new Container();\n container.registerInstance(MainGraphQLClient, { execute: vi.fn() });\n container.registerInstance(ReviewNotificationService, { handle });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify });\n return container;\n};\n\nconst message = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_NOTIFICATION_ACTION,\n data: {\n event: \"assigned\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n title: \"Review assigned\",\n body: \"Maja Kos asked you to review Home\"\n }\n });\n};\n\nconst changeMessage = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_REVIEW_CHANGED_ACTION,\n data: {\n kind: \"stepStarted\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\"\n }\n });\n};\n\ndescribe(\"WbReviewFeature Content Reviews registrations\", () => {\n beforeEach(() => {\n handle.mockReset();\n notify.mockReset();\n });\n\n it(\"registers a row provider that binds only the page namespace\", () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const provider = container.resolve(WbReviewRowProvider);\n\n expect(provider).toBeInstanceOf(AppReviewRowProvider);\n expect(provider.getBinding(\"wb.page\")).not.toBeNull();\n expect(provider.getBinding(\"cms.article\")).toBeNull();\n });\n\n it(\"hands out the same provider as the feature export\", () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const { rowProvider } = WbReviewFeature.resolve(container);\n\n expect(rowProvider).toBe(container.resolve(WbReviewRowProvider));\n });\n\n it(\"registers a notification handler that handles page messages and ignores cms messages (R223)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewNotificationHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(message(\"wb.page\"));\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].data.namespace).toBe(\"wb.page\");\n expect(handle.mock.calls[0][0].url).toContain(\"/website-builder/pages/editor/\");\n\n await own[0].handle(message(\"cms.article\"));\n expect(handle).toHaveBeenCalledTimes(1);\n });\n\n it(\"coexists with the CMS bindings in one container, each binding only its own namespace (R237)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n const cmsAdapter: IReviewContentAdapter = {\n canHandle: namespace => namespace.startsWith(\"cms.\"),\n getContentUrl: () => \"/cms/content-entries/article?id=entry-1%230001\",\n getContentTypeLabel: () => null,\n renderContentTypeIcon: () => null\n };\n container.registerInstance(CmsReviewContentAdapter, cmsAdapter);\n container.register(CmsReviewRowProvider).inSingletonScope();\n container.register(CmsReviewNotificationHandler);\n\n const wbProvider = container.resolve(WbReviewRowProvider);\n const cmsProvider = container.resolve(CmsRowProviderAbstraction);\n\n expect(cmsProvider).not.toBe(wbProvider);\n expect(wbProvider.getBinding(\"wb.page\")).not.toBeNull();\n expect(wbProvider.getBinding(\"cms.article\")).toBeNull();\n expect(cmsProvider.getBinding(\"cms.article\")).not.toBeNull();\n expect(cmsProvider.getBinding(\"wb.page\")).toBeNull();\n\n const handlers = container\n .resolveAll(WebsocketEventHandler)\n .filter(handler => handler instanceof ReviewNotificationHandler);\n expect(handlers).toHaveLength(2);\n\n for (const handler of handlers) {\n await handler.handle(message(\"wb.page\"));\n }\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].url).toContain(\"/website-builder/pages/editor/\");\n\n for (const handler of handlers) {\n await handler.handle(message(\"cms.article\"));\n }\n expect(handle).toHaveBeenCalledTimes(2);\n expect(handle.mock.calls[1][0].url).toBe(\"/cms/content-entries/article?id=entry-1%230001\");\n });\n\n it(\"registers a change message handler that signals page frames and ignores cms frames (R260)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(changeMessage(\"wb.page\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify).toHaveBeenCalledWith({\n namespace: \"wb.page\",\n source: \"remote\",\n reviewId: \"review-1\",\n targetRevisionId: \"page-1#0001\"\n });\n\n await own[0].handle(changeMessage(\"cms.article\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(handle).not.toHaveBeenCalled();\n });\n\n it(\"coexists with the CMS change message handler, each signalling only its own namespace (R237)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n const cmsAdapter: IReviewContentAdapter = {\n canHandle: namespace => namespace.startsWith(\"cms.\"),\n getContentUrl: () => \"/cms/content-entries/article?id=entry-1%230001\",\n getContentTypeLabel: () => null,\n renderContentTypeIcon: () => null\n };\n container.registerInstance(CmsReviewContentAdapter, cmsAdapter);\n container.register(CmsReviewChangeMessageHandler);\n\n const handlers = container\n .resolveAll(WebsocketEventHandler)\n .filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(handlers).toHaveLength(2);\n\n for (const handler of handlers) {\n await handler.handle(changeMessage(\"wb.page\"));\n }\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify.mock.calls[0][0].namespace).toBe(\"wb.page\");\n\n for (const handler of handlers) {\n await handler.handle(changeMessage(\"cms.article\"));\n }\n expect(notify).toHaveBeenCalledTimes(2);\n expect(notify.mock.calls[1][0].namespace).toBe(\"cms.article\");\n });\n});\n"],"names":["handle","vi","notify","createContainer","container","Container","MainGraphQLClient","ReviewNotificationService","ReviewActivity","message","namespace","WebsocketEvent","WORKFLOWS_NOTIFICATION_ACTION","changeMessage","WORKFLOWS_REVIEW_CHANGED_ACTION","describe","beforeEach","it","WbReviewFeature","provider","WbReviewRowProvider","expect","AppReviewRowProvider","rowProvider","handlers","WebsocketEventHandler","own","handler","ReviewNotificationHandler","cmsAdapter","CmsReviewContentAdapter","CmsReviewRowProvider","CmsReviewNotificationHandler","wbProvider","cmsProvider","CmsRowProviderAbstraction","ReviewChangeMessageHandler","CmsReviewChangeMessageHandler"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const WbReviewFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ contentAdapter: import("@webiny/app-workflows/review/content/IReviewContentAdapter.js").IReviewContentAdapter;
3
+ rowProvider: import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider;
4
+ }, []>;
@@ -0,0 +1,27 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
3
+ import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
4
+ import { WbReviewContentAdapter as WbReviewContentAdapter_js_WbReviewContentAdapter } from "./WbReviewContentAdapter/WbReviewContentAdapter.js";
5
+ import { WbReviewGateway } from "./WbReviewGateway/WbReviewGateway.js";
6
+ import { WbReviewChangeMessageHandler } from "./WbReviewChangeMessageHandler.js";
7
+ import { WbReviewNotificationHandler } from "./WbReviewNotificationHandler.js";
8
+ import { WbReviewRowProvider as WbReviewRowProvider_js_WbReviewRowProvider } from "./WbReviewRowProvider/WbReviewRowProvider.js";
9
+ const WbReviewFeature = createFeature({
10
+ name: "WebsiteBuilderWorkflows/Review",
11
+ register (container) {
12
+ container.register(WbReviewGateway).inSingletonScope();
13
+ container.register(WbReviewContentAdapter_js_WbReviewContentAdapter).inSingletonScope();
14
+ container.register(WbReviewRowProvider_js_WbReviewRowProvider).inSingletonScope();
15
+ container.register(WbReviewNotificationHandler);
16
+ container.register(WbReviewChangeMessageHandler);
17
+ },
18
+ resolve (container) {
19
+ return {
20
+ contentAdapter: container.resolve(WbReviewContentAdapter),
21
+ rowProvider: container.resolve(WbReviewRowProvider)
22
+ };
23
+ }
24
+ });
25
+ export { WbReviewFeature };
26
+
27
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/feature.js","sources":["../../../src/features/gateway/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WbReviewContentAdapter as AdapterAbstraction } from \"./WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider as RowProviderAbstraction } from \"./WbReviewRowProvider/abstractions.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/WbReviewContentAdapter.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway/WbReviewGateway.js\";\nimport { WbReviewChangeMessageHandler } from \"./WbReviewChangeMessageHandler.js\";\nimport { WbReviewNotificationHandler } from \"./WbReviewNotificationHandler.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/WbReviewRowProvider.js\";\n\n/*\n * The Website Builder review registrations: the review gateway under the shared\n * `ReviewAppGateway` token (R347), the content adapter, the Content Reviews row provider and the\n * two websocket handlers.\n */\nexport const WbReviewFeature = createFeature({\n name: \"WebsiteBuilderWorkflows/Review\",\n register(container) {\n container.register(WbReviewGateway).inSingletonScope();\n container.register(WbReviewContentAdapter).inSingletonScope();\n container.register(WbReviewRowProvider).inSingletonScope();\n container.register(WbReviewNotificationHandler);\n container.register(WbReviewChangeMessageHandler);\n },\n resolve(container) {\n return {\n contentAdapter: container.resolve(AdapterAbstraction),\n rowProvider: container.resolve(RowProviderAbstraction)\n };\n }\n});\n"],"names":["WbReviewFeature","createFeature","container","WbReviewGateway","WbReviewContentAdapter","WbReviewRowProvider","WbReviewNotificationHandler","WbReviewChangeMessageHandler","AdapterAbstraction","RowProviderAbstraction"],"mappings":";;;;;;;;AAcO,MAAMA,kBAAkBC,cAAc;IACzC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,iBAAiB,gBAAgB;QACpDD,UAAU,QAAQ,CAACE,kDAAwB,gBAAgB;QAC3DF,UAAU,QAAQ,CAACG,4CAAqB,gBAAgB;QACxDH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;IACvB;IACA,SAAQL,SAAS;QACb,OAAO;YACH,gBAAgBA,UAAU,OAAO,CAACM;YAClC,aAAaN,UAAU,OAAO,CAACO;QACnC;IACJ;AACJ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,85 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { Container } from "@webiny/di";
3
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
4
+ import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
5
+ import { CmsReviewGateway } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewGateway/CmsReviewGateway.js";
6
+ import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
7
+ import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
8
+ import { WbReviewGateway } from "./WbReviewGateway/WbReviewGateway.js";
9
+ import { WbReviewFeature } from "./feature.js";
10
+ describe("WbReviewFeature", ()=>{
11
+ const client = {
12
+ execute: vi.fn()
13
+ };
14
+ let container;
15
+ beforeEach(()=>{
16
+ client.execute.mockReset();
17
+ container = new Container();
18
+ container.registerInstance(MainGraphQLClient, client);
19
+ WbReviewFeature.register(container);
20
+ });
21
+ it("resolves the content adapter and the row provider and nothing else (R354)", ()=>{
22
+ const resolved = WbReviewFeature.resolve(container);
23
+ const keys = Object.keys(resolved).sort();
24
+ expect(keys).toEqual([
25
+ "contentAdapter",
26
+ "rowProvider"
27
+ ]);
28
+ expect(resolved.contentAdapter).toBe(container.resolve(WbReviewContentAdapter));
29
+ expect(resolved.rowProvider).toBe(container.resolve(WbReviewRowProvider));
30
+ });
31
+ it("binds WbReviewGateway itself to the shared review app token, once (R347, R358)", ()=>{
32
+ const gateways = container.resolveAll(ReviewAppGateway);
33
+ expect(gateways).toHaveLength(1);
34
+ expect(Object.getPrototypeOf(gateways[0])).toBe(WbReviewGateway.prototype);
35
+ expect(gateways[0].app).toBe("wb");
36
+ });
37
+ it("registers the gateway and the adapter as singletons", ()=>{
38
+ const [firstGateway] = container.resolveAll(ReviewAppGateway);
39
+ const [secondGateway] = container.resolveAll(ReviewAppGateway);
40
+ const firstAdapter = container.resolve(WbReviewContentAdapter);
41
+ const secondAdapter = container.resolve(WbReviewContentAdapter);
42
+ expect(firstGateway).toBe(secondGateway);
43
+ expect(firstAdapter).toBe(secondAdapter);
44
+ });
45
+ it("claims the page namespace only", ()=>{
46
+ const [gateway] = container.resolveAll(ReviewAppGateway);
47
+ expect(gateway.canHandle("wb.page")).toBe(true);
48
+ expect(gateway.canHandle("cms.article")).toBe(false);
49
+ });
50
+ it("keeps both apps' gateways under the shared token in one container (A83, A114)", ()=>{
51
+ container.register(CmsReviewGateway).inSingletonScope();
52
+ const gateways = container.resolveAll(ReviewAppGateway);
53
+ const apps = gateways.map((gateway)=>gateway.app);
54
+ expect(apps).toEqual([
55
+ "wb",
56
+ "cms"
57
+ ]);
58
+ expect(gateways[0]).not.toBe(gateways[1]);
59
+ });
60
+ it("sends the WB document and resolves with the envelope (R204)", async ()=>{
61
+ client.execute.mockResolvedValue({
62
+ websiteBuilder: {
63
+ getWebsiteBuilderPageTargetReview: {
64
+ data: null,
65
+ error: null
66
+ }
67
+ }
68
+ });
69
+ const [gateway] = container.resolveAll(ReviewAppGateway);
70
+ const envelope = await gateway.getTargetReview({
71
+ namespace: "wb.page",
72
+ targetRevisionId: "page-1#0001"
73
+ });
74
+ expect(envelope).toEqual({
75
+ data: null,
76
+ error: null
77
+ });
78
+ expect(client.execute).toHaveBeenCalledTimes(1);
79
+ expect(client.execute.mock.calls[0][0].variables).toEqual({
80
+ revisionId: "page-1#0001"
81
+ });
82
+ });
83
+ });
84
+
85
+ //# sourceMappingURL=feature.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/feature.test.js","sources":["../../../src/features/gateway/feature.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewGateway } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewGateway/CmsReviewGateway.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/abstractions.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway/WbReviewGateway.js\";\nimport { WbReviewFeature } from \"./feature.js\";\n\ndescribe(\"WbReviewFeature\", () => {\n const client = { execute: vi.fn() };\n let container: Container;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n WbReviewFeature.register(container);\n });\n\n it(\"resolves the content adapter and the row provider and nothing else (R354)\", () => {\n const resolved = WbReviewFeature.resolve(container);\n const keys = Object.keys(resolved).sort();\n\n expect(keys).toEqual([\"contentAdapter\", \"rowProvider\"]);\n expect(resolved.contentAdapter).toBe(container.resolve(WbReviewContentAdapter));\n expect(resolved.rowProvider).toBe(container.resolve(WbReviewRowProvider));\n });\n\n it(\"binds WbReviewGateway itself to the shared review app token, once (R347, R358)\", () => {\n const gateways = container.resolveAll(ReviewAppGateway);\n\n expect(gateways).toHaveLength(1);\n expect(Object.getPrototypeOf(gateways[0])).toBe(WbReviewGateway.prototype);\n expect(gateways[0].app).toBe(\"wb\");\n });\n\n it(\"registers the gateway and the adapter as singletons\", () => {\n const [firstGateway] = container.resolveAll(ReviewAppGateway);\n const [secondGateway] = container.resolveAll(ReviewAppGateway);\n const firstAdapter = container.resolve(WbReviewContentAdapter);\n const secondAdapter = container.resolve(WbReviewContentAdapter);\n\n expect(firstGateway).toBe(secondGateway);\n expect(firstAdapter).toBe(secondAdapter);\n });\n\n it(\"claims the page namespace only\", () => {\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n expect(gateway.canHandle(\"wb.page\")).toBe(true);\n expect(gateway.canHandle(\"cms.article\")).toBe(false);\n });\n\n it(\"keeps both apps' gateways under the shared token in one container (A83, A114)\", () => {\n container.register(CmsReviewGateway).inSingletonScope();\n\n const gateways = container.resolveAll(ReviewAppGateway);\n const apps = gateways.map(gateway => gateway.app);\n\n expect(apps).toEqual([\"wb\", \"cms\"]);\n expect(gateways[0]).not.toBe(gateways[1]);\n });\n\n it(\"sends the WB document and resolves with the envelope (R204)\", async () => {\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: { data: null, error: null } }\n });\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n const envelope = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(envelope).toEqual({ data: null, error: null });\n expect(client.execute).toHaveBeenCalledTimes(1);\n expect(client.execute.mock.calls[0][0].variables).toEqual({ revisionId: \"page-1#0001\" });\n });\n});\n"],"names":["describe","client","vi","container","beforeEach","Container","MainGraphQLClient","WbReviewFeature","it","resolved","keys","Object","expect","WbReviewContentAdapter","WbReviewRowProvider","gateways","ReviewAppGateway","WbReviewGateway","firstGateway","secondGateway","firstAdapter","secondAdapter","gateway","CmsReviewGateway","apps","envelope"],"mappings":";;;;;;;;;AAcAA,SAAS,mBAAmB;IACxB,MAAMC,SAAS;QAAE,SAASC,GAAG,EAAE;IAAG;IAClC,IAAIC;IAEJC,WAAW;QACPH,OAAO,OAAO,CAAC,SAAS;QAExBE,YAAY,IAAIE;QAChBF,UAAU,gBAAgB,CAACG,mBAAmBL;QAC9CM,gBAAgB,QAAQ,CAACJ;IAC7B;IAEAK,GAAG,6EAA6E;QAC5E,MAAMC,WAAWF,gBAAgB,OAAO,CAACJ;QACzC,MAAMO,OAAOC,OAAO,IAAI,CAACF,UAAU,IAAI;QAEvCG,OAAOF,MAAM,OAAO,CAAC;YAAC;YAAkB;SAAc;QACtDE,OAAOH,SAAS,cAAc,EAAE,IAAI,CAACN,UAAU,OAAO,CAACU;QACvDD,OAAOH,SAAS,WAAW,EAAE,IAAI,CAACN,UAAU,OAAO,CAACW;IACxD;IAEAN,GAAG,kFAAkF;QACjF,MAAMO,WAAWZ,UAAU,UAAU,CAACa;QAEtCJ,OAAOG,UAAU,YAAY,CAAC;QAC9BH,OAAOD,OAAO,cAAc,CAACI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAACE,gBAAgB,SAAS;QACzEL,OAAOG,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC;IAEAP,GAAG,uDAAuD;QACtD,MAAM,CAACU,aAAa,GAAGf,UAAU,UAAU,CAACa;QAC5C,MAAM,CAACG,cAAc,GAAGhB,UAAU,UAAU,CAACa;QAC7C,MAAMI,eAAejB,UAAU,OAAO,CAACU;QACvC,MAAMQ,gBAAgBlB,UAAU,OAAO,CAACU;QAExCD,OAAOM,cAAc,IAAI,CAACC;QAC1BP,OAAOQ,cAAc,IAAI,CAACC;IAC9B;IAEAb,GAAG,kCAAkC;QACjC,MAAM,CAACc,QAAQ,GAAGnB,UAAU,UAAU,CAACa;QAEvCJ,OAAOU,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC;QAC1CV,OAAOU,QAAQ,SAAS,CAAC,gBAAgB,IAAI,CAAC;IAClD;IAEAd,GAAG,iFAAiF;QAChFL,UAAU,QAAQ,CAACoB,kBAAkB,gBAAgB;QAErD,MAAMR,WAAWZ,UAAU,UAAU,CAACa;QACtC,MAAMQ,OAAOT,SAAS,GAAG,CAACO,CAAAA,UAAWA,QAAQ,GAAG;QAEhDV,OAAOY,MAAM,OAAO,CAAC;YAAC;YAAM;SAAM;QAClCZ,OAAOG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAACA,QAAQ,CAAC,EAAE;IAC5C;IAEAP,GAAG,+DAA+D;QAC9DP,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmC;oBAAE,MAAM;oBAAM,OAAO;gBAAK;YAAE;QACrF;QACA,MAAM,CAACqB,QAAQ,GAAGnB,UAAU,UAAU,CAACa;QAEvC,MAAMS,WAAW,MAAMH,QAAQ,eAAe,CAAC;YAC3C,WAAW;YACX,kBAAkB;QACtB;QAEAV,OAAOa,UAAU,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;QACnDb,OAAOX,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7CW,OAAOX,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YAAE,YAAY;QAAc;IAC1F;AACJ"}
@@ -0,0 +1,3 @@
1
+ export interface WbOperationResponse<TName extends string, TEnvelope> {
2
+ websiteBuilder: Record<TName, TEnvelope>;
3
+ }
@@ -0,0 +1 @@
1
+ export declare const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = "\n mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n websiteBuilder {\n approveWebsiteBuilderPageReviewStep(\n reviewId: $reviewId\n stepId: $stepId\n comment: $comment\n ) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,22 @@
1
+ import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = `
3
+ mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {
4
+ websiteBuilder {
5
+ approveWebsiteBuilderPageReviewStep(
6
+ reviewId: $reviewId
7
+ stepId: $stepId
8
+ comment: $comment
9
+ ) {
10
+ data {
11
+ ${REVIEW_FIELDS}
12
+ }
13
+ error {
14
+ ${ERROR_FIELDS}
15
+ }
16
+ }
17
+ }
18
+ }
19
+ `;
20
+ export { APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP };
21
+
22
+ //# sourceMappingURL=approveWebsiteBuilderPageReviewStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js","sources":["../../../../src/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = /* GraphQL */ `\n mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n websiteBuilder {\n approveWebsiteBuilderPageReviewStep(\n reviewId: $reviewId\n stepId: $stepId\n comment: $comment\n ) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,2CAAyD,CAAC;;;;;;;;;oBASnD,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = "\n mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {\n websiteBuilder {\n cancelWebsiteBuilderPageReview(reviewId: $reviewId) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
@@ -0,0 +1,18 @@
1
+ import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
2
+ const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = `
3
+ mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {
4
+ websiteBuilder {
5
+ cancelWebsiteBuilderPageReview(reviewId: $reviewId) {
6
+ data {
7
+ ${REVIEW_FIELDS}
8
+ }
9
+ error {
10
+ ${ERROR_FIELDS}
11
+ }
12
+ }
13
+ }
14
+ }
15
+ `;
16
+ export { CANCEL_WEBSITE_BUILDER_PAGE_REVIEW };
17
+
18
+ //# sourceMappingURL=cancelWebsiteBuilderPageReview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/gateway/graphql/cancelWebsiteBuilderPageReview.js","sources":["../../../../src/features/gateway/graphql/cancelWebsiteBuilderPageReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = /* GraphQL */ `\n mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {\n websiteBuilder {\n cancelWebsiteBuilderPageReview(reviewId: $reviewId) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_WEBSITE_BUILDER_PAGE_REVIEW","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,qCAAmD,CAAC;;;;;oBAK7C,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}