@1mcp/agent 0.11.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -50
- package/build/auth/clientSessionManager.d.ts +94 -0
- package/build/auth/clientSessionManager.d.ts.map +1 -0
- package/build/auth/clientSessionManager.js +220 -0
- package/build/auth/clientSessionManager.js.map +1 -0
- package/build/auth/sdkOAuthClientProvider.d.ts +93 -0
- package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthClientProvider.js +199 -0
- package/build/auth/sdkOAuthClientProvider.js.map +1 -0
- package/build/auth/sdkOAuthServerProvider.d.ts +63 -0
- package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthServerProvider.js +428 -0
- package/build/auth/sdkOAuthServerProvider.js.map +1 -0
- package/build/{server/auth/sessionManager.d.ts → auth/serverSessionManager.d.ts} +26 -37
- package/build/auth/serverSessionManager.d.ts.map +1 -0
- package/build/{server/auth/sessionManager.js → auth/serverSessionManager.js} +104 -19
- package/build/auth/serverSessionManager.js.map +1 -0
- package/build/auth/sessionTypes.d.ts +24 -0
- package/build/auth/sessionTypes.d.ts.map +1 -0
- package/build/auth/sessionTypes.js +3 -0
- package/build/auth/sessionTypes.js.map +1 -0
- package/build/capabilities/capabilityManager.d.ts +2 -2
- package/build/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/capabilities/capabilityManager.js +40 -7
- package/build/capabilities/capabilityManager.js.map +1 -1
- package/build/config/{configManager.d.ts → mcpConfigManager.d.ts} +18 -7
- package/build/config/mcpConfigManager.d.ts.map +1 -0
- package/build/config/{configManager.js → mcpConfigManager.js} +50 -10
- package/build/config/mcpConfigManager.js.map +1 -0
- package/build/constants.d.ts +36 -14
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +40 -17
- package/build/constants.js.map +1 -1
- package/build/{client.d.ts → core/client/clientFactory.d.ts} +1 -1
- package/build/core/client/clientFactory.d.ts.map +1 -0
- package/build/{client.js → core/client/clientFactory.js} +2 -2
- package/build/core/client/clientFactory.js.map +1 -0
- package/build/{clients → core/client}/clientManager.d.ts +14 -6
- package/build/core/client/clientManager.d.ts.map +1 -0
- package/build/core/client/clientManager.js +209 -0
- package/build/core/client/clientManager.js.map +1 -0
- package/build/{server/config/serverConfig.d.ts → core/server/agentConfig.d.ts} +50 -15
- package/build/core/server/agentConfig.d.ts.map +1 -0
- package/build/core/server/agentConfig.js +166 -0
- package/build/core/server/agentConfig.js.map +1 -0
- package/build/core/server/serverManager.d.ts +39 -0
- package/build/core/server/serverManager.d.ts.map +1 -0
- package/build/core/server/serverManager.js +169 -0
- package/build/core/server/serverManager.js.map +1 -0
- package/build/core/types/client.d.ts +51 -0
- package/build/core/types/client.d.ts.map +1 -0
- package/build/core/types/client.js +15 -0
- package/build/core/types/client.js.map +1 -0
- package/build/core/types/index.d.ts +4 -0
- package/build/core/types/index.d.ts.map +1 -0
- package/build/core/types/index.js +5 -0
- package/build/core/types/index.js.map +1 -0
- package/build/core/types/server.d.ts +14 -0
- package/build/core/types/server.d.ts.map +1 -0
- package/build/core/types/server.js +2 -0
- package/build/core/types/server.js.map +1 -0
- package/build/{types.d.ts → core/types/transport.d.ts} +59 -49
- package/build/core/types/transport.d.ts.map +1 -0
- package/build/{types.js → core/types/transport.js} +11 -13
- package/build/core/types/transport.js.map +1 -0
- package/build/handlers/notificationHandlers.d.ts +3 -3
- package/build/handlers/notificationHandlers.d.ts.map +1 -1
- package/build/handlers/notificationHandlers.js +13 -9
- package/build/handlers/notificationHandlers.js.map +1 -1
- package/build/handlers/requestHandlers.d.ts +2 -2
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +25 -3
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +48 -8
- package/build/index.js.map +1 -1
- package/build/logger/logger.js +1 -1
- package/build/logger/logger.js.map +1 -1
- package/build/{middleware/loggingMiddleware.d.ts → logger/mcpLoggingEnhancer.d.ts} +1 -1
- package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -0
- package/build/{middleware/loggingMiddleware.js → logger/mcpLoggingEnhancer.js} +2 -2
- package/build/logger/mcpLoggingEnhancer.js.map +1 -0
- package/build/server.d.ts +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +9 -6
- package/build/server.js.map +1 -1
- package/build/services/configReloadService.d.ts +15 -5
- package/build/services/configReloadService.d.ts.map +1 -1
- package/build/services/configReloadService.js +31 -14
- package/build/services/configReloadService.js.map +1 -1
- package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -0
- package/build/{server → transport/http/middlewares}/errorHandler.js +1 -1
- package/build/transport/http/middlewares/errorHandler.js.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +42 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +136 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -0
- package/build/transport/http/middlewares/securityMiddleware.d.ts +30 -0
- package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -0
- package/build/transport/http/middlewares/securityMiddleware.js +201 -0
- package/build/transport/http/middlewares/securityMiddleware.js.map +1 -0
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -0
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -0
- package/build/transport/http/routes/oauthRoutes.d.ts +4 -0
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -0
- package/build/transport/http/routes/oauthRoutes.js +474 -0
- package/build/transport/http/routes/oauthRoutes.js.map +1 -0
- package/build/transport/http/routes/sseRoutes.d.ts +4 -0
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -0
- package/build/{server → transport/http}/routes/sseRoutes.js +12 -10
- package/build/transport/http/routes/sseRoutes.js.map +1 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts +4 -0
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -0
- package/build/{server → transport/http}/routes/streamableHttpRoutes.js +46 -13
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -0
- package/build/{server/expressServer.d.ts → transport/http/server.d.ts} +5 -4
- package/build/transport/http/server.d.ts.map +1 -0
- package/build/{server/expressServer.js → transport/http/server.js} +60 -23
- package/build/transport/http/server.js.map +1 -0
- package/build/transport/transportFactory.d.ts +9 -0
- package/build/transport/transportFactory.d.ts.map +1 -0
- package/build/transport/transportFactory.js +148 -0
- package/build/transport/transportFactory.js.map +1 -0
- package/build/utils/clientFiltering.d.ts +4 -4
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/clientFiltering.js +14 -14
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/errorHandling.d.ts +0 -11
- package/build/utils/errorHandling.d.ts.map +1 -1
- package/build/utils/errorHandling.js +1 -18
- package/build/utils/errorHandling.js.map +1 -1
- package/build/utils/errorTypes.js +4 -4
- package/build/utils/errorTypes.js.map +1 -1
- package/build/utils/pagination.d.ts +2 -2
- package/build/utils/pagination.d.ts.map +1 -1
- package/build/utils/pagination.js +87 -8
- package/build/utils/pagination.js.map +1 -1
- package/build/utils/parsing.d.ts +13 -0
- package/build/utils/parsing.d.ts.map +1 -0
- package/build/utils/parsing.js +32 -0
- package/build/utils/parsing.js.map +1 -0
- package/build/utils/sanitization.d.ts +60 -0
- package/build/utils/sanitization.d.ts.map +1 -0
- package/build/utils/sanitization.js +149 -0
- package/build/utils/sanitization.js.map +1 -0
- package/build/utils/scopeValidation.d.ts +102 -0
- package/build/utils/scopeValidation.d.ts.map +1 -0
- package/build/utils/scopeValidation.js +244 -0
- package/build/utils/scopeValidation.js.map +1 -0
- package/package.json +23 -9
- package/build/client.d.ts.map +0 -1
- package/build/client.js.map +0 -1
- package/build/clients/clientManager.d.ts.map +0 -1
- package/build/clients/clientManager.js +0 -147
- package/build/clients/clientManager.js.map +0 -1
- package/build/config/configManager.d.ts.map +0 -1
- package/build/config/configManager.js.map +0 -1
- package/build/config/transportConfig.d.ts +0 -7
- package/build/config/transportConfig.d.ts.map +0 -1
- package/build/config/transportConfig.js +0 -90
- package/build/config/transportConfig.js.map +0 -1
- package/build/middleware/loggingMiddleware.d.ts.map +0 -1
- package/build/middleware/loggingMiddleware.js.map +0 -1
- package/build/server/auth/authManager.d.ts +0 -109
- package/build/server/auth/authManager.d.ts.map +0 -1
- package/build/server/auth/authManager.js +0 -173
- package/build/server/auth/authManager.js.map +0 -1
- package/build/server/auth/authMiddleware.d.ts +0 -16
- package/build/server/auth/authMiddleware.d.ts.map +0 -1
- package/build/server/auth/authMiddleware.js +0 -45
- package/build/server/auth/authMiddleware.js.map +0 -1
- package/build/server/auth/sessionManager.d.ts.map +0 -1
- package/build/server/auth/sessionManager.js.map +0 -1
- package/build/server/config/serverConfig.d.ts.map +0 -1
- package/build/server/config/serverConfig.js +0 -117
- package/build/server/config/serverConfig.js.map +0 -1
- package/build/server/errorHandler.d.ts.map +0 -1
- package/build/server/errorHandler.js.map +0 -1
- package/build/server/expressServer.d.ts.map +0 -1
- package/build/server/expressServer.js.map +0 -1
- package/build/server/routes/oauthRoutes.d.ts +0 -14
- package/build/server/routes/oauthRoutes.d.ts.map +0 -1
- package/build/server/routes/oauthRoutes.js +0 -132
- package/build/server/routes/oauthRoutes.js.map +0 -1
- package/build/server/routes/sseRoutes.d.ts +0 -4
- package/build/server/routes/sseRoutes.d.ts.map +0 -1
- package/build/server/routes/sseRoutes.js.map +0 -1
- package/build/server/routes/streamableHttpRoutes.d.ts +0 -4
- package/build/server/routes/streamableHttpRoutes.d.ts.map +0 -1
- package/build/server/routes/streamableHttpRoutes.js.map +0 -1
- package/build/server/tagsExtractor.d.ts.map +0 -1
- package/build/server/tagsExtractor.js.map +0 -1
- package/build/serverManager.d.ts +0 -27
- package/build/serverManager.d.ts.map +0 -1
- package/build/serverManager.js +0 -87
- package/build/serverManager.js.map +0 -1
- package/build/types.d.ts.map +0 -1
- package/build/types.js.map +0 -1
- /package/build/{server → transport/http/middlewares}/errorHandler.d.ts +0 -0
- /package/build/{server → transport/http/middlewares}/tagsExtractor.d.ts +0 -0
- /package/build/{server → transport/http/middlewares}/tagsExtractor.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopeValidation.d.ts","sourceRoot":"","sources":["../../src/utils/scopeValidation.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,gDAAgD;;IAEhD,2CAA2C;;IAE3C,oEAAoE;;IAEpE,sEAAsE;;IAEtE,8BAA8B;;IAE9B,8BAA8B;;CAEtB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAevD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAkBtD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgB5D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,qBAAqB,CA8CtE;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EAAE,GACtB,qBAAqB,CAqCvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CA6B3F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAMvD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,IAAI,CAUN"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import logger from '../logger/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Security constants for scope validation
|
|
4
|
+
*/
|
|
5
|
+
export const SCOPE_VALIDATION_CONFIG = {
|
|
6
|
+
/** Maximum allowed length for a single scope */
|
|
7
|
+
MAX_SCOPE_LENGTH: 100,
|
|
8
|
+
/** Maximum number of scopes per request */
|
|
9
|
+
MAX_SCOPES_COUNT: 50,
|
|
10
|
+
/** Valid tag name pattern: alphanumeric, underscore, hyphen only */
|
|
11
|
+
TAG_NAME_PATTERN: /^[a-zA-Z0-9_-]+$/,
|
|
12
|
+
/** Valid tag scope pattern: tag: prefix followed by valid tag name */
|
|
13
|
+
TAG_SCOPE_PATTERN: /^tag:[a-zA-Z0-9_-]+$/,
|
|
14
|
+
/** Minimum tag name length */
|
|
15
|
+
MIN_TAG_LENGTH: 1,
|
|
16
|
+
/** Maximum tag name length */
|
|
17
|
+
MAX_TAG_LENGTH: 50,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Validates if a string is a valid tag name
|
|
21
|
+
* @param tagName - The tag name to validate
|
|
22
|
+
* @returns True if valid, false otherwise
|
|
23
|
+
*/
|
|
24
|
+
export function isValidTagName(tagName) {
|
|
25
|
+
if (!tagName || typeof tagName !== 'string') {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// Check length constraints
|
|
29
|
+
if (tagName.length < SCOPE_VALIDATION_CONFIG.MIN_TAG_LENGTH ||
|
|
30
|
+
tagName.length > SCOPE_VALIDATION_CONFIG.MAX_TAG_LENGTH) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// Check pattern
|
|
34
|
+
return SCOPE_VALIDATION_CONFIG.TAG_NAME_PATTERN.test(tagName);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validates if a string is a valid tag scope
|
|
38
|
+
* @param scope - The scope to validate
|
|
39
|
+
* @returns True if valid, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
export function isValidTagScope(scope) {
|
|
42
|
+
if (!scope || typeof scope !== 'string') {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// Check length constraints
|
|
46
|
+
if (scope.length > SCOPE_VALIDATION_CONFIG.MAX_SCOPE_LENGTH) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
// Check pattern
|
|
50
|
+
if (!SCOPE_VALIDATION_CONFIG.TAG_SCOPE_PATTERN.test(scope)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// Extract and validate tag name
|
|
54
|
+
const tagName = scope.slice(4); // Remove "tag:" prefix
|
|
55
|
+
return isValidTagName(tagName);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Safely extracts tag name from a tag scope
|
|
59
|
+
* @param scope - The scope string (e.g., "tag:web")
|
|
60
|
+
* @returns The tag name if valid, null otherwise
|
|
61
|
+
*/
|
|
62
|
+
export function extractTagFromScope(scope) {
|
|
63
|
+
if (!isValidTagScope(scope)) {
|
|
64
|
+
logger.warn(`Invalid tag scope format: ${scope}`);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return scope.slice(4); // Remove "tag:" prefix
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parses a scope string into its components
|
|
71
|
+
* @param scope - The scope string to parse
|
|
72
|
+
* @returns Parsed scope object or null if invalid
|
|
73
|
+
*/
|
|
74
|
+
export function parseScope(scope) {
|
|
75
|
+
if (!scope || typeof scope !== 'string') {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
// Currently only supporting tag scopes
|
|
79
|
+
if (scope.startsWith('tag:')) {
|
|
80
|
+
const tagName = extractTagFromScope(scope);
|
|
81
|
+
if (!tagName) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return { type: 'tag', value: tagName };
|
|
85
|
+
}
|
|
86
|
+
// Future: Add support for other scope types (capability:, resource:, etc.)
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Validates an array of scopes for format and security
|
|
91
|
+
* @param scopes - Array of scope strings to validate
|
|
92
|
+
* @returns Validation result with details
|
|
93
|
+
*/
|
|
94
|
+
export function validateScopes(scopes) {
|
|
95
|
+
const result = {
|
|
96
|
+
isValid: true,
|
|
97
|
+
errors: [],
|
|
98
|
+
validScopes: [],
|
|
99
|
+
invalidScopes: [],
|
|
100
|
+
};
|
|
101
|
+
// Check for null/undefined input
|
|
102
|
+
if (!scopes || !Array.isArray(scopes)) {
|
|
103
|
+
result.isValid = false;
|
|
104
|
+
result.errors.push('Scopes must be an array');
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
// Check count limits
|
|
108
|
+
if (scopes.length > SCOPE_VALIDATION_CONFIG.MAX_SCOPES_COUNT) {
|
|
109
|
+
result.isValid = false;
|
|
110
|
+
result.errors.push(`Too many scopes: ${scopes.length} > ${SCOPE_VALIDATION_CONFIG.MAX_SCOPES_COUNT}`);
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
// Validate each scope
|
|
114
|
+
const seenScopes = new Set();
|
|
115
|
+
for (const scope of scopes) {
|
|
116
|
+
// Check for duplicates
|
|
117
|
+
if (seenScopes.has(scope)) {
|
|
118
|
+
result.errors.push(`Duplicate scope: ${scope}`);
|
|
119
|
+
result.invalidScopes.push(scope);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
seenScopes.add(scope);
|
|
123
|
+
// Validate scope format
|
|
124
|
+
if (isValidTagScope(scope)) {
|
|
125
|
+
result.validScopes.push(scope);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
result.errors.push(`Invalid scope format: ${scope}`);
|
|
129
|
+
result.invalidScopes.push(scope);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Set overall validity
|
|
133
|
+
result.isValid = result.errors.length === 0;
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Validates that requested scopes are available (allowlist approach)
|
|
138
|
+
* @param requestedScopes - Scopes requested by client
|
|
139
|
+
* @param availableTags - Tags available on the server
|
|
140
|
+
* @returns Validation result
|
|
141
|
+
*/
|
|
142
|
+
export function validateScopesAgainstAvailableTags(requestedScopes, availableTags) {
|
|
143
|
+
const result = {
|
|
144
|
+
isValid: true,
|
|
145
|
+
errors: [],
|
|
146
|
+
validScopes: [],
|
|
147
|
+
invalidScopes: [],
|
|
148
|
+
};
|
|
149
|
+
// First validate scope formats
|
|
150
|
+
const formatValidation = validateScopes(requestedScopes);
|
|
151
|
+
if (!formatValidation.isValid) {
|
|
152
|
+
return formatValidation;
|
|
153
|
+
}
|
|
154
|
+
// Create set of available tags for fast lookup
|
|
155
|
+
const availableTagSet = new Set(availableTags);
|
|
156
|
+
// Check each scope against available tags
|
|
157
|
+
for (const scope of requestedScopes) {
|
|
158
|
+
const tagName = extractTagFromScope(scope);
|
|
159
|
+
if (!tagName) {
|
|
160
|
+
result.errors.push(`Invalid scope format: ${scope}`);
|
|
161
|
+
result.invalidScopes.push(scope);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (availableTagSet.has(tagName)) {
|
|
165
|
+
result.validScopes.push(scope);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
result.errors.push(`Scope not available: ${scope} (tag: ${tagName})`);
|
|
169
|
+
result.invalidScopes.push(scope);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
result.isValid = result.errors.length === 0;
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Checks if granted scopes satisfy the requirements for requested tags
|
|
177
|
+
* @param grantedScopes - Scopes granted during OAuth flow
|
|
178
|
+
* @param requestedTags - Tags requested for current operation
|
|
179
|
+
* @returns True if all requested tags are covered by granted scopes
|
|
180
|
+
*/
|
|
181
|
+
export function hasRequiredScopes(grantedScopes, requestedTags) {
|
|
182
|
+
// Fail-secure: deny if inputs are invalid
|
|
183
|
+
if (!grantedScopes || !Array.isArray(grantedScopes) || !requestedTags || !Array.isArray(requestedTags)) {
|
|
184
|
+
logger.warn('Invalid input to hasRequiredScopes', { grantedScopes, requestedTags });
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
// No tags requested means access is allowed
|
|
188
|
+
if (requestedTags.length === 0) {
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
// Extract tags from granted scopes
|
|
192
|
+
const grantedTags = grantedScopes
|
|
193
|
+
.map((scope) => extractTagFromScope(scope))
|
|
194
|
+
.filter((tag) => tag !== null);
|
|
195
|
+
// Check if all requested tags are in granted tags
|
|
196
|
+
const hasAllTags = requestedTags.every((tag) => grantedTags.includes(tag));
|
|
197
|
+
if (!hasAllTags) {
|
|
198
|
+
logger.warn('Insufficient scopes for requested tags', {
|
|
199
|
+
grantedTags,
|
|
200
|
+
requestedTags,
|
|
201
|
+
missing: requestedTags.filter((tag) => !grantedTags.includes(tag)),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return hasAllTags;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Converts tags to their corresponding scopes
|
|
208
|
+
* @param tags - Array of tag names
|
|
209
|
+
* @returns Array of tag scopes
|
|
210
|
+
*/
|
|
211
|
+
export function tagsToScopes(tags) {
|
|
212
|
+
if (!tags || !Array.isArray(tags)) {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
return tags.filter((tag) => isValidTagName(tag)).map((tag) => `tag:${tag}`);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Converts scopes to their corresponding tags
|
|
219
|
+
* @param scopes - Array of scope strings
|
|
220
|
+
* @returns Array of tag names
|
|
221
|
+
*/
|
|
222
|
+
export function scopesToTags(scopes) {
|
|
223
|
+
if (!scopes || !Array.isArray(scopes)) {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
return scopes.map((scope) => extractTagFromScope(scope)).filter((tag) => tag !== null);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Security utility to audit scope operations
|
|
230
|
+
* @param operation - The operation being performed
|
|
231
|
+
* @param context - Additional context for logging
|
|
232
|
+
*/
|
|
233
|
+
export function auditScopeOperation(operation, context) {
|
|
234
|
+
logger.info(`Scope operation: ${operation}`, {
|
|
235
|
+
operation,
|
|
236
|
+
clientId: context.clientId,
|
|
237
|
+
requestedScopes: context.requestedScopes,
|
|
238
|
+
grantedScopes: context.grantedScopes,
|
|
239
|
+
success: context.success,
|
|
240
|
+
error: context.error,
|
|
241
|
+
timestamp: new Date().toISOString(),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=scopeValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopeValidation.js","sourceRoot":"","sources":["../../src/utils/scopeValidation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1mcp/agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "One MCP server to aggregate them all - A unified Model Context Protocol server implementation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -42,13 +42,19 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"lint-staged": {
|
|
45
|
+
"*.ts": [
|
|
46
|
+
"bash -c 'tsc --noEmit --project tsconfig.test.json'"
|
|
47
|
+
],
|
|
45
48
|
"*.{js,ts}": [
|
|
46
49
|
"eslint --fix",
|
|
47
50
|
"prettier --write"
|
|
51
|
+
],
|
|
52
|
+
"*.{md,json,yml,yaml}": [
|
|
53
|
+
"prettier --write"
|
|
48
54
|
]
|
|
49
55
|
},
|
|
50
56
|
"dependencies": {
|
|
51
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.15.0",
|
|
52
58
|
"body-parser": "^2.2.0",
|
|
53
59
|
"cors": "^2.8.5",
|
|
54
60
|
"express": "^5.1.0",
|
|
@@ -73,6 +79,7 @@
|
|
|
73
79
|
"@typescript-eslint/eslint-plugin": "^8.27.0",
|
|
74
80
|
"@typescript-eslint/parser": "^8.27.0",
|
|
75
81
|
"@vitest/coverage-v8": "^1.4.0",
|
|
82
|
+
"axios": "^1.10.0",
|
|
76
83
|
"eslint": "^9.22.0",
|
|
77
84
|
"eslint-config-prettier": "^10.1.1",
|
|
78
85
|
"eslint-plugin-prettier": "^5.2.3",
|
|
@@ -82,19 +89,26 @@
|
|
|
82
89
|
"lint-staged": "^16.1.2",
|
|
83
90
|
"prettier": "^3.5.3",
|
|
84
91
|
"ts-node": "^10.9.2",
|
|
85
|
-
"tsc-watch": "^
|
|
92
|
+
"tsc-watch": "^7.1.1",
|
|
86
93
|
"typescript": "^5.3.3",
|
|
94
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
87
95
|
"vitest": "^1.4.0"
|
|
88
96
|
},
|
|
89
97
|
"scripts": {
|
|
90
|
-
"dev": "tsc-watch --onSuccess \"node build/index.js --config ./mcp.json --port 3051 --auth\"",
|
|
91
|
-
"build": "tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"",
|
|
92
|
-
"watch": "tsc --watch",
|
|
98
|
+
"dev": "LOG_LEVEL=debug tsc-watch --project tsconfig.build.json --onSuccess \"node build/index.js --config ./mcp.json --port 3051 --enable-auth\"",
|
|
99
|
+
"build": "tsc --project tsconfig.build.json && node -e \"require('fs').chmodSync('build/index.js', '755')\"",
|
|
100
|
+
"watch": "tsc --watch --project tsconfig.build.json",
|
|
93
101
|
"inspector": "npx -y @modelcontextprotocol/inspector",
|
|
94
102
|
"lint": "eslint . --ext .ts",
|
|
95
103
|
"lint:fix": "eslint . --ext .ts --fix",
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"test
|
|
104
|
+
"format": "prettier --write \"src/**/*.{js,ts}\" \"test/**/*.{js,ts}\"",
|
|
105
|
+
"typecheck": "tsc --noEmit --project tsconfig.test.json",
|
|
106
|
+
"test": "pnpm test:unit && pnpm test:e2e",
|
|
107
|
+
"test:unit": "vitest run",
|
|
108
|
+
"test:unit:watch": "vitest",
|
|
109
|
+
"test:unit:coverage": "vitest run --coverage",
|
|
110
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
111
|
+
"test:e2e:watch": "vitest --config vitest.e2e.config.ts",
|
|
112
|
+
"test:e2e:coverage": "vitest run --config vitest.e2e.config.ts --coverage"
|
|
99
113
|
}
|
|
100
114
|
}
|
package/build/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,wBAA8B,YAAY;;;;;;;;;;;;;;;;;;;;;;IAYzC"}
|
package/build/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY;IACxC,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,kBAAkB;KAC5B,EACD;QACE,YAAY,EAAE,uBAAuB;KACtC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientManager.d.ts","sourceRoot":"","sources":["../../src/clients/clientManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAM1E,OAAO,EAAgB,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhH;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqC3F;AAoCD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,CAM1E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,CAAC,CA2BZ;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,OAAO,GAAE,gBAAqB,EAC9B,kBAAkB,CAAC,EAAE,gBAAgB,GACpC,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7C,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAEZ"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import createClient from '../client.js';
|
|
3
|
-
import logger from '../logger/logger.js';
|
|
4
|
-
import { CONNECTION_RETRY, MCP_SERVER_NAME } from '../constants.js';
|
|
5
|
-
import { ClientConnectionError, ClientNotFoundError, MCPError, CapabilityError } from '../utils/errorTypes.js';
|
|
6
|
-
import { ClientStatus } from '../types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Creates client instances for all transports with retry logic
|
|
9
|
-
* @param transports Record of transport instances
|
|
10
|
-
* @returns Record of client instances
|
|
11
|
-
*/
|
|
12
|
-
export async function createClients(transports) {
|
|
13
|
-
const clients = {};
|
|
14
|
-
for (const [name, transport] of Object.entries(transports)) {
|
|
15
|
-
logger.info(`Creating client for ${name}`);
|
|
16
|
-
try {
|
|
17
|
-
const client = await createClient();
|
|
18
|
-
// Connect with retry logic
|
|
19
|
-
await connectWithRetry(client, transport, name);
|
|
20
|
-
clients[name] = {
|
|
21
|
-
name,
|
|
22
|
-
transport,
|
|
23
|
-
client,
|
|
24
|
-
status: ClientStatus.Connected,
|
|
25
|
-
lastConnected: new Date(),
|
|
26
|
-
};
|
|
27
|
-
logger.info(`Client created for ${name}`);
|
|
28
|
-
client.onclose = () => {
|
|
29
|
-
clients[name].status = ClientStatus.Disconnected;
|
|
30
|
-
logger.info(`Client ${name} disconnected`);
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
logger.error(`Failed to create client for ${name}: ${error}`);
|
|
35
|
-
clients[name] = {
|
|
36
|
-
name,
|
|
37
|
-
transport,
|
|
38
|
-
client: await createClient(),
|
|
39
|
-
status: ClientStatus.Error,
|
|
40
|
-
lastError: error instanceof Error ? error : new Error(String(error)),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return Object.freeze(clients);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Connects a client to its transport with retry logic
|
|
48
|
-
* @param client The client to connect
|
|
49
|
-
* @param transport The transport to connect to
|
|
50
|
-
* @param name The name of the client for logging
|
|
51
|
-
*/
|
|
52
|
-
async function connectWithRetry(client, transport, name) {
|
|
53
|
-
let retryDelay = CONNECTION_RETRY.INITIAL_DELAY_MS;
|
|
54
|
-
for (let i = 0; i < CONNECTION_RETRY.MAX_ATTEMPTS; i++) {
|
|
55
|
-
try {
|
|
56
|
-
await client.connect(transport);
|
|
57
|
-
const sv = await client.getServerVersion();
|
|
58
|
-
if (sv?.name === MCP_SERVER_NAME) {
|
|
59
|
-
throw new ClientConnectionError(name, new Error('Aborted to prevent circular dependency'));
|
|
60
|
-
}
|
|
61
|
-
logger.info(`Successfully connected to ${name} with server ${sv?.name} version ${sv?.version}`);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
logger.error(`Failed to connect to ${name}: ${error}`);
|
|
66
|
-
if (i < CONNECTION_RETRY.MAX_ATTEMPTS - 1) {
|
|
67
|
-
logger.info(`Retrying in ${retryDelay}ms...`);
|
|
68
|
-
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
69
|
-
retryDelay *= 2; // Exponential backoff
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
throw new ClientConnectionError(name, error instanceof Error ? error : new Error(String(error)));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Gets a client by name with error handling
|
|
79
|
-
* @param clients Record of client instances
|
|
80
|
-
* @param clientName The name of the client to get
|
|
81
|
-
* @returns The client instance
|
|
82
|
-
* @throws ClientNotFoundError if the client is not found
|
|
83
|
-
*/
|
|
84
|
-
export function getClient(clients, clientName) {
|
|
85
|
-
const client = clients[clientName];
|
|
86
|
-
if (!client) {
|
|
87
|
-
throw new ClientNotFoundError(clientName);
|
|
88
|
-
}
|
|
89
|
-
return client;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Executes an operation with error handling and retry logic
|
|
93
|
-
* @param operation The operation to execute
|
|
94
|
-
* @param context The execution context (client info or server info)
|
|
95
|
-
* @param options Operation options including timeout and retry settings
|
|
96
|
-
* @returns The result of the operation
|
|
97
|
-
*/
|
|
98
|
-
export async function executeOperation(operation, contextName, options = {}) {
|
|
99
|
-
const { retryCount = 0, retryDelay = 1000 } = options;
|
|
100
|
-
let lastError;
|
|
101
|
-
for (let i = 0; i <= retryCount; i++) {
|
|
102
|
-
try {
|
|
103
|
-
return await operation();
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
107
|
-
if (i < retryCount) {
|
|
108
|
-
logger.info(`Retrying operation ${operation.name} on ${contextName} after ${retryDelay}ms`);
|
|
109
|
-
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// If we get here, we've exhausted all retries
|
|
114
|
-
logger.error(`Operation failed on ${contextName} after ${retryCount + 1} attempts: ${lastError}`);
|
|
115
|
-
if (lastError instanceof MCPError) {
|
|
116
|
-
throw lastError;
|
|
117
|
-
}
|
|
118
|
-
const mcpError = new MCPError(`Error executing operation on ${contextName}`, ErrorCode.InternalError, {
|
|
119
|
-
originalError: lastError,
|
|
120
|
-
});
|
|
121
|
-
throw mcpError;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Executes a client operation with error handling and retry logic
|
|
125
|
-
* @param clients Record of client instances
|
|
126
|
-
* @param clientName The name of the client to use
|
|
127
|
-
* @param operation The operation to execute
|
|
128
|
-
* @param options Operation options including timeout and retry settings
|
|
129
|
-
* @param requiredCapability The capability required for this operation
|
|
130
|
-
*/
|
|
131
|
-
export async function executeClientOperation(clients, clientName, operation, options = {}, requiredCapability) {
|
|
132
|
-
const clientInfo = getClient(clients, clientName);
|
|
133
|
-
if (requiredCapability && !clientInfo.capabilities?.[requiredCapability]) {
|
|
134
|
-
throw new CapabilityError(clientName, String(requiredCapability));
|
|
135
|
-
}
|
|
136
|
-
return executeOperation(() => operation(clientInfo), `client ${clientName}`, options);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Executes a server operation with error handling and retry logic
|
|
140
|
-
* @param server The server to execute the operation on
|
|
141
|
-
* @param operation The operation to execute
|
|
142
|
-
* @param options Operation options including timeout and retry settings
|
|
143
|
-
*/
|
|
144
|
-
export async function executeServerOperation(server, operation, options = {}) {
|
|
145
|
-
return executeOperation(() => operation(server), 'server', options);
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=clientManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientManager.js","sourceRoot":"","sources":["../../src/clients/clientManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configManager.d.ts","sourceRoot":"","sources":["../../src/config/configManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,wBAAwB,2BAA2B;CACpD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAS;IAE/B;;;OAGG;IACH,OAAO;IAOP;;;OAGG;WACW,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa;IAOjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACI,aAAa,IAAI,IAAI;IAkB5B;;OAEG;IACI,YAAY,IAAI,IAAI;IAQ3B;;OAEG;IACI,YAAY,IAAI,IAAI;IAgB3B;;;OAGG;IACI,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;CAG7D;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configManager.js","sourceRoot":"","sources":["../../src/config/configManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MCPServerParams, EnhancedTransport } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Creates transport instances from configuration
|
|
4
|
-
* @returns Record of transport instances
|
|
5
|
-
*/
|
|
6
|
-
export declare function createTransports(config: Record<string, MCPServerParams>): Record<string, EnhancedTransport>;
|
|
7
|
-
//# sourceMappingURL=transportConfig.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transportConfig.d.ts","sourceRoot":"","sources":["../../src/config/transportConfig.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAkF3G"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
2
|
-
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
3
|
-
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
-
import { ZodError } from 'zod';
|
|
5
|
-
import logger from '../logger/logger.js';
|
|
6
|
-
import { transportConfigSchema } from '../types.js';
|
|
7
|
-
/**
|
|
8
|
-
* Creates transport instances from configuration
|
|
9
|
-
* @returns Record of transport instances
|
|
10
|
-
*/
|
|
11
|
-
export function createTransports(config) {
|
|
12
|
-
const transports = {};
|
|
13
|
-
const assignTransport = (name, transport, validatedTransport) => {
|
|
14
|
-
transport.timeout = validatedTransport.timeout;
|
|
15
|
-
transport.tags = validatedTransport.tags;
|
|
16
|
-
transports[name] = transport;
|
|
17
|
-
};
|
|
18
|
-
for (const [name, params] of Object.entries(config)) {
|
|
19
|
-
if (params.disabled) {
|
|
20
|
-
logger.debug(`Skipping disabled transport: ${name}`);
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
// Infer type if missing
|
|
24
|
-
let inferredParams = { ...params };
|
|
25
|
-
if (!inferredParams.type) {
|
|
26
|
-
logger.warn(`Transport type is missing for ${name}, inferring type...`);
|
|
27
|
-
if (inferredParams.command) {
|
|
28
|
-
inferredParams.type = 'stdio';
|
|
29
|
-
logger.info(`Inferred transport type for ${name} as stdio`);
|
|
30
|
-
}
|
|
31
|
-
else if (inferredParams.url) {
|
|
32
|
-
inferredParams.type = 'http';
|
|
33
|
-
logger.info(`Inferred transport type for ${name} as http/streamableHttp`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
const validatedTransport = transportConfigSchema.parse(inferredParams);
|
|
38
|
-
let transport;
|
|
39
|
-
switch (validatedTransport.type) {
|
|
40
|
-
case 'sse': {
|
|
41
|
-
if (!validatedTransport.url) {
|
|
42
|
-
throw new Error(`URL is required for ${validatedTransport.type} transport: ${name}`);
|
|
43
|
-
}
|
|
44
|
-
transport = new SSEClientTransport(new URL(validatedTransport.url), {
|
|
45
|
-
requestInit: {
|
|
46
|
-
headers: validatedTransport.headers,
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
assignTransport(name, transport, validatedTransport);
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
case 'http': // Since sse is deprecated, we can use http as a alias for streamableHttp
|
|
53
|
-
case 'streamableHttp': {
|
|
54
|
-
if (!validatedTransport.url) {
|
|
55
|
-
throw new Error(`URL is required for streamableHttp transport: ${name}`);
|
|
56
|
-
}
|
|
57
|
-
transport = new StreamableHTTPClientTransport(new URL(validatedTransport.url), {
|
|
58
|
-
requestInit: {
|
|
59
|
-
headers: validatedTransport.headers,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
assignTransport(name, transport, validatedTransport);
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
case 'stdio': {
|
|
66
|
-
if (!validatedTransport.command) {
|
|
67
|
-
throw new Error(`Command is required for stdio transport: ${name}`);
|
|
68
|
-
}
|
|
69
|
-
transport = new StdioClientTransport(validatedTransport);
|
|
70
|
-
assignTransport(name, transport, validatedTransport);
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
default:
|
|
74
|
-
throw new Error(`Invalid transport type: ${validatedTransport.type}`);
|
|
75
|
-
}
|
|
76
|
-
logger.debug(`Created transport: ${name}`);
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
if (error instanceof ZodError) {
|
|
80
|
-
logger.error(`Invalid transport configuration for ${name}:`, error.errors);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
logger.error(`Error creating transport ${name}:`, error);
|
|
84
|
-
}
|
|
85
|
-
throw error;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return transports;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=transportConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transportConfig.js","sourceRoot":"","sources":["../../src/config/transportConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loggingMiddleware.d.ts","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiJnE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAqC7D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"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"}
|