n8n-mcp 2.27.2 → 2.28.0

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.
Files changed (62) hide show
  1. package/README.md +5 -2
  2. package/dist/mcp/handlers-n8n-manager.d.ts +2 -1
  3. package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
  4. package/dist/mcp/handlers-n8n-manager.js +175 -35
  5. package/dist/mcp/handlers-n8n-manager.js.map +1 -1
  6. package/dist/mcp/server.js +3 -3
  7. package/dist/mcp/server.js.map +1 -1
  8. package/dist/mcp/tool-docs/index.js +1 -1
  9. package/dist/mcp/tool-docs/index.js.map +1 -1
  10. package/dist/mcp/tool-docs/workflow_management/index.d.ts +1 -1
  11. package/dist/mcp/tool-docs/workflow_management/index.d.ts.map +1 -1
  12. package/dist/mcp/tool-docs/workflow_management/index.js +3 -3
  13. package/dist/mcp/tool-docs/workflow_management/index.js.map +1 -1
  14. package/dist/mcp/tool-docs/workflow_management/n8n-create-workflow.js +2 -2
  15. package/dist/mcp/tool-docs/workflow_management/n8n-create-workflow.js.map +1 -1
  16. package/dist/mcp/tool-docs/workflow_management/n8n-executions.js +1 -1
  17. package/dist/mcp/tool-docs/workflow_management/n8n-executions.js.map +1 -1
  18. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.d.ts +3 -0
  19. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.d.ts.map +1 -0
  20. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js +140 -0
  21. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js.map +1 -0
  22. package/dist/mcp/tools-documentation.js +1 -1
  23. package/dist/mcp/tools-n8n-manager.d.ts.map +1 -1
  24. package/dist/mcp/tools-n8n-manager.js +29 -8
  25. package/dist/mcp/tools-n8n-manager.js.map +1 -1
  26. package/dist/triggers/handlers/base-handler.d.ts +21 -0
  27. package/dist/triggers/handlers/base-handler.d.ts.map +1 -0
  28. package/dist/triggers/handlers/base-handler.js +60 -0
  29. package/dist/triggers/handlers/base-handler.js.map +1 -0
  30. package/dist/triggers/handlers/chat-handler.d.ts +38 -0
  31. package/dist/triggers/handlers/chat-handler.d.ts.map +1 -0
  32. package/dist/triggers/handlers/chat-handler.js +129 -0
  33. package/dist/triggers/handlers/chat-handler.js.map +1 -0
  34. package/dist/triggers/handlers/form-handler.d.ts +35 -0
  35. package/dist/triggers/handlers/form-handler.d.ts.map +1 -0
  36. package/dist/triggers/handlers/form-handler.js +113 -0
  37. package/dist/triggers/handlers/form-handler.js.map +1 -0
  38. package/dist/triggers/handlers/webhook-handler.d.ts +38 -0
  39. package/dist/triggers/handlers/webhook-handler.d.ts.map +1 -0
  40. package/dist/triggers/handlers/webhook-handler.js +115 -0
  41. package/dist/triggers/handlers/webhook-handler.js.map +1 -0
  42. package/dist/triggers/index.d.ts +5 -0
  43. package/dist/triggers/index.d.ts.map +1 -0
  44. package/dist/triggers/index.js +14 -0
  45. package/dist/triggers/index.js.map +1 -0
  46. package/dist/triggers/trigger-detector.d.ts +6 -0
  47. package/dist/triggers/trigger-detector.d.ts.map +1 -0
  48. package/dist/triggers/trigger-detector.js +191 -0
  49. package/dist/triggers/trigger-detector.js.map +1 -0
  50. package/dist/triggers/trigger-registry.d.ts +18 -0
  51. package/dist/triggers/trigger-registry.d.ts.map +1 -0
  52. package/dist/triggers/trigger-registry.js +87 -0
  53. package/dist/triggers/trigger-registry.js.map +1 -0
  54. package/dist/triggers/types.d.ts +76 -0
  55. package/dist/triggers/types.d.ts.map +1 -0
  56. package/dist/triggers/types.js +3 -0
  57. package/dist/triggers/types.js.map +1 -0
  58. package/package.json +1 -1
  59. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.d.ts +0 -3
  60. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.d.ts.map +0 -1
  61. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.js +0 -120
  62. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.js.map +0 -1
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FormHandler = void 0;
40
+ const zod_1 = require("zod");
41
+ const axios_1 = __importDefault(require("axios"));
42
+ const base_handler_1 = require("./base-handler");
43
+ const formInputSchema = zod_1.z.object({
44
+ workflowId: zod_1.z.string(),
45
+ triggerType: zod_1.z.literal('form'),
46
+ formData: zod_1.z.record(zod_1.z.unknown()).optional(),
47
+ data: zod_1.z.record(zod_1.z.unknown()).optional(),
48
+ headers: zod_1.z.record(zod_1.z.string()).optional(),
49
+ timeout: zod_1.z.number().optional(),
50
+ waitForResponse: zod_1.z.boolean().optional(),
51
+ });
52
+ class FormHandler extends base_handler_1.BaseTriggerHandler {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.triggerType = 'form';
56
+ this.capabilities = {
57
+ requiresActiveWorkflow: true,
58
+ canPassInputData: true,
59
+ };
60
+ this.inputSchema = formInputSchema;
61
+ }
62
+ async execute(input, workflow, triggerInfo) {
63
+ const startTime = Date.now();
64
+ try {
65
+ const baseUrl = this.getBaseUrl();
66
+ if (!baseUrl) {
67
+ return this.errorResponse(input, 'Cannot determine n8n base URL', startTime);
68
+ }
69
+ const formPath = triggerInfo?.node?.parameters?.path || input.workflowId;
70
+ const formUrl = `${baseUrl.replace(/\/+$/, '')}/form/${formPath}`;
71
+ const formFields = {
72
+ ...input.data,
73
+ ...input.formData,
74
+ };
75
+ const { SSRFProtection } = await Promise.resolve().then(() => __importStar(require('../../utils/ssrf-protection')));
76
+ const validation = await SSRFProtection.validateWebhookUrl(formUrl);
77
+ if (!validation.valid) {
78
+ return this.errorResponse(input, `SSRF protection: ${validation.reason}`, startTime);
79
+ }
80
+ const config = {
81
+ method: 'POST',
82
+ url: formUrl,
83
+ headers: {
84
+ 'Content-Type': 'application/json',
85
+ ...input.headers,
86
+ },
87
+ data: formFields,
88
+ timeout: input.timeout || (input.waitForResponse !== false ? 120000 : 30000),
89
+ validateStatus: (status) => status < 500,
90
+ };
91
+ const response = await axios_1.default.request(config);
92
+ return this.normalizeResponse(response.data, input, startTime, {
93
+ status: response.status,
94
+ statusText: response.statusText,
95
+ metadata: {
96
+ duration: Date.now() - startTime,
97
+ },
98
+ });
99
+ }
100
+ catch (error) {
101
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
102
+ const errorDetails = error?.response?.data;
103
+ const executionId = errorDetails?.executionId || errorDetails?.id;
104
+ return this.errorResponse(input, errorMessage, startTime, {
105
+ executionId,
106
+ code: error?.code,
107
+ details: errorDetails,
108
+ });
109
+ }
110
+ }
111
+ }
112
+ exports.FormHandler = FormHandler;
113
+ //# sourceMappingURL=form-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-handler.js","sourceRoot":"","sources":["../../../src/triggers/handlers/form-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ import { Workflow } from '../../types/n8n-api';
3
+ import { TriggerType, TriggerResponse, TriggerHandlerCapabilities, DetectedTrigger, WebhookTriggerInput } from '../types';
4
+ import { BaseTriggerHandler } from './base-handler';
5
+ export declare class WebhookHandler extends BaseTriggerHandler<WebhookTriggerInput> {
6
+ readonly triggerType: TriggerType;
7
+ readonly capabilities: TriggerHandlerCapabilities;
8
+ readonly inputSchema: z.ZodObject<{
9
+ workflowId: z.ZodString;
10
+ triggerType: z.ZodLiteral<"webhook">;
11
+ httpMethod: z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "DELETE"]>>;
12
+ webhookPath: z.ZodOptional<z.ZodString>;
13
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
14
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
15
+ timeout: z.ZodOptional<z.ZodNumber>;
16
+ waitForResponse: z.ZodOptional<z.ZodBoolean>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ workflowId: string;
19
+ triggerType: "webhook";
20
+ httpMethod?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
21
+ webhookPath?: string | undefined;
22
+ data?: Record<string, unknown> | undefined;
23
+ headers?: Record<string, string> | undefined;
24
+ timeout?: number | undefined;
25
+ waitForResponse?: boolean | undefined;
26
+ }, {
27
+ workflowId: string;
28
+ triggerType: "webhook";
29
+ httpMethod?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
30
+ webhookPath?: string | undefined;
31
+ data?: Record<string, unknown> | undefined;
32
+ headers?: Record<string, string> | undefined;
33
+ timeout?: number | undefined;
34
+ waitForResponse?: boolean | undefined;
35
+ }>;
36
+ execute(input: WebhookTriggerInput, workflow: Workflow, triggerInfo?: DetectedTrigger): Promise<TriggerResponse>;
37
+ }
38
+ //# sourceMappingURL=webhook-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-handler.d.ts","sourceRoot":"","sources":["../../../src/triggers/handlers/webhook-handler.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAoBpD,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,mBAAmB,CAAC;IACzE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAa;IAE9C,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAI/C;IAEF,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAsB;IAEpC,OAAO,CACX,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,eAAe,CAAC;CAuE5B"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WebhookHandler = void 0;
37
+ const zod_1 = require("zod");
38
+ const base_handler_1 = require("./base-handler");
39
+ const trigger_detector_1 = require("../trigger-detector");
40
+ const webhookInputSchema = zod_1.z.object({
41
+ workflowId: zod_1.z.string(),
42
+ triggerType: zod_1.z.literal('webhook'),
43
+ httpMethod: zod_1.z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional(),
44
+ webhookPath: zod_1.z.string().optional(),
45
+ data: zod_1.z.record(zod_1.z.unknown()).optional(),
46
+ headers: zod_1.z.record(zod_1.z.string()).optional(),
47
+ timeout: zod_1.z.number().optional(),
48
+ waitForResponse: zod_1.z.boolean().optional(),
49
+ });
50
+ class WebhookHandler extends base_handler_1.BaseTriggerHandler {
51
+ constructor() {
52
+ super(...arguments);
53
+ this.triggerType = 'webhook';
54
+ this.capabilities = {
55
+ requiresActiveWorkflow: true,
56
+ supportedMethods: ['GET', 'POST', 'PUT', 'DELETE'],
57
+ canPassInputData: true,
58
+ };
59
+ this.inputSchema = webhookInputSchema;
60
+ }
61
+ async execute(input, workflow, triggerInfo) {
62
+ const startTime = Date.now();
63
+ try {
64
+ const baseUrl = this.getBaseUrl();
65
+ if (!baseUrl) {
66
+ return this.errorResponse(input, 'Cannot determine n8n base URL', startTime);
67
+ }
68
+ let webhookUrl;
69
+ if (input.webhookPath) {
70
+ webhookUrl = `${baseUrl.replace(/\/+$/, '')}/webhook/${input.webhookPath}`;
71
+ }
72
+ else if (triggerInfo?.webhookPath) {
73
+ webhookUrl = (0, trigger_detector_1.buildTriggerUrl)(baseUrl, triggerInfo, 'production');
74
+ }
75
+ else {
76
+ return this.errorResponse(input, 'No webhook path available. Provide webhookPath parameter or ensure workflow has a webhook trigger.', startTime);
77
+ }
78
+ const httpMethod = input.httpMethod || triggerInfo?.httpMethod || 'POST';
79
+ const { SSRFProtection } = await Promise.resolve().then(() => __importStar(require('../../utils/ssrf-protection')));
80
+ const validation = await SSRFProtection.validateWebhookUrl(webhookUrl);
81
+ if (!validation.valid) {
82
+ return this.errorResponse(input, `SSRF protection: ${validation.reason}`, startTime);
83
+ }
84
+ const webhookRequest = {
85
+ webhookUrl,
86
+ httpMethod: httpMethod,
87
+ data: input.data,
88
+ headers: input.headers,
89
+ waitForResponse: input.waitForResponse ?? true,
90
+ };
91
+ const response = await this.client.triggerWebhook(webhookRequest);
92
+ return this.normalizeResponse(response, input, startTime, {
93
+ status: response.status,
94
+ statusText: response.statusText,
95
+ metadata: {
96
+ duration: Date.now() - startTime,
97
+ webhookPath: input.webhookPath || triggerInfo?.webhookPath,
98
+ httpMethod,
99
+ },
100
+ });
101
+ }
102
+ catch (error) {
103
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
104
+ const errorDetails = error?.details;
105
+ const executionId = errorDetails?.executionId || errorDetails?.id;
106
+ return this.errorResponse(input, errorMessage, startTime, {
107
+ executionId,
108
+ code: error?.code,
109
+ details: errorDetails,
110
+ });
111
+ }
112
+ }
113
+ }
114
+ exports.WebhookHandler = WebhookHandler;
115
+ //# sourceMappingURL=webhook-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-handler.js","sourceRoot":"","sources":["../../../src/triggers/handlers/webhook-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { TriggerType, BaseTriggerInput, WebhookTriggerInput, FormTriggerInput, ChatTriggerInput, TriggerInput, TriggerResponse, TriggerHandlerCapabilities, DetectedTrigger, TriggerDetectionResult, TestWorkflowInput, } from './types';
2
+ export { detectTriggerFromWorkflow, buildTriggerUrl, describeTrigger, } from './trigger-detector';
3
+ export { TriggerRegistry, initializeTriggerRegistry, ensureRegistryInitialized, } from './trigger-registry';
4
+ export { BaseTriggerHandler, TriggerHandlerConstructor, } from './handlers/base-handler';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/triggers/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseTriggerHandler = exports.ensureRegistryInitialized = exports.initializeTriggerRegistry = exports.TriggerRegistry = exports.describeTrigger = exports.buildTriggerUrl = exports.detectTriggerFromWorkflow = void 0;
4
+ var trigger_detector_1 = require("./trigger-detector");
5
+ Object.defineProperty(exports, "detectTriggerFromWorkflow", { enumerable: true, get: function () { return trigger_detector_1.detectTriggerFromWorkflow; } });
6
+ Object.defineProperty(exports, "buildTriggerUrl", { enumerable: true, get: function () { return trigger_detector_1.buildTriggerUrl; } });
7
+ Object.defineProperty(exports, "describeTrigger", { enumerable: true, get: function () { return trigger_detector_1.describeTrigger; } });
8
+ var trigger_registry_1 = require("./trigger-registry");
9
+ Object.defineProperty(exports, "TriggerRegistry", { enumerable: true, get: function () { return trigger_registry_1.TriggerRegistry; } });
10
+ Object.defineProperty(exports, "initializeTriggerRegistry", { enumerable: true, get: function () { return trigger_registry_1.initializeTriggerRegistry; } });
11
+ Object.defineProperty(exports, "ensureRegistryInitialized", { enumerable: true, get: function () { return trigger_registry_1.ensureRegistryInitialized; } });
12
+ var base_handler_1 = require("./handlers/base-handler");
13
+ Object.defineProperty(exports, "BaseTriggerHandler", { enumerable: true, get: function () { return base_handler_1.BaseTriggerHandler; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/triggers/index.ts"],"names":[],"mappings":";;;AA4BA,uDAI4B;AAH1B,6HAAA,yBAAyB,OAAA;AACzB,mHAAA,eAAe,OAAA;AACf,mHAAA,eAAe,OAAA;AAIjB,uDAI4B;AAH1B,mHAAA,eAAe,OAAA;AACf,6HAAA,yBAAyB,OAAA;AACzB,6HAAA,yBAAyB,OAAA;AAI3B,wDAGiC;AAF/B,kHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { Workflow } from '../types/n8n-api';
2
+ import { DetectedTrigger, TriggerDetectionResult } from './types';
3
+ export declare function detectTriggerFromWorkflow(workflow: Workflow): TriggerDetectionResult;
4
+ export declare function buildTriggerUrl(baseUrl: string, trigger: DetectedTrigger, mode?: 'production' | 'test'): string;
5
+ export declare function describeTrigger(trigger: DetectedTrigger): string;
6
+ //# sourceMappingURL=trigger-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-detector.d.ts","sourceRoot":"","sources":["../../src/triggers/trigger-detector.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAgB,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAe,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AA8B/E,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,sBAAsB,CAsDpF;AAsKD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,YAAY,GAAG,MAAqB,GACzC,MAAM,CAoBR;AAKD,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAehE"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectTriggerFromWorkflow = detectTriggerFromWorkflow;
4
+ exports.buildTriggerUrl = buildTriggerUrl;
5
+ exports.describeTrigger = describeTrigger;
6
+ const node_type_utils_1 = require("../utils/node-type-utils");
7
+ const WEBHOOK_PATTERNS = [
8
+ 'webhook',
9
+ 'webhooktrigger',
10
+ ];
11
+ const FORM_PATTERNS = [
12
+ 'formtrigger',
13
+ 'form',
14
+ ];
15
+ const CHAT_PATTERNS = [
16
+ 'chattrigger',
17
+ ];
18
+ function detectTriggerFromWorkflow(workflow) {
19
+ if (!workflow.nodes || workflow.nodes.length === 0) {
20
+ return {
21
+ detected: false,
22
+ reason: 'Workflow has no nodes',
23
+ };
24
+ }
25
+ const triggerNodes = workflow.nodes.filter(node => !node.disabled && isTriggerNodeType(node.type));
26
+ if (triggerNodes.length === 0) {
27
+ return {
28
+ detected: false,
29
+ reason: 'No trigger nodes found in workflow',
30
+ };
31
+ }
32
+ for (const node of triggerNodes) {
33
+ const webhookTrigger = detectWebhookTrigger(node);
34
+ if (webhookTrigger) {
35
+ return {
36
+ detected: true,
37
+ trigger: webhookTrigger,
38
+ };
39
+ }
40
+ }
41
+ for (const node of triggerNodes) {
42
+ const chatTrigger = detectChatTrigger(node);
43
+ if (chatTrigger) {
44
+ return {
45
+ detected: true,
46
+ trigger: chatTrigger,
47
+ };
48
+ }
49
+ }
50
+ for (const node of triggerNodes) {
51
+ const formTrigger = detectFormTrigger(node);
52
+ if (formTrigger) {
53
+ return {
54
+ detected: true,
55
+ trigger: formTrigger,
56
+ };
57
+ }
58
+ }
59
+ return {
60
+ detected: false,
61
+ reason: `Workflow has trigger nodes but none support external triggering (found: ${triggerNodes.map(n => n.type).join(', ')}). Only webhook, form, and chat triggers can be triggered via the API.`,
62
+ };
63
+ }
64
+ function isTriggerNodeType(nodeType) {
65
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(nodeType).toLowerCase();
66
+ return (normalized.includes('trigger') ||
67
+ normalized.includes('webhook') ||
68
+ normalized === 'nodes-base.start');
69
+ }
70
+ function detectWebhookTrigger(node) {
71
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
72
+ const nodeName = normalized.split('.').pop() || '';
73
+ const isWebhook = WEBHOOK_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
74
+ if (!isWebhook) {
75
+ return null;
76
+ }
77
+ const params = node.parameters || {};
78
+ const webhookPath = extractWebhookPath(params, node.id);
79
+ const httpMethod = extractHttpMethod(params);
80
+ return {
81
+ type: 'webhook',
82
+ node,
83
+ webhookPath,
84
+ httpMethod,
85
+ };
86
+ }
87
+ function detectFormTrigger(node) {
88
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
89
+ const nodeName = normalized.split('.').pop() || '';
90
+ const isForm = FORM_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
91
+ if (!isForm) {
92
+ return null;
93
+ }
94
+ const params = node.parameters || {};
95
+ const formFields = extractFormFields(params);
96
+ return {
97
+ type: 'form',
98
+ node,
99
+ formFields,
100
+ };
101
+ }
102
+ function detectChatTrigger(node) {
103
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
104
+ const nodeName = normalized.split('.').pop() || '';
105
+ const isChat = CHAT_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
106
+ if (!isChat) {
107
+ return null;
108
+ }
109
+ const params = node.parameters || {};
110
+ const responseMode = params.options?.responseMode || 'lastNode';
111
+ const webhookPath = extractWebhookPath(params, node.id);
112
+ return {
113
+ type: 'chat',
114
+ node,
115
+ webhookPath,
116
+ chatConfig: {
117
+ responseMode,
118
+ },
119
+ };
120
+ }
121
+ function extractWebhookPath(params, nodeId) {
122
+ if (typeof params.path === 'string' && params.path) {
123
+ return params.path;
124
+ }
125
+ if (typeof params.httpMethod === 'string') {
126
+ const methodPath = params[`path_${params.httpMethod.toLowerCase()}`];
127
+ if (typeof methodPath === 'string' && methodPath) {
128
+ return methodPath;
129
+ }
130
+ }
131
+ return nodeId;
132
+ }
133
+ function extractHttpMethod(params) {
134
+ if (typeof params.httpMethod === 'string') {
135
+ return params.httpMethod.toUpperCase();
136
+ }
137
+ return 'POST';
138
+ }
139
+ function extractFormFields(params) {
140
+ const fields = [];
141
+ if (Array.isArray(params.formFields)) {
142
+ for (const field of params.formFields) {
143
+ if (field && typeof field.fieldLabel === 'string') {
144
+ fields.push(field.fieldLabel);
145
+ }
146
+ else if (field && typeof field.fieldName === 'string') {
147
+ fields.push(field.fieldName);
148
+ }
149
+ }
150
+ }
151
+ const options = params.options;
152
+ if (options && Array.isArray(options.formFields)) {
153
+ for (const field of options.formFields) {
154
+ if (field && typeof field.fieldLabel === 'string') {
155
+ fields.push(field.fieldLabel);
156
+ }
157
+ }
158
+ }
159
+ return fields;
160
+ }
161
+ function buildTriggerUrl(baseUrl, trigger, mode = 'production') {
162
+ const cleanBaseUrl = baseUrl.replace(/\/+$/, '');
163
+ switch (trigger.type) {
164
+ case 'webhook':
165
+ case 'chat': {
166
+ const prefix = mode === 'test' ? 'webhook-test' : 'webhook';
167
+ const path = trigger.webhookPath || trigger.node.id;
168
+ return `${cleanBaseUrl}/${prefix}/${path}`;
169
+ }
170
+ case 'form': {
171
+ const prefix = mode === 'test' ? 'form-test' : 'form';
172
+ return `${cleanBaseUrl}/${prefix}/${trigger.node.id}`;
173
+ }
174
+ default:
175
+ throw new Error(`Cannot build URL for trigger type: ${trigger.type}`);
176
+ }
177
+ }
178
+ function describeTrigger(trigger) {
179
+ switch (trigger.type) {
180
+ case 'webhook':
181
+ return `Webhook trigger (${trigger.httpMethod || 'POST'} /${trigger.webhookPath || trigger.node.id})`;
182
+ case 'form':
183
+ const fieldCount = trigger.formFields?.length || 0;
184
+ return `Form trigger (${fieldCount} fields)`;
185
+ case 'chat':
186
+ return `Chat trigger (${trigger.chatConfig?.responseMode || 'lastNode'} mode)`;
187
+ default:
188
+ return 'Unknown trigger';
189
+ }
190
+ }
191
+ //# sourceMappingURL=trigger-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-detector.js","sourceRoot":"","sources":["../../src/triggers/trigger-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { N8nApiClient } from '../services/n8n-api-client';
2
+ import { InstanceContext } from '../types/instance-context';
3
+ import { TriggerType } from './types';
4
+ import { BaseTriggerHandler, TriggerHandlerConstructor } from './handlers/base-handler';
5
+ export declare class TriggerRegistry {
6
+ private static handlers;
7
+ private static initialized;
8
+ static register(type: TriggerType, HandlerClass: TriggerHandlerConstructor): void;
9
+ static getHandler(type: TriggerType, client: N8nApiClient, context?: InstanceContext): BaseTriggerHandler | undefined;
10
+ static hasHandler(type: TriggerType): boolean;
11
+ static getRegisteredTypes(): TriggerType[];
12
+ static clear(): void;
13
+ static isInitialized(): boolean;
14
+ static markInitialized(): void;
15
+ }
16
+ export declare function initializeTriggerRegistry(): Promise<void>;
17
+ export declare function ensureRegistryInitialized(): Promise<void>;
18
+ //# sourceMappingURL=trigger-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.d.ts","sourceRoot":"","sources":["../../src/triggers/trigger-registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAKxF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0D;IACjF,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAQnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,yBAAyB,GAAG,IAAI;IAYjF,MAAM,CAAC,UAAU,CACf,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,kBAAkB,GAAG,SAAS;IAWjC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAO7C,MAAM,CAAC,kBAAkB,IAAI,WAAW,EAAE;IAO1C,MAAM,CAAC,KAAK,IAAI,IAAI;IAQpB,MAAM,CAAC,aAAa,IAAI,OAAO;IAO/B,MAAM,CAAC,eAAe,IAAI,IAAI;CAG/B;AAMD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAKD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI/D"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TriggerRegistry = void 0;
37
+ exports.initializeTriggerRegistry = initializeTriggerRegistry;
38
+ exports.ensureRegistryInitialized = ensureRegistryInitialized;
39
+ class TriggerRegistry {
40
+ static register(type, HandlerClass) {
41
+ this.handlers.set(type, HandlerClass);
42
+ }
43
+ static getHandler(type, client, context) {
44
+ const HandlerClass = this.handlers.get(type);
45
+ if (!HandlerClass) {
46
+ return undefined;
47
+ }
48
+ return new HandlerClass(client, context);
49
+ }
50
+ static hasHandler(type) {
51
+ return this.handlers.has(type);
52
+ }
53
+ static getRegisteredTypes() {
54
+ return Array.from(this.handlers.keys());
55
+ }
56
+ static clear() {
57
+ this.handlers.clear();
58
+ this.initialized = false;
59
+ }
60
+ static isInitialized() {
61
+ return this.initialized;
62
+ }
63
+ static markInitialized() {
64
+ this.initialized = true;
65
+ }
66
+ }
67
+ exports.TriggerRegistry = TriggerRegistry;
68
+ TriggerRegistry.handlers = new Map();
69
+ TriggerRegistry.initialized = false;
70
+ async function initializeTriggerRegistry() {
71
+ if (TriggerRegistry.isInitialized()) {
72
+ return;
73
+ }
74
+ const { WebhookHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/webhook-handler')));
75
+ const { FormHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/form-handler')));
76
+ const { ChatHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/chat-handler')));
77
+ TriggerRegistry.register('webhook', WebhookHandler);
78
+ TriggerRegistry.register('form', FormHandler);
79
+ TriggerRegistry.register('chat', ChatHandler);
80
+ TriggerRegistry.markInitialized();
81
+ }
82
+ async function ensureRegistryInitialized() {
83
+ if (!TriggerRegistry.isInitialized()) {
84
+ await initializeTriggerRegistry();
85
+ }
86
+ }
87
+ //# sourceMappingURL=trigger-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.js","sourceRoot":"","sources":["../../src/triggers/trigger-registry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FA,8DAgBC;AAKD,8DAIC;AApGD,MAAa,eAAe;IAU1B,MAAM,CAAC,QAAQ,CAAC,IAAiB,EAAE,YAAuC;QACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAUD,MAAM,CAAC,UAAU,CACf,IAAiB,EACjB,MAAoB,EACpB,OAAyB;QAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAKD,MAAM,CAAC,UAAU,CAAC,IAAiB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAKD,MAAM,CAAC,kBAAkB;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAKD,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAKD,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,MAAM,CAAC,eAAe;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;;AApEH,0CAqEC;AApEgB,wBAAQ,GAAgD,IAAI,GAAG,EAAE,CAAC;AAClE,2BAAW,GAAG,KAAK,CAAC;AAyE9B,KAAK,UAAU,yBAAyB;IAC7C,IAAI,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAGD,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAC;IACtE,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,yBAAyB,GAAC,CAAC;IAChE,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,yBAAyB,GAAC,CAAC;IAGhE,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACpD,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE9C,eAAe,CAAC,eAAe,EAAE,CAAC;AACpC,CAAC;AAKM,KAAK,UAAU,yBAAyB;IAC7C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;QACrC,MAAM,yBAAyB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC"}