@1mcp/agent 0.19.0 → 0.20.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.
Files changed (48) hide show
  1. package/README.md +63 -27
  2. package/build/commands/mcp/list.d.ts +1 -0
  3. package/build/commands/mcp/list.d.ts.map +1 -1
  4. package/build/commands/mcp/list.js +14 -8
  5. package/build/commands/mcp/list.js.map +1 -1
  6. package/build/constants.d.ts +1 -1
  7. package/build/constants.js +1 -1
  8. package/build/core/types/server.d.ts +3 -0
  9. package/build/core/types/server.d.ts.map +1 -1
  10. package/build/core/types/server.js.map +1 -1
  11. package/build/handlers/requestHandlers.d.ts.map +1 -1
  12. package/build/handlers/requestHandlers.js +20 -5
  13. package/build/handlers/requestHandlers.js.map +1 -1
  14. package/build/index.js +39 -5
  15. package/build/index.js.map +1 -1
  16. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +9 -0
  17. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  18. package/build/transport/http/middlewares/scopeAuthMiddleware.js +55 -6
  19. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  20. package/build/transport/http/middlewares/tagsExtractor.d.ts +8 -2
  21. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  22. package/build/transport/http/middlewares/tagsExtractor.js +109 -7
  23. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  24. package/build/transport/http/routes/oauthRoutes.d.ts +2 -1
  25. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  26. package/build/transport/http/routes/oauthRoutes.js +13 -1
  27. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  28. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  29. package/build/transport/http/routes/sseRoutes.js +6 -2
  30. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  31. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  32. package/build/transport/http/routes/streamableHttpRoutes.js +6 -2
  33. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  34. package/build/transport/http/server.js +1 -1
  35. package/build/transport/http/server.js.map +1 -1
  36. package/build/utils/clientFiltering.d.ts +8 -1
  37. package/build/utils/clientFiltering.d.ts.map +1 -1
  38. package/build/utils/clientFiltering.js +38 -3
  39. package/build/utils/clientFiltering.js.map +1 -1
  40. package/build/utils/sanitization.d.ts +63 -0
  41. package/build/utils/sanitization.d.ts.map +1 -1
  42. package/build/utils/sanitization.js +308 -0
  43. package/build/utils/sanitization.js.map +1 -1
  44. package/build/utils/tagQueryParser.d.ts +76 -0
  45. package/build/utils/tagQueryParser.d.ts.map +1 -0
  46. package/build/utils/tagQueryParser.js +336 -0
  47. package/build/utils/tagQueryParser.js.map +1 -0
  48. 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
- const hasMatchingTags = clientTags.some((clientTag) => tags.includes(clientTag));
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
- const hasMatchingTags = clientTags.some((clientTag) => tags.includes(clientTag));
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":"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"}
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":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,OAAO,MAAM;SACV,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mDAAmD;IACnD,IAAI,SAAS,GAAG,UAAU;SACvB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,sEAAsE;SACtG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,kEAAkE;SACzF,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,sCAAsC;SAC9D,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,4CAA4C;IAElE,sDAAsD;IACtD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,UAAkB;IAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oEAAoE;IACpE,+EAA+E;IAC/E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,aAAa,YAAY,OAAO,EAAE,GAAG,CAAC,CAAC;IACzE,IAAI,SAAS,GAAG,UAAU;SACvB,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,+BAA+B;SAC5D,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,kEAAkE;SACzF,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,sCAAsC;SAC9D,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,2BAA2B;IAEjD,kCAAkC;IAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,wDAAwD;IACxD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,2EAA2E;IAC3E,IAAI,SAAS,GAAG,KAAK;SAClB,OAAO,CAAC,+BAA+B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SACnF,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SAChF,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SAC9E,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SACjF,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC;SACpE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe;IAEtC,yBAAyB;IACzB,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAwB,EAAE,CAAC;IAC1C,MAAM,gBAAgB,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAExG,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,OAAgD;IAEhD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACxC,KAAK,SAAS;YACZ,OAAO,4BAA4B,CAAC,UAAU,CAAC,CAAC;QAClD,KAAK,KAAK;YACR,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D;YACE,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
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"}