@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,189 @@
1
+ /**
2
+ * LLM Service - AI/LLM operations
3
+ *
4
+ * Centralizes all LLM interactions including:
5
+ * - Calling AI for test generation
6
+ * - TOON format conversion
7
+ * - Prompt construction
8
+ *
9
+ * @module mcp/services/llm-service
10
+ */
11
+ import { callLLM, toTOONFormat } from '../../llm/ai-client.js';
12
+ import { encode as toTOON, decode as fromTOON } from '@toon-format/toon';
13
+ import { createLogger } from '../../utils/logger.js';
14
+ const log = createLogger('llm-service');
15
+ /**
16
+ * Service for LLM operations
17
+ */
18
+ export class LLMService {
19
+ /**
20
+ * Calls the LLM with a prompt
21
+ *
22
+ * @param prompt - Prompt text to send to LLM
23
+ * @param options - Optional configuration
24
+ * @returns LLM response text
25
+ */
26
+ async callLLM(prompt, options) {
27
+ log.info('Calling LLM', {
28
+ promptLength: prompt.length,
29
+ model: options?.model
30
+ });
31
+ try {
32
+ const result = await callLLM(prompt, {
33
+ temperature: options?.temperature
34
+ });
35
+ if (!result.success || !result.text) {
36
+ throw new Error(result.error || 'LLM call failed with no response');
37
+ }
38
+ log.info('LLM response received', {
39
+ responseLength: result.text.length
40
+ });
41
+ return result.text;
42
+ }
43
+ catch (error) {
44
+ log.error('LLM call failed', { error });
45
+ throw new Error(`LLM call failed: ${error}`);
46
+ }
47
+ }
48
+ /**
49
+ * Formats data as TOON (Tree Object Oriented Notation)
50
+ *
51
+ * @param data - Data to format
52
+ * @returns TOON formatted string
53
+ */
54
+ formatAsTOON(data) {
55
+ log.debug('Formatting data as TOON');
56
+ try {
57
+ const toon = toTOON(data);
58
+ log.debug('TOON formatting complete', {
59
+ outputLength: toon.length
60
+ });
61
+ return toon;
62
+ }
63
+ catch (error) {
64
+ log.error('TOON formatting failed', { error });
65
+ throw new Error(`TOON formatting failed: ${error}`);
66
+ }
67
+ }
68
+ /**
69
+ * Parses TOON formatted text back to data
70
+ *
71
+ * @param text - TOON formatted text
72
+ * @returns Parsed data
73
+ */
74
+ parseTOONResponse(text) {
75
+ log.debug('Parsing TOON response', {
76
+ textLength: text.length
77
+ });
78
+ try {
79
+ const data = fromTOON(text);
80
+ log.debug('TOON parsing complete');
81
+ return data;
82
+ }
83
+ catch (error) {
84
+ log.error('TOON parsing failed', { error });
85
+ throw new Error(`TOON parsing failed: ${error}`);
86
+ }
87
+ }
88
+ /**
89
+ * Converts data to TOON format for AI consumption
90
+ *
91
+ * Uses toTOONFormat from ai-client which handles special formatting
92
+ * for AI prompts.
93
+ *
94
+ * @param data - Data to convert
95
+ * @returns TOON formatted string for AI
96
+ */
97
+ toTOONFormatForAI(data) {
98
+ log.debug('Converting to TOON format for AI');
99
+ try {
100
+ const toon = toTOONFormat(data);
101
+ log.debug('TOON conversion complete', {
102
+ outputLength: toon.length
103
+ });
104
+ return toon;
105
+ }
106
+ catch (error) {
107
+ log.error('TOON conversion failed', { error });
108
+ throw new Error(`TOON conversion for AI failed: ${error}`);
109
+ }
110
+ }
111
+ /**
112
+ * Constructs a prompt for test generation
113
+ *
114
+ * @param params - Parameters for prompt construction
115
+ * @returns Constructed prompt
116
+ */
117
+ constructTestGenerationPrompt(params) {
118
+ const { endpoints, userStories, apiContext, categories } = params;
119
+ log.info('Constructing test generation prompt', {
120
+ endpointCount: endpoints.length,
121
+ hasUserStories: !!userStories,
122
+ hasApiContext: !!apiContext,
123
+ categories: categories?.length || 0
124
+ });
125
+ const parts = [];
126
+ // Header
127
+ parts.push('Generate comprehensive test cases for the following API endpoints.\n');
128
+ // Endpoints in TOON format
129
+ parts.push('# Endpoints\n');
130
+ parts.push(this.formatAsTOON(endpoints));
131
+ parts.push('\n');
132
+ // User stories if provided
133
+ if (userStories) {
134
+ parts.push('# User Stories\n');
135
+ parts.push(userStories);
136
+ parts.push('\n');
137
+ }
138
+ // API context if provided
139
+ if (apiContext) {
140
+ parts.push('# API Context\n');
141
+ parts.push(this.formatAsTOON(apiContext));
142
+ parts.push('\n');
143
+ }
144
+ // Categories to generate
145
+ if (categories && categories.length > 0) {
146
+ parts.push('# Categories to Generate\n');
147
+ parts.push(categories.join(', '));
148
+ parts.push('\n');
149
+ }
150
+ // Instructions
151
+ parts.push('# Instructions\n');
152
+ parts.push('Generate test cases in the following categories:\n');
153
+ parts.push('- happy-path: Valid scenarios that should succeed\n');
154
+ parts.push('- edge-case: Boundary values and special cases\n');
155
+ parts.push('- error-case: Invalid inputs that should fail\n');
156
+ if (userStories) {
157
+ parts.push('- business-rule: Tests based on user stories\n');
158
+ }
159
+ parts.push('\n');
160
+ parts.push('Return test cases as JSON array.');
161
+ const prompt = parts.join('');
162
+ log.debug('Prompt constructed', { length: prompt.length });
163
+ return prompt;
164
+ }
165
+ /**
166
+ * Constructs a prompt for failure analysis
167
+ *
168
+ * @param failedTests - Failed test results
169
+ * @returns Constructed prompt
170
+ */
171
+ constructFailureAnalysisPrompt(failedTests) {
172
+ log.info('Constructing failure analysis prompt', {
173
+ failedTestCount: failedTests.length
174
+ });
175
+ const parts = [];
176
+ parts.push('Analyze the following failed test cases and provide insights.\n\n');
177
+ parts.push('# Failed Tests\n');
178
+ parts.push(this.formatAsTOON(failedTests));
179
+ parts.push('\n\n');
180
+ parts.push('Provide:\n');
181
+ parts.push('1. Root cause analysis\n');
182
+ parts.push('2. Common patterns in failures\n');
183
+ parts.push('3. Suggested fixes\n');
184
+ const prompt = parts.join('');
185
+ log.debug('Failure analysis prompt constructed', { length: prompt.length });
186
+ return prompt;
187
+ }
188
+ }
189
+ //# sourceMappingURL=llm-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../../src/mcp/services/llm-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Postman Service - Converts test cases to Postman Collections
3
+ *
4
+ * Generates Postman Collection v2.1 JSON format manually
5
+ * compatible with Postman app and Newman CLI.
6
+ *
7
+ * @module mcp/services/postman-service
8
+ */
9
+ import type { TestCase } from '../../types/index.js';
10
+ /**
11
+ * Options for Postman collection generation
12
+ */
13
+ export interface PostmanCollectionOptions {
14
+ /** Collection name */
15
+ name: string;
16
+ /** Base URL for all requests */
17
+ baseUrl?: string;
18
+ /** Include test scripts (pm.test assertions) */
19
+ includeTests?: boolean;
20
+ /** Group requests by category into folders */
21
+ groupByCategory?: boolean;
22
+ /** Collection-level authentication */
23
+ auth?: unknown;
24
+ }
25
+ /**
26
+ * Postman Collection v2.1 JSON structure
27
+ */
28
+ interface PostmanCollection {
29
+ info: {
30
+ name: string;
31
+ description: string;
32
+ schema: string;
33
+ };
34
+ item: PostmanItem[];
35
+ auth?: any;
36
+ variable?: Array<{
37
+ key: string;
38
+ value: string;
39
+ type: string;
40
+ }>;
41
+ }
42
+ interface PostmanItem {
43
+ name: string;
44
+ item?: PostmanItem[];
45
+ request?: PostmanRequest;
46
+ event?: PostmanEvent[];
47
+ }
48
+ interface PostmanRequest {
49
+ url: string | PostmanUrl;
50
+ method: string;
51
+ header: PostmanHeader[];
52
+ body?: PostmanBody;
53
+ description?: string;
54
+ }
55
+ interface PostmanUrl {
56
+ raw: string;
57
+ host: string[];
58
+ path: string[];
59
+ query?: Array<{
60
+ key: string;
61
+ value: string;
62
+ }>;
63
+ }
64
+ interface PostmanHeader {
65
+ key: string;
66
+ value: string;
67
+ }
68
+ interface PostmanBody {
69
+ mode: string;
70
+ raw?: string;
71
+ urlencoded?: Array<{
72
+ key: string;
73
+ value: string;
74
+ }>;
75
+ options?: any;
76
+ }
77
+ interface PostmanEvent {
78
+ listen: string;
79
+ script: {
80
+ exec: string[];
81
+ type: string;
82
+ };
83
+ }
84
+ /**
85
+ * Service for generating Postman Collections from test cases
86
+ */
87
+ export declare class PostmanService {
88
+ /**
89
+ * Generates a Postman Collection v2.1 from test cases
90
+ *
91
+ * @param tests - Test cases to convert
92
+ * @param options - Generation options
93
+ * @returns Collection object with toJSON() method
94
+ */
95
+ generateCollection(tests: TestCase[], options: PostmanCollectionOptions): {
96
+ toJSON: () => PostmanCollection;
97
+ };
98
+ /**
99
+ * Groups tests by category and returns folder items
100
+ */
101
+ private groupTestsByCategory;
102
+ /**
103
+ * Creates a Postman request item from a test case
104
+ */
105
+ private createRequestItem;
106
+ /**
107
+ * Builds URL string from test case
108
+ */
109
+ private buildUrl;
110
+ /**
111
+ * Builds headers array from test case
112
+ */
113
+ private buildHeaders;
114
+ /**
115
+ * Builds request body from test case
116
+ */
117
+ private buildBody;
118
+ /**
119
+ * Generates Postman test script for validating responses
120
+ */
121
+ private generateTestScript;
122
+ /**
123
+ * Counts total requests in collection (including nested folders)
124
+ */
125
+ private countTotalRequests;
126
+ }
127
+ export {};
128
+ //# sourceMappingURL=postman-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postman-service.d.ts","sourceRoot":"","sources":["../../../src/mcp/services/postman-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKrD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;;OAMG;IACH,kBAAkB,CAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,wBAAwB,GAChC;QAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;KAAE;IA8CtC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyBhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsCjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Postman Service - Converts test cases to Postman Collections
3
+ *
4
+ * Generates Postman Collection v2.1 JSON format manually
5
+ * compatible with Postman app and Newman CLI.
6
+ *
7
+ * @module mcp/services/postman-service
8
+ */
9
+ import { createLogger } from '../../utils/logger.js';
10
+ const log = createLogger('postman-service');
11
+ /**
12
+ * Service for generating Postman Collections from test cases
13
+ */
14
+ export class PostmanService {
15
+ /**
16
+ * Generates a Postman Collection v2.1 from test cases
17
+ *
18
+ * @param tests - Test cases to convert
19
+ * @param options - Generation options
20
+ * @returns Collection object with toJSON() method
21
+ */
22
+ generateCollection(tests, options) {
23
+ log.info('Generating Postman collection', {
24
+ testCount: tests.length,
25
+ collectionName: options.name,
26
+ groupByCategory: options.groupByCategory
27
+ });
28
+ // Create collection
29
+ const collection = {
30
+ info: {
31
+ name: options.name,
32
+ description: `Generated API test collection with ${tests.length} requests`,
33
+ schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json'
34
+ },
35
+ item: [],
36
+ auth: options.auth
37
+ };
38
+ // Add variables if baseUrl provided
39
+ if (options.baseUrl) {
40
+ collection.variable = [
41
+ {
42
+ key: 'baseUrl',
43
+ value: options.baseUrl,
44
+ type: 'string'
45
+ }
46
+ ];
47
+ }
48
+ // Group by category or add flat
49
+ if (options.groupByCategory !== false) {
50
+ collection.item = this.groupTestsByCategory(tests, options);
51
+ }
52
+ else {
53
+ collection.item = tests.map(test => this.createRequestItem(test, options));
54
+ }
55
+ log.info('Postman collection generated', {
56
+ folderCount: collection.item.length,
57
+ totalRequests: this.countTotalRequests(collection)
58
+ });
59
+ return {
60
+ toJSON: () => collection
61
+ };
62
+ }
63
+ /**
64
+ * Groups tests by category and returns folder items
65
+ */
66
+ groupTestsByCategory(tests, options) {
67
+ const categoryFolders = new Map();
68
+ const categoryNames = {
69
+ 'happy-path': '✅ Happy Path',
70
+ 'edge-case': '⚡ Edge Cases',
71
+ 'error-case': '❌ Error Cases',
72
+ 'business-rule': '📋 Business Rules'
73
+ };
74
+ for (const test of tests) {
75
+ const category = test.category || 'other';
76
+ if (!categoryFolders.has(category)) {
77
+ categoryFolders.set(category, []);
78
+ }
79
+ const item = this.createRequestItem(test, options);
80
+ categoryFolders.get(category).push(item);
81
+ }
82
+ // Convert to folder structure
83
+ const folders = [];
84
+ for (const [category, items] of categoryFolders) {
85
+ const folderName = categoryNames[category] || category;
86
+ folders.push({
87
+ name: folderName,
88
+ item: items
89
+ });
90
+ }
91
+ return folders;
92
+ }
93
+ /**
94
+ * Creates a Postman request item from a test case
95
+ */
96
+ createRequestItem(test, options) {
97
+ // Build URL
98
+ const url = this.buildUrl(test, options.baseUrl);
99
+ // Build headers
100
+ const headers = this.buildHeaders(test);
101
+ // Build body
102
+ const body = this.buildBody(test);
103
+ // Create request
104
+ const request = {
105
+ url,
106
+ method: test.method.toUpperCase(),
107
+ header: headers,
108
+ description: test.description || `${test.method.toUpperCase()} ${test.path}`
109
+ };
110
+ if (body) {
111
+ request.body = body;
112
+ }
113
+ // Create item
114
+ const item = {
115
+ name: test.name,
116
+ request
117
+ };
118
+ // Add test scripts if enabled
119
+ if (options.includeTests !== false) {
120
+ const testScript = this.generateTestScript(test);
121
+ if (testScript) {
122
+ item.event = [
123
+ {
124
+ listen: 'test',
125
+ script: {
126
+ exec: testScript.split('\n'),
127
+ type: 'text/javascript'
128
+ }
129
+ }
130
+ ];
131
+ }
132
+ }
133
+ return item;
134
+ }
135
+ /**
136
+ * Builds URL string from test case
137
+ */
138
+ buildUrl(test, baseUrl) {
139
+ // Replace path params
140
+ let path = test.path;
141
+ if (test.pathParams) {
142
+ for (const [key, value] of Object.entries(test.pathParams)) {
143
+ path = path.replace(`{${key}}`, String(value));
144
+ }
145
+ }
146
+ // Build full URL
147
+ let url = baseUrl
148
+ ? `{{baseUrl}}${path}`
149
+ : `https://api.example.com${path}`;
150
+ // Add query params
151
+ if (test.queryParams && Object.keys(test.queryParams).length > 0) {
152
+ const params = Object.entries(test.queryParams)
153
+ .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
154
+ .join('&');
155
+ url += `?${params}`;
156
+ }
157
+ return url;
158
+ }
159
+ /**
160
+ * Builds headers array from test case
161
+ */
162
+ buildHeaders(test) {
163
+ const headers = [];
164
+ if (test.headers) {
165
+ for (const [key, value] of Object.entries(test.headers)) {
166
+ headers.push({ key, value });
167
+ }
168
+ }
169
+ // Add Content-Type if body present and not already set
170
+ if (test.body && !test.headers?.['Content-Type']) {
171
+ headers.push({
172
+ key: 'Content-Type',
173
+ value: test.contentType || 'application/json'
174
+ });
175
+ }
176
+ return headers;
177
+ }
178
+ /**
179
+ * Builds request body from test case
180
+ */
181
+ buildBody(test) {
182
+ if (!test.body) {
183
+ return undefined;
184
+ }
185
+ const contentType = test.contentType || 'application/json';
186
+ if (contentType === 'application/json') {
187
+ return {
188
+ mode: 'raw',
189
+ raw: JSON.stringify(test.body, null, 2)
190
+ };
191
+ }
192
+ if (contentType === 'application/x-www-form-urlencoded') {
193
+ const urlencoded = [];
194
+ if (typeof test.body === 'object' && test.body !== null) {
195
+ for (const [key, value] of Object.entries(test.body)) {
196
+ urlencoded.push({
197
+ key,
198
+ value: String(value)
199
+ });
200
+ }
201
+ }
202
+ return {
203
+ mode: 'urlencoded',
204
+ urlencoded
205
+ };
206
+ }
207
+ // Default: raw
208
+ return {
209
+ mode: 'raw',
210
+ raw: typeof test.body === 'string' ? test.body : JSON.stringify(test.body)
211
+ };
212
+ }
213
+ /**
214
+ * Generates Postman test script for validating responses
215
+ */
216
+ generateTestScript(test) {
217
+ const scripts = [];
218
+ // Status code test
219
+ scripts.push(`pm.test("Status code is ${test.expectedStatus}", function () {`);
220
+ scripts.push(` pm.response.to.have.status(${test.expectedStatus});`);
221
+ scripts.push(`});`);
222
+ scripts.push('');
223
+ // Response time test
224
+ scripts.push(`pm.test("Response time is less than 2000ms", function () {`);
225
+ scripts.push(` pm.expect(pm.response.responseTime).to.be.below(2000);`);
226
+ scripts.push(`});`);
227
+ scripts.push('');
228
+ // Expected error message test
229
+ if (test.expectedError?.message) {
230
+ const expectedMsg = typeof test.expectedError.message === 'string'
231
+ ? test.expectedError.message
232
+ : 'error';
233
+ scripts.push(`pm.test("Response contains expected error message", function () {`);
234
+ scripts.push(` const body = pm.response.json();`);
235
+ scripts.push(` pm.expect(JSON.stringify(body)).to.include("${expectedMsg}");`);
236
+ scripts.push(`});`);
237
+ scripts.push('');
238
+ }
239
+ // Schema validation for happy-path
240
+ if (test.category === 'happy-path' && test.validateSchema !== false) {
241
+ scripts.push(`pm.test("Response has valid JSON body", function () {`);
242
+ scripts.push(` pm.response.to.be.json;`);
243
+ scripts.push(`});`);
244
+ }
245
+ return scripts.join('\n');
246
+ }
247
+ /**
248
+ * Counts total requests in collection (including nested folders)
249
+ */
250
+ countTotalRequests(collection) {
251
+ let count = 0;
252
+ function countItems(items) {
253
+ for (const item of items) {
254
+ if (item.request) {
255
+ count++;
256
+ }
257
+ if (item.item && Array.isArray(item.item)) {
258
+ countItems(item.item);
259
+ }
260
+ }
261
+ }
262
+ countItems(collection.item);
263
+ return count;
264
+ }
265
+ }
266
+ //# sourceMappingURL=postman-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postman-service.js","sourceRoot":"","sources":["../../../src/mcp/services/postman-service.ts"],"names":[],"mappings":"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"}