@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
package/.env.example ADDED
@@ -0,0 +1,91 @@
1
+ # OpenAPI Contract Tester - Environment Variables Configuration
2
+ # Copy this file to .env and customize as needed
3
+
4
+ # ============================================
5
+ # Directorios y Logging
6
+ # ============================================
7
+
8
+ # Directorio raíz para todos los archivos MCP
9
+ # Default: ~/.openapi-contract-tester
10
+ MCP_ROOT=~/.openapi-contract-tester
11
+
12
+ # Nivel de logging: debug, info, warn, error
13
+ # Default: info
14
+ LOG_LEVEL=info
15
+
16
+ # Override del directorio de logs (opcional)
17
+ # Si no se especifica, usa MCP_ROOT/logs
18
+ # LOG_DIR=/custom/path/logs
19
+
20
+ # Tamaño máximo del archivo de log antes de rotación (bytes)
21
+ # Default: 10485760 (10MB)
22
+ MAX_LOG_FILE_SIZE=10485760
23
+
24
+ # Número de archivos de log rotados a mantener
25
+ # Default: 5
26
+ MAX_LOG_FILES=5
27
+
28
+ # ============================================
29
+ # HTTP Client y Performance
30
+ # ============================================
31
+
32
+ # Timeout para requests HTTP en milisegundos
33
+ # Default: 5000 (5 segundos)
34
+ HTTP_TIMEOUT=5000
35
+
36
+ # Máximo número de requests HTTP en paralelo
37
+ # Default: 5
38
+ MAX_PARALLEL_REQUESTS=5
39
+
40
+ # Máximo número de tests a ejecutar en paralelo
41
+ # Default: 5
42
+ MAX_PARALLEL_TESTS=5
43
+
44
+ # Timeout para ejecución de tests en milisegundos
45
+ # Default: 30000 (30 segundos)
46
+ TEST_TIMEOUT=30000
47
+
48
+ # ============================================
49
+ # Retry Logic (Exponential Backoff)
50
+ # ============================================
51
+
52
+ # Número máximo de reintentos para operaciones fallidas
53
+ # Default: 3
54
+ RETRY_MAX_ATTEMPTS=3
55
+
56
+ # Delay inicial antes del primer reintento en milisegundos
57
+ # Default: 1000 (1 segundo)
58
+ RETRY_INITIAL_DELAY=1000
59
+
60
+ # Delay máximo entre reintentos en milisegundos
61
+ # Default: 10000 (10 segundos)
62
+ RETRY_MAX_DELAY=10000
63
+
64
+ # Multiplicador para exponential backoff
65
+ # Delays: initial, initial*multiplier, initial*multiplier^2, ...
66
+ # Default: 2
67
+ RETRY_BACKOFF_MULTIPLIER=2
68
+
69
+ # ============================================
70
+ # Circuit Breaker Pattern
71
+ # ============================================
72
+
73
+ # Número de failures consecutivos antes de abrir el circuito
74
+ # Default: 5
75
+ CIRCUIT_BREAKER_THRESHOLD=5
76
+
77
+ # Tiempo en milisegundos antes de intentar recovery (HALF_OPEN)
78
+ # Default: 60000 (1 minuto)
79
+ CIRCUIT_BREAKER_TIMEOUT=60000
80
+
81
+ # Número de éxitos necesarios en HALF_OPEN para cerrar el circuito
82
+ # Default: 2
83
+ CIRCUIT_BREAKER_SUCCESS_THRESHOLD=2
84
+
85
+ # ============================================
86
+ # MCP Mode (auto-detectado, raramente necesario)
87
+ # ============================================
88
+
89
+ # Forzar modo MCP (file logging vs console)
90
+ # Auto-detectado desde STDIO, solo para debugging
91
+ # MCP_MODE=true
package/README.md ADDED
@@ -0,0 +1,472 @@
1
+ # OpenAPI Contract Tester - MCP Server
2
+
3
+ ✅ **Status**: COMPLETE MVP - Fases 1-18 Implementadas
4
+
5
+ Servidor MCP (Model Context Protocol) para testing comprehensivo de APIs basado en especificaciones OpenAPI 3.x con soporte para contract testing usando Pact.
6
+
7
+ ## 🎯 Características
8
+
9
+ ### Generación de Tests
10
+ - ✅ **Happy Path Tests**: Tests con datos válidos para casos exitosos
11
+ - ✅ **Edge Case Tests**: Boundary Value Analysis (valores límite, enums, campos opcionales)
12
+ - ✅ **Error Case Tests**: Tests de errores 400/401/404 (campos faltantes, formatos inválidos, constraints)
13
+
14
+ ### Ejecución de Tests
15
+ - ✅ **HTTP Client con Playwright**: Cliente robusto con soporte para todos los métodos HTTP
16
+ - ✅ **Ejecución Paralela**: Ejecuta múltiples tests en paralelo
17
+ - ✅ **Validación de Schemas**: Valida responses contra schemas OpenAPI usando ajv
18
+ - ✅ **Soporte de Autenticación**: Bearer, API Key, Basic, OAuth2
19
+
20
+ ### Contract Testing
21
+ - ✅ **Generación de Contratos Pact**: Convierte OpenAPI a contratos Pact
22
+ - ✅ **Pact Matchers**: Matching flexible basado en tipos
23
+ - ✅ **Verificación de Provider**: Verifica que el provider implementa el contrato
24
+ - ✅ **Pact Broker**: Publicación y descarga de contratos
25
+
26
+ ### Error Handling & Resilience
27
+ - ✅ **Custom Error Classes**: Errores semánticos con códigos (E001-E999) y mensajes user-friendly
28
+ - ✅ **Retry Logic**: Exponential backoff para errores transitorios (timeout, network)
29
+ - ✅ **Circuit Breaker**: Previene cascading failures con estados CLOSED/OPEN/HALF_OPEN
30
+ - ✅ **Error Wrapping**: Conversión automática de errores nativos a errores custom
31
+ - ✅ **Structured Logging**: Sistema de logs compatible con STDIO que escribe a archivo en modo MCP
32
+
33
+ ### MCP Tools (4 herramientas principales)
34
+
35
+ 1. **generate-tests**: Genera tests inteligentes desde especificaciones OpenAPI
36
+ - Happy path, edge cases, error cases
37
+ - Auto-detección de dependencias entre tests
38
+ - Generación de datos con IA contextual
39
+
40
+ 2. **run-tests**: Ejecuta tests contra APIs con análisis avanzado
41
+ - Ejecución paralela con control de dependencias
42
+ - Auto-detección de tokens (24 campos conocidos)
43
+ - Validación de schemas automática
44
+ - AI-powered failure analysis
45
+
46
+ 3. **export-results**: Exporta resultados con análisis profundo
47
+ - Formatos: JSON, HTML profesional, Markdown
48
+ - **Auto-comparación**: Si detecta specPath + codeEndpoints, ejecuta compare-sources automáticamente
49
+ - **Root Cause Analysis**: Correlaciona fallos con discrepancias conocidas
50
+ - Coverage analysis integrado
51
+ - AI-powered insights y recomendaciones
52
+
53
+ 4. **compare-sources**: Compara OpenAPI spec vs Código vs PRD
54
+ - **Priorización inteligente**: Critical/High/Medium/Low según keywords
55
+ - **Reporte HTML visual**: Matriz de endpoints, discrepancias color-coded
56
+ - **Detección semántica IA**: Encuentra matches no obvios (POST /users ≈ POST /register)
57
+ - Business rule mappings (PRD → código)
58
+ - Sugerencias de remediación accionables
59
+
60
+ ### 📊 Reportes Profesionales
61
+ - **HTML**: Diseño moderno con gradientes, cards interactivos, tablas responsivas y progress bars
62
+ - **Markdown**: Tablas con emojis, executive summary, métricas de performance y detalles de fallos
63
+ - **Contenido**: Summary dashboard, breakdown por categoría/endpoint, failed tests con errores detallados
64
+
65
+ ## 📦 Instalación
66
+
67
+ ### Instalación para Desarrollo
68
+
69
+ ```bash
70
+ npm install
71
+ npm run build
72
+ ```
73
+
74
+ ### Instalación desde npm (Cuando esté publicado)
75
+
76
+ ```bash
77
+ npm install -g openapi-contract-tester
78
+ ```
79
+
80
+ ### 🧪 Testing Local (Pre-Publicación)
81
+
82
+ Para probar el paquete como si estuviera instalado desde npm:
83
+
84
+ #### Opción 1: npm link (desarrollo activo)
85
+
86
+ ```bash
87
+ npm run build
88
+ npm link
89
+
90
+ # Ahora puedes usar el comando globalmente
91
+ which openapi-contract-tester
92
+ ```
93
+
94
+ **Uso**: Ideal para desarrollo cuando haces cambios frecuentes. Los cambios se reflejan inmediatamente.
95
+
96
+ #### Opción 2: npm pack (testing de publicación)
97
+
98
+ ```bash
99
+ npm run build
100
+ npm pack
101
+ # Crea: openapi-contract-tester-1.0.0.tgz
102
+
103
+ # Instalar globalmente desde el tarball
104
+ npm install -g ./openapi-contract-tester-1.0.0.tgz
105
+
106
+ # Verificar instalación
107
+ which openapi-contract-tester
108
+ # Output: /usr/local/lib/node_modules/openapi-contract-tester/dist/index.js
109
+ ```
110
+
111
+ **Uso**: Prueba exacta de cómo funcionará cuando se publique en npm. Útil para validación final antes de `npm publish`.
112
+
113
+ **Configuración en cell-cli** (después de instalar con cualquier opción):
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "openapi-contract-tester": {
119
+ "command": "openapi-contract-tester",
120
+ "env": {
121
+ "MCP_ROOT": "~/.openapi-contract-tester",
122
+ "LOG_LEVEL": "info"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ ```
128
+ > **Nota:** Por defecto usa `gemini-3-flash-preview`. Puedes cambiar el modelo con `AI_MODEL` en `env`.
129
+
130
+ **Limpiar instalación de prueba**:
131
+
132
+ ```bash
133
+ # Si usaste npm link
134
+ npm unlink -g openapi-contract-tester
135
+
136
+ # Si usaste npm install -g
137
+ npm uninstall -g openapi-contract-tester
138
+
139
+ # Limpiar tarball
140
+ rm openapi-contract-tester-*.tgz
141
+ ```
142
+
143
+ ## ⚙️ Configuración
144
+
145
+ ### Variables de Entorno
146
+
147
+ Todas las configuraciones pueden ser controladas vía variables de entorno:
148
+
149
+ #### Directorios y Logging
150
+ ```bash
151
+ MCP_ROOT=~/.openapi-contract-tester # Directorio raíz (default: ~/.openapi-contract-tester)
152
+ LOG_LEVEL=info # Nivel de log: debug, info, warn, error (default: info)
153
+ LOG_DIR=/custom/path/logs # Override del directorio de logs
154
+ MAX_LOG_FILE_SIZE=10485760 # Tamaño máximo antes de rotación en bytes (default: 10MB)
155
+ MAX_LOG_FILES=5 # Número de archivos rotados a mantener (default: 5)
156
+ ```
157
+
158
+ #### AI/LLM Configuration
159
+ ```bash
160
+ # Opción 1: Solo cambiar el modelo (recomendado)
161
+ AI_MODEL=gemini-3-flash-preview # Nombre del modelo (default: gemini-3-flash-preview)
162
+
163
+ # Opción 2: Cambiar modelo a versión anterior
164
+ AI_MODEL=gemini-2.5-flash # Usa gemini-2.5-flash en lugar del default
165
+
166
+ # Opción 3: URL completa personalizada (override total)
167
+ AI_API_URL=https://custom-api.com/v1/generate
168
+
169
+ # Opción 4: Configuración avanzada
170
+ AI_BASE_URL=http://localhost:13800/cell_apps/v1.1/gemini/v1beta/models # Base URL (default)
171
+ AI_MODEL=gemini-3-flash-preview # Modelo específico
172
+ AI_ENDPOINT=generateContent # Endpoint de generación (default: generateContent)
173
+ ```
174
+
175
+ **Prioridad de configuración:**
176
+ 1. `AI_API_URL` - URL completa (ignora otras variables)
177
+ 2. `AI_MODEL` + `AI_BASE_URL` + `AI_ENDPOINT` - Construcción dinámica
178
+ 3. Valores por defecto (`gemini-3-flash-preview`)
179
+
180
+ #### HTTP y Performance
181
+ ```bash
182
+ HTTP_TIMEOUT=5000 # Timeout para requests HTTP en ms (default: 5000)
183
+ MAX_PARALLEL_REQUESTS=5 # Requests HTTP paralelos (default: 5)
184
+ MAX_PARALLEL_TESTS=5 # Tests paralelos (default: 5)
185
+ TEST_TIMEOUT=30000 # Timeout de test execution en ms (default: 30000)
186
+ ```
187
+
188
+ #### Retry Logic
189
+ ```bash
190
+ RETRY_MAX_ATTEMPTS=3 # Máximo de reintentos (default: 3)
191
+ RETRY_INITIAL_DELAY=1000 # Delay inicial en ms (default: 1000)
192
+ RETRY_MAX_DELAY=10000 # Delay máximo en ms (default: 10000)
193
+ RETRY_BACKOFF_MULTIPLIER=2 # Multiplicador para backoff (default: 2)
194
+ ```
195
+
196
+ #### Circuit Breaker
197
+ ```bash
198
+ CIRCUIT_BREAKER_THRESHOLD=5 # Failures antes de abrir (default: 5)
199
+ CIRCUIT_BREAKER_TIMEOUT=60000 # Tiempo antes de HALF_OPEN en ms (default: 60000)
200
+ CIRCUIT_BREAKER_SUCCESS_THRESHOLD=2 # Éxitos para cerrar en HALF_OPEN (default: 2)
201
+ ```
202
+
203
+ ### Estructura de Directorios
204
+
205
+ Cuando se configura `MCP_ROOT`, se crea la siguiente estructura:
206
+
207
+ ```
208
+ ~/.openapi-contract-tester/
209
+ └── logs/
210
+ ├── mcp-server-2025-01-19.log
211
+ └── mcp-server-2025-01-19-2025-01-19T10-30-00-123Z.log (rotados)
212
+ ```
213
+
214
+ ## 🚀 Uso
215
+
216
+ ### Como MCP Server para cell-cli
217
+
218
+ 1. Configura cell-cli para usar este servidor MCP:
219
+
220
+ ```json
221
+ {
222
+ "mcpServers": {
223
+ "openapi-contract-tester": {
224
+ "command": "node",
225
+ "args": ["/ruta/absoluta/a/mcp_testing/dist/index.js"],
226
+ "env": {
227
+ "MCP_ROOT": "~/.openapi-contract-tester",
228
+ "LOG_LEVEL": "info",
229
+ "AI_MODEL": "gemini-3-flash-preview",
230
+ "HTTP_TIMEOUT": "10000",
231
+ "MAX_PARALLEL_TESTS": "10",
232
+ "RETRY_MAX_ATTEMPTS": "3",
233
+ "CIRCUIT_BREAKER_THRESHOLD": "5"
234
+ }
235
+ }
236
+ }
237
+ }
238
+ ```
239
+
240
+ **Configuración Mínima:**
241
+ ```json
242
+ {
243
+ "mcpServers": {
244
+ "openapi-contract-tester": {
245
+ "command": "node",
246
+ "args": ["/ruta/absoluta/a/mcp_testing/dist/index.js"],
247
+ "env": {
248
+ "MCP_ROOT": "~/.openapi-contract-tester",
249
+ "LOG_LEVEL": "info"
250
+ }
251
+ }
252
+ }
253
+ }
254
+ ```
255
+ > **Nota:** Si no especificas `AI_MODEL`, usa `gemini-3-flash-preview` por defecto.
256
+
257
+ 2. Usa los tools desde cell-cli:
258
+
259
+ ```
260
+ > Genera tests para mi API usando el archivo ./api.yml
261
+ > Ejecuta los tests contra http://localhost:8080
262
+ > Crea un contrato Pact entre mi-app y user-api
263
+ ```
264
+
265
+ ### Uso Directo (sin cell-cli)
266
+
267
+ #### 1. Generar Tests
268
+
269
+ ```typescript
270
+ import { parseOpenAPISpec, extractEndpoints } from './dist/parsers/openapi-parser.js';
271
+ import { generateHappyPathTests } from './dist/generators/happy-path-generator.js';
272
+ import { generateEdgeCaseTests } from './dist/generators/edge-case-generator.js';
273
+ import { generateErrorCaseTests } from './dist/generators/error-case-generator.js';
274
+
275
+ // Parsear especificación
276
+ const spec = await parseOpenAPISpec('./api.yml');
277
+ const endpoints = extractEndpoints(spec);
278
+
279
+ // Generar tests
280
+ const happyTests = generateHappyPathTests(endpoints, { seed: 42 });
281
+ const edgeTests = generateEdgeCaseTests(endpoints, { seed: 42 });
282
+ const errorTests = generateErrorCaseTests(endpoints, spec, { seed: 42 });
283
+
284
+ console.log(`Generated ${happyTests.length + edgeTests.length + errorTests.length} tests`);
285
+ ```
286
+
287
+ #### 2. Ejecutar Tests
288
+
289
+ ```typescript
290
+ import { TestRunner } from './dist/executor/test-runner.js';
291
+
292
+ const environment = {
293
+ name: 'local',
294
+ baseUrl: 'http://localhost:8080',
295
+ timeout: 5000,
296
+ auth: {
297
+ type: 'bearer',
298
+ token: 'your-token-here'
299
+ }
300
+ };
301
+
302
+ const runner = new TestRunner(environment);
303
+ const { results, summary } = await runner.runTests(allTests, endpoints, {
304
+ parallel: 5,
305
+ validateSchemas: true,
306
+ onProgress: (completed, total, current) => {
307
+ console.log(`Progress: ${completed}/${total} - ${current.name}`);
308
+ }
309
+ });
310
+
311
+ console.log(`Passed: ${summary.passed}/${summary.total}`);
312
+ console.log(`Failed: ${summary.failed}/${summary.total}`);
313
+ console.log(`Avg Response Time: ${summary.avgResponseTime}ms`);
314
+ ```
315
+
316
+ #### 3. Contract Testing con Pact
317
+
318
+ ```typescript
319
+ import { generatePactContract, pactContractToJSON } from './dist/pact/pact-generator.js';
320
+ import { verifyPactProvider } from './dist/pact/pact-executor.js';
321
+ import fs from 'fs/promises';
322
+
323
+ // Generar contrato
324
+ const contract = generatePactContract(endpoints, {
325
+ consumer: 'my-app',
326
+ provider: 'user-api',
327
+ useMatchers: true
328
+ });
329
+
330
+ // Guardar contrato
331
+ await fs.writeFile(
332
+ './pacts/my-app-user-api.json',
333
+ pactContractToJSON(contract, true)
334
+ );
335
+
336
+ // Verificar provider
337
+ const result = await verifyPactProvider({
338
+ provider: 'user-api',
339
+ providerBaseUrl: 'http://localhost:8080',
340
+ pactUrls: ['./pacts/my-app-user-api.json']
341
+ });
342
+
343
+ console.log(`Verification: ${result.success ? 'PASSED' : 'FAILED'}`);
344
+ ```
345
+
346
+ ## 📊 Ejemplo de Salida
347
+
348
+ ### Generación de Tests
349
+ Desde una API de 5 endpoints + 3 archivos de documentación:
350
+ ```
351
+ ✅ Happy Path Tests: 4
352
+ ✅ Edge Case Tests: 24
353
+ ✅ Error Case Tests: 34
354
+ ✅ Business Rules Tests: 48 (desde docs/)
355
+ 📈 Total: 110 tests
356
+ ```
357
+
358
+ ### Ejecución de Tests
359
+ ```
360
+ Summary:
361
+ Total: 62
362
+ Passed: 58 (93.55%)
363
+ Failed: 4 (6.45%)
364
+ Duration: 2,345ms
365
+ Avg Response Time: 156ms
366
+
367
+ By Category:
368
+ happy-path: 4 passed, 0 failed
369
+ edge-case: 22 passed, 2 failed
370
+ error-case: 32 passed, 2 failed
371
+
372
+ By Endpoint:
373
+ GET /users: 7 tests (7 passed)
374
+ POST /users: 28 tests (26 passed, 2 failed)
375
+ GET /users/{id}: 4 tests (4 passed)
376
+ PUT /users/{id}: 24 tests (22 passed, 2 failed)
377
+ DELETE /users/{id}: 3 tests (3 passed)
378
+ ```
379
+
380
+ ## 📁 Estructura del Proyecto
381
+
382
+ ```
383
+ mcp_testing/
384
+ ├── src/
385
+ │ ├── types/
386
+ │ │ └── index.ts (800+ líneas de tipos con JSDoc)
387
+ │ ├── parsers/
388
+ │ │ └── openapi-parser.ts (400+ líneas)
389
+ │ ├── generators/
390
+ │ │ ├── data-generator.ts (500+ líneas)
391
+ │ │ ├── happy-path-generator.ts (300+ líneas)
392
+ │ │ ├── edge-case-generator.ts (450+ líneas)
393
+ │ │ └── error-case-generator.ts (450+ líneas)
394
+ │ ├── validators/
395
+ │ │ ├── schema-validator.ts (400+ líneas)
396
+ │ │ └── openapi-validator.ts (400+ líneas)
397
+ │ ├── executor/
398
+ │ │ ├── http-client.ts (400+ líneas)
399
+ │ │ └── test-runner.ts (500+ líneas)
400
+ │ ├── pact/
401
+ │ │ ├── pact-generator.ts (450+ líneas)
402
+ │ │ └── pact-executor.ts (500+ líneas)
403
+ │ ├── utils/
404
+ │ │ ├── logger.ts (400+ líneas)
405
+ │ │ ├── errors.ts (450+ líneas)
406
+ │ │ └── resilience.ts (350+ líneas)
407
+ │ ├── mcp/
408
+ │ │ └── server.ts (650+ líneas)
409
+ │ └── index.ts (Entry point)
410
+ ├── examples/
411
+ │ └── user-service.yml
412
+ ├── LOGGING.md (Logging documentation)
413
+ ├── ERROR-HANDLING.md (Error handling documentation)
414
+ ├── package.json
415
+ ├── tsconfig.json
416
+ └── README.md
417
+ ```
418
+
419
+ **Total: ~7,700+ líneas de código TypeScript con 100% JSDoc**
420
+
421
+ ## 🧪 Testing
422
+
423
+ ```bash
424
+ # Ejecutar tests de validación
425
+ node quick-test.js
426
+ node test-all-generators.js
427
+ node test-schema-validator.js
428
+ node test-openapi-validator.js
429
+ node test-business-rules.js
430
+ node test-logger.js
431
+ node test-error-handling.js
432
+ node test-config.js
433
+
434
+ # Test con variables de entorno personalizadas
435
+ HTTP_TIMEOUT=10000 MAX_PARALLEL_TESTS=10 LOG_LEVEL=debug node test-config.js
436
+ ```
437
+
438
+ ## 🔧 Tecnologías
439
+
440
+ - **TypeScript**: Strict mode con tipos completos
441
+ - **Playwright**: HTTP client robusto
442
+ - **Pact**: Contract testing consumer-driven
443
+ - **ajv**: Validación de JSON Schemas
444
+ - **Faker.js**: Generación de datos realistas
445
+ - **MCP SDK**: Integración con CLI conversacional con MCP
446
+ - **Node.js 18+**: ES Modules, async/await
447
+
448
+ ## 📖 Mejores Prácticas Aplicadas
449
+
450
+ - ✅ TypeScript strict mode
451
+ - ✅ 100% JSDoc coverage
452
+ - ✅ ESLint + Prettier
453
+ - ✅ Node.js 2025 best practices
454
+ - ✅ Error handling comprehensivo con retry & circuit breaker
455
+ - ✅ Async/await patterns
456
+ - ✅ ES Modules (type: "module")
457
+ - ✅ Reproducible test generation (seeds)
458
+ - ✅ STDIO-safe logging para protocolo MCP
459
+ - ✅ Structured error codes (E001-E999)
460
+
461
+ ## 📚 Documentación
462
+
463
+ - [LOGGING.md](LOGGING.md) - Sistema de logging compatible con MCP
464
+ - [ERROR-HANDLING.md](ERROR-HANDLING.md) - Error handling, retry logic y circuit breaker
465
+
466
+ ## 📝 Licencia
467
+
468
+ MIT
469
+
470
+ ---
471
+
472
+ Servidor MCP completo para testing de APIs con OpenAPI 3.x, Playwright, y Pact.
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Assertion Generator - Smart business logic assertions
3
+ *
4
+ * Generates intelligent assertions beyond schema validation.
5
+ * Validates business rules like date consistency, logical constraints, state transitions.
6
+ *
7
+ * @module ai-engine/assertion-generator
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ import type { AIConfig } from '../types/ai-config.js';
11
+ import type { APIContext } from '../analyzers/context-analyzer.js';
12
+ /**
13
+ * Assertion definition
14
+ */
15
+ export interface Assertion {
16
+ /** Assertion description */
17
+ description: string;
18
+ /** JSONPath to value */
19
+ path: string;
20
+ /** Assertion type */
21
+ type: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'contains' | 'matches' | 'custom';
22
+ /** Expected value or pattern */
23
+ expected?: any;
24
+ /** Custom JavaScript expression (for complex assertions) */
25
+ expression?: string;
26
+ }
27
+ /**
28
+ * Generates smart assertions for a test
29
+ *
30
+ * @param method - HTTP method
31
+ * @param path - Endpoint path
32
+ * @param responseSchema - Response schema
33
+ * @param apiContext - API context
34
+ * @param aiConfig - AI configuration
35
+ * @returns Array of assertions
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const assertions = await generateAssertions('GET', '/users/{id}', schema, context, config);
40
+ * // Returns:
41
+ * // [
42
+ * // { description: 'createdAt before updatedAt', path: 'createdAt', type: 'lessThan', expected: 'updatedAt' },
43
+ * // { description: 'email format valid', path: 'email', type: 'matches', expected: /^.+@.+$/ }
44
+ * // ]
45
+ * ```
46
+ */
47
+ export declare function generateAssertions(method: string, path: string, responseSchema: OpenAPIV3.SchemaObject | undefined, apiContext: APIContext, aiConfig: AIConfig): Promise<Assertion[]>;
48
+ //# sourceMappingURL=assertion-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-generator.d.ts","sourceRoot":"","sources":["../../src/ai-engine/assertion-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAMnE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9F,gCAAgC;IAChC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,EAClD,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB"}