@xtr-dev/payload-automation 0.0.18 → 0.0.19

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.
@@ -24,71 +24,14 @@ const applyCollectionsConfig = (pluginOptions, config)=>{
24
24
  }
25
25
  config.collections.push(createWorkflowCollection(pluginOptions), WorkflowRunsCollection);
26
26
  };
27
- const applyHooksToCollections = (pluginOptions, config)=>{
28
- const configLogger = getConfigLogger();
29
- if (!pluginOptions.collectionTriggers || Object.keys(pluginOptions.collectionTriggers).length === 0) {
30
- configLogger.warn('No collection triggers configured - hooks will not be applied');
31
- return;
32
- }
33
- configLogger.info('Applying hooks to collections during config phase');
34
- // Apply hooks to each configured collection
35
- for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers)){
36
- if (!triggerConfig) {
37
- continue;
38
- }
39
- // Find the collection in the config
40
- const collectionConfig = config.collections?.find((c)=>c.slug === collectionSlug);
41
- if (!collectionConfig) {
42
- configLogger.warn(`Collection '${collectionSlug}' not found in config - cannot apply hooks`);
43
- continue;
44
- }
45
- const crud = triggerConfig === true ? {
46
- create: true,
47
- delete: true,
48
- read: true,
49
- update: true
50
- } : triggerConfig;
51
- // Initialize hooks if they don't exist
52
- if (!collectionConfig.hooks) {
53
- collectionConfig.hooks = {};
54
- }
55
- // Apply afterChange hook for create/update operations
56
- if (crud.update || crud.create) {
57
- if (!collectionConfig.hooks.afterChange) {
58
- collectionConfig.hooks.afterChange = [];
59
- }
60
- // Add our automation hook - this will be called when the executor is ready
61
- collectionConfig.hooks.afterChange.push(async (change)=>{
62
- console.log('🚨 CONFIG-PHASE AUTOMATION HOOK CALLED! 🚨');
63
- console.log('Collection:', change.collection.slug);
64
- console.log('Operation:', change.operation);
65
- console.log('Doc ID:', change.doc?.id);
66
- // Get the executor from global registry (set during onInit)
67
- const executor = getWorkflowExecutor();
68
- if (!executor) {
69
- console.log('❌ No executor available yet - workflow execution skipped');
70
- return;
71
- }
72
- console.log('✅ Executor found - executing workflows');
73
- try {
74
- await executor.executeTriggeredWorkflows(change.collection.slug, change.operation, change.doc, change.previousDoc, change.req);
75
- console.log('🚨 executeTriggeredWorkflows completed successfully');
76
- } catch (error) {
77
- console.log('🚨 executeTriggeredWorkflows failed:', error);
78
- }
79
- });
80
- }
81
- configLogger.info(`Applied hooks to collection: ${collectionSlug}`);
82
- }
83
- };
27
+ // Removed config-phase hook registration - user collections don't exist during config phase
84
28
  export const workflowsPlugin = (pluginOptions)=>(config)=>{
85
29
  // If the plugin is disabled, return config unchanged
86
30
  if (pluginOptions.enabled === false) {
87
31
  return config;
88
32
  }
89
33
  applyCollectionsConfig(pluginOptions, config);
90
- // CRITICAL FIX: Apply hooks during config phase, not onInit
91
- applyHooksToCollections(pluginOptions, config);
34
+ // Revert: Don't apply hooks in config phase - user collections don't exist yet
92
35
  if (!config.jobs) {
93
36
  config.jobs = {
94
37
  tasks: []
@@ -127,10 +70,38 @@ export const workflowsPlugin = (pluginOptions)=>(config)=>{
127
70
  const executor = new WorkflowExecutor(payload, logger);
128
71
  console.log('🚨 EXECUTOR CREATED:', typeof executor);
129
72
  console.log('🚨 EXECUTOR METHODS:', Object.getOwnPropertyNames(Object.getPrototypeOf(executor)));
130
- // Register executor globally for config-phase hooks
73
+ // Register executor globally
131
74
  setWorkflowExecutor(executor);
132
- // Note: Collection hooks are now applied during config phase, not here
133
- logger.info('Collection hooks applied during config phase - executor now available for them');
75
+ // DIRECT RUNTIME HOOK REGISTRATION - bypass all abstractions
76
+ logger.info('Applying hooks directly to runtime collections...');
77
+ for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers || {})){
78
+ if (!triggerConfig) continue;
79
+ const collection = payload.collections[collectionSlug];
80
+ if (!collection) {
81
+ logger.warn(`Collection '${collectionSlug}' not found at runtime`);
82
+ continue;
83
+ }
84
+ console.log(`🚨 DIRECTLY MANIPULATING ${collectionSlug} COLLECTION`);
85
+ console.log(`🚨 Current afterChange hooks:`, collection.config.hooks?.afterChange?.length || 0);
86
+ // Ensure hooks array exists
87
+ if (!collection.config.hooks) {
88
+ collection.config.hooks = {}; // PayloadCMS hooks type is complex, bypass for direct manipulation
89
+ }
90
+ if (!collection.config.hooks.afterChange) {
91
+ collection.config.hooks.afterChange = [];
92
+ }
93
+ // Add ultra-simple test hook
94
+ const ultraSimpleHook = async (change)=>{
95
+ console.log('🎯 ULTRA SIMPLE HOOK EXECUTED! 🎯');
96
+ console.log('🎯 Collection:', change.collection.slug);
97
+ console.log('🎯 Operation:', change.operation);
98
+ console.log('🎯 SUCCESS - Direct runtime registration works!');
99
+ };
100
+ // Insert at beginning to ensure it runs first
101
+ collection.config.hooks.afterChange.unshift(ultraSimpleHook);
102
+ console.log(`🚨 Added hook to ${collectionSlug} - new count:`, collection.config.hooks.afterChange.length);
103
+ logger.info(`Direct hook registration completed for: ${collectionSlug}`);
104
+ }
134
105
  logger.info('Initializing global hooks...');
135
106
  initGlobalHooks(payload, logger, executor);
136
107
  logger.info('Initializing workflow hooks...');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugin/index.ts"],"sourcesContent":["import type {Config} from 'payload'\n\nimport type {WorkflowsPluginConfig, CollectionTriggerConfigCrud} from \"./config-types.js\"\n\nimport {createWorkflowCollection} from '../collections/Workflow.js'\nimport {WorkflowRunsCollection} from '../collections/WorkflowRuns.js'\nimport {WorkflowExecutor} from '../core/workflow-executor.js'\nimport {generateCronTasks, registerCronJobs} from './cron-scheduler.js'\nimport {initCollectionHooks} from \"./init-collection-hooks.js\"\nimport {initGlobalHooks} from \"./init-global-hooks.js\"\nimport {initStepTasks} from \"./init-step-tasks.js\"\nimport {initWebhookEndpoint} from \"./init-webhook.js\"\nimport {initWorkflowHooks} from './init-workflow-hooks.js'\nimport {getConfigLogger, initializeLogger} from './logger.js'\n\nexport {getLogger} from './logger.js'\n\n// Global executor registry for config-phase hooks\nlet globalExecutor: WorkflowExecutor | null = null\n\nconst setWorkflowExecutor = (executor: WorkflowExecutor) => {\n console.log('🚨 SETTING GLOBAL EXECUTOR')\n globalExecutor = executor\n}\n\nconst getWorkflowExecutor = (): WorkflowExecutor | null => {\n return globalExecutor\n}\n\nconst applyCollectionsConfig = <T extends string>(pluginOptions: WorkflowsPluginConfig<T>, config: Config) => {\n // Add workflow collections\n if (!config.collections) {\n config.collections = []\n }\n\n config.collections.push(\n createWorkflowCollection(pluginOptions),\n WorkflowRunsCollection\n )\n}\n\nconst applyHooksToCollections = <T extends string>(pluginOptions: WorkflowsPluginConfig<T>, config: Config) => {\n const configLogger = getConfigLogger()\n \n if (!pluginOptions.collectionTriggers || Object.keys(pluginOptions.collectionTriggers).length === 0) {\n configLogger.warn('No collection triggers configured - hooks will not be applied')\n return\n }\n\n configLogger.info('Applying hooks to collections during config phase')\n\n // Apply hooks to each configured collection\n for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers)) {\n if (!triggerConfig) {\n continue\n }\n\n // Find the collection in the config\n const collectionConfig = config.collections?.find(c => c.slug === collectionSlug)\n if (!collectionConfig) {\n configLogger.warn(`Collection '${collectionSlug}' not found in config - cannot apply hooks`)\n continue\n }\n\n const crud: CollectionTriggerConfigCrud = triggerConfig === true ? {\n create: true,\n delete: true,\n read: true,\n update: true,\n } : triggerConfig\n\n // Initialize hooks if they don't exist\n if (!collectionConfig.hooks) {\n collectionConfig.hooks = {}\n }\n\n // Apply afterChange hook for create/update operations\n if (crud.update || crud.create) {\n if (!collectionConfig.hooks.afterChange) {\n collectionConfig.hooks.afterChange = []\n }\n\n // Add our automation hook - this will be called when the executor is ready\n collectionConfig.hooks.afterChange.push(async (change) => {\n console.log('🚨 CONFIG-PHASE AUTOMATION HOOK CALLED! 🚨')\n console.log('Collection:', change.collection.slug)\n console.log('Operation:', change.operation)\n console.log('Doc ID:', change.doc?.id)\n\n // Get the executor from global registry (set during onInit)\n const executor = getWorkflowExecutor()\n if (!executor) {\n console.log('❌ No executor available yet - workflow execution skipped')\n return\n }\n\n console.log('✅ Executor found - executing workflows')\n \n try {\n await executor.executeTriggeredWorkflows(\n change.collection.slug,\n change.operation as 'create' | 'update',\n change.doc,\n change.previousDoc,\n change.req\n )\n console.log('🚨 executeTriggeredWorkflows completed successfully')\n } catch (error) {\n console.log('🚨 executeTriggeredWorkflows failed:', error)\n }\n })\n }\n\n configLogger.info(`Applied hooks to collection: ${collectionSlug}`)\n }\n}\n\n\nexport const workflowsPlugin =\n <TSlug extends string>(pluginOptions: WorkflowsPluginConfig<TSlug>) =>\n (config: Config): Config => {\n // If the plugin is disabled, return config unchanged\n if (pluginOptions.enabled === false) {\n return config\n }\n\n applyCollectionsConfig<TSlug>(pluginOptions, config)\n \n // CRITICAL FIX: Apply hooks during config phase, not onInit\n applyHooksToCollections<TSlug>(pluginOptions, config)\n\n if (!config.jobs) {\n config.jobs = {tasks: []}\n }\n\n const configLogger = getConfigLogger()\n configLogger.info(`Configuring workflow plugin with ${Object.keys(pluginOptions.collectionTriggers || {}).length} collection triggers`)\n\n // Generate cron tasks for workflows with cron triggers\n generateCronTasks(config)\n\n for (const step of pluginOptions.steps) {\n if (!config.jobs?.tasks?.find(task => task.slug === step.slug)) {\n configLogger.debug(`Registering task: ${step.slug}`)\n config.jobs?.tasks?.push(step)\n } else {\n configLogger.debug(`Task ${step.slug} already registered, skipping`)\n }\n }\n\n // Initialize webhook endpoint\n initWebhookEndpoint(config, pluginOptions.webhookPrefix || 'webhook')\n\n // Set up onInit to register collection hooks and initialize features\n const incomingOnInit = config.onInit\n config.onInit = async (payload) => {\n configLogger.info(`onInit called - collections: ${Object.keys(payload.collections).length}`)\n \n // Execute any existing onInit functions first\n if (incomingOnInit) {\n configLogger.debug('Executing existing onInit function')\n await incomingOnInit(payload)\n }\n\n // Initialize the logger with the payload instance\n const logger = initializeLogger(payload)\n logger.info('Logger initialized with payload instance')\n\n // Log collection trigger configuration\n logger.info(`Plugin configuration: ${Object.keys(pluginOptions.collectionTriggers || {}).length} collection triggers, ${pluginOptions.steps?.length || 0} steps`)\n\n // Create workflow executor instance\n console.log('🚨 CREATING WORKFLOW EXECUTOR INSTANCE')\n const executor = new WorkflowExecutor(payload, logger)\n console.log('🚨 EXECUTOR CREATED:', typeof executor)\n console.log('🚨 EXECUTOR METHODS:', Object.getOwnPropertyNames(Object.getPrototypeOf(executor)))\n \n // Register executor globally for config-phase hooks\n setWorkflowExecutor(executor)\n\n // Note: Collection hooks are now applied during config phase, not here\n logger.info('Collection hooks applied during config phase - executor now available for them')\n \n logger.info('Initializing global hooks...')\n initGlobalHooks(payload, logger, executor)\n \n logger.info('Initializing workflow hooks...')\n initWorkflowHooks(payload, logger)\n \n logger.info('Initializing step tasks...')\n initStepTasks(pluginOptions, payload, logger)\n\n // Register cron jobs for workflows with cron triggers\n logger.info('Registering cron jobs...')\n await registerCronJobs(payload, logger)\n\n logger.info('Plugin initialized successfully - all hooks registered')\n }\n\n return config\n }\n"],"names":["createWorkflowCollection","WorkflowRunsCollection","WorkflowExecutor","generateCronTasks","registerCronJobs","initGlobalHooks","initStepTasks","initWebhookEndpoint","initWorkflowHooks","getConfigLogger","initializeLogger","getLogger","globalExecutor","setWorkflowExecutor","executor","console","log","getWorkflowExecutor","applyCollectionsConfig","pluginOptions","config","collections","push","applyHooksToCollections","configLogger","collectionTriggers","Object","keys","length","warn","info","collectionSlug","triggerConfig","entries","collectionConfig","find","c","slug","crud","create","delete","read","update","hooks","afterChange","change","collection","operation","doc","id","executeTriggeredWorkflows","previousDoc","req","error","workflowsPlugin","enabled","jobs","tasks","step","steps","task","debug","webhookPrefix","incomingOnInit","onInit","payload","logger","getOwnPropertyNames","getPrototypeOf"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/plugin/index.ts"],"sourcesContent":["import type {Config} from 'payload'\n\nimport type {WorkflowsPluginConfig, CollectionTriggerConfigCrud} from \"./config-types.js\"\n\nimport {createWorkflowCollection} from '../collections/Workflow.js'\nimport {WorkflowRunsCollection} from '../collections/WorkflowRuns.js'\nimport {WorkflowExecutor} from '../core/workflow-executor.js'\nimport {generateCronTasks, registerCronJobs} from './cron-scheduler.js'\nimport {initCollectionHooks} from \"./init-collection-hooks.js\"\nimport {initGlobalHooks} from \"./init-global-hooks.js\"\nimport {initStepTasks} from \"./init-step-tasks.js\"\nimport {initWebhookEndpoint} from \"./init-webhook.js\"\nimport {initWorkflowHooks} from './init-workflow-hooks.js'\nimport {getConfigLogger, initializeLogger} from './logger.js'\n\nexport {getLogger} from './logger.js'\n\n// Global executor registry for config-phase hooks\nlet globalExecutor: WorkflowExecutor | null = null\n\nconst setWorkflowExecutor = (executor: WorkflowExecutor) => {\n console.log('🚨 SETTING GLOBAL EXECUTOR')\n globalExecutor = executor\n}\n\nconst getWorkflowExecutor = (): WorkflowExecutor | null => {\n return globalExecutor\n}\n\nconst applyCollectionsConfig = <T extends string>(pluginOptions: WorkflowsPluginConfig<T>, config: Config) => {\n // Add workflow collections\n if (!config.collections) {\n config.collections = []\n }\n\n config.collections.push(\n createWorkflowCollection(pluginOptions),\n WorkflowRunsCollection\n )\n}\n\n// Removed config-phase hook registration - user collections don't exist during config phase\n\n\nexport const workflowsPlugin =\n <TSlug extends string>(pluginOptions: WorkflowsPluginConfig<TSlug>) =>\n (config: Config): Config => {\n // If the plugin is disabled, return config unchanged\n if (pluginOptions.enabled === false) {\n return config\n }\n\n applyCollectionsConfig<TSlug>(pluginOptions, config)\n \n // Revert: Don't apply hooks in config phase - user collections don't exist yet\n\n if (!config.jobs) {\n config.jobs = {tasks: []}\n }\n\n const configLogger = getConfigLogger()\n configLogger.info(`Configuring workflow plugin with ${Object.keys(pluginOptions.collectionTriggers || {}).length} collection triggers`)\n\n // Generate cron tasks for workflows with cron triggers\n generateCronTasks(config)\n\n for (const step of pluginOptions.steps) {\n if (!config.jobs?.tasks?.find(task => task.slug === step.slug)) {\n configLogger.debug(`Registering task: ${step.slug}`)\n config.jobs?.tasks?.push(step)\n } else {\n configLogger.debug(`Task ${step.slug} already registered, skipping`)\n }\n }\n\n // Initialize webhook endpoint\n initWebhookEndpoint(config, pluginOptions.webhookPrefix || 'webhook')\n\n // Set up onInit to register collection hooks and initialize features\n const incomingOnInit = config.onInit\n config.onInit = async (payload) => {\n configLogger.info(`onInit called - collections: ${Object.keys(payload.collections).length}`)\n \n // Execute any existing onInit functions first\n if (incomingOnInit) {\n configLogger.debug('Executing existing onInit function')\n await incomingOnInit(payload)\n }\n\n // Initialize the logger with the payload instance\n const logger = initializeLogger(payload)\n logger.info('Logger initialized with payload instance')\n\n // Log collection trigger configuration\n logger.info(`Plugin configuration: ${Object.keys(pluginOptions.collectionTriggers || {}).length} collection triggers, ${pluginOptions.steps?.length || 0} steps`)\n\n // Create workflow executor instance\n console.log('🚨 CREATING WORKFLOW EXECUTOR INSTANCE')\n const executor = new WorkflowExecutor(payload, logger)\n console.log('🚨 EXECUTOR CREATED:', typeof executor)\n console.log('🚨 EXECUTOR METHODS:', Object.getOwnPropertyNames(Object.getPrototypeOf(executor)))\n \n // Register executor globally\n setWorkflowExecutor(executor)\n\n // DIRECT RUNTIME HOOK REGISTRATION - bypass all abstractions\n logger.info('Applying hooks directly to runtime collections...')\n \n for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers || {})) {\n if (!triggerConfig) continue\n \n const collection = payload.collections[collectionSlug as TSlug]\n if (!collection) {\n logger.warn(`Collection '${collectionSlug}' not found at runtime`)\n continue\n }\n\n console.log(`🚨 DIRECTLY MANIPULATING ${collectionSlug} COLLECTION`)\n console.log(`🚨 Current afterChange hooks:`, collection.config.hooks?.afterChange?.length || 0)\n \n // Ensure hooks array exists\n if (!collection.config.hooks) {\n collection.config.hooks = {} as any // PayloadCMS hooks type is complex, bypass for direct manipulation\n }\n if (!collection.config.hooks.afterChange) {\n collection.config.hooks.afterChange = []\n }\n \n // Add ultra-simple test hook\n const ultraSimpleHook = async (change: { collection: { slug: string }, operation: string, doc?: { id?: string } }) => {\n console.log('🎯 ULTRA SIMPLE HOOK EXECUTED! 🎯')\n console.log('🎯 Collection:', change.collection.slug)\n console.log('🎯 Operation:', change.operation)\n console.log('🎯 SUCCESS - Direct runtime registration works!')\n }\n \n // Insert at beginning to ensure it runs first\n collection.config.hooks.afterChange.unshift(ultraSimpleHook)\n \n console.log(`🚨 Added hook to ${collectionSlug} - new count:`, collection.config.hooks.afterChange.length)\n \n logger.info(`Direct hook registration completed for: ${collectionSlug}`)\n }\n \n logger.info('Initializing global hooks...')\n initGlobalHooks(payload, logger, executor)\n \n logger.info('Initializing workflow hooks...')\n initWorkflowHooks(payload, logger)\n \n logger.info('Initializing step tasks...')\n initStepTasks(pluginOptions, payload, logger)\n\n // Register cron jobs for workflows with cron triggers\n logger.info('Registering cron jobs...')\n await registerCronJobs(payload, logger)\n\n logger.info('Plugin initialized successfully - all hooks registered')\n }\n\n return config\n }\n"],"names":["createWorkflowCollection","WorkflowRunsCollection","WorkflowExecutor","generateCronTasks","registerCronJobs","initGlobalHooks","initStepTasks","initWebhookEndpoint","initWorkflowHooks","getConfigLogger","initializeLogger","getLogger","globalExecutor","setWorkflowExecutor","executor","console","log","getWorkflowExecutor","applyCollectionsConfig","pluginOptions","config","collections","push","workflowsPlugin","enabled","jobs","tasks","configLogger","info","Object","keys","collectionTriggers","length","step","steps","find","task","slug","debug","webhookPrefix","incomingOnInit","onInit","payload","logger","getOwnPropertyNames","getPrototypeOf","collectionSlug","triggerConfig","entries","collection","warn","hooks","afterChange","ultraSimpleHook","change","operation","unshift"],"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.18",
3
+ "version": "0.0.19",
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",