mcp4openapi 0.3.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +7 -0
  2. package/dist/src/auth/oauth-provider.d.ts +1 -0
  3. package/dist/src/auth/oauth-provider.d.ts.map +1 -1
  4. package/dist/src/auth/oauth-provider.js +17 -0
  5. package/dist/src/auth/oauth-provider.js.map +1 -1
  6. package/dist/src/core/cli-config.d.ts.map +1 -1
  7. package/dist/src/core/cli-config.js +2 -0
  8. package/dist/src/core/cli-config.js.map +1 -1
  9. package/dist/src/core/index.d.ts.map +1 -1
  10. package/dist/src/core/index.js +18 -3
  11. package/dist/src/core/index.js.map +1 -1
  12. package/dist/src/index.js +0 -0
  13. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  14. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  15. package/dist/src/profile/profile-allowlist.js +68 -0
  16. package/dist/src/profile/profile-allowlist.js.map +1 -0
  17. package/dist/src/profile/profile-registry.d.ts +5 -0
  18. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  19. package/dist/src/profile/profile-registry.js +38 -14
  20. package/dist/src/profile/profile-registry.js.map +1 -1
  21. package/dist/src/security/ssrf-validator.d.ts +31 -0
  22. package/dist/src/security/ssrf-validator.d.ts.map +1 -0
  23. package/dist/src/security/ssrf-validator.js +190 -0
  24. package/dist/src/security/ssrf-validator.js.map +1 -0
  25. package/package.json +2 -2
  26. package/profiles/gitlab/developer-profile-oauth.json +445 -81
  27. package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
  28. package/profiles/gitlab/openapi.yaml +1420 -165
  29. package/profiles/gitlab/profile-optimized-oauth.json +928 -0
  30. package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
  31. package/profiles/grafana/openapi.json +28078 -0
  32. package/profiles/grafana/profile.json +1083 -0
  33. package/profiles/grafana/profile.test.json +235 -0
  34. package/profiles/mattermost/openapi.yaml +27434 -0
  35. package/profiles/mattermost/profile.json +463 -0
  36. package/profiles/mattermost/profile.test.json +607 -0
  37. package/profiles/n8n/profile-optimized.json +1002 -364
  38. package/profiles/n8n/profile-optimized.test.json +43 -43
  39. package/dist/src/argument-normalizer.d.ts +0 -5
  40. package/dist/src/argument-normalizer.d.ts.map +0 -1
  41. package/dist/src/argument-normalizer.js +0 -61
  42. package/dist/src/argument-normalizer.js.map +0 -1
  43. package/dist/src/cli-config.d.ts +0 -9
  44. package/dist/src/cli-config.d.ts.map +0 -1
  45. package/dist/src/cli-config.js +0 -111
  46. package/dist/src/cli-config.js.map +0 -1
  47. package/dist/src/composite-executor.d.ts +0 -77
  48. package/dist/src/composite-executor.d.ts.map +0 -1
  49. package/dist/src/composite-executor.js +0 -193
  50. package/dist/src/composite-executor.js.map +0 -1
  51. package/dist/src/constants.d.ts +0 -85
  52. package/dist/src/constants.d.ts.map +0 -1
  53. package/dist/src/constants.js +0 -85
  54. package/dist/src/constants.js.map +0 -1
  55. package/dist/src/dag-executor.d.ts +0 -49
  56. package/dist/src/dag-executor.d.ts.map +0 -1
  57. package/dist/src/dag-executor.js +0 -138
  58. package/dist/src/dag-executor.js.map +0 -1
  59. package/dist/src/errors.d.ts +0 -59
  60. package/dist/src/errors.d.ts.map +0 -1
  61. package/dist/src/errors.js +0 -119
  62. package/dist/src/errors.js.map +0 -1
  63. package/dist/src/filtering.d.ts +0 -19
  64. package/dist/src/filtering.d.ts.map +0 -1
  65. package/dist/src/filtering.js +0 -292
  66. package/dist/src/filtering.js.map +0 -1
  67. package/dist/src/http-client-factory.d.ts +0 -62
  68. package/dist/src/http-client-factory.d.ts.map +0 -1
  69. package/dist/src/http-client-factory.js +0 -133
  70. package/dist/src/http-client-factory.js.map +0 -1
  71. package/dist/src/http-transport-config.d.ts +0 -6
  72. package/dist/src/http-transport-config.d.ts.map +0 -1
  73. package/dist/src/http-transport-config.js +0 -47
  74. package/dist/src/http-transport-config.js.map +0 -1
  75. package/dist/src/http-transport.d.ts +0 -316
  76. package/dist/src/http-transport.d.ts.map +0 -1
  77. package/dist/src/http-transport.js +0 -2412
  78. package/dist/src/http-transport.js.map +0 -1
  79. package/dist/src/interceptors.d.ts +0 -116
  80. package/dist/src/interceptors.d.ts.map +0 -1
  81. package/dist/src/interceptors.js +0 -392
  82. package/dist/src/interceptors.js.map +0 -1
  83. package/dist/src/jsonrpc-validator.d.ts +0 -27
  84. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  85. package/dist/src/jsonrpc-validator.js +0 -58
  86. package/dist/src/jsonrpc-validator.js.map +0 -1
  87. package/dist/src/logger.d.ts +0 -59
  88. package/dist/src/logger.d.ts.map +0 -1
  89. package/dist/src/logger.js +0 -177
  90. package/dist/src/logger.js.map +0 -1
  91. package/dist/src/mcp-server-manager.d.ts +0 -20
  92. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  93. package/dist/src/mcp-server-manager.js +0 -38
  94. package/dist/src/mcp-server-manager.js.map +0 -1
  95. package/dist/src/mcp-server.d.ts +0 -203
  96. package/dist/src/mcp-server.d.ts.map +0 -1
  97. package/dist/src/mcp-server.js +0 -1369
  98. package/dist/src/mcp-server.js.map +0 -1
  99. package/dist/src/metrics.d.ts +0 -97
  100. package/dist/src/metrics.d.ts.map +0 -1
  101. package/dist/src/metrics.js +0 -273
  102. package/dist/src/metrics.js.map +0 -1
  103. package/dist/src/naming-warnings.d.ts +0 -23
  104. package/dist/src/naming-warnings.d.ts.map +0 -1
  105. package/dist/src/naming-warnings.js +0 -83
  106. package/dist/src/naming-warnings.js.map +0 -1
  107. package/dist/src/naming.d.ts +0 -58
  108. package/dist/src/naming.d.ts.map +0 -1
  109. package/dist/src/naming.js +0 -510
  110. package/dist/src/naming.js.map +0 -1
  111. package/dist/src/oauth-provider.d.ts +0 -131
  112. package/dist/src/oauth-provider.d.ts.map +0 -1
  113. package/dist/src/oauth-provider.js +0 -836
  114. package/dist/src/oauth-provider.js.map +0 -1
  115. package/dist/src/openapi-parser.d.ts +0 -70
  116. package/dist/src/openapi-parser.d.ts.map +0 -1
  117. package/dist/src/openapi-parser.js +0 -436
  118. package/dist/src/openapi-parser.js.map +0 -1
  119. package/dist/src/profile-loader.d.ts +0 -78
  120. package/dist/src/profile-loader.d.ts.map +0 -1
  121. package/dist/src/profile-loader.js +0 -483
  122. package/dist/src/profile-loader.js.map +0 -1
  123. package/dist/src/profile-registry.d.ts +0 -18
  124. package/dist/src/profile-registry.d.ts.map +0 -1
  125. package/dist/src/profile-registry.js +0 -26
  126. package/dist/src/profile-registry.js.map +0 -1
  127. package/dist/src/profile-resolver.d.ts +0 -19
  128. package/dist/src/profile-resolver.d.ts.map +0 -1
  129. package/dist/src/profile-resolver.js +0 -167
  130. package/dist/src/profile-resolver.js.map +0 -1
  131. package/dist/src/proxy-executor.d.ts +0 -86
  132. package/dist/src/proxy-executor.d.ts.map +0 -1
  133. package/dist/src/proxy-executor.js +0 -497
  134. package/dist/src/proxy-executor.js.map +0 -1
  135. package/dist/src/schema-validator.d.ts +0 -30
  136. package/dist/src/schema-validator.d.ts.map +0 -1
  137. package/dist/src/schema-validator.js +0 -128
  138. package/dist/src/schema-validator.js.map +0 -1
  139. package/dist/src/startup-profile.d.ts +0 -17
  140. package/dist/src/startup-profile.d.ts.map +0 -1
  141. package/dist/src/startup-profile.js +0 -30
  142. package/dist/src/startup-profile.js.map +0 -1
  143. package/dist/src/startup-validation.d.ts +0 -11
  144. package/dist/src/startup-validation.d.ts.map +0 -1
  145. package/dist/src/startup-validation.js +0 -21
  146. package/dist/src/startup-validation.js.map +0 -1
  147. package/dist/src/tool-filter.d.ts +0 -65
  148. package/dist/src/tool-filter.d.ts.map +0 -1
  149. package/dist/src/tool-filter.js +0 -471
  150. package/dist/src/tool-filter.js.map +0 -1
  151. package/dist/src/tool-generator.d.ts +0 -67
  152. package/dist/src/tool-generator.d.ts.map +0 -1
  153. package/dist/src/tool-generator.js +0 -182
  154. package/dist/src/tool-generator.js.map +0 -1
  155. package/dist/src/validation-utils.d.ts +0 -49
  156. package/dist/src/validation-utils.d.ts.map +0 -1
  157. package/dist/src/validation-utils.js +0 -138
  158. package/dist/src/validation-utils.js.map +0 -1
  159. package/profiles/gitlab/developer-profile.json +0 -1508
  160. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-client-factory.js","sourceRoot":"","sources":["../../src/http-client-factory.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Build base HTTP transport configuration from environment variables.
3
- */
4
- import type { HttpTransportConfig } from './types/http-transport.js';
5
- export declare function buildHttpTransportBaseConfig(host: string, port: number): HttpTransportConfig;
6
- //# sourceMappingURL=http-transport-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-transport-config.d.ts","sourceRoot":"","sources":["../../src/http-transport-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,mBAAmB,CA0C5F"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Build base HTTP transport configuration from environment variables.
3
- */
4
- import { TIMEOUTS } from './constants.js';
5
- import { ConfigurationError } from './errors.js';
6
- export function buildHttpTransportBaseConfig(host, port) {
7
- return {
8
- host,
9
- port,
10
- sessionTimeoutMs: parseInt(process.env.MCP4_SESSION_TIMEOUT_MS || String(TIMEOUTS.SESSION_TIMEOUT_MS), 10),
11
- heartbeatEnabled: process.env.MCP4_HEARTBEAT_ENABLED === 'true',
12
- heartbeatIntervalMs: parseInt(process.env.MCP4_HEARTBEAT_INTERVAL_MS || String(TIMEOUTS.HEARTBEAT_INTERVAL_MS), 10),
13
- metricsEnabled: process.env.MCP4_METRICS_ENABLED === 'true',
14
- metricsPath: process.env.MCP4_METRICS_PATH || '/metrics',
15
- allowedOrigins: process.env.MCP4_ALLOWED_ORIGINS
16
- ? process.env.MCP4_ALLOWED_ORIGINS.split(',').map(o => o.trim())
17
- : undefined,
18
- rateLimitEnabled: process.env.MCP4_HTTP_RATE_LIMIT_ENABLED !== 'false', // default: true
19
- rateLimitWindowMs: parseInt(process.env.MCP4_HTTP_RATE_LIMIT_WINDOW_MS || String(TIMEOUTS.RATE_LIMIT_WINDOW_MS), 10),
20
- rateLimitMaxRequests: parseInt(process.env.MCP4_HTTP_RATE_LIMIT_MAX_REQUESTS || '100', 10),
21
- rateLimitMetricsMax: parseInt(process.env.MCP4_HTTP_RATE_LIMIT_METRICS_MAX || '10', 10),
22
- maxTokenLength: process.env.MCP4_TOKEN_MAX_LENGTH
23
- ? parseInt(process.env.MCP4_TOKEN_MAX_LENGTH, 10)
24
- : undefined,
25
- sslCertFile: process.env.MCP4_SSL_CERT_FILE,
26
- sslKeyFile: process.env.MCP4_SSL_KEY_FILE,
27
- oauthSessionTimeoutMs: (() => {
28
- if (process.env.MCP4_OAUTH_SESSION_TIMEOUT_MS === undefined)
29
- return undefined;
30
- const parsed = parseInt(process.env.MCP4_OAUTH_SESSION_TIMEOUT_MS, 10);
31
- if (Number.isNaN(parsed)) {
32
- throw new ConfigurationError(`Invalid MCP4_OAUTH_SESSION_TIMEOUT_MS: expected integer milliseconds, got '${process.env.MCP4_OAUTH_SESSION_TIMEOUT_MS}'`);
33
- }
34
- return parsed;
35
- })(),
36
- oauthRefreshThresholdMs: (() => {
37
- if (process.env.MCP4_OAUTH_REFRESH_THRESHOLD_MS === undefined)
38
- return undefined;
39
- const parsed = parseInt(process.env.MCP4_OAUTH_REFRESH_THRESHOLD_MS, 10);
40
- if (Number.isNaN(parsed)) {
41
- throw new ConfigurationError(`Invalid MCP4_OAUTH_REFRESH_THRESHOLD_MS: expected integer milliseconds, got '${process.env.MCP4_OAUTH_REFRESH_THRESHOLD_MS}'`);
42
- }
43
- return parsed;
44
- })(),
45
- };
46
- }
47
- //# sourceMappingURL=http-transport-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-transport-config.js","sourceRoot":"","sources":["../../src/http-transport-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,IAAY;IACrE,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;QAC1G,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM;QAC/D,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EAAE,CAAC;QACnH,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;QAC3D,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,UAAU;QACxD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAC9C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChE,CAAC,CAAC,SAAS;QACb,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,EAAE,gBAAgB;QACxF,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC;QACpH,oBAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC1F,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,IAAI,EAAE,EAAE,CAAC;QACvF,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YAC/C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACjD,CAAC,CAAC,SAAS;QACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAC3C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACzC,qBAAqB,EAAE,CAAC,GAAG,EAAE;YAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,kBAAkB,CAC1B,8EAA8E,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAC3H,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE;QACJ,uBAAuB,EAAE,CAAC,GAAG,EAAE;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,kBAAkB,CAC1B,gFAAgF,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,CAC/H,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE;KACL,CAAC;AACJ,CAAC"}
@@ -1,316 +0,0 @@
1
- /**
2
- * HTTP Streamable Transport for MCP
3
- *
4
- * Implements MCP Specification 2025-03-26
5
- * https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
6
- *
7
- * Why: Enables remote MCP server access with SSE streaming, session management,
8
- * and resumability for reliable communication over HTTP.
9
- */
10
- import type { Logger } from './logger.js';
11
- import type { HttpTransportConfig, HttpProfileContext } from './types/http-transport.js';
12
- import type { SessionToolFilter, SessionToolFilterRequest } from './types/http-transport.js';
13
- export declare class HttpTransport {
14
- private app;
15
- private server;
16
- private config;
17
- private logger;
18
- private metrics;
19
- private cleanupInterval;
20
- private messageHandler;
21
- private profileContextProvider;
22
- private profileStates;
23
- private oauthRedirectHostCache;
24
- private warnedMissingOAuthRedirectEnvVars;
25
- constructor(config: HttpTransportConfig, logger: Logger);
26
- /**
27
- * Setup Express middleware
28
- *
29
- * Why: Security (Origin validation, rate limiting), JSON parsing, session extraction, metrics
30
- */
31
- private setupMiddleware;
32
- setProfileContextProvider(provider: (profileId: string) => Promise<HttpProfileContext | null>): void;
33
- private getDefaultProfileId;
34
- private buildDefaultProfileContext;
35
- private getProfileState;
36
- private getProfileIdForRequest;
37
- private getProfileStateForRequest;
38
- private hasWarnedAboutBinding;
39
- /**
40
- * Check if origin is allowed
41
- *
42
- * Why: Prevent DNS rebinding attacks
43
- *
44
- * Supports:
45
- * - Exact hostname: 'example.com', 'api.example.com'
46
- * - Wildcard subdomain: '*.example.com'
47
- * - IPv4 CIDR: '192.168.1.0/24', '10.0.0.0/8'
48
- * - IPv4 exact: '192.168.1.100'
49
- */
50
- private isAllowedOrigin;
51
- private getOAuthRedirectHostPatterns;
52
- private extractRedirectHostPatterns;
53
- private resolveRedirectUriFromEnv;
54
- private resolveProfileIdFromPath;
55
- private resolveProfileIdForOriginCheck;
56
- private primeOAuthRedirectHosts;
57
- private isAllowedOriginForRequest;
58
- /**
59
- * Match hostname against allowed origin pattern
60
- *
61
- * Supports:
62
- * - Exact match: 'example.com' === 'example.com'
63
- * - Wildcard: '*.example.com' matches 'api.example.com', 'web.example.com'
64
- * - CIDR: '192.168.1.0/24' matches '192.168.1.1' through '192.168.1.254'
65
- */
66
- private matchOrigin;
67
- /**
68
- * Check if IP address is within CIDR range (IPv4 or IPv6)
69
- *
70
- * Example: '192.168.1.50' matches '192.168.1.0/24'
71
- * '2001:db8::1' matches '2001:db8::/32'
72
- */
73
- private matchCIDR;
74
- /**
75
- * Convert IPv4 address to 32-bit integer
76
- *
77
- * Example: '192.168.1.1' -> 3232235777
78
- */
79
- private ipv4ToInt;
80
- /**
81
- * Convert IPv6 address to 128-bit BigInt
82
- */
83
- private ipv6ToBigInt;
84
- private ipv6Mask;
85
- private stripIpv6Brackets;
86
- /**
87
- * Create configured rate limiter or a passthrough handler when disabled
88
- *
89
- * Why: Both MCP and metrics endpoints share the same rate limiting setup logic.
90
- * Centralizing it keeps behaviour consistent and avoids drifting configuration.
91
- */
92
- private createRateLimiter;
93
- private formatRateLimitMessage;
94
- private getProfilePrefix;
95
- private buildProfilePath;
96
- private getServerOrigin;
97
- private buildProfileUrl;
98
- private normalizeResourcePath;
99
- private resolveProfileIdFromResourceUrl;
100
- getOAuthProtectedResourceUrl(profileId?: string): string;
101
- private respondProfileNotFound;
102
- /**
103
- * Setup MCP endpoint routes
104
- *
105
- * Why: Single endpoint for POST (client→server) and GET (SSE stream)
106
- */
107
- private setupRoutes;
108
- private getProfileIssuerUrl;
109
- private handleOAuthProtectedResource;
110
- private handleOAuthAuthorize;
111
- private handleOAuthToken;
112
- private handleOAuthCallback;
113
- private handleOAuthAuthorizationServerMetadata;
114
- private handleOAuthRegister;
115
- /**
116
- * Handle metrics endpoint
117
- *
118
- * Why: Prometheus scraping endpoint
119
- */
120
- private handleMetrics;
121
- /**
122
- * Validate authentication token by making a probe request to the API
123
- *
124
- * Supports all auth types: bearer, query, custom-header
125
- * Returns true if token is valid, false otherwise
126
- */
127
- /**
128
- * Builds a URL by intelligently combining base URL and endpoint
129
- * Handles absolute URLs, absolute paths, and relative paths correctly
130
- */
131
- private buildUrl;
132
- private validateAuthToken;
133
- /**
134
- * Validate token format and length
135
- *
136
- * Why centralized: Single source of truth for token validation rules
137
- *
138
- * Relaxed validation: Allow common API token characters including colons,
139
- * to support various token formats (GitLab glpat-, YouTrack perm:, etc.)
140
- */
141
- private validateToken;
142
- /**
143
- * Extract and validate auth token from request headers
144
- *
145
- * Supports:
146
- * - Authorization: Bearer <token>
147
- * - X-API-Token: <token>
148
- * - OAuth session (via mcp-session-id header)
149
- *
150
- * Why strict validation: Prevents header injection attacks
151
- *
152
- * Returns: { type: 'bearer' | 'oauth' | 'api-token', token: string, sessionId?: string }
153
- */
154
- private extractAuthToken;
155
- /**
156
- * Lazy initialization of ToolFilterService
157
- */
158
- private getToolFilterService;
159
- /**
160
- * Handle POST requests - Client sending messages to server
161
- *
162
- * MCP Spec: POST can contain requests, notifications, or responses
163
- */
164
- private handlePost;
165
- /**
166
- * Handle GET requests - Client opening SSE stream for server messages
167
- *
168
- * MCP Spec: GET opens SSE stream for server-initiated requests/notifications
169
- */
170
- private handleGet;
171
- /**
172
- * Handle DELETE requests - Client terminating session
173
- *
174
- * MCP Spec: DELETE explicitly terminates session
175
- */
176
- private handleDelete;
177
- /**
178
- * Start SSE response for a POST request
179
- *
180
- * Why: Returns response via SSE stream, allows server-initiated messages
181
- */
182
- private startSSEResponse;
183
- /**
184
- * Start SSE stream for GET request
185
- *
186
- * Why: Allows server to send requests/notifications to client
187
- */
188
- private startSSEStream;
189
- /**
190
- * Replay messages after Last-Event-ID
191
- *
192
- * Why: Resumability - client can reconnect and receive missed messages
193
- */
194
- private replayMessages;
195
- /**
196
- * Send message to client via SSE
197
- *
198
- * Why: Server-initiated requests/notifications
199
- */
200
- sendToClient(profileId: string, sessionId: string, message: unknown): void;
201
- /**
202
- * Determine message type (request, notification, response)
203
- */
204
- private getMessageType;
205
- private getFilteringHeaderValue;
206
- private getToolFilterHeaderValue;
207
- /**
208
- * Create new session
209
- *
210
- * Why: Stateful sessions for MCP protocol
211
- */
212
- private createSession;
213
- /**
214
- * Update session activity timestamp
215
- */
216
- private updateSessionActivity;
217
- /**
218
- * Destroy session and cleanup resources
219
- *
220
- * Why: Free memory, close streams
221
- */
222
- private destroySession;
223
- /**
224
- * Session destruction listeners for cleanup in other components
225
- */
226
- private sessionDestroyedListeners;
227
- /**
228
- * Register listener for session destruction events
229
- *
230
- * Why: Allows MCPServer to cleanup per-session HTTP clients
231
- */
232
- onSessionDestroyed(listener: (profileId: string, sessionId: string) => void): void;
233
- /**
234
- * Notify all listeners about session destruction
235
- */
236
- private notifySessionDestroyed;
237
- /**
238
- * Store OAuth tokens in internal map for later session initialization
239
- *
240
- * Why: Bridge between /oauth/token endpoint (where we see OAuthTokens)
241
- * and session initialization (where we only see access token in Authorization header)
242
- */
243
- private storeOAuthTokens;
244
- /**
245
- * Cleanup expired sessions
246
- *
247
- * Why: Prevent memory leaks, enforce session timeout
248
- *
249
- * OAuth sessions with refresh tokens have extended or unlimited timeout
250
- * to avoid forcing users to re-authenticate after periods of inactivity
251
- */
252
- private cleanupExpiredSessions;
253
- /**
254
- * Get auth token from session
255
- *
256
- * Why public: Allows MCPServer to securely access session tokens without breaking encapsulation
257
- */
258
- getSessionToken(profileId: string, sessionId: string): string | undefined;
259
- getSessionFiltering(profileId: string, sessionId: string): Record<string, string[]> | undefined;
260
- getSessionFilteringHeader(profileId: string, sessionId: string): string | undefined;
261
- getSessionToolFilterRequest(profileId: string, sessionId: string): SessionToolFilterRequest | undefined;
262
- getSessionToolFilter(profileId: string, sessionId: string): SessionToolFilter | undefined;
263
- getSessionToolFilterHeader(profileId: string, sessionId: string): string | undefined;
264
- setSessionToolFilter(profileId: string, sessionId: string, toolFilter: SessionToolFilter): void;
265
- recordGlobalToolFilterMetrics(summary: {
266
- originalCount: number;
267
- allowedCount: number;
268
- removedCount: number;
269
- patternCounts: Record<string, number>;
270
- }): void;
271
- recordSessionToolFilterMetrics(sessionId: string, allowedCount: number, request: SessionToolFilterRequest): void;
272
- recordToolFilterRejection(tool: string, source: 'env' | 'session'): void;
273
- /**
274
- * Ensure session has a valid access token, refreshing if necessary
275
- *
276
- * Why: Transparently refresh expired OAuth tokens before making API calls
277
- * Returns true if token is valid (or was successfully refreshed), false otherwise
278
- */
279
- ensureValidSessionToken(profileId: string, sessionId: string): Promise<boolean>;
280
- /**
281
- * Refresh access token using refresh token
282
- *
283
- * Why: Automatically renew expired OAuth access tokens without user intervention
284
- * Returns true on success, false on failure
285
- */
286
- private refreshAccessToken;
287
- /**
288
- * Set message handler for processing incoming JSON-RPC messages
289
- */
290
- setMessageHandler(handler: (message: unknown, sessionId?: string, profileId?: string) => Promise<unknown>): void;
291
- /**
292
- * Check if OAuth provider is configured
293
- */
294
- hasOAuthProvider(profileId?: string): boolean;
295
- /**
296
- * Get server URL
297
- */
298
- getServerUrl(profileId?: string): string;
299
- /**
300
- * Get OAuth authorization URL
301
- */
302
- getOAuthAuthorizationUrl(profileId?: string): string;
303
- /**
304
- * Get OAuth scopes
305
- */
306
- getOAuthScopes(profileId?: string): string[];
307
- /**
308
- * Start HTTP server
309
- */
310
- start(): Promise<void>;
311
- /**
312
- * Stop HTTP server
313
- */
314
- stop(): Promise<void>;
315
- }
316
- //# sourceMappingURL=http-transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../src/http-transport.ts"],"names":[],"mappings":"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"}