@xtr-dev/payload-automation 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -0
- package/dist/collections/Workflow.d.ts +3 -0
- package/dist/collections/Workflow.js +223 -0
- package/dist/collections/Workflow.js.map +1 -0
- package/dist/collections/WorkflowRuns.d.ts +2 -0
- package/dist/collections/WorkflowRuns.js +157 -0
- package/dist/collections/WorkflowRuns.js.map +1 -0
- package/dist/components/TriggerWorkflowButton.d.ts +7 -0
- package/dist/components/TriggerWorkflowButton.js +46 -0
- package/dist/components/TriggerWorkflowButton.js.map +1 -0
- package/dist/core/trigger-custom-workflow.d.ts +52 -0
- package/dist/core/trigger-custom-workflow.js +205 -0
- package/dist/core/trigger-custom-workflow.js.map +1 -0
- package/dist/core/workflow-executor.d.ts +86 -0
- package/dist/core/workflow-executor.js +456 -0
- package/dist/core/workflow-executor.js.map +1 -0
- package/dist/exports/client.d.ts +1 -0
- package/dist/exports/client.js +7 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/fields.d.ts +1 -0
- package/dist/exports/fields.js +6 -0
- package/dist/exports/fields.js.map +1 -0
- package/dist/exports/rsc.d.ts +1 -0
- package/dist/exports/rsc.js +3 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/views.d.ts +1 -0
- package/dist/exports/views.js +7 -0
- package/dist/exports/views.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/config-types.d.ts +21 -0
- package/dist/plugin/config-types.js +3 -0
- package/dist/plugin/config-types.js.map +1 -0
- package/dist/plugin/cron-scheduler.d.ts +32 -0
- package/dist/plugin/cron-scheduler.js +537 -0
- package/dist/plugin/cron-scheduler.js.map +1 -0
- package/dist/plugin/index.d.ts +4 -0
- package/dist/plugin/index.js +66 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/init-collection-hooks.d.ts +4 -0
- package/dist/plugin/init-collection-hooks.js +63 -0
- package/dist/plugin/init-collection-hooks.js.map +1 -0
- package/dist/plugin/init-global-hooks.d.ts +3 -0
- package/dist/plugin/init-global-hooks.js +83 -0
- package/dist/plugin/init-global-hooks.js.map +1 -0
- package/dist/plugin/init-step-tasks.d.ts +3 -0
- package/dist/plugin/init-step-tasks.js +8 -0
- package/dist/plugin/init-step-tasks.js.map +1 -0
- package/dist/plugin/init-webhook.d.ts +2 -0
- package/dist/plugin/init-webhook.js +154 -0
- package/dist/plugin/init-webhook.js.map +1 -0
- package/dist/plugin/init-workflow-hooks.d.ts +6 -0
- package/dist/plugin/init-workflow-hooks.js +46 -0
- package/dist/plugin/init-workflow-hooks.js.map +1 -0
- package/dist/plugin/logger.d.ts +20 -0
- package/dist/plugin/logger.js +47 -0
- package/dist/plugin/logger.js.map +1 -0
- package/dist/steps/create-document-handler.d.ts +2 -0
- package/dist/steps/create-document-handler.js +36 -0
- package/dist/steps/create-document-handler.js.map +1 -0
- package/dist/steps/create-document.d.ts +46 -0
- package/dist/steps/create-document.js +55 -0
- package/dist/steps/create-document.js.map +1 -0
- package/dist/steps/delete-document-handler.d.ts +2 -0
- package/dist/steps/delete-document-handler.js +62 -0
- package/dist/steps/delete-document-handler.js.map +1 -0
- package/dist/steps/delete-document.d.ts +39 -0
- package/dist/steps/delete-document.js +47 -0
- package/dist/steps/delete-document.js.map +1 -0
- package/dist/steps/http-request-handler.d.ts +2 -0
- package/dist/steps/http-request-handler.js +14 -0
- package/dist/steps/http-request-handler.js.map +1 -0
- package/dist/steps/http-request.d.ts +12 -0
- package/dist/steps/http-request.js +19 -0
- package/dist/steps/http-request.js.map +1 -0
- package/dist/steps/index.d.ts +12 -0
- package/dist/steps/index.js +14 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/read-document-handler.d.ts +2 -0
- package/dist/steps/read-document-handler.js +53 -0
- package/dist/steps/read-document-handler.js.map +1 -0
- package/dist/steps/read-document.d.ts +46 -0
- package/dist/steps/read-document.js +75 -0
- package/dist/steps/read-document.js.map +1 -0
- package/dist/steps/send-email-handler.d.ts +2 -0
- package/dist/steps/send-email-handler.js +48 -0
- package/dist/steps/send-email-handler.js.map +1 -0
- package/dist/steps/send-email.d.ts +44 -0
- package/dist/steps/send-email.js +78 -0
- package/dist/steps/send-email.js.map +1 -0
- package/dist/steps/update-document-handler.d.ts +2 -0
- package/dist/steps/update-document-handler.js +40 -0
- package/dist/steps/update-document-handler.js.map +1 -0
- package/dist/steps/update-document.d.ts +46 -0
- package/dist/steps/update-document.js +63 -0
- package/dist/steps/update-document.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createWorkflowCollection } from '../collections/Workflow.js';
|
|
2
|
+
import { WorkflowRunsCollection } from '../collections/WorkflowRuns.js';
|
|
3
|
+
import { WorkflowExecutor } from '../core/workflow-executor.js';
|
|
4
|
+
import { generateCronTasks, registerCronJobs } from './cron-scheduler.js';
|
|
5
|
+
import { initCollectionHooks } from "./init-collection-hooks.js";
|
|
6
|
+
import { initGlobalHooks } from "./init-global-hooks.js";
|
|
7
|
+
import { initStepTasks } from "./init-step-tasks.js";
|
|
8
|
+
import { initWebhookEndpoint } from "./init-webhook.js";
|
|
9
|
+
import { initWorkflowHooks } from './init-workflow-hooks.js';
|
|
10
|
+
import { getConfigLogger, initializeLogger } from './logger.js';
|
|
11
|
+
export { getLogger } from './logger.js';
|
|
12
|
+
const applyCollectionsConfig = (pluginOptions, config)=>{
|
|
13
|
+
// Add workflow collections
|
|
14
|
+
if (!config.collections) {
|
|
15
|
+
config.collections = [];
|
|
16
|
+
}
|
|
17
|
+
config.collections.push(createWorkflowCollection(pluginOptions), WorkflowRunsCollection);
|
|
18
|
+
};
|
|
19
|
+
export const workflowsPlugin = (pluginOptions)=>(config)=>{
|
|
20
|
+
// If the plugin is disabled, return config unchanged
|
|
21
|
+
if (pluginOptions.enabled === false) {
|
|
22
|
+
return config;
|
|
23
|
+
}
|
|
24
|
+
applyCollectionsConfig(pluginOptions, config);
|
|
25
|
+
if (!config.jobs) {
|
|
26
|
+
config.jobs = {
|
|
27
|
+
tasks: []
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const configLogger = getConfigLogger();
|
|
31
|
+
// Generate cron tasks for workflows with cron triggers
|
|
32
|
+
generateCronTasks(config);
|
|
33
|
+
for (const step of pluginOptions.steps){
|
|
34
|
+
if (!config.jobs?.tasks?.find((task)=>task.slug === step.slug)) {
|
|
35
|
+
configLogger.debug(`Registering task: ${step.slug}`);
|
|
36
|
+
config.jobs?.tasks?.push(step);
|
|
37
|
+
} else {
|
|
38
|
+
configLogger.debug(`Task ${step.slug} already registered, skipping`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Initialize webhook endpoint
|
|
42
|
+
initWebhookEndpoint(config, pluginOptions.webhookPrefix || 'webhook');
|
|
43
|
+
// Set up onInit to register collection hooks and initialize features
|
|
44
|
+
const incomingOnInit = config.onInit;
|
|
45
|
+
config.onInit = async (payload)=>{
|
|
46
|
+
// Execute any existing onInit functions first
|
|
47
|
+
if (incomingOnInit) {
|
|
48
|
+
await incomingOnInit(payload);
|
|
49
|
+
}
|
|
50
|
+
// Initialize the logger with the payload instance
|
|
51
|
+
const logger = initializeLogger(payload);
|
|
52
|
+
// Create workflow executor instance
|
|
53
|
+
const executor = new WorkflowExecutor(payload, logger);
|
|
54
|
+
// Initialize hooks
|
|
55
|
+
initCollectionHooks(pluginOptions, payload, logger, executor);
|
|
56
|
+
initGlobalHooks(payload, logger, executor);
|
|
57
|
+
initWorkflowHooks(payload, logger);
|
|
58
|
+
initStepTasks(pluginOptions, payload, logger);
|
|
59
|
+
// Register cron jobs for workflows with cron triggers
|
|
60
|
+
await registerCronJobs(payload, logger);
|
|
61
|
+
logger.info('Plugin initialized successfully');
|
|
62
|
+
};
|
|
63
|
+
return config;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/index.ts"],"sourcesContent":["import type {Config} from 'payload'\n\nimport type {WorkflowsPluginConfig} 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\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\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 if (!config.jobs) {\n config.jobs = {tasks: []}\n }\n\n const configLogger = getConfigLogger()\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 // Execute any existing onInit functions first\n if (incomingOnInit) {\n await incomingOnInit(payload)\n }\n\n // Initialize the logger with the payload instance\n const logger = initializeLogger(payload)\n\n // Create workflow executor instance\n const executor = new WorkflowExecutor(payload, logger)\n\n // Initialize hooks\n initCollectionHooks(pluginOptions, payload, logger, executor)\n initGlobalHooks(payload, logger, executor)\n initWorkflowHooks(payload, logger)\n initStepTasks(pluginOptions, payload, logger)\n\n // Register cron jobs for workflows with cron triggers\n await registerCronJobs(payload, logger)\n\n logger.info('Plugin initialized successfully')\n }\n\n return config\n }\n"],"names":["createWorkflowCollection","WorkflowRunsCollection","WorkflowExecutor","generateCronTasks","registerCronJobs","initCollectionHooks","initGlobalHooks","initStepTasks","initWebhookEndpoint","initWorkflowHooks","getConfigLogger","initializeLogger","getLogger","applyCollectionsConfig","pluginOptions","config","collections","push","workflowsPlugin","enabled","jobs","tasks","configLogger","step","steps","find","task","slug","debug","webhookPrefix","incomingOnInit","onInit","payload","logger","executor","info"],"mappings":"AAIA,SAAQA,wBAAwB,QAAO,6BAA4B;AACnE,SAAQC,sBAAsB,QAAO,iCAAgC;AACrE,SAAQC,gBAAgB,QAAO,+BAA8B;AAC7D,SAAQC,iBAAiB,EAAEC,gBAAgB,QAAO,sBAAqB;AACvE,SAAQC,mBAAmB,QAAO,6BAA4B;AAC9D,SAAQC,eAAe,QAAO,yBAAwB;AACtD,SAAQC,aAAa,QAAO,uBAAsB;AAClD,SAAQC,mBAAmB,QAAO,oBAAmB;AACrD,SAAQC,iBAAiB,QAAO,2BAA0B;AAC1D,SAAQC,eAAe,EAAEC,gBAAgB,QAAO,cAAa;AAE7D,SAAQC,SAAS,QAAO,cAAa;AAErC,MAAMC,yBAAyB,CAAmBC,eAAyCC;IACzF,2BAA2B;IAC3B,IAAI,CAACA,OAAOC,WAAW,EAAE;QACvBD,OAAOC,WAAW,GAAG,EAAE;IACzB;IAEAD,OAAOC,WAAW,CAACC,IAAI,CACrBjB,yBAAyBc,gBACzBb;AAEJ;AAEA,OAAO,MAAMiB,kBACX,CAAuBJ,gBACrB,CAACC;QACC,qDAAqD;QACrD,IAAID,cAAcK,OAAO,KAAK,OAAO;YACnC,OAAOJ;QACT;QAEAF,uBAA8BC,eAAeC;QAE7C,IAAI,CAACA,OAAOK,IAAI,EAAE;YAChBL,OAAOK,IAAI,GAAG;gBAACC,OAAO,EAAE;YAAA;QAC1B;QAEA,MAAMC,eAAeZ;QAErB,uDAAuD;QACvDP,kBAAkBY;QAElB,KAAK,MAAMQ,QAAQT,cAAcU,KAAK,CAAE;YACtC,IAAI,CAACT,OAAOK,IAAI,EAAEC,OAAOI,KAAKC,CAAAA,OAAQA,KAAKC,IAAI,KAAKJ,KAAKI,IAAI,GAAG;gBAC9DL,aAAaM,KAAK,CAAC,CAAC,kBAAkB,EAAEL,KAAKI,IAAI,EAAE;gBACnDZ,OAAOK,IAAI,EAAEC,OAAOJ,KAAKM;YAC3B,OAAO;gBACLD,aAAaM,KAAK,CAAC,CAAC,KAAK,EAAEL,KAAKI,IAAI,CAAC,6BAA6B,CAAC;YACrE;QACF;QAEA,8BAA8B;QAC9BnB,oBAAoBO,QAAQD,cAAce,aAAa,IAAI;QAE3D,qEAAqE;QACrE,MAAMC,iBAAiBf,OAAOgB,MAAM;QACpChB,OAAOgB,MAAM,GAAG,OAAOC;YACrB,8CAA8C;YAC9C,IAAIF,gBAAgB;gBAClB,MAAMA,eAAeE;YACvB;YAEA,kDAAkD;YAClD,MAAMC,SAAStB,iBAAiBqB;YAEhC,oCAAoC;YACpC,MAAME,WAAW,IAAIhC,iBAAiB8B,SAASC;YAE/C,mBAAmB;YACnB5B,oBAAoBS,eAAekB,SAASC,QAAQC;YACpD5B,gBAAgB0B,SAASC,QAAQC;YACjCzB,kBAAkBuB,SAASC;YAC3B1B,cAAcO,eAAekB,SAASC;YAEtC,sDAAsD;YACtD,MAAM7B,iBAAiB4B,SAASC;YAEhCA,OAAOE,IAAI,CAAC;QACd;QAEA,OAAOpB;IACT,EAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Payload } from "payload";
|
|
2
|
+
import type { WorkflowExecutor } from "../core/workflow-executor.js";
|
|
3
|
+
import type { WorkflowsPluginConfig } from "./config-types.js";
|
|
4
|
+
export declare function initCollectionHooks<T extends string>(pluginOptions: WorkflowsPluginConfig<T>, payload: Payload, logger: Payload['logger'], executor: WorkflowExecutor): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export function initCollectionHooks(pluginOptions, payload, logger, executor) {
|
|
2
|
+
// Add hooks to configured collections
|
|
3
|
+
for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers)){
|
|
4
|
+
if (!triggerConfig) {
|
|
5
|
+
continue;
|
|
6
|
+
}
|
|
7
|
+
const collection = payload.collections[collectionSlug];
|
|
8
|
+
const crud = triggerConfig === true ? {
|
|
9
|
+
create: true,
|
|
10
|
+
delete: true,
|
|
11
|
+
read: true,
|
|
12
|
+
update: true
|
|
13
|
+
} : triggerConfig;
|
|
14
|
+
if (!collection.config.hooks) {
|
|
15
|
+
collection.config.hooks = {};
|
|
16
|
+
}
|
|
17
|
+
if (crud.update || crud.create) {
|
|
18
|
+
collection.config.hooks.afterChange = collection.config.hooks.afterChange || [];
|
|
19
|
+
collection.config.hooks.afterChange.push(async (change)=>{
|
|
20
|
+
const operation = change.operation;
|
|
21
|
+
logger.debug({
|
|
22
|
+
collection: change.collection.slug,
|
|
23
|
+
operation
|
|
24
|
+
}, 'Collection hook triggered');
|
|
25
|
+
// Execute workflows for this trigger
|
|
26
|
+
await executor.executeTriggeredWorkflows(change.collection.slug, operation, change.doc, change.previousDoc, change.req);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (crud.read) {
|
|
30
|
+
collection.config.hooks.afterRead = collection.config.hooks.afterRead || [];
|
|
31
|
+
collection.config.hooks.afterRead.push(async (change)=>{
|
|
32
|
+
logger.debug({
|
|
33
|
+
collection: change.collection.slug,
|
|
34
|
+
operation: 'read'
|
|
35
|
+
}, 'Collection hook triggered');
|
|
36
|
+
// Execute workflows for this trigger
|
|
37
|
+
await executor.executeTriggeredWorkflows(change.collection.slug, 'read', change.doc, undefined, change.req);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (crud.delete) {
|
|
41
|
+
collection.config.hooks.afterDelete = collection.config.hooks.afterDelete || [];
|
|
42
|
+
collection.config.hooks.afterDelete.push(async (change)=>{
|
|
43
|
+
logger.debug({
|
|
44
|
+
collection: change.collection.slug,
|
|
45
|
+
operation: 'delete'
|
|
46
|
+
}, 'Collection hook triggered');
|
|
47
|
+
// Execute workflows for this trigger
|
|
48
|
+
await executor.executeTriggeredWorkflows(change.collection.slug, 'delete', change.doc, undefined, change.req);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
if (collection) {
|
|
52
|
+
logger.info({
|
|
53
|
+
collectionSlug
|
|
54
|
+
}, 'Collection hooks registered');
|
|
55
|
+
} else {
|
|
56
|
+
logger.warn({
|
|
57
|
+
collectionSlug
|
|
58
|
+
}, 'Collection not found for trigger configuration');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=init-collection-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/init-collection-hooks.ts"],"sourcesContent":["import type {Payload} from \"payload\"\nimport type {Logger} from \"pino\"\n\nimport type { WorkflowExecutor } from \"../core/workflow-executor.js\"\nimport type {CollectionTriggerConfigCrud, WorkflowsPluginConfig} from \"./config-types.js\"\n\nexport function initCollectionHooks<T extends string>(pluginOptions: WorkflowsPluginConfig<T>, payload: Payload, logger: Payload['logger'], executor: WorkflowExecutor) {\n\n // Add hooks to configured collections\n for (const [collectionSlug, triggerConfig] of Object.entries(pluginOptions.collectionTriggers)) {\n if (!triggerConfig) {\n continue\n }\n\n const collection = payload.collections[collectionSlug as T]\n const crud: CollectionTriggerConfigCrud = triggerConfig === true ? {\n create: true,\n delete: true,\n read: true,\n update: true,\n } : triggerConfig\n\n if (!collection.config.hooks) {\n collection.config.hooks = {} as typeof collection.config.hooks\n }\n\n if (crud.update || crud.create) {\n collection.config.hooks.afterChange = collection.config.hooks.afterChange || []\n collection.config.hooks.afterChange.push(async (change) => {\n const operation = change.operation as 'create' | 'update'\n logger.debug({\n collection: change.collection.slug,\n operation,\n }, 'Collection hook triggered')\n\n // Execute workflows for this trigger\n await executor.executeTriggeredWorkflows(\n change.collection.slug,\n operation,\n change.doc,\n change.previousDoc,\n change.req\n )\n })\n }\n\n if (crud.read) {\n collection.config.hooks.afterRead = collection.config.hooks.afterRead || []\n collection.config.hooks.afterRead.push(async (change) => {\n logger.debug({\n collection: change.collection.slug,\n operation: 'read',\n }, 'Collection hook triggered')\n\n // Execute workflows for this trigger\n await executor.executeTriggeredWorkflows(\n change.collection.slug,\n 'read',\n change.doc,\n undefined,\n change.req\n )\n })\n }\n\n if (crud.delete) {\n collection.config.hooks.afterDelete = collection.config.hooks.afterDelete || []\n collection.config.hooks.afterDelete.push(async (change) => {\n logger.debug({\n collection: change.collection.slug,\n operation: 'delete',\n }, 'Collection hook triggered')\n\n // Execute workflows for this trigger\n await executor.executeTriggeredWorkflows(\n change.collection.slug,\n 'delete',\n change.doc,\n undefined,\n change.req\n )\n })\n }\n\n if (collection) {\n logger.info({collectionSlug}, 'Collection hooks registered')\n } else {\n logger.warn({collectionSlug}, 'Collection not found for trigger configuration')\n }\n }\n}\n"],"names":["initCollectionHooks","pluginOptions","payload","logger","executor","collectionSlug","triggerConfig","Object","entries","collectionTriggers","collection","collections","crud","create","delete","read","update","config","hooks","afterChange","push","change","operation","debug","slug","executeTriggeredWorkflows","doc","previousDoc","req","afterRead","undefined","afterDelete","info","warn"],"mappings":"AAMA,OAAO,SAASA,oBAAsCC,aAAuC,EAAEC,OAAgB,EAAEC,MAAyB,EAAEC,QAA0B;IAEpK,sCAAsC;IACtC,KAAK,MAAM,CAACC,gBAAgBC,cAAc,IAAIC,OAAOC,OAAO,CAACP,cAAcQ,kBAAkB,EAAG;QAC9F,IAAI,CAACH,eAAe;YAClB;QACF;QAEA,MAAMI,aAAaR,QAAQS,WAAW,CAACN,eAAoB;QAC3D,MAAMO,OAAoCN,kBAAkB,OAAO;YACjEO,QAAQ;YACRC,QAAQ;YACRC,MAAM;YACNC,QAAQ;QACV,IAAIV;QAEJ,IAAI,CAACI,WAAWO,MAAM,CAACC,KAAK,EAAE;YAC5BR,WAAWO,MAAM,CAACC,KAAK,GAAG,CAAC;QAC7B;QAEA,IAAIN,KAAKI,MAAM,IAAIJ,KAAKC,MAAM,EAAE;YAC9BH,WAAWO,MAAM,CAACC,KAAK,CAACC,WAAW,GAAGT,WAAWO,MAAM,CAACC,KAAK,CAACC,WAAW,IAAI,EAAE;YAC/ET,WAAWO,MAAM,CAACC,KAAK,CAACC,WAAW,CAACC,IAAI,CAAC,OAAOC;gBAC9C,MAAMC,YAAYD,OAAOC,SAAS;gBAClCnB,OAAOoB,KAAK,CAAC;oBACXb,YAAYW,OAAOX,UAAU,CAACc,IAAI;oBAClCF;gBACF,GAAG;gBAEH,qCAAqC;gBACrC,MAAMlB,SAASqB,yBAAyB,CACtCJ,OAAOX,UAAU,CAACc,IAAI,EACtBF,WACAD,OAAOK,GAAG,EACVL,OAAOM,WAAW,EAClBN,OAAOO,GAAG;YAEd;QACF;QAEA,IAAIhB,KAAKG,IAAI,EAAE;YACbL,WAAWO,MAAM,CAACC,KAAK,CAACW,SAAS,GAAGnB,WAAWO,MAAM,CAACC,KAAK,CAACW,SAAS,IAAI,EAAE;YAC3EnB,WAAWO,MAAM,CAACC,KAAK,CAACW,SAAS,CAACT,IAAI,CAAC,OAAOC;gBAC5ClB,OAAOoB,KAAK,CAAC;oBACXb,YAAYW,OAAOX,UAAU,CAACc,IAAI;oBAClCF,WAAW;gBACb,GAAG;gBAEH,qCAAqC;gBACrC,MAAMlB,SAASqB,yBAAyB,CACtCJ,OAAOX,UAAU,CAACc,IAAI,EACtB,QACAH,OAAOK,GAAG,EACVI,WACAT,OAAOO,GAAG;YAEd;QACF;QAEA,IAAIhB,KAAKE,MAAM,EAAE;YACfJ,WAAWO,MAAM,CAACC,KAAK,CAACa,WAAW,GAAGrB,WAAWO,MAAM,CAACC,KAAK,CAACa,WAAW,IAAI,EAAE;YAC/ErB,WAAWO,MAAM,CAACC,KAAK,CAACa,WAAW,CAACX,IAAI,CAAC,OAAOC;gBAC9ClB,OAAOoB,KAAK,CAAC;oBACXb,YAAYW,OAAOX,UAAU,CAACc,IAAI;oBAClCF,WAAW;gBACb,GAAG;gBAEH,qCAAqC;gBACrC,MAAMlB,SAASqB,yBAAyB,CACtCJ,OAAOX,UAAU,CAACc,IAAI,EACtB,UACAH,OAAOK,GAAG,EACVI,WACAT,OAAOO,GAAG;YAEd;QACF;QAEA,IAAIlB,YAAY;YACdP,OAAO6B,IAAI,CAAC;gBAAC3B;YAAc,GAAG;QAChC,OAAO;YACLF,OAAO8B,IAAI,CAAC;gBAAC5B;YAAc,GAAG;QAChC;IACF;AACF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export function initGlobalHooks(payload, logger, executor) {
|
|
2
|
+
// Get all globals from the config
|
|
3
|
+
const globals = payload.config.globals || [];
|
|
4
|
+
for (const globalConfig of globals){
|
|
5
|
+
const globalSlug = globalConfig.slug;
|
|
6
|
+
// Add afterChange hook to global
|
|
7
|
+
if (!globalConfig.hooks) {
|
|
8
|
+
globalConfig.hooks = {
|
|
9
|
+
afterChange: [],
|
|
10
|
+
afterRead: [],
|
|
11
|
+
beforeChange: [],
|
|
12
|
+
beforeRead: [],
|
|
13
|
+
beforeValidate: []
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
if (!globalConfig.hooks.afterChange) {
|
|
17
|
+
globalConfig.hooks.afterChange = [];
|
|
18
|
+
}
|
|
19
|
+
globalConfig.hooks.afterChange.push(async (change)=>{
|
|
20
|
+
logger.debug({
|
|
21
|
+
global: globalSlug,
|
|
22
|
+
operation: 'update'
|
|
23
|
+
}, 'Global hook triggered');
|
|
24
|
+
// Execute workflows for this global trigger
|
|
25
|
+
await executeTriggeredGlobalWorkflows(globalSlug, 'update', change.doc, change.previousDoc, change.req, payload, logger, executor);
|
|
26
|
+
});
|
|
27
|
+
logger.info({
|
|
28
|
+
globalSlug
|
|
29
|
+
}, 'Global hooks registered');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function executeTriggeredGlobalWorkflows(globalSlug, operation, doc, previousDoc, req, payload, logger, executor) {
|
|
33
|
+
try {
|
|
34
|
+
// Find workflows with matching global triggers
|
|
35
|
+
const workflows = await payload.find({
|
|
36
|
+
collection: 'workflows',
|
|
37
|
+
depth: 2,
|
|
38
|
+
limit: 100,
|
|
39
|
+
req,
|
|
40
|
+
where: {
|
|
41
|
+
'triggers.global': {
|
|
42
|
+
equals: globalSlug
|
|
43
|
+
},
|
|
44
|
+
'triggers.globalOperation': {
|
|
45
|
+
equals: operation
|
|
46
|
+
},
|
|
47
|
+
'triggers.type': {
|
|
48
|
+
equals: 'global-trigger'
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
for (const workflow of workflows.docs){
|
|
53
|
+
logger.info({
|
|
54
|
+
globalSlug,
|
|
55
|
+
operation,
|
|
56
|
+
workflowId: workflow.id,
|
|
57
|
+
workflowName: workflow.name
|
|
58
|
+
}, 'Triggering global workflow');
|
|
59
|
+
// Create execution context
|
|
60
|
+
const context = {
|
|
61
|
+
steps: {},
|
|
62
|
+
trigger: {
|
|
63
|
+
type: 'global',
|
|
64
|
+
doc,
|
|
65
|
+
global: globalSlug,
|
|
66
|
+
operation,
|
|
67
|
+
previousDoc,
|
|
68
|
+
req
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
// Execute the workflow
|
|
72
|
+
await executor.execute(workflow, context, req);
|
|
73
|
+
}
|
|
74
|
+
} catch (error) {
|
|
75
|
+
logger.error({
|
|
76
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
77
|
+
globalSlug,
|
|
78
|
+
operation
|
|
79
|
+
}, 'Failed to execute triggered global workflows');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=init-global-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/init-global-hooks.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from \"payload\"\nimport type { Logger } from \"pino\"\n\nimport type { WorkflowExecutor, Workflow } from \"../core/workflow-executor.js\"\n\nexport function initGlobalHooks(payload: Payload, logger: Payload['logger'], executor: WorkflowExecutor) {\n // Get all globals from the config\n const globals = payload.config.globals || []\n\n for (const globalConfig of globals) {\n const globalSlug = globalConfig.slug\n\n // Add afterChange hook to global\n if (!globalConfig.hooks) {\n globalConfig.hooks = {\n afterChange: [],\n afterRead: [],\n beforeChange: [],\n beforeRead: [],\n beforeValidate: []\n }\n }\n\n if (!globalConfig.hooks.afterChange) {\n globalConfig.hooks.afterChange = []\n }\n\n globalConfig.hooks.afterChange.push(async (change) => {\n logger.debug({\n global: globalSlug,\n operation: 'update'\n }, 'Global hook triggered')\n\n // Execute workflows for this global trigger\n await executeTriggeredGlobalWorkflows(\n globalSlug,\n 'update',\n change.doc,\n change.previousDoc,\n change.req,\n payload,\n logger,\n executor\n )\n })\n\n logger.info({ globalSlug }, 'Global hooks registered')\n }\n}\n\nasync function executeTriggeredGlobalWorkflows(\n globalSlug: string,\n operation: 'update',\n doc: Record<string, any>,\n previousDoc: Record<string, any>,\n req: PayloadRequest,\n payload: Payload,\n logger: Payload['logger'],\n executor: WorkflowExecutor\n): Promise<void> {\n try {\n // Find workflows with matching global triggers\n const workflows = await payload.find({\n collection: 'workflows',\n depth: 2,\n limit: 100,\n req,\n where: {\n 'triggers.global': {\n equals: globalSlug\n },\n 'triggers.globalOperation': {\n equals: operation\n },\n 'triggers.type': {\n equals: 'global-trigger'\n }\n }\n })\n\n for (const workflow of workflows.docs) {\n logger.info({\n globalSlug,\n operation,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Triggering global workflow')\n\n // Create execution context\n const context = {\n steps: {},\n trigger: {\n type: 'global',\n doc,\n global: globalSlug,\n operation,\n previousDoc,\n req\n }\n }\n\n // Execute the workflow\n await executor.execute(workflow as Workflow, context, req)\n }\n } catch (error) {\n logger.error({\n error: error instanceof Error ? error.message : 'Unknown error',\n globalSlug,\n operation\n }, 'Failed to execute triggered global workflows')\n }\n}\n"],"names":["initGlobalHooks","payload","logger","executor","globals","config","globalConfig","globalSlug","slug","hooks","afterChange","afterRead","beforeChange","beforeRead","beforeValidate","push","change","debug","global","operation","executeTriggeredGlobalWorkflows","doc","previousDoc","req","info","workflows","find","collection","depth","limit","where","equals","workflow","docs","workflowId","id","workflowName","name","context","steps","trigger","type","execute","error","Error","message"],"mappings":"AAKA,OAAO,SAASA,gBAAgBC,OAAgB,EAAEC,MAAyB,EAAEC,QAA0B;IACrG,kCAAkC;IAClC,MAAMC,UAAUH,QAAQI,MAAM,CAACD,OAAO,IAAI,EAAE;IAE5C,KAAK,MAAME,gBAAgBF,QAAS;QAClC,MAAMG,aAAaD,aAAaE,IAAI;QAEpC,iCAAiC;QACjC,IAAI,CAACF,aAAaG,KAAK,EAAE;YACvBH,aAAaG,KAAK,GAAG;gBACnBC,aAAa,EAAE;gBACfC,WAAW,EAAE;gBACbC,cAAc,EAAE;gBAChBC,YAAY,EAAE;gBACdC,gBAAgB,EAAE;YACpB;QACF;QAEA,IAAI,CAACR,aAAaG,KAAK,CAACC,WAAW,EAAE;YACnCJ,aAAaG,KAAK,CAACC,WAAW,GAAG,EAAE;QACrC;QAEAJ,aAAaG,KAAK,CAACC,WAAW,CAACK,IAAI,CAAC,OAAOC;YACzCd,OAAOe,KAAK,CAAC;gBACXC,QAAQX;gBACRY,WAAW;YACb,GAAG;YAEH,4CAA4C;YAC5C,MAAMC,gCACJb,YACA,UACAS,OAAOK,GAAG,EACVL,OAAOM,WAAW,EAClBN,OAAOO,GAAG,EACVtB,SACAC,QACAC;QAEJ;QAEAD,OAAOsB,IAAI,CAAC;YAAEjB;QAAW,GAAG;IAC9B;AACF;AAEA,eAAea,gCACbb,UAAkB,EAClBY,SAAmB,EACnBE,GAAwB,EACxBC,WAAgC,EAChCC,GAAmB,EACnBtB,OAAgB,EAChBC,MAAyB,EACzBC,QAA0B;IAE1B,IAAI;QACF,+CAA+C;QAC/C,MAAMsB,YAAY,MAAMxB,QAAQyB,IAAI,CAAC;YACnCC,YAAY;YACZC,OAAO;YACPC,OAAO;YACPN;YACAO,OAAO;gBACL,mBAAmB;oBACjBC,QAAQxB;gBACV;gBACA,4BAA4B;oBAC1BwB,QAAQZ;gBACV;gBACA,iBAAiB;oBACfY,QAAQ;gBACV;YACF;QACF;QAEA,KAAK,MAAMC,YAAYP,UAAUQ,IAAI,CAAE;YACrC/B,OAAOsB,IAAI,CAAC;gBACVjB;gBACAY;gBACAe,YAAYF,SAASG,EAAE;gBACvBC,cAAcJ,SAASK,IAAI;YAC7B,GAAG;YAEH,2BAA2B;YAC3B,MAAMC,UAAU;gBACdC,OAAO,CAAC;gBACRC,SAAS;oBACPC,MAAM;oBACNpB;oBACAH,QAAQX;oBACRY;oBACAG;oBACAC;gBACF;YACF;YAEA,uBAAuB;YACvB,MAAMpB,SAASuC,OAAO,CAACV,UAAsBM,SAASf;QACxD;IACF,EAAE,OAAOoB,OAAO;QACdzC,OAAOyC,KAAK,CAAC;YACXA,OAAOA,iBAAiBC,QAAQD,MAAME,OAAO,GAAG;YAChDtC;YACAY;QACF,GAAG;IACL;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/init-step-tasks.ts"],"sourcesContent":["import type {Payload} from \"payload\"\nimport type {Logger} from \"pino\"\n\nimport type {WorkflowsPluginConfig} from \"./config-types.js\"\n\nexport function initStepTasks<T extends string>(pluginOptions: WorkflowsPluginConfig<T>, payload: Payload, logger: Payload['logger']) {\n logger.info({ stepCount: pluginOptions.steps.length, steps: pluginOptions.steps.map(s => s.slug) }, 'Initializing step tasks')\n\n}\n"],"names":["initStepTasks","pluginOptions","payload","logger","info","stepCount","steps","length","map","s","slug"],"mappings":"AAKA,OAAO,SAASA,cAAgCC,aAAuC,EAAEC,OAAgB,EAAEC,MAAyB;IAClIA,OAAOC,IAAI,CAAC;QAAEC,WAAWJ,cAAcK,KAAK,CAACC,MAAM;QAAED,OAAOL,cAAcK,KAAK,CAACE,GAAG,CAACC,CAAAA,IAAKA,EAAEC,IAAI;IAAE,GAAG;AAEtG"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { WorkflowExecutor } from '../core/workflow-executor.js';
|
|
2
|
+
import { getConfigLogger, initializeLogger } from './logger.js';
|
|
3
|
+
export function initWebhookEndpoint(config, webhookPrefix = 'webhook') {
|
|
4
|
+
const logger = getConfigLogger();
|
|
5
|
+
// Ensure the prefix starts with a slash
|
|
6
|
+
const normalizedPrefix = webhookPrefix.startsWith('/') ? webhookPrefix : `/${webhookPrefix}`;
|
|
7
|
+
logger.debug(`Adding webhook endpoint to config with prefix: ${normalizedPrefix}`);
|
|
8
|
+
logger.debug('Current config.endpoints length:', config.endpoints?.length || 0);
|
|
9
|
+
// Define webhook endpoint
|
|
10
|
+
const webhookEndpoint = {
|
|
11
|
+
handler: async (req)=>{
|
|
12
|
+
const { path } = req.routeParams;
|
|
13
|
+
const webhookData = req.body || {};
|
|
14
|
+
logger.debug('Webhook endpoint handler called, path: ' + path);
|
|
15
|
+
try {
|
|
16
|
+
// Find workflows with matching webhook triggers
|
|
17
|
+
const workflows = await req.payload.find({
|
|
18
|
+
collection: 'workflows',
|
|
19
|
+
depth: 2,
|
|
20
|
+
limit: 100,
|
|
21
|
+
req,
|
|
22
|
+
where: {
|
|
23
|
+
'triggers.type': {
|
|
24
|
+
equals: 'webhook-trigger'
|
|
25
|
+
},
|
|
26
|
+
'triggers.webhookPath': {
|
|
27
|
+
equals: path
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (workflows.docs.length === 0) {
|
|
32
|
+
return new Response(JSON.stringify({
|
|
33
|
+
error: 'No workflows found for this webhook path'
|
|
34
|
+
}), {
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json'
|
|
37
|
+
},
|
|
38
|
+
status: 404
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Create workflow executor for this request
|
|
42
|
+
const logger = initializeLogger(req.payload);
|
|
43
|
+
const executor = new WorkflowExecutor(req.payload, logger);
|
|
44
|
+
const executionPromises = workflows.docs.map(async (workflow)=>{
|
|
45
|
+
try {
|
|
46
|
+
// Create execution context for the webhook trigger
|
|
47
|
+
const context = {
|
|
48
|
+
steps: {},
|
|
49
|
+
trigger: {
|
|
50
|
+
type: 'webhook',
|
|
51
|
+
data: webhookData,
|
|
52
|
+
headers: Object.fromEntries(req.headers?.entries() || []),
|
|
53
|
+
path,
|
|
54
|
+
req
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// Find the matching trigger and check its condition if present
|
|
58
|
+
const triggers = workflow.triggers;
|
|
59
|
+
const matchingTrigger = triggers?.find((trigger)=>trigger.type === 'webhook-trigger' && trigger.webhookPath === path);
|
|
60
|
+
// Check trigger condition if present
|
|
61
|
+
if (matchingTrigger?.condition) {
|
|
62
|
+
const conditionMet = executor.evaluateCondition(matchingTrigger.condition, context);
|
|
63
|
+
if (!conditionMet) {
|
|
64
|
+
logger.info({
|
|
65
|
+
condition: matchingTrigger.condition,
|
|
66
|
+
path,
|
|
67
|
+
workflowId: workflow.id,
|
|
68
|
+
workflowName: workflow.name
|
|
69
|
+
}, 'Webhook trigger condition not met, skipping workflow');
|
|
70
|
+
return {
|
|
71
|
+
status: 'skipped',
|
|
72
|
+
workflowId: workflow.id,
|
|
73
|
+
reason: 'Condition not met'
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
logger.info({
|
|
77
|
+
condition: matchingTrigger.condition,
|
|
78
|
+
path,
|
|
79
|
+
workflowId: workflow.id,
|
|
80
|
+
workflowName: workflow.name
|
|
81
|
+
}, 'Webhook trigger condition met');
|
|
82
|
+
}
|
|
83
|
+
// Execute the workflow
|
|
84
|
+
await executor.execute(workflow, context, req);
|
|
85
|
+
return {
|
|
86
|
+
status: 'triggered',
|
|
87
|
+
workflowId: workflow.id
|
|
88
|
+
};
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
92
|
+
status: 'failed',
|
|
93
|
+
workflowId: workflow.id
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const results = await Promise.allSettled(executionPromises);
|
|
98
|
+
const resultsData = results.map((result, index)=>{
|
|
99
|
+
const baseResult = {
|
|
100
|
+
workflowId: workflows.docs[index].id
|
|
101
|
+
};
|
|
102
|
+
if (result.status === 'fulfilled') {
|
|
103
|
+
return {
|
|
104
|
+
...baseResult,
|
|
105
|
+
...result.value
|
|
106
|
+
};
|
|
107
|
+
} else {
|
|
108
|
+
return {
|
|
109
|
+
...baseResult,
|
|
110
|
+
error: result.reason,
|
|
111
|
+
status: 'failed'
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return new Response(JSON.stringify({
|
|
116
|
+
message: `Triggered ${workflows.docs.length} workflow(s)`,
|
|
117
|
+
results: resultsData
|
|
118
|
+
}), {
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json'
|
|
121
|
+
},
|
|
122
|
+
status: 200
|
|
123
|
+
});
|
|
124
|
+
} catch (error) {
|
|
125
|
+
return new Response(JSON.stringify({
|
|
126
|
+
details: error instanceof Error ? error.message : 'Unknown error',
|
|
127
|
+
error: 'Failed to process webhook'
|
|
128
|
+
}), {
|
|
129
|
+
headers: {
|
|
130
|
+
'Content-Type': 'application/json'
|
|
131
|
+
},
|
|
132
|
+
status: 500
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
method: 'post',
|
|
137
|
+
path: `${normalizedPrefix}/:path`
|
|
138
|
+
};
|
|
139
|
+
// Check if webhook endpoint already exists to avoid duplicates
|
|
140
|
+
const existingEndpoint = config.endpoints?.find((endpoint)=>endpoint.path === webhookEndpoint.path && endpoint.method === webhookEndpoint.method);
|
|
141
|
+
if (!existingEndpoint) {
|
|
142
|
+
// Combine existing endpoints with the webhook endpoint
|
|
143
|
+
config.endpoints = [
|
|
144
|
+
...config.endpoints || [],
|
|
145
|
+
webhookEndpoint
|
|
146
|
+
];
|
|
147
|
+
logger.debug(`Webhook endpoint added at path: ${webhookEndpoint.path}`);
|
|
148
|
+
logger.debug('New config.endpoints length:', config.endpoints.length);
|
|
149
|
+
} else {
|
|
150
|
+
logger.debug(`Webhook endpoint already exists at path: ${webhookEndpoint.path}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
//# sourceMappingURL=init-webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/init-webhook.ts"],"sourcesContent":["import type {Config, PayloadRequest} from 'payload'\n\nimport {type Workflow, WorkflowExecutor} from '../core/workflow-executor.js'\nimport {getConfigLogger, initializeLogger} from './logger.js'\n\nexport function initWebhookEndpoint(config: Config, webhookPrefix = 'webhook'): void {\n const logger = getConfigLogger()\n // Ensure the prefix starts with a slash\n const normalizedPrefix = webhookPrefix.startsWith('/') ? webhookPrefix : `/${webhookPrefix}`\n logger.debug(`Adding webhook endpoint to config with prefix: ${normalizedPrefix}`)\n logger.debug('Current config.endpoints length:', config.endpoints?.length || 0)\n\n // Define webhook endpoint\n const webhookEndpoint = {\n handler: async (req: PayloadRequest) => {\n const {path} = req.routeParams as { path: string }\n const webhookData = req.body || {}\n\n logger.debug('Webhook endpoint handler called, path: ' + path)\n\n try {\n // Find workflows with matching webhook triggers\n const workflows = await req.payload.find({\n collection: 'workflows',\n depth: 2,\n limit: 100,\n req,\n where: {\n 'triggers.type': {\n equals: 'webhook-trigger'\n },\n 'triggers.webhookPath': {\n equals: path\n }\n }\n })\n\n if (workflows.docs.length === 0) {\n return new Response(\n JSON.stringify({error: 'No workflows found for this webhook path'}),\n {\n headers: {'Content-Type': 'application/json'},\n status: 404\n }\n )\n }\n\n // Create workflow executor for this request\n const logger = initializeLogger(req.payload)\n const executor = new WorkflowExecutor(req.payload, logger)\n\n const executionPromises = workflows.docs.map(async (workflow) => {\n try {\n // Create execution context for the webhook trigger\n const context = {\n steps: {},\n trigger: {\n type: 'webhook',\n data: webhookData,\n headers: Object.fromEntries(req.headers?.entries() || []),\n path,\n req\n }\n }\n\n // Find the matching trigger and check its condition if present\n const triggers = workflow.triggers as Array<{\n condition?: string\n type: string\n webhookPath?: string\n }>\n\n const matchingTrigger = triggers?.find(trigger =>\n trigger.type === 'webhook-trigger' &&\n trigger.webhookPath === path\n )\n\n // Check trigger condition if present\n if (matchingTrigger?.condition) {\n const conditionMet = executor.evaluateCondition(matchingTrigger.condition, context)\n \n if (!conditionMet) {\n logger.info({\n condition: matchingTrigger.condition,\n path,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Webhook trigger condition not met, skipping workflow')\n \n return { status: 'skipped', workflowId: workflow.id, reason: 'Condition not met' }\n }\n \n logger.info({\n condition: matchingTrigger.condition,\n path,\n workflowId: workflow.id,\n workflowName: workflow.name\n }, 'Webhook trigger condition met')\n }\n\n // Execute the workflow\n await executor.execute(workflow as Workflow, context, req)\n\n return { status: 'triggered', workflowId: workflow.id }\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : 'Unknown error',\n status: 'failed',\n workflowId: workflow.id\n }\n }\n })\n\n const results = await Promise.allSettled(executionPromises)\n const resultsData = results.map((result, index) => {\n const baseResult = { workflowId: workflows.docs[index].id }\n if (result.status === 'fulfilled') {\n return { ...baseResult, ...result.value }\n } else {\n return { ...baseResult, error: result.reason, status: 'failed' }\n }\n })\n\n return new Response(\n JSON.stringify({\n message: `Triggered ${workflows.docs.length} workflow(s)`,\n results: resultsData\n }),\n {\n headers: { 'Content-Type': 'application/json' },\n status: 200\n }\n )\n\n } catch (error) {\n return new Response(\n JSON.stringify({\n details: error instanceof Error ? error.message : 'Unknown error',\n error: 'Failed to process webhook'\n }),\n {\n headers: { 'Content-Type': 'application/json' },\n status: 500\n }\n )\n }\n },\n method: 'post' as const,\n path: `${normalizedPrefix}/:path`\n }\n\n // Check if webhook endpoint already exists to avoid duplicates\n const existingEndpoint = config.endpoints?.find(endpoint => \n endpoint.path === webhookEndpoint.path && endpoint.method === webhookEndpoint.method\n )\n \n if (!existingEndpoint) {\n // Combine existing endpoints with the webhook endpoint\n config.endpoints = [...(config.endpoints || []), webhookEndpoint]\n logger.debug(`Webhook endpoint added at path: ${webhookEndpoint.path}`)\n logger.debug('New config.endpoints length:', config.endpoints.length)\n } else {\n logger.debug(`Webhook endpoint already exists at path: ${webhookEndpoint.path}`)\n }\n}\n"],"names":["WorkflowExecutor","getConfigLogger","initializeLogger","initWebhookEndpoint","config","webhookPrefix","logger","normalizedPrefix","startsWith","debug","endpoints","length","webhookEndpoint","handler","req","path","routeParams","webhookData","body","workflows","payload","find","collection","depth","limit","where","equals","docs","Response","JSON","stringify","error","headers","status","executor","executionPromises","map","workflow","context","steps","trigger","type","data","Object","fromEntries","entries","triggers","matchingTrigger","webhookPath","condition","conditionMet","evaluateCondition","info","workflowId","id","workflowName","name","reason","execute","Error","message","results","Promise","allSettled","resultsData","result","index","baseResult","value","details","method","existingEndpoint","endpoint"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { updateWorkflowCronJobs, removeWorkflowCronJobs } from './cron-scheduler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Initialize hooks for the workflows collection itself
|
|
4
|
+
* to manage cron jobs when workflows are created/updated
|
|
5
|
+
*/ export function initWorkflowHooks(payload, logger) {
|
|
6
|
+
// Add afterChange hook to workflows collection to update cron jobs
|
|
7
|
+
const workflowsCollection = payload.collections.workflows;
|
|
8
|
+
if (!workflowsCollection) {
|
|
9
|
+
logger.warn('Workflows collection not found, cannot initialize workflow hooks');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
// Add afterChange hook to register/update cron jobs
|
|
13
|
+
if (!workflowsCollection.config.hooks?.afterChange) {
|
|
14
|
+
if (!workflowsCollection.config.hooks) {
|
|
15
|
+
// @ts-expect-error - hooks object will be populated by Payload
|
|
16
|
+
workflowsCollection.config.hooks = {};
|
|
17
|
+
}
|
|
18
|
+
workflowsCollection.config.hooks.afterChange = [];
|
|
19
|
+
}
|
|
20
|
+
workflowsCollection.config.hooks.afterChange.push(async ({ doc, operation })=>{
|
|
21
|
+
if (operation === 'create' || operation === 'update') {
|
|
22
|
+
logger.debug({
|
|
23
|
+
operation,
|
|
24
|
+
workflowId: doc.id,
|
|
25
|
+
workflowName: doc.name
|
|
26
|
+
}, 'Workflow changed, updating cron jobs selectively');
|
|
27
|
+
// Update cron jobs for this specific workflow only
|
|
28
|
+
await updateWorkflowCronJobs(doc.id, payload, logger);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
// Add afterDelete hook to clean up cron jobs
|
|
32
|
+
if (!workflowsCollection.config.hooks?.afterDelete) {
|
|
33
|
+
workflowsCollection.config.hooks.afterDelete = [];
|
|
34
|
+
}
|
|
35
|
+
workflowsCollection.config.hooks.afterDelete.push(async ({ doc })=>{
|
|
36
|
+
logger.debug({
|
|
37
|
+
workflowId: doc.id,
|
|
38
|
+
workflowName: doc.name
|
|
39
|
+
}, 'Workflow deleted, removing cron jobs');
|
|
40
|
+
// Remove cron jobs for the deleted workflow
|
|
41
|
+
removeWorkflowCronJobs(doc.id, payload, logger);
|
|
42
|
+
});
|
|
43
|
+
logger.info('Workflow hooks initialized for cron job management');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=init-workflow-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/init-workflow-hooks.ts"],"sourcesContent":["import type {Payload} from 'payload'\n\nimport {updateWorkflowCronJobs, removeWorkflowCronJobs} from './cron-scheduler.js'\n\n/**\n * Initialize hooks for the workflows collection itself\n * to manage cron jobs when workflows are created/updated\n */\nexport function initWorkflowHooks(payload: Payload, logger: Payload['logger']): void {\n // Add afterChange hook to workflows collection to update cron jobs\n const workflowsCollection = payload.collections.workflows\n \n if (!workflowsCollection) {\n logger.warn('Workflows collection not found, cannot initialize workflow hooks')\n return\n }\n \n // Add afterChange hook to register/update cron jobs\n if (!workflowsCollection.config.hooks?.afterChange) {\n if (!workflowsCollection.config.hooks) {\n // @ts-expect-error - hooks object will be populated by Payload\n workflowsCollection.config.hooks = {}\n }\n workflowsCollection.config.hooks.afterChange = []\n }\n \n workflowsCollection.config.hooks.afterChange.push(async ({ doc, operation }) => {\n if (operation === 'create' || operation === 'update') {\n logger.debug({\n operation,\n workflowId: doc.id,\n workflowName: doc.name\n }, 'Workflow changed, updating cron jobs selectively')\n \n // Update cron jobs for this specific workflow only\n await updateWorkflowCronJobs(doc.id, payload, logger)\n }\n })\n \n // Add afterDelete hook to clean up cron jobs\n if (!workflowsCollection.config.hooks?.afterDelete) {\n workflowsCollection.config.hooks.afterDelete = []\n }\n \n workflowsCollection.config.hooks.afterDelete.push(async ({ doc }) => {\n logger.debug({\n workflowId: doc.id,\n workflowName: doc.name\n }, 'Workflow deleted, removing cron jobs')\n \n // Remove cron jobs for the deleted workflow\n removeWorkflowCronJobs(doc.id, payload, logger)\n })\n \n logger.info('Workflow hooks initialized for cron job management')\n}"],"names":["updateWorkflowCronJobs","removeWorkflowCronJobs","initWorkflowHooks","payload","logger","workflowsCollection","collections","workflows","warn","config","hooks","afterChange","push","doc","operation","debug","workflowId","id","workflowName","name","afterDelete","info"],"mappings":"AAEA,SAAQA,sBAAsB,EAAEC,sBAAsB,QAAO,sBAAqB;AAElF;;;CAGC,GACD,OAAO,SAASC,kBAAkBC,OAAgB,EAAEC,MAAyB;IAC3E,mEAAmE;IACnE,MAAMC,sBAAsBF,QAAQG,WAAW,CAACC,SAAS;IAEzD,IAAI,CAACF,qBAAqB;QACxBD,OAAOI,IAAI,CAAC;QACZ;IACF;IAEA,oDAAoD;IACpD,IAAI,CAACH,oBAAoBI,MAAM,CAACC,KAAK,EAAEC,aAAa;QAClD,IAAI,CAACN,oBAAoBI,MAAM,CAACC,KAAK,EAAE;YACrC,+DAA+D;YAC/DL,oBAAoBI,MAAM,CAACC,KAAK,GAAG,CAAC;QACtC;QACAL,oBAAoBI,MAAM,CAACC,KAAK,CAACC,WAAW,GAAG,EAAE;IACnD;IAEAN,oBAAoBI,MAAM,CAACC,KAAK,CAACC,WAAW,CAACC,IAAI,CAAC,OAAO,EAAEC,GAAG,EAAEC,SAAS,EAAE;QACzE,IAAIA,cAAc,YAAYA,cAAc,UAAU;YACpDV,OAAOW,KAAK,CAAC;gBACXD;gBACAE,YAAYH,IAAII,EAAE;gBAClBC,cAAcL,IAAIM,IAAI;YACxB,GAAG;YAEH,mDAAmD;YACnD,MAAMnB,uBAAuBa,IAAII,EAAE,EAAEd,SAASC;QAChD;IACF;IAEA,6CAA6C;IAC7C,IAAI,CAACC,oBAAoBI,MAAM,CAACC,KAAK,EAAEU,aAAa;QAClDf,oBAAoBI,MAAM,CAACC,KAAK,CAACU,WAAW,GAAG,EAAE;IACnD;IAEAf,oBAAoBI,MAAM,CAACC,KAAK,CAACU,WAAW,CAACR,IAAI,CAAC,OAAO,EAAEC,GAAG,EAAE;QAC9DT,OAAOW,KAAK,CAAC;YACXC,YAAYH,IAAII,EAAE;YAClBC,cAAcL,IAAIM,IAAI;QACxB,GAAG;QAEH,4CAA4C;QAC5ClB,uBAAuBY,IAAII,EAAE,EAAEd,SAASC;IAC1C;IAEAA,OAAOiB,IAAI,CAAC;AACd"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Payload } from 'payload';
|
|
2
|
+
/**
|
|
3
|
+
* Get a logger for config-time use (before Payload initialization)
|
|
4
|
+
*/
|
|
5
|
+
export declare function getConfigLogger(): {
|
|
6
|
+
debug: (message: string, ...args: any[]) => void;
|
|
7
|
+
error: (message: string, ...args: any[]) => void;
|
|
8
|
+
info: (message: string, ...args: any[]) => void;
|
|
9
|
+
warn: (message: string, ...args: any[]) => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the plugin logger using Payload's Pino instance
|
|
13
|
+
* This creates a child logger with plugin identification
|
|
14
|
+
*/
|
|
15
|
+
export declare function initializeLogger(payload: Payload): Payload['logger'];
|
|
16
|
+
/**
|
|
17
|
+
* Get the plugin logger instance
|
|
18
|
+
* Throws error if not initialized
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLogger(): Payload['logger'];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Global logger instance - use Payload's logger type
|
|
2
|
+
let pluginLogger = null;
|
|
3
|
+
/**
|
|
4
|
+
* Simple config-time logger for use during plugin configuration
|
|
5
|
+
* Uses console with plugin prefix since Payload logger isn't available yet
|
|
6
|
+
*/ const configLogger = {
|
|
7
|
+
debug: (message, ...args)=>{
|
|
8
|
+
if (process.env.NODE_ENV === 'development') {
|
|
9
|
+
console.log(`[payload-automation] ${message}`, ...args);
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
error: (message, ...args)=>{
|
|
13
|
+
console.error(`[payload-automation] ${message}`, ...args);
|
|
14
|
+
},
|
|
15
|
+
info: (message, ...args)=>{
|
|
16
|
+
console.log(`[payload-automation] ${message}`, ...args);
|
|
17
|
+
},
|
|
18
|
+
warn: (message, ...args)=>{
|
|
19
|
+
console.warn(`[payload-automation] ${message}`, ...args);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get a logger for config-time use (before Payload initialization)
|
|
24
|
+
*/ export function getConfigLogger() {
|
|
25
|
+
return configLogger;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the plugin logger using Payload's Pino instance
|
|
29
|
+
* This creates a child logger with plugin identification
|
|
30
|
+
*/ export function initializeLogger(payload) {
|
|
31
|
+
// Create a child logger with plugin identification
|
|
32
|
+
pluginLogger = payload.logger.child({
|
|
33
|
+
plugin: '@xtr-dev/payload-automation'
|
|
34
|
+
});
|
|
35
|
+
return pluginLogger;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the plugin logger instance
|
|
39
|
+
* Throws error if not initialized
|
|
40
|
+
*/ export function getLogger() {
|
|
41
|
+
if (!pluginLogger) {
|
|
42
|
+
throw new Error('@xtr-dev/payload-automation: Logger not initialized. Make sure the plugin is properly configured.');
|
|
43
|
+
}
|
|
44
|
+
return pluginLogger;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugin/logger.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\n// Global logger instance - use Payload's logger type\nlet pluginLogger: Payload['logger'] | null = null\n\n/**\n * Simple config-time logger for use during plugin configuration\n * Uses console with plugin prefix since Payload logger isn't available yet\n */\nconst configLogger = {\n debug: (message: string, ...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.log(`[payload-automation] ${message}`, ...args)\n }\n },\n error: (message: string, ...args: any[]) => {\n console.error(`[payload-automation] ${message}`, ...args)\n },\n info: (message: string, ...args: any[]) => {\n console.log(`[payload-automation] ${message}`, ...args)\n },\n warn: (message: string, ...args: any[]) => {\n console.warn(`[payload-automation] ${message}`, ...args)\n }\n}\n\n/**\n * Get a logger for config-time use (before Payload initialization)\n */\nexport function getConfigLogger() {\n return configLogger\n}\n\n/**\n * Initialize the plugin logger using Payload's Pino instance\n * This creates a child logger with plugin identification\n */\nexport function initializeLogger(payload: Payload): Payload['logger'] {\n // Create a child logger with plugin identification\n pluginLogger = payload.logger.child({\n plugin: '@xtr-dev/payload-automation'\n })\n return pluginLogger\n}\n\n/**\n * Get the plugin logger instance\n * Throws error if not initialized\n */\nexport function getLogger(): Payload['logger'] {\n if (!pluginLogger) {\n throw new Error('@xtr-dev/payload-automation: Logger not initialized. Make sure the plugin is properly configured.')\n }\n\n return pluginLogger\n}\n"],"names":["pluginLogger","configLogger","debug","message","args","process","env","NODE_ENV","console","log","error","info","warn","getConfigLogger","initializeLogger","payload","logger","child","plugin","getLogger","Error"],"mappings":"AAEA,qDAAqD;AACrD,IAAIA,eAAyC;AAE7C;;;CAGC,GACD,MAAMC,eAAe;IACnBC,OAAO,CAACC,SAAiB,GAAGC;QAC1B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;YAC1CC,QAAQC,GAAG,CAAC,CAAC,qBAAqB,EAAEN,SAAS,KAAKC;QACpD;IACF;IACAM,OAAO,CAACP,SAAiB,GAAGC;QAC1BI,QAAQE,KAAK,CAAC,CAAC,qBAAqB,EAAEP,SAAS,KAAKC;IACtD;IACAO,MAAM,CAACR,SAAiB,GAAGC;QACzBI,QAAQC,GAAG,CAAC,CAAC,qBAAqB,EAAEN,SAAS,KAAKC;IACpD;IACAQ,MAAM,CAACT,SAAiB,GAAGC;QACzBI,QAAQI,IAAI,CAAC,CAAC,qBAAqB,EAAET,SAAS,KAAKC;IACrD;AACF;AAEA;;CAEC,GACD,OAAO,SAASS;IACd,OAAOZ;AACT;AAEA;;;CAGC,GACD,OAAO,SAASa,iBAAiBC,OAAgB;IAC/C,mDAAmD;IACnDf,eAAee,QAAQC,MAAM,CAACC,KAAK,CAAC;QAClCC,QAAQ;IACV;IACA,OAAOlB;AACT;AAEA;;;CAGC,GACD,OAAO,SAASmB;IACd,IAAI,CAACnB,cAAc;QACjB,MAAM,IAAIoB,MAAM;IAClB;IAEA,OAAOpB;AACT"}
|