@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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { TagQueryParser } from './tagQueryParser.js';
|
|
2
|
+
import { normalizeTag } from './sanitization.js';
|
|
1
3
|
import logger from '../logger/logger.js';
|
|
2
4
|
/**
|
|
3
5
|
* Filters clients by tags
|
|
@@ -11,9 +13,13 @@ export function filterClientsByTags(clients, tags) {
|
|
|
11
13
|
}
|
|
12
14
|
const filteredClients = new Map();
|
|
13
15
|
let matchedClients = 0;
|
|
16
|
+
// Normalize the filter tags for consistent comparison
|
|
17
|
+
const normalizedFilterTags = tags.map((tag) => normalizeTag(tag));
|
|
14
18
|
for (const [name, clientInfo] of clients.entries()) {
|
|
15
19
|
const clientTags = clientInfo.transport.tags || [];
|
|
16
|
-
|
|
20
|
+
// Normalize client tags for comparison
|
|
21
|
+
const normalizedClientTags = clientTags.map((tag) => normalizeTag(tag));
|
|
22
|
+
const hasMatchingTags = normalizedClientTags.some((clientTag) => normalizedFilterTags.includes(clientTag));
|
|
17
23
|
if (hasMatchingTags) {
|
|
18
24
|
filteredClients.set(name, clientInfo);
|
|
19
25
|
matchedClients++;
|
|
@@ -108,7 +114,7 @@ export function byCapabilities(requiredCapabilities) {
|
|
|
108
114
|
};
|
|
109
115
|
}
|
|
110
116
|
/**
|
|
111
|
-
* Filters clients by tags
|
|
117
|
+
* Filters clients by tags using OR logic (backward compatible)
|
|
112
118
|
* @param tags Array of tags to filter by
|
|
113
119
|
* @returns Filtered record of client instances
|
|
114
120
|
*/
|
|
@@ -119,12 +125,18 @@ export function byTags(tags) {
|
|
|
119
125
|
logger.debug('byTags: No tags specified, returning all clients');
|
|
120
126
|
return clients;
|
|
121
127
|
}
|
|
128
|
+
// Normalize the filter tags for consistent comparison
|
|
129
|
+
const normalizedFilterTags = tags.map((tag) => normalizeTag(tag));
|
|
122
130
|
return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
|
|
123
131
|
const clientTags = clientInfo.transport.tags || [];
|
|
124
|
-
|
|
132
|
+
// Normalize client tags for comparison
|
|
133
|
+
const normalizedClientTags = clientTags.map((tag) => normalizeTag(tag));
|
|
134
|
+
const hasMatchingTags = normalizedClientTags.some((clientTag) => normalizedFilterTags.includes(clientTag));
|
|
125
135
|
logger.debug(`byTags: Client ${name}`, {
|
|
126
136
|
clientTags,
|
|
137
|
+
normalizedClientTags,
|
|
127
138
|
requiredTags: tags,
|
|
139
|
+
normalizedRequiredTags: normalizedFilterTags,
|
|
128
140
|
hasMatchingTags,
|
|
129
141
|
});
|
|
130
142
|
if (hasMatchingTags) {
|
|
@@ -134,4 +146,27 @@ export function byTags(tags) {
|
|
|
134
146
|
}, new Map());
|
|
135
147
|
};
|
|
136
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Filters clients by advanced tag expression (new)
|
|
151
|
+
* @param expression Parsed tag expression to evaluate
|
|
152
|
+
* @returns Filtered record of client instances
|
|
153
|
+
*/
|
|
154
|
+
export function byTagExpression(expression) {
|
|
155
|
+
return (clients) => {
|
|
156
|
+
logger.debug(`byTagExpression: Filtering with expression: ${TagQueryParser.expressionToString(expression)}`);
|
|
157
|
+
return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
|
|
158
|
+
const clientTags = clientInfo.transport.tags || [];
|
|
159
|
+
const matches = TagQueryParser.evaluate(expression, clientTags);
|
|
160
|
+
logger.debug(`byTagExpression: Client ${name}`, {
|
|
161
|
+
clientTags,
|
|
162
|
+
expression: TagQueryParser.expressionToString(expression),
|
|
163
|
+
matches,
|
|
164
|
+
});
|
|
165
|
+
if (matches) {
|
|
166
|
+
filtered.set(name, clientInfo);
|
|
167
|
+
}
|
|
168
|
+
return filtered;
|
|
169
|
+
}, new Map());
|
|
170
|
+
};
|
|
171
|
+
}
|
|
137
172
|
//# sourceMappingURL=clientFiltering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA4B,EAAE,IAAe;IAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC9D,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,69 @@ export declare function sanitizeErrorMessage(error: string): string;
|
|
|
48
48
|
* @returns Sanitized headers object safe for logging
|
|
49
49
|
*/
|
|
50
50
|
export declare function sanitizeHeaders(headers: Record<string, any>): Record<string, any>;
|
|
51
|
+
/**
|
|
52
|
+
* Tag validation result interface
|
|
53
|
+
*/
|
|
54
|
+
export interface TagValidationResult {
|
|
55
|
+
isValid: boolean;
|
|
56
|
+
sanitizedTag: string;
|
|
57
|
+
warnings: string[];
|
|
58
|
+
errors: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validates and sanitizes a single tag
|
|
62
|
+
* Checks for problematic characters and provides warnings/errors
|
|
63
|
+
*
|
|
64
|
+
* @param tag - The tag to validate and sanitize
|
|
65
|
+
* @returns Validation result with sanitized tag and any warnings/errors
|
|
66
|
+
*/
|
|
67
|
+
export declare function validateAndSanitizeTag(tag: string): TagValidationResult;
|
|
68
|
+
/**
|
|
69
|
+
* Validates and sanitizes an array of tags
|
|
70
|
+
* Filters out invalid tags and provides consolidated warnings
|
|
71
|
+
*
|
|
72
|
+
* @param tags - Array of tags to validate
|
|
73
|
+
* @param maxTags - Maximum number of tags allowed (default: 50)
|
|
74
|
+
* @returns Object with valid tags, warnings, and errors
|
|
75
|
+
*/
|
|
76
|
+
export declare function validateAndSanitizeTags(tags: string[], maxTags?: number): {
|
|
77
|
+
validTags: string[];
|
|
78
|
+
warnings: string[];
|
|
79
|
+
errors: string[];
|
|
80
|
+
invalidTags: string[];
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Normalizes a tag for consistent comparison
|
|
84
|
+
* Applies the same normalization used in validation
|
|
85
|
+
*
|
|
86
|
+
* @param tag - The tag to normalize
|
|
87
|
+
* @returns Normalized tag
|
|
88
|
+
*/
|
|
89
|
+
export declare function normalizeTag(tag: string): string;
|
|
90
|
+
/**
|
|
91
|
+
* Redacts sensitive values using pattern matching
|
|
92
|
+
* Identifies and redacts common sensitive patterns like API keys, tokens, passwords
|
|
93
|
+
*
|
|
94
|
+
* @param value - The value to check and potentially redact
|
|
95
|
+
* @returns Redacted value if sensitive patterns are found, otherwise original value
|
|
96
|
+
*/
|
|
97
|
+
export declare function redactSensitiveValue(value: string): string;
|
|
98
|
+
/**
|
|
99
|
+
* Redacts sensitive information from command line arguments
|
|
100
|
+
* Handles both --key=value and --key value formats
|
|
101
|
+
*
|
|
102
|
+
* @param args - Array of command line arguments
|
|
103
|
+
* @returns Array with sensitive values redacted
|
|
104
|
+
*/
|
|
105
|
+
export declare function redactCommandArgs(args: string[]): string[];
|
|
106
|
+
/**
|
|
107
|
+
* Redacts sensitive information from URLs
|
|
108
|
+
* Handles basic auth, query parameters with sensitive data
|
|
109
|
+
*
|
|
110
|
+
* @param url - The URL to sanitize
|
|
111
|
+
* @returns URL with sensitive information redacted
|
|
112
|
+
*/
|
|
113
|
+
export declare function redactUrl(url: string): string;
|
|
51
114
|
/**
|
|
52
115
|
* Comprehensive sanitization for server configuration data
|
|
53
116
|
* Applies appropriate sanitization based on the context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAkB7D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqBvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBjF;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAC/C,MAAM,CAaR"}
|
|
1
|
+
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAkB7D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqBvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBjF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAgGvE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAW,GACnB;IACD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAgDA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAahD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgC1D;AA4BD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CA0C1D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAC/C,MAAM,CAaR"}
|
|
@@ -124,6 +124,314 @@ export function sanitizeHeaders(headers) {
|
|
|
124
124
|
}
|
|
125
125
|
return sanitized;
|
|
126
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Validates and sanitizes a single tag
|
|
129
|
+
* Checks for problematic characters and provides warnings/errors
|
|
130
|
+
*
|
|
131
|
+
* @param tag - The tag to validate and sanitize
|
|
132
|
+
* @returns Validation result with sanitized tag and any warnings/errors
|
|
133
|
+
*/
|
|
134
|
+
export function validateAndSanitizeTag(tag) {
|
|
135
|
+
const result = {
|
|
136
|
+
isValid: true,
|
|
137
|
+
sanitizedTag: '',
|
|
138
|
+
warnings: [],
|
|
139
|
+
errors: [],
|
|
140
|
+
};
|
|
141
|
+
// Handle null/undefined tags
|
|
142
|
+
if (tag === null || tag === undefined || typeof tag !== 'string') {
|
|
143
|
+
result.isValid = false;
|
|
144
|
+
result.errors.push('Tag cannot be empty or null');
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
// Trim whitespace
|
|
148
|
+
const trimmedTag = tag.trim();
|
|
149
|
+
if (trimmedTag.length === 0) {
|
|
150
|
+
result.isValid = false;
|
|
151
|
+
result.errors.push('Tag cannot be empty or whitespace only');
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
// Check length limits
|
|
155
|
+
if (trimmedTag.length > 100) {
|
|
156
|
+
result.isValid = false;
|
|
157
|
+
result.errors.push('Tag length cannot exceed 100 characters');
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
if (trimmedTag.length < 1) {
|
|
161
|
+
result.isValid = false;
|
|
162
|
+
result.errors.push('Tag must be at least 1 character long');
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
// Decode URL encoding if present
|
|
166
|
+
let decodedTag = trimmedTag;
|
|
167
|
+
try {
|
|
168
|
+
// Check if it's URL encoded and decode it
|
|
169
|
+
if (trimmedTag.includes('%')) {
|
|
170
|
+
decodedTag = decodeURIComponent(trimmedTag);
|
|
171
|
+
if (decodedTag !== trimmedTag) {
|
|
172
|
+
result.warnings.push('Tag was URL decoded');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (_e) {
|
|
177
|
+
result.warnings.push('Tag contains invalid URL encoding');
|
|
178
|
+
decodedTag = trimmedTag; // Keep original if decode fails
|
|
179
|
+
}
|
|
180
|
+
// Check for problematic characters and warn
|
|
181
|
+
const problematicChars = {
|
|
182
|
+
',': 'commas can interfere with tag list parsing',
|
|
183
|
+
'&': 'ampersands can interfere with URL parameters',
|
|
184
|
+
'=': 'equals signs can interfere with URL parameters',
|
|
185
|
+
'?': 'question marks can interfere with URL parsing',
|
|
186
|
+
'#': 'hash symbols can interfere with URL fragments',
|
|
187
|
+
'/': 'slashes can interfere with URL paths',
|
|
188
|
+
'\\': 'backslashes can cause parsing issues',
|
|
189
|
+
'<': 'less-than symbols can cause HTML injection issues',
|
|
190
|
+
'>': 'greater-than symbols can cause HTML injection issues',
|
|
191
|
+
'"': 'double quotes can cause parsing issues',
|
|
192
|
+
"'": 'single quotes can cause parsing issues',
|
|
193
|
+
'`': 'backticks can cause script injection issues',
|
|
194
|
+
'\n': 'newlines can cause parsing issues',
|
|
195
|
+
'\r': 'carriage returns can cause parsing issues',
|
|
196
|
+
'\t': 'tabs can cause formatting issues',
|
|
197
|
+
};
|
|
198
|
+
// Check each character for problems
|
|
199
|
+
for (const [char, reason] of Object.entries(problematicChars)) {
|
|
200
|
+
if (decodedTag.includes(char)) {
|
|
201
|
+
result.warnings.push(`Contains '${char}' - ${reason}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// Check for control characters
|
|
205
|
+
// eslint-disable-next-line no-control-regex
|
|
206
|
+
const controlCharRegex = /[\x00-\x1f\x7f]/;
|
|
207
|
+
if (controlCharRegex.test(decodedTag)) {
|
|
208
|
+
result.warnings.push('Contains control characters that may cause issues');
|
|
209
|
+
}
|
|
210
|
+
// Check for non-ASCII characters (international characters are OK, but warn)
|
|
211
|
+
// eslint-disable-next-line no-control-regex
|
|
212
|
+
const nonAsciiRegex = /[^\x00-\x7f]/;
|
|
213
|
+
if (nonAsciiRegex.test(decodedTag)) {
|
|
214
|
+
result.warnings.push('Contains non-ASCII characters (international characters)');
|
|
215
|
+
}
|
|
216
|
+
// Normalize the tag for consistent comparison
|
|
217
|
+
result.sanitizedTag = decodedTag.trim().toLowerCase();
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Validates and sanitizes an array of tags
|
|
222
|
+
* Filters out invalid tags and provides consolidated warnings
|
|
223
|
+
*
|
|
224
|
+
* @param tags - Array of tags to validate
|
|
225
|
+
* @param maxTags - Maximum number of tags allowed (default: 50)
|
|
226
|
+
* @returns Object with valid tags, warnings, and errors
|
|
227
|
+
*/
|
|
228
|
+
export function validateAndSanitizeTags(tags, maxTags = 50) {
|
|
229
|
+
const result = {
|
|
230
|
+
validTags: [],
|
|
231
|
+
warnings: [],
|
|
232
|
+
errors: [],
|
|
233
|
+
invalidTags: [],
|
|
234
|
+
};
|
|
235
|
+
if (!Array.isArray(tags)) {
|
|
236
|
+
result.errors.push('Tags must be an array');
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
if (tags.length > maxTags) {
|
|
240
|
+
result.errors.push(`Too many tags: maximum ${maxTags} allowed, got ${tags.length}`);
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
const seenTags = new Set();
|
|
244
|
+
for (let i = 0; i < tags.length; i++) {
|
|
245
|
+
const tag = tags[i];
|
|
246
|
+
const validation = validateAndSanitizeTag(tag);
|
|
247
|
+
if (!validation.isValid) {
|
|
248
|
+
result.invalidTags.push(tag);
|
|
249
|
+
validation.errors.forEach((error) => {
|
|
250
|
+
result.errors.push(`Tag ${i + 1} "${tag}": ${error}`);
|
|
251
|
+
});
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
// Check for duplicates
|
|
255
|
+
if (seenTags.has(validation.sanitizedTag)) {
|
|
256
|
+
result.warnings.push(`Duplicate tag after normalization: "${tag}"`);
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
seenTags.add(validation.sanitizedTag);
|
|
260
|
+
result.validTags.push(validation.sanitizedTag);
|
|
261
|
+
// Add warnings with tag context
|
|
262
|
+
validation.warnings.forEach((warning) => {
|
|
263
|
+
result.warnings.push(`Tag "${tag}": ${warning}`);
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Normalizes a tag for consistent comparison
|
|
270
|
+
* Applies the same normalization used in validation
|
|
271
|
+
*
|
|
272
|
+
* @param tag - The tag to normalize
|
|
273
|
+
* @returns Normalized tag
|
|
274
|
+
*/
|
|
275
|
+
export function normalizeTag(tag) {
|
|
276
|
+
if (!tag || typeof tag !== 'string') {
|
|
277
|
+
return '';
|
|
278
|
+
}
|
|
279
|
+
try {
|
|
280
|
+
// Decode URL encoding if present
|
|
281
|
+
let normalized = tag.includes('%') ? decodeURIComponent(tag) : tag;
|
|
282
|
+
return normalized.trim().toLowerCase();
|
|
283
|
+
}
|
|
284
|
+
catch (_e) {
|
|
285
|
+
// If decode fails, just normalize without decoding
|
|
286
|
+
return tag.trim().toLowerCase();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Redacts sensitive values using pattern matching
|
|
291
|
+
* Identifies and redacts common sensitive patterns like API keys, tokens, passwords
|
|
292
|
+
*
|
|
293
|
+
* @param value - The value to check and potentially redact
|
|
294
|
+
* @returns Redacted value if sensitive patterns are found, otherwise original value
|
|
295
|
+
*/
|
|
296
|
+
export function redactSensitiveValue(value) {
|
|
297
|
+
if (!value || typeof value !== 'string') {
|
|
298
|
+
return value;
|
|
299
|
+
}
|
|
300
|
+
// Define patterns for sensitive data
|
|
301
|
+
const sensitivePatterns = [
|
|
302
|
+
/^(sk-|pk-|rk-|ak-)[a-zA-Z0-9]{10,}$/i, // API keys (common prefixes, reduced min length)
|
|
303
|
+
/^[A-Za-z0-9_-]{32,}$/, // Long tokens/keys (32+ chars, alphanumeric + _-)
|
|
304
|
+
/^[A-Fa-f0-9]{32,}$/, // Hex tokens (32+ chars)
|
|
305
|
+
/^ghp_[a-zA-Z0-9]{36}$/, // GitHub personal access tokens
|
|
306
|
+
/^gho_[a-zA-Z0-9]{36}$/, // GitHub OAuth tokens
|
|
307
|
+
/^(AKIA|ASIA)[A-Z0-9]{16}$/, // AWS access keys
|
|
308
|
+
/^[a-zA-Z0-9+/]{40}==$/, // Base64 encoded secrets (common lengths)
|
|
309
|
+
/^bearer\s+.{10,}$/i, // Bearer tokens
|
|
310
|
+
/^[a-zA-Z0-9]{64}$/, // 64 character hex tokens
|
|
311
|
+
];
|
|
312
|
+
// Check for sensitive patterns
|
|
313
|
+
const isSensitive = sensitivePatterns.some((pattern) => pattern.test(value));
|
|
314
|
+
if (isSensitive) {
|
|
315
|
+
return '[REDACTED]';
|
|
316
|
+
}
|
|
317
|
+
// Check for sensitive environment variable names
|
|
318
|
+
const envVarName = value.includes('=') ? value.split('=')[0] : '';
|
|
319
|
+
if (envVarName && isSensitiveEnvVar(envVarName)) {
|
|
320
|
+
return '[REDACTED]';
|
|
321
|
+
}
|
|
322
|
+
return value;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Checks if an environment variable name indicates sensitive content
|
|
326
|
+
*
|
|
327
|
+
* @param name - The environment variable name to check
|
|
328
|
+
* @returns True if the name suggests sensitive content
|
|
329
|
+
*/
|
|
330
|
+
function isSensitiveEnvVar(name) {
|
|
331
|
+
const sensitiveEnvPatterns = [
|
|
332
|
+
/password/i,
|
|
333
|
+
/secret/i,
|
|
334
|
+
/key/i,
|
|
335
|
+
/token/i,
|
|
336
|
+
/auth/i,
|
|
337
|
+
/credential/i,
|
|
338
|
+
/private/i,
|
|
339
|
+
/api[_-]?key/i,
|
|
340
|
+
/access[_-]?token/i,
|
|
341
|
+
/client[_-]?secret/i,
|
|
342
|
+
/database[_-]?url/i,
|
|
343
|
+
/db[_-]?url/i,
|
|
344
|
+
/connection[_-]?string/i,
|
|
345
|
+
];
|
|
346
|
+
return sensitiveEnvPatterns.some((pattern) => pattern.test(name));
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Redacts sensitive information from command line arguments
|
|
350
|
+
* Handles both --key=value and --key value formats
|
|
351
|
+
*
|
|
352
|
+
* @param args - Array of command line arguments
|
|
353
|
+
* @returns Array with sensitive values redacted
|
|
354
|
+
*/
|
|
355
|
+
export function redactCommandArgs(args) {
|
|
356
|
+
if (!args || !Array.isArray(args)) {
|
|
357
|
+
return args;
|
|
358
|
+
}
|
|
359
|
+
const redactedArgs = [];
|
|
360
|
+
const sensitiveFlags = [/^-{1,2}(api[_-]?key|token|password|secret|auth|credential|private[_-]?key)$/i];
|
|
361
|
+
for (let i = 0; i < args.length; i++) {
|
|
362
|
+
const arg = args[i];
|
|
363
|
+
// Handle --key=value format
|
|
364
|
+
if (arg.includes('=')) {
|
|
365
|
+
const [flag, value] = arg.split('=', 2);
|
|
366
|
+
const isSensitiveFlag = sensitiveFlags.some((pattern) => pattern.test(flag));
|
|
367
|
+
if (isSensitiveFlag || redactSensitiveValue(value) === '[REDACTED]') {
|
|
368
|
+
redactedArgs.push(`${flag}=[REDACTED]`);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
redactedArgs.push(arg);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// Handle --key value format
|
|
375
|
+
else if (i < args.length - 1) {
|
|
376
|
+
const isSensitiveFlag = sensitiveFlags.some((pattern) => pattern.test(arg));
|
|
377
|
+
const nextArg = args[i + 1];
|
|
378
|
+
if (isSensitiveFlag || (!nextArg.startsWith('-') && redactSensitiveValue(nextArg) === '[REDACTED]')) {
|
|
379
|
+
redactedArgs.push(arg);
|
|
380
|
+
redactedArgs.push('[REDACTED]');
|
|
381
|
+
i++; // Skip the next argument since we processed it
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
redactedArgs.push(arg);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Regular argument or flag without value
|
|
388
|
+
else {
|
|
389
|
+
redactedArgs.push(arg);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return redactedArgs;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Redacts sensitive information from URLs
|
|
396
|
+
* Handles basic auth, query parameters with sensitive data
|
|
397
|
+
*
|
|
398
|
+
* @param url - The URL to sanitize
|
|
399
|
+
* @returns URL with sensitive information redacted
|
|
400
|
+
*/
|
|
401
|
+
export function redactUrl(url) {
|
|
402
|
+
if (!url || typeof url !== 'string') {
|
|
403
|
+
return url;
|
|
404
|
+
}
|
|
405
|
+
try {
|
|
406
|
+
const urlObj = new URL(url);
|
|
407
|
+
// Redact basic authentication
|
|
408
|
+
if (urlObj.username || urlObj.password) {
|
|
409
|
+
urlObj.username = 'REDACTED';
|
|
410
|
+
urlObj.password = 'REDACTED';
|
|
411
|
+
}
|
|
412
|
+
// Redact sensitive query parameters
|
|
413
|
+
const sensitiveQueryParams = [/^(api[_-]?key|token|password|secret|auth|access[_-]?token|client[_-]?secret)$/i];
|
|
414
|
+
const params = new URLSearchParams(urlObj.search);
|
|
415
|
+
let hasChanges = false;
|
|
416
|
+
for (const [key, value] of params.entries()) {
|
|
417
|
+
const isSensitive = sensitiveQueryParams.some((pattern) => pattern.test(key)) || redactSensitiveValue(value) === '[REDACTED]';
|
|
418
|
+
if (isSensitive) {
|
|
419
|
+
params.set(key, 'REDACTED');
|
|
420
|
+
hasChanges = true;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (hasChanges) {
|
|
424
|
+
urlObj.search = params.toString();
|
|
425
|
+
}
|
|
426
|
+
return urlObj.toString();
|
|
427
|
+
}
|
|
428
|
+
catch (_error) {
|
|
429
|
+
// If URL parsing fails, try basic string replacement for common patterns
|
|
430
|
+
return url
|
|
431
|
+
.replace(/(https?:\/\/)[^:]+:[^@]+@/i, '$1REDACTED:REDACTED@')
|
|
432
|
+
.replace(/([?&])(api[_-]?key|token|password|secret|auth)=([^&]*)/gi, '$1$2=REDACTED');
|
|
433
|
+
}
|
|
434
|
+
}
|
|
127
435
|
/**
|
|
128
436
|
* Comprehensive sanitization for server configuration data
|
|
129
437
|
* Applies appropriate sanitization based on the context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced tag query parser supporting boolean expressions
|
|
3
|
+
* Supports multiple syntax variants: compact, natural language, and symbols
|
|
4
|
+
*/
|
|
5
|
+
export interface TagExpression {
|
|
6
|
+
type: 'and' | 'or' | 'not' | 'tag' | 'group';
|
|
7
|
+
value?: string;
|
|
8
|
+
children?: TagExpression[];
|
|
9
|
+
}
|
|
10
|
+
export interface ParseOptions {
|
|
11
|
+
allowAdvanced: boolean;
|
|
12
|
+
defaultOperator: 'OR' | 'AND';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Advanced tag query parser with support for boolean expressions
|
|
16
|
+
*/
|
|
17
|
+
export declare class TagQueryParser {
|
|
18
|
+
/**
|
|
19
|
+
* Parse simple comma-separated tags (backward compatible)
|
|
20
|
+
* Always uses OR logic for compatibility
|
|
21
|
+
*/
|
|
22
|
+
static parseSimple(tags: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Parse advanced query expressions
|
|
25
|
+
* Supports multiple syntax variants:
|
|
26
|
+
* - Compact: web+api-test, (web,api)+prod
|
|
27
|
+
* - Natural: web and api and not test
|
|
28
|
+
* - Symbols: web && api && !test
|
|
29
|
+
*/
|
|
30
|
+
static parseAdvanced(query: string): TagExpression;
|
|
31
|
+
/**
|
|
32
|
+
* Evaluate expression against tag array
|
|
33
|
+
*/
|
|
34
|
+
static evaluate(expr: TagExpression, serverTags: string[]): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Tokenize query string into tokens
|
|
37
|
+
*/
|
|
38
|
+
private static tokenize;
|
|
39
|
+
/**
|
|
40
|
+
* Check if dash is a NOT operator (not part of tag name)
|
|
41
|
+
* A dash is a NOT operator if:
|
|
42
|
+
* - It's at the start of input
|
|
43
|
+
* - It's preceded by whitespace, operators, or opening parenthesis
|
|
44
|
+
* - It's not in the middle of what appears to be a tag name
|
|
45
|
+
*/
|
|
46
|
+
private static isNotOperator;
|
|
47
|
+
/**
|
|
48
|
+
* Check if position is at word boundary
|
|
49
|
+
*/
|
|
50
|
+
private static isWordBoundary;
|
|
51
|
+
/**
|
|
52
|
+
* Parse expression using recursive descent parser
|
|
53
|
+
*/
|
|
54
|
+
private static parseExpression;
|
|
55
|
+
/**
|
|
56
|
+
* Parse OR expressions (lowest precedence)
|
|
57
|
+
*/
|
|
58
|
+
private static parseOrExpression;
|
|
59
|
+
/**
|
|
60
|
+
* Parse AND expressions (higher precedence than OR)
|
|
61
|
+
*/
|
|
62
|
+
private static parseAndExpression;
|
|
63
|
+
/**
|
|
64
|
+
* Parse NOT expressions (highest precedence)
|
|
65
|
+
*/
|
|
66
|
+
private static parseNotExpression;
|
|
67
|
+
/**
|
|
68
|
+
* Parse atomic expressions (tags and groups)
|
|
69
|
+
*/
|
|
70
|
+
private static parseAtomicExpression;
|
|
71
|
+
/**
|
|
72
|
+
* Utility method to convert expression back to string (for debugging/logging)
|
|
73
|
+
*/
|
|
74
|
+
static expressionToString(expr: TagExpression): string;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=tagQueryParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagQueryParser.d.ts","sourceRoot":"","sources":["../../src/utils/tagQueryParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,IAAI,GAAG,KAAK,CAAC;CAC/B;AAQD;;GAEG;AACH,qBAAa,cAAc;IACzB;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAmB1C;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IA+BlD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO;IAwDnE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ;IAmGvB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAgB5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAO9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAyBhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAyBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAiCpC;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;CAqBvD"}
|