@xtr-dev/payload-automation 0.0.48 → 0.0.49

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.
@@ -148,7 +148,7 @@ export class WorkflowExecutor {
148
148
  task: step.stepType
149
149
  });
150
150
  if (this.config.debug) {
151
- this.logger.info(`Queued job for step '${step.stepName}':`, job);
151
+ this.logger.info(job, `Queued job for step '${step.stepName}'`);
152
152
  }
153
153
  // Update the job with automation context fields
154
154
  // This allows tracking which workflow run triggered this job
@@ -170,7 +170,7 @@ export class WorkflowExecutor {
170
170
  req
171
171
  });
172
172
  if (this.config.debug) {
173
- this.logger.info(`Run result for step '${step.stepName}':`, runResult);
173
+ this.logger.info(runResult, `Run result for step '${step.stepName}'`);
174
174
  }
175
175
  // Check the job status from the run result
176
176
  // runByID returns { jobStatus: { [jobId]: { status: 'success' | 'error' | ... } }, ... }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/workflow-executor.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\n\nimport {\n evaluateCondition as evalCondition,\n resolveStepInput as resolveInput,\n type ExpressionContext\n} from './expression-engine.js'\nimport {getPluginConfig} from \"../plugin/get-plugin-config.js\";\nimport {WorkflowsPluginConfig} from \"../plugin/config-types.js\";\n\n/**\n * Type for workflow data from the refactored collection\n */\nexport type PayloadWorkflow = {\n id: number | string\n name: string\n description?: string | null\n enabled?: boolean\n triggers?: Array<any> | null\n steps?: Array<{\n id?: string\n step: any\n stepName?: string | null\n inputOverrides?: Record<string, unknown> | null\n condition?: string | null\n dependencies?: Array<{ stepIndex: number }> | null\n position?: { x: number; y: number } | null\n }> | null\n errorHandling?: 'stop' | 'continue' | 'retry' | null\n maxRetries?: number | null\n retryDelay?: number | null\n timeout?: number | null\n [key: string]: unknown\n}\n\n/**\n * Type for a resolved workflow step (with base step data merged)\n */\nexport type ResolvedStep = {\n stepIndex: number\n stepId: string | number\n stepName: string\n stepType: string\n config: Record<string, unknown>\n condition?: string | null\n dependencies: number[]\n retryOnFailure?: boolean\n maxRetries?: number\n retryDelay?: number\n}\n\nexport interface ExecutionContext {\n steps: Record<string, any>\n trigger: Record<string, any>\n}\n\nexport interface StepResult {\n step?: string | number\n stepName: string\n stepIndex: number\n status: 'pending' | 'running' | 'succeeded' | 'failed' | 'skipped'\n startedAt?: string\n completedAt?: string\n duration?: number\n input?: Record<string, unknown>\n output?: Record<string, unknown>\n error?: string\n retryCount?: number\n}\n\n/**\n * Workflow context stored on jobs created by workflow execution.\n * Uses relationship IDs that link to the respective collections.\n */\nexport interface WorkflowJobMeta {\n automationWorkflowId: string | number\n automationWorkflowRunId: string | number\n automationTriggerId?: string | number\n}\n\nexport class WorkflowExecutor {\n private config: WorkflowsPluginConfig<string, string>;\n\n constructor(\n private payload: Payload,\n private logger: Payload['logger']\n ) {\n this.config = getPluginConfig(payload)\n }\n\n /**\n * Resolve workflow steps by loading base step configurations and merging with overrides\n */\n private async resolveWorkflowSteps(workflow: PayloadWorkflow): Promise<ResolvedStep[]> {\n const resolvedSteps: ResolvedStep[] = []\n\n if (!workflow.steps || workflow.steps.length === 0) {\n return resolvedSteps\n }\n\n for (let i = 0; i < workflow.steps.length; i++) {\n const workflowStep = workflow.steps[i]\n\n let baseStep: any\n if (typeof workflowStep.step === 'object' && workflowStep.step !== null) {\n baseStep = workflowStep.step\n } else {\n try {\n baseStep = await this.payload.findByID({\n collection: 'automation-steps',\n id: workflowStep.step,\n depth: 0\n })\n } catch (error) {\n this.logger.error({\n stepId: workflowStep.step,\n stepIndex: i,\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to load step configuration')\n throw new Error(`Failed to load step ${workflowStep.step}: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n const baseConfig = (baseStep.config as Record<string, unknown>) || {}\n const overrides = (workflowStep.inputOverrides as Record<string, unknown>) || {}\n const mergedConfig = { ...baseConfig, ...overrides }\n\n const dependencies = (workflowStep.dependencies || []).map(d => d.stepIndex)\n\n resolvedSteps.push({\n stepIndex: i,\n stepId: baseStep.id,\n stepName: workflowStep.stepName || baseStep.name || `step-${i}`,\n stepType: baseStep.type as string,\n config: mergedConfig,\n condition: workflowStep.condition,\n dependencies,\n retryOnFailure: baseStep.retryOnFailure,\n maxRetries: baseStep.maxRetries || workflow.maxRetries || 3,\n retryDelay: baseStep.retryDelay || workflow.retryDelay || 1000\n })\n }\n\n return resolvedSteps\n }\n\n /**\n * Resolve step execution order based on dependencies\n */\n private resolveExecutionOrder(steps: ResolvedStep[]): ResolvedStep[][] {\n const indegree = new Map<number, number>()\n const dependents = new Map<number, number[]>()\n\n for (const step of steps) {\n indegree.set(step.stepIndex, step.dependencies.length)\n dependents.set(step.stepIndex, [])\n }\n\n for (const step of steps) {\n for (const depIndex of step.dependencies) {\n const deps = dependents.get(depIndex) || []\n deps.push(step.stepIndex)\n dependents.set(depIndex, deps)\n }\n }\n\n const executionBatches: ResolvedStep[][] = []\n const processed = new Set<number>()\n\n while (processed.size < steps.length) {\n const currentBatch: ResolvedStep[] = []\n\n for (const step of steps) {\n if (!processed.has(step.stepIndex) && indegree.get(step.stepIndex) === 0) {\n currentBatch.push(step)\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 for (const step of currentBatch) {\n processed.add(step.stepIndex)\n for (const depIndex of dependents.get(step.stepIndex) || []) {\n indegree.set(depIndex, (indegree.get(depIndex) || 1) - 1)\n }\n }\n }\n\n return executionBatches\n }\n\n /**\n * Execute a single workflow step\n */\n private async executeStep(\n step: ResolvedStep,\n context: ExecutionContext,\n req: PayloadRequest,\n stepResults: StepResult[],\n jobMeta: WorkflowJobMeta\n ): Promise<StepResult> {\n const result: StepResult = {\n step: step.stepId,\n stepName: step.stepName,\n stepIndex: step.stepIndex,\n status: 'running',\n startedAt: new Date().toISOString(),\n retryCount: 0\n }\n\n this.logger.info({\n stepName: step.stepName,\n stepType: step.stepType,\n stepIndex: step.stepIndex\n }, 'Executing step')\n\n // Check step condition if present\n if (step.condition) {\n const conditionMet = await this.evaluateCondition(step.condition, context)\n if (!conditionMet) {\n this.logger.info({\n stepName: step.stepName,\n condition: step.condition\n }, 'Step condition not met, skipping')\n\n result.status = 'skipped'\n result.completedAt = new Date().toISOString()\n result.output = { reason: 'Condition not met', skipped: true }\n\n context.steps[step.stepName] = {\n state: 'skipped',\n output: result.output\n }\n\n return result\n }\n }\n\n // Resolve input using JSONata expressions\n const resolvedInput = await this.resolveStepInput(step.config, context)\n result.input = resolvedInput\n\n context.steps[step.stepName] = {\n state: 'running',\n input: resolvedInput\n }\n\n try {\n const job = await this.payload.jobs.queue({\n input: resolvedInput,\n req,\n task: step.stepType,\n })\n\n if (this.config.debug) {\n this.logger.info(`Queued job for step '${step.stepName}':`, job)\n }\n\n // Update the job with automation context fields\n // This allows tracking which workflow run triggered this job\n await this.payload.update({\n collection: 'payload-jobs',\n id: job.id,\n data: {\n automationWorkflow: jobMeta.automationWorkflowId,\n automationWorkflowRun: jobMeta.automationWorkflowRunId,\n automationTrigger: jobMeta.automationTriggerId,\n automationStepName: step.stepName,\n },\n req,\n })\n\n // Run the job and capture the result directly from runByID\n // This is important because PayloadCMS may delete jobs on completion (deleteJobOnComplete: true by default)\n const runResult = await this.payload.jobs.runByID({\n id: job.id,\n req\n })\n\n if (this.config.debug) {\n this.logger.info(`Run result for step '${step.stepName}':`, runResult)\n }\n\n // Check the job status from the run result\n // runByID returns { jobStatus: { [jobId]: { status: 'success' | 'error' | ... } }, ... }\n const jobStatus = (runResult as any)?.jobStatus?.[job.id]\n const jobSucceeded = jobStatus?.status === 'success'\n\n if (jobSucceeded) {\n // Job completed successfully - try to get output from the job if it still exists\n // Note: Job may have been deleted if deleteJobOnComplete is true\n let output: Record<string, unknown> = {}\n try {\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n output = taskStatus?.output || {}\n } catch {\n // Job was deleted after completion - this is expected behavior with deleteJobOnComplete: true\n // The job succeeded, so we proceed without the output\n this.logger.debug({ stepName: step.stepName }, 'Job was deleted after successful completion (deleteJobOnComplete)')\n }\n\n result.status = 'succeeded'\n result.output = output\n result.completedAt = new Date().toISOString()\n result.duration = new Date(result.completedAt).getTime() - new Date(result.startedAt!).getTime()\n } else {\n // Job failed - try to get error details from the job\n let errorMessage = 'Task failed'\n try {\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n if (completedJob.log && completedJob.log.length > 0) {\n const latestLog = completedJob.log[completedJob.log.length - 1]\n errorMessage = latestLog.error?.message || latestLog.error || errorMessage\n }\n if (taskStatus?.output?.errorMessage) {\n errorMessage = taskStatus.output.errorMessage\n }\n } catch {\n // Job may have been deleted - use the job status from run result\n errorMessage = `Task failed with status: ${jobStatus?.status || 'unknown'}`\n }\n throw new Error(errorMessage)\n }\n\n context.steps[step.stepName] = {\n state: 'succeeded',\n input: resolvedInput,\n output: result.output\n }\n\n this.logger.info({\n stepName: step.stepName,\n duration: result.duration\n }, 'Step completed successfully')\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n result.status = 'failed'\n result.error = errorMessage\n result.completedAt = new Date().toISOString()\n result.duration = new Date(result.completedAt).getTime() - new Date(result.startedAt!).getTime()\n\n context.steps[step.stepName] = {\n state: 'failed',\n input: resolvedInput,\n error: errorMessage\n }\n\n this.logger.error({\n stepName: step.stepName,\n error: errorMessage\n }, 'Step execution failed')\n\n throw error\n }\n\n return result\n }\n\n /**\n * Resolve step input using JSONata expressions\n */\n private async resolveStepInput(\n config: Record<string, unknown>,\n context: ExecutionContext\n ): Promise<Record<string, unknown>> {\n try {\n return await resolveInput(config, context as ExpressionContext, { timeout: 5000 })\n } catch (error) {\n this.logger.warn({\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to resolve step input, using raw config')\n return config\n }\n }\n\n /**\n * Evaluate a condition using JSONata\n */\n public async evaluateCondition(condition: string, context: ExecutionContext): Promise<boolean> {\n try {\n return await evalCondition(condition, context as ExpressionContext, { timeout: 5000 })\n } catch (error) {\n this.logger.warn({\n condition,\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to evaluate condition')\n return false\n }\n }\n\n /**\n * Safely serialize an object for storage\n */\n private safeSerialize(obj: unknown): unknown {\n const seen = new WeakSet()\n\n // Keys to completely exclude from serialization\n const excludeKeys = new Set([\n 'table',\n 'schema',\n '_',\n '__',\n 'payload', // Exclude payload instance (contains entire config)\n 'res', // Exclude response object\n 'transactionID',\n 'i18n',\n 'fallbackLocale',\n ])\n\n // For req object, only keep these useful debugging properties\n const reqAllowedKeys = new Set([\n 'payloadAPI', // 'local', 'REST', or 'GraphQL'\n 'locale',\n 'user', // authenticated user\n 'method', // HTTP method\n 'url', // request URL\n ])\n\n const serialize = (value: unknown, parentKey?: string): unknown => {\n if (value === null || typeof value !== 'object') {\n return value\n }\n if (seen.has(value)) {\n return '[Circular Reference]'\n }\n seen.add(value)\n\n if (Array.isArray(value)) {\n return value.map((v) => serialize(v))\n }\n\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value as Record<string, unknown>)) {\n try {\n if (excludeKeys.has(key)) {\n continue\n }\n // Special handling for req object - only include allowed keys\n if (parentKey === 'req' && !reqAllowedKeys.has(key)) {\n continue\n }\n result[key] = serialize(val, key)\n } catch {\n result[key] = '[Non-serializable]'\n }\n }\n return result\n }\n\n return serialize(obj)\n }\n\n /**\n * Execute a workflow with the given context\n */\n async execute(\n workflow: PayloadWorkflow,\n context: ExecutionContext,\n req: PayloadRequest,\n firedTrigger?: any\n ): Promise<void> {\n this.logger.info({\n workflowId: workflow.id,\n workflowName: workflow.name,\n triggerId: firedTrigger?.id,\n triggerName: firedTrigger?.name\n }, 'Starting workflow execution')\n\n const resolvedSteps = await this.resolveWorkflowSteps(workflow)\n const stepResults: StepResult[] = []\n\n for (const step of resolvedSteps) {\n stepResults.push({\n step: step.stepId,\n stepName: step.stepName,\n stepIndex: step.stepIndex,\n status: 'pending'\n })\n }\n\n const workflowRun = await this.payload.create({\n collection: 'workflow-runs',\n data: {\n workflow: workflow.id,\n workflowVersion: 1,\n firedTrigger: firedTrigger?.id,\n triggerData: this.safeSerialize(context.trigger),\n status: 'running',\n startedAt: new Date().toISOString(),\n triggeredBy: context.trigger.req?.user?.email || 'system',\n stepResults,\n context: this.safeSerialize(context),\n inputs: this.safeSerialize(context.trigger),\n logs: [{\n timestamp: new Date().toISOString(),\n level: 'info',\n message: 'Workflow execution started'\n }]\n },\n req\n })\n\n this.logger.info({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id\n }, 'Workflow run record created')\n\n // Create job metadata for tracking workflow context in payload-jobs\n const jobMeta: WorkflowJobMeta = {\n automationWorkflowId: workflow.id,\n automationWorkflowRunId: workflowRun.id,\n automationTriggerId: firedTrigger?.id,\n }\n\n try {\n const executionBatches = this.resolveExecutionOrder(resolvedSteps)\n\n this.logger.info({\n batchCount: executionBatches.length,\n batchSizes: executionBatches.map(b => b.length)\n }, 'Resolved step execution order')\n\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.stepName)\n }, 'Executing batch')\n\n const batchPromises = batch.map(async (step) => {\n try {\n const result = await this.executeStep(step, context, req, stepResults, jobMeta)\n const idx = stepResults.findIndex(r => r.stepIndex === step.stepIndex)\n if (idx !== -1) {\n stepResults[idx] = result\n }\n return result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n const idx = stepResults.findIndex(r => r.stepIndex === step.stepIndex)\n if (idx !== -1) {\n stepResults[idx] = {\n ...stepResults[idx],\n status: 'failed',\n error: errorMessage,\n completedAt: new Date().toISOString()\n }\n }\n\n if (workflow.errorHandling === 'stop') {\n throw error\n }\n this.logger.warn({\n stepName: step.stepName,\n error: errorMessage\n }, 'Step failed but continuing due to error handling setting')\n }\n })\n\n await Promise.all(batchPromises)\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n stepResults,\n context: this.safeSerialize(context)\n },\n req\n })\n }\n\n const outputs: Record<string, unknown> = {}\n for (const result of stepResults) {\n if (result.status === 'succeeded' && result.output) {\n outputs[result.stepName] = result.output\n }\n }\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n status: 'completed',\n completedAt: new Date().toISOString(),\n stepResults,\n context: this.safeSerialize(context),\n outputs,\n logs: [\n ...(workflowRun.logs || []),\n {\n timestamp: new Date().toISOString(),\n level: 'info',\n message: 'Workflow execution completed successfully'\n }\n ]\n },\n req\n })\n\n this.logger.info({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id\n }, 'Workflow execution completed')\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n status: 'failed',\n completedAt: new Date().toISOString(),\n stepResults,\n context: this.safeSerialize(context),\n error: errorMessage,\n logs: [\n ...(workflowRun.logs || []),\n {\n timestamp: new Date().toISOString(),\n level: 'error',\n message: `Workflow execution failed: ${errorMessage}`\n }\n ]\n },\n req\n })\n\n this.logger.error({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id,\n error: errorMessage\n }, 'Workflow execution failed')\n\n throw error\n }\n }\n}\n"],"names":["evaluateCondition","evalCondition","resolveStepInput","resolveInput","getPluginConfig","WorkflowExecutor","config","payload","logger","resolveWorkflowSteps","workflow","resolvedSteps","steps","length","i","workflowStep","baseStep","step","findByID","collection","id","depth","error","stepId","stepIndex","Error","message","baseConfig","overrides","inputOverrides","mergedConfig","dependencies","map","d","push","stepName","name","stepType","type","condition","retryOnFailure","maxRetries","retryDelay","resolveExecutionOrder","indegree","Map","dependents","set","depIndex","deps","get","executionBatches","processed","Set","size","currentBatch","has","add","executeStep","context","req","stepResults","jobMeta","result","status","startedAt","Date","toISOString","retryCount","info","conditionMet","completedAt","output","reason","skipped","state","resolvedInput","input","job","jobs","queue","task","debug","update","data","automationWorkflow","automationWorkflowId","automationWorkflowRun","automationWorkflowRunId","automationTrigger","automationTriggerId","automationStepName","runResult","runByID","jobStatus","jobSucceeded","completedJob","taskStatus","taskSlug","totalTried","duration","getTime","errorMessage","log","latestLog","timeout","warn","safeSerialize","obj","seen","WeakSet","excludeKeys","reqAllowedKeys","serialize","value","parentKey","Array","isArray","v","key","val","Object","entries","execute","firedTrigger","workflowId","workflowName","triggerId","triggerName","workflowRun","create","workflowVersion","triggerData","trigger","triggeredBy","user","email","inputs","logs","timestamp","level","workflowRunId","batchCount","batchSizes","b","batchIndex","batch","stepCount","stepNames","s","batchPromises","idx","findIndex","r","errorHandling","Promise","all","outputs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/core/workflow-executor.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\n\nimport {\n evaluateCondition as evalCondition,\n resolveStepInput as resolveInput,\n type ExpressionContext\n} from './expression-engine.js'\nimport {getPluginConfig} from \"../plugin/get-plugin-config.js\";\nimport {WorkflowsPluginConfig} from \"../plugin/config-types.js\";\n\n/**\n * Type for workflow data from the refactored collection\n */\nexport type PayloadWorkflow = {\n id: number | string\n name: string\n description?: string | null\n enabled?: boolean\n triggers?: Array<any> | null\n steps?: Array<{\n id?: string\n step: any\n stepName?: string | null\n inputOverrides?: Record<string, unknown> | null\n condition?: string | null\n dependencies?: Array<{ stepIndex: number }> | null\n position?: { x: number; y: number } | null\n }> | null\n errorHandling?: 'stop' | 'continue' | 'retry' | null\n maxRetries?: number | null\n retryDelay?: number | null\n timeout?: number | null\n [key: string]: unknown\n}\n\n/**\n * Type for a resolved workflow step (with base step data merged)\n */\nexport type ResolvedStep = {\n stepIndex: number\n stepId: string | number\n stepName: string\n stepType: string\n config: Record<string, unknown>\n condition?: string | null\n dependencies: number[]\n retryOnFailure?: boolean\n maxRetries?: number\n retryDelay?: number\n}\n\nexport interface ExecutionContext {\n steps: Record<string, any>\n trigger: Record<string, any>\n}\n\nexport interface StepResult {\n step?: string | number\n stepName: string\n stepIndex: number\n status: 'pending' | 'running' | 'succeeded' | 'failed' | 'skipped'\n startedAt?: string\n completedAt?: string\n duration?: number\n input?: Record<string, unknown>\n output?: Record<string, unknown>\n error?: string\n retryCount?: number\n}\n\n/**\n * Workflow context stored on jobs created by workflow execution.\n * Uses relationship IDs that link to the respective collections.\n */\nexport interface WorkflowJobMeta {\n automationWorkflowId: string | number\n automationWorkflowRunId: string | number\n automationTriggerId?: string | number\n}\n\nexport class WorkflowExecutor {\n private config: WorkflowsPluginConfig<string, string>;\n\n constructor(\n private payload: Payload,\n private logger: Payload['logger']\n ) {\n this.config = getPluginConfig(payload)\n }\n\n /**\n * Resolve workflow steps by loading base step configurations and merging with overrides\n */\n private async resolveWorkflowSteps(workflow: PayloadWorkflow): Promise<ResolvedStep[]> {\n const resolvedSteps: ResolvedStep[] = []\n\n if (!workflow.steps || workflow.steps.length === 0) {\n return resolvedSteps\n }\n\n for (let i = 0; i < workflow.steps.length; i++) {\n const workflowStep = workflow.steps[i]\n\n let baseStep: any\n if (typeof workflowStep.step === 'object' && workflowStep.step !== null) {\n baseStep = workflowStep.step\n } else {\n try {\n baseStep = await this.payload.findByID({\n collection: 'automation-steps',\n id: workflowStep.step,\n depth: 0\n })\n } catch (error) {\n this.logger.error({\n stepId: workflowStep.step,\n stepIndex: i,\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to load step configuration')\n throw new Error(`Failed to load step ${workflowStep.step}: ${error instanceof Error ? error.message : 'Unknown error'}`)\n }\n }\n\n const baseConfig = (baseStep.config as Record<string, unknown>) || {}\n const overrides = (workflowStep.inputOverrides as Record<string, unknown>) || {}\n const mergedConfig = { ...baseConfig, ...overrides }\n\n const dependencies = (workflowStep.dependencies || []).map(d => d.stepIndex)\n\n resolvedSteps.push({\n stepIndex: i,\n stepId: baseStep.id,\n stepName: workflowStep.stepName || baseStep.name || `step-${i}`,\n stepType: baseStep.type as string,\n config: mergedConfig,\n condition: workflowStep.condition,\n dependencies,\n retryOnFailure: baseStep.retryOnFailure,\n maxRetries: baseStep.maxRetries || workflow.maxRetries || 3,\n retryDelay: baseStep.retryDelay || workflow.retryDelay || 1000\n })\n }\n\n return resolvedSteps\n }\n\n /**\n * Resolve step execution order based on dependencies\n */\n private resolveExecutionOrder(steps: ResolvedStep[]): ResolvedStep[][] {\n const indegree = new Map<number, number>()\n const dependents = new Map<number, number[]>()\n\n for (const step of steps) {\n indegree.set(step.stepIndex, step.dependencies.length)\n dependents.set(step.stepIndex, [])\n }\n\n for (const step of steps) {\n for (const depIndex of step.dependencies) {\n const deps = dependents.get(depIndex) || []\n deps.push(step.stepIndex)\n dependents.set(depIndex, deps)\n }\n }\n\n const executionBatches: ResolvedStep[][] = []\n const processed = new Set<number>()\n\n while (processed.size < steps.length) {\n const currentBatch: ResolvedStep[] = []\n\n for (const step of steps) {\n if (!processed.has(step.stepIndex) && indegree.get(step.stepIndex) === 0) {\n currentBatch.push(step)\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 for (const step of currentBatch) {\n processed.add(step.stepIndex)\n for (const depIndex of dependents.get(step.stepIndex) || []) {\n indegree.set(depIndex, (indegree.get(depIndex) || 1) - 1)\n }\n }\n }\n\n return executionBatches\n }\n\n /**\n * Execute a single workflow step\n */\n private async executeStep(\n step: ResolvedStep,\n context: ExecutionContext,\n req: PayloadRequest,\n stepResults: StepResult[],\n jobMeta: WorkflowJobMeta\n ): Promise<StepResult> {\n const result: StepResult = {\n step: step.stepId,\n stepName: step.stepName,\n stepIndex: step.stepIndex,\n status: 'running',\n startedAt: new Date().toISOString(),\n retryCount: 0\n }\n\n this.logger.info({\n stepName: step.stepName,\n stepType: step.stepType,\n stepIndex: step.stepIndex\n }, 'Executing step')\n\n // Check step condition if present\n if (step.condition) {\n const conditionMet = await this.evaluateCondition(step.condition, context)\n if (!conditionMet) {\n this.logger.info({\n stepName: step.stepName,\n condition: step.condition\n }, 'Step condition not met, skipping')\n\n result.status = 'skipped'\n result.completedAt = new Date().toISOString()\n result.output = { reason: 'Condition not met', skipped: true }\n\n context.steps[step.stepName] = {\n state: 'skipped',\n output: result.output\n }\n\n return result\n }\n }\n\n // Resolve input using JSONata expressions\n const resolvedInput = await this.resolveStepInput(step.config, context)\n result.input = resolvedInput\n\n context.steps[step.stepName] = {\n state: 'running',\n input: resolvedInput\n }\n\n try {\n const job = await this.payload.jobs.queue({\n input: resolvedInput,\n req,\n task: step.stepType,\n })\n\n if (this.config.debug) {\n this.logger.info(job, `Queued job for step '${step.stepName}'`)\n }\n\n // Update the job with automation context fields\n // This allows tracking which workflow run triggered this job\n await this.payload.update({\n collection: 'payload-jobs',\n id: job.id,\n data: {\n automationWorkflow: jobMeta.automationWorkflowId,\n automationWorkflowRun: jobMeta.automationWorkflowRunId,\n automationTrigger: jobMeta.automationTriggerId,\n automationStepName: step.stepName,\n },\n req,\n })\n\n // Run the job and capture the result directly from runByID\n // This is important because PayloadCMS may delete jobs on completion (deleteJobOnComplete: true by default)\n const runResult = await this.payload.jobs.runByID({\n id: job.id,\n req\n })\n\n if (this.config.debug) {\n this.logger.info(runResult, `Run result for step '${step.stepName}'`)\n }\n\n // Check the job status from the run result\n // runByID returns { jobStatus: { [jobId]: { status: 'success' | 'error' | ... } }, ... }\n const jobStatus = (runResult as any)?.jobStatus?.[job.id]\n const jobSucceeded = jobStatus?.status === 'success'\n\n if (jobSucceeded) {\n // Job completed successfully - try to get output from the job if it still exists\n // Note: Job may have been deleted if deleteJobOnComplete is true\n let output: Record<string, unknown> = {}\n try {\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n output = taskStatus?.output || {}\n } catch {\n // Job was deleted after completion - this is expected behavior with deleteJobOnComplete: true\n // The job succeeded, so we proceed without the output\n this.logger.debug({ stepName: step.stepName }, 'Job was deleted after successful completion (deleteJobOnComplete)')\n }\n\n result.status = 'succeeded'\n result.output = output\n result.completedAt = new Date().toISOString()\n result.duration = new Date(result.completedAt).getTime() - new Date(result.startedAt!).getTime()\n } else {\n // Job failed - try to get error details from the job\n let errorMessage = 'Task failed'\n try {\n const completedJob = await this.payload.findByID({\n id: job.id,\n collection: 'payload-jobs',\n req\n })\n const taskStatus = completedJob.taskStatus?.[completedJob.taskSlug]?.[completedJob.totalTried]\n if (completedJob.log && completedJob.log.length > 0) {\n const latestLog = completedJob.log[completedJob.log.length - 1]\n errorMessage = latestLog.error?.message || latestLog.error || errorMessage\n }\n if (taskStatus?.output?.errorMessage) {\n errorMessage = taskStatus.output.errorMessage\n }\n } catch {\n // Job may have been deleted - use the job status from run result\n errorMessage = `Task failed with status: ${jobStatus?.status || 'unknown'}`\n }\n throw new Error(errorMessage)\n }\n\n context.steps[step.stepName] = {\n state: 'succeeded',\n input: resolvedInput,\n output: result.output\n }\n\n this.logger.info({\n stepName: step.stepName,\n duration: result.duration\n }, 'Step completed successfully')\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n result.status = 'failed'\n result.error = errorMessage\n result.completedAt = new Date().toISOString()\n result.duration = new Date(result.completedAt).getTime() - new Date(result.startedAt!).getTime()\n\n context.steps[step.stepName] = {\n state: 'failed',\n input: resolvedInput,\n error: errorMessage\n }\n\n this.logger.error({\n stepName: step.stepName,\n error: errorMessage\n }, 'Step execution failed')\n\n throw error\n }\n\n return result\n }\n\n /**\n * Resolve step input using JSONata expressions\n */\n private async resolveStepInput(\n config: Record<string, unknown>,\n context: ExecutionContext\n ): Promise<Record<string, unknown>> {\n try {\n return await resolveInput(config, context as ExpressionContext, { timeout: 5000 })\n } catch (error) {\n this.logger.warn({\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to resolve step input, using raw config')\n return config\n }\n }\n\n /**\n * Evaluate a condition using JSONata\n */\n public async evaluateCondition(condition: string, context: ExecutionContext): Promise<boolean> {\n try {\n return await evalCondition(condition, context as ExpressionContext, { timeout: 5000 })\n } catch (error) {\n this.logger.warn({\n condition,\n error: error instanceof Error ? error.message : 'Unknown error'\n }, 'Failed to evaluate condition')\n return false\n }\n }\n\n /**\n * Safely serialize an object for storage\n */\n private safeSerialize(obj: unknown): unknown {\n const seen = new WeakSet()\n\n // Keys to completely exclude from serialization\n const excludeKeys = new Set([\n 'table',\n 'schema',\n '_',\n '__',\n 'payload', // Exclude payload instance (contains entire config)\n 'res', // Exclude response object\n 'transactionID',\n 'i18n',\n 'fallbackLocale',\n ])\n\n // For req object, only keep these useful debugging properties\n const reqAllowedKeys = new Set([\n 'payloadAPI', // 'local', 'REST', or 'GraphQL'\n 'locale',\n 'user', // authenticated user\n 'method', // HTTP method\n 'url', // request URL\n ])\n\n const serialize = (value: unknown, parentKey?: string): unknown => {\n if (value === null || typeof value !== 'object') {\n return value\n }\n if (seen.has(value)) {\n return '[Circular Reference]'\n }\n seen.add(value)\n\n if (Array.isArray(value)) {\n return value.map((v) => serialize(v))\n }\n\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value as Record<string, unknown>)) {\n try {\n if (excludeKeys.has(key)) {\n continue\n }\n // Special handling for req object - only include allowed keys\n if (parentKey === 'req' && !reqAllowedKeys.has(key)) {\n continue\n }\n result[key] = serialize(val, key)\n } catch {\n result[key] = '[Non-serializable]'\n }\n }\n return result\n }\n\n return serialize(obj)\n }\n\n /**\n * Execute a workflow with the given context\n */\n async execute(\n workflow: PayloadWorkflow,\n context: ExecutionContext,\n req: PayloadRequest,\n firedTrigger?: any\n ): Promise<void> {\n this.logger.info({\n workflowId: workflow.id,\n workflowName: workflow.name,\n triggerId: firedTrigger?.id,\n triggerName: firedTrigger?.name\n }, 'Starting workflow execution')\n\n const resolvedSteps = await this.resolveWorkflowSteps(workflow)\n const stepResults: StepResult[] = []\n\n for (const step of resolvedSteps) {\n stepResults.push({\n step: step.stepId,\n stepName: step.stepName,\n stepIndex: step.stepIndex,\n status: 'pending'\n })\n }\n\n const workflowRun = await this.payload.create({\n collection: 'workflow-runs',\n data: {\n workflow: workflow.id,\n workflowVersion: 1,\n firedTrigger: firedTrigger?.id,\n triggerData: this.safeSerialize(context.trigger),\n status: 'running',\n startedAt: new Date().toISOString(),\n triggeredBy: context.trigger.req?.user?.email || 'system',\n stepResults,\n context: this.safeSerialize(context),\n inputs: this.safeSerialize(context.trigger),\n logs: [{\n timestamp: new Date().toISOString(),\n level: 'info',\n message: 'Workflow execution started'\n }]\n },\n req\n })\n\n this.logger.info({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id\n }, 'Workflow run record created')\n\n // Create job metadata for tracking workflow context in payload-jobs\n const jobMeta: WorkflowJobMeta = {\n automationWorkflowId: workflow.id,\n automationWorkflowRunId: workflowRun.id,\n automationTriggerId: firedTrigger?.id,\n }\n\n try {\n const executionBatches = this.resolveExecutionOrder(resolvedSteps)\n\n this.logger.info({\n batchCount: executionBatches.length,\n batchSizes: executionBatches.map(b => b.length)\n }, 'Resolved step execution order')\n\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.stepName)\n }, 'Executing batch')\n\n const batchPromises = batch.map(async (step) => {\n try {\n const result = await this.executeStep(step, context, req, stepResults, jobMeta)\n const idx = stepResults.findIndex(r => r.stepIndex === step.stepIndex)\n if (idx !== -1) {\n stepResults[idx] = result\n }\n return result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n const idx = stepResults.findIndex(r => r.stepIndex === step.stepIndex)\n if (idx !== -1) {\n stepResults[idx] = {\n ...stepResults[idx],\n status: 'failed',\n error: errorMessage,\n completedAt: new Date().toISOString()\n }\n }\n\n if (workflow.errorHandling === 'stop') {\n throw error\n }\n this.logger.warn({\n stepName: step.stepName,\n error: errorMessage\n }, 'Step failed but continuing due to error handling setting')\n }\n })\n\n await Promise.all(batchPromises)\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n stepResults,\n context: this.safeSerialize(context)\n },\n req\n })\n }\n\n const outputs: Record<string, unknown> = {}\n for (const result of stepResults) {\n if (result.status === 'succeeded' && result.output) {\n outputs[result.stepName] = result.output\n }\n }\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n status: 'completed',\n completedAt: new Date().toISOString(),\n stepResults,\n context: this.safeSerialize(context),\n outputs,\n logs: [\n ...(workflowRun.logs || []),\n {\n timestamp: new Date().toISOString(),\n level: 'info',\n message: 'Workflow execution completed successfully'\n }\n ]\n },\n req\n })\n\n this.logger.info({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id\n }, 'Workflow execution completed')\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n await this.payload.update({\n id: workflowRun.id,\n collection: 'workflow-runs',\n data: {\n status: 'failed',\n completedAt: new Date().toISOString(),\n stepResults,\n context: this.safeSerialize(context),\n error: errorMessage,\n logs: [\n ...(workflowRun.logs || []),\n {\n timestamp: new Date().toISOString(),\n level: 'error',\n message: `Workflow execution failed: ${errorMessage}`\n }\n ]\n },\n req\n })\n\n this.logger.error({\n workflowRunId: workflowRun.id,\n workflowId: workflow.id,\n error: errorMessage\n }, 'Workflow execution failed')\n\n throw error\n }\n }\n}\n"],"names":["evaluateCondition","evalCondition","resolveStepInput","resolveInput","getPluginConfig","WorkflowExecutor","config","payload","logger","resolveWorkflowSteps","workflow","resolvedSteps","steps","length","i","workflowStep","baseStep","step","findByID","collection","id","depth","error","stepId","stepIndex","Error","message","baseConfig","overrides","inputOverrides","mergedConfig","dependencies","map","d","push","stepName","name","stepType","type","condition","retryOnFailure","maxRetries","retryDelay","resolveExecutionOrder","indegree","Map","dependents","set","depIndex","deps","get","executionBatches","processed","Set","size","currentBatch","has","add","executeStep","context","req","stepResults","jobMeta","result","status","startedAt","Date","toISOString","retryCount","info","conditionMet","completedAt","output","reason","skipped","state","resolvedInput","input","job","jobs","queue","task","debug","update","data","automationWorkflow","automationWorkflowId","automationWorkflowRun","automationWorkflowRunId","automationTrigger","automationTriggerId","automationStepName","runResult","runByID","jobStatus","jobSucceeded","completedJob","taskStatus","taskSlug","totalTried","duration","getTime","errorMessage","log","latestLog","timeout","warn","safeSerialize","obj","seen","WeakSet","excludeKeys","reqAllowedKeys","serialize","value","parentKey","Array","isArray","v","key","val","Object","entries","execute","firedTrigger","workflowId","workflowName","triggerId","triggerName","workflowRun","create","workflowVersion","triggerData","trigger","triggeredBy","user","email","inputs","logs","timestamp","level","workflowRunId","batchCount","batchSizes","b","batchIndex","batch","stepCount","stepNames","s","batchPromises","idx","findIndex","r","errorHandling","Promise","all","outputs"],"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.48",
3
+ "version": "0.0.49",
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",