mcp4openapi 0.3.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +7 -0
  2. package/dist/src/auth/oauth-provider.d.ts +1 -0
  3. package/dist/src/auth/oauth-provider.d.ts.map +1 -1
  4. package/dist/src/auth/oauth-provider.js +17 -0
  5. package/dist/src/auth/oauth-provider.js.map +1 -1
  6. package/dist/src/core/cli-config.d.ts.map +1 -1
  7. package/dist/src/core/cli-config.js +2 -0
  8. package/dist/src/core/cli-config.js.map +1 -1
  9. package/dist/src/core/index.d.ts.map +1 -1
  10. package/dist/src/core/index.js +18 -3
  11. package/dist/src/core/index.js.map +1 -1
  12. package/dist/src/index.js +0 -0
  13. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  14. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  15. package/dist/src/profile/profile-allowlist.js +68 -0
  16. package/dist/src/profile/profile-allowlist.js.map +1 -0
  17. package/dist/src/profile/profile-registry.d.ts +5 -0
  18. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  19. package/dist/src/profile/profile-registry.js +38 -14
  20. package/dist/src/profile/profile-registry.js.map +1 -1
  21. package/dist/src/security/ssrf-validator.d.ts +31 -0
  22. package/dist/src/security/ssrf-validator.d.ts.map +1 -0
  23. package/dist/src/security/ssrf-validator.js +190 -0
  24. package/dist/src/security/ssrf-validator.js.map +1 -0
  25. package/package.json +2 -2
  26. package/profiles/gitlab/developer-profile-oauth.json +445 -81
  27. package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
  28. package/profiles/gitlab/openapi.yaml +1420 -165
  29. package/profiles/gitlab/profile-optimized-oauth.json +928 -0
  30. package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
  31. package/profiles/grafana/openapi.json +28078 -0
  32. package/profiles/grafana/profile.json +1083 -0
  33. package/profiles/grafana/profile.test.json +235 -0
  34. package/profiles/mattermost/openapi.yaml +27434 -0
  35. package/profiles/mattermost/profile.json +463 -0
  36. package/profiles/mattermost/profile.test.json +607 -0
  37. package/profiles/n8n/profile-optimized.json +1002 -364
  38. package/profiles/n8n/profile-optimized.test.json +43 -43
  39. package/dist/src/argument-normalizer.d.ts +0 -5
  40. package/dist/src/argument-normalizer.d.ts.map +0 -1
  41. package/dist/src/argument-normalizer.js +0 -61
  42. package/dist/src/argument-normalizer.js.map +0 -1
  43. package/dist/src/cli-config.d.ts +0 -9
  44. package/dist/src/cli-config.d.ts.map +0 -1
  45. package/dist/src/cli-config.js +0 -111
  46. package/dist/src/cli-config.js.map +0 -1
  47. package/dist/src/composite-executor.d.ts +0 -77
  48. package/dist/src/composite-executor.d.ts.map +0 -1
  49. package/dist/src/composite-executor.js +0 -193
  50. package/dist/src/composite-executor.js.map +0 -1
  51. package/dist/src/constants.d.ts +0 -85
  52. package/dist/src/constants.d.ts.map +0 -1
  53. package/dist/src/constants.js +0 -85
  54. package/dist/src/constants.js.map +0 -1
  55. package/dist/src/dag-executor.d.ts +0 -49
  56. package/dist/src/dag-executor.d.ts.map +0 -1
  57. package/dist/src/dag-executor.js +0 -138
  58. package/dist/src/dag-executor.js.map +0 -1
  59. package/dist/src/errors.d.ts +0 -59
  60. package/dist/src/errors.d.ts.map +0 -1
  61. package/dist/src/errors.js +0 -119
  62. package/dist/src/errors.js.map +0 -1
  63. package/dist/src/filtering.d.ts +0 -19
  64. package/dist/src/filtering.d.ts.map +0 -1
  65. package/dist/src/filtering.js +0 -292
  66. package/dist/src/filtering.js.map +0 -1
  67. package/dist/src/http-client-factory.d.ts +0 -62
  68. package/dist/src/http-client-factory.d.ts.map +0 -1
  69. package/dist/src/http-client-factory.js +0 -133
  70. package/dist/src/http-client-factory.js.map +0 -1
  71. package/dist/src/http-transport-config.d.ts +0 -6
  72. package/dist/src/http-transport-config.d.ts.map +0 -1
  73. package/dist/src/http-transport-config.js +0 -47
  74. package/dist/src/http-transport-config.js.map +0 -1
  75. package/dist/src/http-transport.d.ts +0 -316
  76. package/dist/src/http-transport.d.ts.map +0 -1
  77. package/dist/src/http-transport.js +0 -2412
  78. package/dist/src/http-transport.js.map +0 -1
  79. package/dist/src/interceptors.d.ts +0 -116
  80. package/dist/src/interceptors.d.ts.map +0 -1
  81. package/dist/src/interceptors.js +0 -392
  82. package/dist/src/interceptors.js.map +0 -1
  83. package/dist/src/jsonrpc-validator.d.ts +0 -27
  84. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  85. package/dist/src/jsonrpc-validator.js +0 -58
  86. package/dist/src/jsonrpc-validator.js.map +0 -1
  87. package/dist/src/logger.d.ts +0 -59
  88. package/dist/src/logger.d.ts.map +0 -1
  89. package/dist/src/logger.js +0 -177
  90. package/dist/src/logger.js.map +0 -1
  91. package/dist/src/mcp-server-manager.d.ts +0 -20
  92. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  93. package/dist/src/mcp-server-manager.js +0 -38
  94. package/dist/src/mcp-server-manager.js.map +0 -1
  95. package/dist/src/mcp-server.d.ts +0 -203
  96. package/dist/src/mcp-server.d.ts.map +0 -1
  97. package/dist/src/mcp-server.js +0 -1369
  98. package/dist/src/mcp-server.js.map +0 -1
  99. package/dist/src/metrics.d.ts +0 -97
  100. package/dist/src/metrics.d.ts.map +0 -1
  101. package/dist/src/metrics.js +0 -273
  102. package/dist/src/metrics.js.map +0 -1
  103. package/dist/src/naming-warnings.d.ts +0 -23
  104. package/dist/src/naming-warnings.d.ts.map +0 -1
  105. package/dist/src/naming-warnings.js +0 -83
  106. package/dist/src/naming-warnings.js.map +0 -1
  107. package/dist/src/naming.d.ts +0 -58
  108. package/dist/src/naming.d.ts.map +0 -1
  109. package/dist/src/naming.js +0 -510
  110. package/dist/src/naming.js.map +0 -1
  111. package/dist/src/oauth-provider.d.ts +0 -131
  112. package/dist/src/oauth-provider.d.ts.map +0 -1
  113. package/dist/src/oauth-provider.js +0 -836
  114. package/dist/src/oauth-provider.js.map +0 -1
  115. package/dist/src/openapi-parser.d.ts +0 -70
  116. package/dist/src/openapi-parser.d.ts.map +0 -1
  117. package/dist/src/openapi-parser.js +0 -436
  118. package/dist/src/openapi-parser.js.map +0 -1
  119. package/dist/src/profile-loader.d.ts +0 -78
  120. package/dist/src/profile-loader.d.ts.map +0 -1
  121. package/dist/src/profile-loader.js +0 -483
  122. package/dist/src/profile-loader.js.map +0 -1
  123. package/dist/src/profile-registry.d.ts +0 -18
  124. package/dist/src/profile-registry.d.ts.map +0 -1
  125. package/dist/src/profile-registry.js +0 -26
  126. package/dist/src/profile-registry.js.map +0 -1
  127. package/dist/src/profile-resolver.d.ts +0 -19
  128. package/dist/src/profile-resolver.d.ts.map +0 -1
  129. package/dist/src/profile-resolver.js +0 -167
  130. package/dist/src/profile-resolver.js.map +0 -1
  131. package/dist/src/proxy-executor.d.ts +0 -86
  132. package/dist/src/proxy-executor.d.ts.map +0 -1
  133. package/dist/src/proxy-executor.js +0 -497
  134. package/dist/src/proxy-executor.js.map +0 -1
  135. package/dist/src/schema-validator.d.ts +0 -30
  136. package/dist/src/schema-validator.d.ts.map +0 -1
  137. package/dist/src/schema-validator.js +0 -128
  138. package/dist/src/schema-validator.js.map +0 -1
  139. package/dist/src/startup-profile.d.ts +0 -17
  140. package/dist/src/startup-profile.d.ts.map +0 -1
  141. package/dist/src/startup-profile.js +0 -30
  142. package/dist/src/startup-profile.js.map +0 -1
  143. package/dist/src/startup-validation.d.ts +0 -11
  144. package/dist/src/startup-validation.d.ts.map +0 -1
  145. package/dist/src/startup-validation.js +0 -21
  146. package/dist/src/startup-validation.js.map +0 -1
  147. package/dist/src/tool-filter.d.ts +0 -65
  148. package/dist/src/tool-filter.d.ts.map +0 -1
  149. package/dist/src/tool-filter.js +0 -471
  150. package/dist/src/tool-filter.js.map +0 -1
  151. package/dist/src/tool-generator.d.ts +0 -67
  152. package/dist/src/tool-generator.d.ts.map +0 -1
  153. package/dist/src/tool-generator.js +0 -182
  154. package/dist/src/tool-generator.js.map +0 -1
  155. package/dist/src/validation-utils.d.ts +0 -49
  156. package/dist/src/validation-utils.d.ts.map +0 -1
  157. package/dist/src/validation-utils.js +0 -138
  158. package/dist/src/validation-utils.js.map +0 -1
  159. package/profiles/gitlab/developer-profile.json +0 -1508
  160. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -1,392 +0,0 @@
1
- /**
2
- * HTTP interceptors for auth, rate limiting, retry, etc.
3
- *
4
- * Why interceptor pattern: Separates cross-cutting concerns (auth, retry)
5
- * from business logic (API calls). Each interceptor is independently testable.
6
- */
7
- import { TIME, HTTP_STATUS } from './constants.js';
8
- import { AuthenticationError, AuthorizationError, ConfigurationError, NetworkError, RateLimitError, } from './errors.js';
9
- import { isSafePropertyName } from './validation-utils.js';
10
- export class InterceptorChain {
11
- constructor(config, authToken) {
12
- this.config = config;
13
- this.authToken = authToken;
14
- this.interceptors = [];
15
- this.buildChain();
16
- }
17
- buildChain() {
18
- if (this.config.auth) {
19
- this.interceptors.push(this.createAuthInterceptor());
20
- }
21
- if (this.config.rate_limit) {
22
- this.interceptors.push(this.createRateLimitInterceptor());
23
- }
24
- if (this.config.retry) {
25
- this.interceptors.push(this.createRetryInterceptor());
26
- }
27
- }
28
- /**
29
- * Auth interceptor: adds auth header/query from env or session token
30
- *
31
- * Why env-based: Keeps secrets out of config files. Config defines WHERE
32
- * to get the token, runtime provides the value.
33
- *
34
- * Supports:
35
- * - bearer: Standard HTTP Authorization: Bearer <token>
36
- * - query: API key in URL (?api_key=<token>)
37
- * - custom-header: Custom header (e.g., X-API-Key: <token>)
38
- *
39
- * Note: For multi-auth, uses the primary (first/lowest priority) non-OAuth config.
40
- * OAuth is handled separately in HTTP transport, not in InterceptorChain.
41
- */
42
- createAuthInterceptor() {
43
- const authConfigRaw = this.config.auth;
44
- // Handle multi-auth: get primary non-OAuth config
45
- const authConfigs = Array.isArray(authConfigRaw) ? authConfigRaw : [authConfigRaw];
46
- const sortedConfigs = authConfigs.sort((a, b) => (a.priority || 0) - (b.priority || 0));
47
- // Find first non-OAuth config (OAuth handled by HTTP transport)
48
- const authConfig = sortedConfigs.find(c => c.type !== 'oauth');
49
- if (!authConfig) {
50
- throw new ConfigurationError('Only OAuth authentication configured. OAuth requires HTTP transport for the authorization flow (redirects, callbacks). Add a token-based auth config or use HTTP transport.');
51
- }
52
- if (authConfig.type === 'oauth') {
53
- throw new ConfigurationError('OAuth authentication not supported in InterceptorChain (use HTTP transport OAuth flow)');
54
- }
55
- const envVarName = authConfig.value_from_env;
56
- if (!envVarName) {
57
- throw new ConfigurationError('Auth configuration missing value_from_env');
58
- }
59
- const token = this.authToken || process.env[envVarName];
60
- if (!token) {
61
- throw new AuthenticationError(`Auth token not found. Expected in environment variable: ${envVarName} or passed to constructor`);
62
- }
63
- return async (ctx, next) => {
64
- if (authConfig.type === 'bearer') {
65
- ctx.headers['Authorization'] = `Bearer ${token}`;
66
- }
67
- else if (authConfig.type === 'query' && authConfig.query_param) {
68
- const url = new URL(ctx.url);
69
- url.searchParams.set(authConfig.query_param, token);
70
- ctx.url = url.toString();
71
- }
72
- else if (authConfig.type === 'custom-header' && authConfig.header_name) {
73
- if (!isSafePropertyName(authConfig.header_name)) {
74
- throw new ConfigurationError(`Invalid header name: ${authConfig.header_name}`);
75
- }
76
- // nosemgrep: javascript.express.security.audit.remote-property-injection.remote-property-injection
77
- ctx.headers[authConfig.header_name] = token;
78
- }
79
- return next();
80
- };
81
- }
82
- /**
83
- * Rate limiter: token bucket algorithm with per-endpoint overrides
84
- *
85
- * Why token bucket: Allows bursts while enforcing average rate. Better UX
86
- * than strict per-request delays.
87
- *
88
- * Supports per-endpoint overrides via operationId matching.
89
- */
90
- createRateLimitInterceptor() {
91
- const config = this.config.rate_limit;
92
- // Global token bucket state
93
- const globalTokensPerMs = config.max_requests_per_minute / TIME.MS_PER_MINUTE;
94
- let globalTokens = config.max_requests_per_minute;
95
- let globalLastRefill = Date.now();
96
- // Per-endpoint token buckets (operationId -> bucket state)
97
- const endpointBuckets = new Map();
98
- // Initialize per-endpoint buckets
99
- if (config.overrides) {
100
- for (const [operationId, override] of Object.entries(config.overrides)) {
101
- endpointBuckets.set(operationId, {
102
- tokensPerMs: override.max_requests_per_minute / TIME.MS_PER_MINUTE,
103
- tokens: override.max_requests_per_minute,
104
- lastRefill: Date.now(),
105
- });
106
- }
107
- }
108
- return async (ctx, next) => {
109
- const now = Date.now();
110
- // Choose appropriate bucket: per-endpoint override or global
111
- let bucket = {
112
- tokensPerMs: globalTokensPerMs,
113
- tokens: globalTokens,
114
- lastRefill: globalLastRefill,
115
- };
116
- if (ctx.operationId && endpointBuckets.has(ctx.operationId)) {
117
- bucket = endpointBuckets.get(ctx.operationId);
118
- }
119
- // Refill tokens for the chosen bucket
120
- const elapsed = now - bucket.lastRefill;
121
- const maxTokens = bucket.tokensPerMs * TIME.MS_PER_MINUTE; // Convert back to max tokens
122
- bucket.tokens = Math.min(maxTokens, bucket.tokens + elapsed * bucket.tokensPerMs);
123
- bucket.lastRefill = now;
124
- // Check if we need to wait
125
- if (bucket.tokens < 1) {
126
- const waitMs = (1 - bucket.tokens) / bucket.tokensPerMs;
127
- await new Promise(resolve => setTimeout(resolve, waitMs));
128
- bucket.tokens = 0;
129
- }
130
- else {
131
- bucket.tokens -= 1;
132
- }
133
- // Update global state if using global bucket
134
- if (!ctx.operationId || !endpointBuckets.has(ctx.operationId)) {
135
- globalTokens = bucket.tokens;
136
- globalLastRefill = bucket.lastRefill;
137
- }
138
- return next();
139
- };
140
- }
141
- /**
142
- * Retry interceptor: exponential backoff
143
- *
144
- * Why exponential: Reduces server load during outages. Linear backoff
145
- * can cause thundering herd on recovery.
146
- */
147
- createRetryInterceptor() {
148
- const config = this.config.retry;
149
- return async (ctx, next) => {
150
- let lastError;
151
- for (let attempt = 0; attempt < config.max_attempts; attempt++) {
152
- try {
153
- const response = await next();
154
- // Check if we should retry based on status
155
- if (config.retry_on_status.includes(response.status) && attempt < config.max_attempts - 1) {
156
- const backoffMs = config.backoff_ms[attempt] || config.backoff_ms[config.backoff_ms.length - 1];
157
- await new Promise(resolve => setTimeout(resolve, backoffMs));
158
- continue;
159
- }
160
- return response;
161
- }
162
- catch (error) {
163
- lastError = error instanceof Error ? error : new Error(String(error));
164
- if (attempt < config.max_attempts - 1) {
165
- const backoffMs = config.backoff_ms[attempt] || config.backoff_ms[config.backoff_ms.length - 1];
166
- await new Promise(resolve => setTimeout(resolve, backoffMs));
167
- }
168
- }
169
- }
170
- throw lastError || new Error('All retry attempts failed');
171
- };
172
- }
173
- async execute(ctx, finalHandler) {
174
- let index = 0;
175
- const next = async () => {
176
- if (index >= this.interceptors.length) {
177
- return finalHandler();
178
- }
179
- const interceptor = this.interceptors[index++];
180
- return interceptor(ctx, next);
181
- };
182
- return next();
183
- }
184
- /**
185
- * Extract auth credentials (headers + query params) without making a request
186
- *
187
- * Why separate: ProxyDownloadExecutor needs auth for direct fetch calls,
188
- * but can't use InterceptorChain (fetch doesn't go through chain).
189
- * This extracts the same credentials the chain would apply.
190
- *
191
- * Returns:
192
- * - Bearer auth: { headers: { Authorization: 'Bearer token' }, queryParams: undefined }
193
- * - Custom-header auth: { headers: { 'X-API-Key': 'token' }, queryParams: undefined }
194
- * - Query auth: { headers: {}, queryParams: { key: 'api_key', value: 'token' } }
195
- * - No auth: { headers: {}, queryParams: undefined }
196
- */
197
- getAuthCredentials() {
198
- if (!this.config.auth) {
199
- return { headers: {} };
200
- }
201
- const authConfigRaw = this.config.auth;
202
- // Handle multi-auth: get primary non-OAuth config
203
- const authConfigs = Array.isArray(authConfigRaw) ? authConfigRaw : [authConfigRaw];
204
- const sortedConfigs = authConfigs.sort((a, b) => (a.priority || 0) - (b.priority || 0));
205
- // Find first non-OAuth config (OAuth handled separately in HTTP transport)
206
- const authConfig = sortedConfigs.find(c => c.type !== 'oauth');
207
- if (!authConfig || authConfig.type === 'oauth') {
208
- return { headers: {} };
209
- }
210
- const envVarName = authConfig.value_from_env;
211
- if (!envVarName) {
212
- return { headers: {} };
213
- }
214
- // Use session token first, then environment variable
215
- const token = this.authToken || process.env[envVarName];
216
- if (!token) {
217
- return { headers: {} };
218
- }
219
- const credentials = { headers: {} };
220
- if (authConfig.type === 'bearer') {
221
- credentials.headers['Authorization'] = `Bearer ${token}`;
222
- }
223
- else if (authConfig.type === 'custom-header' && authConfig.header_name) {
224
- if (!isSafePropertyName(authConfig.header_name)) {
225
- return { headers: {} }; // Skip unsafe header name
226
- }
227
- credentials.headers[authConfig.header_name] = token;
228
- }
229
- else if (authConfig.type === 'query' && authConfig.query_param) {
230
- credentials.queryParams = {
231
- key: authConfig.query_param,
232
- value: token
233
- };
234
- }
235
- return credentials;
236
- }
237
- }
238
- /**
239
- * HTTP client with interceptor support
240
- */
241
- export class HttpClient {
242
- constructor(baseUrl, interceptors) {
243
- this.baseUrl = baseUrl;
244
- this.interceptors = interceptors;
245
- }
246
- /**
247
- * Get base URL (for testing)
248
- */
249
- getBaseUrl() {
250
- return this.baseUrl;
251
- }
252
- /**
253
- * Get interceptors config (for testing)
254
- */
255
- getInterceptorsConfig() {
256
- return this.interceptors.config;
257
- }
258
- /**
259
- * Get auth credentials (headers and query params) for direct HTTP calls
260
- * Used by ProxyDownloadExecutor for authenticated file downloads
261
- */
262
- getAuthCredentials() {
263
- return this.interceptors.getAuthCredentials();
264
- }
265
- /**
266
- * Serialize parameters including arrays
267
- *
268
- * Why different formats: APIs use different conventions for array parameters.
269
- * Rails/GitLab: scope[]=value, PHP: scope[0]=value, Express: scope=value (repeat)
270
- */
271
- serializeParams(params, format) {
272
- const searchParams = new URLSearchParams();
273
- for (const [key, value] of Object.entries(params)) {
274
- if (Array.isArray(value)) {
275
- switch (format) {
276
- case 'brackets':
277
- value.forEach(item => searchParams.append(`${key}[]`, String(item)));
278
- break;
279
- case 'indices':
280
- value.forEach((item, i) => searchParams.append(`${key}[${i}]`, String(item)));
281
- break;
282
- case 'repeat':
283
- value.forEach(item => searchParams.append(key, String(item)));
284
- break;
285
- case 'comma':
286
- searchParams.append(key, value.map(String).join(','));
287
- break;
288
- }
289
- }
290
- else {
291
- searchParams.append(key, String(value));
292
- }
293
- }
294
- return searchParams;
295
- }
296
- async request(method, path, options = {}) {
297
- let url = this.baseUrl + path;
298
- // Add query parameters with proper array handling
299
- if (options.params && Object.keys(options.params).length > 0) {
300
- const arrayFormat = this.interceptors.config.array_format || 'repeat';
301
- const searchParams = this.serializeParams(options.params, arrayFormat);
302
- url += '?' + searchParams.toString();
303
- }
304
- const timeoutMs = this.interceptors.config.timeout_ms || 60000; // Default 60s
305
- const controller = new AbortController();
306
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
307
- const ctx = {
308
- method,
309
- url,
310
- headers: {
311
- 'Content-Type': 'application/json',
312
- ...options.headers,
313
- },
314
- body: options.body,
315
- operationId: options.operationId,
316
- signal: controller.signal,
317
- };
318
- try {
319
- return await this.interceptors.execute(ctx, async () => {
320
- // Why no body for GET/HEAD: HTTP spec forbids request body for these methods
321
- const fetchOptions = {
322
- method: ctx.method,
323
- headers: ctx.headers,
324
- signal: ctx.signal,
325
- };
326
- if (ctx.method !== 'GET' && ctx.method !== 'HEAD' && ctx.body) {
327
- if (ctx.body instanceof FormData) {
328
- // FormData: let fetch set Content-Type with boundary automatically
329
- delete ctx.headers['Content-Type'];
330
- fetchOptions.body = ctx.body;
331
- }
332
- else if (ctx.body instanceof Blob || ctx.body instanceof ArrayBuffer) {
333
- // Binary data: keep existing Content-Type or use octet-stream
334
- if (!ctx.headers['Content-Type']) {
335
- ctx.headers['Content-Type'] = 'application/octet-stream';
336
- }
337
- fetchOptions.body = ctx.body;
338
- }
339
- else {
340
- // JSON (default)
341
- fetchOptions.body = JSON.stringify(ctx.body);
342
- }
343
- }
344
- const response = await fetch(ctx.url, fetchOptions);
345
- const body = response.headers.get('content-type')?.includes('application/json')
346
- ? await response.json()
347
- : await response.text();
348
- const responseContext = {
349
- status: response.status,
350
- headers: Object.fromEntries(response.headers.entries()),
351
- body,
352
- };
353
- // Why throw on non-2xx: Allows caller to handle errors with try/catch
354
- // Use structured errors for better client handling
355
- if (response.status < HTTP_STATUS.OK || response.status >= HTTP_STATUS.MULTIPLE_CHOICES) {
356
- // Extract error message from response body (common formats)
357
- let errorMessage = `HTTP ${response.status}`;
358
- if (typeof body === 'object' && body !== null) {
359
- const errorObj = body;
360
- errorMessage = (errorObj.error_description || errorObj.error || errorObj.message || errorMessage);
361
- }
362
- else if (typeof body === 'string' && body.length > 0) {
363
- errorMessage = body;
364
- }
365
- // Throw specific error types based on HTTP status
366
- if (response.status === HTTP_STATUS.UNAUTHORIZED) {
367
- throw new AuthenticationError(errorMessage, { statusCode: response.status });
368
- }
369
- else if (response.status === HTTP_STATUS.FORBIDDEN) {
370
- throw new AuthorizationError(errorMessage);
371
- }
372
- else if (response.status === HTTP_STATUS.TOO_MANY_REQUESTS) {
373
- const retryAfter = response.headers.get('retry-after');
374
- throw new RateLimitError(errorMessage, retryAfter ? parseInt(retryAfter, 10) : undefined);
375
- }
376
- else if (response.status === HTTP_STATUS.NOT_FOUND) {
377
- throw new NetworkError(`Resource not found: ${errorMessage}`, response.status);
378
- }
379
- else {
380
- // Generic network error for other status codes (includes 5xx)
381
- throw new NetworkError(errorMessage, response.status, { body });
382
- }
383
- }
384
- return responseContext;
385
- });
386
- }
387
- finally {
388
- clearTimeout(timeoutId);
389
- }
390
- }
391
- }
392
- //# sourceMappingURL=interceptors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptors.js","sourceRoot":"","sources":["../../src/interceptors.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * JSON-RPC message validation utilities
3
- *
4
- * Why: Eliminates code duplication between http-transport.ts and mcp-server.ts
5
- * These functions validate JSON-RPC 2.0 message types used in MCP protocol.
6
- */
7
- /**
8
- * Check if message is an initialize request
9
- */
10
- export declare function isInitializeRequest(message: unknown): boolean;
11
- /**
12
- * Check if message is a tool call request
13
- */
14
- export declare function isToolCallRequest(message: unknown): boolean;
15
- /**
16
- * Check if message is a tools/list request
17
- */
18
- export declare function isToolsListRequest(message: unknown): boolean;
19
- /**
20
- * Check if message is a valid JSON-RPC request object
21
- */
22
- export declare function isJsonRpcRequest(message: unknown): boolean;
23
- /**
24
- * Check if message is a valid JSON-RPC response object
25
- */
26
- export declare function isJsonRpcResponse(message: unknown): boolean;
27
- //# sourceMappingURL=jsonrpc-validator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonrpc-validator.d.ts","sourceRoot":"","sources":["../../src/jsonrpc-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAI7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAI3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAS1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAS3D"}
@@ -1,58 +0,0 @@
1
- /**
2
- * JSON-RPC message validation utilities
3
- *
4
- * Why: Eliminates code duplication between http-transport.ts and mcp-server.ts
5
- * These functions validate JSON-RPC 2.0 message types used in MCP protocol.
6
- */
7
- /**
8
- * Check if message is an initialize request
9
- */
10
- export function isInitializeRequest(message) {
11
- if (typeof message !== 'object' || message === null)
12
- return false;
13
- const req = message;
14
- return req.method === 'initialize';
15
- }
16
- /**
17
- * Check if message is a tool call request
18
- */
19
- export function isToolCallRequest(message) {
20
- if (typeof message !== 'object' || message === null)
21
- return false;
22
- const req = message;
23
- return req.method === 'tools/call';
24
- }
25
- /**
26
- * Check if message is a tools/list request
27
- */
28
- export function isToolsListRequest(message) {
29
- if (typeof message !== 'object' || message === null)
30
- return false;
31
- const req = message;
32
- return req.method === 'tools/list';
33
- }
34
- /**
35
- * Check if message is a valid JSON-RPC request object
36
- */
37
- export function isJsonRpcRequest(message) {
38
- if (typeof message !== 'object' || message === null)
39
- return false;
40
- const req = message;
41
- return (typeof req.jsonrpc === 'string' &&
42
- req.jsonrpc === '2.0' &&
43
- typeof req.method === 'string' &&
44
- 'id' in req);
45
- }
46
- /**
47
- * Check if message is a valid JSON-RPC response object
48
- */
49
- export function isJsonRpcResponse(message) {
50
- if (typeof message !== 'object' || message === null)
51
- return false;
52
- const resp = message;
53
- return (typeof resp.jsonrpc === 'string' &&
54
- resp.jsonrpc === '2.0' &&
55
- 'id' in resp &&
56
- ('result' in resp || 'error' in resp));
57
- }
58
- //# sourceMappingURL=jsonrpc-validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonrpc-validator.js","sourceRoot":"","sources":["../../src/jsonrpc-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,OAAO,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,OAAO,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,OAAO,GAAG,CAAC,MAAM,KAAK,YAAY,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,GAAG,GAAG,OAAkC,CAAC;IAC/C,OAAO,CACL,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,GAAG,CAAC,OAAO,KAAK,KAAK;QACrB,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,IAAI,IAAI,GAAG,CACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,IAAI,GAAG,OAAkC,CAAC;IAChD,OAAO,CACL,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,IAAI,CAAC,OAAO,KAAK,KAAK;QACtB,IAAI,IAAI,IAAI;QACZ,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,CACtC,CAAC;AACJ,CAAC"}
@@ -1,59 +0,0 @@
1
- /**
2
- * Logger interfaces and implementations
3
- *
4
- * Why: Replaces console.error with structured, level-based logging.
5
- * Enables production-ready logging with context and proper error handling.
6
- *
7
- * Security: Profile-aware token redaction prevents sensitive data leakage.
8
- */
9
- import type { AuthInterceptor } from './types/profile.js';
10
- /**
11
- * Sanitize log message to prevent log injection
12
- * Replaces newlines with escaped string representation
13
- */
14
- export declare function sanitizeLogMessage(message: string): string;
15
- export declare enum LogLevel {
16
- DEBUG = 0,
17
- INFO = 1,
18
- WARN = 2,
19
- ERROR = 3,
20
- SILENT = 4
21
- }
22
- export interface Logger {
23
- debug(message: string, context?: Record<string, unknown>): void;
24
- info(message: string, context?: Record<string, unknown>): void;
25
- warn(message: string, context?: Record<string, unknown>): void;
26
- error(message: string, error?: Error, context?: Record<string, unknown>): void;
27
- }
28
- /**
29
- * Default logger - writes to stderr, respects MCP4_LOG_LEVEL env var
30
- *
31
- * Security: Redacts auth tokens based on profile configuration
32
- */
33
- export declare class ConsoleLogger implements Logger {
34
- private level;
35
- private authConfig?;
36
- constructor(level?: LogLevel, authConfig?: AuthInterceptor);
37
- debug(message: string, context?: Record<string, unknown>): void;
38
- info(message: string, context?: Record<string, unknown>): void;
39
- warn(message: string, context?: Record<string, unknown>): void;
40
- error(message: string, error?: Error, context?: Record<string, unknown>): void;
41
- private write;
42
- }
43
- /**
44
- * Structured JSON logger for production
45
- *
46
- * Why: Machine-readable logs for log aggregation systems (ELK, Splunk, etc.)
47
- * Security: Redacts auth tokens based on profile configuration
48
- */
49
- export declare class JsonLogger implements Logger {
50
- private level;
51
- private authConfig?;
52
- constructor(level?: LogLevel, authConfig?: AuthInterceptor);
53
- debug(message: string, context?: Record<string, unknown>): void;
54
- info(message: string, context?: Record<string, unknown>): void;
55
- warn(message: string, context?: Record<string, unknown>): void;
56
- error(message: string, error?: Error, context?: Record<string, unknown>): void;
57
- private write;
58
- }
59
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AA8C1D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAwCD,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,MAAM,IAAI;CACX;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAChF;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,UAAU,CAAC,CAAkB;gBAEzB,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,eAAe;IAK1D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW9E,OAAO,CAAC,KAAK;CAOd;AAED;;;;;GAKG;AACH,qBAAa,UAAW,YAAW,MAAM;IACvC,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,UAAU,CAAC,CAAkB;gBAEzB,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,eAAe;IAK1D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM9D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU9E,OAAO,CAAC,KAAK;CAUd"}