@1mcp/agent 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -37
- package/build/auth/sdkOAuthClientProvider.d.ts +93 -0
- package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthClientProvider.js +204 -0
- package/build/auth/sdkOAuthClientProvider.js.map +1 -0
- package/build/auth/sdkOAuthServerProvider.d.ts +64 -0
- package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -0
- package/build/auth/sdkOAuthServerProvider.js +359 -0
- package/build/auth/sdkOAuthServerProvider.js.map +1 -0
- package/build/auth/sessionTypes.d.ts +38 -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/auth/storage/authCodeRepository.d.ts +25 -0
- package/build/auth/storage/authCodeRepository.d.ts.map +1 -0
- package/build/auth/storage/authCodeRepository.js +50 -0
- package/build/auth/storage/authCodeRepository.js.map +1 -0
- package/build/auth/storage/authRequestRepository.d.ts +25 -0
- package/build/auth/storage/authRequestRepository.d.ts.map +1 -0
- package/build/auth/storage/authRequestRepository.js +51 -0
- package/build/auth/storage/authRequestRepository.js.map +1 -0
- package/build/auth/storage/clientDataRepository.d.ts +25 -0
- package/build/auth/storage/clientDataRepository.d.ts.map +1 -0
- package/build/auth/storage/clientDataRepository.js +45 -0
- package/build/auth/storage/clientDataRepository.js.map +1 -0
- package/build/auth/storage/clientSessionRepository.d.ts +77 -0
- package/build/auth/storage/clientSessionRepository.d.ts.map +1 -0
- package/build/auth/storage/clientSessionRepository.js +120 -0
- package/build/auth/storage/clientSessionRepository.js.map +1 -0
- package/build/auth/storage/fileStorageService.d.ts +68 -0
- package/build/auth/storage/fileStorageService.d.ts.map +1 -0
- package/build/auth/storage/fileStorageService.js +262 -0
- package/build/auth/storage/fileStorageService.js.map +1 -0
- package/build/auth/storage/oauthStorageService.d.ts +57 -0
- package/build/auth/storage/oauthStorageService.d.ts.map +1 -0
- package/build/auth/storage/oauthStorageService.js +131 -0
- package/build/auth/storage/oauthStorageService.js.map +1 -0
- package/build/auth/storage/sessionRepository.d.ts +29 -0
- package/build/auth/storage/sessionRepository.d.ts.map +1 -0
- package/build/auth/storage/sessionRepository.js +64 -0
- package/build/auth/storage/sessionRepository.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 +1 -1
- package/build/capabilities/capabilityManager.js.map +1 -1
- package/build/config/{configManager.d.ts → mcpConfigManager.d.ts} +11 -6
- package/build/config/mcpConfigManager.d.ts.map +1 -0
- package/build/config/{configManager.js → mcpConfigManager.js} +26 -8
- package/build/config/mcpConfigManager.js.map +1 -0
- package/build/constants.d.ts +51 -14
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +61 -17
- package/build/constants.js.map +1 -1
- package/build/core/client/clientManager.d.ts +14 -6
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +90 -28
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/server/{serverConfig.d.ts → 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 +12 -5
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +12 -2
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/types/client.d.ts +22 -9
- package/build/core/types/client.d.ts.map +1 -1
- package/build/core/types/client.js +2 -0
- package/build/core/types/client.js.map +1 -1
- package/build/core/types/server.d.ts +3 -3
- package/build/core/types/server.d.ts.map +1 -1
- package/build/core/types/transport.d.ts +58 -0
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +10 -0
- package/build/core/types/transport.js.map +1 -1
- package/build/handlers/notificationHandlers.d.ts +3 -3
- package/build/handlers/notificationHandlers.d.ts.map +1 -1
- package/build/handlers/notificationHandlers.js +2 -2
- 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 +4 -3
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +47 -7
- package/build/index.js.map +1 -1
- package/build/{transport/http/middleware/loggingMiddleware.d.ts → logger/mcpLoggingEnhancer.d.ts} +1 -1
- package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -0
- package/build/{transport/http/middleware/loggingMiddleware.js → logger/mcpLoggingEnhancer.js} +2 -2
- package/build/logger/mcpLoggingEnhancer.js.map +1 -0
- package/build/server.js +4 -4
- package/build/server.js.map +1 -1
- package/build/services/configReloadService.d.ts +2 -2
- package/build/services/configReloadService.d.ts.map +1 -1
- package/build/services/configReloadService.js +4 -4
- package/build/services/configReloadService.js.map +1 -1
- package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -0
- package/build/transport/http/{errorHandler.js → middlewares/errorHandler.js} +1 -1
- package/build/transport/http/middlewares/errorHandler.js.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +39 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +129 -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 +5 -11
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +460 -122
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/http/routes/sseRoutes.d.ts +3 -2
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/sseRoutes.js +10 -7
- package/build/transport/http/routes/sseRoutes.js.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.d.ts +3 -2
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.js +17 -10
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/http/server.d.ts +3 -2
- package/build/transport/http/server.d.ts.map +1 -1
- package/build/transport/http/server.js +58 -21
- package/build/transport/http/server.js.map +1 -1
- 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 +54 -19
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/errorHandling.d.ts +0 -12
- package/build/utils/errorHandling.d.ts.map +1 -1
- package/build/utils/errorHandling.js +1 -42
- package/build/utils/errorHandling.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 +4 -4
- 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 +20 -11
- package/build/auth/authManager.d.ts +0 -109
- package/build/auth/authManager.d.ts.map +0 -1
- package/build/auth/authManager.js +0 -173
- package/build/auth/authManager.js.map +0 -1
- package/build/auth/authMiddleware.d.ts +0 -16
- package/build/auth/authMiddleware.d.ts.map +0 -1
- package/build/auth/authMiddleware.js +0 -45
- package/build/auth/authMiddleware.js.map +0 -1
- package/build/auth/sessionManager.d.ts +0 -197
- package/build/auth/sessionManager.d.ts.map +0 -1
- package/build/auth/sessionManager.js +0 -408
- package/build/auth/sessionManager.js.map +0 -1
- package/build/config/configManager.d.ts.map +0 -1
- package/build/config/configManager.js.map +0 -1
- package/build/core/server/serverConfig.d.ts.map +0 -1
- package/build/core/server/serverConfig.js +0 -117
- package/build/core/server/serverConfig.js.map +0 -1
- package/build/transport/config.d.ts +0 -7
- package/build/transport/config.d.ts.map +0 -1
- package/build/transport/config.js +0 -90
- package/build/transport/config.js.map +0 -1
- package/build/transport/http/errorHandler.d.ts.map +0 -1
- package/build/transport/http/errorHandler.js.map +0 -1
- package/build/transport/http/middleware/loggingMiddleware.d.ts.map +0 -1
- package/build/transport/http/middleware/loggingMiddleware.js.map +0 -1
- package/build/utils/tagsExtractor.d.ts.map +0 -1
- package/build/utils/tagsExtractor.js.map +0 -1
- /package/build/transport/http/{errorHandler.d.ts → middlewares/errorHandler.d.ts} +0 -0
- /package/build/{utils → transport/http/middlewares}/tagsExtractor.d.ts +0 -0
- /package/build/{utils → transport/http/middlewares}/tagsExtractor.js +0 -0
|
@@ -1,408 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import logger from '../logger/logger.js';
|
|
5
|
-
import { AUTH_CONFIG, getGlobalConfigDir } from '../constants.js';
|
|
6
|
-
/**
|
|
7
|
-
* SessionManager handles file-based session storage with automatic cleanup.
|
|
8
|
-
*
|
|
9
|
-
* This class manages OAuth 2.1 sessions and authorization codes using
|
|
10
|
-
* the local filesystem. It provides automatic cleanup of expired sessions
|
|
11
|
-
* and supports configurable storage locations.
|
|
12
|
-
*
|
|
13
|
-
* Features:
|
|
14
|
-
* - File-based session storage with JSON format
|
|
15
|
-
* - Automatic cleanup of expired sessions every 5 minutes
|
|
16
|
-
* - Prefixed identifiers for easy debugging
|
|
17
|
-
* - Configurable storage directory
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const sessionManager = new SessionManager('/custom/path');
|
|
22
|
-
* const sessionId = sessionManager.createSession('client-123', 'resource', 3600000);
|
|
23
|
-
* const session = sessionManager.getSession(sessionId);
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export class SessionManager {
|
|
27
|
-
sessionStoragePath;
|
|
28
|
-
cleanupInterval = null;
|
|
29
|
-
/**
|
|
30
|
-
* Creates a new SessionManager instance.
|
|
31
|
-
*
|
|
32
|
-
* Initializes the session storage directory and starts the automatic
|
|
33
|
-
* cleanup process for expired sessions.
|
|
34
|
-
*
|
|
35
|
-
* @param sessionStoragePath - Optional custom path for session storage
|
|
36
|
-
*/
|
|
37
|
-
constructor(sessionStoragePath) {
|
|
38
|
-
this.sessionStoragePath = sessionStoragePath || path.join(getGlobalConfigDir(), AUTH_CONFIG.SESSION_STORAGE_DIR);
|
|
39
|
-
this.ensureSessionDirectory();
|
|
40
|
-
this.startCleanupInterval();
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Ensures the session storage directory exists.
|
|
44
|
-
*
|
|
45
|
-
* Creates the directory structure if it doesn't exist, including
|
|
46
|
-
* parent directories as needed.
|
|
47
|
-
*
|
|
48
|
-
* @throws Error if directory creation fails
|
|
49
|
-
*/
|
|
50
|
-
ensureSessionDirectory() {
|
|
51
|
-
try {
|
|
52
|
-
if (!fs.existsSync(this.sessionStoragePath)) {
|
|
53
|
-
fs.mkdirSync(this.sessionStoragePath, { recursive: true });
|
|
54
|
-
logger.info(`Created session storage directory: ${this.sessionStoragePath}`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
logger.error(`Failed to create session directory: ${error}`);
|
|
59
|
-
throw error;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Gets the file path for a session ID.
|
|
64
|
-
*
|
|
65
|
-
* @param sessionId - The session identifier
|
|
66
|
-
* @returns Full file path for the session file
|
|
67
|
-
*/
|
|
68
|
-
getSessionFilePath(sessionId) {
|
|
69
|
-
// Validate session ID format first
|
|
70
|
-
if (!this.isValidId(sessionId)) {
|
|
71
|
-
throw new Error('Invalid session ID format');
|
|
72
|
-
}
|
|
73
|
-
const fileName = `${AUTH_CONFIG.SESSION_FILE_PREFIX}${sessionId}${AUTH_CONFIG.SESSION_FILE_EXTENSION}`;
|
|
74
|
-
const filePath = path.resolve(this.sessionStoragePath, fileName);
|
|
75
|
-
// Additional security check: ensure resolved path is within session storage
|
|
76
|
-
const normalizedStoragePath = path.resolve(this.sessionStoragePath);
|
|
77
|
-
const normalizedFilePath = path.resolve(filePath);
|
|
78
|
-
if (!normalizedFilePath.startsWith(normalizedStoragePath + path.sep)) {
|
|
79
|
-
throw new Error('Invalid session file path: outside storage directory');
|
|
80
|
-
}
|
|
81
|
-
return filePath;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Gets the file path for an authorization code.
|
|
85
|
-
*
|
|
86
|
-
* @param code - The authorization code
|
|
87
|
-
* @returns Full file path for the auth code file
|
|
88
|
-
*/
|
|
89
|
-
getAuthCodeFilePath(code) {
|
|
90
|
-
// Validate auth code format first
|
|
91
|
-
if (!this.isValidId(code)) {
|
|
92
|
-
throw new Error('Invalid authorization code format');
|
|
93
|
-
}
|
|
94
|
-
const fileName = `auth_code_${code}${AUTH_CONFIG.SESSION_FILE_EXTENSION}`;
|
|
95
|
-
const filePath = path.resolve(this.sessionStoragePath, fileName);
|
|
96
|
-
// Additional security check: ensure resolved path is within session storage
|
|
97
|
-
const normalizedStoragePath = path.resolve(this.sessionStoragePath);
|
|
98
|
-
const normalizedFilePath = path.resolve(filePath);
|
|
99
|
-
if (!normalizedFilePath.startsWith(normalizedStoragePath + path.sep)) {
|
|
100
|
-
throw new Error('Invalid authorization code path: outside storage directory');
|
|
101
|
-
}
|
|
102
|
-
return filePath;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Utility to validate session IDs and auth codes for proper format and security.
|
|
106
|
-
* Ensures proper format with prefix and UUID structure for security.
|
|
107
|
-
* @param id - The session ID or auth code to validate
|
|
108
|
-
* @returns true if valid, false otherwise
|
|
109
|
-
*/
|
|
110
|
-
isValidId(id) {
|
|
111
|
-
// Check minimum length (prefix + UUID)
|
|
112
|
-
if (!id || id.length < 40) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
// Check for valid prefix
|
|
116
|
-
const hasValidPrefix = id.startsWith(AUTH_CONFIG.PREFIXES.SESSION_ID) || id.startsWith(AUTH_CONFIG.PREFIXES.AUTH_CODE);
|
|
117
|
-
if (!hasValidPrefix) {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
// Validate the UUID portion (after prefix)
|
|
121
|
-
const uuidPart = id.startsWith(AUTH_CONFIG.PREFIXES.SESSION_ID)
|
|
122
|
-
? id.substring(AUTH_CONFIG.PREFIXES.SESSION_ID.length)
|
|
123
|
-
: id.substring(AUTH_CONFIG.PREFIXES.AUTH_CODE.length);
|
|
124
|
-
// UUID v4 format: 8-4-4-4-12 hexadecimal digits with hyphens
|
|
125
|
-
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
126
|
-
return uuidRegex.test(uuidPart);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Creates a new session with the specified parameters.
|
|
130
|
-
*
|
|
131
|
-
* Generates a unique session ID with prefix, stores the session data
|
|
132
|
-
* as a JSON file, and returns the session identifier.
|
|
133
|
-
*
|
|
134
|
-
* @param clientId - The client identifier
|
|
135
|
-
* @param resource - The resource this session can access
|
|
136
|
-
* @param ttlMs - Time-to-live in milliseconds
|
|
137
|
-
* @returns The generated session ID with prefix
|
|
138
|
-
* @throws Error if session creation fails
|
|
139
|
-
*/
|
|
140
|
-
createSession(clientId, resource, ttlMs) {
|
|
141
|
-
const sessionId = AUTH_CONFIG.PREFIXES.SESSION_ID + randomUUID();
|
|
142
|
-
const sessionData = {
|
|
143
|
-
clientId,
|
|
144
|
-
resource,
|
|
145
|
-
expires: Date.now() + ttlMs,
|
|
146
|
-
createdAt: Date.now(),
|
|
147
|
-
};
|
|
148
|
-
try {
|
|
149
|
-
const filePath = this.getSessionFilePath(sessionId);
|
|
150
|
-
fs.writeFileSync(filePath, JSON.stringify(sessionData, null, 2));
|
|
151
|
-
logger.info(`Created session: ${sessionId} for client: ${clientId}`);
|
|
152
|
-
return sessionId;
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
logger.error(`Failed to create session: ${error}`);
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Retrieves session data by session ID.
|
|
161
|
-
*
|
|
162
|
-
* Reads the session file and validates expiration. If the session
|
|
163
|
-
* is expired, it's automatically deleted and null is returned.
|
|
164
|
-
*
|
|
165
|
-
* @param sessionId - The session identifier to retrieve
|
|
166
|
-
* @returns Session data if valid and not expired, null otherwise
|
|
167
|
-
*/
|
|
168
|
-
getSession(sessionId) {
|
|
169
|
-
if (!this.isValidId(sessionId)) {
|
|
170
|
-
logger.warn(`Rejected getSession with invalid sessionId: ${sessionId}`);
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
const filePath = this.getSessionFilePath(sessionId);
|
|
175
|
-
if (!fs.existsSync(filePath)) {
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
const data = fs.readFileSync(filePath, 'utf8');
|
|
179
|
-
const sessionData = JSON.parse(data);
|
|
180
|
-
if (sessionData.expires < Date.now()) {
|
|
181
|
-
this.deleteSession(sessionId);
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
return sessionData;
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
logger.error(`Failed to read session ${sessionId}: ${error}`);
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Deletes a session by session ID.
|
|
193
|
-
*
|
|
194
|
-
* Removes the session file from the filesystem if it exists.
|
|
195
|
-
*
|
|
196
|
-
* @param sessionId - The session identifier to delete
|
|
197
|
-
* @returns True if session was deleted, false if it didn't exist
|
|
198
|
-
*/
|
|
199
|
-
deleteSession(sessionId) {
|
|
200
|
-
if (!this.isValidId(sessionId)) {
|
|
201
|
-
logger.warn(`Rejected deleteSession with invalid sessionId: ${sessionId}`);
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
try {
|
|
205
|
-
const filePath = this.getSessionFilePath(sessionId);
|
|
206
|
-
if (fs.existsSync(filePath)) {
|
|
207
|
-
fs.unlinkSync(filePath);
|
|
208
|
-
logger.info(`Deleted session: ${sessionId}`);
|
|
209
|
-
return true;
|
|
210
|
-
}
|
|
211
|
-
return false;
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
logger.error(`Failed to delete session ${sessionId}: ${error}`);
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Creates a new authorization code for OAuth 2.1 flow.
|
|
220
|
-
*
|
|
221
|
-
* Generates a unique authorization code with prefix, stores the code data
|
|
222
|
-
* as a JSON file, and returns the code identifier.
|
|
223
|
-
*
|
|
224
|
-
* @param clientId - The client identifier
|
|
225
|
-
* @param redirectUri - The redirect URI for this code
|
|
226
|
-
* @param resource - The resource this code grants access to
|
|
227
|
-
* @param ttlMs - Time-to-live in milliseconds
|
|
228
|
-
* @returns The generated authorization code with prefix
|
|
229
|
-
* @throws Error if code creation fails
|
|
230
|
-
*/
|
|
231
|
-
createAuthCode(clientId, redirectUri, resource, ttlMs) {
|
|
232
|
-
const code = AUTH_CONFIG.PREFIXES.AUTH_CODE + randomUUID();
|
|
233
|
-
const authCodeData = {
|
|
234
|
-
clientId,
|
|
235
|
-
redirectUri,
|
|
236
|
-
resource,
|
|
237
|
-
expires: Date.now() + ttlMs,
|
|
238
|
-
createdAt: Date.now(),
|
|
239
|
-
};
|
|
240
|
-
try {
|
|
241
|
-
const filePath = this.getAuthCodeFilePath(code);
|
|
242
|
-
fs.writeFileSync(filePath, JSON.stringify(authCodeData, null, 2));
|
|
243
|
-
logger.info(`Created auth code: ${code} for client: ${clientId}`);
|
|
244
|
-
return code;
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
logger.error(`Failed to create auth code: ${error}`);
|
|
248
|
-
throw error;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Retrieves authorization code data by code.
|
|
253
|
-
*
|
|
254
|
-
* Reads the auth code file and validates expiration. If the code
|
|
255
|
-
* is expired, it's automatically deleted and null is returned.
|
|
256
|
-
*
|
|
257
|
-
* @param code - The authorization code to retrieve
|
|
258
|
-
* @returns Auth code data if valid and not expired, null otherwise
|
|
259
|
-
*/
|
|
260
|
-
getAuthCode(code) {
|
|
261
|
-
if (!this.isValidId(code)) {
|
|
262
|
-
logger.warn(`Rejected getAuthCode with invalid code: ${code}`);
|
|
263
|
-
return null;
|
|
264
|
-
}
|
|
265
|
-
try {
|
|
266
|
-
const filePath = this.getAuthCodeFilePath(code);
|
|
267
|
-
if (!fs.existsSync(filePath)) {
|
|
268
|
-
return null;
|
|
269
|
-
}
|
|
270
|
-
const data = fs.readFileSync(filePath, 'utf8');
|
|
271
|
-
const authCodeData = JSON.parse(data);
|
|
272
|
-
if (authCodeData.expires < Date.now()) {
|
|
273
|
-
this.deleteAuthCode(code);
|
|
274
|
-
return null;
|
|
275
|
-
}
|
|
276
|
-
return authCodeData;
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
logger.error(`Failed to read auth code ${code}: ${error}`);
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Deletes an authorization code by code.
|
|
285
|
-
*
|
|
286
|
-
* Removes the auth code file from the filesystem if it exists.
|
|
287
|
-
*
|
|
288
|
-
* @param code - The authorization code to delete
|
|
289
|
-
* @returns True if code was deleted, false if it didn't exist
|
|
290
|
-
*/
|
|
291
|
-
deleteAuthCode(code) {
|
|
292
|
-
if (!this.isValidId(code)) {
|
|
293
|
-
logger.warn(`Rejected deleteAuthCode with invalid code: ${code}`);
|
|
294
|
-
return false;
|
|
295
|
-
}
|
|
296
|
-
try {
|
|
297
|
-
const filePath = this.getAuthCodeFilePath(code);
|
|
298
|
-
if (fs.existsSync(filePath)) {
|
|
299
|
-
fs.unlinkSync(filePath);
|
|
300
|
-
logger.info(`Deleted auth code: ${code}`);
|
|
301
|
-
return true;
|
|
302
|
-
}
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
logger.error(`Failed to delete auth code ${code}: ${error}`);
|
|
307
|
-
return false;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Starts the automatic cleanup interval for expired sessions.
|
|
312
|
-
*
|
|
313
|
-
* Runs cleanup every 5 minutes to remove expired sessions and
|
|
314
|
-
* authorization codes from the filesystem.
|
|
315
|
-
*/
|
|
316
|
-
startCleanupInterval() {
|
|
317
|
-
// Clean up expired sessions every 5 minutes
|
|
318
|
-
this.cleanupInterval = setInterval(() => {
|
|
319
|
-
this.cleanupExpiredSessions();
|
|
320
|
-
}, 5 * 60 * 1000);
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* Cleans up expired sessions and authorization codes.
|
|
324
|
-
*
|
|
325
|
-
* Scans the session storage directory and removes all expired
|
|
326
|
-
* session and auth code files. Also handles corrupted files
|
|
327
|
-
* by removing them to prevent future errors.
|
|
328
|
-
*/
|
|
329
|
-
cleanupExpiredSessions() {
|
|
330
|
-
try {
|
|
331
|
-
const files = fs.readdirSync(this.sessionStoragePath);
|
|
332
|
-
let cleanedCount = 0;
|
|
333
|
-
for (const file of files) {
|
|
334
|
-
if (file.endsWith(AUTH_CONFIG.SESSION_FILE_EXTENSION)) {
|
|
335
|
-
const filePath = path.join(this.sessionStoragePath, file);
|
|
336
|
-
try {
|
|
337
|
-
const data = fs.readFileSync(filePath, 'utf8');
|
|
338
|
-
const sessionData = JSON.parse(data);
|
|
339
|
-
if (sessionData.expires < Date.now()) {
|
|
340
|
-
fs.unlinkSync(filePath);
|
|
341
|
-
cleanedCount++;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
catch (error) {
|
|
345
|
-
logger.warn(`Failed to process session file ${file}: ${error}`);
|
|
346
|
-
// Remove corrupted files
|
|
347
|
-
try {
|
|
348
|
-
fs.unlinkSync(filePath);
|
|
349
|
-
cleanedCount++;
|
|
350
|
-
}
|
|
351
|
-
catch (unlinkError) {
|
|
352
|
-
logger.error(`Failed to remove corrupted file ${file}: ${unlinkError}`);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
if (cleanedCount > 0) {
|
|
358
|
-
logger.info(`Cleaned up ${cleanedCount} expired sessions`);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
catch (error) {
|
|
362
|
-
logger.error(`Failed to cleanup expired sessions: ${error}`);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Performs graceful shutdown of the SessionManager.
|
|
367
|
-
*
|
|
368
|
-
* Stops the cleanup interval to prevent memory leaks and
|
|
369
|
-
* ensures proper resource cleanup.
|
|
370
|
-
*/
|
|
371
|
-
shutdown() {
|
|
372
|
-
if (this.cleanupInterval) {
|
|
373
|
-
clearInterval(this.cleanupInterval);
|
|
374
|
-
this.cleanupInterval = null;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Creates a new session with a custom ID (no prefix).
|
|
379
|
-
* Used for access tokens where the token ID is generated separately.
|
|
380
|
-
*
|
|
381
|
-
* @param tokenId - The raw UUID to use for the session (no prefix)
|
|
382
|
-
* @param clientId - The client identifier
|
|
383
|
-
* @param resource - The resource this session can access
|
|
384
|
-
* @param ttlMs - Time-to-live in milliseconds
|
|
385
|
-
* @returns The generated session ID with prefix
|
|
386
|
-
* @throws Error if session creation fails
|
|
387
|
-
*/
|
|
388
|
-
createSessionWithId(tokenId, clientId, resource, ttlMs) {
|
|
389
|
-
const sessionId = AUTH_CONFIG.PREFIXES.SESSION_ID + tokenId;
|
|
390
|
-
const sessionData = {
|
|
391
|
-
clientId,
|
|
392
|
-
resource,
|
|
393
|
-
expires: Date.now() + ttlMs,
|
|
394
|
-
createdAt: Date.now(),
|
|
395
|
-
};
|
|
396
|
-
try {
|
|
397
|
-
const filePath = this.getSessionFilePath(sessionId);
|
|
398
|
-
fs.writeFileSync(filePath, JSON.stringify(sessionData, null, 2));
|
|
399
|
-
logger.info(`Created session: ${sessionId} for client: ${clientId}`);
|
|
400
|
-
return sessionId;
|
|
401
|
-
}
|
|
402
|
-
catch (error) {
|
|
403
|
-
logger.error(`Failed to create session: ${error}`);
|
|
404
|
-
throw error;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
//# sourceMappingURL=sessionManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../src/auth/sessionManager.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,wBAAwB,CAAC;AAEzD;;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;IAC/B,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAe;IAE/C;;;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;IAc3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serverConfig.d.ts","sourceRoot":"","sources":["../../../src/core/server/serverConfig.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAe;IAE7B;;;;;OAKG;IACH,OAAO;IAWP;;;;;;;OAOG;WACW,WAAW,IAAI,mBAAmB;IAOhD;;;;;;;OAOG;IACI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAOzD;;;;;;;OAOG;IACI,SAAS,IAAI,YAAY;IAIhC;;;;OAIG;IACI,aAAa,IAAI,OAAO;IAI/B;;;;OAIG;IACI,oBAAoB,IAAI,MAAM;IAIrC;;;;OAIG;IACI,qBAAqB,IAAI,MAAM,GAAG,SAAS;IAIlD;;;;OAIG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;;;OAIG;IACI,kBAAkB,IAAI,MAAM;CAGpC"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { AUTH_CONFIG } from '../../constants.js';
|
|
2
|
-
/**
|
|
3
|
-
* ServerConfigManager manages server-specific configuration settings.
|
|
4
|
-
*
|
|
5
|
-
* This singleton class handles authentication and session configuration
|
|
6
|
-
* that differs from the main MCP server configuration. It provides
|
|
7
|
-
* centralized access to server settings with default values and
|
|
8
|
-
* runtime configuration updates.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const configManager = ServerConfigManager.getInstance();
|
|
13
|
-
* configManager.updateConfig({
|
|
14
|
-
* auth: { enabled: true, sessionTtlMinutes: 60 }
|
|
15
|
-
* });
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export class ServerConfigManager {
|
|
19
|
-
static instance;
|
|
20
|
-
config;
|
|
21
|
-
/**
|
|
22
|
-
* Private constructor to enforce singleton pattern.
|
|
23
|
-
*
|
|
24
|
-
* Initializes the configuration with default values from constants.
|
|
25
|
-
* Should not be called directly - use getInstance() instead.
|
|
26
|
-
*/
|
|
27
|
-
constructor() {
|
|
28
|
-
this.config = {
|
|
29
|
-
auth: {
|
|
30
|
-
enabled: AUTH_CONFIG.DEFAULT_ENABLED,
|
|
31
|
-
sessionTtlMinutes: AUTH_CONFIG.DEFAULT_SESSION_TTL_MINUTES,
|
|
32
|
-
oauthCodeTtlMs: AUTH_CONFIG.DEFAULT_OAUTH_CODE_TTL_MS,
|
|
33
|
-
oauthTokenTtlMs: AUTH_CONFIG.DEFAULT_OAUTH_TOKEN_TTL_MS,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Gets the singleton instance of ServerConfigManager.
|
|
39
|
-
*
|
|
40
|
-
* Creates a new instance if one doesn't exist, otherwise returns
|
|
41
|
-
* the existing instance to ensure configuration consistency.
|
|
42
|
-
*
|
|
43
|
-
* @returns The singleton ServerConfigManager instance
|
|
44
|
-
*/
|
|
45
|
-
static getInstance() {
|
|
46
|
-
if (!ServerConfigManager.instance) {
|
|
47
|
-
ServerConfigManager.instance = new ServerConfigManager();
|
|
48
|
-
}
|
|
49
|
-
return ServerConfigManager.instance;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Updates the server configuration with new values.
|
|
53
|
-
*
|
|
54
|
-
* Merges the provided updates with existing configuration, allowing
|
|
55
|
-
* partial updates while preserving other settings.
|
|
56
|
-
*
|
|
57
|
-
* @param updates - Partial configuration object with new values
|
|
58
|
-
*/
|
|
59
|
-
updateConfig(updates) {
|
|
60
|
-
this.config = { ...this.config, ...updates };
|
|
61
|
-
if (updates.auth) {
|
|
62
|
-
this.config.auth = { ...this.config.auth, ...updates.auth };
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Gets a copy of the current server configuration.
|
|
67
|
-
*
|
|
68
|
-
* Returns a deep copy to prevent external modification of the
|
|
69
|
-
* internal configuration state.
|
|
70
|
-
*
|
|
71
|
-
* @returns Current server configuration
|
|
72
|
-
*/
|
|
73
|
-
getConfig() {
|
|
74
|
-
return { ...this.config };
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Checks if authentication is currently enabled.
|
|
78
|
-
*
|
|
79
|
-
* @returns True if OAuth 2.1 authentication is enabled, false otherwise
|
|
80
|
-
*/
|
|
81
|
-
isAuthEnabled() {
|
|
82
|
-
return this.config.auth.enabled;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Gets the session time-to-live in minutes.
|
|
86
|
-
*
|
|
87
|
-
* @returns Session TTL in minutes
|
|
88
|
-
*/
|
|
89
|
-
getSessionTtlMinutes() {
|
|
90
|
-
return this.config.auth.sessionTtlMinutes;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Gets the custom session storage path if configured.
|
|
94
|
-
*
|
|
95
|
-
* @returns Custom session storage path or undefined if using default
|
|
96
|
-
*/
|
|
97
|
-
getSessionStoragePath() {
|
|
98
|
-
return this.config.auth.sessionStoragePath;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Gets the OAuth authorization code time-to-live in milliseconds.
|
|
102
|
-
*
|
|
103
|
-
* @returns OAuth code TTL in milliseconds
|
|
104
|
-
*/
|
|
105
|
-
getOAuthCodeTtlMs() {
|
|
106
|
-
return this.config.auth.oauthCodeTtlMs;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Gets the OAuth access token time-to-live in milliseconds.
|
|
110
|
-
*
|
|
111
|
-
* @returns OAuth token TTL in milliseconds
|
|
112
|
-
*/
|
|
113
|
-
getOAuthTokenTtlMs() {
|
|
114
|
-
return this.config.auth.oauthTokenTtlMs;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=serverConfig.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serverConfig.js","sourceRoot":"","sources":["../../../src/core/server/serverConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAkBjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,CAAsB;IACrC,MAAM,CAAe;IAE7B;;;;;OAKG;IACH;QACE,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE;gBACJ,OAAO,EAAE,WAAW,CAAC,eAAe;gBACpC,iBAAiB,EAAE,WAAW,CAAC,2BAA2B;gBAC1D,cAAc,EAAE,WAAW,CAAC,yBAAyB;gBACrD,eAAe,EAAE,WAAW,CAAC,0BAA0B;aACxD;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACI,YAAY,CAAC,OAA8B;QAChD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACI,SAAS;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,aAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,oBAAoB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACI,qBAAqB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACI,iBAAiB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,kBAAkB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { MCPServerParams, EnhancedTransport } from '../core/types/index.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=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/transport/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E;;;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 '../core/types/index.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=config.js.map
|