@1mcp/agent 0.19.0 → 0.20.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.
- package/README.md +63 -27
- package/build/commands/mcp/list.d.ts +1 -0
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js +14 -8
- package/build/commands/mcp/list.js.map +1 -1
- package/build/constants.d.ts +1 -1
- package/build/constants.js +1 -1
- package/build/core/types/server.d.ts +3 -0
- package/build/core/types/server.d.ts.map +1 -1
- package/build/core/types/server.js.map +1 -1
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +20 -5
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +39 -5
- package/build/index.js.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +9 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +55 -6
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts +8 -2
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +109 -7
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/build/transport/http/routes/oauthRoutes.d.ts +2 -1
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +13 -1
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/sseRoutes.js +6 -2
- package/build/transport/http/routes/sseRoutes.js.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.js +6 -2
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/http/server.js +1 -1
- package/build/transport/http/server.js.map +1 -1
- package/build/utils/clientFiltering.d.ts +8 -1
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/clientFiltering.js +38 -3
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/sanitization.d.ts +63 -0
- package/build/utils/sanitization.d.ts.map +1 -1
- package/build/utils/sanitization.js +308 -0
- package/build/utils/sanitization.js.map +1 -1
- package/build/utils/tagQueryParser.d.ts +76 -0
- package/build/utils/tagQueryParser.d.ts.map +1 -0
- package/build/utils/tagQueryParser.js +336 -0
- package/build/utils/tagQueryParser.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced tag query parser supporting boolean expressions
|
|
3
|
+
* Supports multiple syntax variants: compact, natural language, and symbols
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Advanced tag query parser with support for boolean expressions
|
|
7
|
+
*/
|
|
8
|
+
export class TagQueryParser {
|
|
9
|
+
/**
|
|
10
|
+
* Parse simple comma-separated tags (backward compatible)
|
|
11
|
+
* Always uses OR logic for compatibility
|
|
12
|
+
*/
|
|
13
|
+
static parseSimple(tags) {
|
|
14
|
+
if (!tags || typeof tags !== 'string') {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const rawTags = tags
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((t) => t.trim())
|
|
20
|
+
.filter((t) => t.length > 0);
|
|
21
|
+
if (rawTags.length === 0) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
// For now, return basic parsing to avoid circular dependencies
|
|
25
|
+
// Advanced validation will be handled at the middleware level
|
|
26
|
+
return rawTags;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse advanced query expressions
|
|
30
|
+
* Supports multiple syntax variants:
|
|
31
|
+
* - Compact: web+api-test, (web,api)+prod
|
|
32
|
+
* - Natural: web and api and not test
|
|
33
|
+
* - Symbols: web && api && !test
|
|
34
|
+
*/
|
|
35
|
+
static parseAdvanced(query) {
|
|
36
|
+
if (typeof query !== 'string') {
|
|
37
|
+
throw new Error('Query string is required');
|
|
38
|
+
}
|
|
39
|
+
const normalized = query.trim();
|
|
40
|
+
if (normalized.length === 0) {
|
|
41
|
+
throw new Error('Query string cannot be empty');
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const tokens = this.tokenize(normalized);
|
|
45
|
+
if (tokens.length === 0) {
|
|
46
|
+
throw new Error('No valid tokens found in query');
|
|
47
|
+
}
|
|
48
|
+
const result = this.parseExpression(tokens, 0);
|
|
49
|
+
if (result.nextIndex < tokens.length) {
|
|
50
|
+
const remaining = tokens.slice(result.nextIndex);
|
|
51
|
+
throw new Error(`Unexpected tokens: ${remaining.map((t) => t.value).join(' ')}`);
|
|
52
|
+
}
|
|
53
|
+
return result.expression;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof Error) {
|
|
57
|
+
throw new Error(`Parse error: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Evaluate expression against tag array
|
|
64
|
+
*/
|
|
65
|
+
static evaluate(expr, serverTags) {
|
|
66
|
+
if (!serverTags) {
|
|
67
|
+
serverTags = [];
|
|
68
|
+
}
|
|
69
|
+
// Simple normalization without external dependencies
|
|
70
|
+
const normalizeTag = (tag) => {
|
|
71
|
+
if (!tag || typeof tag !== 'string') {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// Decode URL encoding if present
|
|
76
|
+
let normalized = tag.includes('%') ? decodeURIComponent(tag) : tag;
|
|
77
|
+
return normalized.trim().toLowerCase();
|
|
78
|
+
}
|
|
79
|
+
catch (_e) {
|
|
80
|
+
// If decode fails, just normalize without decoding
|
|
81
|
+
return tag.trim().toLowerCase();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
switch (expr.type) {
|
|
85
|
+
case 'tag': {
|
|
86
|
+
// Normalize both the expression tag and server tags for comparison
|
|
87
|
+
const normalizedExprTag = normalizeTag(expr.value);
|
|
88
|
+
const normalizedServerTags = serverTags.map((tag) => normalizeTag(tag));
|
|
89
|
+
return normalizedServerTags.includes(normalizedExprTag);
|
|
90
|
+
}
|
|
91
|
+
case 'not':
|
|
92
|
+
if (!expr.children || expr.children.length !== 1) {
|
|
93
|
+
throw new Error('NOT expression must have exactly one child');
|
|
94
|
+
}
|
|
95
|
+
return !this.evaluate(expr.children[0], serverTags);
|
|
96
|
+
case 'and':
|
|
97
|
+
if (!expr.children || expr.children.length === 0) {
|
|
98
|
+
return true; // Empty AND is true
|
|
99
|
+
}
|
|
100
|
+
return expr.children.every((c) => this.evaluate(c, serverTags));
|
|
101
|
+
case 'or':
|
|
102
|
+
if (!expr.children || expr.children.length === 0) {
|
|
103
|
+
return false; // Empty OR is false
|
|
104
|
+
}
|
|
105
|
+
return expr.children.some((c) => this.evaluate(c, serverTags));
|
|
106
|
+
case 'group':
|
|
107
|
+
if (!expr.children || expr.children.length !== 1) {
|
|
108
|
+
throw new Error('Group expression must have exactly one child');
|
|
109
|
+
}
|
|
110
|
+
return this.evaluate(expr.children[0], serverTags);
|
|
111
|
+
default:
|
|
112
|
+
throw new Error(`Unknown expression type: ${expr.type}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Tokenize query string into tokens
|
|
117
|
+
*/
|
|
118
|
+
static tokenize(query) {
|
|
119
|
+
const tokens = [];
|
|
120
|
+
let i = 0;
|
|
121
|
+
while (i < query.length) {
|
|
122
|
+
const char = query[i];
|
|
123
|
+
// Skip whitespace
|
|
124
|
+
if (/\s/.test(char)) {
|
|
125
|
+
i++;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Parentheses
|
|
129
|
+
if (char === '(') {
|
|
130
|
+
tokens.push({ type: 'lparen', value: '(', position: i });
|
|
131
|
+
i++;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (char === ')') {
|
|
135
|
+
tokens.push({ type: 'rparen', value: ')', position: i });
|
|
136
|
+
i++;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// NOT operators: ! or - (when used as prefix)
|
|
140
|
+
if (char === '!' || (char === '-' && this.isNotOperator(query, i))) {
|
|
141
|
+
tokens.push({ type: 'not', value: char, position: i });
|
|
142
|
+
i++;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
// AND operators: + or &&
|
|
146
|
+
if (char === '+') {
|
|
147
|
+
tokens.push({ type: 'and', value: '+', position: i });
|
|
148
|
+
i++;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (char === '&' && query[i + 1] === '&') {
|
|
152
|
+
tokens.push({ type: 'and', value: '&&', position: i });
|
|
153
|
+
i += 2;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// OR operators: , or ||
|
|
157
|
+
if (char === ',') {
|
|
158
|
+
tokens.push({ type: 'or', value: ',', position: i });
|
|
159
|
+
i++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (char === '|' && query[i + 1] === '|') {
|
|
163
|
+
tokens.push({ type: 'or', value: '||', position: i });
|
|
164
|
+
i += 2;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
// Check for natural language keywords
|
|
168
|
+
const remaining = query.slice(i);
|
|
169
|
+
if (remaining.toLowerCase().startsWith('and') && this.isWordBoundary(query, i + 3)) {
|
|
170
|
+
tokens.push({ type: 'and', value: 'and', position: i });
|
|
171
|
+
i += 3;
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (remaining.toLowerCase().startsWith('or') && this.isWordBoundary(query, i + 2)) {
|
|
175
|
+
tokens.push({ type: 'or', value: 'or', position: i });
|
|
176
|
+
i += 2;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (remaining.toLowerCase().startsWith('not') && this.isWordBoundary(query, i + 3)) {
|
|
180
|
+
tokens.push({ type: 'not', value: 'not', position: i });
|
|
181
|
+
i += 3;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// Tag name - handle alphanumeric, hyphens, underscores, dots
|
|
185
|
+
const tagMatch = remaining.match(/^[a-zA-Z0-9_.-]+/);
|
|
186
|
+
if (tagMatch) {
|
|
187
|
+
const tagName = tagMatch[0];
|
|
188
|
+
// Simple normalization - just lowercase and trim
|
|
189
|
+
const normalizedTag = tagName.trim().toLowerCase();
|
|
190
|
+
tokens.push({ type: 'tag', value: normalizedTag, position: i });
|
|
191
|
+
i += tagName.length;
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
throw new Error(`Unexpected character '${char}' at position ${i}`);
|
|
195
|
+
}
|
|
196
|
+
return tokens;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if dash is a NOT operator (not part of tag name)
|
|
200
|
+
* A dash is a NOT operator if:
|
|
201
|
+
* - It's at the start of input
|
|
202
|
+
* - It's preceded by whitespace, operators, or opening parenthesis
|
|
203
|
+
* - It's not in the middle of what appears to be a tag name
|
|
204
|
+
*/
|
|
205
|
+
static isNotOperator(query, position) {
|
|
206
|
+
// If at start, it's a NOT operator
|
|
207
|
+
if (position === 0)
|
|
208
|
+
return true;
|
|
209
|
+
const prevChar = query[position - 1];
|
|
210
|
+
// If preceded by whitespace, operators, or opening parenthesis, it's a NOT operator
|
|
211
|
+
if (/[\s(+,|&]/.test(prevChar))
|
|
212
|
+
return true;
|
|
213
|
+
// If preceded by 'and', 'or', 'not' keywords, it's a NOT operator
|
|
214
|
+
const beforeDash = query.slice(0, position).toLowerCase();
|
|
215
|
+
if (/(^|\s)(and|or|not)\s*$/.test(beforeDash))
|
|
216
|
+
return true;
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Check if position is at word boundary
|
|
221
|
+
*/
|
|
222
|
+
static isWordBoundary(query, position) {
|
|
223
|
+
return position >= query.length || /[\s()&|+,-]/.test(query[position]);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Parse expression using recursive descent parser
|
|
227
|
+
*/
|
|
228
|
+
static parseExpression(tokens, startIndex) {
|
|
229
|
+
return this.parseOrExpression(tokens, startIndex);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Parse OR expressions (lowest precedence)
|
|
233
|
+
*/
|
|
234
|
+
static parseOrExpression(tokens, startIndex) {
|
|
235
|
+
let result = this.parseAndExpression(tokens, startIndex);
|
|
236
|
+
const children = [result.expression];
|
|
237
|
+
let index = result.nextIndex;
|
|
238
|
+
while (index < tokens.length && tokens[index].type === 'or') {
|
|
239
|
+
index++; // consume 'or'
|
|
240
|
+
result = this.parseAndExpression(tokens, index);
|
|
241
|
+
children.push(result.expression);
|
|
242
|
+
index = result.nextIndex;
|
|
243
|
+
}
|
|
244
|
+
if (children.length === 1) {
|
|
245
|
+
return { expression: children[0], nextIndex: index };
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
expression: { type: 'or', children },
|
|
249
|
+
nextIndex: index,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Parse AND expressions (higher precedence than OR)
|
|
254
|
+
*/
|
|
255
|
+
static parseAndExpression(tokens, startIndex) {
|
|
256
|
+
let result = this.parseNotExpression(tokens, startIndex);
|
|
257
|
+
const children = [result.expression];
|
|
258
|
+
let index = result.nextIndex;
|
|
259
|
+
while (index < tokens.length && tokens[index].type === 'and') {
|
|
260
|
+
index++; // consume 'and'
|
|
261
|
+
result = this.parseNotExpression(tokens, index);
|
|
262
|
+
children.push(result.expression);
|
|
263
|
+
index = result.nextIndex;
|
|
264
|
+
}
|
|
265
|
+
if (children.length === 1) {
|
|
266
|
+
return { expression: children[0], nextIndex: index };
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
expression: { type: 'and', children },
|
|
270
|
+
nextIndex: index,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Parse NOT expressions (highest precedence)
|
|
275
|
+
*/
|
|
276
|
+
static parseNotExpression(tokens, startIndex) {
|
|
277
|
+
if (startIndex >= tokens.length) {
|
|
278
|
+
throw new Error('Unexpected end of input');
|
|
279
|
+
}
|
|
280
|
+
const token = tokens[startIndex];
|
|
281
|
+
if (token.type === 'not') {
|
|
282
|
+
const result = this.parseAtomicExpression(tokens, startIndex + 1);
|
|
283
|
+
return {
|
|
284
|
+
expression: { type: 'not', children: [result.expression] },
|
|
285
|
+
nextIndex: result.nextIndex,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
return this.parseAtomicExpression(tokens, startIndex);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Parse atomic expressions (tags and groups)
|
|
292
|
+
*/
|
|
293
|
+
static parseAtomicExpression(tokens, startIndex) {
|
|
294
|
+
if (startIndex >= tokens.length) {
|
|
295
|
+
throw new Error('Unexpected end of input');
|
|
296
|
+
}
|
|
297
|
+
const token = tokens[startIndex];
|
|
298
|
+
if (token.type === 'tag') {
|
|
299
|
+
return {
|
|
300
|
+
expression: { type: 'tag', value: token.value },
|
|
301
|
+
nextIndex: startIndex + 1,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
if (token.type === 'lparen') {
|
|
305
|
+
const result = this.parseExpression(tokens, startIndex + 1);
|
|
306
|
+
if (result.nextIndex >= tokens.length || tokens[result.nextIndex].type !== 'rparen') {
|
|
307
|
+
throw new Error('Missing closing parenthesis');
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
expression: { type: 'group', children: [result.expression] },
|
|
311
|
+
nextIndex: result.nextIndex + 1,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
throw new Error(`Unexpected token '${token.value}' at position ${token.position}`);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Utility method to convert expression back to string (for debugging/logging)
|
|
318
|
+
*/
|
|
319
|
+
static expressionToString(expr) {
|
|
320
|
+
switch (expr.type) {
|
|
321
|
+
case 'tag':
|
|
322
|
+
return expr.value;
|
|
323
|
+
case 'not':
|
|
324
|
+
return `not ${this.expressionToString(expr.children[0])}`;
|
|
325
|
+
case 'and':
|
|
326
|
+
return expr.children.map((c) => this.expressionToString(c)).join(' and ');
|
|
327
|
+
case 'or':
|
|
328
|
+
return expr.children.map((c) => this.expressionToString(c)).join(' or ');
|
|
329
|
+
case 'group':
|
|
330
|
+
return `(${this.expressionToString(expr.children[0])})`;
|
|
331
|
+
default:
|
|
332
|
+
return 'unknown';
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=tagQueryParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagQueryParser.js","sourceRoot":"","sources":["../../src/utils/tagQueryParser.ts"],"names":[],"mappings":"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"}
|