@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.
Files changed (183) hide show
  1. package/README.md +22 -37
  2. package/build/auth/sdkOAuthClientProvider.d.ts +93 -0
  3. package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -0
  4. package/build/auth/sdkOAuthClientProvider.js +204 -0
  5. package/build/auth/sdkOAuthClientProvider.js.map +1 -0
  6. package/build/auth/sdkOAuthServerProvider.d.ts +64 -0
  7. package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -0
  8. package/build/auth/sdkOAuthServerProvider.js +359 -0
  9. package/build/auth/sdkOAuthServerProvider.js.map +1 -0
  10. package/build/auth/sessionTypes.d.ts +38 -0
  11. package/build/auth/sessionTypes.d.ts.map +1 -0
  12. package/build/auth/sessionTypes.js +3 -0
  13. package/build/auth/sessionTypes.js.map +1 -0
  14. package/build/auth/storage/authCodeRepository.d.ts +25 -0
  15. package/build/auth/storage/authCodeRepository.d.ts.map +1 -0
  16. package/build/auth/storage/authCodeRepository.js +50 -0
  17. package/build/auth/storage/authCodeRepository.js.map +1 -0
  18. package/build/auth/storage/authRequestRepository.d.ts +25 -0
  19. package/build/auth/storage/authRequestRepository.d.ts.map +1 -0
  20. package/build/auth/storage/authRequestRepository.js +51 -0
  21. package/build/auth/storage/authRequestRepository.js.map +1 -0
  22. package/build/auth/storage/clientDataRepository.d.ts +25 -0
  23. package/build/auth/storage/clientDataRepository.d.ts.map +1 -0
  24. package/build/auth/storage/clientDataRepository.js +45 -0
  25. package/build/auth/storage/clientDataRepository.js.map +1 -0
  26. package/build/auth/storage/clientSessionRepository.d.ts +77 -0
  27. package/build/auth/storage/clientSessionRepository.d.ts.map +1 -0
  28. package/build/auth/storage/clientSessionRepository.js +120 -0
  29. package/build/auth/storage/clientSessionRepository.js.map +1 -0
  30. package/build/auth/storage/fileStorageService.d.ts +68 -0
  31. package/build/auth/storage/fileStorageService.d.ts.map +1 -0
  32. package/build/auth/storage/fileStorageService.js +262 -0
  33. package/build/auth/storage/fileStorageService.js.map +1 -0
  34. package/build/auth/storage/oauthStorageService.d.ts +57 -0
  35. package/build/auth/storage/oauthStorageService.d.ts.map +1 -0
  36. package/build/auth/storage/oauthStorageService.js +131 -0
  37. package/build/auth/storage/oauthStorageService.js.map +1 -0
  38. package/build/auth/storage/sessionRepository.d.ts +29 -0
  39. package/build/auth/storage/sessionRepository.d.ts.map +1 -0
  40. package/build/auth/storage/sessionRepository.js +64 -0
  41. package/build/auth/storage/sessionRepository.js.map +1 -0
  42. package/build/capabilities/capabilityManager.d.ts +2 -2
  43. package/build/capabilities/capabilityManager.d.ts.map +1 -1
  44. package/build/capabilities/capabilityManager.js +1 -1
  45. package/build/capabilities/capabilityManager.js.map +1 -1
  46. package/build/config/{configManager.d.ts → mcpConfigManager.d.ts} +11 -6
  47. package/build/config/mcpConfigManager.d.ts.map +1 -0
  48. package/build/config/{configManager.js → mcpConfigManager.js} +26 -8
  49. package/build/config/mcpConfigManager.js.map +1 -0
  50. package/build/constants.d.ts +51 -14
  51. package/build/constants.d.ts.map +1 -1
  52. package/build/constants.js +61 -17
  53. package/build/constants.js.map +1 -1
  54. package/build/core/client/clientManager.d.ts +14 -6
  55. package/build/core/client/clientManager.d.ts.map +1 -1
  56. package/build/core/client/clientManager.js +90 -28
  57. package/build/core/client/clientManager.js.map +1 -1
  58. package/build/core/server/{serverConfig.d.ts → agentConfig.d.ts} +50 -15
  59. package/build/core/server/agentConfig.d.ts.map +1 -0
  60. package/build/core/server/agentConfig.js +166 -0
  61. package/build/core/server/agentConfig.js.map +1 -0
  62. package/build/core/server/serverManager.d.ts +12 -5
  63. package/build/core/server/serverManager.d.ts.map +1 -1
  64. package/build/core/server/serverManager.js +12 -2
  65. package/build/core/server/serverManager.js.map +1 -1
  66. package/build/core/types/client.d.ts +22 -9
  67. package/build/core/types/client.d.ts.map +1 -1
  68. package/build/core/types/client.js +2 -0
  69. package/build/core/types/client.js.map +1 -1
  70. package/build/core/types/server.d.ts +3 -3
  71. package/build/core/types/server.d.ts.map +1 -1
  72. package/build/core/types/transport.d.ts +58 -0
  73. package/build/core/types/transport.d.ts.map +1 -1
  74. package/build/core/types/transport.js +10 -0
  75. package/build/core/types/transport.js.map +1 -1
  76. package/build/handlers/notificationHandlers.d.ts +3 -3
  77. package/build/handlers/notificationHandlers.d.ts.map +1 -1
  78. package/build/handlers/notificationHandlers.js +2 -2
  79. package/build/handlers/notificationHandlers.js.map +1 -1
  80. package/build/handlers/requestHandlers.d.ts +2 -2
  81. package/build/handlers/requestHandlers.d.ts.map +1 -1
  82. package/build/handlers/requestHandlers.js +4 -3
  83. package/build/handlers/requestHandlers.js.map +1 -1
  84. package/build/index.js +47 -7
  85. package/build/index.js.map +1 -1
  86. package/build/{transport/http/middleware/loggingMiddleware.d.ts → logger/mcpLoggingEnhancer.d.ts} +1 -1
  87. package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -0
  88. package/build/{transport/http/middleware/loggingMiddleware.js → logger/mcpLoggingEnhancer.js} +2 -2
  89. package/build/logger/mcpLoggingEnhancer.js.map +1 -0
  90. package/build/server.js +4 -4
  91. package/build/server.js.map +1 -1
  92. package/build/services/configReloadService.d.ts +2 -2
  93. package/build/services/configReloadService.d.ts.map +1 -1
  94. package/build/services/configReloadService.js +4 -4
  95. package/build/services/configReloadService.js.map +1 -1
  96. package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -0
  97. package/build/transport/http/{errorHandler.js → middlewares/errorHandler.js} +1 -1
  98. package/build/transport/http/middlewares/errorHandler.js.map +1 -0
  99. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +39 -0
  100. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
  101. package/build/transport/http/middlewares/scopeAuthMiddleware.js +129 -0
  102. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -0
  103. package/build/transport/http/middlewares/securityMiddleware.d.ts +30 -0
  104. package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -0
  105. package/build/transport/http/middlewares/securityMiddleware.js +201 -0
  106. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -0
  107. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -0
  108. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -0
  109. package/build/transport/http/routes/oauthRoutes.d.ts +5 -11
  110. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  111. package/build/transport/http/routes/oauthRoutes.js +460 -122
  112. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  113. package/build/transport/http/routes/sseRoutes.d.ts +3 -2
  114. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  115. package/build/transport/http/routes/sseRoutes.js +10 -7
  116. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  117. package/build/transport/http/routes/streamableHttpRoutes.d.ts +3 -2
  118. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  119. package/build/transport/http/routes/streamableHttpRoutes.js +17 -10
  120. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  121. package/build/transport/http/server.d.ts +3 -2
  122. package/build/transport/http/server.d.ts.map +1 -1
  123. package/build/transport/http/server.js +58 -21
  124. package/build/transport/http/server.js.map +1 -1
  125. package/build/transport/transportFactory.d.ts +9 -0
  126. package/build/transport/transportFactory.d.ts.map +1 -0
  127. package/build/transport/transportFactory.js +148 -0
  128. package/build/transport/transportFactory.js.map +1 -0
  129. package/build/utils/clientFiltering.d.ts +4 -4
  130. package/build/utils/clientFiltering.d.ts.map +1 -1
  131. package/build/utils/clientFiltering.js +54 -19
  132. package/build/utils/clientFiltering.js.map +1 -1
  133. package/build/utils/errorHandling.d.ts +0 -12
  134. package/build/utils/errorHandling.d.ts.map +1 -1
  135. package/build/utils/errorHandling.js +1 -42
  136. package/build/utils/errorHandling.js.map +1 -1
  137. package/build/utils/pagination.d.ts +2 -2
  138. package/build/utils/pagination.d.ts.map +1 -1
  139. package/build/utils/pagination.js +4 -4
  140. package/build/utils/pagination.js.map +1 -1
  141. package/build/utils/parsing.d.ts +13 -0
  142. package/build/utils/parsing.d.ts.map +1 -0
  143. package/build/utils/parsing.js +32 -0
  144. package/build/utils/parsing.js.map +1 -0
  145. package/build/utils/sanitization.d.ts +60 -0
  146. package/build/utils/sanitization.d.ts.map +1 -0
  147. package/build/utils/sanitization.js +149 -0
  148. package/build/utils/sanitization.js.map +1 -0
  149. package/build/utils/scopeValidation.d.ts +102 -0
  150. package/build/utils/scopeValidation.d.ts.map +1 -0
  151. package/build/utils/scopeValidation.js +244 -0
  152. package/build/utils/scopeValidation.js.map +1 -0
  153. package/package.json +20 -11
  154. package/build/auth/authManager.d.ts +0 -109
  155. package/build/auth/authManager.d.ts.map +0 -1
  156. package/build/auth/authManager.js +0 -173
  157. package/build/auth/authManager.js.map +0 -1
  158. package/build/auth/authMiddleware.d.ts +0 -16
  159. package/build/auth/authMiddleware.d.ts.map +0 -1
  160. package/build/auth/authMiddleware.js +0 -45
  161. package/build/auth/authMiddleware.js.map +0 -1
  162. package/build/auth/sessionManager.d.ts +0 -197
  163. package/build/auth/sessionManager.d.ts.map +0 -1
  164. package/build/auth/sessionManager.js +0 -408
  165. package/build/auth/sessionManager.js.map +0 -1
  166. package/build/config/configManager.d.ts.map +0 -1
  167. package/build/config/configManager.js.map +0 -1
  168. package/build/core/server/serverConfig.d.ts.map +0 -1
  169. package/build/core/server/serverConfig.js +0 -117
  170. package/build/core/server/serverConfig.js.map +0 -1
  171. package/build/transport/config.d.ts +0 -7
  172. package/build/transport/config.d.ts.map +0 -1
  173. package/build/transport/config.js +0 -90
  174. package/build/transport/config.js.map +0 -1
  175. package/build/transport/http/errorHandler.d.ts.map +0 -1
  176. package/build/transport/http/errorHandler.js.map +0 -1
  177. package/build/transport/http/middleware/loggingMiddleware.d.ts.map +0 -1
  178. package/build/transport/http/middleware/loggingMiddleware.js.map +0 -1
  179. package/build/utils/tagsExtractor.d.ts.map +0 -1
  180. package/build/utils/tagsExtractor.js.map +0 -1
  181. /package/build/transport/http/{errorHandler.d.ts → middlewares/errorHandler.d.ts} +0 -0
  182. /package/build/{utils → transport/http/middlewares}/tagsExtractor.d.ts +0 -0
  183. /package/build/{utils → transport/http/middlewares}/tagsExtractor.js +0 -0
@@ -9,13 +9,13 @@ export function filterClientsByTags(clients, tags) {
9
9
  if (!tags || tags.length === 0) {
10
10
  return clients;
11
11
  }
12
- const filteredClients = {};
12
+ const filteredClients = new Map();
13
13
  let matchedClients = 0;
14
- for (const [name, clientInfo] of Object.entries(clients)) {
14
+ for (const [name, clientInfo] of clients.entries()) {
15
15
  const clientTags = clientInfo.transport.tags || [];
16
- const hasMatchingTags = tags.every((tag) => clientTags.includes(tag));
16
+ const hasMatchingTags = clientTags.some((clientTag) => tags.includes(clientTag));
17
17
  if (hasMatchingTags) {
18
- filteredClients[name] = clientInfo;
18
+ filteredClients.set(name, clientInfo);
19
19
  matchedClients++;
20
20
  }
21
21
  }
@@ -25,7 +25,7 @@ export function filterClientsByTags(clients, tags) {
25
25
  else {
26
26
  logger.debug(`Found ${matchedClients} clients matching tags: ${tags.join(', ')}`);
27
27
  }
28
- return Object.freeze(filteredClients);
28
+ return filteredClients;
29
29
  }
30
30
  /**
31
31
  * Filters clients by capabilities
@@ -34,16 +34,16 @@ export function filterClientsByTags(clients, tags) {
34
34
  * @returns Filtered record of client instances
35
35
  */
36
36
  export function filterClientsByCapabilities(clients, capabilities) {
37
- const filteredClients = {};
37
+ const filteredClients = new Map();
38
38
  let matchedClients = 0;
39
- for (const [name, clientInfo] of Object.entries(clients)) {
39
+ for (const [name, clientInfo] of clients.entries()) {
40
40
  const clientCapabilities = clientInfo.capabilities || {};
41
41
  const hasMatchingCapabilities = Object.keys(capabilities).every((capability) => {
42
42
  const clientCapability = clientCapabilities[capability];
43
43
  return clientCapability !== undefined;
44
44
  });
45
45
  if (hasMatchingCapabilities) {
46
- filteredClients[name] = clientInfo;
46
+ filteredClients.set(name, clientInfo);
47
47
  matchedClients++;
48
48
  }
49
49
  }
@@ -53,7 +53,7 @@ export function filterClientsByCapabilities(clients, capabilities) {
53
53
  else {
54
54
  logger.debug(`Found ${matchedClients} clients matching capabilities: ${JSON.stringify(capabilities)}`);
55
55
  }
56
- return Object.freeze(filteredClients);
56
+ return filteredClients;
57
57
  }
58
58
  /**
59
59
  * Filters clients by multiple criteria
@@ -62,7 +62,24 @@ export function filterClientsByCapabilities(clients, capabilities) {
62
62
  */
63
63
  export function filterClients(...filters) {
64
64
  return (clients) => {
65
- return filters.reduce((filteredClients, filter) => filter(filteredClients), clients);
65
+ logger.debug(`filterClients: Starting with ${clients.size} clients`, {
66
+ clientNames: Array.from(clients.keys()),
67
+ filterCount: filters.length,
68
+ });
69
+ const result = filters.reduce((filteredClients, filter, index) => {
70
+ const beforeCount = filteredClients.size;
71
+ const afterFiltering = filter(filteredClients);
72
+ const afterCount = afterFiltering.size;
73
+ logger.debug(`filterClients: Filter ${index} reduced clients from ${beforeCount} to ${afterCount}`, {
74
+ beforeNames: Array.from(filteredClients.keys()),
75
+ afterNames: Array.from(afterFiltering.keys()),
76
+ });
77
+ return afterFiltering;
78
+ }, clients);
79
+ logger.debug(`filterClients: Final result has ${result.size} clients`, {
80
+ finalNames: Array.from(result.keys()),
81
+ });
82
+ return result;
66
83
  };
67
84
  }
68
85
  /**
@@ -72,13 +89,22 @@ export function filterClients(...filters) {
72
89
  */
73
90
  export function byCapabilities(requiredCapabilities) {
74
91
  return (clients) => {
75
- return Object.entries(clients).reduce((filtered, [name, clientInfo]) => {
76
- const hasCapabilities = Object.keys(requiredCapabilities).every((cap) => clientInfo.capabilities && cap in clientInfo.capabilities);
92
+ const requiredCaps = Object.keys(requiredCapabilities);
93
+ logger.debug(`byCapabilities: Filtering for capabilities: ${requiredCaps.join(', ')}`);
94
+ return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
95
+ const clientCaps = clientInfo.capabilities ? Object.keys(clientInfo.capabilities) : [];
96
+ const hasCapabilities = requiredCaps.every((cap) => clientInfo.capabilities && cap in clientInfo.capabilities);
97
+ logger.debug(`byCapabilities: Client ${name}`, {
98
+ clientCapabilities: clientCaps,
99
+ requiredCapabilities: requiredCaps,
100
+ hasCapabilities,
101
+ clientCapabilitiesObject: clientInfo.capabilities,
102
+ });
77
103
  if (hasCapabilities) {
78
- filtered[name] = clientInfo;
104
+ filtered.set(name, clientInfo);
79
105
  }
80
106
  return filtered;
81
- }, {});
107
+ }, new Map());
82
108
  };
83
109
  }
84
110
  /**
@@ -88,15 +114,24 @@ export function byCapabilities(requiredCapabilities) {
88
114
  */
89
115
  export function byTags(tags) {
90
116
  return (clients) => {
91
- if (!tags || tags.length === 0)
117
+ logger.debug(`byTags: Filtering for tags: ${tags ? tags.join(', ') : 'none'}`);
118
+ if (!tags || tags.length === 0) {
119
+ logger.debug('byTags: No tags specified, returning all clients');
92
120
  return clients;
93
- return Object.entries(clients).reduce((filtered, [name, clientInfo]) => {
94
- const hasMatchingTags = tags.every((tag) => clientInfo.transport.tags?.includes(tag));
121
+ }
122
+ return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
123
+ const clientTags = clientInfo.transport.tags || [];
124
+ const hasMatchingTags = clientTags.some((clientTag) => tags.includes(clientTag));
125
+ logger.debug(`byTags: Client ${name}`, {
126
+ clientTags,
127
+ requiredTags: tags,
128
+ hasMatchingTags,
129
+ });
95
130
  if (hasMatchingTags) {
96
- filtered[name] = clientInfo;
131
+ filtered.set(name, clientInfo);
97
132
  }
98
133
  return filtered;
99
- }, {});
134
+ }, new Map());
100
135
  };
101
136
  }
102
137
  //# sourceMappingURL=clientFiltering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"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"}
@@ -48,16 +48,4 @@ export declare function formatErrorResponse(error: any): {
48
48
  message: string;
49
49
  data?: any;
50
50
  };
51
- /**
52
- * Extracts client name and resource name from a URI
53
- * Uses robust parsing to handle edge cases where separator might appear in resource names.
54
- * @param uri The URI to parse
55
- * @param separator The separator used in the URI
56
- * @returns An object with clientName and resourceName
57
- * @throws InvalidRequestError if the URI is invalid
58
- */
59
- export declare function parseUri(uri: string, separator: string): {
60
- clientName: string;
61
- resourceName: string;
62
- };
63
51
  //# sourceMappingURL=errorHandling.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAuB,MAAM,iBAAiB,CAAC;AAE9E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,EACrD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,GACnB,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAkB/B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAUjF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAE/G;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAa7F;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAyCrG"}
1
+ {"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,EAAE,EACrD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,GACnB,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAkB/B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAUjF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAE/G;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAK/D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAa7F"}
@@ -1,6 +1,6 @@
1
1
  import { ErrorCode } from '@modelcontextprotocol/sdk/types.js';
2
2
  import logger from '../logger/logger.js';
3
- import { MCPError, InvalidRequestError } from './errorTypes.js';
3
+ import { MCPError } from './errorTypes.js';
4
4
  /**
5
5
  * Wraps a function with error handling
6
6
  * @param fn The function to wrap
@@ -100,45 +100,4 @@ export function formatErrorResponse(error) {
100
100
  message: error instanceof Error ? error.message : String(error),
101
101
  };
102
102
  }
103
- /**
104
- * Extracts client name and resource name from a URI
105
- * Uses robust parsing to handle edge cases where separator might appear in resource names.
106
- * @param uri The URI to parse
107
- * @param separator The separator used in the URI
108
- * @returns An object with clientName and resourceName
109
- * @throws InvalidRequestError if the URI is invalid
110
- */
111
- export function parseUri(uri, separator) {
112
- // Validate inputs
113
- if (!uri || typeof uri !== 'string') {
114
- throw new InvalidRequestError('URI must be a non-empty string');
115
- }
116
- if (!separator || typeof separator !== 'string') {
117
- throw new InvalidRequestError('Separator must be a non-empty string');
118
- }
119
- // Find the first occurrence of the separator
120
- const separatorIndex = uri.indexOf(separator);
121
- if (separatorIndex === -1) {
122
- throw new InvalidRequestError(`Invalid URI format: missing separator '${separator}' in '${uri}'`);
123
- }
124
- if (separatorIndex === 0) {
125
- throw new InvalidRequestError(`Invalid URI format: URI cannot start with separator '${separator}'`);
126
- }
127
- if (separatorIndex === uri.length - separator.length) {
128
- throw new InvalidRequestError(`Invalid URI format: URI cannot end with separator '${separator}'`);
129
- }
130
- const clientName = uri.substring(0, separatorIndex);
131
- const resourceName = uri.substring(separatorIndex + separator.length);
132
- // Validate extracted parts
133
- if (!clientName.trim()) {
134
- throw new InvalidRequestError('Client name cannot be empty');
135
- }
136
- if (!resourceName.trim()) {
137
- throw new InvalidRequestError('Resource name cannot be empty');
138
- }
139
- return {
140
- clientName,
141
- resourceName,
142
- };
143
- }
144
103
  //# sourceMappingURL=errorHandling.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../src/utils/errorHandling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAiC,EACjC,YAAoB;IAEpB,OAAO,KAAK,EAAE,GAAG,IAAU,EAAc,EAAE;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;YAE1C,0BAA0B;YAC1B,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YAED,mCAAmC;YACnC,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,aAAa,EAAE;gBACxD,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,YAAoB;IACjE,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAqB,KAAc,EAAE,SAAoC;IACjG,OAAO,KAAK,YAAY,SAAS,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC,aAAa,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,KAAc,CAAC;IAC9B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAU;IAC5C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,aAAa;QAC7B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAChE,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
2
  import { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';
3
3
  import { Resource, ResourceTemplate, Tool, Prompt } from '@modelcontextprotocol/sdk/types.js';
4
- import { ClientInfo, Clients } from '../core/types/index.js';
4
+ import { OutboundConnection, OutboundConnections } from '../core/types/index.js';
5
5
  interface PaginationParams {
6
6
  [x: string]: unknown;
7
7
  _meta?: {
@@ -26,6 +26,6 @@ export declare function parseCursor(cursor?: string): {
26
26
  actualCursor?: string;
27
27
  };
28
28
  export declare function encodeCursor(clientName: string, nextCursor?: string): string | undefined;
29
- export declare function handlePagination<T>(clients: Clients, params: PaginationParams, callClientMethod: (client: Client, params: unknown, opts: RequestOptions) => Promise<PaginationResponse>, transformResult: (client: ClientInfo, result: PaginationResponse) => T[], enablePagination: boolean): Promise<PaginationResult<T>>;
29
+ export declare function handlePagination<T>(clients: OutboundConnections, params: PaginationParams, callClientMethod: (client: Client, params: unknown, opts: RequestOptions) => Promise<PaginationResponse>, transformResult: (client: OutboundConnection, result: PaginationResponse) => T[], enablePagination: boolean): Promise<PaginationResult<T>>;
30
30
  export {};
31
31
  //# sourceMappingURL=pagination.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,gBAAgB;IACxB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,CAAC,EACF;QACE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KAC7C,GACD,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,UAAU,gBAAgB,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CA+C1F;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,MAAM,GAAG,SAAS,CA+B5F;AAiCD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,EACxG,eAAe,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,KAAK,CAAC,EAAE,EACxE,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CA0D9B"}
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGjF,UAAU,gBAAgB;IACxB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,KAAK,CAAC,EACF;QACE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KAC7C,GACD,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,UAAU,gBAAgB,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CA+C1F;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,MAAM,GAAG,SAAS,CA+B5F;AAiCD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,EACxG,eAAe,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,KAAK,CAAC,EAAE,EAChF,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CA0D9B"}
@@ -90,21 +90,21 @@ function getNextClientCursor(currentClientName, clientNames) {
90
90
  }
91
91
  export async function handlePagination(clients, params, callClientMethod, transformResult, enablePagination) {
92
92
  const { cursor, ...clientParams } = params;
93
- const clientNames = Object.keys(clients);
93
+ const clientNames = Array.from(clients.keys());
94
94
  if (!enablePagination) {
95
- const allItems = await Promise.all(clientNames.map((clientName) => fetchAllItemsForClient(clients[clientName], clientParams, callClientMethod, transformResult)));
95
+ const allItems = await Promise.all(clientNames.map((clientName) => fetchAllItemsForClient(clients.get(clientName), clientParams, callClientMethod, transformResult)));
96
96
  return { items: allItems.flat() };
97
97
  }
98
98
  const { clientName, actualCursor } = parseCursor(cursor);
99
99
  // If cursor parsing failed or clientName is empty, start from first client
100
100
  const targetClientName = clientName || clientNames[0];
101
101
  // Validate that the target client exists
102
- const clientInfo = clients[targetClientName];
102
+ const clientInfo = clients.get(targetClientName);
103
103
  if (!clientInfo) {
104
104
  logger.warn(`Client '${targetClientName}' not found, falling back to first available client`);
105
105
  // Fallback to first available client if the target doesn't exist
106
106
  const fallbackClientName = clientNames[0];
107
- const fallbackClient = fallbackClientName ? clients[fallbackClientName] : null;
107
+ const fallbackClient = fallbackClientName ? clients.get(fallbackClientName) : null;
108
108
  if (!fallbackClient) {
109
109
  logger.warn('No clients available for pagination');
110
110
  return { items: [] };
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Extracts client name and resource name from a URI
3
+ * Uses split with limit to handle separators in resource names correctly.
4
+ * @param uri The URI to parse
5
+ * @param separator The separator used in the URI
6
+ * @returns An object with clientName and resourceName
7
+ * @throws InvalidRequestError if the URI is invalid
8
+ */
9
+ export declare function parseUri(uri: string, separator: string): {
10
+ clientName: string;
11
+ resourceName: string;
12
+ };
13
+ //# sourceMappingURL=parsing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../../src/utils/parsing.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA4BrG"}
@@ -0,0 +1,32 @@
1
+ import { InvalidRequestError } from './errorTypes.js';
2
+ /**
3
+ * Extracts client name and resource name from a URI
4
+ * Uses split with limit to handle separators in resource names correctly.
5
+ * @param uri The URI to parse
6
+ * @param separator The separator used in the URI
7
+ * @returns An object with clientName and resourceName
8
+ * @throws InvalidRequestError if the URI is invalid
9
+ */
10
+ export function parseUri(uri, separator) {
11
+ if (typeof uri !== 'string' || !uri?.trim()) {
12
+ throw new InvalidRequestError('URI must be a non-empty string');
13
+ }
14
+ if (!separator || typeof separator !== 'string') {
15
+ throw new InvalidRequestError('Separator must be a non-empty string');
16
+ }
17
+ // Split only on the first occurrence of separator
18
+ const parts = uri.split(separator, 2);
19
+ if (parts.length < 2 || !uri.includes(separator)) {
20
+ throw new InvalidRequestError(`Invalid URI format: missing separator '${separator}' in '${uri}'`);
21
+ }
22
+ const clientName = parts[0].trim();
23
+ const resourceName = uri.substring(parts[0].length + separator.length).trim();
24
+ if (!clientName) {
25
+ throw new InvalidRequestError('Client name cannot be empty');
26
+ }
27
+ if (!resourceName) {
28
+ throw new InvalidRequestError('Resource name cannot be empty');
29
+ }
30
+ return { clientName, resourceName };
31
+ }
32
+ //# sourceMappingURL=parsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing.js","sourceRoot":"","sources":["../../src/utils/parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAiB;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,mBAAmB,CAAC,gCAAgC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,mBAAmB,CAAC,sCAAsC,CAAC,CAAC;IACxE,CAAC;IAED,kDAAkD;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,mBAAmB,CAAC,0CAA0C,SAAS,SAAS,GAAG,GAAG,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,mBAAmB,CAAC,+BAA+B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Sanitization utilities for various use cases
3
+ */
4
+ /**
5
+ * HTML escape function to prevent XSS attacks
6
+ * Escapes HTML entities in user-provided strings
7
+ *
8
+ * @param unsafe - The string to escape
9
+ * @returns HTML-escaped string safe for display
10
+ */
11
+ export declare function escapeHtml(unsafe: string): string;
12
+ /**
13
+ * Sanitizes server name for use as filename by replacing special characters.
14
+ * Based on the existing implementation in clientSessionManager.ts
15
+ *
16
+ * @param serverName - The server name to sanitize
17
+ * @returns Sanitized server name safe for use as filename
18
+ */
19
+ export declare function sanitizeServerName(serverName: string): string;
20
+ /**
21
+ * Sanitizes server name for display purposes
22
+ * Similar to filename sanitization but preserves more characters for readability
23
+ *
24
+ * @param serverName - The server name to sanitize
25
+ * @returns Sanitized server name safe for display
26
+ */
27
+ export declare function sanitizeServerNameForDisplay(serverName: string): string;
28
+ /**
29
+ * Sanitizes URL parameter values to prevent injection attacks
30
+ *
31
+ * @param param - The parameter value to sanitize
32
+ * @returns URL-safe parameter value
33
+ */
34
+ export declare function sanitizeUrlParam(param: string): string;
35
+ /**
36
+ * Sanitizes error messages for safe display
37
+ * Removes potentially sensitive information and escapes HTML
38
+ *
39
+ * @param error - The error message to sanitize
40
+ * @returns Sanitized error message safe for display
41
+ */
42
+ export declare function sanitizeErrorMessage(error: string): string;
43
+ /**
44
+ * Sanitizes HTTP headers for safe logging
45
+ * Redacts sensitive authentication and authorization headers
46
+ *
47
+ * @param headers - The headers object to sanitize
48
+ * @returns Sanitized headers object safe for logging
49
+ */
50
+ export declare function sanitizeHeaders(headers: Record<string, any>): Record<string, any>;
51
+ /**
52
+ * Comprehensive sanitization for server configuration data
53
+ * Applies appropriate sanitization based on the context
54
+ *
55
+ * @param serverName - The server name to sanitize
56
+ * @param context - The context where this will be used ('filename' | 'display' | 'url' | 'html')
57
+ * @returns Sanitized server name appropriate for the context
58
+ */
59
+ export declare function sanitizeServerNameForContext(serverName: string, context: 'filename' | 'display' | 'url' | 'html'): string;
60
+ //# sourceMappingURL=sanitization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAkB7D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqBvE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAkBjF;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAC/C,MAAM,CAaR"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Sanitization utilities for various use cases
3
+ */
4
+ /**
5
+ * HTML escape function to prevent XSS attacks
6
+ * Escapes HTML entities in user-provided strings
7
+ *
8
+ * @param unsafe - The string to escape
9
+ * @returns HTML-escaped string safe for display
10
+ */
11
+ export function escapeHtml(unsafe) {
12
+ if (!unsafe)
13
+ return '';
14
+ return unsafe
15
+ .replace(/&/g, '&amp;')
16
+ .replace(/</g, '&lt;')
17
+ .replace(/>/g, '&gt;')
18
+ .replace(/"/g, '&quot;')
19
+ .replace(/'/g, '&#039;');
20
+ }
21
+ /**
22
+ * Sanitizes server name for use as filename by replacing special characters.
23
+ * Based on the existing implementation in clientSessionManager.ts
24
+ *
25
+ * @param serverName - The server name to sanitize
26
+ * @returns Sanitized server name safe for use as filename
27
+ */
28
+ export function sanitizeServerName(serverName) {
29
+ if (!serverName) {
30
+ return 'default';
31
+ }
32
+ // Replace special characters with safe equivalents
33
+ let sanitized = serverName
34
+ .replace(/[^a-zA-Z0-9_-]/g, '_') // Replace any non-alphanumeric, underscore, or hyphen with underscore
35
+ .replace(/_{2,}/g, '_') // Replace multiple consecutive underscores with single underscore
36
+ .replace(/^_+|_+$/g, '') // Remove leading/trailing underscores
37
+ .substring(0, 100); // Limit length to prevent filesystem issues
38
+ // If result is empty or only underscores, use default
39
+ if (!sanitized || sanitized.length === 0) {
40
+ return 'default';
41
+ }
42
+ return sanitized;
43
+ }
44
+ /**
45
+ * Sanitizes server name for display purposes
46
+ * Similar to filename sanitization but preserves more characters for readability
47
+ *
48
+ * @param serverName - The server name to sanitize
49
+ * @returns Sanitized server name safe for display
50
+ */
51
+ export function sanitizeServerNameForDisplay(serverName) {
52
+ if (!serverName) {
53
+ return 'default';
54
+ }
55
+ // Allow more characters for display but still escape dangerous ones
56
+ // Create regex pattern for dangerous characters (including control characters)
57
+ const controlChars = Array.from({ length: 32 }, (_, i) => String.fromCharCode(i)).join('');
58
+ const dangerousChars = new RegExp(`[<>"/\\|?*${controlChars}\x7f]`, 'g');
59
+ let sanitized = serverName
60
+ .replace(dangerousChars, '_') // Replace dangerous characters
61
+ .replace(/_{2,}/g, '_') // Replace multiple consecutive underscores with single underscore
62
+ .replace(/^_+|_+$/g, '') // Remove leading/trailing underscores
63
+ .substring(0, 200); // Longer limit for display
64
+ // If result is empty, use default
65
+ if (!sanitized || sanitized.length === 0) {
66
+ return 'default';
67
+ }
68
+ return sanitized;
69
+ }
70
+ /**
71
+ * Sanitizes URL parameter values to prevent injection attacks
72
+ *
73
+ * @param param - The parameter value to sanitize
74
+ * @returns URL-safe parameter value
75
+ */
76
+ export function sanitizeUrlParam(param) {
77
+ if (!param)
78
+ return '';
79
+ // Use built-in encodeURIComponent but also limit length
80
+ return encodeURIComponent(param).substring(0, 500);
81
+ }
82
+ /**
83
+ * Sanitizes error messages for safe display
84
+ * Removes potentially sensitive information and escapes HTML
85
+ *
86
+ * @param error - The error message to sanitize
87
+ * @returns Sanitized error message safe for display
88
+ */
89
+ export function sanitizeErrorMessage(error) {
90
+ if (!error)
91
+ return '';
92
+ // Remove common sensitive patterns - preserve original case in replacement
93
+ let sanitized = error
94
+ .replace(/(password[s]?[:\s=]+)[^\s]+/gi, (_match, prefix) => `${prefix}[REDACTED]`)
95
+ .replace(/(token[s]?[:\s=]+)[^\s]+/gi, (_match, prefix) => `${prefix}[REDACTED]`)
96
+ .replace(/(key[s]?[:\s=]+)[^\s]+/gi, (_match, prefix) => `${prefix}[REDACTED]`)
97
+ .replace(/(secret[s]?[:\s=]+)[^\s]+/gi, (_match, prefix) => `${prefix}[REDACTED]`)
98
+ .replace(/(auth[=][^\s]+)/gi, (_match, _prefix) => `auth=[REDACTED]`)
99
+ .substring(0, 1000); // Limit length
100
+ // HTML escape the result
101
+ return escapeHtml(sanitized);
102
+ }
103
+ /**
104
+ * Sanitizes HTTP headers for safe logging
105
+ * Redacts sensitive authentication and authorization headers
106
+ *
107
+ * @param headers - The headers object to sanitize
108
+ * @returns Sanitized headers object safe for logging
109
+ */
110
+ export function sanitizeHeaders(headers) {
111
+ if (!headers || typeof headers !== 'object') {
112
+ return {};
113
+ }
114
+ const sanitized = {};
115
+ const sensitiveHeaders = ['authorization', 'auth', 'x-auth-token', 'x-api-key', 'cookie', 'set-cookie'];
116
+ for (const [key, value] of Object.entries(headers)) {
117
+ const lowerKey = key.toLowerCase();
118
+ if (sensitiveHeaders.includes(lowerKey)) {
119
+ sanitized[key] = '[REDACTED]';
120
+ }
121
+ else {
122
+ sanitized[key] = value;
123
+ }
124
+ }
125
+ return sanitized;
126
+ }
127
+ /**
128
+ * Comprehensive sanitization for server configuration data
129
+ * Applies appropriate sanitization based on the context
130
+ *
131
+ * @param serverName - The server name to sanitize
132
+ * @param context - The context where this will be used ('filename' | 'display' | 'url' | 'html')
133
+ * @returns Sanitized server name appropriate for the context
134
+ */
135
+ export function sanitizeServerNameForContext(serverName, context) {
136
+ switch (context) {
137
+ case 'filename':
138
+ return sanitizeServerName(serverName);
139
+ case 'display':
140
+ return sanitizeServerNameForDisplay(serverName);
141
+ case 'url':
142
+ return sanitizeUrlParam(serverName);
143
+ case 'html':
144
+ return escapeHtml(sanitizeServerNameForDisplay(serverName));
145
+ default:
146
+ return sanitizeServerName(serverName);
147
+ }
148
+ }
149
+ //# sourceMappingURL=sanitization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitization.js","sourceRoot":"","sources":["../../src/utils/sanitization.ts"],"names":[],"mappings":"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"}