4 Commits

Author SHA1 Message Date
964b11c0c9 0.0.13 2025-09-01 10:33:02 +02:00
3d7b746779 Fix workflow trigger field name mismatch
- Update workflow executor to check both 'collection' and 'collectionSlug' fields
- Add debug logging for workflow trigger matching
- Fixes issue where collection triggers were not being matched correctly
2025-09-01 10:32:51 +02:00
7686495283 0.0.12 2025-08-31 20:35:13 +02:00
265d5affc6 Fix ES module bundling issues by isolating pure types
- Create dedicated types-only module (src/types/index.ts) with pure type definitions
- Update main index.ts to export only pure types without runtime imports
- Removes need for serverExternalPackages in Next.js configuration
- Plugin now works "out of the box" without bundling workarounds

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-31 20:35:09 +02:00
5 changed files with 108 additions and 9 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@xtr-dev/payload-workflows",
"version": "0.0.11",
"version": "0.0.13",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@xtr-dev/payload-workflows",
"version": "0.0.11",
"version": "0.0.13",
"license": "MIT",
"dependencies": {
"jsonpath-plus": "^10.3.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@xtr-dev/payload-automation",
"version": "0.0.11",
"version": "0.0.13",
"description": "PayloadCMS Automation Plugin - Comprehensive workflow automation system with visual workflow building, execution tracking, and step types",
"license": "MIT",
"type": "module",

View File

@@ -606,6 +606,12 @@ export class WorkflowExecutor {
previousDoc: unknown,
req: PayloadRequest
): Promise<void> {
this.logger.info({
collection,
operation,
docId: (doc as any)?.id
}, 'executeTriggeredWorkflows called')
try {
// Find workflows with matching triggers
const workflows = await this.payload.find({
@@ -614,21 +620,46 @@ export class WorkflowExecutor {
limit: 100,
req
})
this.logger.info({
workflowCount: workflows.docs.length
}, 'Found workflows to check')
for (const workflow of workflows.docs) {
// Check if this workflow has a matching trigger
const triggers = workflow.triggers as Array<{
collection: string
collection?: string
collectionSlug?: string
condition?: string
operation: string
type: string
}>
this.logger.debug({
workflowId: workflow.id,
workflowName: workflow.name,
triggerCount: triggers?.length || 0,
triggers: triggers?.map(t => ({
type: t.type,
collection: t.collection,
collectionSlug: t.collectionSlug,
operation: t.operation
}))
}, 'Checking workflow triggers')
const matchingTriggers = triggers?.filter(trigger =>
trigger.type === 'collection-trigger' &&
trigger.collection === collection &&
(trigger.collection === collection || trigger.collectionSlug === collection) &&
trigger.operation === operation
) || []
this.logger.info({
workflowId: workflow.id,
workflowName: workflow.name,
matchingTriggerCount: matchingTriggers.length,
targetCollection: collection,
targetOperation: operation
}, 'Matching triggers found')
for (const trigger of matchingTriggers) {
// Create execution context for condition evaluation

View File

@@ -1,10 +1,16 @@
// Main export contains only types and client-safe utilities
// Server-side functions are exported via '@xtr-dev/payload-automation/server'
// Types only - safe for client bundling
export type { CustomTriggerOptions, TriggerResult } from './core/trigger-custom-workflow.js'
export type { ExecutionContext, Workflow, WorkflowStep, WorkflowTrigger } from './core/workflow-executor.js'
export type { WorkflowsPluginConfig } from './plugin/config-types.js'
// Pure types only - completely safe for client bundling
export type {
CustomTriggerOptions,
TriggerResult,
ExecutionContext,
Workflow,
WorkflowStep,
WorkflowTrigger,
WorkflowsPluginConfig
} from './types/index.js'
// Server-side functions are NOT re-exported here to avoid bundling issues
// Import server-side functions from the /server export instead

62
src/types/index.ts Normal file
View File

@@ -0,0 +1,62 @@
// Pure type definitions for client-safe exports
// This file contains NO runtime code and can be safely bundled
export interface CustomTriggerOptions {
workflowId: string
triggerData?: any
req?: any // PayloadRequest type, but avoiding import to keep this client-safe
}
export interface TriggerResult {
success: boolean
runId?: string
error?: string
}
export interface ExecutionContext {
trigger: {
type: string
doc?: any
data?: any
}
steps: Record<string, {
output?: any
state: 'pending' | 'running' | 'succeeded' | 'failed'
}>
payload: any // Payload instance
req: any // PayloadRequest
}
export interface WorkflowStep {
id: string
type: string
input: Record<string, any>
dependencies?: string[]
}
export interface WorkflowTrigger {
type: 'collection' | 'global' | 'webhook' | 'cron' | 'manual'
collection?: string
global?: string
event?: 'create' | 'update' | 'delete' | 'read'
path?: string
cron?: string
}
export interface Workflow {
id: string
name: string
description?: string
active: boolean
triggers: WorkflowTrigger[]
steps: WorkflowStep[]
}
export interface WorkflowsPluginConfig {
collections?: string[]
globals?: string[]
logging?: {
level?: 'debug' | 'info' | 'warn' | 'error'
enabled?: boolean
}
}