n8n-mcp 2.10.2 → 2.10.4
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 +7 -7
- package/data/nodes.db +0 -0
- package/dist/database/node-repository.d.ts.map +1 -1
- package/dist/database/node-repository.js +10 -5
- package/dist/database/node-repository.js.map +1 -1
- package/dist/mappers/docs-mapper.d.ts +1 -0
- package/dist/mappers/docs-mapper.d.ts.map +1 -1
- package/dist/mappers/docs-mapper.js +48 -1
- package/dist/mappers/docs-mapper.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +129 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/parsers/node-parser.d.ts +4 -0
- package/dist/parsers/node-parser.d.ts.map +1 -1
- package/dist/parsers/node-parser.js +43 -1
- package/dist/parsers/node-parser.js.map +1 -1
- package/dist/services/enhanced-config-validator.d.ts.map +1 -1
- package/dist/services/enhanced-config-validator.js +18 -0
- package/dist/services/enhanced-config-validator.js.map +1 -1
- package/dist/services/workflow-validator.d.ts +5 -0
- package/dist/services/workflow-validator.d.ts.map +1 -1
- package/dist/services/workflow-validator.js +182 -21
- package/dist/services/workflow-validator.js.map +1 -1
- package/dist/utils/validation-schemas.d.ts +32 -0
- package/dist/utils/validation-schemas.d.ts.map +1 -0
- package/dist/utils/validation-schemas.js +219 -0
- package/dist/utils/validation-schemas.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolValidation = exports.Validator = exports.ValidationError = void 0;
|
|
4
|
+
class ValidationError extends Error {
|
|
5
|
+
constructor(message, field, value) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.field = field;
|
|
8
|
+
this.value = value;
|
|
9
|
+
this.name = 'ValidationError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.ValidationError = ValidationError;
|
|
13
|
+
class Validator {
|
|
14
|
+
static validateString(value, fieldName, required = true) {
|
|
15
|
+
const errors = [];
|
|
16
|
+
if (required && (value === undefined || value === null)) {
|
|
17
|
+
errors.push({
|
|
18
|
+
field: fieldName,
|
|
19
|
+
message: `${fieldName} is required`,
|
|
20
|
+
value
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else if (value !== undefined && value !== null && typeof value !== 'string') {
|
|
24
|
+
errors.push({
|
|
25
|
+
field: fieldName,
|
|
26
|
+
message: `${fieldName} must be a string, got ${typeof value}`,
|
|
27
|
+
value
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
else if (required && typeof value === 'string' && value.trim().length === 0) {
|
|
31
|
+
errors.push({
|
|
32
|
+
field: fieldName,
|
|
33
|
+
message: `${fieldName} cannot be empty`,
|
|
34
|
+
value
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
valid: errors.length === 0,
|
|
39
|
+
errors
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
static validateObject(value, fieldName, required = true) {
|
|
43
|
+
const errors = [];
|
|
44
|
+
if (required && (value === undefined || value === null)) {
|
|
45
|
+
errors.push({
|
|
46
|
+
field: fieldName,
|
|
47
|
+
message: `${fieldName} is required`,
|
|
48
|
+
value
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else if (value !== undefined && value !== null) {
|
|
52
|
+
if (typeof value !== 'object') {
|
|
53
|
+
errors.push({
|
|
54
|
+
field: fieldName,
|
|
55
|
+
message: `${fieldName} must be an object, got ${typeof value}`,
|
|
56
|
+
value
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else if (Array.isArray(value)) {
|
|
60
|
+
errors.push({
|
|
61
|
+
field: fieldName,
|
|
62
|
+
message: `${fieldName} must be an object, not an array`,
|
|
63
|
+
value
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
valid: errors.length === 0,
|
|
69
|
+
errors
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
static validateArray(value, fieldName, required = true) {
|
|
73
|
+
const errors = [];
|
|
74
|
+
if (required && (value === undefined || value === null)) {
|
|
75
|
+
errors.push({
|
|
76
|
+
field: fieldName,
|
|
77
|
+
message: `${fieldName} is required`,
|
|
78
|
+
value
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (value !== undefined && value !== null && !Array.isArray(value)) {
|
|
82
|
+
errors.push({
|
|
83
|
+
field: fieldName,
|
|
84
|
+
message: `${fieldName} must be an array, got ${typeof value}`,
|
|
85
|
+
value
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
valid: errors.length === 0,
|
|
90
|
+
errors
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
static validateNumber(value, fieldName, required = true, min, max) {
|
|
94
|
+
const errors = [];
|
|
95
|
+
if (required && (value === undefined || value === null)) {
|
|
96
|
+
errors.push({
|
|
97
|
+
field: fieldName,
|
|
98
|
+
message: `${fieldName} is required`,
|
|
99
|
+
value
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else if (value !== undefined && value !== null) {
|
|
103
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
104
|
+
errors.push({
|
|
105
|
+
field: fieldName,
|
|
106
|
+
message: `${fieldName} must be a number, got ${typeof value}`,
|
|
107
|
+
value
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (min !== undefined && value < min) {
|
|
112
|
+
errors.push({
|
|
113
|
+
field: fieldName,
|
|
114
|
+
message: `${fieldName} must be at least ${min}, got ${value}`,
|
|
115
|
+
value
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (max !== undefined && value > max) {
|
|
119
|
+
errors.push({
|
|
120
|
+
field: fieldName,
|
|
121
|
+
message: `${fieldName} must be at most ${max}, got ${value}`,
|
|
122
|
+
value
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
valid: errors.length === 0,
|
|
129
|
+
errors
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
static validateEnum(value, fieldName, allowedValues, required = true) {
|
|
133
|
+
const errors = [];
|
|
134
|
+
if (required && (value === undefined || value === null)) {
|
|
135
|
+
errors.push({
|
|
136
|
+
field: fieldName,
|
|
137
|
+
message: `${fieldName} is required`,
|
|
138
|
+
value
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else if (value !== undefined && value !== null && !allowedValues.includes(value)) {
|
|
142
|
+
errors.push({
|
|
143
|
+
field: fieldName,
|
|
144
|
+
message: `${fieldName} must be one of: ${allowedValues.join(', ')}, got "${value}"`,
|
|
145
|
+
value
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
valid: errors.length === 0,
|
|
150
|
+
errors
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
static combineResults(...results) {
|
|
154
|
+
const allErrors = results.flatMap(r => r.errors);
|
|
155
|
+
return {
|
|
156
|
+
valid: allErrors.length === 0,
|
|
157
|
+
errors: allErrors
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
static formatErrors(result, toolName) {
|
|
161
|
+
if (result.valid)
|
|
162
|
+
return '';
|
|
163
|
+
const prefix = toolName ? `${toolName}: ` : '';
|
|
164
|
+
const errors = result.errors.map(e => ` • ${e.field}: ${e.message}`).join('\n');
|
|
165
|
+
return `${prefix}Validation failed:\n${errors}`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.Validator = Validator;
|
|
169
|
+
class ToolValidation {
|
|
170
|
+
static validateNodeOperation(args) {
|
|
171
|
+
const nodeTypeResult = Validator.validateString(args.nodeType, 'nodeType');
|
|
172
|
+
const configResult = Validator.validateObject(args.config, 'config');
|
|
173
|
+
const profileResult = Validator.validateEnum(args.profile, 'profile', ['minimal', 'runtime', 'ai-friendly', 'strict'], false);
|
|
174
|
+
return Validator.combineResults(nodeTypeResult, configResult, profileResult);
|
|
175
|
+
}
|
|
176
|
+
static validateNodeMinimal(args) {
|
|
177
|
+
const nodeTypeResult = Validator.validateString(args.nodeType, 'nodeType');
|
|
178
|
+
const configResult = Validator.validateObject(args.config, 'config');
|
|
179
|
+
return Validator.combineResults(nodeTypeResult, configResult);
|
|
180
|
+
}
|
|
181
|
+
static validateWorkflow(args) {
|
|
182
|
+
const workflowResult = Validator.validateObject(args.workflow, 'workflow');
|
|
183
|
+
let nodesResult = { valid: true, errors: [] };
|
|
184
|
+
let connectionsResult = { valid: true, errors: [] };
|
|
185
|
+
if (workflowResult.valid && args.workflow) {
|
|
186
|
+
nodesResult = Validator.validateArray(args.workflow.nodes, 'workflow.nodes');
|
|
187
|
+
connectionsResult = Validator.validateObject(args.workflow.connections, 'workflow.connections');
|
|
188
|
+
}
|
|
189
|
+
const optionsResult = args.options ?
|
|
190
|
+
Validator.validateObject(args.options, 'options', false) :
|
|
191
|
+
{ valid: true, errors: [] };
|
|
192
|
+
return Validator.combineResults(workflowResult, nodesResult, connectionsResult, optionsResult);
|
|
193
|
+
}
|
|
194
|
+
static validateSearchNodes(args) {
|
|
195
|
+
const queryResult = Validator.validateString(args.query, 'query');
|
|
196
|
+
const limitResult = Validator.validateNumber(args.limit, 'limit', false, 1, 200);
|
|
197
|
+
const modeResult = Validator.validateEnum(args.mode, 'mode', ['OR', 'AND', 'FUZZY'], false);
|
|
198
|
+
return Validator.combineResults(queryResult, limitResult, modeResult);
|
|
199
|
+
}
|
|
200
|
+
static validateListNodeTemplates(args) {
|
|
201
|
+
const nodeTypesResult = Validator.validateArray(args.nodeTypes, 'nodeTypes');
|
|
202
|
+
const limitResult = Validator.validateNumber(args.limit, 'limit', false, 1, 50);
|
|
203
|
+
return Validator.combineResults(nodeTypesResult, limitResult);
|
|
204
|
+
}
|
|
205
|
+
static validateWorkflowId(args) {
|
|
206
|
+
return Validator.validateString(args.id, 'id');
|
|
207
|
+
}
|
|
208
|
+
static validateCreateWorkflow(args) {
|
|
209
|
+
const nameResult = Validator.validateString(args.name, 'name');
|
|
210
|
+
const nodesResult = Validator.validateArray(args.nodes, 'nodes');
|
|
211
|
+
const connectionsResult = Validator.validateObject(args.connections, 'connections');
|
|
212
|
+
const settingsResult = args.settings ?
|
|
213
|
+
Validator.validateObject(args.settings, 'settings', false) :
|
|
214
|
+
{ valid: true, errors: [] };
|
|
215
|
+
return Validator.combineResults(nameResult, nodesResult, connectionsResult, settingsResult);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.ToolValidation = ToolValidation;
|
|
219
|
+
//# sourceMappingURL=validation-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-schemas.js","sourceRoot":"","sources":["../../src/utils/validation-schemas.ts"],"names":[],"mappings":"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"}
|