@1mcp/agent 0.18.1 → 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.
Files changed (77) hide show
  1. package/README.md +64 -27
  2. package/build/commands/mcp/add.d.ts +3 -0
  3. package/build/commands/mcp/add.d.ts.map +1 -1
  4. package/build/commands/mcp/add.js +24 -0
  5. package/build/commands/mcp/add.js.map +1 -1
  6. package/build/commands/mcp/index.d.ts.map +1 -1
  7. package/build/commands/mcp/index.js +24 -0
  8. package/build/commands/mcp/index.js.map +1 -1
  9. package/build/commands/mcp/list.d.ts +1 -0
  10. package/build/commands/mcp/list.d.ts.map +1 -1
  11. package/build/commands/mcp/list.js +26 -8
  12. package/build/commands/mcp/list.js.map +1 -1
  13. package/build/commands/mcp/update.d.ts +3 -0
  14. package/build/commands/mcp/update.d.ts.map +1 -1
  15. package/build/commands/mcp/update.js +21 -0
  16. package/build/commands/mcp/update.js.map +1 -1
  17. package/build/config/mcpConfigManager.d.ts.map +1 -1
  18. package/build/config/mcpConfigManager.js +7 -3
  19. package/build/config/mcpConfigManager.js.map +1 -1
  20. package/build/constants.d.ts +1 -1
  21. package/build/constants.js +1 -1
  22. package/build/core/types/server.d.ts +3 -0
  23. package/build/core/types/server.d.ts.map +1 -1
  24. package/build/core/types/server.js.map +1 -1
  25. package/build/core/types/transport.d.ts +27 -5
  26. package/build/core/types/transport.d.ts.map +1 -1
  27. package/build/core/types/transport.js +7 -2
  28. package/build/core/types/transport.js.map +1 -1
  29. package/build/handlers/requestHandlers.d.ts.map +1 -1
  30. package/build/handlers/requestHandlers.js +20 -5
  31. package/build/handlers/requestHandlers.js.map +1 -1
  32. package/build/index.js +39 -5
  33. package/build/index.js.map +1 -1
  34. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +9 -0
  35. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  36. package/build/transport/http/middlewares/scopeAuthMiddleware.js +55 -6
  37. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  38. package/build/transport/http/middlewares/tagsExtractor.d.ts +8 -2
  39. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  40. package/build/transport/http/middlewares/tagsExtractor.js +109 -7
  41. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  42. package/build/transport/http/routes/oauthRoutes.d.ts +2 -1
  43. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  44. package/build/transport/http/routes/oauthRoutes.js +13 -1
  45. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  46. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  47. package/build/transport/http/routes/sseRoutes.js +6 -2
  48. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  49. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  50. package/build/transport/http/routes/streamableHttpRoutes.js +6 -2
  51. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  52. package/build/transport/http/server.js +1 -1
  53. package/build/transport/http/server.js.map +1 -1
  54. package/build/transport/restartableStdioTransport.d.ts +84 -0
  55. package/build/transport/restartableStdioTransport.d.ts.map +1 -0
  56. package/build/transport/restartableStdioTransport.js +185 -0
  57. package/build/transport/restartableStdioTransport.js.map +1 -0
  58. package/build/transport/transportFactory.d.ts.map +1 -1
  59. package/build/transport/transportFactory.js +38 -2
  60. package/build/transport/transportFactory.js.map +1 -1
  61. package/build/utils/clientFiltering.d.ts +8 -1
  62. package/build/utils/clientFiltering.d.ts.map +1 -1
  63. package/build/utils/clientFiltering.js +38 -3
  64. package/build/utils/clientFiltering.js.map +1 -1
  65. package/build/utils/envProcessor.d.ts +45 -0
  66. package/build/utils/envProcessor.d.ts.map +1 -0
  67. package/build/utils/envProcessor.js +214 -0
  68. package/build/utils/envProcessor.js.map +1 -0
  69. package/build/utils/sanitization.d.ts +63 -0
  70. package/build/utils/sanitization.d.ts.map +1 -1
  71. package/build/utils/sanitization.js +308 -0
  72. package/build/utils/sanitization.js.map +1 -1
  73. package/build/utils/tagQueryParser.d.ts +76 -0
  74. package/build/utils/tagQueryParser.d.ts.map +1 -0
  75. package/build/utils/tagQueryParser.js +336 -0
  76. package/build/utils/tagQueryParser.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1,214 @@
1
+ import { getDefaultEnvironment } from '@modelcontextprotocol/sdk/client/stdio.js';
2
+ import logger from '../logger/logger.js';
3
+ /**
4
+ * Converts environment array format to object format
5
+ * @param envArray Array in format ["KEY=value", "PATH=/usr/bin"]
6
+ * @returns Object in format {KEY: "value", PATH: "/usr/bin"}
7
+ */
8
+ export function parseEnvArray(envArray) {
9
+ const envObject = {};
10
+ for (const entry of envArray) {
11
+ const equalIndex = entry.indexOf('=');
12
+ if (equalIndex === -1) {
13
+ // No equals sign, treat as inheritance key
14
+ const key = entry.trim();
15
+ const value = process.env[key];
16
+ if (value !== undefined) {
17
+ envObject[key] = value;
18
+ }
19
+ }
20
+ else {
21
+ // Has equals sign, treat as key=value assignment
22
+ const key = entry.slice(0, equalIndex).trim();
23
+ const value = entry.slice(equalIndex + 1);
24
+ envObject[key] = value;
25
+ }
26
+ }
27
+ return envObject;
28
+ }
29
+ /**
30
+ * Checks if an environment variable key matches any pattern
31
+ * @param key Environment variable key
32
+ * @param patterns Array of patterns with optional ! prefix for denial
33
+ * @returns true if key should be included, false if denied or not matched
34
+ */
35
+ function matchesEnvPattern(key, patterns) {
36
+ let matched = false;
37
+ let denied = false;
38
+ for (const pattern of patterns) {
39
+ if (pattern.startsWith('!')) {
40
+ // Denial pattern
41
+ const denyPattern = pattern.slice(1);
42
+ if (matchesGlobPattern(key, denyPattern)) {
43
+ denied = true;
44
+ }
45
+ }
46
+ else {
47
+ // Allow pattern
48
+ if (matchesGlobPattern(key, pattern)) {
49
+ matched = true;
50
+ }
51
+ }
52
+ }
53
+ // If explicitly denied, return false
54
+ // If matched by allow pattern and not denied, return true
55
+ // If no allow patterns specified but denied patterns exist, default to true unless denied
56
+ if (denied)
57
+ return false;
58
+ if (matched)
59
+ return true;
60
+ // Check if there are any allow patterns - if not, default to allow (only deny patterns)
61
+ const hasAllowPatterns = patterns.some((p) => !p.startsWith('!'));
62
+ return !hasAllowPatterns;
63
+ }
64
+ /**
65
+ * Simple glob pattern matching for environment variable names
66
+ * Supports * wildcard at the end of patterns
67
+ * @param text Text to match
68
+ * @param pattern Pattern with optional * wildcard
69
+ * @returns true if text matches pattern
70
+ */
71
+ function matchesGlobPattern(text, pattern) {
72
+ if (pattern === text) {
73
+ return true;
74
+ }
75
+ if (pattern.endsWith('*')) {
76
+ const prefix = pattern.slice(0, -1);
77
+ return text.startsWith(prefix);
78
+ }
79
+ return false;
80
+ }
81
+ /**
82
+ * Applies environment variable filtering based on patterns
83
+ * @param env Environment variables to filter
84
+ * @param patterns Array of allow/deny patterns
85
+ * @returns Filtered environment variables and list of filtered keys
86
+ */
87
+ function applyEnvPatterns(env, patterns) {
88
+ const filtered = {};
89
+ const filteredKeys = [];
90
+ for (const [key, value] of Object.entries(env)) {
91
+ if (matchesEnvPattern(key, patterns)) {
92
+ filtered[key] = value;
93
+ }
94
+ else {
95
+ filteredKeys.push(key);
96
+ }
97
+ }
98
+ return { filtered, filteredKeys };
99
+ }
100
+ /**
101
+ * Gets environment variables from parent process, excluding dangerous ones
102
+ * @returns Safe environment variables from parent process
103
+ */
104
+ function getParentEnvironment() {
105
+ const parentEnv = {};
106
+ for (const [key, value] of Object.entries(process.env)) {
107
+ if (value === undefined)
108
+ continue;
109
+ // Skip bash functions and other potentially dangerous variables
110
+ if (value.startsWith('()')) {
111
+ logger.debug(`Skipping dangerous environment variable: ${key}`);
112
+ continue;
113
+ }
114
+ parentEnv[key] = value;
115
+ }
116
+ return parentEnv;
117
+ }
118
+ /**
119
+ * Substitutes environment variables in configuration values
120
+ * @param configValue Configuration value that may contain ${VAR} patterns
121
+ * @returns Value with environment variables substituted
122
+ */
123
+ export function substituteEnvVars(configValue) {
124
+ return configValue.replace(/\$\{([^}]+)\}/g, (match, envVar) => {
125
+ const value = process.env[envVar.trim()];
126
+ if (value === undefined) {
127
+ logger.warn(`Environment variable ${envVar} not found, keeping placeholder: ${match}`);
128
+ return match;
129
+ }
130
+ return value;
131
+ });
132
+ }
133
+ /**
134
+ * Recursively substitutes environment variables in a configuration object
135
+ * @param config Configuration object
136
+ * @returns Configuration object with environment variables substituted
137
+ */
138
+ export function substituteEnvVarsInConfig(config) {
139
+ if (typeof config === 'string') {
140
+ return substituteEnvVars(config);
141
+ }
142
+ if (Array.isArray(config)) {
143
+ return config.map((item) => substituteEnvVarsInConfig(item));
144
+ }
145
+ if (config && typeof config === 'object') {
146
+ const result = {};
147
+ for (const [key, value] of Object.entries(config)) {
148
+ result[key] = substituteEnvVarsInConfig(value);
149
+ }
150
+ return result;
151
+ }
152
+ return config;
153
+ }
154
+ /**
155
+ * Processes environment configuration for stdio transport
156
+ * @param config Environment processing configuration
157
+ * @returns Processed environment variables with metadata
158
+ */
159
+ export function processEnvironment(config) {
160
+ // 1. Start with SDK safe defaults
161
+ const sdkDefaults = getDefaultEnvironment();
162
+ const sdkDefaultKeys = Object.keys(sdkDefaults);
163
+ logger.debug(`SDK default environment variables: ${sdkDefaultKeys.join(', ')}`);
164
+ // 2. Optionally inherit from parent process
165
+ let inheritedEnv = {};
166
+ let inheritedKeys = [];
167
+ if (config.inheritParentEnv) {
168
+ const parentEnv = getParentEnvironment();
169
+ inheritedEnv = { ...parentEnv };
170
+ inheritedKeys = Object.keys(parentEnv).filter((key) => !sdkDefaultKeys.includes(key));
171
+ logger.debug(`Inheriting ${inheritedKeys.length} additional environment variables from parent`);
172
+ }
173
+ // 3. Combine SDK defaults and inherited environment
174
+ let combinedEnv = { ...sdkDefaults, ...inheritedEnv };
175
+ // 4. Apply pattern filtering if specified
176
+ let filteredKeys = [];
177
+ if (config.envFilter && config.envFilter.length > 0) {
178
+ const filterResult = applyEnvPatterns(combinedEnv, config.envFilter);
179
+ combinedEnv = filterResult.filtered;
180
+ filteredKeys = filterResult.filteredKeys;
181
+ logger.debug(`Environment filtering removed ${filteredKeys.length} variables: ${filteredKeys.join(', ')}`);
182
+ }
183
+ // 5. Add custom environment variables
184
+ let customEnv = {};
185
+ let customKeys = [];
186
+ if (config.env) {
187
+ if (Array.isArray(config.env)) {
188
+ customEnv = parseEnvArray(config.env);
189
+ }
190
+ else {
191
+ customEnv = { ...config.env };
192
+ }
193
+ // Apply environment variable substitution to custom env
194
+ for (const [key, value] of Object.entries(customEnv)) {
195
+ customEnv[key] = substituteEnvVars(value);
196
+ }
197
+ customKeys = Object.keys(customEnv);
198
+ logger.debug(`Adding ${customKeys.length} custom environment variables: ${customKeys.join(', ')}`);
199
+ }
200
+ // 6. Final merge (custom env overrides everything)
201
+ const processedEnv = { ...combinedEnv, ...customEnv };
202
+ const result = {
203
+ processedEnv,
204
+ sources: {
205
+ sdkDefaults: sdkDefaultKeys,
206
+ inherited: inheritedKeys,
207
+ custom: customKeys,
208
+ filtered: filteredKeys,
209
+ },
210
+ };
211
+ logger.debug(`Environment processing complete. Total variables: ${Object.keys(processedEnv).length}`);
212
+ return result;
213
+ }
214
+ //# sourceMappingURL=envProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envProcessor.js","sourceRoot":"","sources":["../../src/utils/envProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAwBzC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,2CAA2C;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACzB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAE,QAAkB;IACxD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,iBAAiB;YACjB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,kBAAkB,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;gBACzC,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,IAAI,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,0DAA0D;IAC1D,0FAA0F;IAC1F,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,wFAAwF;IACxF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,gBAAgB,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAE,OAAe;IACvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,GAA2B,EAC3B,QAAkB;IAElB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB;IAC3B,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAElC,gEAAgE;QAChE,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,oCAAoC,KAAK,EAAE,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAW;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,kCAAkC;IAClC,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhD,MAAM,CAAC,KAAK,CAAC,sCAAsC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEhF,4CAA4C;IAC5C,IAAI,YAAY,GAA2B,EAAE,CAAC;IAC9C,IAAI,aAAa,GAAa,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;QACzC,YAAY,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;QAChC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,KAAK,CAAC,cAAc,aAAa,CAAC,MAAM,+CAA+C,CAAC,CAAC;IAClG,CAAC;IAED,oDAAoD;IACpD,IAAI,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;IAEtD,0CAA0C;IAC1C,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrE,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC;QACpC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,iCAAiC,YAAY,CAAC,MAAM,eAAe,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,sCAAsC;IACtC,IAAI,SAAS,GAA2B,EAAE,CAAC;IAC3C,IAAI,UAAU,GAAa,EAAE,CAAC;IAE9B,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,wDAAwD;QACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,SAAS,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,CAAC,MAAM,kCAAkC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,mDAAmD;IACnD,MAAM,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;IAEtD,MAAM,MAAM,GAAyB;QACnC,YAAY;QACZ,OAAO,EAAE;YACP,WAAW,EAAE,cAAc;YAC3B,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY;SACvB;KACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,qDAAqD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtG,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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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"}