@strapi/review-workflows 0.0.0-experimental.93a73ca8c7b85667fe8e46c0cb6627506570a02f → 0.0.0-experimental.953e1857bbad81a3c34f5d6511736c1bc8b91dcb

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 (45) hide show
  1. package/dist/_chunks/{Layout-AREWDuuq.js → Layout-8i0EXRRs.js} +2 -2
  2. package/dist/_chunks/{Layout-AREWDuuq.js.map → Layout-8i0EXRRs.js.map} +1 -1
  3. package/dist/_chunks/{Layout-D5aa9iUm.mjs → Layout-C9m07iTY.mjs} +2 -2
  4. package/dist/_chunks/{Layout-D5aa9iUm.mjs.map → Layout-C9m07iTY.mjs.map} +1 -1
  5. package/dist/_chunks/{_id-C7pCAzXV.js → id-CmtaTf1x.js} +6 -7
  6. package/dist/_chunks/id-CmtaTf1x.js.map +1 -0
  7. package/dist/_chunks/{_id-DDNHKV_W.mjs → id-DV0Ndeav.mjs} +6 -7
  8. package/dist/_chunks/id-DV0Ndeav.mjs.map +1 -0
  9. package/dist/_chunks/{index-Bv3cQ3c-.js → index-B8WmHbCU.js} +8 -28
  10. package/dist/_chunks/index-B8WmHbCU.js.map +1 -0
  11. package/dist/_chunks/{index-CIBLMG85.js → index-BCUO98DV.js} +25 -22
  12. package/dist/_chunks/index-BCUO98DV.js.map +1 -0
  13. package/dist/_chunks/{index-CeaoNBIP.mjs → index-CA5Axcoc.mjs} +10 -30
  14. package/dist/_chunks/index-CA5Axcoc.mjs.map +1 -0
  15. package/dist/_chunks/{index-Cx5QECZI.mjs → index-CqYVkW3E.mjs} +25 -22
  16. package/dist/_chunks/index-CqYVkW3E.mjs.map +1 -0
  17. package/dist/_chunks/{router-gRPIa2_c.js → router-BOXlNnrU.js} +3 -3
  18. package/dist/_chunks/router-BOXlNnrU.js.map +1 -0
  19. package/dist/_chunks/{router-BEoNwQZ1.mjs → router-Jdt6SbIA.mjs} +3 -3
  20. package/dist/_chunks/router-Jdt6SbIA.mjs.map +1 -0
  21. package/dist/admin/index.js +1 -1
  22. package/dist/admin/index.mjs +1 -1
  23. package/dist/server/index.js +49 -27
  24. package/dist/server/index.js.map +1 -1
  25. package/dist/server/index.mjs +49 -27
  26. package/dist/server/index.mjs.map +1 -1
  27. package/dist/server/src/controllers/assignees.d.ts.map +1 -1
  28. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  29. package/dist/server/src/index.d.ts +1 -1
  30. package/dist/server/src/services/document-service-middleware.d.ts.map +1 -1
  31. package/dist/server/src/services/index.d.ts +1 -1
  32. package/dist/server/src/services/metrics/weekly-metrics.d.ts.map +1 -1
  33. package/dist/server/src/services/stages.d.ts +2 -7
  34. package/dist/server/src/services/stages.d.ts.map +1 -1
  35. package/package.json +10 -10
  36. package/dist/_chunks/_id-C7pCAzXV.js.map +0 -1
  37. package/dist/_chunks/_id-DDNHKV_W.mjs.map +0 -1
  38. package/dist/_chunks/index-Bv3cQ3c-.js.map +0 -1
  39. package/dist/_chunks/index-CIBLMG85.js.map +0 -1
  40. package/dist/_chunks/index-CeaoNBIP.mjs.map +0 -1
  41. package/dist/_chunks/index-Cx5QECZI.mjs.map +0 -1
  42. package/dist/_chunks/router-BEoNwQZ1.mjs.map +0 -1
  43. package/dist/_chunks/router-gRPIa2_c.js.map +0 -1
  44. package/strapi-server.js +0 -3
  45. /package/dist/admin/src/routes/settings/{:id.d.ts → id.d.ts} +0 -0
@@ -6901,7 +6901,7 @@ const reviewWorkflows = {
6901
6901
  {
6902
6902
  name: "admin::hasPermissions",
6903
6903
  config: {
6904
- actions: ["admin::users.read", "admin::review-workflows.read"]
6904
+ actions: ["admin::users.read"]
6905
6905
  }
6906
6906
  }
6907
6907
  ]
@@ -7322,23 +7322,19 @@ const stages$1 = ({ strapi: strapi2 }) => {
7322
7322
  },
7323
7323
  /**
7324
7324
  * Update the stage of an entity
7325
- *
7326
- * @param {object} entityInfo
7327
- * @param {number} entityInfo.id - Entity id
7328
- * @param {string} entityInfo.modelUID - the content-type of the entity
7329
- * @param {number} stageId - The id of the stage to assign to the entity
7330
7325
  */
7331
- async updateEntity(entityInfo, stageId) {
7326
+ async updateEntity(documentId, locale, model, stageId) {
7332
7327
  const stage = await this.findById(stageId);
7333
7328
  await workflowValidator.validateWorkflowCount();
7334
7329
  if (!stage) {
7335
7330
  throw new ApplicationError$2(`Selected stage does not exist`);
7336
7331
  }
7337
- const entity = await strapi2.db.query(entityInfo.modelUID).update({
7338
- where: {
7339
- id: entityInfo.id
7340
- },
7341
- data: { [ENTITY_STAGE_ATTRIBUTE]: stageId },
7332
+ const entity = await strapi2.documents(model).update({
7333
+ documentId,
7334
+ locale,
7335
+ // Stage doesn't have DP or i18n enabled, connecting it through the `id`
7336
+ // will be safer than relying on the `documentId` + `locale` + `status` transformation
7337
+ data: { [ENTITY_STAGE_ATTRIBUTE]: fp.pick(["id"], stage) },
7342
7338
  populate: [ENTITY_STAGE_ATTRIBUTE]
7343
7339
  });
7344
7340
  metrics.sendDidChangeEntryStage();
@@ -7614,13 +7610,13 @@ const reviewWorkflowsMetrics = {
7614
7610
  sendDidSendReviewWorkflowPropertiesOnceAWeek,
7615
7611
  sendDidEditAssignee
7616
7612
  };
7617
- function _typeof(obj) {
7613
+ function _typeof(o) {
7618
7614
  "@babel/helpers - typeof";
7619
- return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
7620
- return typeof obj2;
7621
- } : function(obj2) {
7622
- return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
7623
- }, _typeof(obj);
7615
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) {
7616
+ return typeof o2;
7617
+ } : function(o2) {
7618
+ return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2;
7619
+ }, _typeof(o);
7624
7620
  }
7625
7621
  function toInteger(dirtyNumber) {
7626
7622
  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
@@ -7755,7 +7751,12 @@ const reviewWorkflowsWeeklyMetrics = ({ strapi: strapi2 }) => {
7755
7751
  },
7756
7752
  async registerCron() {
7757
7753
  const weeklySchedule = await this.ensureWeeklyStoredCronSchedule();
7758
- strapi2.cron.add({ [weeklySchedule]: this.sendMetrics.bind(this) });
7754
+ strapi2.cron.add({
7755
+ reviewWorkflowsWeekly: {
7756
+ task: this.sendMetrics.bind(this),
7757
+ options: weeklySchedule
7758
+ }
7759
+ });
7759
7760
  }
7760
7761
  };
7761
7762
  };
@@ -7811,6 +7812,7 @@ const handleStageOnUpdate = async (ctx, next) => {
7811
7812
  strapi.eventHub.emit(WORKFLOW_UPDATE_STAGE, {
7812
7813
  model: model.modelName,
7813
7814
  uid: model.uid,
7815
+ // TODO v6: Rename to "entry", which is what is used for regular CRUD updates
7814
7816
  entity: {
7815
7817
  // @ts-expect-error
7816
7818
  id: result?.id,
@@ -8096,7 +8098,12 @@ const stages = {
8096
8098
  );
8097
8099
  const workflow2 = await workflowService.assertContentTypeBelongsToWorkflow(modelUID);
8098
8100
  workflowService.assertStageBelongsToWorkflow(stageId, workflow2);
8099
- const updatedEntity = await stagesService.updateEntity({ id: entity.id, modelUID }, stageId);
8101
+ const updatedEntity = await stagesService.updateEntity(
8102
+ entity.documentId,
8103
+ entity.locale,
8104
+ modelUID,
8105
+ stageId
8106
+ );
8100
8107
  ctx.body = { data: await sanitizeOutput(updatedEntity) };
8101
8108
  },
8102
8109
  /**
@@ -8116,10 +8123,9 @@ const stages = {
8116
8123
  if (strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model: modelUID }).cannot.read()) {
8117
8124
  return ctx.forbidden();
8118
8125
  }
8119
- const locale = await validateLocale(query?.locale);
8126
+ const locale = await validateLocale(query?.locale) ?? void 0;
8120
8127
  const entity = await strapi.documents(modelUID).findOne({
8121
8128
  documentId,
8122
- // @ts-expect-error - locale should be also null in the doc service types
8123
8129
  locale,
8124
8130
  populate: [ENTITY_STAGE_ATTRIBUTE]
8125
8131
  });
@@ -8128,12 +8134,13 @@ const stages = {
8128
8134
  }
8129
8135
  const entityStageId = entity[ENTITY_STAGE_ATTRIBUTE]?.id;
8130
8136
  const canTransition = stagePermissions2.can(STAGE_TRANSITION_UID, entityStageId);
8131
- const [workflowCount, { stages: workflowStages }] = await Promise.all([
8137
+ const [workflowCount, workflowResult] = await Promise.all([
8132
8138
  workflowService.count(),
8133
8139
  workflowService.getAssignedWorkflow(modelUID, {
8134
8140
  populate: "stages"
8135
8141
  })
8136
8142
  ]);
8143
+ const workflowStages = workflowResult ? workflowResult.stages : [];
8137
8144
  const meta = {
8138
8145
  stageCount: workflowStages.length,
8139
8146
  workflowCount
@@ -8169,22 +8176,37 @@ const assignees = {
8169
8176
  async updateEntity(ctx) {
8170
8177
  const assigneeService = getService("assignees");
8171
8178
  const workflowService = getService("workflows");
8179
+ const stagePermissions2 = getService("stage-permissions");
8172
8180
  const { model_uid: model, id: documentId } = ctx.params;
8173
- const { locale } = ctx.request.query || {};
8181
+ const locale = await validateLocale(ctx.request.query?.locale) ?? void 0;
8174
8182
  const { sanitizeOutput } = strapi.plugin("content-manager").service("permission-checker").create({ userAbility: ctx.state.userAbility, model });
8183
+ const entity = await strapi.documents(model).findOne({
8184
+ documentId,
8185
+ locale,
8186
+ populate: [ENTITY_STAGE_ATTRIBUTE]
8187
+ });
8188
+ if (!entity) {
8189
+ ctx.throw(404, "Entity not found");
8190
+ }
8191
+ const canTransitionStage = stagePermissions2.can(
8192
+ STAGE_TRANSITION_UID,
8193
+ entity[ENTITY_STAGE_ATTRIBUTE]?.id
8194
+ );
8195
+ if (!canTransitionStage) {
8196
+ ctx.throw(403, "Stage transition permission is required");
8197
+ }
8175
8198
  const { id: assigneeId } = await validateUpdateAssigneeOnEntity(
8176
8199
  ctx.request?.body?.data,
8177
8200
  "You should pass a valid id to the body of the put request."
8178
8201
  );
8179
- await validateLocale(locale);
8180
8202
  await workflowService.assertContentTypeBelongsToWorkflow(model);
8181
- const entity = await assigneeService.updateEntityAssignee(
8203
+ const updatedEntity = await assigneeService.updateEntityAssignee(
8182
8204
  documentId,
8183
8205
  locale || null,
8184
8206
  model,
8185
8207
  assigneeId
8186
8208
  );
8187
- ctx.body = { data: await sanitizeOutput(entity) };
8209
+ ctx.body = { data: await sanitizeOutput(updatedEntity) };
8188
8210
  }
8189
8211
  };
8190
8212
  const controllers = {