@lokalise/maestro-expert-tenant-lib 1.16.0 → 1.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -100,23 +100,6 @@ var import_zod6 = __toESM(require("zod"), 1);
100
100
 
101
101
  // src/workflow/LayoutTranslator.ts
102
102
  var import_areStringArraysEqual = require("@lokalise/universal-ts-utils/dist/areStringArraysEqual.js");
103
-
104
- // ../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.ts
105
- var import_node_core = require("@lokalise/node-core");
106
- var InvalidWorkflowLayoutSchemaError = class extends import_node_core.InternalError {
107
- static {
108
- __name(this, "InvalidWorkflowLayoutSchemaError");
109
- }
110
- constructor(details) {
111
- super({
112
- message: "Invalid workflow layout layout",
113
- errorCode: "INVALID_WORKFLOW_LAYOUT_LAYOUT",
114
- details
115
- });
116
- }
117
- };
118
-
119
- // src/workflow/LayoutTranslator.ts
120
103
  var LayoutTranslator = class {
121
104
  static {
122
105
  __name(this, "LayoutTranslator");
@@ -162,7 +145,11 @@ var LayoutTranslator = class {
162
145
  const allEvents = Object.values(currentState.on);
163
146
  const event = allEvents.find((evt) => evt.target !== void 0);
164
147
  if (event === void 0 || event.target === void 0) {
165
- throw new InvalidWorkflowLayoutSchemaError({ workflowLayout: layout });
148
+ currentState = {
149
+ ...currentState,
150
+ on: void 0
151
+ };
152
+ continue;
166
153
  }
167
154
  sort.push(event.target);
168
155
  currentState = layout.states[event.target];
@@ -233,7 +220,7 @@ var LayoutTranslator = class {
233
220
  var import_maestro_common = require("@lokalise/maestro-common");
234
221
  var import_zod = require("zod");
235
222
  var SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = import_zod.z.object({
236
- stepTitle: import_zod.z.string().min(1),
223
+ stepTitle: import_zod.z.string().trim().min(1),
237
224
  scheduleFrequencyExpression: import_zod.z.string().regex(import_maestro_common.CRON_EXPRESSION_REGEX),
238
225
  scheduleStartingDate: import_zod.z.optional(import_zod.z.string().datetime()),
239
226
  monitoredLanguageId: import_zod.z.number().min(1).max(10211),
@@ -274,7 +261,7 @@ var TASK_LANGUAGE_ASSIGNEES = import_zod2.z.object({
274
261
  });
275
262
  var CREATE_TASK_STEP_SETTINGS_SCHEMA = import_maestro_common2.WORKFLOW_LAYOUT_STEP_SETTINGS.extend({
276
263
  stepType: import_zod2.z.enum(["translate_task_step", "review_task_step"]),
277
- stepTitle: import_zod2.z.string().min(1),
264
+ stepTitle: import_zod2.z.string().trim().min(1),
278
265
  taskType: import_zod2.z.enum(["translation", "review"]),
279
266
  taskTitle: import_zod2.z.optional(import_zod2.z.string()).describe("If empty, the workflow title will be used"),
280
267
  taskDescription: import_zod2.z.optional(import_zod2.z.string()).describe("Add a description such as including links to useful resources to assignees."),
@@ -552,7 +539,7 @@ var DATETIME = import_zod6.default.string().datetime();
552
539
  var WORKFLOW_ID = import_zod6.default.string().max(36);
553
540
  var TEMPLATE_ID = import_zod6.default.enum(TEMPLATE_IDS).describe("Template identifier");
554
541
  var GROUP_ID = import_zod6.default.string().regex(/^expert_[^_\s]+_[^_\s]+$/, "Invalid group ID format").max(255).describe(
555
- "Generated group identifier, which should be unique across Expert and Flow (example: expert-123-98616399660d3c2456abc5.66984240)"
542
+ "Group identifier composed by the tenant ID, followed by the owner ID, followed by the project ID. Underscores are used as separators (e.g. `expert_123_98616399660d3c2456abc5.66984240`)"
556
543
  );
557
544
  var METADATA_FIELDS = import_zod6.default.enum(["targetLanguageIds", "error"]).describe("Metadata fields that can be included in the response");
558
545
  var TRIGGER_TYPE = import_zod6.default.enum(["Manual", "Scheduled", "Automated"]).describe("Trigger type");
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../src/apiContract/schemas.ts","../src/workflow/LayoutTranslator.ts","../../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.ts","../src/workflow/steps/scheduledTriggerStep.ts","../src/workflow/steps/translateTaskStep.ts","../src/workflow/messages.ts","../src/workflow/steps/reviewTaskStep.ts","../src/workflow/steps/endStep.ts","../src/workflow/steps.ts","../src/templates/resources/review-task.template.ts","../src/templates/resources/translate-and-review-task.template.ts","../src/templates/resources/translate-task.template.ts","../src/templates/schemas.ts"],"sourcesContent":["export * from './src/apiContract/schemas.js'\nexport * from './src/workflow/steps.js'\nexport * from './src/workflow/messages.js'\nexport { TEMPLATES, TemplateId } from './src/templates/schemas.js'\nexport { Template, FrontendLayout, FrontendLayoutStep } from './src/templates/types.js'\nexport { LayoutTranslator } from './src/workflow/LayoutTranslator.js'\n","import { COMMON_ERROR_RESPONSE_SCHEMA } from '@lokalise/api-common'\nimport z from 'zod'\nimport { TEMPLATE_IDS } from '../templates/schemas.js'\nimport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n STEP_TYPES,\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n} from '../workflow/steps.js'\n\n// COMMON SCHEMAS\nconst DATETIME = z.string().datetime()\nconst WORKFLOW_ID = z.string().max(36)\nconst TEMPLATE_ID = z.enum(TEMPLATE_IDS).describe('Template identifier')\nexport const GROUP_ID = z\n .string()\n .regex(/^expert_[^_\\s]+_[^_\\s]+$/, 'Invalid group ID format')\n .max(255)\n .describe(\n 'Generated group identifier, which should be unique across Expert and Flow (example: expert-123-98616399660d3c2456abc5.66984240)',\n )\n\nexport const METADATA_FIELDS = z\n .enum(['targetLanguageIds', 'error'])\n .describe('Metadata fields that can be included in the response')\n\nexport const TRIGGER_TYPE = z.enum(['Manual', 'Scheduled', 'Automated']).describe('Trigger type')\n\nexport const WORKFLOW_STATUS = z\n .enum(['Draft', 'Live', 'Archived', 'Paused', 'Canceled'])\n .describe('Workflow status')\n\nexport const API_ERROR = COMMON_ERROR_RESPONSE_SCHEMA\n\nexport const WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n workflowId: WORKFLOW_ID,\n })\n .describe('URL parameters for getting a workflow')\nexport type WorkflowParams = z.infer<typeof WORKFLOW_PARAMS>\n\nexport const UNSPECIFIED_WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n })\n .describe('URL parameters without workflowId')\nexport type UnspecifiedWorkflowParams = z.infer<typeof UNSPECIFIED_WORKFLOW_PARAMS>\n\n// GET WORKFLOW\nexport const GET_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const WORKFLOW = z\n .object({\n id: WORKFLOW_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n triggerType: TRIGGER_TYPE,\n targetLanguageIds: z.array(z.string()).optional().nullable(),\n error: COMMON_ERROR_RESPONSE_SCHEMA.optional().nullable(),\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME).nullable(),\n publishedAt: z.optional(DATETIME).nullable(),\n triggeredAt: z.optional(DATETIME).nullable(),\n metadata: z.optional(z.record(z.unknown())).nullable(),\n })\n .describe('Workflow. Used in the list of workflows')\n\nexport const WORKFLOW_EXTENDED_STEP_SCHEMA = z.discriminatedUnion('type', [\n z.object({\n id: z.string().max(100),\n type: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n triggerType: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.triggerType,\n }),\n z.object({\n id: z.string().max(100),\n type: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: TRANSLATE_TASK_STEP_FORM_SCHEMA,\n taskType: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: REVIEW_TASK_STEP_FORM_SCHEMA,\n taskType: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: END_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: END_STEP_FORM_SCHEMA,\n }),\n])\n\nexport const WORKFLOW_EXTENDED_SCHEMA = z\n .array(WORKFLOW_EXTENDED_STEP_SCHEMA)\n .describe('Workflow FrontendLayout')\n\nexport const WORKFLOW_EXTENDED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe('Workflow. Response for getting a workflow or creating a new one')\n\nexport const WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED = z\n .array(\n z.object({\n id: z.string().max(100),\n type: z.enum(STEP_TYPES),\n values: z.record(z.string(), z.unknown()),\n triggerType: z.optional(TRIGGER_TYPE),\n taskType: z.optional(z.enum(['translation', 'review'])),\n }),\n )\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport const WORKFLOW_EXTENDED_SIMPLIFIED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport type Workflow = z.infer<typeof WORKFLOW>\nexport type WorkflowExtended = z.infer<typeof WORKFLOW_EXTENDED>\nexport type WorkflowExtendedSchema = z.infer<typeof WORKFLOW_EXTENDED_SCHEMA>\n\nexport const GET_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const GET_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type GetWorkflowParams = z.infer<typeof GET_WORKFLOW_PARAMS>\nexport type GetWorkflowResponse = z.infer<typeof GET_WORKFLOW_RESPONSE>\n\n// LIST WORKFLOWS\nexport const GET_WORKFLOW_LIST_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const GET_WORKFLOW_LIST_RESPONSE = z.object({\n data: z.array(WORKFLOW),\n})\n\nexport type GetWorkflowListParams = z.infer<typeof GET_WORKFLOW_LIST_PARAMS>\nexport type GetWorkflowListResponse = z.infer<typeof GET_WORKFLOW_LIST_RESPONSE>\n\n// PAUSE WORKFLOW\nexport const PATCH_PAUSE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_PAUSE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully paused workflow',\n})\n\nexport type PatchPauseWorkflowParams = z.infer<typeof PATCH_PAUSE_WORKFLOW_PARAMS>\nexport type PatchPauseWorkflowResponse = z.infer<typeof PATCH_PAUSE_WORKFLOW_RESPONSE>\n\n// RESUME WORKFLOW\nexport const PATCH_RESUME_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_RESUME_WORKFLOW_BODY = z.object({\n runNow: z.optional(z.boolean()).default(false),\n})\n\nexport const PATCH_RESUME_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully resumed workflow',\n})\n\nexport type PatchResumeWorkflowParams = z.infer<typeof PATCH_RESUME_WORKFLOW_PARAMS>\nexport type PatchResumeWorkflowBody = z.infer<typeof PATCH_RESUME_WORKFLOW_BODY>\nexport type PatchResumeWorkflowResponse = z.infer<typeof PATCH_RESUME_WORKFLOW_RESPONSE>\n\n// DUPLICATE WORKFLOW\nexport const POST_DUPLICATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_DUPLICATE_WORKFLOW_RESPONSE = GET_WORKFLOW_RESPONSE\n\n// DELETE WORKFLOW\nexport const DELETE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const DELETE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully deleted workflow',\n})\n\nexport type DeleteWorkflowParams = z.infer<typeof DELETE_WORKFLOW_PARAMS>\nexport type DeleteWorkflowResponse = z.infer<typeof DELETE_WORKFLOW_RESPONSE>\n\n// CREATE WORKFLOW\nexport const POST_WORKFLOW_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const POST_WORKFLOW_BODY = z\n .nullable(\n z.object({\n templateId: TEMPLATE_ID.optional(),\n }),\n )\n .describe('Parameters for creating a workflow')\n\nexport const POST_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const POST_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type PostWorkflowParams = z.infer<typeof POST_WORKFLOW_PARAMS>\nexport type PostWorkflowBody = z.infer<typeof POST_WORKFLOW_BODY>\nexport type PostWorkflowResponse = z.infer<typeof POST_WORKFLOW_RESPONSE>\n\n// UPDATE DRAFT\nexport const PUT_WORKFLOW_DRAFT_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_WORKFLOW_DRAFT_BODY = z\n .object({\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n })\n .describe('Schema with user changes')\n\nexport const PUT_WORKFLOW_DRAFT_RESPONSE = z.null({\n description: 'Successfully updated workflow draft',\n})\n\nexport type PutWorkflowDraftParams = z.infer<typeof PUT_WORKFLOW_DRAFT_PARAMS>\nexport type PutWorkflowDraftBody = z.infer<typeof PUT_WORKFLOW_DRAFT_BODY>\nexport type PutWorkflowDraftResponse = z.infer<typeof PUT_WORKFLOW_DRAFT_RESPONSE>\n\n// PATCH WORKFLOW\nexport const PATCH_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_WORKFLOW_BODY = z\n .object({\n title: z.string().min(1).max(256),\n })\n .describe('Workflow title')\n\nexport const PATCH_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PatchWorkflowParams = z.infer<typeof PATCH_WORKFLOW_PARAMS>\nexport type PatchWorkflowBody = z.infer<typeof PATCH_WORKFLOW_BODY>\nexport type PatchWorkflowResponse = z.infer<typeof PATCH_WORKFLOW_RESPONSE>\n\n// ACTIVATE WORKFLOW\nexport const POST_ACTIVATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_ACTIVATE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const POST_ACTIVATE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully activated workflow',\n})\n\nexport type PostActivateWorkflowParams = z.infer<typeof POST_ACTIVATE_WORKFLOW_PARAMS>\nexport type PostActivateWorkflowBody = z.infer<typeof POST_ACTIVATE_WORKFLOW_BODY>\nexport type PostActivateWorkflowResponse = z.infer<typeof POST_ACTIVATE_WORKFLOW_RESPONSE>\n\n// PUT LIVE WORKFLOW\nexport const PUT_LIVE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_LIVE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const PUT_LIVE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PutLiveWorkflowParams = z.infer<typeof PUT_LIVE_WORKFLOW_PARAMS>\nexport type PutLiveWorkflowBody = z.infer<typeof PUT_LIVE_WORKFLOW_BODY>\nexport type PutLiveWorkflowResponse = z.infer<typeof PUT_LIVE_WORKFLOW_RESPONSE>\n","import type {\n WorkflowLayout,\n WorkflowLayoutStepSettingsList,\n WorkflowLayoutStepTriggerEvent,\n} from '@lokalise/maestro-common'\nimport type { WorkflowMetadata } from '@lokalise/maestro-common'\nimport { areStringArraysEqual } from '@lokalise/universal-ts-utils/dist/areStringArraysEqual.js'\nimport { InvalidWorkflowLayoutSchemaError } from '../../../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.js'\nimport type { LayoutTranslatorInterface } from '../../../../src/modules/workflows/interfaces/LayoutTranslatorInterface.js'\nimport { TEMPLATES } from '../templates/schemas.js'\nimport type {\n FrontendLayout,\n InternalTemplate,\n StrictWorkflowLayout,\n StrictWorkflowLayoutSettings,\n StrictWorkflowLayoutStepSettings,\n Template,\n} from '../templates/types.js'\nimport type { ScheduledTriggerStepSettings, StepType } from './steps.js'\n\nexport class LayoutTranslator implements LayoutTranslatorInterface {\n public translateTemplateToFrontendLayout<StateName extends string>(\n template: InternalTemplate<StateName>,\n ): FrontendLayout<StateName> {\n return this.buildFrontendLayout<StateName>(template.settings, template.sort)\n }\n\n public translateFrontendLayoutToTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined {\n const template = this.findTemplate(frontendLayout)\n if (!template) {\n return undefined\n }\n\n const layoutSettings = this.buildLayoutSettings<StateName>(frontendLayout)\n\n return {\n layout: template.layout as StrictWorkflowLayout<StateName>,\n settings: layoutSettings,\n }\n }\n\n public buildFrontendLayout<StateName extends string>(\n settings: StrictWorkflowLayoutSettings<StateName>,\n sort: StateName[] = [],\n ): FrontendLayout<StateName> {\n return Object.keys(settings)\n .sort((a, b) => sort.indexOf(a as StateName) - sort.indexOf(b as StateName))\n .map((id) => {\n const { stepType, triggerType, taskType, ...values } = settings[id]\n\n const step = {\n id: id as StateName,\n type: stepType as StepType,\n values,\n triggerType,\n taskType,\n }\n\n return Object.entries(step)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => {\n // @ts-ignore\n acc[key] = value\n return acc\n },\n {} as FrontendLayout<StateName>[0],\n )\n })\n }\n\n // Based on the linear layout, return the order of steps\n public getStepSortFromLayout(layout: WorkflowLayout): string[] {\n const sort = [layout.initial]\n let currentState = layout.states[layout.initial]\n\n while (currentState.on) {\n const allEvents: WorkflowLayoutStepTriggerEvent[] = Object.values(currentState.on)\n const event = allEvents.find((evt) => evt.target !== undefined)\n if (event === undefined || event.target === undefined) {\n throw new InvalidWorkflowLayoutSchemaError({ workflowLayout: layout })\n }\n\n sort.push(event.target)\n currentState = layout.states[event.target]\n }\n\n return sort\n }\n\n public buildWorkflowMetadata({\n settings,\n }: Pick<InternalTemplate<string>, 'settings'>): WorkflowMetadata {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n return {\n triggerType: step.triggerType,\n targetLanguageIds: step.targetLanguageIds.map((id) => id.toString()),\n }\n }\n\n public getTriggerSchedulerExpression(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleFrequencyExpression ?? undefined\n }\n\n return undefined\n }\n\n public getTriggerSchedulerStartDate(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleStartingDate\n }\n\n return undefined\n }\n\n buildLayoutSettings<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): StrictWorkflowLayoutSettings<StateName> {\n return frontendLayout.reduce(\n (acc, frontendStep) => {\n const step: StrictWorkflowLayoutStepSettings = {\n ...frontendStep.values,\n stepType: frontendStep.type,\n triggerType: frontendStep.type === 'trigger_step' ? frontendStep.triggerType : undefined,\n taskType:\n frontendStep.type === 'translate_task_step' || frontendStep.type === 'review_task_step'\n ? frontendStep.taskType\n : undefined,\n }\n acc[frontendStep.id] = Object.fromEntries(\n Object.entries(step).filter(([_, value]) => value !== undefined),\n ) as StrictWorkflowLayoutStepSettings\n return acc\n },\n {} as Record<StateName, StrictWorkflowLayoutStepSettings>,\n )\n }\n\n findTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Template<StateName> | undefined {\n const frontendLayoutStepIds = frontendLayout.map((step) => step.id)\n\n const result = Object.entries(TEMPLATES).find(([_, template]) => {\n const templateStepIds = template.frontendLayout.map((step) => step.id)\n return areStringArraysEqual(frontendLayoutStepIds, templateStepIds)\n })\n\n if (!result) {\n return undefined\n }\n\n const [_, template] = result\n\n return template as Template<StateName>\n }\n}\n","import type { WorkflowLayout } from '@lokalise/maestro-common'\nimport { InternalError } from '@lokalise/node-core'\n\nexport class InvalidWorkflowLayoutSchemaError extends InternalError {\n constructor(details: { workflowLayout: WorkflowLayout }) {\n super({\n message: 'Invalid workflow layout layout',\n errorCode: 'INVALID_WORKFLOW_LAYOUT_LAYOUT',\n details,\n })\n }\n}\n","import {\n CRON_EXPRESSION_REGEX,\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = z.object({\n stepTitle: z.string().min(1),\n scheduleFrequencyExpression: z.string().regex(CRON_EXPRESSION_REGEX),\n scheduleStartingDate: z.optional(z.string().datetime()),\n monitoredLanguageId: z.number().min(1).max(10211),\n targetLanguageIds: z.array(z.number().min(1).max(10211)).min(1),\n monitoredKeyType: z.enum(['new', 'updated', 'both']),\n projectFilterIds: z.array(z.string()),\n})\n\nexport type ScheduledTriggerStepForm = z.infer<typeof SCHEDULED_TRIGGER_STEP_FORM_SCHEMA>\n\nexport const SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('trigger_step'),\n triggerType: z.literal('Scheduled'),\n})\n\nexport type ScheduledTriggerStepSettings = z.infer<typeof SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ScheduledTriggerStepSettings> = {\n stepType: 'trigger_step',\n triggerType: 'Scheduled',\n stepTitle: 'Trigger and scope',\n scheduleFrequencyExpression: '0 9 * * *',\n scheduleStartingDate: undefined,\n monitoredLanguageId: undefined,\n targetLanguageIds: [],\n monitoredKeyType: 'new',\n projectFilterIds: [],\n}\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const TRANSLATE_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type TranslateTaskStepForm = z.infer<typeof TRANSLATE_TASK_STEP_FORM_SCHEMA>\n\nexport const TRANSLATE_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.extend({\n stepType: z.literal('translate_task_step'),\n taskType: z.literal('translation'),\n autoCloseItems: z.boolean(),\n})\n\nexport type TranslateTaskStepSettings = z.infer<typeof TRANSLATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_TRANSLATE_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<TranslateTaskStepSettings> = {\n stepType: 'translate_task_step',\n stepTitle: 'Translation task for contributors',\n taskType: 'translation',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseItems: true,\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import { WORKFLOW_LAYOUT_STEP_SETTINGS } from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nconst TASK_LANGUAGE_ASSIGNEES = z\n .object({\n languageId: z.number(),\n userIds: z.optional(z.array(z.number())),\n userGroupIds: z.optional(z.array(z.number())),\n })\n .refine(({ userIds, userGroupIds }) => userIds !== undefined || userGroupIds !== undefined, {\n message: 'Either users or groups should be specified',\n })\n\nexport const CREATE_TASK_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.extend({\n stepType: z.enum(['translate_task_step', 'review_task_step']),\n stepTitle: z.string().min(1),\n taskType: z.enum(['translation', 'review']),\n taskTitle: z.optional(z.string()).describe('If empty, the workflow title will be used'),\n taskDescription: z\n .optional(z.string())\n .describe('Add a description such as including links to useful resources to assignees.'),\n dueDate: z.optional(z.number().min(1).max(365)),\n languageAssignees: z.array(TASK_LANGUAGE_ASSIGNEES).min(1),\n autoCloseItems: z.optional(z.boolean()),\n autoCloseLanguages: z.boolean(),\n autoCloseTask: z.boolean(),\n lockTranslations: z.boolean(),\n})\nexport type CreateTaskStepSettings = z.infer<typeof CREATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const CREATE_TASK_MESSAGE_CONTEXT = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n stepTitle: true,\n dueDate: true,\n}).extend({\n teamId: z.number(),\n projectId: z.string(),\n dueDate: z.optional(z.date()),\n sourceLanguageId: z.number(),\n keyIds: z.array(z.string()),\n})\nexport type CreateTaskMessageContext = z.infer<typeof CREATE_TASK_MESSAGE_CONTEXT>\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const REVIEW_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type ReviewTaskStepForm = z.infer<typeof REVIEW_TASK_STEP_FORM_SCHEMA>\n\nexport const REVIEW_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n autoCloseItems: true,\n}).extend({\n stepType: z.literal('review_task_step'),\n taskType: z.literal('review'),\n})\n\nexport type ReviewTaskStepSettings = z.infer<typeof REVIEW_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_REVIEW_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ReviewTaskStepSettings> = {\n stepType: 'review_task_step',\n stepTitle: 'Review task for contributors',\n taskType: 'review',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import {\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const END_STEP_FORM_SCHEMA = z.object({})\nexport type EndStepForm = z.infer<typeof END_STEP_FORM_SCHEMA>\n\nexport const END_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n END_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('end_step'),\n})\nexport type EndStepSettings = z.infer<typeof END_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_END_STEP_SETTINGS: WorkflowLayoutStepSettings & EndStepSettings = {\n stepType: 'end_step',\n}\n","export {\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from './steps/scheduledTriggerStep.js'\nexport type {\n ScheduledTriggerStepForm,\n ScheduledTriggerStepSettings,\n} from './steps/scheduledTriggerStep.js'\n\nexport {\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from './steps/translateTaskStep.js'\nexport type { TranslateTaskStepForm, TranslateTaskStepSettings } from './steps/translateTaskStep.js'\nexport {\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n} from './steps/reviewTaskStep.js'\nexport type { ReviewTaskStepForm, ReviewTaskStepSettings } from './steps/reviewTaskStep.js'\nexport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n DEFAULT_END_STEP_SETTINGS,\n} from './steps/endStep.js'\nexport type { EndStepForm, EndStepSettings } from './steps/endStep.js'\n\nexport const STEP_TYPES = [\n 'trigger_step',\n 'review_task_step',\n 'translate_task_step',\n 'end_step',\n] as const\nexport type StepType = (typeof STEP_TYPES)[number]\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const REVIEW_TASK_TEMPLATE: InternalTemplate<'TriggerStep' | 'ReviewTaskStep' | 'EndStep'> =\n {\n id: 'reviewTask',\n title: 'Review task',\n summary: 'Generate a review task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a review task when the content in the editor meets the conditions set in \"Start\".',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'ReviewTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'ReviewTaskStep', 'EndStep'],\n }\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_AND_REVIEW_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'ReviewTaskStep' | 'EndStep'\n> = {\n id: 'translateAndReviewTask',\n title: 'Translation task → review task',\n summary: 'Automatic creation of translation task before a review task.',\n description:\n 'Use this template to set up a chained workflow where a review task will be created as soon as the translation task is completed.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'ReviewTaskStep',\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'ReviewTaskStep', 'EndStep'],\n}\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'EndStep'\n> = {\n id: 'translateTask',\n title: 'Translation task',\n summary: 'Generate a translation task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a translation task when the content in the editor meets the conditions set in “Start”.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n guard: { type: 'checkClosedTaskId' },\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'EndStep'],\n}\n","import { LayoutTranslator } from '../workflow/LayoutTranslator.js'\nimport { REVIEW_TASK_TEMPLATE } from './resources/review-task.template.js'\nimport { TRANSLATE_AND_REVIEW_TASK_TEMPLATE } from './resources/translate-and-review-task.template.js'\nimport { TRANSLATE_TASK_TEMPLATE } from './resources/translate-task.template.js'\nimport type { InternalTemplate, Template } from './types.js'\n\nexport const TEMPLATE_IDS = ['reviewTask', 'translateTask', 'translateAndReviewTask'] as const\n\nexport type TemplateId = (typeof TEMPLATE_IDS)[number]\n\nconst buildTemplate = <StateName extends string>(\n internalTemplate: InternalTemplate<StateName>,\n): Template<StateName> => {\n const layoutTranslator = new LayoutTranslator()\n const frontendLayout = layoutTranslator.translateTemplateToFrontendLayout(internalTemplate)\n\n return {\n ...internalTemplate,\n frontendLayout,\n }\n}\n\nexport const TEMPLATES: Record<TemplateId, Template<string>> = {\n reviewTask: buildTemplate(REVIEW_TASK_TEMPLATE),\n translateTask: buildTemplate(TRANSLATE_TASK_TEMPLATE),\n translateAndReviewTask: buildTemplate(TRANSLATE_AND_REVIEW_TASK_TEMPLATE),\n}\n"],"mappings":"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","names":["import_zod","_","template","import_zod","import_maestro_common","import_zod","import_zod","import_maestro_common","import_zod","z"]}
1
+ {"version":3,"sources":["../index.ts","../src/apiContract/schemas.ts","../src/workflow/LayoutTranslator.ts","../src/workflow/steps/scheduledTriggerStep.ts","../src/workflow/steps/translateTaskStep.ts","../src/workflow/messages.ts","../src/workflow/steps/reviewTaskStep.ts","../src/workflow/steps/endStep.ts","../src/workflow/steps.ts","../src/templates/resources/review-task.template.ts","../src/templates/resources/translate-and-review-task.template.ts","../src/templates/resources/translate-task.template.ts","../src/templates/schemas.ts"],"sourcesContent":["export * from './src/apiContract/schemas.js'\nexport * from './src/workflow/steps.js'\nexport * from './src/workflow/messages.js'\nexport { TEMPLATES, TemplateId } from './src/templates/schemas.js'\nexport { Template, FrontendLayout, FrontendLayoutStep } from './src/templates/types.js'\nexport { LayoutTranslator } from './src/workflow/LayoutTranslator.js'\n","import { COMMON_ERROR_RESPONSE_SCHEMA } from '@lokalise/api-common'\nimport z from 'zod'\nimport { TEMPLATE_IDS } from '../templates/schemas.js'\nimport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n STEP_TYPES,\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n} from '../workflow/steps.js'\n\n// COMMON SCHEMAS\nconst DATETIME = z.string().datetime()\nconst WORKFLOW_ID = z.string().max(36)\nconst TEMPLATE_ID = z.enum(TEMPLATE_IDS).describe('Template identifier')\nexport const GROUP_ID = z\n .string()\n .regex(/^expert_[^_\\s]+_[^_\\s]+$/, 'Invalid group ID format')\n .max(255)\n .describe(\n 'Group identifier composed by the tenant ID, followed by the owner ID, followed by the project ID. Underscores are used as separators (e.g. `expert_123_98616399660d3c2456abc5.66984240`)',\n )\n\nexport const METADATA_FIELDS = z\n .enum(['targetLanguageIds', 'error'])\n .describe('Metadata fields that can be included in the response')\n\nexport const TRIGGER_TYPE = z.enum(['Manual', 'Scheduled', 'Automated']).describe('Trigger type')\n\nexport const WORKFLOW_STATUS = z\n .enum(['Draft', 'Live', 'Archived', 'Paused', 'Canceled'])\n .describe('Workflow status')\n\nexport const API_ERROR = COMMON_ERROR_RESPONSE_SCHEMA\n\nexport const WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n workflowId: WORKFLOW_ID,\n })\n .describe('URL parameters for getting a workflow')\nexport type WorkflowParams = z.infer<typeof WORKFLOW_PARAMS>\n\nexport const UNSPECIFIED_WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n })\n .describe('URL parameters without workflowId')\nexport type UnspecifiedWorkflowParams = z.infer<typeof UNSPECIFIED_WORKFLOW_PARAMS>\n\n// GET WORKFLOW\nexport const GET_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const WORKFLOW = z\n .object({\n id: WORKFLOW_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n triggerType: TRIGGER_TYPE,\n targetLanguageIds: z.array(z.string()).optional().nullable(),\n error: COMMON_ERROR_RESPONSE_SCHEMA.optional().nullable(),\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME).nullable(),\n publishedAt: z.optional(DATETIME).nullable(),\n triggeredAt: z.optional(DATETIME).nullable(),\n metadata: z.optional(z.record(z.unknown())).nullable(),\n })\n .describe('Workflow. Used in the list of workflows')\n\nexport const WORKFLOW_EXTENDED_STEP_SCHEMA = z.discriminatedUnion('type', [\n z.object({\n id: z.string().max(100),\n type: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n triggerType: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.triggerType,\n }),\n z.object({\n id: z.string().max(100),\n type: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: TRANSLATE_TASK_STEP_FORM_SCHEMA,\n taskType: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: REVIEW_TASK_STEP_FORM_SCHEMA,\n taskType: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: END_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: END_STEP_FORM_SCHEMA,\n }),\n])\n\nexport const WORKFLOW_EXTENDED_SCHEMA = z\n .array(WORKFLOW_EXTENDED_STEP_SCHEMA)\n .describe('Workflow FrontendLayout')\n\nexport const WORKFLOW_EXTENDED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe('Workflow. Response for getting a workflow or creating a new one')\n\nexport const WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED = z\n .array(\n z.object({\n id: z.string().max(100),\n type: z.enum(STEP_TYPES),\n values: z.record(z.string(), z.unknown()),\n triggerType: z.optional(TRIGGER_TYPE),\n taskType: z.optional(z.enum(['translation', 'review'])),\n }),\n )\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport const WORKFLOW_EXTENDED_SIMPLIFIED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport type Workflow = z.infer<typeof WORKFLOW>\nexport type WorkflowExtended = z.infer<typeof WORKFLOW_EXTENDED>\nexport type WorkflowExtendedSchema = z.infer<typeof WORKFLOW_EXTENDED_SCHEMA>\n\nexport const GET_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const GET_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type GetWorkflowParams = z.infer<typeof GET_WORKFLOW_PARAMS>\nexport type GetWorkflowResponse = z.infer<typeof GET_WORKFLOW_RESPONSE>\n\n// LIST WORKFLOWS\nexport const GET_WORKFLOW_LIST_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const GET_WORKFLOW_LIST_RESPONSE = z.object({\n data: z.array(WORKFLOW),\n})\n\nexport type GetWorkflowListParams = z.infer<typeof GET_WORKFLOW_LIST_PARAMS>\nexport type GetWorkflowListResponse = z.infer<typeof GET_WORKFLOW_LIST_RESPONSE>\n\n// PAUSE WORKFLOW\nexport const PATCH_PAUSE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_PAUSE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully paused workflow',\n})\n\nexport type PatchPauseWorkflowParams = z.infer<typeof PATCH_PAUSE_WORKFLOW_PARAMS>\nexport type PatchPauseWorkflowResponse = z.infer<typeof PATCH_PAUSE_WORKFLOW_RESPONSE>\n\n// RESUME WORKFLOW\nexport const PATCH_RESUME_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_RESUME_WORKFLOW_BODY = z.object({\n runNow: z.optional(z.boolean()).default(false),\n})\n\nexport const PATCH_RESUME_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully resumed workflow',\n})\n\nexport type PatchResumeWorkflowParams = z.infer<typeof PATCH_RESUME_WORKFLOW_PARAMS>\nexport type PatchResumeWorkflowBody = z.infer<typeof PATCH_RESUME_WORKFLOW_BODY>\nexport type PatchResumeWorkflowResponse = z.infer<typeof PATCH_RESUME_WORKFLOW_RESPONSE>\n\n// DUPLICATE WORKFLOW\nexport const POST_DUPLICATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_DUPLICATE_WORKFLOW_RESPONSE = GET_WORKFLOW_RESPONSE\n\n// DELETE WORKFLOW\nexport const DELETE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const DELETE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully deleted workflow',\n})\n\nexport type DeleteWorkflowParams = z.infer<typeof DELETE_WORKFLOW_PARAMS>\nexport type DeleteWorkflowResponse = z.infer<typeof DELETE_WORKFLOW_RESPONSE>\n\n// CREATE WORKFLOW\nexport const POST_WORKFLOW_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const POST_WORKFLOW_BODY = z\n .nullable(\n z.object({\n templateId: TEMPLATE_ID.optional(),\n }),\n )\n .describe('Parameters for creating a workflow')\n\nexport const POST_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const POST_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type PostWorkflowParams = z.infer<typeof POST_WORKFLOW_PARAMS>\nexport type PostWorkflowBody = z.infer<typeof POST_WORKFLOW_BODY>\nexport type PostWorkflowResponse = z.infer<typeof POST_WORKFLOW_RESPONSE>\n\n// UPDATE DRAFT\nexport const PUT_WORKFLOW_DRAFT_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_WORKFLOW_DRAFT_BODY = z\n .object({\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n })\n .describe('Schema with user changes')\n\nexport const PUT_WORKFLOW_DRAFT_RESPONSE = z.null({\n description: 'Successfully updated workflow draft',\n})\n\nexport type PutWorkflowDraftParams = z.infer<typeof PUT_WORKFLOW_DRAFT_PARAMS>\nexport type PutWorkflowDraftBody = z.infer<typeof PUT_WORKFLOW_DRAFT_BODY>\nexport type PutWorkflowDraftResponse = z.infer<typeof PUT_WORKFLOW_DRAFT_RESPONSE>\n\n// PATCH WORKFLOW\nexport const PATCH_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_WORKFLOW_BODY = z\n .object({\n title: z.string().min(1).max(256),\n })\n .describe('Workflow title')\n\nexport const PATCH_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PatchWorkflowParams = z.infer<typeof PATCH_WORKFLOW_PARAMS>\nexport type PatchWorkflowBody = z.infer<typeof PATCH_WORKFLOW_BODY>\nexport type PatchWorkflowResponse = z.infer<typeof PATCH_WORKFLOW_RESPONSE>\n\n// ACTIVATE WORKFLOW\nexport const POST_ACTIVATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_ACTIVATE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const POST_ACTIVATE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully activated workflow',\n})\n\nexport type PostActivateWorkflowParams = z.infer<typeof POST_ACTIVATE_WORKFLOW_PARAMS>\nexport type PostActivateWorkflowBody = z.infer<typeof POST_ACTIVATE_WORKFLOW_BODY>\nexport type PostActivateWorkflowResponse = z.infer<typeof POST_ACTIVATE_WORKFLOW_RESPONSE>\n\n// PUT LIVE WORKFLOW\nexport const PUT_LIVE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_LIVE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const PUT_LIVE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PutLiveWorkflowParams = z.infer<typeof PUT_LIVE_WORKFLOW_PARAMS>\nexport type PutLiveWorkflowBody = z.infer<typeof PUT_LIVE_WORKFLOW_BODY>\nexport type PutLiveWorkflowResponse = z.infer<typeof PUT_LIVE_WORKFLOW_RESPONSE>\n","import type {\n WorkflowLayout,\n WorkflowLayoutStepSettingsList,\n WorkflowLayoutStepTriggerEvent,\n} from '@lokalise/maestro-common'\nimport type { WorkflowMetadata } from '@lokalise/maestro-common'\nimport { areStringArraysEqual } from '@lokalise/universal-ts-utils/dist/areStringArraysEqual.js'\nimport type { LayoutTranslatorInterface } from '../../../../src/modules/workflows/interfaces/LayoutTranslatorInterface.js'\nimport { TEMPLATES } from '../templates/schemas.js'\nimport type {\n FrontendLayout,\n InternalTemplate,\n StrictWorkflowLayout,\n StrictWorkflowLayoutSettings,\n StrictWorkflowLayoutStepSettings,\n Template,\n} from '../templates/types.js'\nimport type { ScheduledTriggerStepSettings, StepType } from './steps.js'\n\nexport class LayoutTranslator implements LayoutTranslatorInterface {\n public translateTemplateToFrontendLayout<StateName extends string>(\n template: InternalTemplate<StateName>,\n ): FrontendLayout<StateName> {\n return this.buildFrontendLayout<StateName>(template.settings, template.sort)\n }\n\n public translateFrontendLayoutToTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined {\n const template = this.findTemplate(frontendLayout)\n if (!template) {\n return undefined\n }\n\n const layoutSettings = this.buildLayoutSettings<StateName>(frontendLayout)\n\n return {\n layout: template.layout as StrictWorkflowLayout<StateName>,\n settings: layoutSettings,\n }\n }\n\n public buildFrontendLayout<StateName extends string>(\n settings: StrictWorkflowLayoutSettings<StateName>,\n sort: StateName[] = [],\n ): FrontendLayout<StateName> {\n return Object.keys(settings)\n .sort((a, b) => sort.indexOf(a as StateName) - sort.indexOf(b as StateName))\n .map((id) => {\n const { stepType, triggerType, taskType, ...values } = settings[id]\n\n const step = {\n id: id as StateName,\n type: stepType as StepType,\n values,\n triggerType,\n taskType,\n }\n\n return Object.entries(step)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => {\n // @ts-ignore\n acc[key] = value\n return acc\n },\n {} as FrontendLayout<StateName>[0],\n )\n })\n }\n\n // Based on the linear layout, return the order of steps\n public getStepSortFromLayout(layout: WorkflowLayout): string[] {\n const sort = [layout.initial]\n let currentState = layout.states[layout.initial]\n\n while (currentState.on) {\n const allEvents: WorkflowLayoutStepTriggerEvent[] = Object.values(currentState.on)\n const event = allEvents.find((evt) => evt.target !== undefined)\n\n if (event === undefined || event.target === undefined) {\n currentState = {\n ...currentState,\n on: undefined,\n }\n continue\n }\n\n sort.push(event.target)\n currentState = layout.states[event.target]\n }\n\n return sort\n }\n\n public buildWorkflowMetadata({\n settings,\n }: Pick<InternalTemplate<string>, 'settings'>): WorkflowMetadata {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n return {\n triggerType: step.triggerType,\n targetLanguageIds: step.targetLanguageIds.map((id) => id.toString()),\n }\n }\n\n public getTriggerSchedulerExpression(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleFrequencyExpression ?? undefined\n }\n\n return undefined\n }\n\n public getTriggerSchedulerStartDate(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleStartingDate\n }\n\n return undefined\n }\n\n buildLayoutSettings<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): StrictWorkflowLayoutSettings<StateName> {\n return frontendLayout.reduce(\n (acc, frontendStep) => {\n const step: StrictWorkflowLayoutStepSettings = {\n ...frontendStep.values,\n stepType: frontendStep.type,\n triggerType: frontendStep.type === 'trigger_step' ? frontendStep.triggerType : undefined,\n taskType:\n frontendStep.type === 'translate_task_step' || frontendStep.type === 'review_task_step'\n ? frontendStep.taskType\n : undefined,\n }\n acc[frontendStep.id] = Object.fromEntries(\n Object.entries(step).filter(([_, value]) => value !== undefined),\n ) as StrictWorkflowLayoutStepSettings\n return acc\n },\n {} as Record<StateName, StrictWorkflowLayoutStepSettings>,\n )\n }\n\n findTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Template<StateName> | undefined {\n const frontendLayoutStepIds = frontendLayout.map((step) => step.id)\n\n const result = Object.entries(TEMPLATES).find(([_, template]) => {\n const templateStepIds = template.frontendLayout.map((step) => step.id)\n return areStringArraysEqual(frontendLayoutStepIds, templateStepIds)\n })\n\n if (!result) {\n return undefined\n }\n\n const [_, template] = result\n\n return template as Template<StateName>\n }\n}\n","import {\n CRON_EXPRESSION_REGEX,\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = z.object({\n stepTitle: z.string().trim().min(1),\n scheduleFrequencyExpression: z.string().regex(CRON_EXPRESSION_REGEX),\n scheduleStartingDate: z.optional(z.string().datetime()),\n monitoredLanguageId: z.number().min(1).max(10211),\n targetLanguageIds: z.array(z.number().min(1).max(10211)).min(1),\n monitoredKeyType: z.enum(['new', 'updated', 'both']),\n projectFilterIds: z.array(z.string()),\n})\n\nexport type ScheduledTriggerStepForm = z.infer<typeof SCHEDULED_TRIGGER_STEP_FORM_SCHEMA>\n\nexport const SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('trigger_step'),\n triggerType: z.literal('Scheduled'),\n})\n\nexport type ScheduledTriggerStepSettings = z.infer<typeof SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ScheduledTriggerStepSettings> = {\n stepType: 'trigger_step',\n triggerType: 'Scheduled',\n stepTitle: 'Trigger and scope',\n scheduleFrequencyExpression: '0 9 * * *',\n scheduleStartingDate: undefined,\n monitoredLanguageId: undefined,\n targetLanguageIds: [],\n monitoredKeyType: 'new',\n projectFilterIds: [],\n}\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const TRANSLATE_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type TranslateTaskStepForm = z.infer<typeof TRANSLATE_TASK_STEP_FORM_SCHEMA>\n\nexport const TRANSLATE_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.extend({\n stepType: z.literal('translate_task_step'),\n taskType: z.literal('translation'),\n autoCloseItems: z.boolean(),\n})\n\nexport type TranslateTaskStepSettings = z.infer<typeof TRANSLATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_TRANSLATE_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<TranslateTaskStepSettings> = {\n stepType: 'translate_task_step',\n stepTitle: 'Translation task for contributors',\n taskType: 'translation',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseItems: true,\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import { WORKFLOW_LAYOUT_STEP_SETTINGS } from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nconst TASK_LANGUAGE_ASSIGNEES = z\n .object({\n languageId: z.number(),\n userIds: z.optional(z.array(z.number())),\n userGroupIds: z.optional(z.array(z.number())),\n })\n .refine(({ userIds, userGroupIds }) => userIds !== undefined || userGroupIds !== undefined, {\n message: 'Either users or groups should be specified',\n })\n\nexport const CREATE_TASK_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.extend({\n stepType: z.enum(['translate_task_step', 'review_task_step']),\n stepTitle: z.string().trim().min(1),\n taskType: z.enum(['translation', 'review']),\n taskTitle: z.optional(z.string()).describe('If empty, the workflow title will be used'),\n taskDescription: z\n .optional(z.string())\n .describe('Add a description such as including links to useful resources to assignees.'),\n dueDate: z.optional(z.number().min(1).max(365)),\n languageAssignees: z.array(TASK_LANGUAGE_ASSIGNEES).min(1),\n autoCloseItems: z.optional(z.boolean()),\n autoCloseLanguages: z.boolean(),\n autoCloseTask: z.boolean(),\n lockTranslations: z.boolean(),\n})\nexport type CreateTaskStepSettings = z.infer<typeof CREATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const CREATE_TASK_MESSAGE_CONTEXT = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n stepTitle: true,\n dueDate: true,\n}).extend({\n teamId: z.number(),\n projectId: z.string(),\n dueDate: z.optional(z.date()),\n sourceLanguageId: z.number(),\n keyIds: z.array(z.string()),\n})\nexport type CreateTaskMessageContext = z.infer<typeof CREATE_TASK_MESSAGE_CONTEXT>\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const REVIEW_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type ReviewTaskStepForm = z.infer<typeof REVIEW_TASK_STEP_FORM_SCHEMA>\n\nexport const REVIEW_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n autoCloseItems: true,\n}).extend({\n stepType: z.literal('review_task_step'),\n taskType: z.literal('review'),\n})\n\nexport type ReviewTaskStepSettings = z.infer<typeof REVIEW_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_REVIEW_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ReviewTaskStepSettings> = {\n stepType: 'review_task_step',\n stepTitle: 'Review task for contributors',\n taskType: 'review',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import {\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const END_STEP_FORM_SCHEMA = z.object({})\nexport type EndStepForm = z.infer<typeof END_STEP_FORM_SCHEMA>\n\nexport const END_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n END_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('end_step'),\n})\nexport type EndStepSettings = z.infer<typeof END_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_END_STEP_SETTINGS: WorkflowLayoutStepSettings & EndStepSettings = {\n stepType: 'end_step',\n}\n","export {\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from './steps/scheduledTriggerStep.js'\nexport type {\n ScheduledTriggerStepForm,\n ScheduledTriggerStepSettings,\n} from './steps/scheduledTriggerStep.js'\n\nexport {\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from './steps/translateTaskStep.js'\nexport type { TranslateTaskStepForm, TranslateTaskStepSettings } from './steps/translateTaskStep.js'\nexport {\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n} from './steps/reviewTaskStep.js'\nexport type { ReviewTaskStepForm, ReviewTaskStepSettings } from './steps/reviewTaskStep.js'\nexport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n DEFAULT_END_STEP_SETTINGS,\n} from './steps/endStep.js'\nexport type { EndStepForm, EndStepSettings } from './steps/endStep.js'\n\nexport const STEP_TYPES = [\n 'trigger_step',\n 'review_task_step',\n 'translate_task_step',\n 'end_step',\n] as const\nexport type StepType = (typeof STEP_TYPES)[number]\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const REVIEW_TASK_TEMPLATE: InternalTemplate<'TriggerStep' | 'ReviewTaskStep' | 'EndStep'> =\n {\n id: 'reviewTask',\n title: 'Review task',\n summary: 'Generate a review task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a review task when the content in the editor meets the conditions set in \"Start\".',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'ReviewTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'ReviewTaskStep', 'EndStep'],\n }\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_AND_REVIEW_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'ReviewTaskStep' | 'EndStep'\n> = {\n id: 'translateAndReviewTask',\n title: 'Translation task → review task',\n summary: 'Automatic creation of translation task before a review task.',\n description:\n 'Use this template to set up a chained workflow where a review task will be created as soon as the translation task is completed.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'ReviewTaskStep',\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'ReviewTaskStep', 'EndStep'],\n}\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'EndStep'\n> = {\n id: 'translateTask',\n title: 'Translation task',\n summary: 'Generate a translation task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a translation task when the content in the editor meets the conditions set in “Start”.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n guard: { type: 'checkClosedTaskId' },\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'EndStep'],\n}\n","import { LayoutTranslator } from '../workflow/LayoutTranslator.js'\nimport { REVIEW_TASK_TEMPLATE } from './resources/review-task.template.js'\nimport { TRANSLATE_AND_REVIEW_TASK_TEMPLATE } from './resources/translate-and-review-task.template.js'\nimport { TRANSLATE_TASK_TEMPLATE } from './resources/translate-task.template.js'\nimport type { InternalTemplate, Template } from './types.js'\n\nexport const TEMPLATE_IDS = ['reviewTask', 'translateTask', 'translateAndReviewTask'] as const\n\nexport type TemplateId = (typeof TEMPLATE_IDS)[number]\n\nconst buildTemplate = <StateName extends string>(\n internalTemplate: InternalTemplate<StateName>,\n): Template<StateName> => {\n const layoutTranslator = new LayoutTranslator()\n const frontendLayout = layoutTranslator.translateTemplateToFrontendLayout(internalTemplate)\n\n return {\n ...internalTemplate,\n frontendLayout,\n }\n}\n\nexport const TEMPLATES: Record<TemplateId, Template<string>> = {\n reviewTask: buildTemplate(REVIEW_TASK_TEMPLATE),\n translateTask: buildTemplate(TRANSLATE_TASK_TEMPLATE),\n translateAndReviewTask: buildTemplate(TRANSLATE_AND_REVIEW_TASK_TEMPLATE),\n}\n"],"mappings":"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","names":["import_zod","_","template","import_zod","import_maestro_common","import_zod","import_zod","import_maestro_common","import_zod","z"]}
package/dist/index.mjs CHANGED
@@ -7,23 +7,6 @@ import z6 from "zod";
7
7
 
8
8
  // src/workflow/LayoutTranslator.ts
9
9
  import { areStringArraysEqual } from "@lokalise/universal-ts-utils/dist/areStringArraysEqual.js";
10
-
11
- // ../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.ts
12
- import { InternalError } from "@lokalise/node-core";
13
- var InvalidWorkflowLayoutSchemaError = class extends InternalError {
14
- static {
15
- __name(this, "InvalidWorkflowLayoutSchemaError");
16
- }
17
- constructor(details) {
18
- super({
19
- message: "Invalid workflow layout layout",
20
- errorCode: "INVALID_WORKFLOW_LAYOUT_LAYOUT",
21
- details
22
- });
23
- }
24
- };
25
-
26
- // src/workflow/LayoutTranslator.ts
27
10
  var LayoutTranslator = class {
28
11
  static {
29
12
  __name(this, "LayoutTranslator");
@@ -69,7 +52,11 @@ var LayoutTranslator = class {
69
52
  const allEvents = Object.values(currentState.on);
70
53
  const event = allEvents.find((evt) => evt.target !== void 0);
71
54
  if (event === void 0 || event.target === void 0) {
72
- throw new InvalidWorkflowLayoutSchemaError({ workflowLayout: layout });
55
+ currentState = {
56
+ ...currentState,
57
+ on: void 0
58
+ };
59
+ continue;
73
60
  }
74
61
  sort.push(event.target);
75
62
  currentState = layout.states[event.target];
@@ -143,7 +130,7 @@ import {
143
130
  } from "@lokalise/maestro-common";
144
131
  import { z } from "zod";
145
132
  var SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = z.object({
146
- stepTitle: z.string().min(1),
133
+ stepTitle: z.string().trim().min(1),
147
134
  scheduleFrequencyExpression: z.string().regex(CRON_EXPRESSION_REGEX),
148
135
  scheduleStartingDate: z.optional(z.string().datetime()),
149
136
  monitoredLanguageId: z.number().min(1).max(10211),
@@ -184,7 +171,7 @@ var TASK_LANGUAGE_ASSIGNEES = z2.object({
184
171
  });
185
172
  var CREATE_TASK_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS2.extend({
186
173
  stepType: z2.enum(["translate_task_step", "review_task_step"]),
187
- stepTitle: z2.string().min(1),
174
+ stepTitle: z2.string().trim().min(1),
188
175
  taskType: z2.enum(["translation", "review"]),
189
176
  taskTitle: z2.optional(z2.string()).describe("If empty, the workflow title will be used"),
190
177
  taskDescription: z2.optional(z2.string()).describe("Add a description such as including links to useful resources to assignees."),
@@ -464,7 +451,7 @@ var DATETIME = z6.string().datetime();
464
451
  var WORKFLOW_ID = z6.string().max(36);
465
452
  var TEMPLATE_ID = z6.enum(TEMPLATE_IDS).describe("Template identifier");
466
453
  var GROUP_ID = z6.string().regex(/^expert_[^_\s]+_[^_\s]+$/, "Invalid group ID format").max(255).describe(
467
- "Generated group identifier, which should be unique across Expert and Flow (example: expert-123-98616399660d3c2456abc5.66984240)"
454
+ "Group identifier composed by the tenant ID, followed by the owner ID, followed by the project ID. Underscores are used as separators (e.g. `expert_123_98616399660d3c2456abc5.66984240`)"
468
455
  );
469
456
  var METADATA_FIELDS = z6.enum(["targetLanguageIds", "error"]).describe("Metadata fields that can be included in the response");
470
457
  var TRIGGER_TYPE = z6.enum(["Manual", "Scheduled", "Automated"]).describe("Trigger type");
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/apiContract/schemas.ts","../src/workflow/LayoutTranslator.ts","../../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.ts","../src/workflow/steps/scheduledTriggerStep.ts","../src/workflow/steps/translateTaskStep.ts","../src/workflow/messages.ts","../src/workflow/steps/reviewTaskStep.ts","../src/workflow/steps/endStep.ts","../src/workflow/steps.ts","../src/templates/resources/review-task.template.ts","../src/templates/resources/translate-and-review-task.template.ts","../src/templates/resources/translate-task.template.ts","../src/templates/schemas.ts"],"sourcesContent":["import { COMMON_ERROR_RESPONSE_SCHEMA } from '@lokalise/api-common'\nimport z from 'zod'\nimport { TEMPLATE_IDS } from '../templates/schemas.js'\nimport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n STEP_TYPES,\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n} from '../workflow/steps.js'\n\n// COMMON SCHEMAS\nconst DATETIME = z.string().datetime()\nconst WORKFLOW_ID = z.string().max(36)\nconst TEMPLATE_ID = z.enum(TEMPLATE_IDS).describe('Template identifier')\nexport const GROUP_ID = z\n .string()\n .regex(/^expert_[^_\\s]+_[^_\\s]+$/, 'Invalid group ID format')\n .max(255)\n .describe(\n 'Generated group identifier, which should be unique across Expert and Flow (example: expert-123-98616399660d3c2456abc5.66984240)',\n )\n\nexport const METADATA_FIELDS = z\n .enum(['targetLanguageIds', 'error'])\n .describe('Metadata fields that can be included in the response')\n\nexport const TRIGGER_TYPE = z.enum(['Manual', 'Scheduled', 'Automated']).describe('Trigger type')\n\nexport const WORKFLOW_STATUS = z\n .enum(['Draft', 'Live', 'Archived', 'Paused', 'Canceled'])\n .describe('Workflow status')\n\nexport const API_ERROR = COMMON_ERROR_RESPONSE_SCHEMA\n\nexport const WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n workflowId: WORKFLOW_ID,\n })\n .describe('URL parameters for getting a workflow')\nexport type WorkflowParams = z.infer<typeof WORKFLOW_PARAMS>\n\nexport const UNSPECIFIED_WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n })\n .describe('URL parameters without workflowId')\nexport type UnspecifiedWorkflowParams = z.infer<typeof UNSPECIFIED_WORKFLOW_PARAMS>\n\n// GET WORKFLOW\nexport const GET_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const WORKFLOW = z\n .object({\n id: WORKFLOW_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n triggerType: TRIGGER_TYPE,\n targetLanguageIds: z.array(z.string()).optional().nullable(),\n error: COMMON_ERROR_RESPONSE_SCHEMA.optional().nullable(),\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME).nullable(),\n publishedAt: z.optional(DATETIME).nullable(),\n triggeredAt: z.optional(DATETIME).nullable(),\n metadata: z.optional(z.record(z.unknown())).nullable(),\n })\n .describe('Workflow. Used in the list of workflows')\n\nexport const WORKFLOW_EXTENDED_STEP_SCHEMA = z.discriminatedUnion('type', [\n z.object({\n id: z.string().max(100),\n type: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n triggerType: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.triggerType,\n }),\n z.object({\n id: z.string().max(100),\n type: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: TRANSLATE_TASK_STEP_FORM_SCHEMA,\n taskType: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: REVIEW_TASK_STEP_FORM_SCHEMA,\n taskType: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: END_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: END_STEP_FORM_SCHEMA,\n }),\n])\n\nexport const WORKFLOW_EXTENDED_SCHEMA = z\n .array(WORKFLOW_EXTENDED_STEP_SCHEMA)\n .describe('Workflow FrontendLayout')\n\nexport const WORKFLOW_EXTENDED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe('Workflow. Response for getting a workflow or creating a new one')\n\nexport const WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED = z\n .array(\n z.object({\n id: z.string().max(100),\n type: z.enum(STEP_TYPES),\n values: z.record(z.string(), z.unknown()),\n triggerType: z.optional(TRIGGER_TYPE),\n taskType: z.optional(z.enum(['translation', 'review'])),\n }),\n )\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport const WORKFLOW_EXTENDED_SIMPLIFIED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport type Workflow = z.infer<typeof WORKFLOW>\nexport type WorkflowExtended = z.infer<typeof WORKFLOW_EXTENDED>\nexport type WorkflowExtendedSchema = z.infer<typeof WORKFLOW_EXTENDED_SCHEMA>\n\nexport const GET_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const GET_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type GetWorkflowParams = z.infer<typeof GET_WORKFLOW_PARAMS>\nexport type GetWorkflowResponse = z.infer<typeof GET_WORKFLOW_RESPONSE>\n\n// LIST WORKFLOWS\nexport const GET_WORKFLOW_LIST_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const GET_WORKFLOW_LIST_RESPONSE = z.object({\n data: z.array(WORKFLOW),\n})\n\nexport type GetWorkflowListParams = z.infer<typeof GET_WORKFLOW_LIST_PARAMS>\nexport type GetWorkflowListResponse = z.infer<typeof GET_WORKFLOW_LIST_RESPONSE>\n\n// PAUSE WORKFLOW\nexport const PATCH_PAUSE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_PAUSE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully paused workflow',\n})\n\nexport type PatchPauseWorkflowParams = z.infer<typeof PATCH_PAUSE_WORKFLOW_PARAMS>\nexport type PatchPauseWorkflowResponse = z.infer<typeof PATCH_PAUSE_WORKFLOW_RESPONSE>\n\n// RESUME WORKFLOW\nexport const PATCH_RESUME_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_RESUME_WORKFLOW_BODY = z.object({\n runNow: z.optional(z.boolean()).default(false),\n})\n\nexport const PATCH_RESUME_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully resumed workflow',\n})\n\nexport type PatchResumeWorkflowParams = z.infer<typeof PATCH_RESUME_WORKFLOW_PARAMS>\nexport type PatchResumeWorkflowBody = z.infer<typeof PATCH_RESUME_WORKFLOW_BODY>\nexport type PatchResumeWorkflowResponse = z.infer<typeof PATCH_RESUME_WORKFLOW_RESPONSE>\n\n// DUPLICATE WORKFLOW\nexport const POST_DUPLICATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_DUPLICATE_WORKFLOW_RESPONSE = GET_WORKFLOW_RESPONSE\n\n// DELETE WORKFLOW\nexport const DELETE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const DELETE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully deleted workflow',\n})\n\nexport type DeleteWorkflowParams = z.infer<typeof DELETE_WORKFLOW_PARAMS>\nexport type DeleteWorkflowResponse = z.infer<typeof DELETE_WORKFLOW_RESPONSE>\n\n// CREATE WORKFLOW\nexport const POST_WORKFLOW_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const POST_WORKFLOW_BODY = z\n .nullable(\n z.object({\n templateId: TEMPLATE_ID.optional(),\n }),\n )\n .describe('Parameters for creating a workflow')\n\nexport const POST_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const POST_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type PostWorkflowParams = z.infer<typeof POST_WORKFLOW_PARAMS>\nexport type PostWorkflowBody = z.infer<typeof POST_WORKFLOW_BODY>\nexport type PostWorkflowResponse = z.infer<typeof POST_WORKFLOW_RESPONSE>\n\n// UPDATE DRAFT\nexport const PUT_WORKFLOW_DRAFT_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_WORKFLOW_DRAFT_BODY = z\n .object({\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n })\n .describe('Schema with user changes')\n\nexport const PUT_WORKFLOW_DRAFT_RESPONSE = z.null({\n description: 'Successfully updated workflow draft',\n})\n\nexport type PutWorkflowDraftParams = z.infer<typeof PUT_WORKFLOW_DRAFT_PARAMS>\nexport type PutWorkflowDraftBody = z.infer<typeof PUT_WORKFLOW_DRAFT_BODY>\nexport type PutWorkflowDraftResponse = z.infer<typeof PUT_WORKFLOW_DRAFT_RESPONSE>\n\n// PATCH WORKFLOW\nexport const PATCH_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_WORKFLOW_BODY = z\n .object({\n title: z.string().min(1).max(256),\n })\n .describe('Workflow title')\n\nexport const PATCH_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PatchWorkflowParams = z.infer<typeof PATCH_WORKFLOW_PARAMS>\nexport type PatchWorkflowBody = z.infer<typeof PATCH_WORKFLOW_BODY>\nexport type PatchWorkflowResponse = z.infer<typeof PATCH_WORKFLOW_RESPONSE>\n\n// ACTIVATE WORKFLOW\nexport const POST_ACTIVATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_ACTIVATE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const POST_ACTIVATE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully activated workflow',\n})\n\nexport type PostActivateWorkflowParams = z.infer<typeof POST_ACTIVATE_WORKFLOW_PARAMS>\nexport type PostActivateWorkflowBody = z.infer<typeof POST_ACTIVATE_WORKFLOW_BODY>\nexport type PostActivateWorkflowResponse = z.infer<typeof POST_ACTIVATE_WORKFLOW_RESPONSE>\n\n// PUT LIVE WORKFLOW\nexport const PUT_LIVE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_LIVE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const PUT_LIVE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PutLiveWorkflowParams = z.infer<typeof PUT_LIVE_WORKFLOW_PARAMS>\nexport type PutLiveWorkflowBody = z.infer<typeof PUT_LIVE_WORKFLOW_BODY>\nexport type PutLiveWorkflowResponse = z.infer<typeof PUT_LIVE_WORKFLOW_RESPONSE>\n","import type {\n WorkflowLayout,\n WorkflowLayoutStepSettingsList,\n WorkflowLayoutStepTriggerEvent,\n} from '@lokalise/maestro-common'\nimport type { WorkflowMetadata } from '@lokalise/maestro-common'\nimport { areStringArraysEqual } from '@lokalise/universal-ts-utils/dist/areStringArraysEqual.js'\nimport { InvalidWorkflowLayoutSchemaError } from '../../../../src/modules/workflows/errors/InvalidWorkflowLayoutLayoutError.js'\nimport type { LayoutTranslatorInterface } from '../../../../src/modules/workflows/interfaces/LayoutTranslatorInterface.js'\nimport { TEMPLATES } from '../templates/schemas.js'\nimport type {\n FrontendLayout,\n InternalTemplate,\n StrictWorkflowLayout,\n StrictWorkflowLayoutSettings,\n StrictWorkflowLayoutStepSettings,\n Template,\n} from '../templates/types.js'\nimport type { ScheduledTriggerStepSettings, StepType } from './steps.js'\n\nexport class LayoutTranslator implements LayoutTranslatorInterface {\n public translateTemplateToFrontendLayout<StateName extends string>(\n template: InternalTemplate<StateName>,\n ): FrontendLayout<StateName> {\n return this.buildFrontendLayout<StateName>(template.settings, template.sort)\n }\n\n public translateFrontendLayoutToTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined {\n const template = this.findTemplate(frontendLayout)\n if (!template) {\n return undefined\n }\n\n const layoutSettings = this.buildLayoutSettings<StateName>(frontendLayout)\n\n return {\n layout: template.layout as StrictWorkflowLayout<StateName>,\n settings: layoutSettings,\n }\n }\n\n public buildFrontendLayout<StateName extends string>(\n settings: StrictWorkflowLayoutSettings<StateName>,\n sort: StateName[] = [],\n ): FrontendLayout<StateName> {\n return Object.keys(settings)\n .sort((a, b) => sort.indexOf(a as StateName) - sort.indexOf(b as StateName))\n .map((id) => {\n const { stepType, triggerType, taskType, ...values } = settings[id]\n\n const step = {\n id: id as StateName,\n type: stepType as StepType,\n values,\n triggerType,\n taskType,\n }\n\n return Object.entries(step)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => {\n // @ts-ignore\n acc[key] = value\n return acc\n },\n {} as FrontendLayout<StateName>[0],\n )\n })\n }\n\n // Based on the linear layout, return the order of steps\n public getStepSortFromLayout(layout: WorkflowLayout): string[] {\n const sort = [layout.initial]\n let currentState = layout.states[layout.initial]\n\n while (currentState.on) {\n const allEvents: WorkflowLayoutStepTriggerEvent[] = Object.values(currentState.on)\n const event = allEvents.find((evt) => evt.target !== undefined)\n if (event === undefined || event.target === undefined) {\n throw new InvalidWorkflowLayoutSchemaError({ workflowLayout: layout })\n }\n\n sort.push(event.target)\n currentState = layout.states[event.target]\n }\n\n return sort\n }\n\n public buildWorkflowMetadata({\n settings,\n }: Pick<InternalTemplate<string>, 'settings'>): WorkflowMetadata {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n return {\n triggerType: step.triggerType,\n targetLanguageIds: step.targetLanguageIds.map((id) => id.toString()),\n }\n }\n\n public getTriggerSchedulerExpression(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleFrequencyExpression ?? undefined\n }\n\n return undefined\n }\n\n public getTriggerSchedulerStartDate(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleStartingDate\n }\n\n return undefined\n }\n\n buildLayoutSettings<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): StrictWorkflowLayoutSettings<StateName> {\n return frontendLayout.reduce(\n (acc, frontendStep) => {\n const step: StrictWorkflowLayoutStepSettings = {\n ...frontendStep.values,\n stepType: frontendStep.type,\n triggerType: frontendStep.type === 'trigger_step' ? frontendStep.triggerType : undefined,\n taskType:\n frontendStep.type === 'translate_task_step' || frontendStep.type === 'review_task_step'\n ? frontendStep.taskType\n : undefined,\n }\n acc[frontendStep.id] = Object.fromEntries(\n Object.entries(step).filter(([_, value]) => value !== undefined),\n ) as StrictWorkflowLayoutStepSettings\n return acc\n },\n {} as Record<StateName, StrictWorkflowLayoutStepSettings>,\n )\n }\n\n findTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Template<StateName> | undefined {\n const frontendLayoutStepIds = frontendLayout.map((step) => step.id)\n\n const result = Object.entries(TEMPLATES).find(([_, template]) => {\n const templateStepIds = template.frontendLayout.map((step) => step.id)\n return areStringArraysEqual(frontendLayoutStepIds, templateStepIds)\n })\n\n if (!result) {\n return undefined\n }\n\n const [_, template] = result\n\n return template as Template<StateName>\n }\n}\n","import type { WorkflowLayout } from '@lokalise/maestro-common'\nimport { InternalError } from '@lokalise/node-core'\n\nexport class InvalidWorkflowLayoutSchemaError extends InternalError {\n constructor(details: { workflowLayout: WorkflowLayout }) {\n super({\n message: 'Invalid workflow layout layout',\n errorCode: 'INVALID_WORKFLOW_LAYOUT_LAYOUT',\n details,\n })\n }\n}\n","import {\n CRON_EXPRESSION_REGEX,\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = z.object({\n stepTitle: z.string().min(1),\n scheduleFrequencyExpression: z.string().regex(CRON_EXPRESSION_REGEX),\n scheduleStartingDate: z.optional(z.string().datetime()),\n monitoredLanguageId: z.number().min(1).max(10211),\n targetLanguageIds: z.array(z.number().min(1).max(10211)).min(1),\n monitoredKeyType: z.enum(['new', 'updated', 'both']),\n projectFilterIds: z.array(z.string()),\n})\n\nexport type ScheduledTriggerStepForm = z.infer<typeof SCHEDULED_TRIGGER_STEP_FORM_SCHEMA>\n\nexport const SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('trigger_step'),\n triggerType: z.literal('Scheduled'),\n})\n\nexport type ScheduledTriggerStepSettings = z.infer<typeof SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ScheduledTriggerStepSettings> = {\n stepType: 'trigger_step',\n triggerType: 'Scheduled',\n stepTitle: 'Trigger and scope',\n scheduleFrequencyExpression: '0 9 * * *',\n scheduleStartingDate: undefined,\n monitoredLanguageId: undefined,\n targetLanguageIds: [],\n monitoredKeyType: 'new',\n projectFilterIds: [],\n}\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const TRANSLATE_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type TranslateTaskStepForm = z.infer<typeof TRANSLATE_TASK_STEP_FORM_SCHEMA>\n\nexport const TRANSLATE_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.extend({\n stepType: z.literal('translate_task_step'),\n taskType: z.literal('translation'),\n autoCloseItems: z.boolean(),\n})\n\nexport type TranslateTaskStepSettings = z.infer<typeof TRANSLATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_TRANSLATE_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<TranslateTaskStepSettings> = {\n stepType: 'translate_task_step',\n stepTitle: 'Translation task for contributors',\n taskType: 'translation',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseItems: true,\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import { WORKFLOW_LAYOUT_STEP_SETTINGS } from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nconst TASK_LANGUAGE_ASSIGNEES = z\n .object({\n languageId: z.number(),\n userIds: z.optional(z.array(z.number())),\n userGroupIds: z.optional(z.array(z.number())),\n })\n .refine(({ userIds, userGroupIds }) => userIds !== undefined || userGroupIds !== undefined, {\n message: 'Either users or groups should be specified',\n })\n\nexport const CREATE_TASK_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.extend({\n stepType: z.enum(['translate_task_step', 'review_task_step']),\n stepTitle: z.string().min(1),\n taskType: z.enum(['translation', 'review']),\n taskTitle: z.optional(z.string()).describe('If empty, the workflow title will be used'),\n taskDescription: z\n .optional(z.string())\n .describe('Add a description such as including links to useful resources to assignees.'),\n dueDate: z.optional(z.number().min(1).max(365)),\n languageAssignees: z.array(TASK_LANGUAGE_ASSIGNEES).min(1),\n autoCloseItems: z.optional(z.boolean()),\n autoCloseLanguages: z.boolean(),\n autoCloseTask: z.boolean(),\n lockTranslations: z.boolean(),\n})\nexport type CreateTaskStepSettings = z.infer<typeof CREATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const CREATE_TASK_MESSAGE_CONTEXT = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n stepTitle: true,\n dueDate: true,\n}).extend({\n teamId: z.number(),\n projectId: z.string(),\n dueDate: z.optional(z.date()),\n sourceLanguageId: z.number(),\n keyIds: z.array(z.string()),\n})\nexport type CreateTaskMessageContext = z.infer<typeof CREATE_TASK_MESSAGE_CONTEXT>\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const REVIEW_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type ReviewTaskStepForm = z.infer<typeof REVIEW_TASK_STEP_FORM_SCHEMA>\n\nexport const REVIEW_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n autoCloseItems: true,\n}).extend({\n stepType: z.literal('review_task_step'),\n taskType: z.literal('review'),\n})\n\nexport type ReviewTaskStepSettings = z.infer<typeof REVIEW_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_REVIEW_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ReviewTaskStepSettings> = {\n stepType: 'review_task_step',\n stepTitle: 'Review task for contributors',\n taskType: 'review',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import {\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const END_STEP_FORM_SCHEMA = z.object({})\nexport type EndStepForm = z.infer<typeof END_STEP_FORM_SCHEMA>\n\nexport const END_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n END_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('end_step'),\n})\nexport type EndStepSettings = z.infer<typeof END_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_END_STEP_SETTINGS: WorkflowLayoutStepSettings & EndStepSettings = {\n stepType: 'end_step',\n}\n","export {\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from './steps/scheduledTriggerStep.js'\nexport type {\n ScheduledTriggerStepForm,\n ScheduledTriggerStepSettings,\n} from './steps/scheduledTriggerStep.js'\n\nexport {\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from './steps/translateTaskStep.js'\nexport type { TranslateTaskStepForm, TranslateTaskStepSettings } from './steps/translateTaskStep.js'\nexport {\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n} from './steps/reviewTaskStep.js'\nexport type { ReviewTaskStepForm, ReviewTaskStepSettings } from './steps/reviewTaskStep.js'\nexport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n DEFAULT_END_STEP_SETTINGS,\n} from './steps/endStep.js'\nexport type { EndStepForm, EndStepSettings } from './steps/endStep.js'\n\nexport const STEP_TYPES = [\n 'trigger_step',\n 'review_task_step',\n 'translate_task_step',\n 'end_step',\n] as const\nexport type StepType = (typeof STEP_TYPES)[number]\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const REVIEW_TASK_TEMPLATE: InternalTemplate<'TriggerStep' | 'ReviewTaskStep' | 'EndStep'> =\n {\n id: 'reviewTask',\n title: 'Review task',\n summary: 'Generate a review task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a review task when the content in the editor meets the conditions set in \"Start\".',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'ReviewTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'ReviewTaskStep', 'EndStep'],\n }\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_AND_REVIEW_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'ReviewTaskStep' | 'EndStep'\n> = {\n id: 'translateAndReviewTask',\n title: 'Translation task → review task',\n summary: 'Automatic creation of translation task before a review task.',\n description:\n 'Use this template to set up a chained workflow where a review task will be created as soon as the translation task is completed.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'ReviewTaskStep',\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'ReviewTaskStep', 'EndStep'],\n}\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'EndStep'\n> = {\n id: 'translateTask',\n title: 'Translation task',\n summary: 'Generate a translation task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a translation task when the content in the editor meets the conditions set in “Start”.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n guard: { type: 'checkClosedTaskId' },\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'EndStep'],\n}\n","import { LayoutTranslator } from '../workflow/LayoutTranslator.js'\nimport { REVIEW_TASK_TEMPLATE } from './resources/review-task.template.js'\nimport { TRANSLATE_AND_REVIEW_TASK_TEMPLATE } from './resources/translate-and-review-task.template.js'\nimport { TRANSLATE_TASK_TEMPLATE } from './resources/translate-task.template.js'\nimport type { InternalTemplate, Template } from './types.js'\n\nexport const TEMPLATE_IDS = ['reviewTask', 'translateTask', 'translateAndReviewTask'] as const\n\nexport type TemplateId = (typeof TEMPLATE_IDS)[number]\n\nconst buildTemplate = <StateName extends string>(\n internalTemplate: InternalTemplate<StateName>,\n): Template<StateName> => {\n const layoutTranslator = new LayoutTranslator()\n const frontendLayout = layoutTranslator.translateTemplateToFrontendLayout(internalTemplate)\n\n return {\n ...internalTemplate,\n frontendLayout,\n }\n}\n\nexport const TEMPLATES: Record<TemplateId, Template<string>> = {\n reviewTask: buildTemplate(REVIEW_TASK_TEMPLATE),\n translateTask: buildTemplate(TRANSLATE_TASK_TEMPLATE),\n translateAndReviewTask: buildTemplate(TRANSLATE_AND_REVIEW_TASK_TEMPLATE),\n}\n"],"mappings":"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","names":["z","_","template","z","WORKFLOW_LAYOUT_STEP_SETTINGS","z","z","z","z","WORKFLOW_LAYOUT_STEP_SETTINGS","z","z"]}
1
+ {"version":3,"sources":["../src/apiContract/schemas.ts","../src/workflow/LayoutTranslator.ts","../src/workflow/steps/scheduledTriggerStep.ts","../src/workflow/steps/translateTaskStep.ts","../src/workflow/messages.ts","../src/workflow/steps/reviewTaskStep.ts","../src/workflow/steps/endStep.ts","../src/workflow/steps.ts","../src/templates/resources/review-task.template.ts","../src/templates/resources/translate-and-review-task.template.ts","../src/templates/resources/translate-task.template.ts","../src/templates/schemas.ts"],"sourcesContent":["import { COMMON_ERROR_RESPONSE_SCHEMA } from '@lokalise/api-common'\nimport z from 'zod'\nimport { TEMPLATE_IDS } from '../templates/schemas.js'\nimport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n STEP_TYPES,\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n} from '../workflow/steps.js'\n\n// COMMON SCHEMAS\nconst DATETIME = z.string().datetime()\nconst WORKFLOW_ID = z.string().max(36)\nconst TEMPLATE_ID = z.enum(TEMPLATE_IDS).describe('Template identifier')\nexport const GROUP_ID = z\n .string()\n .regex(/^expert_[^_\\s]+_[^_\\s]+$/, 'Invalid group ID format')\n .max(255)\n .describe(\n 'Group identifier composed by the tenant ID, followed by the owner ID, followed by the project ID. Underscores are used as separators (e.g. `expert_123_98616399660d3c2456abc5.66984240`)',\n )\n\nexport const METADATA_FIELDS = z\n .enum(['targetLanguageIds', 'error'])\n .describe('Metadata fields that can be included in the response')\n\nexport const TRIGGER_TYPE = z.enum(['Manual', 'Scheduled', 'Automated']).describe('Trigger type')\n\nexport const WORKFLOW_STATUS = z\n .enum(['Draft', 'Live', 'Archived', 'Paused', 'Canceled'])\n .describe('Workflow status')\n\nexport const API_ERROR = COMMON_ERROR_RESPONSE_SCHEMA\n\nexport const WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n workflowId: WORKFLOW_ID,\n })\n .describe('URL parameters for getting a workflow')\nexport type WorkflowParams = z.infer<typeof WORKFLOW_PARAMS>\n\nexport const UNSPECIFIED_WORKFLOW_PARAMS = z\n .object({\n groupId: GROUP_ID,\n })\n .describe('URL parameters without workflowId')\nexport type UnspecifiedWorkflowParams = z.infer<typeof UNSPECIFIED_WORKFLOW_PARAMS>\n\n// GET WORKFLOW\nexport const GET_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const WORKFLOW = z\n .object({\n id: WORKFLOW_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n triggerType: TRIGGER_TYPE,\n targetLanguageIds: z.array(z.string()).optional().nullable(),\n error: COMMON_ERROR_RESPONSE_SCHEMA.optional().nullable(),\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME).nullable(),\n publishedAt: z.optional(DATETIME).nullable(),\n triggeredAt: z.optional(DATETIME).nullable(),\n metadata: z.optional(z.record(z.unknown())).nullable(),\n })\n .describe('Workflow. Used in the list of workflows')\n\nexport const WORKFLOW_EXTENDED_STEP_SCHEMA = z.discriminatedUnion('type', [\n z.object({\n id: z.string().max(100),\n type: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n triggerType: SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA.shape.triggerType,\n }),\n z.object({\n id: z.string().max(100),\n type: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: TRANSLATE_TASK_STEP_FORM_SCHEMA,\n taskType: TRANSLATE_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: REVIEW_TASK_STEP_FORM_SCHEMA,\n taskType: REVIEW_TASK_STEP_SETTINGS_SCHEMA.shape.taskType,\n }),\n z.object({\n id: z.string().max(100),\n type: END_STEP_SETTINGS_SCHEMA.shape.stepType,\n values: END_STEP_FORM_SCHEMA,\n }),\n])\n\nexport const WORKFLOW_EXTENDED_SCHEMA = z\n .array(WORKFLOW_EXTENDED_STEP_SCHEMA)\n .describe('Workflow FrontendLayout')\n\nexport const WORKFLOW_EXTENDED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe('Workflow. Response for getting a workflow or creating a new one')\n\nexport const WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED = z\n .array(\n z.object({\n id: z.string().max(100),\n type: z.enum(STEP_TYPES),\n values: z.record(z.string(), z.unknown()),\n triggerType: z.optional(TRIGGER_TYPE),\n taskType: z.optional(z.enum(['translation', 'review'])),\n }),\n )\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport const WORKFLOW_EXTENDED_SIMPLIFIED = z\n .object({\n id: WORKFLOW_ID,\n groupId: GROUP_ID,\n version: z.number(),\n status: WORKFLOW_STATUS,\n title: z.string(),\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n createdAt: DATETIME,\n updatedAt: z.optional(DATETIME),\n publishedAt: z.optional(DATETIME),\n })\n .describe(\n 'Simplified schema for the response to be able to return default values to the frontend',\n )\n\nexport type Workflow = z.infer<typeof WORKFLOW>\nexport type WorkflowExtended = z.infer<typeof WORKFLOW_EXTENDED>\nexport type WorkflowExtendedSchema = z.infer<typeof WORKFLOW_EXTENDED_SCHEMA>\n\nexport const GET_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const GET_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type GetWorkflowParams = z.infer<typeof GET_WORKFLOW_PARAMS>\nexport type GetWorkflowResponse = z.infer<typeof GET_WORKFLOW_RESPONSE>\n\n// LIST WORKFLOWS\nexport const GET_WORKFLOW_LIST_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const GET_WORKFLOW_LIST_RESPONSE = z.object({\n data: z.array(WORKFLOW),\n})\n\nexport type GetWorkflowListParams = z.infer<typeof GET_WORKFLOW_LIST_PARAMS>\nexport type GetWorkflowListResponse = z.infer<typeof GET_WORKFLOW_LIST_RESPONSE>\n\n// PAUSE WORKFLOW\nexport const PATCH_PAUSE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_PAUSE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully paused workflow',\n})\n\nexport type PatchPauseWorkflowParams = z.infer<typeof PATCH_PAUSE_WORKFLOW_PARAMS>\nexport type PatchPauseWorkflowResponse = z.infer<typeof PATCH_PAUSE_WORKFLOW_RESPONSE>\n\n// RESUME WORKFLOW\nexport const PATCH_RESUME_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_RESUME_WORKFLOW_BODY = z.object({\n runNow: z.optional(z.boolean()).default(false),\n})\n\nexport const PATCH_RESUME_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully resumed workflow',\n})\n\nexport type PatchResumeWorkflowParams = z.infer<typeof PATCH_RESUME_WORKFLOW_PARAMS>\nexport type PatchResumeWorkflowBody = z.infer<typeof PATCH_RESUME_WORKFLOW_BODY>\nexport type PatchResumeWorkflowResponse = z.infer<typeof PATCH_RESUME_WORKFLOW_RESPONSE>\n\n// DUPLICATE WORKFLOW\nexport const POST_DUPLICATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_DUPLICATE_WORKFLOW_RESPONSE = GET_WORKFLOW_RESPONSE\n\n// DELETE WORKFLOW\nexport const DELETE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const DELETE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully deleted workflow',\n})\n\nexport type DeleteWorkflowParams = z.infer<typeof DELETE_WORKFLOW_PARAMS>\nexport type DeleteWorkflowResponse = z.infer<typeof DELETE_WORKFLOW_RESPONSE>\n\n// CREATE WORKFLOW\nexport const POST_WORKFLOW_PARAMS = UNSPECIFIED_WORKFLOW_PARAMS\n\nexport const POST_WORKFLOW_BODY = z\n .nullable(\n z.object({\n templateId: TEMPLATE_ID.optional(),\n }),\n )\n .describe('Parameters for creating a workflow')\n\nexport const POST_WORKFLOW_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED,\n})\n\nexport const POST_WORKFLOW_SIMPLIFIED_RESPONSE = z.object({\n data: WORKFLOW_EXTENDED_SIMPLIFIED,\n})\n\nexport type PostWorkflowParams = z.infer<typeof POST_WORKFLOW_PARAMS>\nexport type PostWorkflowBody = z.infer<typeof POST_WORKFLOW_BODY>\nexport type PostWorkflowResponse = z.infer<typeof POST_WORKFLOW_RESPONSE>\n\n// UPDATE DRAFT\nexport const PUT_WORKFLOW_DRAFT_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_WORKFLOW_DRAFT_BODY = z\n .object({\n schema: WORKFLOW_EXTENDED_SCHEMA_SIMPLIFIED,\n })\n .describe('Schema with user changes')\n\nexport const PUT_WORKFLOW_DRAFT_RESPONSE = z.null({\n description: 'Successfully updated workflow draft',\n})\n\nexport type PutWorkflowDraftParams = z.infer<typeof PUT_WORKFLOW_DRAFT_PARAMS>\nexport type PutWorkflowDraftBody = z.infer<typeof PUT_WORKFLOW_DRAFT_BODY>\nexport type PutWorkflowDraftResponse = z.infer<typeof PUT_WORKFLOW_DRAFT_RESPONSE>\n\n// PATCH WORKFLOW\nexport const PATCH_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PATCH_WORKFLOW_BODY = z\n .object({\n title: z.string().min(1).max(256),\n })\n .describe('Workflow title')\n\nexport const PATCH_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PatchWorkflowParams = z.infer<typeof PATCH_WORKFLOW_PARAMS>\nexport type PatchWorkflowBody = z.infer<typeof PATCH_WORKFLOW_BODY>\nexport type PatchWorkflowResponse = z.infer<typeof PATCH_WORKFLOW_RESPONSE>\n\n// ACTIVATE WORKFLOW\nexport const POST_ACTIVATE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const POST_ACTIVATE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const POST_ACTIVATE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully activated workflow',\n})\n\nexport type PostActivateWorkflowParams = z.infer<typeof POST_ACTIVATE_WORKFLOW_PARAMS>\nexport type PostActivateWorkflowBody = z.infer<typeof POST_ACTIVATE_WORKFLOW_BODY>\nexport type PostActivateWorkflowResponse = z.infer<typeof POST_ACTIVATE_WORKFLOW_RESPONSE>\n\n// PUT LIVE WORKFLOW\nexport const PUT_LIVE_WORKFLOW_PARAMS = WORKFLOW_PARAMS\n\nexport const PUT_LIVE_WORKFLOW_BODY = z\n .object({\n runNow: z.optional(z.boolean()),\n schema: WORKFLOW_EXTENDED_SCHEMA,\n })\n .describe(\n 'Schema with user changes. If runNow is true, the workflow will be triggered immediately.',\n )\n\nexport const PUT_LIVE_WORKFLOW_RESPONSE = z.null({\n description: 'Successfully updated workflow',\n})\n\nexport type PutLiveWorkflowParams = z.infer<typeof PUT_LIVE_WORKFLOW_PARAMS>\nexport type PutLiveWorkflowBody = z.infer<typeof PUT_LIVE_WORKFLOW_BODY>\nexport type PutLiveWorkflowResponse = z.infer<typeof PUT_LIVE_WORKFLOW_RESPONSE>\n","import type {\n WorkflowLayout,\n WorkflowLayoutStepSettingsList,\n WorkflowLayoutStepTriggerEvent,\n} from '@lokalise/maestro-common'\nimport type { WorkflowMetadata } from '@lokalise/maestro-common'\nimport { areStringArraysEqual } from '@lokalise/universal-ts-utils/dist/areStringArraysEqual.js'\nimport type { LayoutTranslatorInterface } from '../../../../src/modules/workflows/interfaces/LayoutTranslatorInterface.js'\nimport { TEMPLATES } from '../templates/schemas.js'\nimport type {\n FrontendLayout,\n InternalTemplate,\n StrictWorkflowLayout,\n StrictWorkflowLayoutSettings,\n StrictWorkflowLayoutStepSettings,\n Template,\n} from '../templates/types.js'\nimport type { ScheduledTriggerStepSettings, StepType } from './steps.js'\n\nexport class LayoutTranslator implements LayoutTranslatorInterface {\n public translateTemplateToFrontendLayout<StateName extends string>(\n template: InternalTemplate<StateName>,\n ): FrontendLayout<StateName> {\n return this.buildFrontendLayout<StateName>(template.settings, template.sort)\n }\n\n public translateFrontendLayoutToTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined {\n const template = this.findTemplate(frontendLayout)\n if (!template) {\n return undefined\n }\n\n const layoutSettings = this.buildLayoutSettings<StateName>(frontendLayout)\n\n return {\n layout: template.layout as StrictWorkflowLayout<StateName>,\n settings: layoutSettings,\n }\n }\n\n public buildFrontendLayout<StateName extends string>(\n settings: StrictWorkflowLayoutSettings<StateName>,\n sort: StateName[] = [],\n ): FrontendLayout<StateName> {\n return Object.keys(settings)\n .sort((a, b) => sort.indexOf(a as StateName) - sort.indexOf(b as StateName))\n .map((id) => {\n const { stepType, triggerType, taskType, ...values } = settings[id]\n\n const step = {\n id: id as StateName,\n type: stepType as StepType,\n values,\n triggerType,\n taskType,\n }\n\n return Object.entries(step)\n .filter(([_, value]) => value !== undefined)\n .reduce(\n (acc, [key, value]) => {\n // @ts-ignore\n acc[key] = value\n return acc\n },\n {} as FrontendLayout<StateName>[0],\n )\n })\n }\n\n // Based on the linear layout, return the order of steps\n public getStepSortFromLayout(layout: WorkflowLayout): string[] {\n const sort = [layout.initial]\n let currentState = layout.states[layout.initial]\n\n while (currentState.on) {\n const allEvents: WorkflowLayoutStepTriggerEvent[] = Object.values(currentState.on)\n const event = allEvents.find((evt) => evt.target !== undefined)\n\n if (event === undefined || event.target === undefined) {\n currentState = {\n ...currentState,\n on: undefined,\n }\n continue\n }\n\n sort.push(event.target)\n currentState = layout.states[event.target]\n }\n\n return sort\n }\n\n public buildWorkflowMetadata({\n settings,\n }: Pick<InternalTemplate<string>, 'settings'>): WorkflowMetadata {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n return {\n triggerType: step.triggerType,\n targetLanguageIds: step.targetLanguageIds.map((id) => id.toString()),\n }\n }\n\n public getTriggerSchedulerExpression(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleFrequencyExpression ?? undefined\n }\n\n return undefined\n }\n\n public getTriggerSchedulerStartDate(\n settings: WorkflowLayoutStepSettingsList,\n ): string | undefined {\n const step = settings.TriggerStep as ScheduledTriggerStepSettings\n\n if (!step) {\n return undefined\n }\n\n if (step.triggerType === 'Scheduled') {\n return step.scheduleStartingDate\n }\n\n return undefined\n }\n\n buildLayoutSettings<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): StrictWorkflowLayoutSettings<StateName> {\n return frontendLayout.reduce(\n (acc, frontendStep) => {\n const step: StrictWorkflowLayoutStepSettings = {\n ...frontendStep.values,\n stepType: frontendStep.type,\n triggerType: frontendStep.type === 'trigger_step' ? frontendStep.triggerType : undefined,\n taskType:\n frontendStep.type === 'translate_task_step' || frontendStep.type === 'review_task_step'\n ? frontendStep.taskType\n : undefined,\n }\n acc[frontendStep.id] = Object.fromEntries(\n Object.entries(step).filter(([_, value]) => value !== undefined),\n ) as StrictWorkflowLayoutStepSettings\n return acc\n },\n {} as Record<StateName, StrictWorkflowLayoutStepSettings>,\n )\n }\n\n findTemplate<StateName extends string>(\n frontendLayout: FrontendLayout<StateName>,\n ): Template<StateName> | undefined {\n const frontendLayoutStepIds = frontendLayout.map((step) => step.id)\n\n const result = Object.entries(TEMPLATES).find(([_, template]) => {\n const templateStepIds = template.frontendLayout.map((step) => step.id)\n return areStringArraysEqual(frontendLayoutStepIds, templateStepIds)\n })\n\n if (!result) {\n return undefined\n }\n\n const [_, template] = result\n\n return template as Template<StateName>\n }\n}\n","import {\n CRON_EXPRESSION_REGEX,\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const SCHEDULED_TRIGGER_STEP_FORM_SCHEMA = z.object({\n stepTitle: z.string().trim().min(1),\n scheduleFrequencyExpression: z.string().regex(CRON_EXPRESSION_REGEX),\n scheduleStartingDate: z.optional(z.string().datetime()),\n monitoredLanguageId: z.number().min(1).max(10211),\n targetLanguageIds: z.array(z.number().min(1).max(10211)).min(1),\n monitoredKeyType: z.enum(['new', 'updated', 'both']),\n projectFilterIds: z.array(z.string()),\n})\n\nexport type ScheduledTriggerStepForm = z.infer<typeof SCHEDULED_TRIGGER_STEP_FORM_SCHEMA>\n\nexport const SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('trigger_step'),\n triggerType: z.literal('Scheduled'),\n})\n\nexport type ScheduledTriggerStepSettings = z.infer<typeof SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ScheduledTriggerStepSettings> = {\n stepType: 'trigger_step',\n triggerType: 'Scheduled',\n stepTitle: 'Trigger and scope',\n scheduleFrequencyExpression: '0 9 * * *',\n scheduleStartingDate: undefined,\n monitoredLanguageId: undefined,\n targetLanguageIds: [],\n monitoredKeyType: 'new',\n projectFilterIds: [],\n}\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const TRANSLATE_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type TranslateTaskStepForm = z.infer<typeof TRANSLATE_TASK_STEP_FORM_SCHEMA>\n\nexport const TRANSLATE_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.extend({\n stepType: z.literal('translate_task_step'),\n taskType: z.literal('translation'),\n autoCloseItems: z.boolean(),\n})\n\nexport type TranslateTaskStepSettings = z.infer<typeof TRANSLATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_TRANSLATE_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<TranslateTaskStepSettings> = {\n stepType: 'translate_task_step',\n stepTitle: 'Translation task for contributors',\n taskType: 'translation',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseItems: true,\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import { WORKFLOW_LAYOUT_STEP_SETTINGS } from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nconst TASK_LANGUAGE_ASSIGNEES = z\n .object({\n languageId: z.number(),\n userIds: z.optional(z.array(z.number())),\n userGroupIds: z.optional(z.array(z.number())),\n })\n .refine(({ userIds, userGroupIds }) => userIds !== undefined || userGroupIds !== undefined, {\n message: 'Either users or groups should be specified',\n })\n\nexport const CREATE_TASK_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.extend({\n stepType: z.enum(['translate_task_step', 'review_task_step']),\n stepTitle: z.string().trim().min(1),\n taskType: z.enum(['translation', 'review']),\n taskTitle: z.optional(z.string()).describe('If empty, the workflow title will be used'),\n taskDescription: z\n .optional(z.string())\n .describe('Add a description such as including links to useful resources to assignees.'),\n dueDate: z.optional(z.number().min(1).max(365)),\n languageAssignees: z.array(TASK_LANGUAGE_ASSIGNEES).min(1),\n autoCloseItems: z.optional(z.boolean()),\n autoCloseLanguages: z.boolean(),\n autoCloseTask: z.boolean(),\n lockTranslations: z.boolean(),\n})\nexport type CreateTaskStepSettings = z.infer<typeof CREATE_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const CREATE_TASK_MESSAGE_CONTEXT = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n stepTitle: true,\n dueDate: true,\n}).extend({\n teamId: z.number(),\n projectId: z.string(),\n dueDate: z.optional(z.date()),\n sourceLanguageId: z.number(),\n keyIds: z.array(z.string()),\n})\nexport type CreateTaskMessageContext = z.infer<typeof CREATE_TASK_MESSAGE_CONTEXT>\n","import type { WorkflowLayoutStepSettings } from '@lokalise/maestro-common'\nimport { z } from 'zod'\nimport { CREATE_TASK_STEP_SETTINGS_SCHEMA } from '../messages.js'\n\nexport const REVIEW_TASK_STEP_FORM_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n stepType: true,\n taskType: true,\n})\n\nexport type ReviewTaskStepForm = z.infer<typeof REVIEW_TASK_STEP_FORM_SCHEMA>\n\nexport const REVIEW_TASK_STEP_SETTINGS_SCHEMA = CREATE_TASK_STEP_SETTINGS_SCHEMA.omit({\n autoCloseItems: true,\n}).extend({\n stepType: z.literal('review_task_step'),\n taskType: z.literal('review'),\n})\n\nexport type ReviewTaskStepSettings = z.infer<typeof REVIEW_TASK_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_REVIEW_TASK_STEP_SETTINGS: WorkflowLayoutStepSettings &\n Partial<ReviewTaskStepSettings> = {\n stepType: 'review_task_step',\n stepTitle: 'Review task for contributors',\n taskType: 'review',\n taskTitle: undefined,\n taskDescription: undefined,\n dueDate: undefined,\n languageAssignees: [],\n autoCloseLanguages: false,\n autoCloseTask: false,\n lockTranslations: false,\n}\n","import {\n WORKFLOW_LAYOUT_STEP_SETTINGS,\n type WorkflowLayoutStepSettings,\n} from '@lokalise/maestro-common'\nimport { z } from 'zod'\n\nexport const END_STEP_FORM_SCHEMA = z.object({})\nexport type EndStepForm = z.infer<typeof END_STEP_FORM_SCHEMA>\n\nexport const END_STEP_SETTINGS_SCHEMA = WORKFLOW_LAYOUT_STEP_SETTINGS.merge(\n END_STEP_FORM_SCHEMA,\n).extend({\n stepType: z.literal('end_step'),\n})\nexport type EndStepSettings = z.infer<typeof END_STEP_SETTINGS_SCHEMA>\n\nexport const DEFAULT_END_STEP_SETTINGS: WorkflowLayoutStepSettings & EndStepSettings = {\n stepType: 'end_step',\n}\n","export {\n SCHEDULED_TRIGGER_STEP_FORM_SCHEMA,\n SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from './steps/scheduledTriggerStep.js'\nexport type {\n ScheduledTriggerStepForm,\n ScheduledTriggerStepSettings,\n} from './steps/scheduledTriggerStep.js'\n\nexport {\n TRANSLATE_TASK_STEP_FORM_SCHEMA,\n TRANSLATE_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from './steps/translateTaskStep.js'\nexport type { TranslateTaskStepForm, TranslateTaskStepSettings } from './steps/translateTaskStep.js'\nexport {\n REVIEW_TASK_STEP_FORM_SCHEMA,\n REVIEW_TASK_STEP_SETTINGS_SCHEMA,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n} from './steps/reviewTaskStep.js'\nexport type { ReviewTaskStepForm, ReviewTaskStepSettings } from './steps/reviewTaskStep.js'\nexport {\n END_STEP_FORM_SCHEMA,\n END_STEP_SETTINGS_SCHEMA,\n DEFAULT_END_STEP_SETTINGS,\n} from './steps/endStep.js'\nexport type { EndStepForm, EndStepSettings } from './steps/endStep.js'\n\nexport const STEP_TYPES = [\n 'trigger_step',\n 'review_task_step',\n 'translate_task_step',\n 'end_step',\n] as const\nexport type StepType = (typeof STEP_TYPES)[number]\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const REVIEW_TASK_TEMPLATE: InternalTemplate<'TriggerStep' | 'ReviewTaskStep' | 'EndStep'> =\n {\n id: 'reviewTask',\n title: 'Review task',\n summary: 'Generate a review task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a review task when the content in the editor meets the conditions set in \"Start\".',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'ReviewTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'ReviewTaskStep', 'EndStep'],\n }\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_AND_REVIEW_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'ReviewTaskStep' | 'EndStep'\n> = {\n id: 'translateAndReviewTask',\n title: 'Translation task → review task',\n summary: 'Automatic creation of translation task before a review task.',\n description:\n 'Use this template to set up a chained workflow where a review task will be created as soon as the translation task is completed.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'ReviewTaskStep',\n },\n },\n },\n ReviewTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'review',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n ReviewTaskStep: DEFAULT_REVIEW_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'ReviewTaskStep', 'EndStep'],\n}\n","import {\n DEFAULT_END_STEP_SETTINGS,\n DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n} from '../../workflow/steps.js'\nimport type { InternalTemplate } from '../types.js'\n\nexport const TRANSLATE_TASK_TEMPLATE: InternalTemplate<\n 'TriggerStep' | 'TranslateTaskStep' | 'EndStep'\n> = {\n id: 'translateTask',\n title: 'Translation task',\n summary: 'Generate a translation task when content is added to the project.',\n description:\n 'Select this workflow to automatically create a translation task when the content in the editor meets the conditions set in “Start”.',\n layout: {\n initial: 'TriggerStep',\n states: {\n TriggerStep: {\n on: {\n WorkflowTriggerEvent: {\n target: 'TranslateTaskStep',\n actions: [{ type: 'storeWorkflowTriggerEventScope' }],\n },\n },\n },\n TranslateTaskStep: {\n entry: [\n {\n type: 'createTaskAction',\n params: {\n type: 'translation',\n },\n },\n ],\n on: {\n TaskCreatedEvent: {\n actions: [{ type: 'storeCreatedTaskId' }],\n },\n TaskClosedEvent: {\n guard: { type: 'checkClosedTaskId' },\n target: 'EndStep',\n },\n },\n },\n EndStep: {\n type: 'final',\n },\n },\n },\n settings: {\n TriggerStep: DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS,\n TranslateTaskStep: DEFAULT_TRANSLATE_TASK_STEP_SETTINGS,\n EndStep: DEFAULT_END_STEP_SETTINGS,\n },\n sort: ['TriggerStep', 'TranslateTaskStep', 'EndStep'],\n}\n","import { LayoutTranslator } from '../workflow/LayoutTranslator.js'\nimport { REVIEW_TASK_TEMPLATE } from './resources/review-task.template.js'\nimport { TRANSLATE_AND_REVIEW_TASK_TEMPLATE } from './resources/translate-and-review-task.template.js'\nimport { TRANSLATE_TASK_TEMPLATE } from './resources/translate-task.template.js'\nimport type { InternalTemplate, Template } from './types.js'\n\nexport const TEMPLATE_IDS = ['reviewTask', 'translateTask', 'translateAndReviewTask'] as const\n\nexport type TemplateId = (typeof TEMPLATE_IDS)[number]\n\nconst buildTemplate = <StateName extends string>(\n internalTemplate: InternalTemplate<StateName>,\n): Template<StateName> => {\n const layoutTranslator = new LayoutTranslator()\n const frontendLayout = layoutTranslator.translateTemplateToFrontendLayout(internalTemplate)\n\n return {\n ...internalTemplate,\n frontendLayout,\n }\n}\n\nexport const TEMPLATES: Record<TemplateId, Template<string>> = {\n reviewTask: buildTemplate(REVIEW_TASK_TEMPLATE),\n translateTask: buildTemplate(TRANSLATE_TASK_TEMPLATE),\n translateAndReviewTask: buildTemplate(TRANSLATE_AND_REVIEW_TASK_TEMPLATE),\n}\n"],"mappings":"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","names":["z","_","template","z","WORKFLOW_LAYOUT_STEP_SETTINGS","z","z","z","z","WORKFLOW_LAYOUT_STEP_SETTINGS","z","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/maestro-expert-tenant-lib",
3
- "version": "1.16.0",
3
+ "version": "1.16.2",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://github.com/lokalise/maestro",
6
6
  "description": "This library provides shared objects, types and zod schemas for Maestro",