@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,80 @@
1
+ /**
2
+ * Test execution types - runtime behavior and matchers
3
+ * @module types/test-execution
4
+ */
5
+ import type { TestCase } from './test-case.js';
6
+ /**
7
+ * Response matcher for flexible validation
8
+ * Validates type instead of exact value (e.g., "is a number" vs "is 123")
9
+ */
10
+ export interface ResponseMatcher {
11
+ /**
12
+ * Type of matcher
13
+ */
14
+ type: 'type' | 'regex' | 'range' | 'exists';
15
+ /**
16
+ * Expected type (for type matcher)
17
+ */
18
+ expectedType?: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null';
19
+ /**
20
+ * Regular expression pattern (for regex matcher)
21
+ */
22
+ pattern?: string;
23
+ /**
24
+ * Minimum value (for range matcher)
25
+ */
26
+ min?: number;
27
+ /**
28
+ * Maximum value (for range matcher)
29
+ */
30
+ max?: number;
31
+ /**
32
+ * Whether field must exist (for exists matcher)
33
+ */
34
+ required?: boolean;
35
+ }
36
+ /**
37
+ * State handler callback for test setup/teardown
38
+ * Allows users to prepare database, mock services, etc.
39
+ */
40
+ export type StateHandler = (testCase: TestCase) => Promise<void> | void;
41
+ /**
42
+ * Options for test execution with matchers and state handlers
43
+ */
44
+ export interface TestExecutionOptions {
45
+ /**
46
+ * Use type-based matchers for response validation
47
+ * @default false
48
+ */
49
+ useMatchers?: boolean;
50
+ /**
51
+ * Custom matchers per test or globally
52
+ * Key: test ID or "*" for all tests
53
+ * Value: Field path to matcher config
54
+ * @example
55
+ * {
56
+ * "*": {
57
+ * "response.body.id": { type: "type", expectedType: "number" },
58
+ * "response.body.email": { type: "regex", pattern: "^[^@]+@[^@]+$" }
59
+ * }
60
+ * }
61
+ */
62
+ matchers?: Record<string, Record<string, ResponseMatcher>>;
63
+ /**
64
+ * Callback executed before each test
65
+ * Use for database seeding, mock setup, etc.
66
+ * @example
67
+ * beforeTest: async (test) => {
68
+ * if (test.path.includes('/users')) {
69
+ * await database.seed('users');
70
+ * }
71
+ * }
72
+ */
73
+ beforeTest?: StateHandler;
74
+ /**
75
+ * Callback executed after each test
76
+ * Use for cleanup, logging, etc.
77
+ */
78
+ afterTest?: StateHandler;
79
+ }
80
+ //# sourceMappingURL=test-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-execution.d.ts","sourceRoot":"","sources":["../../src/types/test-execution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE5C;;OAEG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAE7E;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAE3D;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAE1B;;;OAGG;IACH,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Test execution types - runtime behavior and matchers
3
+ * @module types/test-execution
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=test-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-execution.js","sourceRoot":"","sources":["../../src/types/test-execution.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Authentication Header Generator
3
+ *
4
+ * Centralized utility for generating authentication headers based on OpenAPI security schemes.
5
+ * This is the single source of truth for auth header generation across all test generators.
6
+ *
7
+ * @module utils/auth-generator
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ /**
11
+ * Generates authentication headers based on security schemes
12
+ *
13
+ * This function is agnostic and supports multiple auth types:
14
+ * - Bearer tokens
15
+ * - API Keys
16
+ * - Basic Auth
17
+ * - OAuth2
18
+ * - OpenID Connect
19
+ *
20
+ * @param securitySchemes - Array of security scheme objects from OpenAPI
21
+ * @returns Headers object with authentication placeholders
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const headers = generateAuthHeaders([{ type: 'http', scheme: 'bearer' }]);
26
+ * // Returns: { Authorization: 'Bearer {{TOKEN}}' }
27
+ * ```
28
+ */
29
+ export declare function generateAuthHeaders(securitySchemes: OpenAPIV3.SecuritySchemeObject[]): Record<string, string>;
30
+ //# sourceMappingURL=auth-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-generator.d.ts","sourceRoot":"","sources":["../../src/utils/auth-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,SAAS,CAAC,oBAAoB,EAAE,GAChD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6CxB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Authentication Header Generator
3
+ *
4
+ * Centralized utility for generating authentication headers based on OpenAPI security schemes.
5
+ * This is the single source of truth for auth header generation across all test generators.
6
+ *
7
+ * @module utils/auth-generator
8
+ */
9
+ /**
10
+ * Generates authentication headers based on security schemes
11
+ *
12
+ * This function is agnostic and supports multiple auth types:
13
+ * - Bearer tokens
14
+ * - API Keys
15
+ * - Basic Auth
16
+ * - OAuth2
17
+ * - OpenID Connect
18
+ *
19
+ * @param securitySchemes - Array of security scheme objects from OpenAPI
20
+ * @returns Headers object with authentication placeholders
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const headers = generateAuthHeaders([{ type: 'http', scheme: 'bearer' }]);
25
+ * // Returns: { Authorization: 'Bearer {{TOKEN}}' }
26
+ * ```
27
+ */
28
+ export function generateAuthHeaders(securitySchemes) {
29
+ const headers = {};
30
+ // If no security schemes, return empty headers
31
+ if (!securitySchemes || securitySchemes.length === 0) {
32
+ return headers;
33
+ }
34
+ // Use the first security scheme that generates a recognisable header.
35
+ // APIs with multiple schemes (e.g. bearer + apiKey) are supported via the
36
+ // first matching scheme; additional schemes are intentionally ignored because
37
+ // a single request can only carry one auth credential set.
38
+ const scheme = securitySchemes[0];
39
+ switch (scheme.type) {
40
+ case 'http':
41
+ if (scheme.scheme === 'bearer') {
42
+ // Bearer token authentication
43
+ headers['Authorization'] = 'Bearer {{TOKEN}}';
44
+ }
45
+ else if (scheme.scheme === 'basic') {
46
+ // Basic authentication
47
+ headers['Authorization'] = 'Basic {{CREDENTIALS}}';
48
+ }
49
+ break;
50
+ case 'apiKey':
51
+ // API Key authentication
52
+ if (scheme.in === 'header') {
53
+ headers[scheme.name] = '{{API_KEY}}';
54
+ }
55
+ // If in=query, it will be handled as query param, not header
56
+ break;
57
+ case 'oauth2':
58
+ // OAuth2 - use Bearer token
59
+ headers['Authorization'] = 'Bearer {{OAUTH_TOKEN}}';
60
+ break;
61
+ case 'openIdConnect':
62
+ // OpenID Connect - also uses Bearer token
63
+ headers['Authorization'] = 'Bearer {{OIDC_TOKEN}}';
64
+ break;
65
+ }
66
+ return headers;
67
+ }
68
+ //# sourceMappingURL=auth-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-generator.js","sourceRoot":"","sources":["../../src/utils/auth-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CACjC,eAAiD;IAEjD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,+CAA+C;IAC/C,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,8EAA8E;IAC9E,2DAA2D;IAC3D,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAElC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,8BAA8B;gBAC9B,OAAO,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAAC;YAChD,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrC,uBAAuB;gBACvB,OAAO,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC;YACrD,CAAC;YACD,MAAM;QAER,KAAK,QAAQ;YACX,yBAAyB;YACzB,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;YACvC,CAAC;YACD,6DAA6D;YAC7D,MAAM;QAER,KAAK,QAAQ;YACX,4BAA4B;YAC5B,OAAO,CAAC,eAAe,CAAC,GAAG,wBAAwB,CAAC;YACpD,MAAM;QAER,KAAK,eAAe;YAClB,0CAA0C;YAC1C,OAAO,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC;YACnD,MAAM;IACV,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Centralized Configuration Management
3
+ *
4
+ * Loads and validates configuration from environment variables
5
+ * with sensible defaults for production use.
6
+ *
7
+ * @module utils/config
8
+ */
9
+ /**
10
+ * HTTP Client Configuration
11
+ */
12
+ export interface HttpConfig {
13
+ /**
14
+ * Default timeout for HTTP requests in milliseconds
15
+ * @default 5000
16
+ * @env HTTP_TIMEOUT
17
+ */
18
+ timeout: number;
19
+ /**
20
+ * Maximum number of parallel requests
21
+ * @default 5
22
+ * @env MAX_PARALLEL_REQUESTS
23
+ */
24
+ maxParallel: number;
25
+ }
26
+ /**
27
+ * Retry Logic Configuration
28
+ */
29
+ export interface RetryConfig {
30
+ /**
31
+ * Maximum number of retry attempts
32
+ * @default 3
33
+ * @env RETRY_MAX_ATTEMPTS
34
+ */
35
+ maxAttempts: number;
36
+ /**
37
+ * Initial delay in milliseconds before first retry
38
+ * @default 1000
39
+ * @env RETRY_INITIAL_DELAY
40
+ */
41
+ initialDelay: number;
42
+ /**
43
+ * Maximum delay in milliseconds between retries
44
+ * @default 10000
45
+ * @env RETRY_MAX_DELAY
46
+ */
47
+ maxDelay: number;
48
+ /**
49
+ * Backoff multiplier for exponential backoff
50
+ * @default 2
51
+ * @env RETRY_BACKOFF_MULTIPLIER
52
+ */
53
+ backoffMultiplier: number;
54
+ }
55
+ /**
56
+ * Circuit Breaker Configuration
57
+ */
58
+ export interface CircuitBreakerConfig {
59
+ /**
60
+ * Number of failures before opening circuit
61
+ * @default 5
62
+ * @env CIRCUIT_BREAKER_THRESHOLD
63
+ */
64
+ failureThreshold: number;
65
+ /**
66
+ * Time in milliseconds to wait before transitioning to HALF_OPEN
67
+ * @default 60000 (1 minute)
68
+ * @env CIRCUIT_BREAKER_TIMEOUT
69
+ */
70
+ resetTimeout: number;
71
+ /**
72
+ * Number of successful calls in HALF_OPEN before closing circuit
73
+ * @default 2
74
+ * @env CIRCUIT_BREAKER_SUCCESS_THRESHOLD
75
+ */
76
+ successThreshold: number;
77
+ }
78
+ /**
79
+ * Logging Configuration
80
+ */
81
+ export interface LogConfig {
82
+ /**
83
+ * Log level (debug, info, warn, error)
84
+ * @default 'info'
85
+ * @env LOG_LEVEL
86
+ */
87
+ level: 'debug' | 'info' | 'warn' | 'error';
88
+ /**
89
+ * Directory where logs are stored
90
+ * @env LOG_DIR or MCP_ROOT/logs or ~/.openapi-contract-tester/logs
91
+ */
92
+ logDir: string;
93
+ /**
94
+ * Maximum log file size in bytes before rotation
95
+ * @default 10485760 (10MB)
96
+ * @env MAX_LOG_FILE_SIZE
97
+ */
98
+ maxFileSize: number;
99
+ /**
100
+ * Maximum number of rotated log files to keep
101
+ * @default 5
102
+ * @env MAX_LOG_FILES
103
+ */
104
+ maxFiles: number;
105
+ }
106
+ /**
107
+ * Test Execution Configuration
108
+ */
109
+ export interface TestConfig {
110
+ /**
111
+ * Maximum number of tests to run in parallel
112
+ * @default 5
113
+ * @env MAX_PARALLEL_TESTS
114
+ */
115
+ maxParallel: number;
116
+ /**
117
+ * Default timeout for test execution in milliseconds
118
+ * @default 30000 (30 seconds)
119
+ * @env TEST_TIMEOUT
120
+ */
121
+ timeout: number;
122
+ }
123
+ /**
124
+ * Complete Application Configuration
125
+ */
126
+ export interface AppConfig {
127
+ /**
128
+ * Root directory for all MCP-related files
129
+ * @env MCP_ROOT
130
+ */
131
+ mcpRoot: string;
132
+ /**
133
+ * Whether running in MCP mode (STDIO protocol)
134
+ * @env MCP_MODE
135
+ */
136
+ mcpMode: boolean;
137
+ /**
138
+ * HTTP client configuration
139
+ */
140
+ http: HttpConfig;
141
+ /**
142
+ * Retry logic configuration
143
+ */
144
+ retry: RetryConfig;
145
+ /**
146
+ * Circuit breaker configuration
147
+ */
148
+ circuitBreaker: CircuitBreakerConfig;
149
+ /**
150
+ * Logging configuration
151
+ */
152
+ log: LogConfig;
153
+ /**
154
+ * Test execution configuration
155
+ */
156
+ test: TestConfig;
157
+ }
158
+ /**
159
+ * Load configuration from environment variables
160
+ *
161
+ * All values have sensible defaults and are overridable via environment variables.
162
+ *
163
+ * @returns Complete application configuration
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * import { loadConfig } from './utils/config.js';
168
+ *
169
+ * const config = loadConfig();
170
+ * console.log(`HTTP timeout: ${config.http.timeout}ms`);
171
+ * console.log(`Logs directory: ${config.log.logDir}`);
172
+ * ```
173
+ */
174
+ export declare function loadConfig(): AppConfig;
175
+ /**
176
+ * Global configuration instance
177
+ *
178
+ * Loaded once at startup from environment variables.
179
+ */
180
+ export declare const config: AppConfig;
181
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4CH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAE3C;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,cAAc,EAAE,oBAAoB,CAAC;IAErC;;OAEG;IACH,GAAG,EAAE,SAAS,CAAC;IAEf;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;CAClB;AAgDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAsCtC;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,WAAe,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Centralized Configuration Management
3
+ *
4
+ * Loads and validates configuration from environment variables
5
+ * with sensible defaults for production use.
6
+ *
7
+ * @module utils/config
8
+ */
9
+ import * as path from 'path';
10
+ /**
11
+ * Parse environment variable as integer with fallback
12
+ */
13
+ function parseEnvInt(key, defaultValue) {
14
+ const value = process.env[key];
15
+ if (!value)
16
+ return defaultValue;
17
+ const parsed = parseInt(value, 10);
18
+ return isNaN(parsed) ? defaultValue : parsed;
19
+ }
20
+ /**
21
+ * Parse environment variable as float with fallback.
22
+ * Correctly handles the value 0 (unlike `parseFloat(x||default)||default`).
23
+ */
24
+ function parseEnvFloat(key, defaultValue) {
25
+ const value = process.env[key];
26
+ if (!value)
27
+ return defaultValue;
28
+ const parsed = parseFloat(value);
29
+ return isNaN(parsed) ? defaultValue : parsed;
30
+ }
31
+ /**
32
+ * Parse environment variable as boolean with fallback
33
+ */
34
+ function parseEnvBool(key, defaultValue) {
35
+ const value = process.env[key];
36
+ if (!value)
37
+ return defaultValue;
38
+ return value.toLowerCase() === 'true' || value === '1';
39
+ }
40
+ /**
41
+ * Get directory path with home directory expansion
42
+ */
43
+ function expandPath(pathStr) {
44
+ return pathStr.replace(/^~/, process.env.HOME || process.env.USERPROFILE || '~');
45
+ }
46
+ /**
47
+ * Get MCP root directory
48
+ */
49
+ function getMcpRoot() {
50
+ if (process.env.MCP_ROOT) {
51
+ return expandPath(process.env.MCP_ROOT);
52
+ }
53
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '.';
54
+ return path.join(homeDir, '.openapi-contract-tester');
55
+ }
56
+ /**
57
+ * Get log directory
58
+ */
59
+ function getLogDirectory(mcpRoot) {
60
+ // 1. Explicit LOG_DIR
61
+ if (process.env.LOG_DIR) {
62
+ return expandPath(process.env.LOG_DIR);
63
+ }
64
+ // 2. MCP_ROOT/logs
65
+ return path.join(mcpRoot, 'logs');
66
+ }
67
+ /**
68
+ * Parse log level from environment
69
+ */
70
+ function parseLogLevel(value) {
71
+ const normalized = value?.toLowerCase();
72
+ switch (normalized) {
73
+ case 'debug':
74
+ return 'debug';
75
+ case 'info':
76
+ return 'info';
77
+ case 'warn':
78
+ case 'warning':
79
+ return 'warn';
80
+ case 'error':
81
+ return 'error';
82
+ default:
83
+ return 'info';
84
+ }
85
+ }
86
+ /**
87
+ * Load configuration from environment variables
88
+ *
89
+ * All values have sensible defaults and are overridable via environment variables.
90
+ *
91
+ * @returns Complete application configuration
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * import { loadConfig } from './utils/config.js';
96
+ *
97
+ * const config = loadConfig();
98
+ * console.log(`HTTP timeout: ${config.http.timeout}ms`);
99
+ * console.log(`Logs directory: ${config.log.logDir}`);
100
+ * ```
101
+ */
102
+ export function loadConfig() {
103
+ const mcpRoot = getMcpRoot();
104
+ const isMCPMode = parseEnvBool('MCP_MODE', !process.stdin.isTTY);
105
+ return {
106
+ mcpRoot,
107
+ mcpMode: isMCPMode,
108
+ http: {
109
+ timeout: parseEnvInt('HTTP_TIMEOUT', 5000),
110
+ maxParallel: parseEnvInt('MAX_PARALLEL_REQUESTS', 5),
111
+ },
112
+ retry: {
113
+ maxAttempts: parseEnvInt('RETRY_MAX_ATTEMPTS', 3),
114
+ initialDelay: parseEnvInt('RETRY_INITIAL_DELAY', 1000),
115
+ maxDelay: parseEnvInt('RETRY_MAX_DELAY', 10000),
116
+ backoffMultiplier: parseEnvFloat('RETRY_BACKOFF_MULTIPLIER', 2),
117
+ },
118
+ circuitBreaker: {
119
+ failureThreshold: parseEnvInt('CIRCUIT_BREAKER_THRESHOLD', 5),
120
+ resetTimeout: parseEnvInt('CIRCUIT_BREAKER_TIMEOUT', 60000),
121
+ successThreshold: parseEnvInt('CIRCUIT_BREAKER_SUCCESS_THRESHOLD', 2),
122
+ },
123
+ log: {
124
+ level: parseLogLevel(process.env.LOG_LEVEL),
125
+ logDir: getLogDirectory(mcpRoot),
126
+ maxFileSize: parseEnvInt('MAX_LOG_FILE_SIZE', 10 * 1024 * 1024), // 10MB
127
+ maxFiles: parseEnvInt('MAX_LOG_FILES', 5),
128
+ },
129
+ test: {
130
+ maxParallel: parseEnvInt('MAX_PARALLEL_TESTS', 5),
131
+ timeout: parseEnvInt('TEST_TIMEOUT', 30000),
132
+ },
133
+ };
134
+ }
135
+ /**
136
+ * Global configuration instance
137
+ *
138
+ * Loaded once at startup from environment variables.
139
+ */
140
+ export const config = loadConfig();
141
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Coverage Calculator
3
+ *
4
+ * Calculates endpoint coverage from test results
5
+ * without generating new tests (unlike preview-test-coverage)
6
+ *
7
+ * @module utils/coverage-calculator
8
+ */
9
+ interface TestResult {
10
+ method?: string;
11
+ path?: string;
12
+ endpoint?: string;
13
+ status: string;
14
+ }
15
+ interface CoverageResult {
16
+ totalEndpoints: number;
17
+ testedEndpoints: number;
18
+ coveragePercentage: string;
19
+ uncoveredEndpoints: Array<{
20
+ method: string;
21
+ path: string;
22
+ }>;
23
+ endpointDetails: Array<{
24
+ endpoint: string;
25
+ method: string;
26
+ path: string;
27
+ totalTests: number;
28
+ passedTests: number;
29
+ failedTests: number;
30
+ hasCoverage: boolean;
31
+ }>;
32
+ }
33
+ /**
34
+ * Calculates endpoint coverage from test results
35
+ *
36
+ * Analyzes results.json to determine which endpoints were tested
37
+ * and which are missing coverage
38
+ *
39
+ * @param results - Test results object with allTests array
40
+ * @returns Coverage statistics
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const results = JSON.parse(await fs.readFile('results.json', 'utf-8'));
45
+ * const coverage = calculateCoverageFromResults(results);
46
+ *
47
+ * console.log(coverage.coveragePercentage); // "85%"
48
+ * console.log(coverage.uncoveredEndpoints); // [{ method: "DELETE", path: "/users/{id}" }]
49
+ * ```
50
+ */
51
+ export declare function calculateCoverageFromResults(results: {
52
+ allTests: TestResult[];
53
+ }): CoverageResult;
54
+ /**
55
+ * Calculates coverage with OpenAPI spec to find truly uncovered endpoints
56
+ *
57
+ * Compares test results against OpenAPI spec to identify endpoints
58
+ * that exist in spec but have no tests
59
+ *
60
+ * @param results - Test results object
61
+ * @param specEndpoints - Parsed endpoints from OpenAPI spec
62
+ * @returns Coverage statistics including truly uncovered endpoints
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const spec = await parseOpenAPISpec('api.yml');
67
+ * const endpoints = extractEndpoints(spec);
68
+ * const coverage = calculateCoverageWithSpec(results, endpoints);
69
+ *
70
+ * console.log(coverage.uncoveredEndpoints);
71
+ * // [{ method: "DELETE", path: "/admin/logs" }]
72
+ * ```
73
+ */
74
+ export declare function calculateCoverageWithSpec(results: {
75
+ allTests: TestResult[];
76
+ }, specEndpoints: Array<{
77
+ method: string;
78
+ path: string;
79
+ }>): CoverageResult;
80
+ export {};
81
+ //# sourceMappingURL=coverage-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-calculator.d.ts","sourceRoot":"","sources":["../../src/utils/coverage-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB,GAAG,cAAc,CAwEjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,EACnC,aAAa,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACrD,cAAc,CAsChB"}