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,94 @@
1
+ /**
2
+ * Filter engine - orchestrates filter rules
3
+ */
4
+ /**
5
+ * Filter result
6
+ */
7
+ export class FilterResult {
8
+ constructor(allowed, reason) {
9
+ this.allowed = allowed;
10
+ this.reason = reason;
11
+ }
12
+ static allowed(reason) {
13
+ return new FilterResult(true, reason);
14
+ }
15
+ static denied(reason) {
16
+ return new FilterResult(false, reason);
17
+ }
18
+ }
19
+ /**
20
+ * Filter engine that evaluates tools against rules
21
+ */
22
+ export class FilterEngine {
23
+ constructor(allowRules, denyRules) {
24
+ this.allowRules = allowRules;
25
+ this.denyRules = denyRules;
26
+ }
27
+ /**
28
+ * Evaluate tool name against rules
29
+ *
30
+ * Rule precedence:
31
+ * 1. Deny rules (if any match, deny immediately)
32
+ * 2. If no allow rules, allow by default
33
+ * 3. Allow rules (must match at least one)
34
+ */
35
+ evaluate(toolName) {
36
+ // Normalize tool name (Unicode NFC)
37
+ const normalized = toolName.normalize('NFC');
38
+ // Check deny rules first (precedence)
39
+ for (const rule of this.denyRules) {
40
+ if (rule.matches(normalized)) {
41
+ return FilterResult.denied(rule.getReason());
42
+ }
43
+ }
44
+ // If no allow rules, allow by default
45
+ if (this.allowRules.length === 0) {
46
+ return FilterResult.allowed();
47
+ }
48
+ // Check allow rules
49
+ for (const rule of this.allowRules) {
50
+ if (rule.matches(normalized)) {
51
+ return FilterResult.allowed(rule.getReason());
52
+ }
53
+ }
54
+ // No allow rule matched
55
+ return FilterResult.denied('no_allow_match');
56
+ }
57
+ /**
58
+ * Evaluate tool definition against rules
59
+ *
60
+ * Used when rules need full tool definition (e.g., CategoryMatchRule).
61
+ * Tool name is normalized (NFC) before passing to name-based rules.
62
+ *
63
+ * Rule precedence:
64
+ * 1. Deny rules (if any match, deny immediately)
65
+ * 2. If no allow rules, allow by default
66
+ * 3. Allow rules (must match at least one)
67
+ */
68
+ evaluateTool(tool) {
69
+ // Normalize tool name for consistency (NFC)
70
+ const normalizedTool = {
71
+ ...tool,
72
+ name: tool.name.normalize('NFC')
73
+ };
74
+ // Check deny rules first (precedence)
75
+ for (const rule of this.denyRules) {
76
+ if (rule.matches(normalizedTool)) {
77
+ return FilterResult.denied(rule.getReason());
78
+ }
79
+ }
80
+ // If no allow rules, allow by default
81
+ if (this.allowRules.length === 0) {
82
+ return FilterResult.allowed();
83
+ }
84
+ // Check allow rules
85
+ for (const rule of this.allowRules) {
86
+ if (rule.matches(normalizedTool)) {
87
+ return FilterResult.allowed(rule.getReason());
88
+ }
89
+ }
90
+ // No allow rule matched
91
+ return FilterResult.denied('no_allow_match');
92
+ }
93
+ }
94
+ //# sourceMappingURL=filter-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-engine.js","sourceRoot":"","sources":["../../../../src/tool-filter/filter/filter-engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,YACkB,OAAgB,EAChB,MAAe;QADf,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAS;IAC9B,CAAC;IAEJ,MAAM,CAAC,OAAO,CAAC,MAAe;QAC5B,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAc;QAC1B,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,YACU,UAAwB,EACxB,SAAuB;QADvB,eAAU,GAAV,UAAU,CAAc;QACxB,cAAS,GAAT,SAAS,CAAc;IAC9B,CAAC;IAEJ;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAgB;QACvB,oCAAoC;QACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE7C,sCAAsC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,OAAO,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,IAAoB;QAC/B,4CAA4C;QAC5C,MAAM,cAAc,GAAG;YACrB,GAAG,IAAI;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACjC,CAAC;QAEF,sCAAsC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,OAAO,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Filter rules - Strategy pattern for tool filtering
3
+ */
4
+ import type { CompiledRegex } from '../types.js';
5
+ import type { ToolDefinition } from '../../types/profile.js';
6
+ import type { OperationDetector } from '../operation/operation-detector.js';
7
+ /**
8
+ * Filter rule interface
9
+ */
10
+ export interface FilterRule {
11
+ matches(toolNameOrTool: string | ToolDefinition): boolean;
12
+ getReason(): string;
13
+ }
14
+ /**
15
+ * Exact name match rule
16
+ */
17
+ export declare class ExactMatchRule implements FilterRule {
18
+ private names;
19
+ private type;
20
+ constructor(names: Set<string>, type: 'allow' | 'deny');
21
+ matches(toolNameOrTool: string | ToolDefinition): boolean;
22
+ getReason(): string;
23
+ }
24
+ /**
25
+ * Regex pattern match rule
26
+ */
27
+ export declare class RegexMatchRule implements FilterRule {
28
+ private patterns;
29
+ private type;
30
+ constructor(patterns: CompiledRegex[], type: 'allow' | 'deny');
31
+ matches(toolNameOrTool: string | ToolDefinition): boolean;
32
+ getReason(): string;
33
+ }
34
+ /**
35
+ * Category match rule - matches based on operation categories
36
+ */
37
+ export declare class CategoryMatchRule implements FilterRule {
38
+ private allowedCategories;
39
+ private detector;
40
+ constructor(allowedCategories: Set<'list' | 'read'>, detector: OperationDetector);
41
+ matches(toolNameOrTool: string | ToolDefinition): boolean;
42
+ getReason(): string;
43
+ }
44
+ //# sourceMappingURL=filter-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-rules.d.ts","sourceRoot":"","sources":["../../../../src/tool-filter/filter/filter-rules.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC;IAC1D,SAAS,IAAI,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAE7C,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,IAAI;gBADJ,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,IAAI,EAAE,OAAO,GAAG,MAAM;IAGhC,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO;IAKzD,SAAS,IAAI,MAAM;CAGpB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAE7C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,IAAI;gBADJ,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,EAAE,OAAO,GAAG,MAAM;IAGhC,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO;IAKzD,SAAS,IAAI,MAAM;CAGpB;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAEhD,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,QAAQ;gBADR,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EACvC,QAAQ,EAAE,iBAAiB;IAGrC,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO;IA8BzD,SAAS,IAAI,MAAM;CAIpB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Filter rules - Strategy pattern for tool filtering
3
+ */
4
+ /**
5
+ * Exact name match rule
6
+ */
7
+ export class ExactMatchRule {
8
+ constructor(names, type) {
9
+ this.names = names;
10
+ this.type = type;
11
+ }
12
+ matches(toolNameOrTool) {
13
+ const toolName = typeof toolNameOrTool === 'string' ? toolNameOrTool : toolNameOrTool.name;
14
+ return this.names.has(toolName);
15
+ }
16
+ getReason() {
17
+ return `${this.type}_list`;
18
+ }
19
+ }
20
+ /**
21
+ * Regex pattern match rule
22
+ */
23
+ export class RegexMatchRule {
24
+ constructor(patterns, type) {
25
+ this.patterns = patterns;
26
+ this.type = type;
27
+ }
28
+ matches(toolNameOrTool) {
29
+ const toolName = typeof toolNameOrTool === 'string' ? toolNameOrTool : toolNameOrTool.name;
30
+ return this.patterns.some(pattern => pattern.test(toolName));
31
+ }
32
+ getReason() {
33
+ return `${this.type}_regex`;
34
+ }
35
+ }
36
+ /**
37
+ * Category match rule - matches based on operation categories
38
+ */
39
+ export class CategoryMatchRule {
40
+ constructor(allowedCategories, detector) {
41
+ this.allowedCategories = allowedCategories;
42
+ this.detector = detector;
43
+ }
44
+ matches(toolNameOrTool) {
45
+ // This rule only works with ToolDefinition objects
46
+ if (typeof toolNameOrTool === 'string') {
47
+ return false;
48
+ }
49
+ const tool = toolNameOrTool;
50
+ const categories = this.detector.detectCategories(tool);
51
+ // Check if tool matches allowed categories
52
+ const hasListAndRead = this.allowedCategories.has('list') && this.allowedCategories.has('read');
53
+ if (hasListAndRead) {
54
+ // If both list and read are allowed, accept tools that are list-only, read-only, or both
55
+ // But NOT tools that have modify operations
56
+ return categories.isList || categories.isRead;
57
+ }
58
+ // Single category - must match exactly (no mixing)
59
+ if (this.allowedCategories.has('list')) {
60
+ return categories.isList && !categories.isRead;
61
+ }
62
+ if (this.allowedCategories.has('read')) {
63
+ return categories.isRead && !categories.isList;
64
+ }
65
+ return false;
66
+ }
67
+ getReason() {
68
+ const cats = Array.from(this.allowedCategories).sort();
69
+ return `allow_categories:${cats.join(',')}`;
70
+ }
71
+ }
72
+ //# sourceMappingURL=filter-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-rules.js","sourceRoot":"","sources":["../../../../src/tool-filter/filter/filter-rules.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,YACU,KAAkB,EAClB,IAAsB;QADtB,UAAK,GAAL,KAAK,CAAa;QAClB,SAAI,GAAJ,IAAI,CAAkB;IAC7B,CAAC;IAEJ,OAAO,CAAC,cAAuC;QAC7C,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;QAC3F,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,YACU,QAAyB,EACzB,IAAsB;QADtB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,SAAI,GAAJ,IAAI,CAAkB;IAC7B,CAAC;IAEJ,OAAO,CAAC,cAAuC;QAC7C,MAAM,QAAQ,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;QAC3F,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,SAAS;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,QAAQ,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B,YACU,iBAAuC,EACvC,QAA2B;QAD3B,sBAAiB,GAAjB,iBAAiB,CAAsB;QACvC,aAAQ,GAAR,QAAQ,CAAmB;IAClC,CAAC;IAEJ,OAAO,CAAC,cAAuC;QAC7C,mDAAmD;QACnD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAExD,2CAA2C;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEhG,IAAI,cAAc,EAAE,CAAC;YACnB,yFAAyF;YACzF,4CAA4C;YAC5C,OAAO,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAChD,CAAC;QAED,mDAAmD;QACnD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACjD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS;QACP,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,oBAAoB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Global tool filter - applies environment-based filtering
3
+ */
4
+ import type { ToolDefinition } from '../../types/profile.js';
5
+ import type { ToolFilterConfig } from '../types.js';
6
+ import type { Logger } from '../../core/logger.js';
7
+ import type { OperationDetector } from '../operation/operation-detector.js';
8
+ export interface GlobalToolFilterResult {
9
+ allowed: ToolDefinition[];
10
+ removed: ToolDefinition[];
11
+ reasons: Map<string, string[]>;
12
+ summary: {
13
+ originalCount: number;
14
+ allowedCount: number;
15
+ removedCount: number;
16
+ };
17
+ }
18
+ /**
19
+ * Applies global tool filtering based on environment configuration
20
+ */
21
+ export declare class GlobalToolFilter {
22
+ private config;
23
+ private logger;
24
+ private detector?;
25
+ private engine;
26
+ constructor(config: ToolFilterConfig, logger: Logger, detector?: OperationDetector | undefined);
27
+ /**
28
+ * Apply filter to tools
29
+ */
30
+ apply(tools: ToolDefinition[]): GlobalToolFilterResult;
31
+ /**
32
+ * Build filter engine from config
33
+ */
34
+ private buildEngine;
35
+ /**
36
+ * Log filtered tool
37
+ */
38
+ private logFiltered;
39
+ }
40
+ //# sourceMappingURL=global-tool-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-tool-filter.d.ts","sourceRoot":"","sources":["../../../../src/tool-filter/filter/global-tool-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAI5E,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC;IALnB,OAAO,CAAC,MAAM,CAAe;gBAGnB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,YAAA;IAKtC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,sBAAsB;IA+BtD;;OAEG;IACH,OAAO,CAAC,WAAW;IAsCnB;;OAEG;IACH,OAAO,CAAC,WAAW;CAQpB"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Global tool filter - applies environment-based filtering
3
+ */
4
+ import { FilterEngine } from './filter-engine.js';
5
+ import { ExactMatchRule, RegexMatchRule, CategoryMatchRule } from './filter-rules.js';
6
+ /**
7
+ * Applies global tool filtering based on environment configuration
8
+ */
9
+ export class GlobalToolFilter {
10
+ constructor(config, logger, detector) {
11
+ this.config = config;
12
+ this.logger = logger;
13
+ this.detector = detector;
14
+ this.engine = this.buildEngine(config);
15
+ }
16
+ /**
17
+ * Apply filter to tools
18
+ */
19
+ apply(tools) {
20
+ const allowed = [];
21
+ const removed = [];
22
+ const reasons = new Map();
23
+ for (const tool of tools) {
24
+ const result = this.engine.evaluateTool(tool);
25
+ if (result.allowed) {
26
+ allowed.push(tool);
27
+ }
28
+ else {
29
+ removed.push(tool);
30
+ if (result.reason) {
31
+ reasons.set(tool.name, [result.reason]);
32
+ }
33
+ this.logFiltered(tool, result.reason);
34
+ }
35
+ }
36
+ return {
37
+ allowed,
38
+ removed,
39
+ reasons,
40
+ summary: {
41
+ originalCount: tools.length,
42
+ allowedCount: allowed.length,
43
+ removedCount: removed.length
44
+ }
45
+ };
46
+ }
47
+ /**
48
+ * Build filter engine from config
49
+ */
50
+ buildEngine(config) {
51
+ const allowRules = [];
52
+ const denyRules = [];
53
+ // Build allow rules
54
+ if (config.allowList.size > 0) {
55
+ allowRules.push(new ExactMatchRule(config.allowList, 'allow'));
56
+ }
57
+ if (config.allowRegex.length > 0) {
58
+ allowRules.push(new RegexMatchRule(config.allowRegex, 'allow'));
59
+ }
60
+ // Add CategoryMatchRule if categories configured and detector available
61
+ if (config.allowCategories.size > 0) {
62
+ if (this.detector) {
63
+ allowRules.push(new CategoryMatchRule(config.allowCategories, this.detector));
64
+ }
65
+ else {
66
+ // Fail-safe: if allowCategories is set but detector is not available, throw error
67
+ throw new Error('MCP4_TOOL_FILTER_ALLOW_CATEGORIES is set but OperationDetector is not available. ' +
68
+ 'This is a configuration error - category filtering requires OpenAPI parser.');
69
+ }
70
+ }
71
+ // Build deny rules
72
+ if (config.denyList.size > 0) {
73
+ denyRules.push(new ExactMatchRule(config.denyList, 'deny'));
74
+ }
75
+ if (config.denyRegex.length > 0) {
76
+ denyRules.push(new RegexMatchRule(config.denyRegex, 'deny'));
77
+ }
78
+ return new FilterEngine(allowRules, denyRules);
79
+ }
80
+ /**
81
+ * Log filtered tool
82
+ */
83
+ logFiltered(tool, reason) {
84
+ this.logger.info('Tool filtered', {
85
+ filter_source: 'env',
86
+ tool: tool.name,
87
+ action: 'removed',
88
+ reason: reason || 'unknown'
89
+ });
90
+ }
91
+ }
92
+ //# sourceMappingURL=global-tool-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-tool-filter.js","sourceRoot":"","sources":["../../../../src/tool-filter/filter/global-tool-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Session tool filter - applies per-session filtering
3
+ */
4
+ import type { ToolDefinition } from '../../types/profile.js';
5
+ import type { SessionToolFilterRequest } from '../types.js';
6
+ import type { OperationDetector } from '../operation/operation-detector.js';
7
+ export interface SessionToolFilterResult {
8
+ allowedToolNames: Set<string>;
9
+ reasons: Map<string, string[]>;
10
+ normalizedHeader: string;
11
+ }
12
+ /**
13
+ * Applies session-based tool filtering from X-Mcp4-Tools header
14
+ */
15
+ export declare class SessionToolFilter {
16
+ private request;
17
+ private detector?;
18
+ private engine;
19
+ constructor(request: SessionToolFilterRequest, detector?: OperationDetector | undefined);
20
+ /**
21
+ * Apply filter to tools
22
+ */
23
+ apply(tools: ToolDefinition[]): SessionToolFilterResult;
24
+ /**
25
+ * Build filter engine from request
26
+ */
27
+ private buildEngine;
28
+ }
29
+ //# sourceMappingURL=session-tool-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tool-filter.d.ts","sourceRoot":"","sources":["../../../../src/tool-filter/filter/session-tool-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAI5E,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ,CAAC;IAJnB,OAAO,CAAC,MAAM,CAAe;gBAGnB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,CAAC,EAAE,iBAAiB,YAAA;IAKtC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,uBAAuB;IAkCvD;;OAEG;IACH,OAAO,CAAC,WAAW;CAuBpB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Session tool filter - applies per-session filtering
3
+ */
4
+ import { FilterEngine } from './filter-engine.js';
5
+ import { ExactMatchRule, RegexMatchRule, CategoryMatchRule } from './filter-rules.js';
6
+ /**
7
+ * Applies session-based tool filtering from X-Mcp4-Tools header
8
+ */
9
+ export class SessionToolFilter {
10
+ constructor(request, detector) {
11
+ this.request = request;
12
+ this.detector = detector;
13
+ this.engine = this.buildEngine(request);
14
+ }
15
+ /**
16
+ * Apply filter to tools
17
+ */
18
+ apply(tools) {
19
+ const allowedToolNames = new Set();
20
+ const reasons = new Map();
21
+ // If no rules, allow all
22
+ if (!this.request.hasRules) {
23
+ for (const tool of tools) {
24
+ allowedToolNames.add(tool.name);
25
+ }
26
+ return {
27
+ allowedToolNames,
28
+ reasons,
29
+ normalizedHeader: this.request.normalizedHeader
30
+ };
31
+ }
32
+ // Apply rules
33
+ for (const tool of tools) {
34
+ const result = this.engine.evaluateTool(tool);
35
+ if (result.allowed) {
36
+ allowedToolNames.add(tool.name);
37
+ }
38
+ else {
39
+ reasons.set(tool.name, ['session_filter']);
40
+ }
41
+ }
42
+ return {
43
+ allowedToolNames,
44
+ reasons,
45
+ normalizedHeader: this.request.normalizedHeader
46
+ };
47
+ }
48
+ /**
49
+ * Build filter engine from request
50
+ */
51
+ buildEngine(request) {
52
+ const allowRules = [];
53
+ if (request.exactNames.size > 0) {
54
+ allowRules.push(new ExactMatchRule(request.exactNames, 'allow'));
55
+ }
56
+ if (request.regexPatterns.length > 0) {
57
+ allowRules.push(new RegexMatchRule(request.regexPatterns, 'allow'));
58
+ }
59
+ if (request.allowCategories.size > 0) {
60
+ if (!this.detector) {
61
+ throw new Error('X-Mcp4-Tools includes _allow_list/_allow_read but OperationDetector is not available. ' +
62
+ 'Category-based session tool filtering requires OpenAPI parser.');
63
+ }
64
+ allowRules.push(new CategoryMatchRule(request.allowCategories, this.detector));
65
+ }
66
+ return new FilterEngine(allowRules, []);
67
+ }
68
+ }
69
+ //# sourceMappingURL=session-tool-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tool-filter.js","sourceRoot":"","sources":["../../../../src/tool-filter/filter/session-tool-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtF;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAG5B,YACU,OAAiC,EACjC,QAA4B;QAD5B,YAAO,GAAP,OAAO,CAA0B;QACjC,aAAQ,GAAR,QAAQ,CAAoB;QAEpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAuB;QAC3B,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE5C,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,OAAO;gBACL,gBAAgB;gBAChB,OAAO;gBACP,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;aAChD,CAAC;QACJ,CAAC;QAED,cAAc;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO;YACL,gBAAgB;YAChB,OAAO;YACP,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;SAChD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAiC;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,wFAAwF;oBACxF,gEAAgE,CACjE,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tool Filter Module - Public API
3
+ *
4
+ * This module provides tool filtering functionality for MCP servers.
5
+ */
6
+ export { RegexValidator } from './regex/regex-validator.js';
7
+ export { RegexCompiler } from './regex/regex-compiler.js';
8
+ export { OperationClassifier } from './operation/operation-classifier.js';
9
+ export { OpenAPIOperationResolver } from './operation/operation-resolver.js';
10
+ export { OperationDetector } from './operation/operation-detector.js';
11
+ export { FilterEngine, FilterResult } from './filter/filter-engine.js';
12
+ export { ExactMatchRule, RegexMatchRule, CategoryMatchRule } from './filter/filter-rules.js';
13
+ export type { FilterRule } from './filter/filter-rules.js';
14
+ export { GlobalToolFilter } from './filter/global-tool-filter.js';
15
+ export type { GlobalToolFilterResult } from './filter/global-tool-filter.js';
16
+ export { SessionToolFilter } from './filter/session-tool-filter.js';
17
+ export type { SessionToolFilterResult } from './filter/session-tool-filter.js';
18
+ export { EnvConfigParser } from './config/env-config-parser.js';
19
+ export { HeaderConfigParser } from './config/header-config-parser.js';
20
+ export { ToolFilterService } from './integration/tool-filter-service.js';
21
+ export { normalizeToolName } from './utils.js';
22
+ export { normalizeToolFilterHeaderValue, parseSessionToolFilterHeader, applySessionToolFilter, type SessionToolFilter as SessionToolFilterCompat } from './compat.js';
23
+ export type { ValidationResult, CompiledRegex, ToolFilterConfig, ToolFilterResult, SessionToolFilterRequest, SessionToolFilter as SessionToolFilterLegacy, OperationResolver, OperationCategory, ToolFilterCategory, ToolCategories } from './types.js';
24
+ export { InvalidRegexError, ConfigurationError, ValidationError } from './errors.js';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tool-filter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG/E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,iBAAiB,IAAI,uBAAuB,EAClD,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,IAAI,uBAAuB,EAC5C,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Tool Filter Module - Public API
3
+ *
4
+ * This module provides tool filtering functionality for MCP servers.
5
+ */
6
+ // Regex validation and compilation
7
+ export { RegexValidator } from './regex/regex-validator.js';
8
+ export { RegexCompiler } from './regex/regex-compiler.js';
9
+ // Operation classification
10
+ export { OperationClassifier } from './operation/operation-classifier.js';
11
+ export { OpenAPIOperationResolver } from './operation/operation-resolver.js';
12
+ export { OperationDetector } from './operation/operation-detector.js';
13
+ // Filter engine and rules
14
+ export { FilterEngine, FilterResult } from './filter/filter-engine.js';
15
+ export { ExactMatchRule, RegexMatchRule, CategoryMatchRule } from './filter/filter-rules.js';
16
+ // Filter implementations
17
+ export { GlobalToolFilter } from './filter/global-tool-filter.js';
18
+ export { SessionToolFilter } from './filter/session-tool-filter.js';
19
+ // Config parsers
20
+ export { EnvConfigParser } from './config/env-config-parser.js';
21
+ export { HeaderConfigParser } from './config/header-config-parser.js';
22
+ // Integration service
23
+ export { ToolFilterService } from './integration/tool-filter-service.js';
24
+ // Utilities
25
+ export { normalizeToolName } from './utils.js';
26
+ // Compatibility functions (for legacy code)
27
+ export { normalizeToolFilterHeaderValue, parseSessionToolFilterHeader, applySessionToolFilter } from './compat.js';
28
+ // Errors
29
+ export { InvalidRegexError, ConfigurationError, ValidationError } from './errors.js';
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tool-filter/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mCAAmC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,2BAA2B;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7F,yBAAyB;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,sBAAsB;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,4CAA4C;AAC5C,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EAEvB,MAAM,aAAa,CAAC;AAgBrB,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Tool Filter Service - orchestrates all filtering components
3
+ */
4
+ import type { ToolDefinition } from '../../types/profile.js';
5
+ import type { Logger } from '../../core/logger.js';
6
+ import type { EnvConfigParser } from '../config/env-config-parser.js';
7
+ import type { HeaderConfigParser } from '../config/header-config-parser.js';
8
+ import type { OperationDetector } from '../operation/operation-detector.js';
9
+ import type { SessionToolFilterResult } from '../filter/session-tool-filter.js';
10
+ /**
11
+ * Service that orchestrates tool filtering from environment and headers
12
+ */
13
+ export declare class ToolFilterService {
14
+ private envParser;
15
+ private headerParser;
16
+ private logger;
17
+ private detector?;
18
+ constructor(envParser: EnvConfigParser, headerParser: HeaderConfigParser, logger: Logger, detector?: OperationDetector | undefined);
19
+ /**
20
+ * Apply global filtering based on environment variables
21
+ *
22
+ * @param tools - Tools to filter
23
+ * @param env - Environment variables (process.env)
24
+ * @returns Filtered tools (or original if no config)
25
+ */
26
+ applyGlobalFilter(tools: ToolDefinition[], env: NodeJS.ProcessEnv): ToolDefinition[];
27
+ /**
28
+ * Apply session filtering based on X-Mcp4-Tools header
29
+ *
30
+ * @param tools - Tools to filter (typically after global filtering)
31
+ * @param headerValue - X-Mcp4-Tools header value
32
+ * @returns Session filter result with allowed tool names
33
+ */
34
+ applySessionFilter(tools: ToolDefinition[], headerValue: string): SessionToolFilterResult;
35
+ /**
36
+ * Check if tool is allowed in session
37
+ *
38
+ * @param toolName - Tool name to check
39
+ * @param sessionResult - Session filter result
40
+ * @returns true if tool is allowed
41
+ */
42
+ isToolAllowed(toolName: string, sessionResult: SessionToolFilterResult): boolean;
43
+ }
44
+ //# sourceMappingURL=tool-filter-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-filter-service.d.ts","sourceRoot":"","sources":["../../../../src/tool-filter/integration/tool-filter-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAIhF;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ,CAAC;gBAHT,SAAS,EAAE,eAAe,EAC1B,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,YAAA;IAGtC;;;;;;OAMG;IACH,iBAAiB,CACf,KAAK,EAAE,cAAc,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,cAAc,EAAE;IAmBnB;;;;;;OAMG;IACH,kBAAkB,CAChB,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,uBAAuB;IAgB1B;;;;;;OAMG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,GAAG,OAAO;CAGjF"}