@xtr-dev/payload-automation 0.0.12 → 0.0.13
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.
|
@@ -460,6 +460,11 @@ export class WorkflowExecutor {
|
|
|
460
460
|
/**
|
|
461
461
|
* Find and execute workflows triggered by a collection operation
|
|
462
462
|
*/ async executeTriggeredWorkflows(collection, operation, doc, previousDoc, req) {
|
|
463
|
+
this.logger.info({
|
|
464
|
+
collection,
|
|
465
|
+
operation,
|
|
466
|
+
docId: doc?.id
|
|
467
|
+
}, 'executeTriggeredWorkflows called');
|
|
463
468
|
try {
|
|
464
469
|
// Find workflows with matching triggers
|
|
465
470
|
const workflows = await this.payload.find({
|
|
@@ -468,10 +473,31 @@ export class WorkflowExecutor {
|
|
|
468
473
|
limit: 100,
|
|
469
474
|
req
|
|
470
475
|
});
|
|
476
|
+
this.logger.info({
|
|
477
|
+
workflowCount: workflows.docs.length
|
|
478
|
+
}, 'Found workflows to check');
|
|
471
479
|
for (const workflow of workflows.docs){
|
|
472
480
|
// Check if this workflow has a matching trigger
|
|
473
481
|
const triggers = workflow.triggers;
|
|
474
|
-
|
|
482
|
+
this.logger.debug({
|
|
483
|
+
workflowId: workflow.id,
|
|
484
|
+
workflowName: workflow.name,
|
|
485
|
+
triggerCount: triggers?.length || 0,
|
|
486
|
+
triggers: triggers?.map((t)=>({
|
|
487
|
+
type: t.type,
|
|
488
|
+
collection: t.collection,
|
|
489
|
+
collectionSlug: t.collectionSlug,
|
|
490
|
+
operation: t.operation
|
|
491
|
+
}))
|
|
492
|
+
}, 'Checking workflow triggers');
|
|
493
|
+
const matchingTriggers = triggers?.filter((trigger)=>trigger.type === 'collection-trigger' && (trigger.collection === collection || trigger.collectionSlug === collection) && trigger.operation === operation) || [];
|
|
494
|
+
this.logger.info({
|
|
495
|
+
workflowId: workflow.id,
|
|
496
|
+
workflowName: workflow.name,
|
|
497
|
+
matchingTriggerCount: matchingTriggers.length,
|
|
498
|
+
targetCollection: collection,
|
|
499
|
+
targetOperation: operation
|
|
500
|
+
}, 'Matching triggers found');
|
|
475
501
|
for (const trigger of matchingTriggers){
|
|
476
502
|
// Create execution context for condition evaluation
|
|
477
503
|
const context = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/workflow-executor.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\n\nimport { JSONPath } from 'jsonpath-plus'\n\nexport type Workflow = {\n _version?: number\n id: string\n name: string\n steps: WorkflowStep[]\n triggers: WorkflowTrigger[]\n}\n\nexport type WorkflowStep = {\n condition?: string\n dependencies?: string[]\n input?: null | Record<string, unknown>\n name: string\n step: string\n}\n\nexport interface WorkflowTrigger {\n collection?: string\n condition?: string\n global?: string\n globalOperation?: string\n operation?: string\n type: string\n webhookPath?: string\n}\n\nexport interface ExecutionContext {\n steps: Record<string, {\n error?: string\n input: unknown\n output: unknown\n state: 'failed' | 'pending' | 'running' | 'succeeded'\n }>\n trigger: {\n collection?: string\n data?: unknown\n doc?: unknown\n headers?: Record<string, string>\n operation?: string\n path?: string\n previousDoc?: unknown\n req?: PayloadRequest\n triggeredAt?: string\n type: string\n user?: {\n collection?: string\n email?: string\n id?: string\n }\n }\n}\n\nexport class WorkflowExecutor {\n constructor(\n private payload: Payload,\n private logger: Payload['logger']\n ) {}\n\n /**\n * Evaluate a step condition using JSONPath\n */\n private evaluateStepCondition(condition: string, context: ExecutionContext): boolean {\n return this.evaluateCondition(condition, context)\n }\n\n /**\n * Execute a single workflow step\n */\n private async executeStep(\n step: WorkflowStep,\n stepIndex: number,\n context: ExecutionContext,\n req: PayloadRequest,\n workflowRunId?: number | string\n ): Promise<void> {\n const stepName = step.name || 'step-' + stepIndex\n\n this.logger.info({\n hasStep: 'step' in step,\n step: JSON.stringify(step),\n stepName\n }, 'Executing step')\n\n // Check step condition if present\n if (step.condition) {\n this.logger.debug({\n condition: step.condition,\n stepName,\n availableSteps: Object.keys(context.steps),\n completedSteps: Object.entries(context.steps)\n .filter(([_, s]) => s.state === 'succeeded')\n .map(([name]) => name),\n triggerType: context.trigger?.type\n }, 'Evaluating step condition')\n\n const conditionMet = this.evaluateStepCondition(step.condition, context)\n\n if (!conditionMet) {\n this.logger.info({\n condition: step.condition,\n stepName,\n contextSnapshot: JSON.stringify({\n stepOutputs: Object.entries(context.steps).reduce((acc, [name, step]) => {\n acc[name] = { state: step.state, hasOutput: !!step.output }\n return acc\n }, {} as Record<string, any>),\n triggerData: context.trigger?.data ? 'present' : 'absent'\n })\n }, 'Step condition not met, skipping')\n\n // Mark step as completed but skipped\n context.steps[stepName] = {\n error: undefined,\n input: undefined,\n output: { reason: 'Condition not met', skipped: true },\n state: 'succeeded'\n }\n\n // Update workflow run context if needed\n if (workflowRunId) {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n }\n\n return\n }\n\n this.logger.info({\n condition: step.condition,\n stepName,\n contextSnapshot: JSON.stringify({\n stepOutputs: Object.entries(context.steps).reduce((acc, [name, step]) => {\n acc[name] = { state: step.state, hasOutput: !!step.output }\n return acc\n }, {} as Record<string, any>),\n triggerData: context.trigger?.data ? 'present' : 'absent'\n })\n }, 'Step condition met, proceeding with execution')\n }\n\n // Initialize step context\n context.steps[stepName] = {\n error: undefined,\n input: undefined,\n output: undefined,\n state: 'running'\n }\n\n // Move taskSlug declaration outside try block so it's accessible in catch\n const taskSlug = step.step // Use the 'step' field for task type\n\n try {\n // Resolve input data using JSONPath\n const resolvedInput = this.resolveStepInput(step.input || {}, context)\n context.steps[stepName].input = resolvedInput\n\n if (!taskSlug) {\n throw new Error(`Step ${stepName} is missing a task type`)\n }\n\n this.logger.info({\n hasInput: !!resolvedInput,\n hasReq: !!req,\n stepName,\n taskSlug\n }, 'Queueing task')\n\n const job = await this.payload.jobs.queue({\n input: resolvedInput,\n req,\n task: taskSlug\n })\n\n // Run the job immediately\n await this.payload.jobs.run({\n limit: 1,\n req\n })\n\n // Get the job result\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n const isComplete = taskStatus?.complete === true\n const hasError = completedJob.hasError || !isComplete\n\n // Extract error information from job if available\n let errorMessage: string | undefined\n if (hasError) {\n // Try to get error from the latest log entry\n if (completedJob.log && completedJob.log.length > 0) {\n const latestLog = completedJob.log[completedJob.log.length - 1]\n errorMessage = latestLog.error?.message || latestLog.error\n }\n\n // Fallback to top-level error\n if (!errorMessage && completedJob.error) {\n errorMessage = completedJob.error.message || completedJob.error\n }\n\n // Final fallback to generic message\n if (!errorMessage) {\n errorMessage = `Task ${taskSlug} failed without detailed error information`\n }\n }\n\n const result: {\n error: string | undefined\n output: unknown\n state: 'failed' | 'succeeded'\n } = {\n error: errorMessage,\n output: taskStatus?.output || {},\n state: isComplete ? 'succeeded' : 'failed'\n }\n\n // Store the output and error\n context.steps[stepName].output = result.output\n context.steps[stepName].state = result.state\n if (result.error) {\n context.steps[stepName].error = result.error\n }\n\n this.logger.debug({context}, 'Step execution context')\n\n if (result.state !== 'succeeded') {\n throw new Error(result.error || `Step ${stepName} failed`)\n }\n\n this.logger.info({\n output: result.output,\n stepName\n }, 'Step completed')\n\n // Update workflow run with current step results if workflowRunId is provided\n if (workflowRunId) {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n }\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n context.steps[stepName].state = 'failed'\n context.steps[stepName].error = errorMessage\n\n this.logger.error({\n error: errorMessage,\n input: context.steps[stepName].input,\n stepName,\n taskSlug\n }, 'Step execution failed')\n\n // Update workflow run with current step results if workflowRunId is provided\n if (workflowRunId) {\n try {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n } catch (updateError) {\n this.logger.error({\n error: updateError instanceof Error ? updateError.message : 'Unknown error',\n stepName\n }, 'Failed to update workflow run context after step failure')\n }\n }\n\n throw error\n }\n }\n\n /**\n * Resolve step execution order based on dependencies\n */\n private resolveExecutionOrder(steps: WorkflowStep[]): WorkflowStep[][] {\n const stepMap = new Map<string, WorkflowStep>()\n const dependencyGraph = new Map<string, string[]>()\n const indegree = new Map<string, number>()\n\n // Build the step map and dependency graph\n for (const step of steps) {\n const stepName = step.name || `step-${steps.indexOf(step)}`\n const dependencies = step.dependencies || []\n\n stepMap.set(stepName, { ...step, name: stepName, dependencies })\n dependencyGraph.set(stepName, dependencies)\n indegree.set(stepName, dependencies.length)\n }\n\n // Topological sort to determine execution batches\n const executionBatches: WorkflowStep[][] = []\n const processed = new Set<string>()\n\n while (processed.size < steps.length) {\n const currentBatch: WorkflowStep[] = []\n\n // Find all steps with no remaining dependencies\n for (const [stepName, inDegree] of indegree.entries()) {\n if (inDegree === 0 && !processed.has(stepName)) {\n const step = stepMap.get(stepName)\n if (step) {\n currentBatch.push(step)\n }\n }\n }\n\n if (currentBatch.length === 0) {\n throw new Error('Circular dependency detected in workflow steps')\n }\n\n executionBatches.push(currentBatch)\n\n // Update indegrees for next iteration\n for (const step of currentBatch) {\n processed.add(step.name)\n\n // Reduce indegree for steps that depend on completed steps\n for (const [otherStepName, dependencies] of dependencyGraph.entries()) {\n if (dependencies.includes(step.name) && !processed.has(otherStepName)) {\n indegree.set(otherStepName, (indegree.get(otherStepName) || 0) - 1)\n }\n }\n }\n }\n\n return executionBatches\n }\n\n /**\n * Resolve step input using JSONPath expressions\n */\n private resolveStepInput(config: Record<string, unknown>, context: ExecutionContext): Record<string, unknown> {\n const resolved: Record<string, unknown> = {}\n\n this.logger.debug({\n configKeys: Object.keys(config),\n contextSteps: Object.keys(context.steps),\n triggerType: context.trigger?.type\n }, 'Starting step input resolution')\n\n for (const [key, value] of Object.entries(config)) {\n if (typeof value === 'string' && value.startsWith('$')) {\n // This is a JSONPath expression\n this.logger.debug({\n key,\n jsonPath: value,\n availableSteps: Object.keys(context.steps),\n hasTriggerData: !!context.trigger?.data,\n hasTriggerDoc: !!context.trigger?.doc\n }, 'Resolving JSONPath expression')\n\n try {\n const result = JSONPath({\n json: context,\n path: value,\n wrap: false\n })\n \n this.logger.debug({\n key,\n jsonPath: value,\n result: JSON.stringify(result).substring(0, 200),\n resultType: Array.isArray(result) ? 'array' : typeof result\n }, 'JSONPath resolved successfully')\n \n resolved[key] = result\n } catch (error) {\n this.logger.warn({\n error: error instanceof Error ? error.message : 'Unknown error',\n key,\n path: value,\n contextSnapshot: JSON.stringify(context).substring(0, 500)\n }, 'Failed to resolve JSONPath')\n resolved[key] = value // Keep original value if resolution fails\n }\n } else if (typeof value === 'object' && value !== null) {\n // Recursively resolve nested objects\n this.logger.debug({\n key,\n nestedKeys: Object.keys(value as Record<string, unknown>)\n }, 'Recursively resolving nested object')\n \n resolved[key] = this.resolveStepInput(value as Record<string, unknown>, context)\n } else {\n // Keep literal values as-is\n resolved[key] = value\n }\n }\n\n this.logger.debug({\n resolvedKeys: Object.keys(resolved),\n originalKeys: Object.keys(config)\n }, 'Step input resolution completed')\n\n return resolved\n }\n\n /**\n * Update workflow run with current context\n */\n private async updateWorkflowRunContext(\n workflowRunId: number | string,\n context: ExecutionContext,\n req: PayloadRequest\n ): Promise<void> {\n const serializeContext = () => ({\n steps: context.steps,\n trigger: {\n type: context.trigger.type,\n collection: context.trigger.collection,\n data: context.trigger.data,\n doc: context.trigger.doc,\n operation: context.trigger.operation,\n previousDoc: context.trigger.previousDoc,\n triggeredAt: context.trigger.triggeredAt,\n user: context.trigger.req?.user\n }\n })\n\n await this.payload.update({\n id: workflowRunId,\n collection: 'workflow-runs',\n data: {\n context: serializeContext()\n },\n req\n })\n }\n\n /**\n * Evaluate a condition using JSONPath\n */\n public evaluateCondition(condition: string, context: ExecutionContext): boolean {\n this.logger.debug({\n condition,\n contextKeys: Object.keys(context),\n triggerType: context.trigger?.type,\n triggerData: context.trigger?.data,\n triggerDoc: context.trigger?.doc ? 'present' : 'absent'\n }, 'Starting condition evaluation')\n\n try {\n const result = JSONPath({\n json: context,\n path: condition,\n wrap: false\n })\n\n this.logger.debug({\n condition,\n result,\n resultType: Array.isArray(result) ? 'array' : typeof result,\n resultLength: Array.isArray(result) ? result.length : undefined\n }, 'JSONPath evaluation result')\n\n // Handle different result types\n let finalResult: boolean\n if (Array.isArray(result)) {\n finalResult = result.length > 0 && Boolean(result[0])\n } else {\n finalResult = Boolean(result)\n }\n\n this.logger.debug({\n condition,\n finalResult,\n originalResult: result\n }, 'Condition evaluation completed')\n\n return finalResult\n } catch (error) {\n this.logger.warn({\n condition,\n error: error instanceof Error ? error.message : 'Unknown error',\n errorStack: error instanceof Error ? error.stack : undefined\n }, 'Failed to evaluate condition')\n\n // If condition evaluation fails, assume false\n return false\n }\n }\n\n /**\n * Execute a workflow with the given context\n */\n async execute(workflow: Workflow, context: ExecutionContext, req: PayloadRequest): Promise<void> {\n this.logger.info({\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Starting workflow execution')\n\n const serializeContext = () => ({\n steps: context.steps,\n trigger: {\n type: context.trigger.type,\n collection: context.trigger.collection,\n data: context.trigger.data,\n doc: context.trigger.doc,\n operation: context.trigger.operation,\n previousDoc: context.trigger.previousDoc,\n triggeredAt: context.trigger.triggeredAt,\n user: context.trigger.req?.user\n }\n })\n\n // Create a workflow run record\n const workflowRun = await this.payload.create({\n collection: 'workflow-runs',\n data: {\n context: serializeContext(),\n startedAt: new Date().toISOString(),\n status: 'running',\n triggeredBy: context.trigger.req?.user?.email || 'system',\n workflow: workflow.id,\n workflowVersion: workflow._version || 1\n },\n req\n })\n\n try {\n // Resolve execution order based on dependencies\n const executionBatches = this.resolveExecutionOrder(workflow.steps)\n\n this.logger.info({\n batchSizes: executionBatches.map(batch => batch.length),\n totalBatches: executionBatches.length\n }, 'Resolved step execution order')\n\n // Execute each batch in sequence, but steps within each batch in parallel\n for (let batchIndex = 0; batchIndex < executionBatches.length; batchIndex++) {\n const batch = executionBatches[batchIndex]\n\n this.logger.info({\n batchIndex,\n stepCount: batch.length,\n stepNames: batch.map(s => s.name)\n }, 'Executing batch')\n\n // Execute all steps in this batch in parallel\n const batchPromises = batch.map((step, stepIndex) =>\n this.executeStep(step, stepIndex, context, req, workflowRun.id)\n )\n\n // Wait for all steps in the current batch to complete\n await Promise.all(batchPromises)\n\n this.logger.info({\n batchIndex,\n stepCount: batch.length\n }, 'Batch completed')\n }\n\n // Update workflow run as completed\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n completedAt: new Date().toISOString(),\n context: serializeContext(),\n status: 'completed'\n },\n req\n })\n\n this.logger.info({\n runId: workflowRun.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Workflow execution completed')\n\n } catch (error) {\n // Update workflow run as failed\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n completedAt: new Date().toISOString(),\n context: serializeContext(),\n error: error instanceof Error ? error.message : 'Unknown error',\n status: 'failed'\n },\n req\n })\n\n this.logger.error({\n error: error instanceof Error ? error.message : 'Unknown error',\n runId: workflowRun.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Workflow execution failed')\n\n throw error\n }\n }\n\n /**\n * Find and execute workflows triggered by a collection operation\n */\n async executeTriggeredWorkflows(\n collection: string,\n operation: 'create' | 'delete' | 'read' | 'update',\n doc: unknown,\n previousDoc: unknown,\n req: PayloadRequest\n ): Promise<void> {\n try {\n // Find workflows with matching triggers\n const workflows = await this.payload.find({\n collection: 'workflows',\n depth: 2, // Include steps and triggers\n limit: 100,\n req\n })\n\n for (const workflow of workflows.docs) {\n // Check if this workflow has a matching trigger\n const triggers = workflow.triggers as Array<{\n collection: string\n condition?: string\n operation: string\n type: string\n }>\n\n const matchingTriggers = triggers?.filter(trigger =>\n trigger.type === 'collection-trigger' &&\n trigger.collection === collection &&\n trigger.operation === operation\n ) || []\n\n for (const trigger of matchingTriggers) {\n // Create execution context for condition evaluation\n const context: ExecutionContext = {\n steps: {},\n trigger: {\n type: 'collection',\n collection,\n doc,\n operation,\n previousDoc,\n req\n }\n }\n\n // Check trigger condition if present\n if (trigger.condition) {\n this.logger.debug({\n collection,\n operation,\n condition: trigger.condition,\n docId: (doc as any)?.id,\n docFields: doc ? Object.keys(doc) : [],\n previousDocId: (previousDoc as any)?.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Evaluating collection trigger condition')\n\n const conditionMet = this.evaluateCondition(trigger.condition, context)\n\n if (!conditionMet) {\n this.logger.info({\n collection,\n condition: trigger.condition,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name,\n docSnapshot: JSON.stringify(doc).substring(0, 200)\n }, 'Trigger condition not met, skipping workflow')\n continue\n }\n\n this.logger.info({\n collection,\n condition: trigger.condition,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name,\n docSnapshot: JSON.stringify(doc).substring(0, 200)\n }, 'Trigger condition met')\n }\n\n this.logger.info({\n collection,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Triggering workflow')\n\n // Execute the workflow\n await this.execute(workflow as Workflow, context, req)\n }\n }\n } catch (error) {\n this.logger.error({ error: error instanceof Error ? error.message : 'Unknown error' }, 'Workflow execution failed')\n this.logger.error({\n collection,\n error: error instanceof Error ? error.message : 'Unknown error',\n operation\n }, 'Failed to execute triggered workflows')\n }\n }\n}\n"],"names":["JSONPath","WorkflowExecutor","payload","logger","evaluateStepCondition","condition","context","evaluateCondition","executeStep","step","stepIndex","req","workflowRunId","stepName","name","info","hasStep","JSON","stringify","debug","availableSteps","Object","keys","steps","completedSteps","entries","filter","_","s","state","map","triggerType","trigger","type","conditionMet","contextSnapshot","stepOutputs","reduce","acc","hasOutput","output","triggerData","data","error","undefined","input","reason","skipped","updateWorkflowRunContext","taskSlug","resolvedInput","resolveStepInput","Error","hasInput","hasReq","job","jobs","queue","task","run","limit","completedJob","findByID","id","collection","taskStatus","totalTried","isComplete","complete","hasError","errorMessage","log","length","latestLog","message","result","updateError","resolveExecutionOrder","stepMap","Map","dependencyGraph","indegree","indexOf","dependencies","set","executionBatches","processed","Set","size","currentBatch","inDegree","has","get","push","add","otherStepName","includes","config","resolved","configKeys","contextSteps","key","value","startsWith","jsonPath","hasTriggerData","hasTriggerDoc","doc","json","path","wrap","substring","resultType","Array","isArray","warn","nestedKeys","resolvedKeys","originalKeys","serializeContext","operation","previousDoc","triggeredAt","user","update","contextKeys","triggerDoc","resultLength","finalResult","Boolean","originalResult","errorStack","stack","execute","workflow","workflowId","workflowName","workflowRun","create","startedAt","Date","toISOString","status","triggeredBy","email","workflowVersion","_version","batchSizes","batch","totalBatches","batchIndex","stepCount","stepNames","batchPromises","Promise","all","completedAt","runId","executeTriggeredWorkflows","workflows","find","depth","docs","triggers","matchingTriggers","docId","docFields","previousDocId","docSnapshot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/workflow-executor.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\n\nimport { JSONPath } from 'jsonpath-plus'\n\nexport type Workflow = {\n _version?: number\n id: string\n name: string\n steps: WorkflowStep[]\n triggers: WorkflowTrigger[]\n}\n\nexport type WorkflowStep = {\n condition?: string\n dependencies?: string[]\n input?: null | Record<string, unknown>\n name: string\n step: string\n}\n\nexport interface WorkflowTrigger {\n collection?: string\n condition?: string\n global?: string\n globalOperation?: string\n operation?: string\n type: string\n webhookPath?: string\n}\n\nexport interface ExecutionContext {\n steps: Record<string, {\n error?: string\n input: unknown\n output: unknown\n state: 'failed' | 'pending' | 'running' | 'succeeded'\n }>\n trigger: {\n collection?: string\n data?: unknown\n doc?: unknown\n headers?: Record<string, string>\n operation?: string\n path?: string\n previousDoc?: unknown\n req?: PayloadRequest\n triggeredAt?: string\n type: string\n user?: {\n collection?: string\n email?: string\n id?: string\n }\n }\n}\n\nexport class WorkflowExecutor {\n constructor(\n private payload: Payload,\n private logger: Payload['logger']\n ) {}\n\n /**\n * Evaluate a step condition using JSONPath\n */\n private evaluateStepCondition(condition: string, context: ExecutionContext): boolean {\n return this.evaluateCondition(condition, context)\n }\n\n /**\n * Execute a single workflow step\n */\n private async executeStep(\n step: WorkflowStep,\n stepIndex: number,\n context: ExecutionContext,\n req: PayloadRequest,\n workflowRunId?: number | string\n ): Promise<void> {\n const stepName = step.name || 'step-' + stepIndex\n\n this.logger.info({\n hasStep: 'step' in step,\n step: JSON.stringify(step),\n stepName\n }, 'Executing step')\n\n // Check step condition if present\n if (step.condition) {\n this.logger.debug({\n condition: step.condition,\n stepName,\n availableSteps: Object.keys(context.steps),\n completedSteps: Object.entries(context.steps)\n .filter(([_, s]) => s.state === 'succeeded')\n .map(([name]) => name),\n triggerType: context.trigger?.type\n }, 'Evaluating step condition')\n\n const conditionMet = this.evaluateStepCondition(step.condition, context)\n\n if (!conditionMet) {\n this.logger.info({\n condition: step.condition,\n stepName,\n contextSnapshot: JSON.stringify({\n stepOutputs: Object.entries(context.steps).reduce((acc, [name, step]) => {\n acc[name] = { state: step.state, hasOutput: !!step.output }\n return acc\n }, {} as Record<string, any>),\n triggerData: context.trigger?.data ? 'present' : 'absent'\n })\n }, 'Step condition not met, skipping')\n\n // Mark step as completed but skipped\n context.steps[stepName] = {\n error: undefined,\n input: undefined,\n output: { reason: 'Condition not met', skipped: true },\n state: 'succeeded'\n }\n\n // Update workflow run context if needed\n if (workflowRunId) {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n }\n\n return\n }\n\n this.logger.info({\n condition: step.condition,\n stepName,\n contextSnapshot: JSON.stringify({\n stepOutputs: Object.entries(context.steps).reduce((acc, [name, step]) => {\n acc[name] = { state: step.state, hasOutput: !!step.output }\n return acc\n }, {} as Record<string, any>),\n triggerData: context.trigger?.data ? 'present' : 'absent'\n })\n }, 'Step condition met, proceeding with execution')\n }\n\n // Initialize step context\n context.steps[stepName] = {\n error: undefined,\n input: undefined,\n output: undefined,\n state: 'running'\n }\n\n // Move taskSlug declaration outside try block so it's accessible in catch\n const taskSlug = step.step // Use the 'step' field for task type\n\n try {\n // Resolve input data using JSONPath\n const resolvedInput = this.resolveStepInput(step.input || {}, context)\n context.steps[stepName].input = resolvedInput\n\n if (!taskSlug) {\n throw new Error(`Step ${stepName} is missing a task type`)\n }\n\n this.logger.info({\n hasInput: !!resolvedInput,\n hasReq: !!req,\n stepName,\n taskSlug\n }, 'Queueing task')\n\n const job = await this.payload.jobs.queue({\n input: resolvedInput,\n req,\n task: taskSlug\n })\n\n // Run the job immediately\n await this.payload.jobs.run({\n limit: 1,\n req\n })\n\n // Get the job result\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n const isComplete = taskStatus?.complete === true\n const hasError = completedJob.hasError || !isComplete\n\n // Extract error information from job if available\n let errorMessage: string | undefined\n if (hasError) {\n // Try to get error from the latest log entry\n if (completedJob.log && completedJob.log.length > 0) {\n const latestLog = completedJob.log[completedJob.log.length - 1]\n errorMessage = latestLog.error?.message || latestLog.error\n }\n\n // Fallback to top-level error\n if (!errorMessage && completedJob.error) {\n errorMessage = completedJob.error.message || completedJob.error\n }\n\n // Final fallback to generic message\n if (!errorMessage) {\n errorMessage = `Task ${taskSlug} failed without detailed error information`\n }\n }\n\n const result: {\n error: string | undefined\n output: unknown\n state: 'failed' | 'succeeded'\n } = {\n error: errorMessage,\n output: taskStatus?.output || {},\n state: isComplete ? 'succeeded' : 'failed'\n }\n\n // Store the output and error\n context.steps[stepName].output = result.output\n context.steps[stepName].state = result.state\n if (result.error) {\n context.steps[stepName].error = result.error\n }\n\n this.logger.debug({context}, 'Step execution context')\n\n if (result.state !== 'succeeded') {\n throw new Error(result.error || `Step ${stepName} failed`)\n }\n\n this.logger.info({\n output: result.output,\n stepName\n }, 'Step completed')\n\n // Update workflow run with current step results if workflowRunId is provided\n if (workflowRunId) {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n }\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n context.steps[stepName].state = 'failed'\n context.steps[stepName].error = errorMessage\n\n this.logger.error({\n error: errorMessage,\n input: context.steps[stepName].input,\n stepName,\n taskSlug\n }, 'Step execution failed')\n\n // Update workflow run with current step results if workflowRunId is provided\n if (workflowRunId) {\n try {\n await this.updateWorkflowRunContext(workflowRunId, context, req)\n } catch (updateError) {\n this.logger.error({\n error: updateError instanceof Error ? updateError.message : 'Unknown error',\n stepName\n }, 'Failed to update workflow run context after step failure')\n }\n }\n\n throw error\n }\n }\n\n /**\n * Resolve step execution order based on dependencies\n */\n private resolveExecutionOrder(steps: WorkflowStep[]): WorkflowStep[][] {\n const stepMap = new Map<string, WorkflowStep>()\n const dependencyGraph = new Map<string, string[]>()\n const indegree = new Map<string, number>()\n\n // Build the step map and dependency graph\n for (const step of steps) {\n const stepName = step.name || `step-${steps.indexOf(step)}`\n const dependencies = step.dependencies || []\n\n stepMap.set(stepName, { ...step, name: stepName, dependencies })\n dependencyGraph.set(stepName, dependencies)\n indegree.set(stepName, dependencies.length)\n }\n\n // Topological sort to determine execution batches\n const executionBatches: WorkflowStep[][] = []\n const processed = new Set<string>()\n\n while (processed.size < steps.length) {\n const currentBatch: WorkflowStep[] = []\n\n // Find all steps with no remaining dependencies\n for (const [stepName, inDegree] of indegree.entries()) {\n if (inDegree === 0 && !processed.has(stepName)) {\n const step = stepMap.get(stepName)\n if (step) {\n currentBatch.push(step)\n }\n }\n }\n\n if (currentBatch.length === 0) {\n throw new Error('Circular dependency detected in workflow steps')\n }\n\n executionBatches.push(currentBatch)\n\n // Update indegrees for next iteration\n for (const step of currentBatch) {\n processed.add(step.name)\n\n // Reduce indegree for steps that depend on completed steps\n for (const [otherStepName, dependencies] of dependencyGraph.entries()) {\n if (dependencies.includes(step.name) && !processed.has(otherStepName)) {\n indegree.set(otherStepName, (indegree.get(otherStepName) || 0) - 1)\n }\n }\n }\n }\n\n return executionBatches\n }\n\n /**\n * Resolve step input using JSONPath expressions\n */\n private resolveStepInput(config: Record<string, unknown>, context: ExecutionContext): Record<string, unknown> {\n const resolved: Record<string, unknown> = {}\n\n this.logger.debug({\n configKeys: Object.keys(config),\n contextSteps: Object.keys(context.steps),\n triggerType: context.trigger?.type\n }, 'Starting step input resolution')\n\n for (const [key, value] of Object.entries(config)) {\n if (typeof value === 'string' && value.startsWith('$')) {\n // This is a JSONPath expression\n this.logger.debug({\n key,\n jsonPath: value,\n availableSteps: Object.keys(context.steps),\n hasTriggerData: !!context.trigger?.data,\n hasTriggerDoc: !!context.trigger?.doc\n }, 'Resolving JSONPath expression')\n\n try {\n const result = JSONPath({\n json: context,\n path: value,\n wrap: false\n })\n \n this.logger.debug({\n key,\n jsonPath: value,\n result: JSON.stringify(result).substring(0, 200),\n resultType: Array.isArray(result) ? 'array' : typeof result\n }, 'JSONPath resolved successfully')\n \n resolved[key] = result\n } catch (error) {\n this.logger.warn({\n error: error instanceof Error ? error.message : 'Unknown error',\n key,\n path: value,\n contextSnapshot: JSON.stringify(context).substring(0, 500)\n }, 'Failed to resolve JSONPath')\n resolved[key] = value // Keep original value if resolution fails\n }\n } else if (typeof value === 'object' && value !== null) {\n // Recursively resolve nested objects\n this.logger.debug({\n key,\n nestedKeys: Object.keys(value as Record<string, unknown>)\n }, 'Recursively resolving nested object')\n \n resolved[key] = this.resolveStepInput(value as Record<string, unknown>, context)\n } else {\n // Keep literal values as-is\n resolved[key] = value\n }\n }\n\n this.logger.debug({\n resolvedKeys: Object.keys(resolved),\n originalKeys: Object.keys(config)\n }, 'Step input resolution completed')\n\n return resolved\n }\n\n /**\n * Update workflow run with current context\n */\n private async updateWorkflowRunContext(\n workflowRunId: number | string,\n context: ExecutionContext,\n req: PayloadRequest\n ): Promise<void> {\n const serializeContext = () => ({\n steps: context.steps,\n trigger: {\n type: context.trigger.type,\n collection: context.trigger.collection,\n data: context.trigger.data,\n doc: context.trigger.doc,\n operation: context.trigger.operation,\n previousDoc: context.trigger.previousDoc,\n triggeredAt: context.trigger.triggeredAt,\n user: context.trigger.req?.user\n }\n })\n\n await this.payload.update({\n id: workflowRunId,\n collection: 'workflow-runs',\n data: {\n context: serializeContext()\n },\n req\n })\n }\n\n /**\n * Evaluate a condition using JSONPath\n */\n public evaluateCondition(condition: string, context: ExecutionContext): boolean {\n this.logger.debug({\n condition,\n contextKeys: Object.keys(context),\n triggerType: context.trigger?.type,\n triggerData: context.trigger?.data,\n triggerDoc: context.trigger?.doc ? 'present' : 'absent'\n }, 'Starting condition evaluation')\n\n try {\n const result = JSONPath({\n json: context,\n path: condition,\n wrap: false\n })\n\n this.logger.debug({\n condition,\n result,\n resultType: Array.isArray(result) ? 'array' : typeof result,\n resultLength: Array.isArray(result) ? result.length : undefined\n }, 'JSONPath evaluation result')\n\n // Handle different result types\n let finalResult: boolean\n if (Array.isArray(result)) {\n finalResult = result.length > 0 && Boolean(result[0])\n } else {\n finalResult = Boolean(result)\n }\n\n this.logger.debug({\n condition,\n finalResult,\n originalResult: result\n }, 'Condition evaluation completed')\n\n return finalResult\n } catch (error) {\n this.logger.warn({\n condition,\n error: error instanceof Error ? error.message : 'Unknown error',\n errorStack: error instanceof Error ? error.stack : undefined\n }, 'Failed to evaluate condition')\n\n // If condition evaluation fails, assume false\n return false\n }\n }\n\n /**\n * Execute a workflow with the given context\n */\n async execute(workflow: Workflow, context: ExecutionContext, req: PayloadRequest): Promise<void> {\n this.logger.info({\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Starting workflow execution')\n\n const serializeContext = () => ({\n steps: context.steps,\n trigger: {\n type: context.trigger.type,\n collection: context.trigger.collection,\n data: context.trigger.data,\n doc: context.trigger.doc,\n operation: context.trigger.operation,\n previousDoc: context.trigger.previousDoc,\n triggeredAt: context.trigger.triggeredAt,\n user: context.trigger.req?.user\n }\n })\n\n // Create a workflow run record\n const workflowRun = await this.payload.create({\n collection: 'workflow-runs',\n data: {\n context: serializeContext(),\n startedAt: new Date().toISOString(),\n status: 'running',\n triggeredBy: context.trigger.req?.user?.email || 'system',\n workflow: workflow.id,\n workflowVersion: workflow._version || 1\n },\n req\n })\n\n try {\n // Resolve execution order based on dependencies\n const executionBatches = this.resolveExecutionOrder(workflow.steps)\n\n this.logger.info({\n batchSizes: executionBatches.map(batch => batch.length),\n totalBatches: executionBatches.length\n }, 'Resolved step execution order')\n\n // Execute each batch in sequence, but steps within each batch in parallel\n for (let batchIndex = 0; batchIndex < executionBatches.length; batchIndex++) {\n const batch = executionBatches[batchIndex]\n\n this.logger.info({\n batchIndex,\n stepCount: batch.length,\n stepNames: batch.map(s => s.name)\n }, 'Executing batch')\n\n // Execute all steps in this batch in parallel\n const batchPromises = batch.map((step, stepIndex) =>\n this.executeStep(step, stepIndex, context, req, workflowRun.id)\n )\n\n // Wait for all steps in the current batch to complete\n await Promise.all(batchPromises)\n\n this.logger.info({\n batchIndex,\n stepCount: batch.length\n }, 'Batch completed')\n }\n\n // Update workflow run as completed\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n completedAt: new Date().toISOString(),\n context: serializeContext(),\n status: 'completed'\n },\n req\n })\n\n this.logger.info({\n runId: workflowRun.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Workflow execution completed')\n\n } catch (error) {\n // Update workflow run as failed\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n completedAt: new Date().toISOString(),\n context: serializeContext(),\n error: error instanceof Error ? error.message : 'Unknown error',\n status: 'failed'\n },\n req\n })\n\n this.logger.error({\n error: error instanceof Error ? error.message : 'Unknown error',\n runId: workflowRun.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Workflow execution failed')\n\n throw error\n }\n }\n\n /**\n * Find and execute workflows triggered by a collection operation\n */\n async executeTriggeredWorkflows(\n collection: string,\n operation: 'create' | 'delete' | 'read' | 'update',\n doc: unknown,\n previousDoc: unknown,\n req: PayloadRequest\n ): Promise<void> {\n this.logger.info({\n collection,\n operation,\n docId: (doc as any)?.id\n }, 'executeTriggeredWorkflows called')\n \n try {\n // Find workflows with matching triggers\n const workflows = await this.payload.find({\n collection: 'workflows',\n depth: 2, // Include steps and triggers\n limit: 100,\n req\n })\n \n this.logger.info({\n workflowCount: workflows.docs.length\n }, 'Found workflows to check')\n\n for (const workflow of workflows.docs) {\n // Check if this workflow has a matching trigger\n const triggers = workflow.triggers as Array<{\n collection?: string\n collectionSlug?: string\n condition?: string\n operation: string\n type: string\n }>\n \n this.logger.debug({\n workflowId: workflow.id,\n workflowName: workflow.name,\n triggerCount: triggers?.length || 0,\n triggers: triggers?.map(t => ({\n type: t.type,\n collection: t.collection,\n collectionSlug: t.collectionSlug,\n operation: t.operation\n }))\n }, 'Checking workflow triggers')\n\n const matchingTriggers = triggers?.filter(trigger =>\n trigger.type === 'collection-trigger' &&\n (trigger.collection === collection || trigger.collectionSlug === collection) &&\n trigger.operation === operation\n ) || []\n \n this.logger.info({\n workflowId: workflow.id,\n workflowName: workflow.name,\n matchingTriggerCount: matchingTriggers.length,\n targetCollection: collection,\n targetOperation: operation\n }, 'Matching triggers found')\n\n for (const trigger of matchingTriggers) {\n // Create execution context for condition evaluation\n const context: ExecutionContext = {\n steps: {},\n trigger: {\n type: 'collection',\n collection,\n doc,\n operation,\n previousDoc,\n req\n }\n }\n\n // Check trigger condition if present\n if (trigger.condition) {\n this.logger.debug({\n collection,\n operation,\n condition: trigger.condition,\n docId: (doc as any)?.id,\n docFields: doc ? Object.keys(doc) : [],\n previousDocId: (previousDoc as any)?.id,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Evaluating collection trigger condition')\n\n const conditionMet = this.evaluateCondition(trigger.condition, context)\n\n if (!conditionMet) {\n this.logger.info({\n collection,\n condition: trigger.condition,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name,\n docSnapshot: JSON.stringify(doc).substring(0, 200)\n }, 'Trigger condition not met, skipping workflow')\n continue\n }\n\n this.logger.info({\n collection,\n condition: trigger.condition,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name,\n docSnapshot: JSON.stringify(doc).substring(0, 200)\n }, 'Trigger condition met')\n }\n\n this.logger.info({\n collection,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Triggering workflow')\n\n // Execute the workflow\n await this.execute(workflow as Workflow, context, req)\n }\n }\n } catch (error) {\n this.logger.error({ error: error instanceof Error ? error.message : 'Unknown error' }, 'Workflow execution failed')\n this.logger.error({\n collection,\n error: error instanceof Error ? error.message : 'Unknown error',\n operation\n }, 'Failed to execute triggered workflows')\n }\n }\n}\n"],"names":["JSONPath","WorkflowExecutor","payload","logger","evaluateStepCondition","condition","context","evaluateCondition","executeStep","step","stepIndex","req","workflowRunId","stepName","name","info","hasStep","JSON","stringify","debug","availableSteps","Object","keys","steps","completedSteps","entries","filter","_","s","state","map","triggerType","trigger","type","conditionMet","contextSnapshot","stepOutputs","reduce","acc","hasOutput","output","triggerData","data","error","undefined","input","reason","skipped","updateWorkflowRunContext","taskSlug","resolvedInput","resolveStepInput","Error","hasInput","hasReq","job","jobs","queue","task","run","limit","completedJob","findByID","id","collection","taskStatus","totalTried","isComplete","complete","hasError","errorMessage","log","length","latestLog","message","result","updateError","resolveExecutionOrder","stepMap","Map","dependencyGraph","indegree","indexOf","dependencies","set","executionBatches","processed","Set","size","currentBatch","inDegree","has","get","push","add","otherStepName","includes","config","resolved","configKeys","contextSteps","key","value","startsWith","jsonPath","hasTriggerData","hasTriggerDoc","doc","json","path","wrap","substring","resultType","Array","isArray","warn","nestedKeys","resolvedKeys","originalKeys","serializeContext","operation","previousDoc","triggeredAt","user","update","contextKeys","triggerDoc","resultLength","finalResult","Boolean","originalResult","errorStack","stack","execute","workflow","workflowId","workflowName","workflowRun","create","startedAt","Date","toISOString","status","triggeredBy","email","workflowVersion","_version","batchSizes","batch","totalBatches","batchIndex","stepCount","stepNames","batchPromises","Promise","all","completedAt","runId","executeTriggeredWorkflows","docId","workflows","find","depth","workflowCount","docs","triggers","triggerCount","t","collectionSlug","matchingTriggers","matchingTriggerCount","targetCollection","targetOperation","docFields","previousDocId","docSnapshot"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xtr-dev/payload-automation",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "PayloadCMS Automation Plugin - Comprehensive workflow automation system with visual workflow building, execution tracking, and step types",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|