mcp4openapi 0.2.8 → 0.3.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 (358) hide show
  1. package/README.md +143 -63
  2. package/dist/scripts/validate-profile.js +3 -3
  3. package/dist/scripts/validate-profile.js.map +1 -1
  4. package/dist/src/argument-normalizer.d.ts +5 -0
  5. package/dist/src/argument-normalizer.d.ts.map +1 -0
  6. package/dist/src/argument-normalizer.js +61 -0
  7. package/dist/src/argument-normalizer.js.map +1 -0
  8. package/dist/src/auth/oauth-provider.d.ts +131 -0
  9. package/dist/src/auth/oauth-provider.d.ts.map +1 -0
  10. package/dist/src/auth/oauth-provider.js +839 -0
  11. package/dist/src/auth/oauth-provider.js.map +1 -0
  12. package/dist/src/cli-config.d.ts +9 -0
  13. package/dist/src/cli-config.d.ts.map +1 -0
  14. package/dist/src/cli-config.js +111 -0
  15. package/dist/src/cli-config.js.map +1 -0
  16. package/dist/src/core/cli-config.d.ts +9 -0
  17. package/dist/src/core/cli-config.d.ts.map +1 -0
  18. package/dist/src/core/cli-config.js +125 -0
  19. package/dist/src/core/cli-config.js.map +1 -0
  20. package/dist/src/core/constants.d.ts +86 -0
  21. package/dist/src/core/constants.d.ts.map +1 -0
  22. package/dist/src/core/constants.js +86 -0
  23. package/dist/src/core/constants.js.map +1 -0
  24. package/dist/src/core/errors.d.ts +59 -0
  25. package/dist/src/core/errors.d.ts.map +1 -0
  26. package/dist/src/core/errors.js +119 -0
  27. package/dist/src/core/errors.js.map +1 -0
  28. package/dist/src/core/filtering.d.ts +19 -0
  29. package/dist/src/core/filtering.d.ts.map +1 -0
  30. package/dist/src/core/filtering.js +292 -0
  31. package/dist/src/core/filtering.js.map +1 -0
  32. package/dist/src/core/index.d.ts +26 -0
  33. package/dist/src/core/index.d.ts.map +1 -0
  34. package/dist/src/core/index.js +276 -0
  35. package/dist/src/core/index.js.map +1 -0
  36. package/dist/src/core/lib.d.ts +8 -0
  37. package/dist/src/core/lib.d.ts.map +1 -0
  38. package/dist/src/core/lib.js +7 -0
  39. package/dist/src/core/lib.js.map +1 -0
  40. package/dist/src/core/logger.d.ts +59 -0
  41. package/dist/src/core/logger.d.ts.map +1 -0
  42. package/dist/src/core/logger.js +197 -0
  43. package/dist/src/core/logger.js.map +1 -0
  44. package/dist/src/core/metrics.d.ts +97 -0
  45. package/dist/src/core/metrics.d.ts.map +1 -0
  46. package/dist/src/core/metrics.js +273 -0
  47. package/dist/src/core/metrics.js.map +1 -0
  48. package/dist/src/core/naming-warnings.d.ts +23 -0
  49. package/dist/src/core/naming-warnings.d.ts.map +1 -0
  50. package/dist/src/core/naming-warnings.js +83 -0
  51. package/dist/src/core/naming-warnings.js.map +1 -0
  52. package/dist/src/core/naming.d.ts +58 -0
  53. package/dist/src/core/naming.d.ts.map +1 -0
  54. package/dist/src/core/naming.js +510 -0
  55. package/dist/src/core/naming.js.map +1 -0
  56. package/dist/src/errors.d.ts +6 -0
  57. package/dist/src/errors.d.ts.map +1 -1
  58. package/dist/src/errors.js +15 -6
  59. package/dist/src/errors.js.map +1 -1
  60. package/dist/src/filtering.d.ts +19 -0
  61. package/dist/src/filtering.d.ts.map +1 -0
  62. package/dist/src/filtering.js +292 -0
  63. package/dist/src/filtering.js.map +1 -0
  64. package/dist/src/generated-schemas.d.ts +290 -79
  65. package/dist/src/generated-schemas.d.ts.map +1 -1
  66. package/dist/src/generated-schemas.js +17 -2
  67. package/dist/src/generated-schemas.js.map +1 -1
  68. package/dist/src/http-transport-config.d.ts +6 -0
  69. package/dist/src/http-transport-config.d.ts.map +1 -0
  70. package/dist/src/http-transport-config.js +47 -0
  71. package/dist/src/http-transport-config.js.map +1 -0
  72. package/dist/src/http-transport.d.ts +63 -13
  73. package/dist/src/http-transport.d.ts.map +1 -1
  74. package/dist/src/http-transport.js +1045 -482
  75. package/dist/src/http-transport.js.map +1 -1
  76. package/dist/src/index.d.ts +1 -6
  77. package/dist/src/index.d.ts.map +1 -1
  78. package/dist/src/index.js +1 -170
  79. package/dist/src/index.js.map +1 -1
  80. package/dist/src/interceptors.d.ts +1 -0
  81. package/dist/src/interceptors.d.ts.map +1 -1
  82. package/dist/src/interceptors.js +73 -63
  83. package/dist/src/interceptors.js.map +1 -1
  84. package/dist/src/lib.d.ts +1 -7
  85. package/dist/src/lib.d.ts.map +1 -1
  86. package/dist/src/lib.js +1 -6
  87. package/dist/src/lib.js.map +1 -1
  88. package/dist/src/logger.d.ts +5 -0
  89. package/dist/src/logger.d.ts.map +1 -1
  90. package/dist/src/logger.js +9 -1
  91. package/dist/src/logger.js.map +1 -1
  92. package/dist/src/mcp/mcp-server-manager.d.ts +20 -0
  93. package/dist/src/mcp/mcp-server-manager.d.ts.map +1 -0
  94. package/dist/src/mcp/mcp-server-manager.js +38 -0
  95. package/dist/src/mcp/mcp-server-manager.js.map +1 -0
  96. package/dist/src/mcp/mcp-server.d.ts +205 -0
  97. package/dist/src/mcp/mcp-server.d.ts.map +1 -0
  98. package/dist/src/mcp/mcp-server.js +1473 -0
  99. package/dist/src/mcp/mcp-server.js.map +1 -0
  100. package/dist/src/mcp-server-manager.d.ts +20 -0
  101. package/dist/src/mcp-server-manager.d.ts.map +1 -0
  102. package/dist/src/mcp-server-manager.js +38 -0
  103. package/dist/src/mcp-server-manager.js.map +1 -0
  104. package/dist/src/mcp-server.d.ts +28 -0
  105. package/dist/src/mcp-server.d.ts.map +1 -1
  106. package/dist/src/mcp-server.js +406 -109
  107. package/dist/src/mcp-server.js.map +1 -1
  108. package/dist/src/metrics.d.ts +11 -0
  109. package/dist/src/metrics.d.ts.map +1 -1
  110. package/dist/src/metrics.js +61 -0
  111. package/dist/src/metrics.js.map +1 -1
  112. package/dist/src/oauth-provider.d.ts +5 -0
  113. package/dist/src/oauth-provider.d.ts.map +1 -1
  114. package/dist/src/oauth-provider.js +29 -1
  115. package/dist/src/oauth-provider.js.map +1 -1
  116. package/dist/src/openapi/openapi-parser.d.ts +70 -0
  117. package/dist/src/openapi/openapi-parser.d.ts.map +1 -0
  118. package/dist/src/openapi/openapi-parser.js +458 -0
  119. package/dist/src/openapi/openapi-parser.js.map +1 -0
  120. package/dist/src/profile/profile-loader.d.ts +78 -0
  121. package/dist/src/profile/profile-loader.d.ts.map +1 -0
  122. package/dist/src/profile/profile-loader.js +490 -0
  123. package/dist/src/profile/profile-loader.js.map +1 -0
  124. package/dist/src/profile/profile-registry.d.ts +19 -0
  125. package/dist/src/profile/profile-registry.d.ts.map +1 -0
  126. package/dist/src/profile/profile-registry.js +43 -0
  127. package/dist/src/profile/profile-registry.js.map +1 -0
  128. package/dist/src/profile/profile-resolver.d.ts +41 -0
  129. package/dist/src/profile/profile-resolver.d.ts.map +1 -0
  130. package/dist/src/profile/profile-resolver.js +324 -0
  131. package/dist/src/profile/profile-resolver.js.map +1 -0
  132. package/dist/src/profile/startup-profile.d.ts +17 -0
  133. package/dist/src/profile/startup-profile.d.ts.map +1 -0
  134. package/dist/src/profile/startup-profile.js +30 -0
  135. package/dist/src/profile/startup-profile.js.map +1 -0
  136. package/dist/src/profile/startup-validation.d.ts +11 -0
  137. package/dist/src/profile/startup-validation.d.ts.map +1 -0
  138. package/dist/src/profile/startup-validation.js +21 -0
  139. package/dist/src/profile/startup-validation.js.map +1 -0
  140. package/dist/src/profile-loader.d.ts +1 -0
  141. package/dist/src/profile-loader.d.ts.map +1 -1
  142. package/dist/src/profile-loader.js +14 -3
  143. package/dist/src/profile-loader.js.map +1 -1
  144. package/dist/src/profile-registry.d.ts +18 -0
  145. package/dist/src/profile-registry.d.ts.map +1 -0
  146. package/dist/src/profile-registry.js +26 -0
  147. package/dist/src/profile-registry.js.map +1 -0
  148. package/dist/src/profile-resolver.d.ts +19 -0
  149. package/dist/src/profile-resolver.d.ts.map +1 -0
  150. package/dist/src/profile-resolver.js +167 -0
  151. package/dist/src/profile-resolver.js.map +1 -0
  152. package/dist/src/proxy-executor.d.ts.map +1 -1
  153. package/dist/src/proxy-executor.js +7 -0
  154. package/dist/src/proxy-executor.js.map +1 -1
  155. package/dist/src/startup-profile.d.ts +17 -0
  156. package/dist/src/startup-profile.d.ts.map +1 -0
  157. package/dist/src/startup-profile.js +30 -0
  158. package/dist/src/startup-profile.js.map +1 -0
  159. package/dist/src/startup-validation.d.ts +11 -0
  160. package/dist/src/startup-validation.d.ts.map +1 -0
  161. package/dist/src/startup-validation.js +21 -0
  162. package/dist/src/startup-validation.js.map +1 -0
  163. package/dist/src/testing/dynamic-mock-server.d.ts +24 -0
  164. package/dist/src/testing/dynamic-mock-server.d.ts.map +1 -0
  165. package/dist/src/testing/dynamic-mock-server.js +138 -0
  166. package/dist/src/testing/dynamic-mock-server.js.map +1 -0
  167. package/dist/src/testing/request-assertions.d.ts +5 -0
  168. package/dist/src/testing/request-assertions.d.ts.map +1 -0
  169. package/dist/src/testing/request-assertions.js +165 -0
  170. package/dist/src/testing/request-assertions.js.map +1 -0
  171. package/dist/src/testing/template-utils.d.ts +10 -0
  172. package/dist/src/testing/template-utils.d.ts.map +1 -0
  173. package/dist/src/testing/template-utils.js +72 -0
  174. package/dist/src/testing/template-utils.js.map +1 -0
  175. package/dist/src/testing/test-http-utils.d.ts +1 -1
  176. package/dist/src/testing/test-http-utils.d.ts.map +1 -1
  177. package/dist/src/testing/test-http-utils.js +1 -1
  178. package/dist/src/testing/test-http-utils.js.map +1 -1
  179. package/dist/src/testing/test-loader.d.ts +6 -0
  180. package/dist/src/testing/test-loader.d.ts.map +1 -0
  181. package/dist/src/testing/test-loader.js +212 -0
  182. package/dist/src/testing/test-loader.js.map +1 -0
  183. package/dist/src/testing/test-schema.d.ts +1270 -0
  184. package/dist/src/testing/test-schema.d.ts.map +1 -0
  185. package/dist/src/testing/test-schema.js +76 -0
  186. package/dist/src/testing/test-schema.js.map +1 -0
  187. package/dist/src/tool-filter/compat.d.ts +49 -0
  188. package/dist/src/tool-filter/compat.d.ts.map +1 -0
  189. package/dist/src/tool-filter/compat.js +72 -0
  190. package/dist/src/tool-filter/compat.js.map +1 -0
  191. package/dist/src/tool-filter/config/env-config-parser.d.ts +38 -0
  192. package/dist/src/tool-filter/config/env-config-parser.d.ts.map +1 -0
  193. package/dist/src/tool-filter/config/env-config-parser.js +103 -0
  194. package/dist/src/tool-filter/config/env-config-parser.js.map +1 -0
  195. package/dist/src/tool-filter/config/header-config-parser.d.ts +37 -0
  196. package/dist/src/tool-filter/config/header-config-parser.d.ts.map +1 -0
  197. package/dist/src/tool-filter/config/header-config-parser.js +118 -0
  198. package/dist/src/tool-filter/config/header-config-parser.js.map +1 -0
  199. package/dist/src/tool-filter/errors.d.ts +18 -0
  200. package/dist/src/tool-filter/errors.d.ts.map +1 -0
  201. package/dist/src/tool-filter/errors.js +21 -0
  202. package/dist/src/tool-filter/errors.js.map +1 -0
  203. package/dist/src/tool-filter/filter/filter-engine.d.ts +45 -0
  204. package/dist/src/tool-filter/filter/filter-engine.d.ts.map +1 -0
  205. package/dist/src/tool-filter/filter/filter-engine.js +94 -0
  206. package/dist/src/tool-filter/filter/filter-engine.js.map +1 -0
  207. package/dist/src/tool-filter/filter/filter-rules.d.ts +44 -0
  208. package/dist/src/tool-filter/filter/filter-rules.d.ts.map +1 -0
  209. package/dist/src/tool-filter/filter/filter-rules.js +72 -0
  210. package/dist/src/tool-filter/filter/filter-rules.js.map +1 -0
  211. package/dist/src/tool-filter/filter/global-tool-filter.d.ts +40 -0
  212. package/dist/src/tool-filter/filter/global-tool-filter.d.ts.map +1 -0
  213. package/dist/src/tool-filter/filter/global-tool-filter.js +92 -0
  214. package/dist/src/tool-filter/filter/global-tool-filter.js.map +1 -0
  215. package/dist/src/tool-filter/filter/session-tool-filter.d.ts +29 -0
  216. package/dist/src/tool-filter/filter/session-tool-filter.d.ts.map +1 -0
  217. package/dist/src/tool-filter/filter/session-tool-filter.js +69 -0
  218. package/dist/src/tool-filter/filter/session-tool-filter.js.map +1 -0
  219. package/dist/src/tool-filter/index.d.ts +25 -0
  220. package/dist/src/tool-filter/index.d.ts.map +1 -0
  221. package/dist/src/tool-filter/index.js +30 -0
  222. package/dist/src/tool-filter/index.js.map +1 -0
  223. package/dist/src/tool-filter/integration/tool-filter-service.d.ts +44 -0
  224. package/dist/src/tool-filter/integration/tool-filter-service.d.ts.map +1 -0
  225. package/dist/src/tool-filter/integration/tool-filter-service.js +68 -0
  226. package/dist/src/tool-filter/integration/tool-filter-service.js.map +1 -0
  227. package/dist/src/tool-filter/operation/operation-classifier.d.ts +20 -0
  228. package/dist/src/tool-filter/operation/operation-classifier.d.ts.map +1 -0
  229. package/dist/src/tool-filter/operation/operation-classifier.js +26 -0
  230. package/dist/src/tool-filter/operation/operation-classifier.js.map +1 -0
  231. package/dist/src/tool-filter/operation/operation-detector.d.ts +30 -0
  232. package/dist/src/tool-filter/operation/operation-detector.d.ts.map +1 -0
  233. package/dist/src/tool-filter/operation/operation-detector.js +96 -0
  234. package/dist/src/tool-filter/operation/operation-detector.js.map +1 -0
  235. package/dist/src/tool-filter/operation/operation-resolver.d.ts +22 -0
  236. package/dist/src/tool-filter/operation/operation-resolver.d.ts.map +1 -0
  237. package/dist/src/tool-filter/operation/operation-resolver.js +32 -0
  238. package/dist/src/tool-filter/operation/operation-resolver.js.map +1 -0
  239. package/dist/src/tool-filter/regex/regex-compiler.d.ts +22 -0
  240. package/dist/src/tool-filter/regex/regex-compiler.d.ts.map +1 -0
  241. package/dist/src/tool-filter/regex/regex-compiler.js +56 -0
  242. package/dist/src/tool-filter/regex/regex-compiler.js.map +1 -0
  243. package/dist/src/tool-filter/regex/regex-validator.d.ts +24 -0
  244. package/dist/src/tool-filter/regex/regex-validator.d.ts.map +1 -0
  245. package/dist/src/tool-filter/regex/regex-validator.js +58 -0
  246. package/dist/src/tool-filter/regex/regex-validator.js.map +1 -0
  247. package/dist/src/tool-filter/types.d.ts +92 -0
  248. package/dist/src/tool-filter/types.d.ts.map +1 -0
  249. package/dist/src/tool-filter/types.js +5 -0
  250. package/dist/src/tool-filter/types.js.map +1 -0
  251. package/dist/src/tool-filter/utils.d.ts +11 -0
  252. package/dist/src/tool-filter/utils.d.ts.map +1 -0
  253. package/dist/src/tool-filter/utils.js +13 -0
  254. package/dist/src/tool-filter/utils.js.map +1 -0
  255. package/dist/src/tool-filter.d.ts +65 -0
  256. package/dist/src/tool-filter.d.ts.map +1 -0
  257. package/dist/src/tool-filter.js +471 -0
  258. package/dist/src/tool-filter.js.map +1 -0
  259. package/dist/src/tool-generator.d.ts +1 -0
  260. package/dist/src/tool-generator.d.ts.map +1 -1
  261. package/dist/src/tool-generator.js +15 -6
  262. package/dist/src/tool-generator.js.map +1 -1
  263. package/dist/src/tooling/composite-executor.d.ts +77 -0
  264. package/dist/src/tooling/composite-executor.d.ts.map +1 -0
  265. package/dist/src/tooling/composite-executor.js +198 -0
  266. package/dist/src/tooling/composite-executor.js.map +1 -0
  267. package/dist/src/tooling/dag-executor.d.ts +49 -0
  268. package/dist/src/tooling/dag-executor.d.ts.map +1 -0
  269. package/dist/src/tooling/dag-executor.js +138 -0
  270. package/dist/src/tooling/dag-executor.js.map +1 -0
  271. package/dist/src/tooling/proxy-executor.d.ts +86 -0
  272. package/dist/src/tooling/proxy-executor.d.ts.map +1 -0
  273. package/dist/src/tooling/proxy-executor.js +501 -0
  274. package/dist/src/tooling/proxy-executor.js.map +1 -0
  275. package/dist/src/tooling/tool-generator.d.ts +67 -0
  276. package/dist/src/tooling/tool-generator.d.ts.map +1 -0
  277. package/dist/src/tooling/tool-generator.js +222 -0
  278. package/dist/src/tooling/tool-generator.js.map +1 -0
  279. package/dist/src/transport/http-client-factory.d.ts +65 -0
  280. package/dist/src/transport/http-client-factory.d.ts.map +1 -0
  281. package/dist/src/transport/http-client-factory.js +143 -0
  282. package/dist/src/transport/http-client-factory.js.map +1 -0
  283. package/dist/src/transport/http-transport-config.d.ts +6 -0
  284. package/dist/src/transport/http-transport-config.d.ts.map +1 -0
  285. package/dist/src/transport/http-transport-config.js +63 -0
  286. package/dist/src/transport/http-transport-config.js.map +1 -0
  287. package/dist/src/transport/http-transport.d.ts +329 -0
  288. package/dist/src/transport/http-transport.d.ts.map +1 -0
  289. package/dist/src/transport/http-transport.js +2584 -0
  290. package/dist/src/transport/http-transport.js.map +1 -0
  291. package/dist/src/transport/interceptors.d.ts +119 -0
  292. package/dist/src/transport/interceptors.d.ts.map +1 -0
  293. package/dist/src/transport/interceptors.js +413 -0
  294. package/dist/src/transport/interceptors.js.map +1 -0
  295. package/dist/src/transport/profile-index.d.ts +84 -0
  296. package/dist/src/transport/profile-index.d.ts.map +1 -0
  297. package/dist/src/transport/profile-index.js +405 -0
  298. package/dist/src/transport/profile-index.js.map +1 -0
  299. package/dist/src/types/http-transport.d.ts +26 -0
  300. package/dist/src/types/http-transport.d.ts.map +1 -1
  301. package/dist/src/types/openapi.d.ts +3 -0
  302. package/dist/src/types/openapi.d.ts.map +1 -1
  303. package/dist/src/types/profile.d.ts +16 -1
  304. package/dist/src/types/profile.d.ts.map +1 -1
  305. package/dist/src/validation/argument-normalizer.d.ts +6 -0
  306. package/dist/src/validation/argument-normalizer.d.ts.map +1 -0
  307. package/dist/src/validation/argument-normalizer.js +70 -0
  308. package/dist/src/validation/argument-normalizer.js.map +1 -0
  309. package/dist/src/validation/jsonrpc-validator.d.ts +27 -0
  310. package/dist/src/validation/jsonrpc-validator.d.ts.map +1 -0
  311. package/dist/src/validation/jsonrpc-validator.js +58 -0
  312. package/dist/src/validation/jsonrpc-validator.js.map +1 -0
  313. package/dist/src/validation/schema-validator.d.ts +30 -0
  314. package/dist/src/validation/schema-validator.d.ts.map +1 -0
  315. package/dist/src/validation/schema-validator.js +128 -0
  316. package/dist/src/validation/schema-validator.js.map +1 -0
  317. package/dist/src/validation/validation-utils.d.ts +49 -0
  318. package/dist/src/validation/validation-utils.d.ts.map +1 -0
  319. package/dist/src/validation/validation-utils.js +139 -0
  320. package/dist/src/validation/validation-utils.js.map +1 -0
  321. package/html/profile-index.html +386 -0
  322. package/package.json +10 -3
  323. package/profile-schema.json +77 -3
  324. package/profiles/gitlab/developer-profile-oauth.json +1520 -0
  325. package/profiles/gitlab/developer-profile-oauth.test.json +3432 -0
  326. package/profiles/gitlab/developer-profile.json +1508 -0
  327. package/profiles/gitlab/developer-profile.test.json +3432 -0
  328. package/profiles/gitlab/openapi.yaml +6891 -0
  329. package/profiles/n8n/openapi.yaml +2441 -0
  330. package/profiles/n8n/profile-optimized.json +965 -0
  331. package/profiles/n8n/profile-optimized.test.json +1078 -0
  332. package/profiles/n8n/profile.json +1033 -0
  333. package/profiles/n8n/profile.test.json +983 -0
  334. package/profiles/n8n-nodes/openapi.yaml +24 -0
  335. package/profiles/n8n-nodes/profile-nodes.json +44 -0
  336. package/profiles/n8n-nodes/profile-nodes.test.json +91 -0
  337. package/profiles/semgrep/openapi.yaml +4706 -0
  338. package/profiles/semgrep/profile.json +692 -0
  339. package/profiles/semgrep/profile.test.json +471 -0
  340. package/profiles/youtrack/openapi.json +16976 -0
  341. package/profiles/youtrack/profile.json +608 -0
  342. package/profiles/youtrack/profile.test.json +1926 -0
  343. package/dist/src/testing/fixtures.d.ts +0 -684
  344. package/dist/src/testing/fixtures.d.ts.map +0 -1
  345. package/dist/src/testing/fixtures.js +0 -528
  346. package/dist/src/testing/fixtures.js.map +0 -1
  347. package/dist/src/testing/mock-gitlab-server.d.ts +0 -43
  348. package/dist/src/testing/mock-gitlab-server.d.ts.map +0 -1
  349. package/dist/src/testing/mock-gitlab-server.js +0 -1026
  350. package/dist/src/testing/mock-gitlab-server.js.map +0 -1
  351. package/dist/src/testing/mock-semgrep-server.d.ts +0 -32
  352. package/dist/src/testing/mock-semgrep-server.d.ts.map +0 -1
  353. package/dist/src/testing/mock-semgrep-server.js +0 -213
  354. package/dist/src/testing/mock-semgrep-server.js.map +0 -1
  355. package/dist/src/testing/mock-youtrack-server.d.ts +0 -11
  356. package/dist/src/testing/mock-youtrack-server.d.ts.map +0 -1
  357. package/dist/src/testing/mock-youtrack-server.js +0 -152
  358. package/dist/src/testing/mock-youtrack-server.js.map +0 -1
@@ -0,0 +1,329 @@
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 '../core/logger.js';
11
+ import type { HttpTransportConfig, HttpProfileContext } from '../types/http-transport.js';
12
+ import { MetricsCollector } from '../core/metrics.js';
13
+ import type { SessionToolFilter, SessionToolFilterRequest } from '../types/http-transport.js';
14
+ import type { ListedProfileDetails } from '../profile/profile-resolver.js';
15
+ export declare class HttpTransport {
16
+ private app;
17
+ private server;
18
+ private config;
19
+ private logger;
20
+ private metrics;
21
+ private cleanupInterval;
22
+ private messageHandler;
23
+ private profileContextProvider;
24
+ private profileStates;
25
+ private oauthRedirectHostCache;
26
+ private warnedMissingOAuthRedirectEnvVars;
27
+ private profileHintsByClient;
28
+ private static readonly PROFILE_HINT_TTL_MS;
29
+ private profileIndexProvider;
30
+ constructor(config: HttpTransportConfig, logger: Logger);
31
+ getMetricsCollector(): MetricsCollector | null;
32
+ setProfileIndexProvider(provider: (() => Promise<ListedProfileDetails[]>) | null): void;
33
+ /**
34
+ * Setup Express middleware
35
+ *
36
+ * Why: Security (Origin validation, rate limiting), JSON parsing, session extraction, metrics
37
+ */
38
+ private setupMiddleware;
39
+ setProfileContextProvider(provider: (profileId: string) => Promise<HttpProfileContext | null>): void;
40
+ private getDefaultProfileId;
41
+ private buildDefaultProfileContext;
42
+ private getProfileState;
43
+ private getProfileIdForRequest;
44
+ private getProfileStateForRequest;
45
+ private hasWarnedAboutBinding;
46
+ /**
47
+ * Check if origin is allowed
48
+ *
49
+ * Why: Prevent DNS rebinding attacks
50
+ *
51
+ * Supports:
52
+ * - Exact hostname: 'example.com', 'api.example.com'
53
+ * - Wildcard subdomain: '*.example.com'
54
+ * - IPv4 CIDR: '192.168.1.0/24', '10.0.0.0/8'
55
+ * - IPv4 exact: '192.168.1.100'
56
+ */
57
+ private isAllowedOrigin;
58
+ private getOAuthRedirectHostPatterns;
59
+ private extractRedirectHostPatterns;
60
+ private resolveRedirectUriFromEnv;
61
+ private resolveProfileIdFromPath;
62
+ private getClientHintKey;
63
+ private storeProfileHint;
64
+ private resolveProfileIdFromHint;
65
+ private resolveProfileIdForOriginCheck;
66
+ private primeOAuthRedirectHosts;
67
+ private isAllowedOriginForRequest;
68
+ /**
69
+ * Match hostname against allowed origin pattern
70
+ *
71
+ * Supports:
72
+ * - Exact match: 'example.com' === 'example.com'
73
+ * - Wildcard: '*.example.com' matches 'api.example.com', 'web.example.com'
74
+ * - CIDR: '192.168.1.0/24' matches '192.168.1.1' through '192.168.1.254'
75
+ */
76
+ private matchOrigin;
77
+ /**
78
+ * Check if IP address is within CIDR range (IPv4 or IPv6)
79
+ *
80
+ * Example: '192.168.1.50' matches '192.168.1.0/24'
81
+ * '2001:db8::1' matches '2001:db8::/32'
82
+ */
83
+ private matchCIDR;
84
+ /**
85
+ * Convert IPv4 address to 32-bit integer
86
+ *
87
+ * Example: '192.168.1.1' -> 3232235777
88
+ */
89
+ private ipv4ToInt;
90
+ /**
91
+ * Convert IPv6 address to 128-bit BigInt
92
+ */
93
+ private ipv6ToBigInt;
94
+ private ipv6Mask;
95
+ private stripIpv6Brackets;
96
+ /**
97
+ * Create configured rate limiter or a passthrough handler when disabled
98
+ *
99
+ * Why: Both MCP and metrics endpoints share the same rate limiting setup logic.
100
+ * Centralizing it keeps behaviour consistent and avoids drifting configuration.
101
+ */
102
+ private createRateLimiter;
103
+ private formatRateLimitMessage;
104
+ private getProfilePrefix;
105
+ private buildProfilePath;
106
+ private getServerOrigin;
107
+ private buildProfileUrl;
108
+ private normalizeResourcePath;
109
+ private resolveProfileInfoFromResourceUrl;
110
+ private resolveProfileIdFromResourceUrl;
111
+ getOAuthProtectedResourceUrl(profileId?: string): string;
112
+ private respondProfileNotFound;
113
+ /**
114
+ * Setup MCP endpoint routes
115
+ *
116
+ * Why: Single endpoint for POST (client→server) and GET (SSE stream)
117
+ */
118
+ private setupRoutes;
119
+ private getProfileIssuerUrl;
120
+ private getRequestOrigin;
121
+ private handleProfileIndex;
122
+ private handleOAuthProtectedResource;
123
+ private handleOAuthAuthorize;
124
+ private handleOAuthToken;
125
+ private handleOAuthCallback;
126
+ private handleOAuthAuthorizationServerMetadata;
127
+ private handleOAuthRegister;
128
+ /**
129
+ * Handle metrics endpoint
130
+ *
131
+ * Why: Prometheus scraping endpoint
132
+ */
133
+ private handleMetrics;
134
+ /**
135
+ * Validate authentication token by making a probe request to the API
136
+ *
137
+ * Supports all auth types: bearer, query, custom-header
138
+ * Returns true if token is valid, false otherwise
139
+ */
140
+ /**
141
+ * Builds a URL by intelligently combining base URL and endpoint
142
+ * Handles absolute URLs, absolute paths, and relative paths correctly
143
+ */
144
+ private buildUrl;
145
+ private validateAuthToken;
146
+ /**
147
+ * Validate token format and length
148
+ *
149
+ * Why centralized: Single source of truth for token validation rules
150
+ *
151
+ * Relaxed validation: Allow common API token characters including colons,
152
+ * to support various token formats (GitLab glpat-, YouTrack perm:, etc.)
153
+ */
154
+ private validateToken;
155
+ /**
156
+ * Extract and validate auth token from request headers
157
+ *
158
+ * Supports:
159
+ * - Authorization: Bearer <token>
160
+ * - X-API-Token: <token>
161
+ * - OAuth session (via mcp-session-id header)
162
+ *
163
+ * Why strict validation: Prevents header injection attacks
164
+ *
165
+ * Returns: { type: 'bearer' | 'oauth' | 'api-token', token: string, sessionId?: string }
166
+ */
167
+ private extractAuthToken;
168
+ /**
169
+ * Lazy initialization of ToolFilterService
170
+ */
171
+ private getToolFilterService;
172
+ /**
173
+ * Handle POST requests - Client sending messages to server
174
+ *
175
+ * MCP Spec: POST can contain requests, notifications, or responses
176
+ */
177
+ private handlePost;
178
+ /**
179
+ * Handle GET requests - Client opening SSE stream for server messages
180
+ *
181
+ * MCP Spec: GET opens SSE stream for server-initiated requests/notifications
182
+ */
183
+ private handleGet;
184
+ /**
185
+ * Handle DELETE requests - Client terminating session
186
+ *
187
+ * MCP Spec: DELETE explicitly terminates session
188
+ */
189
+ private handleDelete;
190
+ /**
191
+ * Start SSE response for a POST request
192
+ *
193
+ * Why: Returns response via SSE stream, allows server-initiated messages
194
+ */
195
+ private startSSEResponse;
196
+ /**
197
+ * Start SSE stream for GET request
198
+ *
199
+ * Why: Allows server to send requests/notifications to client
200
+ */
201
+ private startSSEStream;
202
+ /**
203
+ * Replay messages after Last-Event-ID
204
+ *
205
+ * Why: Resumability - client can reconnect and receive missed messages
206
+ */
207
+ private replayMessages;
208
+ /**
209
+ * Send message to client via SSE
210
+ *
211
+ * Why: Server-initiated requests/notifications
212
+ */
213
+ sendToClient(profileId: string, sessionId: string, message: unknown): void;
214
+ /**
215
+ * Determine message type (request, notification, response)
216
+ */
217
+ private getMessageType;
218
+ private getFilteringHeaderValue;
219
+ private getToolFilterHeaderValue;
220
+ /**
221
+ * Create new session
222
+ *
223
+ * Why: Stateful sessions for MCP protocol
224
+ */
225
+ private createSession;
226
+ /**
227
+ * Update session activity timestamp
228
+ */
229
+ private updateSessionActivity;
230
+ /**
231
+ * Destroy session and cleanup resources
232
+ *
233
+ * Why: Free memory, close streams
234
+ */
235
+ private destroySession;
236
+ /**
237
+ * Session destruction listeners for cleanup in other components
238
+ */
239
+ private sessionDestroyedListeners;
240
+ /**
241
+ * Register listener for session destruction events
242
+ *
243
+ * Why: Allows MCPServer to cleanup per-session HTTP clients
244
+ */
245
+ onSessionDestroyed(listener: (profileId: string, sessionId: string) => void): void;
246
+ /**
247
+ * Notify all listeners about session destruction
248
+ */
249
+ private notifySessionDestroyed;
250
+ /**
251
+ * Store OAuth tokens in internal map for later session initialization
252
+ *
253
+ * Why: Bridge between /oauth/token endpoint (where we see OAuthTokens)
254
+ * and session initialization (where we only see access token in Authorization header)
255
+ */
256
+ private storeOAuthTokens;
257
+ /**
258
+ * Cleanup expired sessions
259
+ *
260
+ * Why: Prevent memory leaks, enforce session timeout
261
+ *
262
+ * OAuth sessions with refresh tokens have extended or unlimited timeout
263
+ * to avoid forcing users to re-authenticate after periods of inactivity
264
+ */
265
+ private cleanupExpiredSessions;
266
+ /**
267
+ * Get auth token from session
268
+ *
269
+ * Why public: Allows MCPServer to securely access session tokens without breaking encapsulation
270
+ */
271
+ getSessionToken(profileId: string, sessionId: string): string | undefined;
272
+ getSessionFiltering(profileId: string, sessionId: string): Record<string, string[]> | undefined;
273
+ getSessionFilteringHeader(profileId: string, sessionId: string): string | undefined;
274
+ getSessionToolFilterRequest(profileId: string, sessionId: string): SessionToolFilterRequest | undefined;
275
+ getSessionToolFilter(profileId: string, sessionId: string): SessionToolFilter | undefined;
276
+ getSessionToolFilterHeader(profileId: string, sessionId: string): string | undefined;
277
+ setSessionToolFilter(profileId: string, sessionId: string, toolFilter: SessionToolFilter): void;
278
+ recordGlobalToolFilterMetrics(summary: {
279
+ originalCount: number;
280
+ allowedCount: number;
281
+ removedCount: number;
282
+ patternCounts: Record<string, number>;
283
+ }): void;
284
+ recordSessionToolFilterMetrics(sessionId: string, allowedCount: number, request: SessionToolFilterRequest): void;
285
+ recordToolFilterRejection(tool: string, source: 'env' | 'session'): void;
286
+ /**
287
+ * Ensure session has a valid access token, refreshing if necessary
288
+ *
289
+ * Why: Transparently refresh expired OAuth tokens before making API calls
290
+ * Returns true if token is valid (or was successfully refreshed), false otherwise
291
+ */
292
+ ensureValidSessionToken(profileId: string, sessionId: string): Promise<boolean>;
293
+ /**
294
+ * Refresh access token using refresh token
295
+ *
296
+ * Why: Automatically renew expired OAuth access tokens without user intervention
297
+ * Returns true on success, false on failure
298
+ */
299
+ private refreshAccessToken;
300
+ /**
301
+ * Set message handler for processing incoming JSON-RPC messages
302
+ */
303
+ setMessageHandler(handler: (message: unknown, sessionId?: string, profileId?: string) => Promise<unknown>): void;
304
+ /**
305
+ * Check if OAuth provider is configured
306
+ */
307
+ hasOAuthProvider(profileId?: string): boolean;
308
+ /**
309
+ * Get server URL
310
+ */
311
+ getServerUrl(profileId?: string): string;
312
+ /**
313
+ * Get OAuth authorization URL
314
+ */
315
+ getOAuthAuthorizationUrl(profileId?: string): string;
316
+ /**
317
+ * Get OAuth scopes
318
+ */
319
+ getOAuthScopes(profileId?: string): string[];
320
+ /**
321
+ * Start HTTP server
322
+ */
323
+ start(): Promise<void>;
324
+ /**
325
+ * Stop HTTP server
326
+ */
327
+ stop(): Promise<void>;
328
+ }
329
+ //# sourceMappingURL=http-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/transport/http-transport.ts"],"names":[],"mappings":"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"}