@strapi/review-workflows 0.0.0-next.f0a0bc26f5ef0693aaea2a616bc6b816cfee54b6 → 0.0.0-next.f0f36e3df4b18f167036dcbca529dcb933bf4e1d

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 (412) hide show
  1. package/dist/admin/assets/balloon.png.js +6 -0
  2. package/dist/admin/assets/balloon.png.js.map +1 -0
  3. package/dist/admin/assets/balloon.png.mjs +4 -0
  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/assets/purchase-page-illustration-light.svg.js +6 -0
  10. package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
  11. package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
  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/components/Widgets.js +142 -0
  18. package/dist/admin/components/Widgets.js.map +1 -0
  19. package/dist/admin/components/Widgets.mjs +140 -0
  20. package/dist/admin/components/Widgets.mjs.map +1 -0
  21. package/dist/admin/constants.js +18 -0
  22. package/dist/admin/constants.js.map +1 -0
  23. package/dist/admin/constants.mjs +12 -0
  24. package/dist/admin/constants.mjs.map +1 -0
  25. package/dist/admin/index.js +116 -3
  26. package/dist/admin/index.js.map +1 -1
  27. package/dist/admin/index.mjs +111 -3
  28. package/dist/admin/index.mjs.map +1 -1
  29. package/dist/admin/modules/hooks.js +8 -0
  30. package/dist/admin/modules/hooks.js.map +1 -0
  31. package/dist/admin/modules/hooks.mjs +6 -0
  32. package/dist/admin/modules/hooks.mjs.map +1 -0
  33. package/dist/admin/router.js +30 -0
  34. package/dist/admin/router.js.map +1 -0
  35. package/dist/admin/router.mjs +28 -0
  36. package/dist/admin/router.mjs.map +1 -0
  37. package/dist/admin/routes/content-manager/model/components/TableColumns.js +44 -0
  38. package/dist/admin/routes/content-manager/model/components/TableColumns.js.map +1 -0
  39. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs +41 -0
  40. package/dist/admin/routes/content-manager/model/components/TableColumns.mjs.map +1 -0
  41. package/dist/admin/routes/content-manager/model/constants.js +60 -0
  42. package/dist/admin/routes/content-manager/model/constants.js.map +1 -0
  43. package/dist/admin/routes/content-manager/model/constants.mjs +58 -0
  44. package/dist/admin/routes/content-manager/model/constants.mjs.map +1 -0
  45. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js +169 -0
  46. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.js.map +1 -0
  47. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs +148 -0
  48. package/dist/admin/routes/content-manager/model/id/components/AssigneeSelect.mjs.map +1 -0
  49. package/dist/admin/routes/content-manager/model/id/components/Header.js +31 -0
  50. package/dist/admin/routes/content-manager/model/id/components/Header.js.map +1 -0
  51. package/dist/admin/routes/content-manager/model/id/components/Header.mjs +29 -0
  52. package/dist/admin/routes/content-manager/model/id/components/Header.mjs.map +1 -0
  53. package/dist/admin/routes/content-manager/model/id/components/Panel.js +39 -0
  54. package/dist/admin/routes/content-manager/model/id/components/Panel.js.map +1 -0
  55. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs +37 -0
  56. package/dist/admin/routes/content-manager/model/id/components/Panel.mjs.map +1 -0
  57. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js +329 -0
  58. package/dist/admin/routes/content-manager/model/id/components/StageSelect.js.map +1 -0
  59. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs +308 -0
  60. package/dist/admin/routes/content-manager/model/id/components/StageSelect.mjs.map +1 -0
  61. package/dist/admin/routes/content-manager/model/id/components/constants.js +8 -0
  62. package/dist/admin/routes/content-manager/model/id/components/constants.js.map +1 -0
  63. package/dist/admin/routes/content-manager/model/id/components/constants.mjs +5 -0
  64. package/dist/admin/routes/content-manager/model/id/components/constants.mjs.map +1 -0
  65. package/dist/admin/routes/purchase-review-workflows.js +194 -0
  66. package/dist/admin/routes/purchase-review-workflows.js.map +1 -0
  67. package/dist/admin/routes/purchase-review-workflows.mjs +192 -0
  68. package/dist/admin/routes/purchase-review-workflows.mjs.map +1 -0
  69. package/dist/admin/routes/settings/components/AddStage.js +51 -0
  70. package/dist/admin/routes/settings/components/AddStage.js.map +1 -0
  71. package/dist/admin/routes/settings/components/AddStage.mjs +49 -0
  72. package/dist/admin/routes/settings/components/AddStage.mjs.map +1 -0
  73. package/dist/admin/routes/settings/components/Layout.js +86 -0
  74. package/dist/admin/routes/settings/components/Layout.js.map +1 -0
  75. package/dist/admin/routes/settings/components/Layout.mjs +82 -0
  76. package/dist/admin/routes/settings/components/Layout.mjs.map +1 -0
  77. package/dist/admin/routes/settings/components/StageDragPreview.js +40 -0
  78. package/dist/admin/routes/settings/components/StageDragPreview.js.map +1 -0
  79. package/dist/admin/routes/settings/components/StageDragPreview.mjs +38 -0
  80. package/dist/admin/routes/settings/components/StageDragPreview.mjs.map +1 -0
  81. package/dist/admin/routes/settings/components/Stages.js +592 -0
  82. package/dist/admin/routes/settings/components/Stages.js.map +1 -0
  83. package/dist/admin/routes/settings/components/Stages.mjs +571 -0
  84. package/dist/admin/routes/settings/components/Stages.mjs.map +1 -0
  85. package/dist/admin/routes/settings/components/WorkflowAttributes.js +206 -0
  86. package/dist/admin/routes/settings/components/WorkflowAttributes.js.map +1 -0
  87. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs +204 -0
  88. package/dist/admin/routes/settings/components/WorkflowAttributes.mjs.map +1 -0
  89. package/dist/admin/routes/settings/constants.js +8 -0
  90. package/dist/admin/routes/settings/constants.js.map +1 -0
  91. package/dist/admin/routes/settings/constants.mjs +6 -0
  92. package/dist/admin/routes/settings/constants.mjs.map +1 -0
  93. package/dist/admin/routes/settings/hooks/useDragAndDrop.js +193 -0
  94. package/dist/admin/routes/settings/hooks/useDragAndDrop.js.map +1 -0
  95. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs +170 -0
  96. package/dist/admin/routes/settings/hooks/useDragAndDrop.mjs.map +1 -0
  97. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js +94 -0
  98. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.js.map +1 -0
  99. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs +73 -0
  100. package/dist/admin/routes/settings/hooks/useKeyboardDragAndDrop.mjs.map +1 -0
  101. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js +171 -0
  102. package/dist/admin/routes/settings/hooks/useReviewWorkflows.js.map +1 -0
  103. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs +150 -0
  104. package/dist/admin/routes/settings/hooks/useReviewWorkflows.mjs.map +1 -0
  105. package/dist/admin/routes/settings/id.js +411 -0
  106. package/dist/admin/routes/settings/id.js.map +1 -0
  107. package/dist/admin/routes/settings/id.mjs +389 -0
  108. package/dist/admin/routes/settings/id.mjs.map +1 -0
  109. package/dist/admin/routes/settings/index.js +294 -0
  110. package/dist/admin/routes/settings/index.js.map +1 -0
  111. package/dist/admin/routes/settings/index.mjs +272 -0
  112. package/dist/admin/routes/settings/index.mjs.map +1 -0
  113. package/dist/admin/services/admin.js +23 -0
  114. package/dist/admin/services/admin.js.map +1 -0
  115. package/dist/admin/services/admin.mjs +21 -0
  116. package/dist/admin/services/admin.mjs.map +1 -0
  117. package/dist/admin/services/api.js +15 -0
  118. package/dist/admin/services/api.js.map +1 -0
  119. package/dist/admin/services/api.mjs +13 -0
  120. package/dist/admin/services/api.mjs.map +1 -0
  121. package/dist/admin/services/content-manager.js +116 -0
  122. package/dist/admin/services/content-manager.js.map +1 -0
  123. package/dist/admin/services/content-manager.mjs +110 -0
  124. package/dist/admin/services/content-manager.mjs.map +1 -0
  125. package/dist/admin/services/settings.js +123 -0
  126. package/dist/admin/services/settings.js.map +1 -0
  127. package/dist/admin/services/settings.mjs +118 -0
  128. package/dist/admin/services/settings.mjs.map +1 -0
  129. package/dist/admin/src/components/Widgets.d.ts +2 -0
  130. package/dist/admin/src/routes/content-manager/model/id/components/AssigneeSelect.d.ts +4 -0
  131. package/dist/admin/src/routes/content-manager/model/id/components/Header.d.ts +5 -0
  132. package/dist/admin/src/routes/content-manager/model/id/components/StageSelect.d.ts +3 -0
  133. package/dist/admin/src/services/admin.d.ts +1 -1
  134. package/dist/admin/src/services/api.d.ts +1 -1
  135. package/dist/admin/src/services/content-manager.d.ts +6 -5
  136. package/dist/admin/src/services/settings.d.ts +3 -3
  137. package/dist/admin/translations/en.json.js +22 -0
  138. package/dist/admin/translations/en.json.js.map +1 -0
  139. package/dist/admin/translations/en.json.mjs +20 -0
  140. package/dist/admin/translations/en.json.mjs.map +1 -0
  141. package/dist/admin/translations/uk.json.js +16 -0
  142. package/dist/admin/translations/uk.json.js.map +1 -0
  143. package/dist/admin/translations/uk.json.mjs +14 -0
  144. package/dist/admin/translations/uk.json.mjs.map +1 -0
  145. package/dist/admin/utils/api.js +22 -0
  146. package/dist/admin/utils/api.js.map +1 -0
  147. package/dist/admin/utils/api.mjs +19 -0
  148. package/dist/admin/utils/api.mjs.map +1 -0
  149. package/dist/admin/utils/cm-hooks.js +23 -0
  150. package/dist/admin/utils/cm-hooks.js.map +1 -0
  151. package/dist/admin/utils/cm-hooks.mjs +21 -0
  152. package/dist/admin/utils/cm-hooks.mjs.map +1 -0
  153. package/dist/admin/utils/colors.js +50 -0
  154. package/dist/admin/utils/colors.js.map +1 -0
  155. package/dist/admin/utils/colors.mjs +47 -0
  156. package/dist/admin/utils/colors.mjs.map +1 -0
  157. package/dist/admin/utils/translations.js +11 -0
  158. package/dist/admin/utils/translations.js.map +1 -0
  159. package/dist/admin/utils/translations.mjs +9 -0
  160. package/dist/admin/utils/translations.mjs.map +1 -0
  161. package/dist/admin/utils/users.js +17 -0
  162. package/dist/admin/utils/users.js.map +1 -0
  163. package/dist/admin/utils/users.mjs +15 -0
  164. package/dist/admin/utils/users.mjs.map +1 -0
  165. package/dist/server/bootstrap.js +54 -0
  166. package/dist/server/bootstrap.js.map +1 -0
  167. package/dist/server/bootstrap.mjs +52 -0
  168. package/dist/server/bootstrap.mjs.map +1 -0
  169. package/dist/server/config/actions.js +47 -0
  170. package/dist/server/config/actions.js.map +1 -0
  171. package/dist/server/config/actions.mjs +45 -0
  172. package/dist/server/config/actions.mjs.map +1 -0
  173. package/dist/server/constants/default-stages.json.js +23 -0
  174. package/dist/server/constants/default-stages.json.js.map +1 -0
  175. package/dist/server/constants/default-stages.json.mjs +21 -0
  176. package/dist/server/constants/default-stages.json.mjs.map +1 -0
  177. package/dist/server/constants/default-workflow.json.js +12 -0
  178. package/dist/server/constants/default-workflow.json.js.map +1 -0
  179. package/dist/server/constants/default-workflow.json.mjs +7 -0
  180. package/dist/server/constants/default-workflow.json.mjs.map +1 -0
  181. package/dist/server/constants/webhook-events.js +12 -0
  182. package/dist/server/constants/webhook-events.js.map +1 -0
  183. package/dist/server/constants/webhook-events.mjs +7 -0
  184. package/dist/server/constants/webhook-events.mjs.map +1 -0
  185. package/dist/server/constants/workflows.js +53 -0
  186. package/dist/server/constants/workflows.js.map +1 -0
  187. package/dist/server/constants/workflows.mjs +42 -0
  188. package/dist/server/constants/workflows.mjs.map +1 -0
  189. package/dist/server/content-types/index.js +12 -0
  190. package/dist/server/content-types/index.js.map +1 -0
  191. package/dist/server/content-types/index.mjs +10 -0
  192. package/dist/server/content-types/index.mjs.map +1 -0
  193. package/dist/server/content-types/workflow/index.js +50 -0
  194. package/dist/server/content-types/workflow/index.js.map +1 -0
  195. package/dist/server/content-types/workflow/index.mjs +48 -0
  196. package/dist/server/content-types/workflow/index.mjs.map +1 -0
  197. package/dist/server/content-types/workflow-stage/index.js +54 -0
  198. package/dist/server/content-types/workflow-stage/index.js.map +1 -0
  199. package/dist/server/content-types/workflow-stage/index.mjs +52 -0
  200. package/dist/server/content-types/workflow-stage/index.mjs.map +1 -0
  201. package/dist/server/controllers/assignees.js +57 -0
  202. package/dist/server/controllers/assignees.js.map +1 -0
  203. package/dist/server/controllers/assignees.mjs +55 -0
  204. package/dist/server/controllers/assignees.mjs.map +1 -0
  205. package/dist/server/controllers/index.js +16 -0
  206. package/dist/server/controllers/index.js.map +1 -0
  207. package/dist/server/controllers/index.mjs +14 -0
  208. package/dist/server/controllers/index.mjs.map +1 -0
  209. package/dist/server/controllers/stages.js +167 -0
  210. package/dist/server/controllers/stages.js.map +1 -0
  211. package/dist/server/controllers/stages.mjs +165 -0
  212. package/dist/server/controllers/stages.mjs.map +1 -0
  213. package/dist/server/controllers/workflows.js +136 -0
  214. package/dist/server/controllers/workflows.js.map +1 -0
  215. package/dist/server/controllers/workflows.mjs +134 -0
  216. package/dist/server/controllers/workflows.mjs.map +1 -0
  217. package/dist/server/destroy.js +6 -0
  218. package/dist/server/destroy.js.map +1 -0
  219. package/dist/server/destroy.mjs +4 -0
  220. package/dist/server/destroy.mjs.map +1 -0
  221. package/dist/server/homepage/controllers/homepage.js +15 -0
  222. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  223. package/dist/server/homepage/controllers/homepage.mjs +13 -0
  224. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  225. package/dist/server/homepage/controllers/index.js +10 -0
  226. package/dist/server/homepage/controllers/index.js.map +1 -0
  227. package/dist/server/homepage/controllers/index.mjs +8 -0
  228. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  229. package/dist/server/homepage/index.js +14 -0
  230. package/dist/server/homepage/index.js.map +1 -0
  231. package/dist/server/homepage/index.mjs +12 -0
  232. package/dist/server/homepage/index.mjs.map +1 -0
  233. package/dist/server/homepage/routes/homepage.js +25 -0
  234. package/dist/server/homepage/routes/homepage.js.map +1 -0
  235. package/dist/server/homepage/routes/homepage.mjs +23 -0
  236. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  237. package/dist/server/homepage/routes/index.js +10 -0
  238. package/dist/server/homepage/routes/index.js.map +1 -0
  239. package/dist/server/homepage/routes/index.mjs +8 -0
  240. package/dist/server/homepage/routes/index.mjs.map +1 -0
  241. package/dist/server/homepage/services/homepage.js +24 -0
  242. package/dist/server/homepage/services/homepage.js.map +1 -0
  243. package/dist/server/homepage/services/homepage.mjs +22 -0
  244. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  245. package/dist/server/homepage/services/index.js +10 -0
  246. package/dist/server/homepage/services/index.js.map +1 -0
  247. package/dist/server/homepage/services/index.mjs +8 -0
  248. package/dist/server/homepage/services/index.mjs.map +1 -0
  249. package/dist/server/index.js +25 -8321
  250. package/dist/server/index.js.map +1 -1
  251. package/dist/server/index.mjs +24 -8323
  252. package/dist/server/index.mjs.map +1 -1
  253. package/dist/server/middlewares/review-workflows.js +42 -0
  254. package/dist/server/middlewares/review-workflows.js.map +1 -0
  255. package/dist/server/middlewares/review-workflows.mjs +37 -0
  256. package/dist/server/middlewares/review-workflows.mjs.map +1 -0
  257. package/dist/server/migrations/handle-deleted-ct-in-workflows.js +40 -0
  258. package/dist/server/migrations/handle-deleted-ct-in-workflows.js.map +1 -0
  259. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs +38 -0
  260. package/dist/server/migrations/handle-deleted-ct-in-workflows.mjs.map +1 -0
  261. package/dist/server/migrations/multiple-workflows.js +41 -0
  262. package/dist/server/migrations/multiple-workflows.js.map +1 -0
  263. package/dist/server/migrations/multiple-workflows.mjs +39 -0
  264. package/dist/server/migrations/multiple-workflows.mjs.map +1 -0
  265. package/dist/server/migrations/set-stages-default-color.js +22 -0
  266. package/dist/server/migrations/set-stages-default-color.js.map +1 -0
  267. package/dist/server/migrations/set-stages-default-color.mjs +20 -0
  268. package/dist/server/migrations/set-stages-default-color.mjs.map +1 -0
  269. package/dist/server/migrations/set-stages-roles.js +56 -0
  270. package/dist/server/migrations/set-stages-roles.js.map +1 -0
  271. package/dist/server/migrations/set-stages-roles.mjs +54 -0
  272. package/dist/server/migrations/set-stages-roles.mjs.map +1 -0
  273. package/dist/server/migrations/set-workflow-default-name.js +29 -0
  274. package/dist/server/migrations/set-workflow-default-name.js.map +1 -0
  275. package/dist/server/migrations/set-workflow-default-name.mjs +27 -0
  276. package/dist/server/migrations/set-workflow-default-name.mjs.map +1 -0
  277. package/dist/server/migrations/shorten-stage-attribute.js +45 -0
  278. package/dist/server/migrations/shorten-stage-attribute.js.map +1 -0
  279. package/dist/server/migrations/shorten-stage-attribute.mjs +43 -0
  280. package/dist/server/migrations/shorten-stage-attribute.mjs.map +1 -0
  281. package/dist/server/register.js +116 -0
  282. package/dist/server/register.js.map +1 -0
  283. package/dist/server/register.mjs +114 -0
  284. package/dist/server/register.mjs.map +1 -0
  285. package/dist/server/routes/index.js +12 -0
  286. package/dist/server/routes/index.js.map +1 -0
  287. package/dist/server/routes/index.mjs +10 -0
  288. package/dist/server/routes/index.mjs.map +1 -0
  289. package/dist/server/routes/review-workflows.js +186 -0
  290. package/dist/server/routes/review-workflows.js.map +1 -0
  291. package/dist/server/routes/review-workflows.mjs +184 -0
  292. package/dist/server/routes/review-workflows.mjs.map +1 -0
  293. package/dist/server/routes/utils.js +11 -0
  294. package/dist/server/routes/utils.js.map +1 -0
  295. package/dist/server/routes/utils.mjs +9 -0
  296. package/dist/server/routes/utils.mjs.map +1 -0
  297. package/dist/server/services/assignees.js +68 -0
  298. package/dist/server/services/assignees.js.map +1 -0
  299. package/dist/server/services/assignees.mjs +66 -0
  300. package/dist/server/services/assignees.mjs.map +1 -0
  301. package/dist/server/services/document-service-middleware.js +130 -0
  302. package/dist/server/services/document-service-middleware.js.map +1 -0
  303. package/dist/server/services/document-service-middleware.mjs +128 -0
  304. package/dist/server/services/document-service-middleware.mjs.map +1 -0
  305. package/dist/server/services/index.js +26 -0
  306. package/dist/server/services/index.js.map +1 -0
  307. package/dist/server/services/index.mjs +24 -0
  308. package/dist/server/services/index.mjs.map +1 -0
  309. package/dist/server/services/metrics/index.js +67 -0
  310. package/dist/server/services/metrics/index.js.map +1 -0
  311. package/dist/server/services/metrics/index.mjs +55 -0
  312. package/dist/server/services/metrics/index.mjs.map +1 -0
  313. package/dist/server/services/metrics/weekly-metrics.js +84 -0
  314. package/dist/server/services/metrics/weekly-metrics.js.map +1 -0
  315. package/dist/server/services/metrics/weekly-metrics.mjs +82 -0
  316. package/dist/server/services/metrics/weekly-metrics.mjs.map +1 -0
  317. package/dist/server/services/stage-permissions.js +59 -0
  318. package/dist/server/services/stage-permissions.js.map +1 -0
  319. package/dist/server/services/stage-permissions.mjs +57 -0
  320. package/dist/server/services/stage-permissions.mjs.map +1 -0
  321. package/dist/server/services/stages.js +353 -0
  322. package/dist/server/services/stages.js.map +1 -0
  323. package/dist/server/services/stages.mjs +351 -0
  324. package/dist/server/services/stages.mjs.map +1 -0
  325. package/dist/server/services/validation.js +69 -0
  326. package/dist/server/services/validation.js.map +1 -0
  327. package/dist/server/services/validation.mjs +67 -0
  328. package/dist/server/services/validation.mjs.map +1 -0
  329. package/dist/server/services/workflow-content-types.js +90 -0
  330. package/dist/server/services/workflow-content-types.js.map +1 -0
  331. package/dist/server/services/workflow-content-types.mjs +88 -0
  332. package/dist/server/services/workflow-content-types.mjs.map +1 -0
  333. package/dist/server/services/workflows.js +279 -0
  334. package/dist/server/services/workflows.js.map +1 -0
  335. package/dist/server/services/workflows.mjs +277 -0
  336. package/dist/server/services/workflows.mjs.map +1 -0
  337. package/dist/server/src/controllers/index.d.ts.map +1 -1
  338. package/dist/server/src/homepage/controllers/homepage.d.ts +6 -0
  339. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  340. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  341. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  342. package/dist/server/src/homepage/index.d.ts +15 -0
  343. package/dist/server/src/homepage/index.d.ts.map +1 -0
  344. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  345. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  346. package/dist/server/src/homepage/routes/index.d.ts +4 -0
  347. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  348. package/dist/server/src/homepage/services/homepage.d.ts +9 -0
  349. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  350. package/dist/server/src/homepage/services/index.d.ts +8 -0
  351. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  352. package/dist/server/src/index.d.ts +6 -0
  353. package/dist/server/src/index.d.ts.map +1 -1
  354. package/dist/server/src/routes/index.d.ts +1 -0
  355. package/dist/server/src/routes/index.d.ts.map +1 -1
  356. package/dist/server/src/services/document-service-middleware.d.ts +1 -1
  357. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  358. package/dist/server/src/services/index.d.ts +5 -0
  359. package/dist/server/src/services/index.d.ts.map +1 -1
  360. package/dist/server/utils/index.js +16 -0
  361. package/dist/server/utils/index.js.map +1 -0
  362. package/dist/server/utils/index.mjs +13 -0
  363. package/dist/server/utils/index.mjs.map +1 -0
  364. package/dist/server/utils/review-workflows.js +36 -0
  365. package/dist/server/utils/review-workflows.js.map +1 -0
  366. package/dist/server/utils/review-workflows.mjs +30 -0
  367. package/dist/server/utils/review-workflows.mjs.map +1 -0
  368. package/dist/server/validation/review-workflows.js +71 -0
  369. package/dist/server/validation/review-workflows.js.map +1 -0
  370. package/dist/server/validation/review-workflows.mjs +65 -0
  371. package/dist/server/validation/review-workflows.mjs.map +1 -0
  372. package/dist/shared/contracts/homepage.d.ts +26 -0
  373. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  374. package/dist/shared/contracts/review-workflows.d.ts +0 -1
  375. package/package.json +16 -15
  376. package/dist/_chunks/Layout-DU1Rt4Mu.mjs +0 -233
  377. package/dist/_chunks/Layout-DU1Rt4Mu.mjs.map +0 -1
  378. package/dist/_chunks/Layout-ywt0cSLq.js +0 -251
  379. package/dist/_chunks/Layout-ywt0cSLq.js.map +0 -1
  380. package/dist/_chunks/en-CYgjfSep.js +0 -15
  381. package/dist/_chunks/en-CYgjfSep.js.map +0 -1
  382. package/dist/_chunks/en-D9dxziEb.mjs +0 -15
  383. package/dist/_chunks/en-D9dxziEb.mjs.map +0 -1
  384. package/dist/_chunks/id-MDQVDdXD.mjs +0 -1277
  385. package/dist/_chunks/id-MDQVDdXD.mjs.map +0 -1
  386. package/dist/_chunks/id-StiN3nkI.js +0 -1297
  387. package/dist/_chunks/id-StiN3nkI.js.map +0 -1
  388. package/dist/_chunks/index-BRmc4tbQ.mjs +0 -809
  389. package/dist/_chunks/index-BRmc4tbQ.mjs.map +0 -1
  390. package/dist/_chunks/index-BSsDJNiQ.js +0 -827
  391. package/dist/_chunks/index-BSsDJNiQ.js.map +0 -1
  392. package/dist/_chunks/index-CsOMMJ--.mjs +0 -214
  393. package/dist/_chunks/index-CsOMMJ--.mjs.map +0 -1
  394. package/dist/_chunks/index-dc2WfugK.js +0 -233
  395. package/dist/_chunks/index-dc2WfugK.js.map +0 -1
  396. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs +0 -52
  397. package/dist/_chunks/purchase-review-workflows-BN-5Ube7.mjs.map +0 -1
  398. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js +0 -52
  399. package/dist/_chunks/purchase-review-workflows-DlCDg0fD.js.map +0 -1
  400. package/dist/_chunks/router-C5QvEzrI.js +0 -24
  401. package/dist/_chunks/router-C5QvEzrI.js.map +0 -1
  402. package/dist/_chunks/router-CZH4yq9s.mjs +0 -24
  403. package/dist/_chunks/router-CZH4yq9s.mjs.map +0 -1
  404. package/dist/admin/src/routes/content-manager/[model]/[id]/components/AssigneeSelect.d.ts +0 -2
  405. package/dist/admin/src/routes/content-manager/[model]/[id]/components/StageSelect.d.ts +0 -1
  406. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/AssigneeFilter.d.ts +0 -0
  407. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/StageFilter.d.ts +0 -0
  408. /package/dist/admin/src/routes/content-manager/{[model] → model}/components/TableColumns.d.ts +0 -0
  409. /package/dist/admin/src/routes/content-manager/{[model] → model}/configure/constants.d.ts +0 -0
  410. /package/dist/admin/src/routes/content-manager/{[model] → model}/constants.d.ts +0 -0
  411. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/Panel.d.ts +0 -0
  412. /package/dist/admin/src/routes/content-manager/{[model]/[id] → model/id}/components/constants.d.ts +0 -0
@@ -0,0 +1,48 @@
1
+ var workflow = {
2
+ schema: {
3
+ collectionName: 'strapi_workflows',
4
+ info: {
5
+ name: 'Workflow',
6
+ description: '',
7
+ singularName: 'workflow',
8
+ pluralName: 'workflows',
9
+ displayName: 'Workflow'
10
+ },
11
+ options: {},
12
+ pluginOptions: {
13
+ 'content-manager': {
14
+ visible: false
15
+ },
16
+ 'content-type-builder': {
17
+ visible: false
18
+ }
19
+ },
20
+ attributes: {
21
+ name: {
22
+ type: 'string',
23
+ required: true,
24
+ unique: true
25
+ },
26
+ stages: {
27
+ type: 'relation',
28
+ target: 'plugin::review-workflows.workflow-stage',
29
+ relation: 'oneToMany',
30
+ mappedBy: 'workflow'
31
+ },
32
+ stageRequiredToPublish: {
33
+ type: 'relation',
34
+ target: 'plugin::review-workflows.workflow-stage',
35
+ relation: 'oneToOne',
36
+ required: false
37
+ },
38
+ contentTypes: {
39
+ type: 'json',
40
+ required: true,
41
+ default: '[]'
42
+ }
43
+ }
44
+ }
45
+ };
46
+
47
+ export { workflow as default };
48
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../server/src/content-types/workflow/index.ts"],"sourcesContent":["export default {\n schema: {\n collectionName: 'strapi_workflows',\n info: {\n name: 'Workflow',\n description: '',\n singularName: 'workflow',\n pluralName: 'workflows',\n displayName: 'Workflow',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n required: true,\n unique: true,\n },\n stages: {\n type: 'relation',\n target: 'plugin::review-workflows.workflow-stage',\n relation: 'oneToMany',\n mappedBy: 'workflow',\n },\n stageRequiredToPublish: {\n type: 'relation',\n target: 'plugin::review-workflows.workflow-stage',\n relation: 'oneToOne',\n required: false,\n },\n contentTypes: {\n type: 'json',\n required: true,\n default: '[]',\n },\n },\n },\n};\n"],"names":["schema","collectionName","info","name","description","singularName","pluralName","displayName","options","pluginOptions","visible","attributes","type","required","unique","stages","target","relation","mappedBy","stageRequiredToPublish","contentTypes","default"],"mappings":"AAAA,eAAe;IACbA,MAAQ,EAAA;QACNC,cAAgB,EAAA,kBAAA;QAChBC,IAAM,EAAA;YACJC,IAAM,EAAA,UAAA;YACNC,WAAa,EAAA,EAAA;YACbC,YAAc,EAAA,UAAA;YACdC,UAAY,EAAA,WAAA;YACZC,WAAa,EAAA;AACf,SAAA;AACAC,QAAAA,OAAAA,EAAS,EAAC;QACVC,aAAe,EAAA;YACb,iBAAmB,EAAA;gBACjBC,OAAS,EAAA;AACX,aAAA;YACA,sBAAwB,EAAA;gBACtBA,OAAS,EAAA;AACX;AACF,SAAA;QACAC,UAAY,EAAA;YACVR,IAAM,EAAA;gBACJS,IAAM,EAAA,QAAA;gBACNC,QAAU,EAAA,IAAA;gBACVC,MAAQ,EAAA;AACV,aAAA;YACAC,MAAQ,EAAA;gBACNH,IAAM,EAAA,UAAA;gBACNI,MAAQ,EAAA,yCAAA;gBACRC,QAAU,EAAA,WAAA;gBACVC,QAAU,EAAA;AACZ,aAAA;YACAC,sBAAwB,EAAA;gBACtBP,IAAM,EAAA,UAAA;gBACNI,MAAQ,EAAA,yCAAA;gBACRC,QAAU,EAAA,UAAA;gBACVJ,QAAU,EAAA;AACZ,aAAA;YACAO,YAAc,EAAA;gBACZR,IAAM,EAAA,MAAA;gBACNC,QAAU,EAAA,IAAA;gBACVQ,OAAS,EAAA;AACX;AACF;AACF;AACF,CAAE;;;;"}
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var workflows = require('../../constants/workflows.js');
4
+
5
+ var workflowStage = {
6
+ schema: {
7
+ collectionName: 'strapi_workflows_stages',
8
+ info: {
9
+ name: 'Workflow Stage',
10
+ description: '',
11
+ singularName: 'workflow-stage',
12
+ pluralName: 'workflow-stages',
13
+ displayName: 'Stages'
14
+ },
15
+ options: {
16
+ version: '1.1.0'
17
+ },
18
+ pluginOptions: {
19
+ 'content-manager': {
20
+ visible: false
21
+ },
22
+ 'content-type-builder': {
23
+ visible: false
24
+ }
25
+ },
26
+ attributes: {
27
+ name: {
28
+ type: 'string',
29
+ configurable: false
30
+ },
31
+ color: {
32
+ type: 'string',
33
+ configurable: false,
34
+ default: workflows.STAGE_DEFAULT_COLOR
35
+ },
36
+ workflow: {
37
+ type: 'relation',
38
+ target: 'plugin::review-workflows.workflow',
39
+ relation: 'manyToOne',
40
+ inversedBy: 'stages',
41
+ configurable: false
42
+ },
43
+ permissions: {
44
+ type: 'relation',
45
+ target: 'admin::permission',
46
+ relation: 'manyToMany',
47
+ configurable: false
48
+ }
49
+ }
50
+ }
51
+ };
52
+
53
+ module.exports = workflowStage;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../server/src/content-types/workflow-stage/index.ts"],"sourcesContent":["import { STAGE_DEFAULT_COLOR } from '../../constants/workflows';\n\nexport default {\n schema: {\n collectionName: 'strapi_workflows_stages',\n info: {\n name: 'Workflow Stage',\n description: '',\n singularName: 'workflow-stage',\n pluralName: 'workflow-stages',\n displayName: 'Stages',\n },\n options: {\n version: '1.1.0',\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n },\n color: {\n type: 'string',\n configurable: false,\n default: STAGE_DEFAULT_COLOR,\n },\n workflow: {\n type: 'relation',\n target: 'plugin::review-workflows.workflow',\n relation: 'manyToOne',\n inversedBy: 'stages',\n configurable: false,\n },\n permissions: {\n type: 'relation',\n target: 'admin::permission',\n relation: 'manyToMany',\n configurable: false,\n },\n },\n },\n};\n"],"names":["schema","collectionName","info","name","description","singularName","pluralName","displayName","options","version","pluginOptions","visible","attributes","type","configurable","color","default","STAGE_DEFAULT_COLOR","workflow","target","relation","inversedBy","permissions"],"mappings":";;;;AAEA,oBAAe;IACbA,MAAQ,EAAA;QACNC,cAAgB,EAAA,yBAAA;QAChBC,IAAM,EAAA;YACJC,IAAM,EAAA,gBAAA;YACNC,WAAa,EAAA,EAAA;YACbC,YAAc,EAAA,gBAAA;YACdC,UAAY,EAAA,iBAAA;YACZC,WAAa,EAAA;AACf,SAAA;QACAC,OAAS,EAAA;YACPC,OAAS,EAAA;AACX,SAAA;QACAC,aAAe,EAAA;YACb,iBAAmB,EAAA;gBACjBC,OAAS,EAAA;AACX,aAAA;YACA,sBAAwB,EAAA;gBACtBA,OAAS,EAAA;AACX;AACF,SAAA;QACAC,UAAY,EAAA;YACVT,IAAM,EAAA;gBACJU,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAC,KAAO,EAAA;gBACLF,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA,KAAA;gBACdE,OAASC,EAAAA;AACX,aAAA;YACAC,QAAU,EAAA;gBACRL,IAAM,EAAA,UAAA;gBACNM,MAAQ,EAAA,mCAAA;gBACRC,QAAU,EAAA,WAAA;gBACVC,UAAY,EAAA,QAAA;gBACZP,YAAc,EAAA;AAChB,aAAA;YACAQ,WAAa,EAAA;gBACXT,IAAM,EAAA,UAAA;gBACNM,MAAQ,EAAA,mBAAA;gBACRC,QAAU,EAAA,YAAA;gBACVN,YAAc,EAAA;AAChB;AACF;AACF;AACF,CAAE;;;;"}
@@ -0,0 +1,52 @@
1
+ import { STAGE_DEFAULT_COLOR } from '../../constants/workflows.mjs';
2
+
3
+ var workflowStage = {
4
+ schema: {
5
+ collectionName: 'strapi_workflows_stages',
6
+ info: {
7
+ name: 'Workflow Stage',
8
+ description: '',
9
+ singularName: 'workflow-stage',
10
+ pluralName: 'workflow-stages',
11
+ displayName: 'Stages'
12
+ },
13
+ options: {
14
+ version: '1.1.0'
15
+ },
16
+ pluginOptions: {
17
+ 'content-manager': {
18
+ visible: false
19
+ },
20
+ 'content-type-builder': {
21
+ visible: false
22
+ }
23
+ },
24
+ attributes: {
25
+ name: {
26
+ type: 'string',
27
+ configurable: false
28
+ },
29
+ color: {
30
+ type: 'string',
31
+ configurable: false,
32
+ default: STAGE_DEFAULT_COLOR
33
+ },
34
+ workflow: {
35
+ type: 'relation',
36
+ target: 'plugin::review-workflows.workflow',
37
+ relation: 'manyToOne',
38
+ inversedBy: 'stages',
39
+ configurable: false
40
+ },
41
+ permissions: {
42
+ type: 'relation',
43
+ target: 'admin::permission',
44
+ relation: 'manyToMany',
45
+ configurable: false
46
+ }
47
+ }
48
+ }
49
+ };
50
+
51
+ export { workflowStage as default };
52
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../server/src/content-types/workflow-stage/index.ts"],"sourcesContent":["import { STAGE_DEFAULT_COLOR } from '../../constants/workflows';\n\nexport default {\n schema: {\n collectionName: 'strapi_workflows_stages',\n info: {\n name: 'Workflow Stage',\n description: '',\n singularName: 'workflow-stage',\n pluralName: 'workflow-stages',\n displayName: 'Stages',\n },\n options: {\n version: '1.1.0',\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n },\n color: {\n type: 'string',\n configurable: false,\n default: STAGE_DEFAULT_COLOR,\n },\n workflow: {\n type: 'relation',\n target: 'plugin::review-workflows.workflow',\n relation: 'manyToOne',\n inversedBy: 'stages',\n configurable: false,\n },\n permissions: {\n type: 'relation',\n target: 'admin::permission',\n relation: 'manyToMany',\n configurable: false,\n },\n },\n },\n};\n"],"names":["schema","collectionName","info","name","description","singularName","pluralName","displayName","options","version","pluginOptions","visible","attributes","type","configurable","color","default","STAGE_DEFAULT_COLOR","workflow","target","relation","inversedBy","permissions"],"mappings":";;AAEA,oBAAe;IACbA,MAAQ,EAAA;QACNC,cAAgB,EAAA,yBAAA;QAChBC,IAAM,EAAA;YACJC,IAAM,EAAA,gBAAA;YACNC,WAAa,EAAA,EAAA;YACbC,YAAc,EAAA,gBAAA;YACdC,UAAY,EAAA,iBAAA;YACZC,WAAa,EAAA;AACf,SAAA;QACAC,OAAS,EAAA;YACPC,OAAS,EAAA;AACX,SAAA;QACAC,aAAe,EAAA;YACb,iBAAmB,EAAA;gBACjBC,OAAS,EAAA;AACX,aAAA;YACA,sBAAwB,EAAA;gBACtBA,OAAS,EAAA;AACX;AACF,SAAA;QACAC,UAAY,EAAA;YACVT,IAAM,EAAA;gBACJU,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAC,KAAO,EAAA;gBACLF,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA,KAAA;gBACdE,OAASC,EAAAA;AACX,aAAA;YACAC,QAAU,EAAA;gBACRL,IAAM,EAAA,UAAA;gBACNM,MAAQ,EAAA,mCAAA;gBACRC,QAAU,EAAA,WAAA;gBACVC,UAAY,EAAA,QAAA;gBACZP,YAAc,EAAA;AAChB,aAAA;YACAQ,WAAa,EAAA;gBACXT,IAAM,EAAA,UAAA;gBACNM,MAAQ,EAAA,mBAAA;gBACRC,QAAU,EAAA,YAAA;gBACVN,YAAc,EAAA;AAChB;AACF;AACF;AACF,CAAE;;;;"}
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ var index = require('../utils/index.js');
4
+ var reviewWorkflows = require('../validation/review-workflows.js');
5
+ var workflows = require('../constants/workflows.js');
6
+
7
+ var assignees = {
8
+ /**
9
+ * Updates an entity's assignee.
10
+ * @async
11
+ * @param {Object} ctx - The Koa context object.
12
+ * @param {Object} ctx.params - An object containing the parameters from the request URL.
13
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
14
+ * @param {string} ctx.params.id - The ID of the entity to update.
15
+ * @param {Object} ctx.request.body.data - Optional data object containing the new assignee ID for the entity.
16
+ * @param {string} ctx.request.body.data.id - The ID of the new assignee for the entity.
17
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
18
+ * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
19
+ * @returns {Promise<void>} A promise that resolves when the entity's assignee has been updated.
20
+ */ async updateEntity (ctx) {
21
+ const assigneeService = index.getService('assignees');
22
+ const workflowService = index.getService('workflows');
23
+ const stagePermissions = index.getService('stage-permissions');
24
+ const { model_uid: model, id: documentId } = ctx.params;
25
+ const locale = await reviewWorkflows.validateLocale(ctx.request.query?.locale) ?? undefined;
26
+ const { sanitizeOutput } = strapi.plugin('content-manager').service('permission-checker').create({
27
+ userAbility: ctx.state.userAbility,
28
+ model
29
+ });
30
+ // Retrieve the entity so we can get its current stage
31
+ const entity = await strapi.documents(model).findOne({
32
+ documentId,
33
+ locale,
34
+ populate: [
35
+ workflows.ENTITY_STAGE_ATTRIBUTE
36
+ ]
37
+ });
38
+ if (!entity) {
39
+ ctx.throw(404, 'Entity not found');
40
+ }
41
+ // Only allow users who can update the current stage to change the assignee
42
+ const canTransitionStage = stagePermissions.can(workflows.STAGE_TRANSITION_UID, entity[workflows.ENTITY_STAGE_ATTRIBUTE]?.id);
43
+ if (!canTransitionStage) {
44
+ ctx.throw(403, 'Stage transition permission is required');
45
+ }
46
+ // TODO: check if user has update permission on the entity
47
+ const { id: assigneeId } = await reviewWorkflows.validateUpdateAssigneeOnEntity(ctx.request?.body?.data, 'You should pass a valid id to the body of the put request.');
48
+ await workflowService.assertContentTypeBelongsToWorkflow(model);
49
+ const updatedEntity = await assigneeService.updateEntityAssignee(entity, model, assigneeId);
50
+ ctx.body = {
51
+ data: await sanitizeOutput(updatedEntity)
52
+ };
53
+ }
54
+ };
55
+
56
+ module.exports = assignees;
57
+ //# sourceMappingURL=assignees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignees.js","sources":["../../../server/src/controllers/assignees.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { validateUpdateAssigneeOnEntity, validateLocale } from '../validation/review-workflows';\nimport { ENTITY_STAGE_ATTRIBUTE, STAGE_TRANSITION_UID } from '../constants/workflows';\n\nexport default {\n /**\n * Updates an entity's assignee.\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 assignee ID for the entity.\n * @param {string} ctx.request.body.data.id - The ID of the new assignee 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 assignee has been updated.\n */\n async updateEntity(ctx: Context) {\n const assigneeService = getService('assignees');\n const workflowService = getService('workflows');\n const stagePermissions = getService('stage-permissions');\n\n const { model_uid: model, id: documentId } = ctx.params;\n const locale = (await validateLocale(ctx.request.query?.locale)) ?? undefined;\n\n const { sanitizeOutput } = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model });\n\n // Retrieve the entity so we can get its current stage\n const entity = await strapi.documents(model).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 // Only allow users who can update the current stage to change the assignee\n const canTransitionStage = stagePermissions.can(\n STAGE_TRANSITION_UID,\n entity[ENTITY_STAGE_ATTRIBUTE]?.id\n );\n\n if (!canTransitionStage) {\n ctx.throw(403, 'Stage transition permission is required');\n }\n\n // TODO: check if user has update permission on the entity\n const { id: assigneeId } = await validateUpdateAssigneeOnEntity(\n ctx.request?.body?.data,\n 'You should pass a valid id to the body of the put request.'\n );\n\n await workflowService.assertContentTypeBelongsToWorkflow(model);\n\n const updatedEntity = await assigneeService.updateEntityAssignee(entity, model, assigneeId);\n\n ctx.body = { data: await sanitizeOutput(updatedEntity) };\n },\n};\n"],"names":["updateEntity","ctx","assigneeService","getService","workflowService","stagePermissions","model_uid","model","id","documentId","params","locale","validateLocale","request","query","undefined","sanitizeOutput","strapi","plugin","service","create","userAbility","state","entity","documents","findOne","populate","ENTITY_STAGE_ATTRIBUTE","throw","canTransitionStage","can","STAGE_TRANSITION_UID","assigneeId","validateUpdateAssigneeOnEntity","body","data","assertContentTypeBelongsToWorkflow","updatedEntity","updateEntityAssignee"],"mappings":";;;;;;AAMA,gBAAe;AACb;;;;;;;;;;;;MAaA,MAAMA,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAMC,kBAAkBC,gBAAW,CAAA,WAAA,CAAA;AACnC,QAAA,MAAMC,kBAAkBD,gBAAW,CAAA,WAAA,CAAA;AACnC,QAAA,MAAME,mBAAmBF,gBAAW,CAAA,mBAAA,CAAA;QAEpC,MAAM,EAAEG,WAAWC,KAAK,EAAEC,IAAIC,UAAU,EAAE,GAAGR,GAAAA,CAAIS,MAAM;QACvD,MAAMC,MAAAA,GAAS,MAAOC,8BAAAA,CAAeX,IAAIY,OAAO,CAACC,KAAK,EAAEH,MAAYI,CAAAA,IAAAA,SAAAA;AAEpE,QAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MACxBC,CAAAA,MAAM,CAAC,iBAAA,CAAA,CACPC,OAAO,CAAC,oBACRC,CAAAA,CAAAA,MAAM,CAAC;YAAEC,WAAapB,EAAAA,GAAAA,CAAIqB,KAAK,CAACD,WAAW;AAAEd,YAAAA;AAAM,SAAA,CAAA;;AAGtD,QAAA,MAAMgB,SAAS,MAAMN,MAAAA,CAAOO,SAAS,CAACjB,KAAAA,CAAAA,CAAOkB,OAAO,CAAC;AACnDhB,YAAAA,UAAAA;AACAE,YAAAA,MAAAA;YACAe,QAAU,EAAA;AAACC,gBAAAA;AAAuB;AACpC,SAAA,CAAA;AAEA,QAAA,IAAI,CAACJ,MAAQ,EAAA;YACXtB,GAAI2B,CAAAA,KAAK,CAAC,GAAK,EAAA,kBAAA,CAAA;AACjB;;QAGA,MAAMC,kBAAAA,GAAqBxB,iBAAiByB,GAAG,CAC7CC,gCACAR,MAAM,CAACI,iCAAuB,EAAEnB,EAAAA,CAAAA;AAGlC,QAAA,IAAI,CAACqB,kBAAoB,EAAA;YACvB5B,GAAI2B,CAAAA,KAAK,CAAC,GAAK,EAAA,yCAAA,CAAA;AACjB;;QAGA,MAAM,EAAEpB,EAAIwB,EAAAA,UAAU,EAAE,GAAG,MAAMC,8CAAAA,CAC/BhC,GAAIY,CAAAA,OAAO,EAAEqB,IAAAA,EAAMC,IACnB,EAAA,4DAAA,CAAA;QAGF,MAAM/B,eAAAA,CAAgBgC,kCAAkC,CAAC7B,KAAAA,CAAAA;AAEzD,QAAA,MAAM8B,gBAAgB,MAAMnC,eAAAA,CAAgBoC,oBAAoB,CAACf,QAAQhB,KAAOyB,EAAAA,UAAAA,CAAAA;AAEhF/B,QAAAA,GAAAA,CAAIiC,IAAI,GAAG;AAAEC,YAAAA,IAAAA,EAAM,MAAMnB,cAAeqB,CAAAA,aAAAA;AAAe,SAAA;AACzD;AACF,CAAE;;;;"}
@@ -0,0 +1,55 @@
1
+ import { getService } from '../utils/index.mjs';
2
+ import { validateLocale, validateUpdateAssigneeOnEntity } from '../validation/review-workflows.mjs';
3
+ import { ENTITY_STAGE_ATTRIBUTE, STAGE_TRANSITION_UID } from '../constants/workflows.mjs';
4
+
5
+ var assignees = {
6
+ /**
7
+ * Updates an entity's assignee.
8
+ * @async
9
+ * @param {Object} ctx - The Koa context object.
10
+ * @param {Object} ctx.params - An object containing the parameters from the request URL.
11
+ * @param {string} ctx.params.model_uid - The model UID of the entity.
12
+ * @param {string} ctx.params.id - The ID of the entity to update.
13
+ * @param {Object} ctx.request.body.data - Optional data object containing the new assignee ID for the entity.
14
+ * @param {string} ctx.request.body.data.id - The ID of the new assignee for the entity.
15
+ * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
16
+ * @throws {ValidationError} If the `data` object in the request body fails to pass validation.
17
+ * @returns {Promise<void>} A promise that resolves when the entity's assignee has been updated.
18
+ */ async updateEntity (ctx) {
19
+ const assigneeService = getService('assignees');
20
+ const workflowService = getService('workflows');
21
+ const stagePermissions = getService('stage-permissions');
22
+ const { model_uid: model, id: documentId } = ctx.params;
23
+ const locale = await validateLocale(ctx.request.query?.locale) ?? undefined;
24
+ const { sanitizeOutput } = strapi.plugin('content-manager').service('permission-checker').create({
25
+ userAbility: ctx.state.userAbility,
26
+ model
27
+ });
28
+ // Retrieve the entity so we can get its current stage
29
+ const entity = await strapi.documents(model).findOne({
30
+ documentId,
31
+ locale,
32
+ populate: [
33
+ ENTITY_STAGE_ATTRIBUTE
34
+ ]
35
+ });
36
+ if (!entity) {
37
+ ctx.throw(404, 'Entity not found');
38
+ }
39
+ // Only allow users who can update the current stage to change the assignee
40
+ const canTransitionStage = stagePermissions.can(STAGE_TRANSITION_UID, entity[ENTITY_STAGE_ATTRIBUTE]?.id);
41
+ if (!canTransitionStage) {
42
+ ctx.throw(403, 'Stage transition permission is required');
43
+ }
44
+ // TODO: check if user has update permission on the entity
45
+ const { id: assigneeId } = await validateUpdateAssigneeOnEntity(ctx.request?.body?.data, 'You should pass a valid id to the body of the put request.');
46
+ await workflowService.assertContentTypeBelongsToWorkflow(model);
47
+ const updatedEntity = await assigneeService.updateEntityAssignee(entity, model, assigneeId);
48
+ ctx.body = {
49
+ data: await sanitizeOutput(updatedEntity)
50
+ };
51
+ }
52
+ };
53
+
54
+ export { assignees as default };
55
+ //# sourceMappingURL=assignees.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignees.mjs","sources":["../../../server/src/controllers/assignees.ts"],"sourcesContent":["import type { Context } from 'koa';\n\nimport { getService } from '../utils';\nimport { validateUpdateAssigneeOnEntity, validateLocale } from '../validation/review-workflows';\nimport { ENTITY_STAGE_ATTRIBUTE, STAGE_TRANSITION_UID } from '../constants/workflows';\n\nexport default {\n /**\n * Updates an entity's assignee.\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 assignee ID for the entity.\n * @param {string} ctx.request.body.data.id - The ID of the new assignee 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 assignee has been updated.\n */\n async updateEntity(ctx: Context) {\n const assigneeService = getService('assignees');\n const workflowService = getService('workflows');\n const stagePermissions = getService('stage-permissions');\n\n const { model_uid: model, id: documentId } = ctx.params;\n const locale = (await validateLocale(ctx.request.query?.locale)) ?? undefined;\n\n const { sanitizeOutput } = strapi\n .plugin('content-manager')\n .service('permission-checker')\n .create({ userAbility: ctx.state.userAbility, model });\n\n // Retrieve the entity so we can get its current stage\n const entity = await strapi.documents(model).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 // Only allow users who can update the current stage to change the assignee\n const canTransitionStage = stagePermissions.can(\n STAGE_TRANSITION_UID,\n entity[ENTITY_STAGE_ATTRIBUTE]?.id\n );\n\n if (!canTransitionStage) {\n ctx.throw(403, 'Stage transition permission is required');\n }\n\n // TODO: check if user has update permission on the entity\n const { id: assigneeId } = await validateUpdateAssigneeOnEntity(\n ctx.request?.body?.data,\n 'You should pass a valid id to the body of the put request.'\n );\n\n await workflowService.assertContentTypeBelongsToWorkflow(model);\n\n const updatedEntity = await assigneeService.updateEntityAssignee(entity, model, assigneeId);\n\n ctx.body = { data: await sanitizeOutput(updatedEntity) };\n },\n};\n"],"names":["updateEntity","ctx","assigneeService","getService","workflowService","stagePermissions","model_uid","model","id","documentId","params","locale","validateLocale","request","query","undefined","sanitizeOutput","strapi","plugin","service","create","userAbility","state","entity","documents","findOne","populate","ENTITY_STAGE_ATTRIBUTE","throw","canTransitionStage","can","STAGE_TRANSITION_UID","assigneeId","validateUpdateAssigneeOnEntity","body","data","assertContentTypeBelongsToWorkflow","updatedEntity","updateEntityAssignee"],"mappings":";;;;AAMA,gBAAe;AACb;;;;;;;;;;;;MAaA,MAAMA,cAAaC,GAAY,EAAA;AAC7B,QAAA,MAAMC,kBAAkBC,UAAW,CAAA,WAAA,CAAA;AACnC,QAAA,MAAMC,kBAAkBD,UAAW,CAAA,WAAA,CAAA;AACnC,QAAA,MAAME,mBAAmBF,UAAW,CAAA,mBAAA,CAAA;QAEpC,MAAM,EAAEG,WAAWC,KAAK,EAAEC,IAAIC,UAAU,EAAE,GAAGR,GAAAA,CAAIS,MAAM;QACvD,MAAMC,MAAAA,GAAS,MAAOC,cAAAA,CAAeX,IAAIY,OAAO,CAACC,KAAK,EAAEH,MAAYI,CAAAA,IAAAA,SAAAA;AAEpE,QAAA,MAAM,EAAEC,cAAc,EAAE,GAAGC,MACxBC,CAAAA,MAAM,CAAC,iBAAA,CAAA,CACPC,OAAO,CAAC,oBACRC,CAAAA,CAAAA,MAAM,CAAC;YAAEC,WAAapB,EAAAA,GAAAA,CAAIqB,KAAK,CAACD,WAAW;AAAEd,YAAAA;AAAM,SAAA,CAAA;;AAGtD,QAAA,MAAMgB,SAAS,MAAMN,MAAAA,CAAOO,SAAS,CAACjB,KAAAA,CAAAA,CAAOkB,OAAO,CAAC;AACnDhB,YAAAA,UAAAA;AACAE,YAAAA,MAAAA;YACAe,QAAU,EAAA;AAACC,gBAAAA;AAAuB;AACpC,SAAA,CAAA;AAEA,QAAA,IAAI,CAACJ,MAAQ,EAAA;YACXtB,GAAI2B,CAAAA,KAAK,CAAC,GAAK,EAAA,kBAAA,CAAA;AACjB;;QAGA,MAAMC,kBAAAA,GAAqBxB,iBAAiByB,GAAG,CAC7CC,sBACAR,MAAM,CAACI,uBAAuB,EAAEnB,EAAAA,CAAAA;AAGlC,QAAA,IAAI,CAACqB,kBAAoB,EAAA;YACvB5B,GAAI2B,CAAAA,KAAK,CAAC,GAAK,EAAA,yCAAA,CAAA;AACjB;;QAGA,MAAM,EAAEpB,EAAIwB,EAAAA,UAAU,EAAE,GAAG,MAAMC,8BAAAA,CAC/BhC,GAAIY,CAAAA,OAAO,EAAEqB,IAAAA,EAAMC,IACnB,EAAA,4DAAA,CAAA;QAGF,MAAM/B,eAAAA,CAAgBgC,kCAAkC,CAAC7B,KAAAA,CAAAA;AAEzD,QAAA,MAAM8B,gBAAgB,MAAMnC,eAAAA,CAAgBoC,oBAAoB,CAACf,QAAQhB,KAAOyB,EAAAA,UAAAA,CAAAA;AAEhF/B,QAAAA,GAAAA,CAAIiC,IAAI,GAAG;AAAEC,YAAAA,IAAAA,EAAM,MAAMnB,cAAeqB,CAAAA,aAAAA;AAAe,SAAA;AACzD;AACF,CAAE;;;;"}
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var workflows = require('./workflows.js');
4
+ var stages = require('./stages.js');
5
+ var assignees = require('./assignees.js');
6
+ var index = require('../homepage/index.js');
7
+
8
+ var controllers = {
9
+ workflows,
10
+ stages,
11
+ assignees,
12
+ ...index.controllers
13
+ };
14
+
15
+ module.exports = controllers;
16
+ //# 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';\nimport homepage from '../homepage';\n\nexport default {\n workflows,\n stages,\n assignees,\n ...homepage.controllers,\n};\n"],"names":["workflows","stages","assignees","homepage","controllers"],"mappings":";;;;;;;AAOA,kBAAe;AACbA,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,SAAAA;AACA,IAAA,GAAGC,MAASC;AACd,CAAE;;;;"}
@@ -0,0 +1,14 @@
1
+ import workflows from './workflows.mjs';
2
+ import stages from './stages.mjs';
3
+ import assignees from './assignees.mjs';
4
+ import homepage from '../homepage/index.mjs';
5
+
6
+ var controllers = {
7
+ workflows,
8
+ stages,
9
+ assignees,
10
+ ...homepage.controllers
11
+ };
12
+
13
+ export { controllers as default };
14
+ //# 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';\nimport homepage from '../homepage';\n\nexport default {\n workflows,\n stages,\n assignees,\n ...homepage.controllers,\n};\n"],"names":["workflows","stages","assignees","homepage","controllers"],"mappings":";;;;;AAOA,kBAAe;AACbA,IAAAA,SAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,SAAAA;AACA,IAAA,GAAGC,SAASC;AACd,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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"}