@strapi/review-workflows 5.12.0 → 5.12.2

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 (327) hide show
  1. package/dist/admin/{chunks/index-DcEF47R4.mjs → assets/balloon.png.js} +3 -1078
  2. package/dist/admin/assets/balloon.png.js.map +1 -0
  3. package/dist/admin/{chunks/index-CzdEqFOm.js → assets/balloon.png.mjs} +2 -1113
  4. package/dist/admin/assets/balloon.png.mjs.map +1 -0
  5. package/dist/admin/assets/purchase-page-illustration-dark.svg.js +6 -0
  6. package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
  7. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
  8. package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
  9. package/dist/admin/{chunks/purchase-review-workflows-4n0KXAeo.mjs → assets/purchase-page-illustration-light.svg.js} +3 -197
  10. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  11. package/dist/admin/{chunks/purchase-review-workflows-BDLncDcz.js → assets/purchase-page-illustration-light.svg.mjs} +2 -200
  12. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
  13. package/dist/admin/components/LimitsModal.js +122 -0
  14. package/dist/admin/components/LimitsModal.js.map +1 -0
  15. package/dist/admin/components/LimitsModal.mjs +120 -0
  16. package/dist/admin/components/LimitsModal.mjs.map +1 -0
  17. package/dist/admin/constants.js +18 -0
  18. package/dist/admin/constants.js.map +1 -0
  19. package/dist/admin/constants.mjs +12 -0
  20. package/dist/admin/constants.mjs.map +1 -0
  21. package/dist/admin/index.js +87 -13
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/index.mjs +88 -12
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/modules/hooks.js +8 -0
  26. package/dist/admin/modules/hooks.js.map +1 -0
  27. package/dist/admin/modules/hooks.mjs +6 -0
  28. package/dist/admin/modules/hooks.mjs.map +1 -0
  29. package/dist/admin/{chunks/router-ChVwf8TN.js → router.js} +3 -3
  30. package/dist/admin/router.js.map +1 -0
  31. package/dist/admin/{chunks/router-D-YCUzYy.mjs → router.mjs} +3 -3
  32. package/dist/admin/router.mjs.map +1 -0
  33. package/dist/admin/routes/content-manager/model/components/TableColumns.js +44 -0
  34. package/dist/admin/routes/content-manager/model/components/TableColumns.js.map +1 -0
  35. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs +41 -0
  36. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs.map +1 -0
  37. package/dist/admin/routes/content-manager/model/constants.js +60 -0
  38. package/dist/admin/routes/content-manager/model/constants.js.map +1 -0
  39. package/dist/admin/routes/content-manager/model/constants.mjs +58 -0
  40. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -0
  41. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +169 -0
  42. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -0
  43. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +148 -0
  44. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -0
  45. package/dist/admin/routes/content-manager/model/id/components/Header.js +31 -0
  46. package/dist/admin/routes/content-manager/model/id/components/Header.js.map +1 -0
  47. package/dist/admin/routes/content-manager/model/id/components/Header.mjs +29 -0
  48. package/dist/admin/routes/content-manager/model/id/components/Header.mjs.map +1 -0
  49. package/dist/admin/routes/content-manager/model/id/components/Panel.js +39 -0
  50. package/dist/admin/routes/content-manager/model/id/components/Panel.js.map +1 -0
  51. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs +37 -0
  52. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs.map +1 -0
  53. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +329 -0
  54. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -0
  55. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +308 -0
  56. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -0
  57. package/dist/admin/routes/content-manager/model/id/components/constants.js +8 -0
  58. package/dist/admin/routes/content-manager/model/id/components/constants.js.map +1 -0
  59. package/dist/admin/routes/content-manager/model/id/components/constants.mjs +5 -0
  60. package/dist/admin/routes/content-manager/model/id/components/constants.mjs.map +1 -0
  61. package/dist/admin/routes/purchase-review-workflows.js +194 -0
  62. package/dist/admin/routes/purchase-review-workflows.js.map +1 -0
  63. package/dist/admin/routes/purchase-review-workflows.mjs +192 -0
  64. package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -0
  65. package/dist/admin/routes/settings/components/AddStage.js +51 -0
  66. package/dist/admin/routes/settings/components/AddStage.js.map +1 -0
  67. package/dist/admin/routes/settings/components/AddStage.mjs +49 -0
  68. package/dist/admin/routes/settings/components/AddStage.mjs.map +1 -0
  69. package/dist/admin/routes/settings/components/Layout.js +86 -0
  70. package/dist/admin/routes/settings/components/Layout.js.map +1 -0
  71. package/dist/admin/routes/settings/components/Layout.mjs +82 -0
  72. package/dist/admin/routes/settings/components/Layout.mjs.map +1 -0
  73. package/dist/admin/routes/settings/components/StageDragPreview.js +40 -0
  74. package/dist/admin/routes/settings/components/StageDragPreview.js.map +1 -0
  75. package/dist/admin/routes/settings/components/StageDragPreview.mjs +38 -0
  76. package/dist/admin/routes/settings/components/StageDragPreview.mjs.map +1 -0
  77. package/dist/admin/routes/settings/components/Stages.js +593 -0
  78. package/dist/admin/routes/settings/components/Stages.js.map +1 -0
  79. package/dist/admin/routes/settings/components/Stages.mjs +572 -0
  80. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -0
  81. package/dist/admin/routes/settings/components/WorkflowAttributes.js +203 -0
  82. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -0
  83. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +201 -0
  84. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -0
  85. package/dist/admin/routes/settings/constants.js +8 -0
  86. package/dist/admin/routes/settings/constants.js.map +1 -0
  87. package/dist/admin/routes/settings/constants.mjs +6 -0
  88. package/dist/admin/routes/settings/constants.mjs.map +1 -0
  89. package/dist/admin/routes/settings/hooks/useDragAndDrop.js +193 -0
  90. package/dist/admin/routes/settings/hooks/useDragAndDrop.js.map +1 -0
  91. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs +170 -0
  92. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs.map +1 -0
  93. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js +94 -0
  94. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js.map +1 -0
  95. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs +73 -0
  96. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  97. package/dist/admin/{chunks/Layout-C4ri_ldC.js → routes/settings/hooks/useReviewWorkflows.js} +6 -121
  98. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js.map +1 -0
  99. package/dist/admin/{chunks/Layout-CF497D6H.mjs → routes/settings/hooks/useReviewWorkflows.mjs} +4 -115
  100. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs.map +1 -0
  101. package/dist/admin/routes/settings/id.js +404 -0
  102. package/dist/admin/routes/settings/id.js.map +1 -0
  103. package/dist/admin/routes/settings/id.mjs +382 -0
  104. package/dist/admin/routes/settings/id.mjs.map +1 -0
  105. package/dist/admin/{chunks/index-CCx4kT-t.js → routes/settings/index.js} +15 -15
  106. package/dist/admin/routes/settings/index.js.map +1 -0
  107. package/dist/admin/{chunks/index-iChY7MsG.mjs → routes/settings/index.mjs} +7 -7
  108. package/dist/admin/routes/settings/index.mjs.map +1 -0
  109. package/dist/admin/services/admin.js +23 -0
  110. package/dist/admin/services/admin.js.map +1 -0
  111. package/dist/admin/services/admin.mjs +21 -0
  112. package/dist/admin/services/admin.mjs.map +1 -0
  113. package/dist/admin/services/api.js +15 -0
  114. package/dist/admin/services/api.js.map +1 -0
  115. package/dist/admin/services/api.mjs +13 -0
  116. package/dist/admin/services/api.mjs.map +1 -0
  117. package/dist/admin/services/content-manager.js +101 -0
  118. package/dist/admin/services/content-manager.js.map +1 -0
  119. package/dist/admin/services/content-manager.mjs +96 -0
  120. package/dist/admin/services/content-manager.mjs.map +1 -0
  121. package/dist/admin/services/settings.js +123 -0
  122. package/dist/admin/services/settings.js.map +1 -0
  123. package/dist/admin/services/settings.mjs +118 -0
  124. package/dist/admin/services/settings.mjs.map +1 -0
  125. package/dist/admin/{chunks/en-BNGiWajd.js → translations/en.json.js} +2 -2
  126. package/dist/admin/translations/en.json.js.map +1 -0
  127. package/dist/admin/{chunks/en-BrZXFtVv.mjs → translations/en.json.mjs} +1 -1
  128. package/dist/admin/translations/en.json.mjs.map +1 -0
  129. package/dist/admin/{chunks/uk-CbRUr1I7.js → translations/uk.json.js} +2 -2
  130. package/dist/admin/translations/uk.json.js.map +1 -0
  131. package/dist/admin/{chunks/uk-DLlzEBUF.mjs → translations/uk.json.mjs} +1 -1
  132. package/dist/admin/translations/uk.json.mjs.map +1 -0
  133. package/dist/admin/utils/api.js +22 -0
  134. package/dist/admin/utils/api.js.map +1 -0
  135. package/dist/admin/utils/api.mjs +19 -0
  136. package/dist/admin/utils/api.mjs.map +1 -0
  137. package/dist/admin/utils/cm-hooks.js +23 -0
  138. package/dist/admin/utils/cm-hooks.js.map +1 -0
  139. package/dist/admin/utils/cm-hooks.mjs +21 -0
  140. package/dist/admin/utils/cm-hooks.mjs.map +1 -0
  141. package/dist/admin/utils/colors.js +50 -0
  142. package/dist/admin/utils/colors.js.map +1 -0
  143. package/dist/admin/utils/colors.mjs +47 -0
  144. package/dist/admin/utils/colors.mjs.map +1 -0
  145. package/dist/admin/utils/translations.js +11 -0
  146. package/dist/admin/utils/translations.js.map +1 -0
  147. package/dist/admin/utils/translations.mjs +9 -0
  148. package/dist/admin/utils/translations.mjs.map +1 -0
  149. package/dist/admin/utils/users.js +17 -0
  150. package/dist/admin/utils/users.js.map +1 -0
  151. package/dist/admin/utils/users.mjs +15 -0
  152. package/dist/admin/utils/users.mjs.map +1 -0
  153. package/dist/server/bootstrap.js +54 -0
  154. package/dist/server/bootstrap.js.map +1 -0
  155. package/dist/server/bootstrap.mjs +52 -0
  156. package/dist/server/bootstrap.mjs.map +1 -0
  157. package/dist/server/config/actions.js +47 -0
  158. package/dist/server/config/actions.js.map +1 -0
  159. package/dist/server/config/actions.mjs +45 -0
  160. package/dist/server/config/actions.mjs.map +1 -0
  161. package/dist/server/constants/default-stages.json.js +23 -0
  162. package/dist/server/constants/default-stages.json.js.map +1 -0
  163. package/dist/server/constants/default-stages.json.mjs +21 -0
  164. package/dist/server/constants/default-stages.json.mjs.map +1 -0
  165. package/dist/server/constants/default-workflow.json.js +12 -0
  166. package/dist/server/constants/default-workflow.json.js.map +1 -0
  167. package/dist/server/constants/default-workflow.json.mjs +7 -0
  168. package/dist/server/constants/default-workflow.json.mjs.map +1 -0
  169. package/dist/server/constants/webhook-events.js +12 -0
  170. package/dist/server/constants/webhook-events.js.map +1 -0
  171. package/dist/server/constants/webhook-events.mjs +7 -0
  172. package/dist/server/constants/webhook-events.mjs.map +1 -0
  173. package/dist/server/constants/workflows.js +53 -0
  174. package/dist/server/constants/workflows.js.map +1 -0
  175. package/dist/server/constants/workflows.mjs +42 -0
  176. package/dist/server/constants/workflows.mjs.map +1 -0
  177. package/dist/server/content-types/index.js +12 -0
  178. package/dist/server/content-types/index.js.map +1 -0
  179. package/dist/server/content-types/index.mjs +10 -0
  180. package/dist/server/content-types/index.mjs.map +1 -0
  181. package/dist/server/content-types/workflow/index.js +50 -0
  182. package/dist/server/content-types/workflow/index.js.map +1 -0
  183. package/dist/server/content-types/workflow/index.mjs +48 -0
  184. package/dist/server/content-types/workflow/index.mjs.map +1 -0
  185. package/dist/server/content-types/workflow-stage/index.js +54 -0
  186. package/dist/server/content-types/workflow-stage/index.js.map +1 -0
  187. package/dist/server/content-types/workflow-stage/index.mjs +52 -0
  188. package/dist/server/content-types/workflow-stage/index.mjs.map +1 -0
  189. package/dist/server/controllers/assignees.js +57 -0
  190. package/dist/server/controllers/assignees.js.map +1 -0
  191. package/dist/server/controllers/assignees.mjs +55 -0
  192. package/dist/server/controllers/assignees.mjs.map +1 -0
  193. package/dist/server/controllers/index.js +14 -0
  194. package/dist/server/controllers/index.js.map +1 -0
  195. package/dist/server/controllers/index.mjs +12 -0
  196. package/dist/server/controllers/index.mjs.map +1 -0
  197. package/dist/server/controllers/stages.js +167 -0
  198. package/dist/server/controllers/stages.js.map +1 -0
  199. package/dist/server/controllers/stages.mjs +165 -0
  200. package/dist/server/controllers/stages.mjs.map +1 -0
  201. package/dist/server/controllers/workflows.js +136 -0
  202. package/dist/server/controllers/workflows.js.map +1 -0
  203. package/dist/server/controllers/workflows.mjs +134 -0
  204. package/dist/server/controllers/workflows.mjs.map +1 -0
  205. package/dist/server/destroy.js +6 -0
  206. package/dist/server/destroy.js.map +1 -0
  207. package/dist/server/destroy.mjs +4 -0
  208. package/dist/server/destroy.mjs.map +1 -0
  209. package/dist/server/index.js +12 -2333
  210. package/dist/server/index.js.map +1 -1
  211. package/dist/server/index.mjs +7 -2328
  212. package/dist/server/index.mjs.map +1 -1
  213. package/dist/server/middlewares/review-workflows.js +42 -0
  214. package/dist/server/middlewares/review-workflows.js.map +1 -0
  215. package/dist/server/middlewares/review-workflows.mjs +37 -0
  216. package/dist/server/middlewares/review-workflows.mjs.map +1 -0
  217. package/dist/server/migrations/handle-deleted-ct-in-workflows.js +40 -0
  218. package/dist/server/migrations/handle-deleted-ct-in-workflows.js.map +1 -0
  219. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs +38 -0
  220. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs.map +1 -0
  221. package/dist/server/migrations/multiple-workflows.js +41 -0
  222. package/dist/server/migrations/multiple-workflows.js.map +1 -0
  223. package/dist/server/migrations/multiple-workflows.mjs +39 -0
  224. package/dist/server/migrations/multiple-workflows.mjs.map +1 -0
  225. package/dist/server/migrations/set-stages-default-color.js +22 -0
  226. package/dist/server/migrations/set-stages-default-color.js.map +1 -0
  227. package/dist/server/migrations/set-stages-default-color.mjs +20 -0
  228. package/dist/server/migrations/set-stages-default-color.mjs.map +1 -0
  229. package/dist/server/migrations/set-stages-roles.js +56 -0
  230. package/dist/server/migrations/set-stages-roles.js.map +1 -0
  231. package/dist/server/migrations/set-stages-roles.mjs +54 -0
  232. package/dist/server/migrations/set-stages-roles.mjs.map +1 -0
  233. package/dist/server/migrations/set-workflow-default-name.js +29 -0
  234. package/dist/server/migrations/set-workflow-default-name.js.map +1 -0
  235. package/dist/server/migrations/set-workflow-default-name.mjs +27 -0
  236. package/dist/server/migrations/set-workflow-default-name.mjs.map +1 -0
  237. package/dist/server/migrations/shorten-stage-attribute.js +45 -0
  238. package/dist/server/migrations/shorten-stage-attribute.js.map +1 -0
  239. package/dist/server/migrations/shorten-stage-attribute.mjs +43 -0
  240. package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -0
  241. package/dist/server/register.js +116 -0
  242. package/dist/server/register.js.map +1 -0
  243. package/dist/server/register.mjs +114 -0
  244. package/dist/server/register.mjs.map +1 -0
  245. package/dist/server/routes/index.js +10 -0
  246. package/dist/server/routes/index.js.map +1 -0
  247. package/dist/server/routes/index.mjs +8 -0
  248. package/dist/server/routes/index.mjs.map +1 -0
  249. package/dist/server/routes/review-workflows.js +186 -0
  250. package/dist/server/routes/review-workflows.js.map +1 -0
  251. package/dist/server/routes/review-workflows.mjs +184 -0
  252. package/dist/server/routes/review-workflows.mjs.map +1 -0
  253. package/dist/server/routes/utils.js +11 -0
  254. package/dist/server/routes/utils.js.map +1 -0
  255. package/dist/server/routes/utils.mjs +9 -0
  256. package/dist/server/routes/utils.mjs.map +1 -0
  257. package/dist/server/services/assignees.js +68 -0
  258. package/dist/server/services/assignees.js.map +1 -0
  259. package/dist/server/services/assignees.mjs +66 -0
  260. package/dist/server/services/assignees.mjs.map +1 -0
  261. package/dist/server/services/document-service-middleware.js +130 -0
  262. package/dist/server/services/document-service-middleware.js.map +1 -0
  263. package/dist/server/services/document-service-middleware.mjs +128 -0
  264. package/dist/server/services/document-service-middleware.mjs.map +1 -0
  265. package/dist/server/services/index.js +24 -0
  266. package/dist/server/services/index.js.map +1 -0
  267. package/dist/server/services/index.mjs +22 -0
  268. package/dist/server/services/index.mjs.map +1 -0
  269. package/dist/server/services/metrics/index.js +67 -0
  270. package/dist/server/services/metrics/index.js.map +1 -0
  271. package/dist/server/services/metrics/index.mjs +55 -0
  272. package/dist/server/services/metrics/index.mjs.map +1 -0
  273. package/dist/server/services/metrics/weekly-metrics.js +84 -0
  274. package/dist/server/services/metrics/weekly-metrics.js.map +1 -0
  275. package/dist/server/services/metrics/weekly-metrics.mjs +82 -0
  276. package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -0
  277. package/dist/server/services/stage-permissions.js +59 -0
  278. package/dist/server/services/stage-permissions.js.map +1 -0
  279. package/dist/server/services/stage-permissions.mjs +57 -0
  280. package/dist/server/services/stage-permissions.mjs.map +1 -0
  281. package/dist/server/services/stages.js +353 -0
  282. package/dist/server/services/stages.js.map +1 -0
  283. package/dist/server/services/stages.mjs +351 -0
  284. package/dist/server/services/stages.mjs.map +1 -0
  285. package/dist/server/services/validation.js +69 -0
  286. package/dist/server/services/validation.js.map +1 -0
  287. package/dist/server/services/validation.mjs +67 -0
  288. package/dist/server/services/validation.mjs.map +1 -0
  289. package/dist/server/services/workflow-content-types.js +90 -0
  290. package/dist/server/services/workflow-content-types.js.map +1 -0
  291. package/dist/server/services/workflow-content-types.mjs +88 -0
  292. package/dist/server/services/workflow-content-types.mjs.map +1 -0
  293. package/dist/server/services/workflows.js +279 -0
  294. package/dist/server/services/workflows.js.map +1 -0
  295. package/dist/server/services/workflows.mjs +277 -0
  296. package/dist/server/services/workflows.mjs.map +1 -0
  297. package/dist/server/utils/index.js +16 -0
  298. package/dist/server/utils/index.js.map +1 -0
  299. package/dist/server/utils/index.mjs +13 -0
  300. package/dist/server/utils/index.mjs.map +1 -0
  301. package/dist/server/utils/review-workflows.js +36 -0
  302. package/dist/server/utils/review-workflows.js.map +1 -0
  303. package/dist/server/utils/review-workflows.mjs +30 -0
  304. package/dist/server/utils/review-workflows.mjs.map +1 -0
  305. package/dist/server/validation/review-workflows.js +71 -0
  306. package/dist/server/validation/review-workflows.js.map +1 -0
  307. package/dist/server/validation/review-workflows.mjs +65 -0
  308. package/dist/server/validation/review-workflows.mjs.map +1 -0
  309. package/package.json +5 -5
  310. package/dist/admin/chunks/Layout-C4ri_ldC.js.map +0 -1
  311. package/dist/admin/chunks/Layout-CF497D6H.mjs.map +0 -1
  312. package/dist/admin/chunks/en-BNGiWajd.js.map +0 -1
  313. package/dist/admin/chunks/en-BrZXFtVv.mjs.map +0 -1
  314. package/dist/admin/chunks/id-DVOtqJqn.js +0 -1442
  315. package/dist/admin/chunks/id-DVOtqJqn.js.map +0 -1
  316. package/dist/admin/chunks/id-QD0V9dME.mjs +0 -1420
  317. package/dist/admin/chunks/id-QD0V9dME.mjs.map +0 -1
  318. package/dist/admin/chunks/index-CCx4kT-t.js.map +0 -1
  319. package/dist/admin/chunks/index-CzdEqFOm.js.map +0 -1
  320. package/dist/admin/chunks/index-DcEF47R4.mjs.map +0 -1
  321. package/dist/admin/chunks/index-iChY7MsG.mjs.map +0 -1
  322. package/dist/admin/chunks/purchase-review-workflows-4n0KXAeo.mjs.map +0 -1
  323. package/dist/admin/chunks/purchase-review-workflows-BDLncDcz.js.map +0 -1
  324. package/dist/admin/chunks/router-ChVwf8TN.js.map +0 -1
  325. package/dist/admin/chunks/router-D-YCUzYy.mjs.map +0 -1
  326. package/dist/admin/chunks/uk-CbRUr1I7.js.map +0 -1
  327. package/dist/admin/chunks/uk-DLlzEBUF.mjs.map +0 -1
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var workflows = require('./workflows.js');
4
+ var stages = require('./stages.js');
5
+ var assignees = require('./assignees.js');
6
+
7
+ var controllers = {
8
+ workflows,
9
+ stages,
10
+ assignees
11
+ };
12
+
13
+ module.exports = controllers;
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport workflows from './workflows';\nimport stages from './stages';\nimport assignees from './assignees';\n\nexport default {\n workflows,\n stages,\n assignees,\n};\n"],"names":["workflows","stages","assignees"],"mappings":";;;;;;AAMA,kBAAe;AACbA,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,12 @@
1
+ import workflows from './workflows.mjs';
2
+ import stages from './stages.mjs';
3
+ import assignees from './assignees.mjs';
4
+
5
+ var controllers = {
6
+ workflows,
7
+ stages,
8
+ assignees
9
+ };
10
+
11
+ export { controllers as default };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import type {} from 'koa-body';\n\nimport workflows from './workflows';\nimport stages from './stages';\nimport assignees from './assignees';\n\nexport default {\n workflows,\n stages,\n assignees,\n};\n"],"names":["workflows","stages","assignees"],"mappings":";;;;AAMA,kBAAe;AACbA,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,167 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var index = require('../utils/index.js');
5
+ var reviewWorkflows = require('../validation/review-workflows.js');
6
+ var workflows = require('../constants/workflows.js');
7
+
8
+ /**
9
+ *
10
+ * @param { Core.Strapi } strapi - Strapi instance
11
+ * @param userAbility
12
+ * @return { (Stage) => SanitizedStage }
13
+ */ function sanitizeStage({ strapi: strapi1 }, userAbility) {
14
+ const permissionChecker = strapi1.plugin('content-manager').service('permission-checker').create({
15
+ userAbility,
16
+ model: workflows.STAGE_MODEL_UID
17
+ });
18
+ return (entity)=>permissionChecker.sanitizeOutput(entity);
19
+ }
20
+ var stages = {
21
+ /**
22
+ * List all stages
23
+ * @param {import('koa').BaseContext} ctx - koa context
24
+ */ async find (ctx) {
25
+ const { workflow_id: workflowId } = ctx.params;
26
+ const { populate } = ctx.query;
27
+ const stagesService = index.getService('stages');
28
+ const sanitizer = sanitizeStage({
29
+ strapi
30
+ }, ctx.state.userAbility);
31
+ const stages = await stagesService.find({
32
+ workflowId,
33
+ populate
34
+ });
35
+ ctx.body = {
36
+ data: await utils.async.map(stages, sanitizer)
37
+ };
38
+ },
39
+ /**
40
+ * Get one stage
41
+ * @param {import('koa').BaseContext} ctx - koa context
42
+ */ async findById (ctx) {
43
+ const { id, workflow_id: workflowId } = ctx.params;
44
+ const { populate } = ctx.query;
45
+ const stagesService = index.getService('stages');
46
+ const sanitizer = sanitizeStage({
47
+ strapi
48
+ }, ctx.state.userAbility);
49
+ const stage = await stagesService.findById(id, {
50
+ workflowId,
51
+ populate
52
+ });
53
+ ctx.body = {
54
+ data: await sanitizer(stage)
55
+ };
56
+ },
57
+ /**
58
+ * Updates an entity's stage.
59
+ * @async
60
+ * @param {Object} ctx - The Koa context object.
61
+ * @param {Object} ctx.params - An object containing the parameters from the request URL.
62
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
63
+ * @param {string} ctx.params.id - The ID of the entity to update.
64
+ * @param {Object} ctx.request.body.data - Optional data object containing the new stage ID for the entity.
65
+ * @param {string} ctx.request.body.data.id - The ID of the new stage for the entity.
66
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
67
+ * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
68
+ * @returns {Promise<void>} A promise that resolves when the entity's stage has been updated.
69
+ */ async updateEntity (ctx) {
70
+ const stagesService = index.getService('stages');
71
+ const stagePermissions = index.getService('stage-permissions');
72
+ const workflowService = index.getService('workflows');
73
+ const { model_uid: modelUID, id: documentId } = ctx.params;
74
+ const { body, query = {} } = ctx.request;
75
+ const { sanitizeOutput } = strapi.plugin('content-manager').service('permission-checker').create({
76
+ userAbility: ctx.state.userAbility,
77
+ model: modelUID
78
+ });
79
+ // Load entity
80
+ const locale = await reviewWorkflows.validateLocale(query?.locale);
81
+ const entity = await strapi.documents(modelUID).findOne({
82
+ documentId,
83
+ // @ts-expect-error - locale should be also null in the doc service types
84
+ locale,
85
+ populate: [
86
+ workflows.ENTITY_STAGE_ATTRIBUTE
87
+ ]
88
+ });
89
+ if (!entity) {
90
+ ctx.throw(404, 'Entity not found');
91
+ }
92
+ // Validate if entity stage can be updated
93
+ const canTransition = stagePermissions.can(workflows.STAGE_TRANSITION_UID, entity[workflows.ENTITY_STAGE_ATTRIBUTE]?.id);
94
+ if (!canTransition) {
95
+ ctx.throw(403, 'Forbidden stage transition');
96
+ }
97
+ const { id: stageId } = await reviewWorkflows.validateUpdateStageOnEntity({
98
+ id: Number(body?.data?.id)
99
+ }, 'You should pass an id to the body of the put request.');
100
+ const workflow = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);
101
+ workflowService.assertStageBelongsToWorkflow(stageId, workflow);
102
+ const updatedEntity = await stagesService.updateEntity(entity, modelUID, stageId);
103
+ ctx.body = {
104
+ data: await sanitizeOutput(updatedEntity)
105
+ };
106
+ },
107
+ /**
108
+ * List all the stages that are available for a user to transition an entity to.
109
+ * If the user has permission to change the current stage of the entity every other stage in the workflow is returned
110
+ * @async
111
+ * @param {*} ctx
112
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
113
+ * @param {string} ctx.params.id - The ID of the entity.
114
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
115
+ */ async listAvailableStages (ctx) {
116
+ const stagePermissions = index.getService('stage-permissions');
117
+ const workflowService = index.getService('workflows');
118
+ const { model_uid: modelUID, id: documentId } = ctx.params;
119
+ const { query = {} } = ctx.request;
120
+ if (strapi.plugin('content-manager').service('permission-checker').create({
121
+ userAbility: ctx.state.userAbility,
122
+ model: modelUID
123
+ }).cannot.read()) {
124
+ return ctx.forbidden();
125
+ }
126
+ // Load entity
127
+ const locale = await reviewWorkflows.validateLocale(query?.locale) ?? undefined;
128
+ const entity = await strapi.documents(modelUID).findOne({
129
+ documentId,
130
+ locale,
131
+ populate: [
132
+ workflows.ENTITY_STAGE_ATTRIBUTE
133
+ ]
134
+ });
135
+ if (!entity) {
136
+ ctx.throw(404, 'Entity not found');
137
+ }
138
+ const entityStageId = entity[workflows.ENTITY_STAGE_ATTRIBUTE]?.id;
139
+ const canTransition = stagePermissions.can(workflows.STAGE_TRANSITION_UID, entityStageId);
140
+ const [workflowCount, workflowResult] = await Promise.all([
141
+ workflowService.count(),
142
+ workflowService.getAssignedWorkflow(modelUID, {
143
+ populate: 'stages'
144
+ })
145
+ ]);
146
+ const workflowStages = workflowResult ? workflowResult.stages : [];
147
+ const meta = {
148
+ stageCount: workflowStages.length,
149
+ workflowCount
150
+ };
151
+ if (!canTransition) {
152
+ ctx.body = {
153
+ data: [],
154
+ meta
155
+ };
156
+ return;
157
+ }
158
+ const data = workflowStages.filter((stage)=>stage.id !== entityStageId);
159
+ ctx.body = {
160
+ data,
161
+ meta
162
+ };
163
+ }
164
+ };
165
+
166
+ module.exports = stages;
167
+ //# sourceMappingURL=stages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stages.js","sources":["../../../server/src/controllers/stages.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { async, validate } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { validateUpdateStageOnEntity, validateLocale } from '../validation/review-workflows';\nimport {\n STAGE_MODEL_UID,\n ENTITY_STAGE_ATTRIBUTE,\n STAGE_TRANSITION_UID,\n} from '../constants/workflows';\n\n/**\n *\n * @param { Core.Strapi } strapi - Strapi instance\n * @param userAbility\n * @return { (Stage) => SanitizedStage }\n */\nfunction sanitizeStage({ strapi }: { strapi: Core.Strapi }, userAbility: unknown) {\n const permissionChecker = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility, model: STAGE_MODEL_UID });\n\n return (entity: unknown) => permissionChecker.sanitizeOutput(entity);\n}\n\nexport default {\n /**\n * List all stages\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async find(ctx: Context) {\n const { workflow_id: workflowId } = ctx.params;\n const { populate } = ctx.query;\n const stagesService = getService('stages');\n const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);\n\n const stages = await stagesService.find({\n workflowId,\n populate,\n });\n\n ctx.body = {\n data: await async.map(stages, sanitizer),\n };\n },\n /**\n * Get one stage\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async findById(ctx: Context) {\n const { id, workflow_id: workflowId } = ctx.params;\n const { populate } = ctx.query;\n const stagesService = getService('stages');\n const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);\n\n const stage = await stagesService.findById(id, {\n workflowId,\n populate,\n });\n\n ctx.body = {\n data: await sanitizer(stage),\n };\n },\n\n /**\n * Updates an entity's stage.\n * @async\n * @param {Object} ctx - The Koa context object.\n * @param {Object} ctx.params - An object containing the parameters from the request URL.\n * @param {string} ctx.params.model_uid - The model UID of the entity.\n * @param {string} ctx.params.id - The ID of the entity to update.\n * @param {Object} ctx.request.body.data - Optional data object containing the new stage ID for the entity.\n * @param {string} ctx.request.body.data.id - The ID of the new stage for the entity.\n * @throws {ApplicationError} If review workflows is not activated on the specified model UID.\n * @throws {ValidationError} If the `data` object in the request body fails to pass validation.\n * @returns {Promise<void>} A promise that resolves when the entity's stage has been updated.\n */\n async updateEntity(ctx: Context) {\n const stagesService = getService('stages');\n const stagePermissions = getService('stage-permissions');\n const workflowService = getService('workflows');\n\n const { model_uid: modelUID, id: documentId } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const { sanitizeOutput } = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model: modelUID });\n\n // Load entity\n const locale = await validateLocale(query?.locale);\n const entity = await strapi.documents(modelUID).findOne({\n documentId,\n // @ts-expect-error - locale should be also null in the doc service types\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n if (!entity) {\n ctx.throw(404, 'Entity not found');\n }\n\n // Validate if entity stage can be updated\n const canTransition = stagePermissions.can(\n STAGE_TRANSITION_UID,\n entity[ENTITY_STAGE_ATTRIBUTE]?.id\n );\n\n if (!canTransition) {\n ctx.throw(403, 'Forbidden stage transition');\n }\n\n const { id: stageId } = await validateUpdateStageOnEntity(\n { id: Number(body?.data?.id) },\n 'You should pass an id to the body of the put request.'\n );\n\n const workflow = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);\n workflowService.assertStageBelongsToWorkflow(stageId, workflow);\n\n const updatedEntity = await stagesService.updateEntity(entity, modelUID, stageId);\n\n ctx.body = { data: await sanitizeOutput(updatedEntity) };\n },\n\n /**\n * List all the stages that are available for a user to transition an entity to.\n * If the user has permission to change the current stage of the entity every other stage in the workflow is returned\n * @async\n * @param {*} ctx\n * @param {string} ctx.params.model_uid - The model UID of the entity.\n * @param {string} ctx.params.id - The ID of the entity.\n * @throws {ApplicationError} If review workflows is not activated on the specified model UID.\n */\n async listAvailableStages(ctx: Context) {\n const stagePermissions = getService('stage-permissions');\n const workflowService = getService('workflows');\n\n const { model_uid: modelUID, id: documentId } = ctx.params;\n const { query = {} } = ctx.request;\n\n if (\n strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model: modelUID })\n .cannot.read()\n ) {\n return ctx.forbidden();\n }\n\n // Load entity\n const locale = (await validateLocale(query?.locale)) ?? undefined;\n const entity = await strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n if (!entity) {\n ctx.throw(404, 'Entity not found');\n }\n\n const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const [workflowCount, workflowResult] = await Promise.all([\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: 'stages',\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n };\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const data = workflowStages.filter((stage: any) => stage.id !== entityStageId);\n ctx.body = {\n data,\n meta,\n };\n },\n};\n"],"names":["sanitizeStage","strapi","userAbility","permissionChecker","plugin","service","create","model","STAGE_MODEL_UID","entity","sanitizeOutput","find","ctx","workflow_id","workflowId","params","populate","query","stagesService","getService","sanitizer","state","stages","body","data","async","map","findById","id","stage","updateEntity","stagePermissions","workflowService","model_uid","modelUID","documentId","request","locale","validateLocale","documents","findOne","ENTITY_STAGE_ATTRIBUTE","throw","canTransition","can","STAGE_TRANSITION_UID","stageId","validateUpdateStageOnEntity","Number","workflow","assertContentTypeBelongsToWorkflow","assertStageBelongsToWorkflow","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","entityStageId","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","workflowStages","meta","stageCount","length","filter"],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { async } from '@strapi/utils';
2
+ import { getService } from '../utils/index.mjs';
3
+ import { validateLocale, validateUpdateStageOnEntity } from '../validation/review-workflows.mjs';
4
+ import { ENTITY_STAGE_ATTRIBUTE, STAGE_TRANSITION_UID, STAGE_MODEL_UID } from '../constants/workflows.mjs';
5
+
6
+ /**
7
+ *
8
+ * @param { Core.Strapi } strapi - Strapi instance
9
+ * @param userAbility
10
+ * @return { (Stage) => SanitizedStage }
11
+ */ function sanitizeStage({ strapi: strapi1 }, userAbility) {
12
+ const permissionChecker = strapi1.plugin('content-manager').service('permission-checker').create({
13
+ userAbility,
14
+ model: STAGE_MODEL_UID
15
+ });
16
+ return (entity)=>permissionChecker.sanitizeOutput(entity);
17
+ }
18
+ var stages = {
19
+ /**
20
+ * List all stages
21
+ * @param {import('koa').BaseContext} ctx - koa context
22
+ */ async find (ctx) {
23
+ const { workflow_id: workflowId } = ctx.params;
24
+ const { populate } = ctx.query;
25
+ const stagesService = getService('stages');
26
+ const sanitizer = sanitizeStage({
27
+ strapi
28
+ }, ctx.state.userAbility);
29
+ const stages = await stagesService.find({
30
+ workflowId,
31
+ populate
32
+ });
33
+ ctx.body = {
34
+ data: await async.map(stages, sanitizer)
35
+ };
36
+ },
37
+ /**
38
+ * Get one stage
39
+ * @param {import('koa').BaseContext} ctx - koa context
40
+ */ async findById (ctx) {
41
+ const { id, workflow_id: workflowId } = ctx.params;
42
+ const { populate } = ctx.query;
43
+ const stagesService = getService('stages');
44
+ const sanitizer = sanitizeStage({
45
+ strapi
46
+ }, ctx.state.userAbility);
47
+ const stage = await stagesService.findById(id, {
48
+ workflowId,
49
+ populate
50
+ });
51
+ ctx.body = {
52
+ data: await sanitizer(stage)
53
+ };
54
+ },
55
+ /**
56
+ * Updates an entity's stage.
57
+ * @async
58
+ * @param {Object} ctx - The Koa context object.
59
+ * @param {Object} ctx.params - An object containing the parameters from the request URL.
60
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
61
+ * @param {string} ctx.params.id - The ID of the entity to update.
62
+ * @param {Object} ctx.request.body.data - Optional data object containing the new stage ID for the entity.
63
+ * @param {string} ctx.request.body.data.id - The ID of the new stage for the entity.
64
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
65
+ * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
66
+ * @returns {Promise<void>} A promise that resolves when the entity's stage has been updated.
67
+ */ async updateEntity (ctx) {
68
+ const stagesService = getService('stages');
69
+ const stagePermissions = getService('stage-permissions');
70
+ const workflowService = getService('workflows');
71
+ const { model_uid: modelUID, id: documentId } = ctx.params;
72
+ const { body, query = {} } = ctx.request;
73
+ const { sanitizeOutput } = strapi.plugin('content-manager').service('permission-checker').create({
74
+ userAbility: ctx.state.userAbility,
75
+ model: modelUID
76
+ });
77
+ // Load entity
78
+ const locale = await validateLocale(query?.locale);
79
+ const entity = await strapi.documents(modelUID).findOne({
80
+ documentId,
81
+ // @ts-expect-error - locale should be also null in the doc service types
82
+ locale,
83
+ populate: [
84
+ ENTITY_STAGE_ATTRIBUTE
85
+ ]
86
+ });
87
+ if (!entity) {
88
+ ctx.throw(404, 'Entity not found');
89
+ }
90
+ // Validate if entity stage can be updated
91
+ const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entity[ENTITY_STAGE_ATTRIBUTE]?.id);
92
+ if (!canTransition) {
93
+ ctx.throw(403, 'Forbidden stage transition');
94
+ }
95
+ const { id: stageId } = await validateUpdateStageOnEntity({
96
+ id: Number(body?.data?.id)
97
+ }, 'You should pass an id to the body of the put request.');
98
+ const workflow = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);
99
+ workflowService.assertStageBelongsToWorkflow(stageId, workflow);
100
+ const updatedEntity = await stagesService.updateEntity(entity, modelUID, stageId);
101
+ ctx.body = {
102
+ data: await sanitizeOutput(updatedEntity)
103
+ };
104
+ },
105
+ /**
106
+ * List all the stages that are available for a user to transition an entity to.
107
+ * If the user has permission to change the current stage of the entity every other stage in the workflow is returned
108
+ * @async
109
+ * @param {*} ctx
110
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
111
+ * @param {string} ctx.params.id - The ID of the entity.
112
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
113
+ */ async listAvailableStages (ctx) {
114
+ const stagePermissions = getService('stage-permissions');
115
+ const workflowService = getService('workflows');
116
+ const { model_uid: modelUID, id: documentId } = ctx.params;
117
+ const { query = {} } = ctx.request;
118
+ if (strapi.plugin('content-manager').service('permission-checker').create({
119
+ userAbility: ctx.state.userAbility,
120
+ model: modelUID
121
+ }).cannot.read()) {
122
+ return ctx.forbidden();
123
+ }
124
+ // Load entity
125
+ const locale = await validateLocale(query?.locale) ?? undefined;
126
+ const entity = await strapi.documents(modelUID).findOne({
127
+ documentId,
128
+ locale,
129
+ populate: [
130
+ ENTITY_STAGE_ATTRIBUTE
131
+ ]
132
+ });
133
+ if (!entity) {
134
+ ctx.throw(404, 'Entity not found');
135
+ }
136
+ const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;
137
+ const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);
138
+ const [workflowCount, workflowResult] = await Promise.all([
139
+ workflowService.count(),
140
+ workflowService.getAssignedWorkflow(modelUID, {
141
+ populate: 'stages'
142
+ })
143
+ ]);
144
+ const workflowStages = workflowResult ? workflowResult.stages : [];
145
+ const meta = {
146
+ stageCount: workflowStages.length,
147
+ workflowCount
148
+ };
149
+ if (!canTransition) {
150
+ ctx.body = {
151
+ data: [],
152
+ meta
153
+ };
154
+ return;
155
+ }
156
+ const data = workflowStages.filter((stage)=>stage.id !== entityStageId);
157
+ ctx.body = {
158
+ data,
159
+ meta
160
+ };
161
+ }
162
+ };
163
+
164
+ export { stages as default };
165
+ //# sourceMappingURL=stages.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stages.mjs","sources":["../../../server/src/controllers/stages.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { async, validate } from '@strapi/utils';\nimport { getService } from '../utils';\nimport { validateUpdateStageOnEntity, validateLocale } from '../validation/review-workflows';\nimport {\n STAGE_MODEL_UID,\n ENTITY_STAGE_ATTRIBUTE,\n STAGE_TRANSITION_UID,\n} from '../constants/workflows';\n\n/**\n *\n * @param { Core.Strapi } strapi - Strapi instance\n * @param userAbility\n * @return { (Stage) => SanitizedStage }\n */\nfunction sanitizeStage({ strapi }: { strapi: Core.Strapi }, userAbility: unknown) {\n const permissionChecker = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility, model: STAGE_MODEL_UID });\n\n return (entity: unknown) => permissionChecker.sanitizeOutput(entity);\n}\n\nexport default {\n /**\n * List all stages\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async find(ctx: Context) {\n const { workflow_id: workflowId } = ctx.params;\n const { populate } = ctx.query;\n const stagesService = getService('stages');\n const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);\n\n const stages = await stagesService.find({\n workflowId,\n populate,\n });\n\n ctx.body = {\n data: await async.map(stages, sanitizer),\n };\n },\n /**\n * Get one stage\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async findById(ctx: Context) {\n const { id, workflow_id: workflowId } = ctx.params;\n const { populate } = ctx.query;\n const stagesService = getService('stages');\n const sanitizer = sanitizeStage({ strapi }, ctx.state.userAbility);\n\n const stage = await stagesService.findById(id, {\n workflowId,\n populate,\n });\n\n ctx.body = {\n data: await sanitizer(stage),\n };\n },\n\n /**\n * Updates an entity's stage.\n * @async\n * @param {Object} ctx - The Koa context object.\n * @param {Object} ctx.params - An object containing the parameters from the request URL.\n * @param {string} ctx.params.model_uid - The model UID of the entity.\n * @param {string} ctx.params.id - The ID of the entity to update.\n * @param {Object} ctx.request.body.data - Optional data object containing the new stage ID for the entity.\n * @param {string} ctx.request.body.data.id - The ID of the new stage for the entity.\n * @throws {ApplicationError} If review workflows is not activated on the specified model UID.\n * @throws {ValidationError} If the `data` object in the request body fails to pass validation.\n * @returns {Promise<void>} A promise that resolves when the entity's stage has been updated.\n */\n async updateEntity(ctx: Context) {\n const stagesService = getService('stages');\n const stagePermissions = getService('stage-permissions');\n const workflowService = getService('workflows');\n\n const { model_uid: modelUID, id: documentId } = ctx.params;\n const { body, query = {} } = ctx.request;\n\n const { sanitizeOutput } = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model: modelUID });\n\n // Load entity\n const locale = await validateLocale(query?.locale);\n const entity = await strapi.documents(modelUID).findOne({\n documentId,\n // @ts-expect-error - locale should be also null in the doc service types\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n if (!entity) {\n ctx.throw(404, 'Entity not found');\n }\n\n // Validate if entity stage can be updated\n const canTransition = stagePermissions.can(\n STAGE_TRANSITION_UID,\n entity[ENTITY_STAGE_ATTRIBUTE]?.id\n );\n\n if (!canTransition) {\n ctx.throw(403, 'Forbidden stage transition');\n }\n\n const { id: stageId } = await validateUpdateStageOnEntity(\n { id: Number(body?.data?.id) },\n 'You should pass an id to the body of the put request.'\n );\n\n const workflow = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);\n workflowService.assertStageBelongsToWorkflow(stageId, workflow);\n\n const updatedEntity = await stagesService.updateEntity(entity, modelUID, stageId);\n\n ctx.body = { data: await sanitizeOutput(updatedEntity) };\n },\n\n /**\n * List all the stages that are available for a user to transition an entity to.\n * If the user has permission to change the current stage of the entity every other stage in the workflow is returned\n * @async\n * @param {*} ctx\n * @param {string} ctx.params.model_uid - The model UID of the entity.\n * @param {string} ctx.params.id - The ID of the entity.\n * @throws {ApplicationError} If review workflows is not activated on the specified model UID.\n */\n async listAvailableStages(ctx: Context) {\n const stagePermissions = getService('stage-permissions');\n const workflowService = getService('workflows');\n\n const { model_uid: modelUID, id: documentId } = ctx.params;\n const { query = {} } = ctx.request;\n\n if (\n strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model: modelUID })\n .cannot.read()\n ) {\n return ctx.forbidden();\n }\n\n // Load entity\n const locale = (await validateLocale(query?.locale)) ?? undefined;\n const entity = await strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n });\n\n if (!entity) {\n ctx.throw(404, 'Entity not found');\n }\n\n const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const [workflowCount, workflowResult] = await Promise.all([\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: 'stages',\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n };\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const data = workflowStages.filter((stage: any) => stage.id !== entityStageId);\n ctx.body = {\n data,\n meta,\n };\n },\n};\n"],"names":["sanitizeStage","strapi","userAbility","permissionChecker","plugin","service","create","model","STAGE_MODEL_UID","entity","sanitizeOutput","find","ctx","workflow_id","workflowId","params","populate","query","stagesService","getService","sanitizer","state","stages","body","data","async","map","findById","id","stage","updateEntity","stagePermissions","workflowService","model_uid","modelUID","documentId","request","locale","validateLocale","documents","findOne","ENTITY_STAGE_ATTRIBUTE","throw","canTransition","can","STAGE_TRANSITION_UID","stageId","validateUpdateStageOnEntity","Number","workflow","assertContentTypeBelongsToWorkflow","assertStageBelongsToWorkflow","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","entityStageId","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","workflowStages","meta","stageCount","length","filter"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var utils = require('@strapi/utils');
5
+ var index = require('../utils/index.js');
6
+ var reviewWorkflows = require('../validation/review-workflows.js');
7
+ var workflows$1 = require('../constants/workflows.js');
8
+
9
+ /**
10
+ *
11
+ * @param { Core.Strapi } strapi - Strapi instance
12
+ * @param userAbility
13
+ * @return { PermissionChecker }
14
+ */ function getWorkflowsPermissionChecker({ strapi: strapi1 }, userAbility) {
15
+ return strapi1.plugin('content-manager').service('permission-checker').create({
16
+ userAbility,
17
+ model: workflows$1.WORKFLOW_MODEL_UID
18
+ });
19
+ }
20
+ /**
21
+ * Transforms workflow to an admin UI format.
22
+ * Some attributes (like permissions) are presented in a different format in the admin UI.
23
+ * @param {Workflow} workflow
24
+ */ function formatWorkflowToAdmin(workflow) {
25
+ if (!workflow) return;
26
+ if (!workflow.stages) return workflow;
27
+ // Transform permissions roles to be the id string instead of an object
28
+ const transformPermissions = fp.map(fp.update('role', fp.property('id')));
29
+ const transformStages = fp.map(fp.update('permissions', transformPermissions));
30
+ return fp.update('stages', transformStages, workflow);
31
+ }
32
+ var workflows = {
33
+ /**
34
+ * Create a new workflow
35
+ * @param {import('koa').BaseContext} ctx - koa context
36
+ */ async create (ctx) {
37
+ const { body, query } = ctx.request;
38
+ const { sanitizeCreateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
39
+ strapi
40
+ }, ctx.state.userAbility);
41
+ const { populate } = await sanitizedQuery.create(query);
42
+ const workflowBody = await reviewWorkflows.validateWorkflowCreate(body.data);
43
+ const workflowService = index.getService('workflows');
44
+ const createdWorkflow = await workflowService.create({
45
+ data: await sanitizeCreateInput(workflowBody),
46
+ populate
47
+ }).then(formatWorkflowToAdmin);
48
+ ctx.created({
49
+ data: await sanitizeOutput(createdWorkflow)
50
+ });
51
+ },
52
+ /**
53
+ * Update a workflow
54
+ * @param {import('koa').BaseContext} ctx - koa context
55
+ */ async update (ctx) {
56
+ const { id } = ctx.params;
57
+ const { body, query } = ctx.request;
58
+ const workflowService = index.getService('workflows');
59
+ const { sanitizeUpdateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
60
+ strapi
61
+ }, ctx.state.userAbility);
62
+ const { populate } = await sanitizedQuery.update(query);
63
+ const workflowBody = await reviewWorkflows.validateWorkflowUpdate(body.data);
64
+ // Find if workflow exists
65
+ const workflow = await workflowService.findById(id, {
66
+ populate: workflows$1.WORKFLOW_POPULATE
67
+ });
68
+ if (!workflow) {
69
+ return ctx.notFound();
70
+ }
71
+ // Sanitize input data
72
+ const getPermittedFieldToUpdate = sanitizeUpdateInput(workflow);
73
+ const dataToUpdate = await getPermittedFieldToUpdate(workflowBody);
74
+ // Update workflow
75
+ const updatedWorkflow = await workflowService.update(workflow, {
76
+ data: dataToUpdate,
77
+ populate
78
+ }).then(formatWorkflowToAdmin);
79
+ // Send sanitized response
80
+ ctx.body = {
81
+ data: await sanitizeOutput(updatedWorkflow)
82
+ };
83
+ },
84
+ /**
85
+ * Delete a workflow
86
+ * @param {import('koa').BaseContext} ctx - koa context
87
+ */ async delete (ctx) {
88
+ const { id } = ctx.params;
89
+ const { query } = ctx.request;
90
+ const workflowService = index.getService('workflows');
91
+ const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
92
+ strapi
93
+ }, ctx.state.userAbility);
94
+ const { populate } = await sanitizedQuery.delete(query);
95
+ const workflow = await workflowService.findById(id, {
96
+ populate: workflows$1.WORKFLOW_POPULATE
97
+ });
98
+ if (!workflow) {
99
+ return ctx.notFound("Workflow doesn't exist");
100
+ }
101
+ const deletedWorkflow = await workflowService.delete(workflow, {
102
+ populate
103
+ }).then(formatWorkflowToAdmin);
104
+ ctx.body = {
105
+ data: await sanitizeOutput(deletedWorkflow)
106
+ };
107
+ },
108
+ /**
109
+ * List all workflows
110
+ * @param {import('koa').BaseContext} ctx - koa context
111
+ */ async find (ctx) {
112
+ const { query } = ctx.request;
113
+ const workflowService = index.getService('workflows');
114
+ const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
115
+ strapi
116
+ }, ctx.state.userAbility);
117
+ const { populate, filters, sort } = await sanitizedQuery.read(query);
118
+ const [workflows, workflowCount] = await Promise.all([
119
+ workflowService.find({
120
+ populate,
121
+ filters,
122
+ sort
123
+ }).then(fp.map(formatWorkflowToAdmin)),
124
+ workflowService.count()
125
+ ]);
126
+ ctx.body = {
127
+ data: await utils.async.map(workflows, sanitizeOutput),
128
+ meta: {
129
+ workflowCount
130
+ }
131
+ };
132
+ }
133
+ };
134
+
135
+ module.exports = workflows;
136
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sources":["../../../server/src/controllers/workflows.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { update, map, property } from 'lodash/fp';\n\nimport type { Core } from '@strapi/types';\nimport { async } from '@strapi/utils';\n\nimport { getService } from '../utils';\nimport { validateWorkflowCreate, validateWorkflowUpdate } from '../validation/review-workflows';\nimport { WORKFLOW_MODEL_UID, WORKFLOW_POPULATE } from '../constants/workflows';\n\n/**\n *\n * @param { Core.Strapi } strapi - Strapi instance\n * @param userAbility\n * @return { PermissionChecker }\n */\nfunction getWorkflowsPermissionChecker({ strapi }: { strapi: Core.Strapi }, userAbility: unknown) {\n return strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility, model: WORKFLOW_MODEL_UID });\n}\n\n/**\n * Transforms workflow to an admin UI format.\n * Some attributes (like permissions) are presented in a different format in the admin UI.\n * @param {Workflow} workflow\n */\nfunction formatWorkflowToAdmin(workflow: any) {\n if (!workflow) return;\n if (!workflow.stages) return workflow;\n\n // Transform permissions roles to be the id string instead of an object\n const transformPermissions = map(update('role', property('id')));\n const transformStages = map(update('permissions', transformPermissions));\n return update('stages', transformStages, workflow);\n}\n\nexport default {\n /**\n * Create a new workflow\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async create(ctx: Context) {\n const { body, query } = ctx.request;\n const { sanitizeCreateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(\n { strapi },\n ctx.state.userAbility\n );\n const { populate } = await sanitizedQuery.create(query);\n\n const workflowBody = await validateWorkflowCreate(body.data);\n\n const workflowService = getService('workflows');\n const createdWorkflow = await workflowService\n .create({\n data: await sanitizeCreateInput(workflowBody),\n populate,\n })\n .then(formatWorkflowToAdmin);\n\n ctx.created({\n data: await sanitizeOutput(createdWorkflow),\n });\n },\n\n /**\n * Update a workflow\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async update(ctx: Context) {\n const { id } = ctx.params;\n const { body, query } = ctx.request;\n const workflowService = getService('workflows');\n const { sanitizeUpdateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(\n { strapi },\n ctx.state.userAbility\n );\n const { populate } = await sanitizedQuery.update(query);\n const workflowBody = await validateWorkflowUpdate(body.data);\n\n // Find if workflow exists\n const workflow = await workflowService.findById(id, { populate: WORKFLOW_POPULATE });\n if (!workflow) {\n return ctx.notFound();\n }\n\n // Sanitize input data\n const getPermittedFieldToUpdate = sanitizeUpdateInput(workflow);\n const dataToUpdate = await getPermittedFieldToUpdate(workflowBody);\n\n // Update workflow\n const updatedWorkflow = await workflowService\n .update(workflow, {\n data: dataToUpdate,\n populate,\n })\n .then(formatWorkflowToAdmin);\n\n // Send sanitized response\n ctx.body = {\n data: await sanitizeOutput(updatedWorkflow),\n };\n },\n\n /**\n * Delete a workflow\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async delete(ctx: Context) {\n const { id } = ctx.params;\n const { query } = ctx.request;\n const workflowService = getService('workflows');\n const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(\n { strapi },\n ctx.state.userAbility\n );\n const { populate } = await sanitizedQuery.delete(query);\n\n const workflow = await workflowService.findById(id, { populate: WORKFLOW_POPULATE });\n if (!workflow) {\n return ctx.notFound(\"Workflow doesn't exist\");\n }\n\n const deletedWorkflow = await workflowService\n .delete(workflow, { populate })\n .then(formatWorkflowToAdmin);\n\n ctx.body = {\n data: await sanitizeOutput(deletedWorkflow),\n };\n },\n\n /**\n * List all workflows\n * @param {import('koa').BaseContext} ctx - koa context\n */\n async find(ctx: Context) {\n const { query } = ctx.request;\n const workflowService = getService('workflows');\n const { sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker(\n { strapi },\n ctx.state.userAbility\n );\n const { populate, filters, sort } = await sanitizedQuery.read(query);\n\n const [workflows, workflowCount] = await Promise.all([\n workflowService.find({ populate, filters, sort }).then(map(formatWorkflowToAdmin)),\n workflowService.count(),\n ]);\n\n ctx.body = {\n data: await async.map(workflows, sanitizeOutput),\n meta: {\n workflowCount,\n },\n };\n },\n};\n"],"names":["getWorkflowsPermissionChecker","strapi","userAbility","plugin","service","create","model","WORKFLOW_MODEL_UID","formatWorkflowToAdmin","workflow","stages","transformPermissions","map","update","property","transformStages","ctx","body","query","request","sanitizeCreateInput","sanitizeOutput","sanitizedQuery","state","populate","workflowBody","validateWorkflowCreate","data","workflowService","getService","createdWorkflow","then","created","id","params","sanitizeUpdateInput","validateWorkflowUpdate","findById","WORKFLOW_POPULATE","notFound","getPermittedFieldToUpdate","dataToUpdate","updatedWorkflow","delete","deletedWorkflow","find","filters","sort","read","workflows","workflowCount","Promise","all","count","async","meta"],"mappings":"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"}