@machina.ai/openapi-contract-tester 2.1.0

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 (431) hide show
  1. package/.env.example +91 -0
  2. package/README.md +472 -0
  3. package/dist/ai-engine/assertion-generator.d.ts +48 -0
  4. package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
  5. package/dist/ai-engine/assertion-generator.js +166 -0
  6. package/dist/ai-engine/assertion-generator.js.map +1 -0
  7. package/dist/ai-engine/context-data-generator.d.ts +38 -0
  8. package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
  9. package/dist/ai-engine/context-data-generator.js +146 -0
  10. package/dist/ai-engine/context-data-generator.js.map +1 -0
  11. package/dist/ai-engine/dataflow-detector.d.ts +53 -0
  12. package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
  13. package/dist/ai-engine/dataflow-detector.js +217 -0
  14. package/dist/ai-engine/dataflow-detector.js.map +1 -0
  15. package/dist/ai-engine/dependency-detector.d.ts +52 -0
  16. package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
  17. package/dist/ai-engine/dependency-detector.js +241 -0
  18. package/dist/ai-engine/dependency-detector.js.map +1 -0
  19. package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
  20. package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
  21. package/dist/ai-engine/edge-case-suggester.js +177 -0
  22. package/dist/ai-engine/edge-case-suggester.js.map +1 -0
  23. package/dist/ai-engine/index.d.ts +13 -0
  24. package/dist/ai-engine/index.d.ts.map +1 -0
  25. package/dist/ai-engine/index.js +13 -0
  26. package/dist/ai-engine/index.js.map +1 -0
  27. package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
  28. package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
  29. package/dist/analyzers/ai-failure-analyzer.js +220 -0
  30. package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
  31. package/dist/analyzers/comparison-utils.d.ts +31 -0
  32. package/dist/analyzers/comparison-utils.d.ts.map +1 -0
  33. package/dist/analyzers/comparison-utils.js +85 -0
  34. package/dist/analyzers/comparison-utils.js.map +1 -0
  35. package/dist/analyzers/context-analyzer.d.ts +49 -0
  36. package/dist/analyzers/context-analyzer.d.ts.map +1 -0
  37. package/dist/analyzers/context-analyzer.js +292 -0
  38. package/dist/analyzers/context-analyzer.js.map +1 -0
  39. package/dist/analyzers/dependency-analyzer.d.ts +44 -0
  40. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  41. package/dist/analyzers/dependency-analyzer.js +313 -0
  42. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  43. package/dist/analyzers/failure-analyzer.d.ts +122 -0
  44. package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
  45. package/dist/analyzers/failure-analyzer.js +140 -0
  46. package/dist/analyzers/failure-analyzer.js.map +1 -0
  47. package/dist/analyzers/failure-detectors/index.d.ts +33 -0
  48. package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
  49. package/dist/analyzers/failure-detectors/index.js +164 -0
  50. package/dist/analyzers/failure-detectors/index.js.map +1 -0
  51. package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
  52. package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
  53. package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
  54. package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
  55. package/dist/analyzers/index.d.ts +10 -0
  56. package/dist/analyzers/index.d.ts.map +1 -0
  57. package/dist/analyzers/index.js +10 -0
  58. package/dist/analyzers/index.js.map +1 -0
  59. package/dist/analyzers/semantic-matcher.d.ts +123 -0
  60. package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
  61. package/dist/analyzers/semantic-matcher.js +297 -0
  62. package/dist/analyzers/semantic-matcher.js.map +1 -0
  63. package/dist/analyzers/source-comparator.d.ts +177 -0
  64. package/dist/analyzers/source-comparator.d.ts.map +1 -0
  65. package/dist/analyzers/source-comparator.js +225 -0
  66. package/dist/analyzers/source-comparator.js.map +1 -0
  67. package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
  68. package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
  69. package/dist/business-rules/business-rules-analyzer.js +363 -0
  70. package/dist/business-rules/business-rules-analyzer.js.map +1 -0
  71. package/dist/business-rules/business-rules-generator.d.ts +78 -0
  72. package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
  73. package/dist/business-rules/business-rules-generator.js +357 -0
  74. package/dist/business-rules/business-rules-generator.js.map +1 -0
  75. package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
  76. package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
  77. package/dist/business-rules/extractors/rule-extractors.js +189 -0
  78. package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
  79. package/dist/business-rules/value-generators.d.ts +70 -0
  80. package/dist/business-rules/value-generators.d.ts.map +1 -0
  81. package/dist/business-rules/value-generators.js +142 -0
  82. package/dist/business-rules/value-generators.js.map +1 -0
  83. package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
  84. package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
  85. package/dist/executor/auth-providers/auth-header-builder.js +47 -0
  86. package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
  87. package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
  88. package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
  89. package/dist/executor/auth-providers/oauth2-provider.js +114 -0
  90. package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
  91. package/dist/executor/http-client.d.ts +133 -0
  92. package/dist/executor/http-client.d.ts.map +1 -0
  93. package/dist/executor/http-client.js +172 -0
  94. package/dist/executor/http-client.js.map +1 -0
  95. package/dist/executor/http-request-builder.d.ts +69 -0
  96. package/dist/executor/http-request-builder.d.ts.map +1 -0
  97. package/dist/executor/http-request-builder.js +140 -0
  98. package/dist/executor/http-request-builder.js.map +1 -0
  99. package/dist/executor/http-response-parser.d.ts +28 -0
  100. package/dist/executor/http-response-parser.d.ts.map +1 -0
  101. package/dist/executor/http-response-parser.js +74 -0
  102. package/dist/executor/http-response-parser.js.map +1 -0
  103. package/dist/executor/response-handler.d.ts +66 -0
  104. package/dist/executor/response-handler.d.ts.map +1 -0
  105. package/dist/executor/response-handler.js +135 -0
  106. package/dist/executor/response-handler.js.map +1 -0
  107. package/dist/executor/result-processor.d.ts +27 -0
  108. package/dist/executor/result-processor.d.ts.map +1 -0
  109. package/dist/executor/result-processor.js +140 -0
  110. package/dist/executor/result-processor.js.map +1 -0
  111. package/dist/executor/result-utils.d.ts +21 -0
  112. package/dist/executor/result-utils.d.ts.map +1 -0
  113. package/dist/executor/result-utils.js +29 -0
  114. package/dist/executor/result-utils.js.map +1 -0
  115. package/dist/executor/test-executor.d.ts +49 -0
  116. package/dist/executor/test-executor.d.ts.map +1 -0
  117. package/dist/executor/test-executor.js +226 -0
  118. package/dist/executor/test-executor.js.map +1 -0
  119. package/dist/executor/test-runner.d.ts +85 -0
  120. package/dist/executor/test-runner.d.ts.map +1 -0
  121. package/dist/executor/test-runner.js +177 -0
  122. package/dist/executor/test-runner.js.map +1 -0
  123. package/dist/executor/token-detector/index.d.ts +7 -0
  124. package/dist/executor/token-detector/index.d.ts.map +1 -0
  125. package/dist/executor/token-detector/index.js +7 -0
  126. package/dist/executor/token-detector/index.js.map +1 -0
  127. package/dist/executor/token-detector/token-detector.d.ts +64 -0
  128. package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
  129. package/dist/executor/token-detector/token-detector.js +140 -0
  130. package/dist/executor/token-detector/token-detector.js.map +1 -0
  131. package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
  132. package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
  133. package/dist/generators/business-rule-from-stories-generator.js +227 -0
  134. package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
  135. package/dist/generators/data/ai-data-generator.d.ts +23 -0
  136. package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
  137. package/dist/generators/data/ai-data-generator.js +41 -0
  138. package/dist/generators/data/ai-data-generator.js.map +1 -0
  139. package/dist/generators/data/base-generator.d.ts +121 -0
  140. package/dist/generators/data/base-generator.d.ts.map +1 -0
  141. package/dist/generators/data/base-generator.js +200 -0
  142. package/dist/generators/data/base-generator.js.map +1 -0
  143. package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
  144. package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
  145. package/dist/generators/data/heuristic-data-generator.js +49 -0
  146. package/dist/generators/data/heuristic-data-generator.js.map +1 -0
  147. package/dist/generators/data/index.d.ts +48 -0
  148. package/dist/generators/data/index.d.ts.map +1 -0
  149. package/dist/generators/data/index.js +201 -0
  150. package/dist/generators/data/index.js.map +1 -0
  151. package/dist/generators/data/schema-walker.d.ts +45 -0
  152. package/dist/generators/data/schema-walker.d.ts.map +1 -0
  153. package/dist/generators/data/schema-walker.js +103 -0
  154. package/dist/generators/data/schema-walker.js.map +1 -0
  155. package/dist/generators/data/type-strategies.d.ts +79 -0
  156. package/dist/generators/data/type-strategies.d.ts.map +1 -0
  157. package/dist/generators/data/type-strategies.js +394 -0
  158. package/dist/generators/data/type-strategies.js.map +1 -0
  159. package/dist/generators/data-generator.d.ts +11 -0
  160. package/dist/generators/data-generator.d.ts.map +1 -0
  161. package/dist/generators/data-generator.js +11 -0
  162. package/dist/generators/data-generator.js.map +1 -0
  163. package/dist/generators/edge-case-generator.d.ts +55 -0
  164. package/dist/generators/edge-case-generator.d.ts.map +1 -0
  165. package/dist/generators/edge-case-generator.js +327 -0
  166. package/dist/generators/edge-case-generator.js.map +1 -0
  167. package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
  168. package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
  169. package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
  170. package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
  171. package/dist/generators/error-case-generator.d.ts +11 -0
  172. package/dist/generators/error-case-generator.d.ts.map +1 -0
  173. package/dist/generators/error-case-generator.js +11 -0
  174. package/dist/generators/error-case-generator.js.map +1 -0
  175. package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
  176. package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
  177. package/dist/generators/errors/auth-error-strategy.js +118 -0
  178. package/dist/generators/errors/auth-error-strategy.js.map +1 -0
  179. package/dist/generators/errors/business-error-strategy.d.ts +44 -0
  180. package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
  181. package/dist/generators/errors/business-error-strategy.js +152 -0
  182. package/dist/generators/errors/business-error-strategy.js.map +1 -0
  183. package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
  184. package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
  185. package/dist/generators/errors/error-strategy-factory.js +47 -0
  186. package/dist/generators/errors/error-strategy-factory.js.map +1 -0
  187. package/dist/generators/errors/error-strategy.d.ts +62 -0
  188. package/dist/generators/errors/error-strategy.d.ts.map +1 -0
  189. package/dist/generators/errors/error-strategy.js +69 -0
  190. package/dist/generators/errors/error-strategy.js.map +1 -0
  191. package/dist/generators/errors/index.d.ts +23 -0
  192. package/dist/generators/errors/index.d.ts.map +1 -0
  193. package/dist/generators/errors/index.js +73 -0
  194. package/dist/generators/errors/index.js.map +1 -0
  195. package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
  196. package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
  197. package/dist/generators/errors/validation-error-strategy.js +214 -0
  198. package/dist/generators/errors/validation-error-strategy.js.map +1 -0
  199. package/dist/generators/happy-path-generator.d.ts +93 -0
  200. package/dist/generators/happy-path-generator.d.ts.map +1 -0
  201. package/dist/generators/happy-path-generator.js +275 -0
  202. package/dist/generators/happy-path-generator.js.map +1 -0
  203. package/dist/generators/test-enricher.d.ts +44 -0
  204. package/dist/generators/test-enricher.d.ts.map +1 -0
  205. package/dist/generators/test-enricher.js +109 -0
  206. package/dist/generators/test-enricher.js.map +1 -0
  207. package/dist/index.d.ts +9 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +14 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/llm/ai-cache.d.ts +123 -0
  212. package/dist/llm/ai-cache.d.ts.map +1 -0
  213. package/dist/llm/ai-cache.js +220 -0
  214. package/dist/llm/ai-cache.js.map +1 -0
  215. package/dist/llm/ai-client.d.ts +92 -0
  216. package/dist/llm/ai-client.d.ts.map +1 -0
  217. package/dist/llm/ai-client.js +386 -0
  218. package/dist/llm/ai-client.js.map +1 -0
  219. package/dist/llm/data-generator-ai.d.ts +84 -0
  220. package/dist/llm/data-generator-ai.d.ts.map +1 -0
  221. package/dist/llm/data-generator-ai.js +284 -0
  222. package/dist/llm/data-generator-ai.js.map +1 -0
  223. package/dist/llm/index.d.ts +7 -0
  224. package/dist/llm/index.d.ts.map +1 -0
  225. package/dist/llm/index.js +7 -0
  226. package/dist/llm/index.js.map +1 -0
  227. package/dist/mcp/handlers/base-handler.d.ts +72 -0
  228. package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
  229. package/dist/mcp/handlers/base-handler.js +86 -0
  230. package/dist/mcp/handlers/base-handler.js.map +1 -0
  231. package/dist/mcp/handlers/compare-sources.d.ts +91 -0
  232. package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
  233. package/dist/mcp/handlers/compare-sources.js +182 -0
  234. package/dist/mcp/handlers/compare-sources.js.map +1 -0
  235. package/dist/mcp/handlers/export-results.d.ts +53 -0
  236. package/dist/mcp/handlers/export-results.d.ts.map +1 -0
  237. package/dist/mcp/handlers/export-results.js +132 -0
  238. package/dist/mcp/handlers/export-results.js.map +1 -0
  239. package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
  240. package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
  241. package/dist/mcp/handlers/export-to-postman.js +128 -0
  242. package/dist/mcp/handlers/export-to-postman.js.map +1 -0
  243. package/dist/mcp/handlers/generate-tests.d.ts +74 -0
  244. package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
  245. package/dist/mcp/handlers/generate-tests.js +519 -0
  246. package/dist/mcp/handlers/generate-tests.js.map +1 -0
  247. package/dist/mcp/handlers/index.d.ts +13 -0
  248. package/dist/mcp/handlers/index.d.ts.map +1 -0
  249. package/dist/mcp/handlers/index.js +12 -0
  250. package/dist/mcp/handlers/index.js.map +1 -0
  251. package/dist/mcp/handlers/run-tests.d.ts +89 -0
  252. package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
  253. package/dist/mcp/handlers/run-tests.js +233 -0
  254. package/dist/mcp/handlers/run-tests.js.map +1 -0
  255. package/dist/mcp/handlers/types.d.ts +61 -0
  256. package/dist/mcp/handlers/types.d.ts.map +1 -0
  257. package/dist/mcp/handlers/types.js +9 -0
  258. package/dist/mcp/handlers/types.js.map +1 -0
  259. package/dist/mcp/server.d.ts +64 -0
  260. package/dist/mcp/server.d.ts.map +1 -0
  261. package/dist/mcp/server.js +200 -0
  262. package/dist/mcp/server.js.map +1 -0
  263. package/dist/mcp/services/file-service.d.ts +66 -0
  264. package/dist/mcp/services/file-service.d.ts.map +1 -0
  265. package/dist/mcp/services/file-service.js +143 -0
  266. package/dist/mcp/services/file-service.js.map +1 -0
  267. package/dist/mcp/services/llm-service.d.ts +70 -0
  268. package/dist/mcp/services/llm-service.d.ts.map +1 -0
  269. package/dist/mcp/services/llm-service.js +189 -0
  270. package/dist/mcp/services/llm-service.js.map +1 -0
  271. package/dist/mcp/services/postman-service.d.ts +128 -0
  272. package/dist/mcp/services/postman-service.d.ts.map +1 -0
  273. package/dist/mcp/services/postman-service.js +266 -0
  274. package/dist/mcp/services/postman-service.js.map +1 -0
  275. package/dist/mcp/services/report-service.d.ts +81 -0
  276. package/dist/mcp/services/report-service.d.ts.map +1 -0
  277. package/dist/mcp/services/report-service.js +210 -0
  278. package/dist/mcp/services/report-service.js.map +1 -0
  279. package/dist/mcp/services/spec-service.d.ts +58 -0
  280. package/dist/mcp/services/spec-service.d.ts.map +1 -0
  281. package/dist/mcp/services/spec-service.js +140 -0
  282. package/dist/mcp/services/spec-service.js.map +1 -0
  283. package/dist/parsers/endpoint-extractor.d.ts +32 -0
  284. package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
  285. package/dist/parsers/endpoint-extractor.js +160 -0
  286. package/dist/parsers/endpoint-extractor.js.map +1 -0
  287. package/dist/parsers/openapi-parser.d.ts +120 -0
  288. package/dist/parsers/openapi-parser.d.ts.map +1 -0
  289. package/dist/parsers/openapi-parser.js +257 -0
  290. package/dist/parsers/openapi-parser.js.map +1 -0
  291. package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
  292. package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
  293. package/dist/parsers/visitors/auth-visitor.js +116 -0
  294. package/dist/parsers/visitors/auth-visitor.js.map +1 -0
  295. package/dist/prd/index.d.ts +10 -0
  296. package/dist/prd/index.d.ts.map +1 -0
  297. package/dist/prd/index.js +10 -0
  298. package/dist/prd/index.js.map +1 -0
  299. package/dist/prd/prd-reader.d.ts +124 -0
  300. package/dist/prd/prd-reader.d.ts.map +1 -0
  301. package/dist/prd/prd-reader.js +308 -0
  302. package/dist/prd/prd-reader.js.map +1 -0
  303. package/dist/prd/prd-storage.d.ts +232 -0
  304. package/dist/prd/prd-storage.d.ts.map +1 -0
  305. package/dist/prd/prd-storage.js +129 -0
  306. package/dist/prd/prd-storage.js.map +1 -0
  307. package/dist/repairers/test-auto-repairer.d.ts +61 -0
  308. package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
  309. package/dist/repairers/test-auto-repairer.js +213 -0
  310. package/dist/repairers/test-auto-repairer.js.map +1 -0
  311. package/dist/reporters/comparison-report-generator.d.ts +58 -0
  312. package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
  313. package/dist/reporters/comparison-report-generator.js +369 -0
  314. package/dist/reporters/comparison-report-generator.js.map +1 -0
  315. package/dist/reporters/gherkin-formatter.d.ts +34 -0
  316. package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
  317. package/dist/reporters/gherkin-formatter.js +231 -0
  318. package/dist/reporters/gherkin-formatter.js.map +1 -0
  319. package/dist/reporters/html-report-generator.d.ts +174 -0
  320. package/dist/reporters/html-report-generator.d.ts.map +1 -0
  321. package/dist/reporters/html-report-generator.js +194 -0
  322. package/dist/reporters/html-report-generator.js.map +1 -0
  323. package/dist/reporters/report-charts.d.ts +23 -0
  324. package/dist/reporters/report-charts.d.ts.map +1 -0
  325. package/dist/reporters/report-charts.js +182 -0
  326. package/dist/reporters/report-charts.js.map +1 -0
  327. package/dist/reporters/report-sections.d.ts +34 -0
  328. package/dist/reporters/report-sections.d.ts.map +1 -0
  329. package/dist/reporters/report-sections.js +481 -0
  330. package/dist/reporters/report-sections.js.map +1 -0
  331. package/dist/reporters/report-styles.d.ts +12 -0
  332. package/dist/reporters/report-styles.d.ts.map +1 -0
  333. package/dist/reporters/report-styles.js +412 -0
  334. package/dist/reporters/report-styles.js.map +1 -0
  335. package/dist/reporters/report-test-details.d.ts +56 -0
  336. package/dist/reporters/report-test-details.d.ts.map +1 -0
  337. package/dist/reporters/report-test-details.js +328 -0
  338. package/dist/reporters/report-test-details.js.map +1 -0
  339. package/dist/reporters/report-utils.d.ts +40 -0
  340. package/dist/reporters/report-utils.d.ts.map +1 -0
  341. package/dist/reporters/report-utils.js +163 -0
  342. package/dist/reporters/report-utils.js.map +1 -0
  343. package/dist/types/ai-config.d.ts +63 -0
  344. package/dist/types/ai-config.d.ts.map +1 -0
  345. package/dist/types/ai-config.js +79 -0
  346. package/dist/types/ai-config.js.map +1 -0
  347. package/dist/types/business-rules.d.ts +235 -0
  348. package/dist/types/business-rules.d.ts.map +1 -0
  349. package/dist/types/business-rules.js +6 -0
  350. package/dist/types/business-rules.js.map +1 -0
  351. package/dist/types/config.d.ts +106 -0
  352. package/dist/types/config.d.ts.map +1 -0
  353. package/dist/types/config.js +6 -0
  354. package/dist/types/config.js.map +1 -0
  355. package/dist/types/core.d.ts +72 -0
  356. package/dist/types/core.d.ts.map +1 -0
  357. package/dist/types/core.js +6 -0
  358. package/dist/types/core.js.map +1 -0
  359. package/dist/types/index.d.ts +17 -0
  360. package/dist/types/index.d.ts.map +1 -0
  361. package/dist/types/index.js +10 -0
  362. package/dist/types/index.js.map +1 -0
  363. package/dist/types/openapi.d.ts +139 -0
  364. package/dist/types/openapi.d.ts.map +1 -0
  365. package/dist/types/openapi.js +6 -0
  366. package/dist/types/openapi.js.map +1 -0
  367. package/dist/types/pact.d.ts +101 -0
  368. package/dist/types/pact.d.ts.map +1 -0
  369. package/dist/types/pact.js +6 -0
  370. package/dist/types/pact.js.map +1 -0
  371. package/dist/types/reporting.d.ts +93 -0
  372. package/dist/types/reporting.d.ts.map +1 -0
  373. package/dist/types/reporting.js +6 -0
  374. package/dist/types/reporting.js.map +1 -0
  375. package/dist/types/test-case.d.ts +233 -0
  376. package/dist/types/test-case.d.ts.map +1 -0
  377. package/dist/types/test-case.js +6 -0
  378. package/dist/types/test-case.js.map +1 -0
  379. package/dist/types/test-execution.d.ts +80 -0
  380. package/dist/types/test-execution.d.ts.map +1 -0
  381. package/dist/types/test-execution.js +6 -0
  382. package/dist/types/test-execution.js.map +1 -0
  383. package/dist/utils/auth-generator.d.ts +30 -0
  384. package/dist/utils/auth-generator.d.ts.map +1 -0
  385. package/dist/utils/auth-generator.js +68 -0
  386. package/dist/utils/auth-generator.js.map +1 -0
  387. package/dist/utils/config.d.ts +181 -0
  388. package/dist/utils/config.d.ts.map +1 -0
  389. package/dist/utils/config.js +141 -0
  390. package/dist/utils/config.js.map +1 -0
  391. package/dist/utils/coverage-calculator.d.ts +81 -0
  392. package/dist/utils/coverage-calculator.d.ts.map +1 -0
  393. package/dist/utils/coverage-calculator.js +134 -0
  394. package/dist/utils/coverage-calculator.js.map +1 -0
  395. package/dist/utils/data-loader.d.ts +52 -0
  396. package/dist/utils/data-loader.d.ts.map +1 -0
  397. package/dist/utils/data-loader.js +192 -0
  398. package/dist/utils/data-loader.js.map +1 -0
  399. package/dist/utils/errors.d.ts +167 -0
  400. package/dist/utils/errors.d.ts.map +1 -0
  401. package/dist/utils/errors.js +257 -0
  402. package/dist/utils/errors.js.map +1 -0
  403. package/dist/utils/logger.d.ts +220 -0
  404. package/dist/utils/logger.d.ts.map +1 -0
  405. package/dist/utils/logger.js +325 -0
  406. package/dist/utils/logger.js.map +1 -0
  407. package/dist/utils/openapi-discovery.d.ts +31 -0
  408. package/dist/utils/openapi-discovery.d.ts.map +1 -0
  409. package/dist/utils/openapi-discovery.js +322 -0
  410. package/dist/utils/openapi-discovery.js.map +1 -0
  411. package/dist/utils/path-resolver.d.ts +101 -0
  412. package/dist/utils/path-resolver.d.ts.map +1 -0
  413. package/dist/utils/path-resolver.js +167 -0
  414. package/dist/utils/path-resolver.js.map +1 -0
  415. package/dist/utils/resilience.d.ts +181 -0
  416. package/dist/utils/resilience.d.ts.map +1 -0
  417. package/dist/utils/resilience.js +269 -0
  418. package/dist/utils/resilience.js.map +1 -0
  419. package/dist/validators/openapi-validator.d.ts +198 -0
  420. package/dist/validators/openapi-validator.d.ts.map +1 -0
  421. package/dist/validators/openapi-validator.js +349 -0
  422. package/dist/validators/openapi-validator.js.map +1 -0
  423. package/dist/validators/response-matcher.d.ts +84 -0
  424. package/dist/validators/response-matcher.d.ts.map +1 -0
  425. package/dist/validators/response-matcher.js +234 -0
  426. package/dist/validators/response-matcher.js.map +1 -0
  427. package/dist/validators/schema-validator.d.ts +174 -0
  428. package/dist/validators/schema-validator.d.ts.map +1 -0
  429. package/dist/validators/schema-validator.js +340 -0
  430. package/dist/validators/schema-validator.js.map +1 -0
  431. package/package.json +76 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Compare Sources Handler
3
+ *
4
+ * Handles the compare-sources tool which compares OpenAPI spec vs Code vs PRD.
5
+ *
6
+ * @module mcp/handlers/compare-sources
7
+ */
8
+ import { BaseToolHandler } from './base-handler.js';
9
+ import { compareSources } from '../../analyzers/source-comparator.js';
10
+ /**
11
+ * Handler for source comparison tool
12
+ */
13
+ export class CompareSourcesHandler extends BaseToolHandler {
14
+ specService;
15
+ fileService;
16
+ name = 'compare-sources';
17
+ description = 'STANDALONE TOOL — Compare an OpenAPI specification against actual code endpoints and/or a PRD ' +
18
+ 'to find gaps and inconsistencies. ' +
19
+ 'Use this when you want to verify that the spec matches what is actually implemented in the code, ' +
20
+ 'or that all PRD requirements are covered by the spec. ' +
21
+ 'Returns lists of: endpoints in spec but missing from code, endpoints in code but missing from spec, ' +
22
+ 'and endpoints that exist in both but differ (method, path, auth requirements). ' +
23
+ 'This is independent of generate-tests/run-tests — it does not execute any HTTP requests. ' +
24
+ 'Enable enableSemanticAnalysis=true for AI-powered matching that handles renamed or refactored endpoints.';
25
+ inputSchema = {
26
+ type: 'object',
27
+ properties: {
28
+ specPath: {
29
+ type: 'string',
30
+ description: 'Path to the OpenAPI specification file (YAML or JSON) to use as the source of truth. ' +
31
+ 'Example: "/project/api/openapi.yaml".'
32
+ },
33
+ codeEndpoints: {
34
+ type: 'array',
35
+ description: 'List of endpoints actually implemented in the source code. ' +
36
+ 'Each item must have at minimum "method" and "path". ' +
37
+ 'Example: [{ "method": "GET", "path": "/users/{id}", "sourceFile": "src/routes/users.ts", "requiresAuth": true }].',
38
+ items: {
39
+ type: 'object',
40
+ properties: {
41
+ method: {
42
+ type: 'string',
43
+ description: 'HTTP method in uppercase: GET, POST, PUT, PATCH, DELETE'
44
+ },
45
+ path: {
46
+ type: 'string',
47
+ description: 'Endpoint path with parameters in curly-brace format, e.g. /users/{id}'
48
+ },
49
+ sourceFile: {
50
+ type: 'string',
51
+ description: 'Source file where this endpoint is defined (optional, for traceability)'
52
+ },
53
+ handlerName: {
54
+ type: 'string',
55
+ description: 'Name of the handler function or controller method (optional)'
56
+ },
57
+ requiresAuth: {
58
+ type: 'boolean',
59
+ description: 'Whether the endpoint requires authentication (optional)'
60
+ },
61
+ parameters: {
62
+ type: 'array',
63
+ items: { type: 'string' },
64
+ description: 'Parameter names accepted by this endpoint (optional)'
65
+ }
66
+ },
67
+ required: ['method', 'path']
68
+ }
69
+ },
70
+ prdPath: {
71
+ type: 'string',
72
+ description: 'Path to a Product Requirements Document (Markdown, JSON, or YAML). ' +
73
+ 'When provided, the comparison also checks whether PRD requirements are covered by the spec. ' +
74
+ 'Example: "/project/docs/prd.md".'
75
+ },
76
+ format: {
77
+ type: 'string',
78
+ enum: ['json', 'html'],
79
+ description: 'Output format. ' +
80
+ 'json: returns comparison data as structured JSON (default, useful for programmatic use). ' +
81
+ 'html: generates an interactive HTML report saved to outputPath.'
82
+ },
83
+ outputPath: {
84
+ type: 'string',
85
+ description: 'File path where the HTML report is saved. Required when format="html". ' +
86
+ 'Example: "/tmp/comparison-report.html".'
87
+ },
88
+ workingDirectory: {
89
+ type: 'string',
90
+ description: 'Working directory used to resolve relative file paths for specPath and prdPath.'
91
+ },
92
+ enableSemanticAnalysis: {
93
+ type: 'boolean',
94
+ description: 'Enable AI-powered semantic matching (default: false). ' +
95
+ 'When true, uses an LLM to match endpoints that differ by name but serve the same purpose ' +
96
+ '(e.g., /user vs /users/{id}). Slower but more accurate for refactored codebases.'
97
+ }
98
+ },
99
+ required: ['specPath']
100
+ };
101
+ constructor(specService, fileService) {
102
+ super();
103
+ this.specService = specService;
104
+ this.fileService = fileService;
105
+ }
106
+ async handle(args) {
107
+ const params = args;
108
+ const format = params.format || 'json';
109
+ const enableSemanticAnalysis = params.enableSemanticAnalysis || false;
110
+ this.log.info('Comparing sources', {
111
+ specPath: params.specPath,
112
+ hasCodeEndpoints: !!params.codeEndpoints,
113
+ hasPrd: !!params.prdPath,
114
+ format,
115
+ enableSemanticAnalysis
116
+ });
117
+ try {
118
+ // Parse OpenAPI spec
119
+ const specPath = this.fileService.resolveFilePath(params.specPath, params.workingDirectory);
120
+ const spec = await this.specService.parseSpec(specPath);
121
+ const openApiEndpoints = await this.specService.extractEndpoints(spec);
122
+ this.log.info('Extracted OpenAPI endpoints', {
123
+ count: openApiEndpoints.length,
124
+ sample: openApiEndpoints.slice(0, 3).map(e => `${e.method} ${e.path}`)
125
+ });
126
+ // Load PRD if provided
127
+ let prd;
128
+ if (params.prdPath) {
129
+ prd = await this.fileService.loadPrd(params.prdPath, params.workingDirectory);
130
+ }
131
+ // Compare sources
132
+ const result = compareSources(openApiEndpoints, params.codeEndpoints, prd, { normalizePathParams: true, includeInfo: true });
133
+ // Run semantic analysis if enabled and code endpoints available
134
+ let semanticAnalysis;
135
+ if (enableSemanticAnalysis && params.codeEndpoints && params.codeEndpoints.length > 0) {
136
+ this.log.info('Running AI-powered semantic analysis');
137
+ try {
138
+ const { performSemanticAnalysis } = await import('../../analyzers/semantic-matcher.js');
139
+ semanticAnalysis = await performSemanticAnalysis(openApiEndpoints, params.codeEndpoints, prd);
140
+ this.log.info('Semantic analysis complete', {
141
+ semanticMatches: semanticAnalysis.semanticMatches.length,
142
+ semanticMismatches: semanticAnalysis.semanticMismatches.length,
143
+ businessRuleMappings: semanticAnalysis.businessRuleMappings.length
144
+ });
145
+ }
146
+ catch (error) {
147
+ this.log.warn('Semantic analysis failed', { error });
148
+ // Continue without semantic analysis - not fatal
149
+ }
150
+ }
151
+ // Add semantic analysis to result
152
+ const enhancedResult = semanticAnalysis
153
+ ? { ...result, semanticAnalysis }
154
+ : result;
155
+ // Handle output format
156
+ if (format === 'html') {
157
+ if (!params.outputPath) {
158
+ throw new Error('outputPath is required when format=html');
159
+ }
160
+ const { generateComparisonHtmlReport } = await import('../../reporters/comparison-report-generator.js');
161
+ const htmlContent = generateComparisonHtmlReport(enhancedResult);
162
+ await this.fileService.saveFile(params.outputPath, htmlContent, params.workingDirectory);
163
+ return this.formatResponse({
164
+ success: true,
165
+ format: 'html',
166
+ outputPath: params.outputPath,
167
+ summary: result.summary,
168
+ semanticAnalysisIncluded: !!semanticAnalysis
169
+ });
170
+ }
171
+ // Default: JSON format
172
+ return this.formatResponse({
173
+ success: true,
174
+ data: enhancedResult
175
+ });
176
+ }
177
+ catch (error) {
178
+ return this.formatError(error);
179
+ }
180
+ }
181
+ }
182
+ //# sourceMappingURL=compare-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-sources.js","sourceRoot":"","sources":["../../../src/mcp/handlers/compare-sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Export Results Handler
3
+ *
4
+ * Handles the export-results tool which formats and exports test results.
5
+ *
6
+ * @module mcp/handlers/export-results
7
+ */
8
+ import { BaseToolHandler } from './base-handler.js';
9
+ import type { ToolResponse } from './types.js';
10
+ import { ReportService } from '../services/report-service.js';
11
+ import { FileService } from '../services/file-service.js';
12
+ /**
13
+ * Handler for results export tool
14
+ */
15
+ export declare class ExportResultsHandler extends BaseToolHandler {
16
+ private reportService;
17
+ private fileService;
18
+ readonly name = "export-results";
19
+ readonly description: string;
20
+ readonly inputSchema: {
21
+ type: string;
22
+ properties: {
23
+ results: {
24
+ type: string;
25
+ description: string;
26
+ items: {
27
+ type: string;
28
+ };
29
+ };
30
+ format: {
31
+ type: string;
32
+ enum: string[];
33
+ description: string;
34
+ };
35
+ outputPath: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ includeCharts: {
40
+ type: string;
41
+ description: string;
42
+ };
43
+ title: {
44
+ type: string;
45
+ description: string;
46
+ };
47
+ };
48
+ required: string[];
49
+ };
50
+ constructor(reportService: ReportService, fileService: FileService);
51
+ handle(args: unknown): Promise<ToolResponse>;
52
+ }
53
+ //# sourceMappingURL=export-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/export-results.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK1D;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;IAiDrD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IAjDrB,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,WAAW,SAOiE;IAErF,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmClB;gBAGQ,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW;IAK5B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAgFnD"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Export Results Handler
3
+ *
4
+ * Handles the export-results tool which formats and exports test results.
5
+ *
6
+ * @module mcp/handlers/export-results
7
+ */
8
+ import { BaseToolHandler } from './base-handler.js';
9
+ import { analyzeFailures } from '../../analyzers/failure-analyzer.js';
10
+ import { analyzeFailuresWithAI } from '../../analyzers/ai-failure-analyzer.js';
11
+ /**
12
+ * Handler for results export tool
13
+ */
14
+ export class ExportResultsHandler extends BaseToolHandler {
15
+ reportService;
16
+ fileService;
17
+ name = 'export-results';
18
+ description = 'STEP 3 of 3 (optional) — Export test results as a formatted report file. ' +
19
+ 'Takes the "results" array from run-tests and produces an HTML dashboard, ' +
20
+ 'a Markdown summary, or a raw JSON file. ' +
21
+ 'HTML is the richest format: interactive charts, pass/fail breakdown by category, ' +
22
+ 'per-endpoint details, and automatic AI failure analysis (if LLM available). ' +
23
+ 'Use Markdown for GitHub PRs or documentation. Use JSON for programmatic processing. ' +
24
+ 'AI analysis runs automatically when there are failed tests and LLM is available.';
25
+ inputSchema = {
26
+ type: 'object',
27
+ properties: {
28
+ results: {
29
+ type: 'array',
30
+ description: 'Test results array returned by run-tests. Pass it directly here.',
31
+ items: { type: 'object' }
32
+ },
33
+ format: {
34
+ type: 'string',
35
+ enum: ['html', 'markdown', 'json'],
36
+ description: 'Output format. ' +
37
+ 'html: interactive dashboard with charts (best for human review). ' +
38
+ 'markdown: plain text summary (good for GitHub PRs or docs). ' +
39
+ 'json: raw structured data (good for CI/CD pipelines or further processing). ' +
40
+ 'Default: "html".'
41
+ },
42
+ outputPath: {
43
+ type: 'string',
44
+ description: 'Absolute or relative path where the report file will be saved. ' +
45
+ 'The file extension should match the format. ' +
46
+ 'Examples: "/tmp/report.html", "./results/report.md", "~/tests/output.json".'
47
+ },
48
+ includeCharts: {
49
+ type: 'boolean',
50
+ description: 'Include interactive Chart.js charts in the HTML report (default: true). ' +
51
+ 'Set to false for a lighter report without JavaScript dependencies.'
52
+ },
53
+ title: {
54
+ type: 'string',
55
+ description: 'Title shown at the top of the report (default: "Test Results"). ' +
56
+ 'Example: "User Service API — Sprint 24 Test Report".'
57
+ }
58
+ },
59
+ required: ['results', 'outputPath']
60
+ };
61
+ constructor(reportService, fileService) {
62
+ super();
63
+ this.reportService = reportService;
64
+ this.fileService = fileService;
65
+ }
66
+ async handle(args) {
67
+ const params = args;
68
+ const format = params.format || 'html';
69
+ this.log.info('Exporting results', {
70
+ resultCount: params.results.length,
71
+ format,
72
+ outputPath: params.outputPath
73
+ });
74
+ try {
75
+ // Auto-detect failed tests and run AI analysis if available
76
+ let failureAnalysis;
77
+ const failedTests = params.results.filter(r => r.status === 'failed');
78
+ if (failedTests.length > 0) {
79
+ this.log.info('Running automatic failure analysis', { failedCount: failedTests.length });
80
+ // Step 1: Heuristic analysis (structured data)
81
+ const structuredAnalysis = analyzeFailures(failedTests);
82
+ // Step 2: AI analysis (human-readable insights) - automatic
83
+ this.log.info('Running AI analysis on failures (automatic)');
84
+ failureAnalysis = await analyzeFailuresWithAI(structuredAnalysis);
85
+ this.log.info('AI analysis complete', {
86
+ recommendationsCount: failureAnalysis.recommendations?.length || 0,
87
+ aiEnabled: failureAnalysis.recommendations && failureAnalysis.recommendations.length > 0
88
+ });
89
+ }
90
+ let content;
91
+ // Generate report based on format
92
+ if (format === 'html') {
93
+ content = this.reportService.generateHTML(params.results, {
94
+ title: params.title,
95
+ includeCharts: params.includeCharts !== false,
96
+ includeFullDetails: true,
97
+ aiAnalysis: failureAnalysis
98
+ });
99
+ }
100
+ else if (format === 'markdown') {
101
+ content = this.reportService.generateMarkdown(params.results);
102
+ // Add analysis to content for markdown
103
+ if (failureAnalysis) {
104
+ content += `\n\n## Failure Analysis\n\`\`\`json\n${JSON.stringify(failureAnalysis, null, 2)}\n\`\`\``;
105
+ }
106
+ }
107
+ else {
108
+ content = this.reportService.generateJSON(params.results);
109
+ }
110
+ // Save file
111
+ await this.fileService.saveFile(params.outputPath, content);
112
+ this.log.info('Results exported successfully', {
113
+ format,
114
+ outputPath: params.outputPath,
115
+ size: content.length
116
+ });
117
+ return this.formatResponse({
118
+ success: true,
119
+ format,
120
+ outputPath: params.outputPath,
121
+ size: content.length,
122
+ summary: this.reportService.calculateSummary(params.results),
123
+ aiAnalysisIncluded: !!failureAnalysis,
124
+ failedTests: failedTests.length
125
+ });
126
+ }
127
+ catch (error) {
128
+ return this.formatError(error);
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=export-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-results.js","sourceRoot":"","sources":["../../../src/mcp/handlers/export-results.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Export to Postman Handler
3
+ *
4
+ * Handles the export-to-postman tool which converts test cases to Postman Collection v2.1.
5
+ *
6
+ * @module mcp/handlers/export-to-postman
7
+ */
8
+ import { BaseToolHandler } from './base-handler.js';
9
+ import type { ToolResponse } from './types.js';
10
+ import { PostmanService } from '../services/postman-service.js';
11
+ import { FileService } from '../services/file-service.js';
12
+ /**
13
+ * Handler for Postman export tool
14
+ */
15
+ export declare class ExportToPostmanHandler extends BaseToolHandler {
16
+ private postmanService;
17
+ private fileService;
18
+ readonly name = "export-to-postman";
19
+ readonly description: string;
20
+ readonly inputSchema: {
21
+ type: string;
22
+ properties: {
23
+ tests: {
24
+ type: string;
25
+ description: string;
26
+ items: {
27
+ type: string;
28
+ };
29
+ };
30
+ outputPath: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ baseUrl: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ collectionName: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ includeTests: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ groupByCategory: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ auth: {
51
+ type: string;
52
+ description: string;
53
+ additionalProperties: boolean;
54
+ };
55
+ };
56
+ required: string[];
57
+ };
58
+ constructor(postmanService: PostmanService, fileService: FileService);
59
+ handle(args: unknown): Promise<ToolResponse>;
60
+ /**
61
+ * Counts total requests in the collection (including nested folders)
62
+ */
63
+ private countRequests;
64
+ }
65
+ //# sourceMappingURL=export-to-postman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-to-postman.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/export-to-postman.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;IAsDvD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IAtDrB,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,WAAW,SAKwE;IAE5F,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0ClB;gBAGQ,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAK5B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAuDlD;;OAEG;IACH,OAAO,CAAC,aAAa;CAoBtB"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Export to Postman Handler
3
+ *
4
+ * Handles the export-to-postman tool which converts test cases to Postman Collection v2.1.
5
+ *
6
+ * @module mcp/handlers/export-to-postman
7
+ */
8
+ import { BaseToolHandler } from './base-handler.js';
9
+ /**
10
+ * Handler for Postman export tool
11
+ */
12
+ export class ExportToPostmanHandler extends BaseToolHandler {
13
+ postmanService;
14
+ fileService;
15
+ name = 'export-to-postman';
16
+ description = 'OPTIONAL TOOL — Export test cases as a Postman Collection v2.1 (compatible with Newman). ' +
17
+ 'Takes the "tests" array from generate-tests and produces a .postman_collection.json file ' +
18
+ 'that can be imported into Postman or executed with Newman CLI. ' +
19
+ 'Each test becomes a request in the collection with pre-configured method, URL, headers, body, and tests. ' +
20
+ 'Use this to integrate with existing Postman workflows or run tests via Newman in CI/CD.';
21
+ inputSchema = {
22
+ type: 'object',
23
+ properties: {
24
+ tests: {
25
+ type: 'array',
26
+ description: 'Test cases array returned by generate-tests. Pass it directly here.',
27
+ items: { type: 'object' }
28
+ },
29
+ outputPath: {
30
+ type: 'string',
31
+ description: 'Path where the Postman collection JSON file will be saved. ' +
32
+ 'Example: "./postman-collection.json" or "/tmp/api-tests.postman_collection.json".'
33
+ },
34
+ baseUrl: {
35
+ type: 'string',
36
+ description: 'Base URL of the API (e.g., "https://api.example.com"). ' +
37
+ 'If provided, requests will use this as the base URL. ' +
38
+ 'If omitted, uses collection-level variables.'
39
+ },
40
+ collectionName: {
41
+ type: 'string',
42
+ description: 'Name for the Postman collection (default: "API Test Collection"). ' +
43
+ 'Example: "User Service Tests - v1.0".'
44
+ },
45
+ includeTests: {
46
+ type: 'boolean',
47
+ description: 'Include Postman test scripts that validate status codes and schemas (default: true). ' +
48
+ 'When true, each request includes pm.test() assertions.'
49
+ },
50
+ groupByCategory: {
51
+ type: 'boolean',
52
+ description: 'Group requests into folders by category (default: true). ' +
53
+ 'Creates folders: Happy Path, Edge Cases, Error Cases, Business Rules.'
54
+ },
55
+ auth: {
56
+ type: 'object',
57
+ description: 'Collection-level authentication configuration. ' +
58
+ 'Example: { "type": "bearer", "bearer": [{ "key": "token", "value": "{{API_TOKEN}}" }] }',
59
+ additionalProperties: true
60
+ }
61
+ },
62
+ required: ['tests', 'outputPath']
63
+ };
64
+ constructor(postmanService, fileService) {
65
+ super();
66
+ this.postmanService = postmanService;
67
+ this.fileService = fileService;
68
+ }
69
+ async handle(args) {
70
+ const params = args;
71
+ this.log.info('Exporting to Postman', {
72
+ testCount: params.tests.length,
73
+ outputPath: params.outputPath,
74
+ baseUrl: params.baseUrl,
75
+ groupByCategory: params.groupByCategory !== false
76
+ });
77
+ try {
78
+ // Generate Postman Collection
79
+ const collection = this.postmanService.generateCollection(params.tests, {
80
+ name: params.collectionName || 'API Test Collection',
81
+ baseUrl: params.baseUrl,
82
+ includeTests: params.includeTests !== false,
83
+ groupByCategory: params.groupByCategory !== false,
84
+ auth: params.auth
85
+ });
86
+ // Convert to JSON
87
+ const collectionJson = collection.toJSON();
88
+ // Save file
89
+ await this.fileService.saveFile(params.outputPath, JSON.stringify(collectionJson, null, 2));
90
+ this.log.info('Postman collection exported successfully', {
91
+ outputPath: params.outputPath,
92
+ requestCount: this.countRequests(collectionJson),
93
+ size: JSON.stringify(collectionJson).length
94
+ });
95
+ return this.formatResponse({
96
+ success: true,
97
+ outputPath: params.outputPath,
98
+ collectionName: collectionJson.info?.name || params.collectionName || 'API Test Collection',
99
+ requestCount: this.countRequests(collectionJson),
100
+ newmanCommand: `newman run ${params.outputPath}${params.baseUrl ? ` --env-var "baseUrl=${params.baseUrl}"` : ''}`
101
+ });
102
+ }
103
+ catch (error) {
104
+ return this.formatError(error);
105
+ }
106
+ }
107
+ /**
108
+ * Counts total requests in the collection (including nested folders)
109
+ */
110
+ countRequests(collectionJson) {
111
+ let count = 0;
112
+ function countItems(items) {
113
+ for (const item of items) {
114
+ if (item.request) {
115
+ count++;
116
+ }
117
+ if (item.item && Array.isArray(item.item)) {
118
+ countItems(item.item);
119
+ }
120
+ }
121
+ }
122
+ if (collectionJson.item) {
123
+ countItems(collectionJson.item);
124
+ }
125
+ return count;
126
+ }
127
+ }
128
+ //# sourceMappingURL=export-to-postman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-to-postman.js","sourceRoot":"","sources":["../../../src/mcp/handlers/export-to-postman.ts"],"names":[],"mappings":"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"}