@strapi/review-workflows 5.49.0 → 5.50.0

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 (57) hide show
  1. package/dist/admin/index.js +1 -0
  2. package/dist/admin/index.js.map +1 -1
  3. package/dist/admin/index.mjs +1 -0
  4. package/dist/admin/index.mjs.map +1 -1
  5. package/dist/admin/src/components/LimitsModal.d.ts +2 -2
  6. package/dist/admin/src/routes/settings/hooks/useDragAndDrop.d.ts +4 -4
  7. package/dist/admin/src/routes/settings/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  8. package/dist/admin/src/routes/settings/hooks/useReviewWorkflows.d.ts +2 -2
  9. package/dist/admin/src/services/content-manager.d.ts +7 -7
  10. package/dist/admin/src/services/settings.d.ts +75 -75
  11. package/dist/admin/src/utils/users.d.ts +1 -1
  12. package/dist/admin/translations/ja.json.js +41 -0
  13. package/dist/admin/translations/ja.json.js.map +1 -0
  14. package/dist/admin/translations/ja.json.mjs +39 -0
  15. package/dist/admin/translations/ja.json.mjs.map +1 -0
  16. package/dist/server/controllers/stages.js +0 -2
  17. package/dist/server/controllers/stages.js.map +1 -1
  18. package/dist/server/controllers/stages.mjs +0 -2
  19. package/dist/server/controllers/stages.mjs.map +1 -1
  20. package/dist/server/controllers/workflows.js +0 -4
  21. package/dist/server/controllers/workflows.js.map +1 -1
  22. package/dist/server/controllers/workflows.mjs +0 -4
  23. package/dist/server/controllers/workflows.mjs.map +1 -1
  24. package/dist/server/src/bootstrap.d.ts.map +1 -1
  25. package/dist/server/src/controllers/index.d.ts +3 -4
  26. package/dist/server/src/controllers/index.d.ts.map +1 -1
  27. package/dist/server/src/controllers/stages.d.ts +1 -3
  28. package/dist/server/src/controllers/stages.d.ts.map +1 -1
  29. package/dist/server/src/controllers/workflows.d.ts +2 -6
  30. package/dist/server/src/controllers/workflows.d.ts.map +1 -1
  31. package/dist/server/src/destroy.d.ts.map +1 -1
  32. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  33. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  34. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  35. package/dist/server/src/homepage/index.d.ts +1 -1
  36. package/dist/server/src/homepage/services/homepage.d.ts +1 -1
  37. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  38. package/dist/server/src/homepage/services/index.d.ts +1 -1
  39. package/dist/server/src/index.d.ts +11 -12
  40. package/dist/server/src/index.d.ts.map +1 -1
  41. package/dist/server/src/register.d.ts.map +1 -1
  42. package/dist/server/src/routes/utils.d.ts.map +1 -1
  43. package/dist/server/src/services/assignees.d.ts.map +1 -1
  44. package/dist/server/src/services/index.d.ts +8 -8
  45. package/dist/server/src/services/index.d.ts.map +1 -1
  46. package/dist/server/src/services/metrics/index.d.ts.map +1 -1
  47. package/dist/server/src/services/metrics/weekly-metrics.d.ts.map +1 -1
  48. package/dist/server/src/services/stage-permissions.d.ts.map +1 -1
  49. package/dist/server/src/services/stages.d.ts.map +1 -1
  50. package/dist/server/src/services/validation.d.ts.map +1 -1
  51. package/dist/server/src/services/workflow-content-types.d.ts.map +1 -1
  52. package/dist/server/src/services/workflows.d.ts.map +1 -1
  53. package/dist/server/src/utils/index.d.ts.map +1 -1
  54. package/dist/server/src/utils/review-workflows.d.ts.map +1 -1
  55. package/dist/server/src/validation/review-workflows.d.ts +10 -10
  56. package/dist/server/src/validation/review-workflows.d.ts.map +1 -1
  57. package/package.json +7 -7
@@ -1 +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 canTransitionTo = await stagePermissions.canTransitionToStage(stageId);\n if (!canTransitionTo) {\n ctx.throw(403, 'Forbidden stage transition');\n }\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 * Stages are filtered by both \"from\" permission on the current stage AND \"to\" permission on each target stage.\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, workflowCount, workflowResult] = await Promise.all([\n strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n }),\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: { stages: { populate: { permissions: { populate: ['role'] } } } },\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n const entityStageId = entity?.[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n canTransition,\n };\n\n // The entity may not exist yet for the requested locale (e.g. switching to a\n // locale that has not been saved).\n if (!entity) {\n if (!workflowResult) {\n ctx.throw(404, 'Entity not found');\n }\n\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const otherStages = workflowStages.filter(\n (stage: { id: number; permissions?: unknown[] }) => stage.id !== entityStageId\n );\n\n const data = otherStages.filter((stage: { id: number; permissions?: unknown[] }) =>\n stagePermissions.canTransitionToStageWithPermissions(stage)\n );\n\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","canTransitionTo","canTransitionToStage","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","permissions","workflowStages","entityStageId","meta","stageCount","length","otherStages","filter","canTransitionToStageWithPermissions"],"mappings":"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"}
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 */\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 */\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 canTransitionTo = await stagePermissions.canTransitionToStage(stageId);\n if (!canTransitionTo) {\n ctx.throw(403, 'Forbidden stage transition');\n }\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 * Stages are filtered by both \"from\" permission on the current stage AND \"to\" permission on each target stage.\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, workflowCount, workflowResult] = await Promise.all([\n strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n }),\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: { stages: { populate: { permissions: { populate: ['role'] } } } },\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n const entityStageId = entity?.[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n canTransition,\n };\n\n // The entity may not exist yet for the requested locale (e.g. switching to a\n // locale that has not been saved).\n if (!entity) {\n if (!workflowResult) {\n ctx.throw(404, 'Entity not found');\n }\n\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const otherStages = workflowStages.filter(\n (stage: { id: number; permissions?: unknown[] }) => stage.id !== entityStageId\n );\n\n const data = otherStages.filter((stage: { id: number; permissions?: unknown[] }) =>\n stagePermissions.canTransitionToStageWithPermissions(stage)\n );\n\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","canTransitionTo","canTransitionToStage","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","permissions","workflowStages","entityStageId","meta","stageCount","length","otherStages","filter","canTransitionToStageWithPermissions"],"mappings":"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"}
@@ -18,7 +18,6 @@ import { ENTITY_STAGE_ATTRIBUTE, STAGE_TRANSITION_UID, STAGE_MODEL_UID } from '.
18
18
  var stages = {
19
19
  /**
20
20
  * List all stages
21
- * @param {import('koa').BaseContext} ctx - koa context
22
21
  */ async find (ctx) {
23
22
  const { workflow_id: workflowId } = ctx.params;
24
23
  const { populate } = ctx.query;
@@ -36,7 +35,6 @@ var stages = {
36
35
  },
37
36
  /**
38
37
  * Get one stage
39
- * @param {import('koa').BaseContext} ctx - koa context
40
38
  */ async findById (ctx) {
41
39
  const { id, workflow_id: workflowId } = ctx.params;
42
40
  const { populate } = ctx.query;
@@ -1 +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 canTransitionTo = await stagePermissions.canTransitionToStage(stageId);\n if (!canTransitionTo) {\n ctx.throw(403, 'Forbidden stage transition');\n }\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 * Stages are filtered by both \"from\" permission on the current stage AND \"to\" permission on each target stage.\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, workflowCount, workflowResult] = await Promise.all([\n strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n }),\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: { stages: { populate: { permissions: { populate: ['role'] } } } },\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n const entityStageId = entity?.[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n canTransition,\n };\n\n // The entity may not exist yet for the requested locale (e.g. switching to a\n // locale that has not been saved).\n if (!entity) {\n if (!workflowResult) {\n ctx.throw(404, 'Entity not found');\n }\n\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const otherStages = workflowStages.filter(\n (stage: { id: number; permissions?: unknown[] }) => stage.id !== entityStageId\n );\n\n const data = otherStages.filter((stage: { id: number; permissions?: unknown[] }) =>\n stagePermissions.canTransitionToStageWithPermissions(stage)\n );\n\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","canTransitionTo","canTransitionToStage","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","permissions","workflowStages","entityStageId","meta","stageCount","length","otherStages","filter","canTransitionToStageWithPermissions"],"mappings":"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"}
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 */\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 */\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 canTransitionTo = await stagePermissions.canTransitionToStage(stageId);\n if (!canTransitionTo) {\n ctx.throw(403, 'Forbidden stage transition');\n }\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 * Stages are filtered by both \"from\" permission on the current stage AND \"to\" permission on each target stage.\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, workflowCount, workflowResult] = await Promise.all([\n strapi.documents(modelUID).findOne({\n documentId,\n locale,\n populate: [ENTITY_STAGE_ATTRIBUTE],\n }),\n workflowService.count(),\n workflowService.getAssignedWorkflow(modelUID, {\n populate: { stages: { populate: { permissions: { populate: ['role'] } } } },\n }),\n ]);\n\n const workflowStages = workflowResult ? workflowResult.stages : [];\n const entityStageId = entity?.[ENTITY_STAGE_ATTRIBUTE]?.id;\n const canTransition = stagePermissions.can(STAGE_TRANSITION_UID, entityStageId);\n\n const meta = {\n stageCount: workflowStages.length,\n workflowCount,\n canTransition,\n };\n\n // The entity may not exist yet for the requested locale (e.g. switching to a\n // locale that has not been saved).\n if (!entity) {\n if (!workflowResult) {\n ctx.throw(404, 'Entity not found');\n }\n\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n if (!canTransition) {\n ctx.body = {\n data: [],\n meta,\n };\n\n return;\n }\n\n const otherStages = workflowStages.filter(\n (stage: { id: number; permissions?: unknown[] }) => stage.id !== entityStageId\n );\n\n const data = otherStages.filter((stage: { id: number; permissions?: unknown[] }) =>\n stagePermissions.canTransitionToStageWithPermissions(stage)\n );\n\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","canTransitionTo","canTransitionToStage","updatedEntity","listAvailableStages","cannot","read","forbidden","undefined","workflowCount","workflowResult","Promise","all","count","getAssignedWorkflow","permissions","workflowStages","entityStageId","meta","stageCount","length","otherStages","filter","canTransitionToStageWithPermissions"],"mappings":"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"}
@@ -39,7 +39,6 @@ function formatWorkflowToAdmin(workflow) {
39
39
  var workflows = {
40
40
  /**
41
41
  * Create a new workflow
42
- * @param {import('koa').BaseContext} ctx - koa context
43
42
  */ async create (ctx) {
44
43
  const { body, query } = ctx.request;
45
44
  const { sanitizeCreateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
@@ -58,7 +57,6 @@ var workflows = {
58
57
  },
59
58
  /**
60
59
  * Update a workflow
61
- * @param {import('koa').BaseContext} ctx - koa context
62
60
  */ async update (ctx) {
63
61
  const { id } = ctx.params;
64
62
  const { body, query } = ctx.request;
@@ -90,7 +88,6 @@ var workflows = {
90
88
  },
91
89
  /**
92
90
  * Delete a workflow
93
- * @param {import('koa').BaseContext} ctx - koa context
94
91
  */ async delete (ctx) {
95
92
  const { id } = ctx.params;
96
93
  const { query } = ctx.request;
@@ -114,7 +111,6 @@ var workflows = {
114
111
  },
115
112
  /**
116
113
  * List all workflows
117
- * @param {import('koa').BaseContext} ctx - koa context
118
114
  */ async find (ctx) {
119
115
  const { query } = ctx.request;
120
116
  const workflowService = index.getService('workflows');
@@ -1 +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 type { StagePermission } from '../../../shared/contracts/review-workflows';\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 *\n * Permissions stored on each stage are split into two arrays:\n * - `fromPermissions`: entries with `actionParameters.from` (controls who can move\n * content out of the stage)\n * - `toPermissions`: entries with `actionParameters.to` (controls who can move\n * content into the stage)\n *\n * Role objects are also flattened to their numeric id.\n */\n\n/**\n * Shape of a permission row as returned by the DB populate.\n */\ninterface PopulatedPermission {\n action: string;\n subject?: string | null;\n role: number | { id: number };\n actionParameters?: { from?: number; to?: number };\n}\n\ninterface PopulatedStage {\n permissions?: PopulatedPermission[];\n [key: string]: unknown;\n}\n\nfunction formatWorkflowToAdmin(workflow: { stages?: PopulatedStage[]; [key: string]: unknown }) {\n if (!workflow) return;\n if (!workflow.stages) return workflow;\n\n const transformRoleToId = ({\n actionParameters: _,\n role,\n ...rest\n }: PopulatedPermission): StagePermission => ({\n ...rest,\n role: typeof role === 'object' ? role.id : role,\n });\n\n const transformStages = map((stage: PopulatedStage) => {\n const { permissions: allPermissions = [], ...rest } = stage;\n\n const fromPermissions = allPermissions\n .filter((p) => p.actionParameters?.from)\n .map(transformRoleToId);\n\n const toPermissions = allPermissions\n .filter((p) => p.actionParameters?.to)\n .map(transformRoleToId);\n\n return {\n ...rest,\n fromPermissions,\n toPermissions,\n };\n });\n\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","transformRoleToId","actionParameters","_","role","rest","id","transformStages","map","stage","permissions","allPermissions","fromPermissions","filter","p","from","toPermissions","to","update","ctx","body","query","request","sanitizeCreateInput","sanitizeOutput","sanitizedQuery","state","populate","workflowBody","validateWorkflowCreate","data","workflowService","getService","createdWorkflow","then","created","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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"}
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 type { StagePermission } from '../../../shared/contracts/review-workflows';\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 *\n * Permissions stored on each stage are split into two arrays:\n * - `fromPermissions`: entries with `actionParameters.from` (controls who can move\n * content out of the stage)\n * - `toPermissions`: entries with `actionParameters.to` (controls who can move\n * content into the stage)\n *\n * Role objects are also flattened to their numeric id.\n */\n\n/**\n * Shape of a permission row as returned by the DB populate.\n */\ninterface PopulatedPermission {\n action: string;\n subject?: string | null;\n role: number | { id: number };\n actionParameters?: { from?: number; to?: number };\n}\n\ninterface PopulatedStage {\n permissions?: PopulatedPermission[];\n [key: string]: unknown;\n}\n\nfunction formatWorkflowToAdmin(workflow: { stages?: PopulatedStage[]; [key: string]: unknown }) {\n if (!workflow) return;\n if (!workflow.stages) return workflow;\n\n const transformRoleToId = ({\n actionParameters: _,\n role,\n ...rest\n }: PopulatedPermission): StagePermission => ({\n ...rest,\n role: typeof role === 'object' ? role.id : role,\n });\n\n const transformStages = map((stage: PopulatedStage) => {\n const { permissions: allPermissions = [], ...rest } = stage;\n\n const fromPermissions = allPermissions\n .filter((p) => p.actionParameters?.from)\n .map(transformRoleToId);\n\n const toPermissions = allPermissions\n .filter((p) => p.actionParameters?.to)\n .map(transformRoleToId);\n\n return {\n ...rest,\n fromPermissions,\n toPermissions,\n };\n });\n\n return update('stages', transformStages, workflow);\n}\n\nexport default {\n /**\n * Create a new workflow\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 */\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 */\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 */\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","transformRoleToId","actionParameters","_","role","rest","id","transformStages","map","stage","permissions","allPermissions","fromPermissions","filter","p","from","toPermissions","to","update","ctx","body","query","request","sanitizeCreateInput","sanitizeOutput","sanitizedQuery","state","populate","workflowBody","validateWorkflowCreate","data","workflowService","getService","createdWorkflow","then","created","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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"}
@@ -37,7 +37,6 @@ function formatWorkflowToAdmin(workflow) {
37
37
  var workflows = {
38
38
  /**
39
39
  * Create a new workflow
40
- * @param {import('koa').BaseContext} ctx - koa context
41
40
  */ async create (ctx) {
42
41
  const { body, query } = ctx.request;
43
42
  const { sanitizeCreateInput, sanitizeOutput, sanitizedQuery } = getWorkflowsPermissionChecker({
@@ -56,7 +55,6 @@ var workflows = {
56
55
  },
57
56
  /**
58
57
  * Update a workflow
59
- * @param {import('koa').BaseContext} ctx - koa context
60
58
  */ async update (ctx) {
61
59
  const { id } = ctx.params;
62
60
  const { body, query } = ctx.request;
@@ -88,7 +86,6 @@ var workflows = {
88
86
  },
89
87
  /**
90
88
  * Delete a workflow
91
- * @param {import('koa').BaseContext} ctx - koa context
92
89
  */ async delete (ctx) {
93
90
  const { id } = ctx.params;
94
91
  const { query } = ctx.request;
@@ -112,7 +109,6 @@ var workflows = {
112
109
  },
113
110
  /**
114
111
  * List all workflows
115
- * @param {import('koa').BaseContext} ctx - koa context
116
112
  */ async find (ctx) {
117
113
  const { query } = ctx.request;
118
114
  const workflowService = getService('workflows');
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.mjs","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 type { StagePermission } from '../../../shared/contracts/review-workflows';\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 *\n * Permissions stored on each stage are split into two arrays:\n * - `fromPermissions`: entries with `actionParameters.from` (controls who can move\n * content out of the stage)\n * - `toPermissions`: entries with `actionParameters.to` (controls who can move\n * content into the stage)\n *\n * Role objects are also flattened to their numeric id.\n */\n\n/**\n * Shape of a permission row as returned by the DB populate.\n */\ninterface PopulatedPermission {\n action: string;\n subject?: string | null;\n role: number | { id: number };\n actionParameters?: { from?: number; to?: number };\n}\n\ninterface PopulatedStage {\n permissions?: PopulatedPermission[];\n [key: string]: unknown;\n}\n\nfunction formatWorkflowToAdmin(workflow: { stages?: PopulatedStage[]; [key: string]: unknown }) {\n if (!workflow) return;\n if (!workflow.stages) return workflow;\n\n const transformRoleToId = ({\n actionParameters: _,\n role,\n ...rest\n }: PopulatedPermission): StagePermission => ({\n ...rest,\n role: typeof role === 'object' ? role.id : role,\n });\n\n const transformStages = map((stage: PopulatedStage) => {\n const { permissions: allPermissions = [], ...rest } = stage;\n\n const fromPermissions = allPermissions\n .filter((p) => p.actionParameters?.from)\n .map(transformRoleToId);\n\n const toPermissions = allPermissions\n .filter((p) => p.actionParameters?.to)\n .map(transformRoleToId);\n\n return {\n ...rest,\n fromPermissions,\n toPermissions,\n };\n });\n\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","transformRoleToId","actionParameters","_","role","rest","id","transformStages","map","stage","permissions","allPermissions","fromPermissions","filter","p","from","toPermissions","to","update","ctx","body","query","request","sanitizeCreateInput","sanitizeOutput","sanitizedQuery","state","populate","workflowBody","validateWorkflowCreate","data","workflowService","getService","createdWorkflow","then","created","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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"}
1
+ {"version":3,"file":"workflows.mjs","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 type { StagePermission } from '../../../shared/contracts/review-workflows';\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 *\n * Permissions stored on each stage are split into two arrays:\n * - `fromPermissions`: entries with `actionParameters.from` (controls who can move\n * content out of the stage)\n * - `toPermissions`: entries with `actionParameters.to` (controls who can move\n * content into the stage)\n *\n * Role objects are also flattened to their numeric id.\n */\n\n/**\n * Shape of a permission row as returned by the DB populate.\n */\ninterface PopulatedPermission {\n action: string;\n subject?: string | null;\n role: number | { id: number };\n actionParameters?: { from?: number; to?: number };\n}\n\ninterface PopulatedStage {\n permissions?: PopulatedPermission[];\n [key: string]: unknown;\n}\n\nfunction formatWorkflowToAdmin(workflow: { stages?: PopulatedStage[]; [key: string]: unknown }) {\n if (!workflow) return;\n if (!workflow.stages) return workflow;\n\n const transformRoleToId = ({\n actionParameters: _,\n role,\n ...rest\n }: PopulatedPermission): StagePermission => ({\n ...rest,\n role: typeof role === 'object' ? role.id : role,\n });\n\n const transformStages = map((stage: PopulatedStage) => {\n const { permissions: allPermissions = [], ...rest } = stage;\n\n const fromPermissions = allPermissions\n .filter((p) => p.actionParameters?.from)\n .map(transformRoleToId);\n\n const toPermissions = allPermissions\n .filter((p) => p.actionParameters?.to)\n .map(transformRoleToId);\n\n return {\n ...rest,\n fromPermissions,\n toPermissions,\n };\n });\n\n return update('stages', transformStages, workflow);\n}\n\nexport default {\n /**\n * Create a new workflow\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 */\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 */\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 */\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","transformRoleToId","actionParameters","_","role","rest","id","transformStages","map","stage","permissions","allPermissions","fromPermissions","filter","p","from","toPermissions","to","update","ctx","body","query","request","sanitizeCreateInput","sanitizeOutput","sanitizedQuery","state","populate","workflowBody","validateWorkflowCreate","data","workflowService","getService","createdWorkflow","then","created","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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"+BAwC4B,GAAG;AAA/B,wBAiBE"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"yBAwCsB,MAAM,GAAG;AAA/B,wBAiBE"}
@@ -1,16 +1,15 @@
1
- /// <reference types="koa" />
2
1
  declare const _default: {
3
2
  workflows: {
4
3
  create(ctx: import("koa").Context): Promise<void>;
5
- update(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
6
- delete(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
4
+ update(ctx: import("koa").Context): Promise<any>;
5
+ delete(ctx: import("koa").Context): Promise<any>;
7
6
  find(ctx: import("koa").Context): Promise<void>;
8
7
  };
9
8
  stages: {
10
9
  find(ctx: import("koa").Context): Promise<void>;
11
10
  findById(ctx: import("koa").Context): Promise<void>;
12
11
  updateEntity(ctx: import("koa").Context): Promise<void>;
13
- listAvailableStages(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
12
+ listAvailableStages(ctx: import("koa").Context): Promise<any>;
14
13
  };
15
14
  assignees: {
16
15
  updateEntity(ctx: import("koa").Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAOA,wBAKE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAOA,wBAKE"}
@@ -2,12 +2,10 @@ import type { Context } from 'koa';
2
2
  declare const _default: {
3
3
  /**
4
4
  * List all stages
5
- * @param {import('koa').BaseContext} ctx - koa context
6
5
  */
7
6
  find(ctx: Context): Promise<void>;
8
7
  /**
9
8
  * Get one stage
10
- * @param {import('koa').BaseContext} ctx - koa context
11
9
  */
12
10
  findById(ctx: Context): Promise<void>;
13
11
  /**
@@ -33,7 +31,7 @@ declare const _default: {
33
31
  * @param {string} ctx.params.id - The ID of the entity.
34
32
  * @throws {ApplicationError} If review workflows is not activated on the specified model UID.
35
33
  */
36
- listAvailableStages(ctx: Context): Promise<Context | undefined>;
34
+ listAvailableStages(ctx: Context): Promise<any>;
37
35
  };
38
36
  export default _default;
39
37
  //# sourceMappingURL=stages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/stages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;IA4BjC;;;OAGG;cACa,OAAO;IAevB;;;OAGG;kBACiB,OAAO;IAgB3B;;;;;;;;;;;;OAYG;sBACqB,OAAO;IAsD/B;;;;;;;;OAQG;6BAC4B,OAAO;;AApHxC,wBAkME"}
1
+ {"version":3,"file":"stages.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/stages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;IA4BjC;;OAEG;cACa,OAAO;IAevB;;OAEG;kBACiB,OAAO;IAgB3B;;;;;;;;;;;;OAYG;sBACqB,OAAO;IAsD/B;;;;;;;;OAQG;6BAC4B,OAAO;;AAlHxC,wBAgME"}
@@ -2,22 +2,18 @@ import type { Context } from 'koa';
2
2
  declare const _default: {
3
3
  /**
4
4
  * Create a new workflow
5
- * @param {import('koa').BaseContext} ctx - koa context
6
5
  */
7
6
  create(ctx: Context): Promise<void>;
8
7
  /**
9
8
  * Update a workflow
10
- * @param {import('koa').BaseContext} ctx - koa context
11
9
  */
12
- update(ctx: Context): Promise<Context | undefined>;
10
+ update(ctx: Context): Promise<any>;
13
11
  /**
14
12
  * Delete a workflow
15
- * @param {import('koa').BaseContext} ctx - koa context
16
13
  */
17
- delete(ctx: Context): Promise<Context | undefined>;
14
+ delete(ctx: Context): Promise<any>;
18
15
  /**
19
16
  * List all workflows
20
- * @param {import('koa').BaseContext} ctx - koa context
21
17
  */
22
18
  find(ctx: Context): Promise<void>;
23
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;IAuFjC;;;OAGG;gBACe,OAAO;IAuBzB;;;OAGG;gBACe,OAAO;IAmCzB;;;OAGG;gBACe,OAAO;IAwBzB;;;OAGG;cACa,OAAO;;AAnGzB,wBAwHE"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;IAuFjC;;OAEG;gBACe,OAAO;IAuBzB;;OAEG;gBACe,OAAO;IAmCzB;;OAEG;gBACe,OAAO;IAwBzB;;OAEG;cACa,OAAO;;AA/FzB,wBAoHE"}
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;qCAER;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBAAiE"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAEpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAAiE"}
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/homepage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,QAAA,MAAM,wBAAwB;oCAIY,QAAQ,qCAAqC,CAAC;CAIvF,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/homepage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,QAAA,MAAM,wBAAwB;oCAIY,OAAO,CAAC,4BAA4B,CAAC,QAAQ,CAAC;CAIvF,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,2 +1,3 @@
1
- export declare const controllers: Record<string, import("@strapi/types/dist/core").Controller>;
1
+ import type { Plugin } from '@strapi/types';
2
+ export declare const controllers: Plugin.LoadedPlugin["controllers"];
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,8DAM0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,eAAO,MAAM,WAAW,EAMR,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC"}
@@ -7,7 +7,7 @@ declare const _default: {
7
7
  homepage: ({ strapi }: {
8
8
  strapi: import("@strapi/types/dist/core").Strapi;
9
9
  }) => {
10
- getRecentlyAssignedDocuments(): Promise<import("../../../shared/contracts/homepage").RecentDocument[]>;
10
+ getRecentlyAssignedDocuments(): Promise<import("../../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
11
11
  };
12
12
  };
13
13
  };
@@ -3,7 +3,7 @@ import type { GetRecentlyAssignedDocuments } from '../../../../shared/contracts/
3
3
  declare const createHomepageService: ({ strapi }: {
4
4
  strapi: Core.Strapi;
5
5
  }) => {
6
- getRecentlyAssignedDocuments(): Promise<GetRecentlyAssignedDocuments.Response['data']>;
6
+ getRecentlyAssignedDocuments(): Promise<GetRecentlyAssignedDocuments.Response["data"]>;
7
7
  };
8
8
  export { createHomepageService };
9
9
  //# sourceMappingURL=homepage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,QAAA,MAAM,qBAAqB,eAAgB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;oCAExB,QAAQ,qCAAqC,CAAC,MAAM,CAAC,CAAC;CAkB/F,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"homepage.d.ts","sourceRoot":"","sources":["../../../../../server/src/homepage/services/homepage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,QAAA,MAAM,qBAAqB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;oCAExB,OAAO,CAAC,4BAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAkB/F,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -2,7 +2,7 @@ export declare const services: {
2
2
  homepage: ({ strapi }: {
3
3
  strapi: import("@strapi/types/dist/core").Strapi;
4
4
  }) => {
5
- getRecentlyAssignedDocuments(): Promise<import("../../../../shared/contracts/homepage").RecentDocument[]>;
5
+ getRecentlyAssignedDocuments(): Promise<import("../../../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
6
6
  };
7
7
  };
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,3 @@
1
- /// <reference types="koa" />
2
1
  declare const _default: {
3
2
  register: ({ strapi }: {
4
3
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -105,7 +104,7 @@ declare const _default: {
105
104
  homepage: ({ strapi }: {
106
105
  strapi: import("@strapi/types/dist/core").Strapi;
107
106
  }) => {
108
- getRecentlyAssignedDocuments(): Promise<import("../../shared/contracts/homepage").RecentDocument[]>;
107
+ getRecentlyAssignedDocuments(): Promise<import("../../shared/contracts/homepage").GetRecentlyAssignedDocuments.Response["data"]>;
109
108
  };
110
109
  workflows: ({ strapi }: {
111
110
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -138,7 +137,7 @@ declare const _default: {
138
137
  count({ workflowId }?: any): Promise<number>;
139
138
  replaceStages(srcStages: any, destStages: any, contentTypesToMigrate?: never[]): Promise<any>;
140
139
  updateEntity(entityToUpdate: {
141
- id: string | number;
140
+ id: number | string;
142
141
  documentId: string;
143
142
  locale: string;
144
143
  updatedAt: string;
@@ -177,12 +176,12 @@ declare const _default: {
177
176
  canTransitionToStageWithPermissions(stage: {
178
177
  permissions?: {
179
178
  actionParameters?: {
180
- to?: number | undefined;
181
- } | undefined;
182
- role?: number | {
179
+ to?: number;
180
+ };
181
+ role?: {
183
182
  id: number;
184
- } | undefined;
185
- }[] | undefined;
183
+ } | number;
184
+ }[];
186
185
  }): boolean;
187
186
  };
188
187
  assignees: ({ strapi }: {
@@ -190,7 +189,7 @@ declare const _default: {
190
189
  }) => {
191
190
  findEntityAssigneeId(id: string | number, model: import("@strapi/types/dist/uid").ContentType): Promise<any>;
192
191
  updateEntityAssignee(entityToUpdate: {
193
- id: string | number;
192
+ id: number | string;
194
193
  documentId: string;
195
194
  locale: string;
196
195
  updatedAt: string;
@@ -240,15 +239,15 @@ declare const _default: {
240
239
  controllers: {
241
240
  workflows: {
242
241
  create(ctx: import("koa").Context): Promise<void>;
243
- update(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
244
- delete(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
242
+ update(ctx: import("koa").Context): Promise<any>;
243
+ delete(ctx: import("koa").Context): Promise<any>;
245
244
  find(ctx: import("koa").Context): Promise<void>;
246
245
  };
247
246
  stages: {
248
247
  find(ctx: import("koa").Context): Promise<void>;
249
248
  findById(ctx: import("koa").Context): Promise<void>;
250
249
  updateEntity(ctx: import("koa").Context): Promise<void>;
251
- listAvailableStages(ctx: import("koa").Context): Promise<import("koa").Context | undefined>;
250
+ listAvailableStages(ctx: import("koa").Context): Promise<any>;
252
251
  };
253
252
  assignees: {
254
253
  updateEntity(ctx: import("koa").Context): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,wBAA2B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA6By/C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAA8zC,CAAC;oCAAoB,CAAC;0BAAM,CAAC;;wBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AADt2F,wBAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;qCAsGb;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;AAAzD,wBA6BE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../server/src/register.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,eAAe,CAAC;yBAsGzB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBA6BE"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,gBAAiB,MAAM,WAAW,GAAG,QAAQ,GAAG,QAMnF,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../server/src/routes/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,GAAI,aAAa,MAAM,MAAM,KAAK,GAAG,EAAE,MAAM,GAAG,QAMnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assignees.d.ts","sourceRoot":"","sources":["../../../../server/src/services/assignees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;qCAQ5B;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE;6BAIhB,MAAM,GAAG,MAAM,SAAS,IAAI,WAAW;IAUtE;;OAEG;yCAEe;QACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,SACM,IAAI,WAAW,cACV,MAAM,GAAG,IAAI;;AAzB/B,wBA8DE"}
1
+ {"version":3,"file":"assignees.d.ts","sourceRoot":"","sources":["../../../../server/src/services/assignees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;yBAQxC,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;6BAIhB,MAAM,GAAG,MAAM,SAAS,GAAG,CAAC,WAAW;IAUtE;;OAEG;yCAEe;QACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,SACM,GAAG,CAAC,WAAW,cACV,MAAM,GAAG,IAAI;;AAzB/B,wBA8DE"}