@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,174 @@
1
+ /**
2
+ * Schema Validator
3
+ *
4
+ * Validates JSON data against JSON Schema using AJV (Another JSON Validator).
5
+ * Supports OpenAPI 3.x schema extensions and provides detailed error reporting.
6
+ *
7
+ * @module validators/schema-validator
8
+ */
9
+ import Ajv from 'ajv';
10
+ import type { OpenAPIV3 } from 'openapi-types';
11
+ import type { ValidationResult } from '../types/index.js';
12
+ /**
13
+ * Gets or creates the AJV validator instance
14
+ *
15
+ * The instance is created with:
16
+ * - All standard JSON Schema formats (email, uri, uuid, date-time, etc.)
17
+ * - Strict mode disabled to support OpenAPI extensions
18
+ * - All errors reported (not just the first one)
19
+ *
20
+ * @returns Configured AJV instance
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const ajv = getAjvInstance();
25
+ * const validate = ajv.compile(schema);
26
+ * const valid = validate(data);
27
+ * ```
28
+ */
29
+ export declare function getAjvInstance(): Ajv;
30
+ /**
31
+ * Validates data against a JSON Schema
32
+ *
33
+ * @param data - Data to validate
34
+ * @param schema - JSON Schema to validate against
35
+ * @returns Validation result with success status and errors
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const schema = {
40
+ * type: 'object',
41
+ * required: ['email', 'name'],
42
+ * properties: {
43
+ * email: { type: 'string', format: 'email' },
44
+ * name: { type: 'string', minLength: 1 }
45
+ * }
46
+ * };
47
+ *
48
+ * const result = validateSchema({ email: 'test@example.com', name: 'John' }, schema);
49
+ * if (result.valid) {
50
+ * console.log('Valid!');
51
+ * } else {
52
+ * console.error('Validation errors:', result.errors);
53
+ * }
54
+ * ```
55
+ */
56
+ export declare function validateSchema(data: unknown, schema: OpenAPIV3.SchemaObject): ValidationResult;
57
+ /**
58
+ * Validates request body data against an endpoint's request body schema
59
+ *
60
+ * @param data - Request body data to validate
61
+ * @param requestBodySchema - Request body schema from OpenAPI spec
62
+ * @returns Validation result
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users' && e.method === 'POST');
67
+ * const requestData = { email: 'test@example.com', name: 'John' };
68
+ *
69
+ * const result = validateRequestBody(requestData, endpoint.requestBody);
70
+ * if (!result.valid) {
71
+ * console.error('Invalid request:', result.errors);
72
+ * }
73
+ * ```
74
+ */
75
+ export declare function validateRequestBody(data: unknown, requestBodySchema: OpenAPIV3.SchemaObject | undefined): ValidationResult;
76
+ /**
77
+ * Validates response data against an endpoint's response schema
78
+ *
79
+ * @param data - Response data to validate
80
+ * @param responseSchema - Response schema from OpenAPI spec
81
+ * @returns Validation result
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users' && e.method === 'GET');
86
+ * const responseData = [
87
+ * { id: 1, email: 'user1@example.com', name: 'User 1' },
88
+ * { id: 2, email: 'user2@example.com', name: 'User 2' }
89
+ * ];
90
+ *
91
+ * const result = validateResponseBody(responseData, endpoint.responses[200]);
92
+ * if (!result.valid) {
93
+ * console.error('Invalid response:', result.errors);
94
+ * }
95
+ * ```
96
+ */
97
+ export declare function validateResponseBody(data: unknown, responseSchema: OpenAPIV3.SchemaObject | undefined): ValidationResult;
98
+ /**
99
+ * Validates path parameters against their schemas
100
+ *
101
+ * @param params - Path parameters object
102
+ * @param paramSchemas - Array of parameter definitions from OpenAPI spec
103
+ * @returns Validation result
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users/{id}');
108
+ * const params = { id: '123' };
109
+ *
110
+ * const result = validatePathParams(params, endpoint.pathParams);
111
+ * if (!result.valid) {
112
+ * console.error('Invalid path params:', result.errors);
113
+ * }
114
+ * ```
115
+ */
116
+ export declare function validatePathParams(params: Record<string, string | number>, paramSchemas: OpenAPIV3.ParameterObject[]): ValidationResult;
117
+ /**
118
+ * Validates query parameters against their schemas
119
+ *
120
+ * @param params - Query parameters object
121
+ * @param paramSchemas - Array of query parameter definitions from OpenAPI spec
122
+ * @returns Validation result
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users');
127
+ * const queryParams = { page: 1, limit: 10, sortBy: 'name' };
128
+ *
129
+ * const result = validateQueryParams(queryParams, endpoint.queryParams);
130
+ * if (!result.valid) {
131
+ * console.error('Invalid query params:', result.errors);
132
+ * }
133
+ * ```
134
+ */
135
+ export declare function validateQueryParams(params: Record<string, string | number | boolean>, paramSchemas: OpenAPIV3.ParameterObject[]): ValidationResult;
136
+ /**
137
+ * Checks if a value matches the expected type
138
+ *
139
+ * @param value - Value to check
140
+ * @param expectedType - Expected JSON Schema type
141
+ * @returns True if value matches expected type
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * isType(123, 'integer') // true
146
+ * isType('hello', 'string') // true
147
+ * isType([], 'array') // true
148
+ * isType({}, 'object') // true
149
+ * isType(true, 'boolean') // true
150
+ * isType(3.14, 'number') // true
151
+ * isType(123, 'string') // false
152
+ * ```
153
+ */
154
+ export declare function isType(value: unknown, expectedType: string): boolean;
155
+ /**
156
+ * Formats validation errors into a human-readable string
157
+ *
158
+ * @param errors - Array of validation errors
159
+ * @returns Formatted error message
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const result = validateSchema(data, schema);
164
+ * if (!result.valid) {
165
+ * console.error(formatValidationErrors(result.errors));
166
+ * }
167
+ * ```
168
+ */
169
+ export declare function formatValidationErrors(errors: Array<{
170
+ field: string;
171
+ message: string;
172
+ code?: string;
173
+ }>): string;
174
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../src/validators/schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAO1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAcpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,SAAS,CAAC,YAAY,GAC7B,gBAAgB,CA0DlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,iBAAiB,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,GACpD,gBAAgB,CAUlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,SAAS,CAAC,YAAY,GAAG,SAAS,GACjD,gBAAgB,CAUlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACvC,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE,GACxC,gBAAgB,CAmClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACjD,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE,GACxC,gBAAgB,CAmClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAmBpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,MAAM,CAQR"}
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Schema Validator
3
+ *
4
+ * Validates JSON data against JSON Schema using AJV (Another JSON Validator).
5
+ * Supports OpenAPI 3.x schema extensions and provides detailed error reporting.
6
+ *
7
+ * @module validators/schema-validator
8
+ */
9
+ import Ajv from 'ajv';
10
+ import addFormats from 'ajv-formats';
11
+ /**
12
+ * Schema validator instance using AJV
13
+ */
14
+ let ajvInstance = null;
15
+ /**
16
+ * Gets or creates the AJV validator instance
17
+ *
18
+ * The instance is created with:
19
+ * - All standard JSON Schema formats (email, uri, uuid, date-time, etc.)
20
+ * - Strict mode disabled to support OpenAPI extensions
21
+ * - All errors reported (not just the first one)
22
+ *
23
+ * @returns Configured AJV instance
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const ajv = getAjvInstance();
28
+ * const validate = ajv.compile(schema);
29
+ * const valid = validate(data);
30
+ * ```
31
+ */
32
+ export function getAjvInstance() {
33
+ if (!ajvInstance) {
34
+ ajvInstance = new Ajv({
35
+ allErrors: true, // Report all errors, not just the first
36
+ strict: false, // Allow OpenAPI extensions like 'nullable', 'discriminator'
37
+ validateFormats: true, // Validate format keywords
38
+ coerceTypes: false, // Don't coerce types (strict validation)
39
+ });
40
+ // Add format validators (email, uri, uuid, date-time, etc.)
41
+ addFormats(ajvInstance);
42
+ }
43
+ return ajvInstance;
44
+ }
45
+ /**
46
+ * Validates data against a JSON Schema
47
+ *
48
+ * @param data - Data to validate
49
+ * @param schema - JSON Schema to validate against
50
+ * @returns Validation result with success status and errors
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const schema = {
55
+ * type: 'object',
56
+ * required: ['email', 'name'],
57
+ * properties: {
58
+ * email: { type: 'string', format: 'email' },
59
+ * name: { type: 'string', minLength: 1 }
60
+ * }
61
+ * };
62
+ *
63
+ * const result = validateSchema({ email: 'test@example.com', name: 'John' }, schema);
64
+ * if (result.valid) {
65
+ * console.log('Valid!');
66
+ * } else {
67
+ * console.error('Validation errors:', result.errors);
68
+ * }
69
+ * ```
70
+ */
71
+ export function validateSchema(data, schema) {
72
+ const ajv = getAjvInstance();
73
+ try {
74
+ // Compile schema
75
+ const validate = ajv.compile(schema);
76
+ // Validate data
77
+ const valid = validate(data);
78
+ if (valid) {
79
+ return {
80
+ valid: true,
81
+ errors: [],
82
+ };
83
+ }
84
+ // Format errors
85
+ const errors = (validate.errors || []).map(error => {
86
+ const path = error.instancePath || 'root';
87
+ const message = error.message || 'Unknown error';
88
+ // Build detailed error message
89
+ let detailedMessage = `${path}: ${message}`;
90
+ if (error.params) {
91
+ // Add parameter details
92
+ const params = Object.entries(error.params)
93
+ .map(([key, value]) => `${key}=${JSON.stringify(value)}`)
94
+ .join(', ');
95
+ detailedMessage += ` (${params})`;
96
+ }
97
+ return {
98
+ field: path.replace(/^\//, '').replace(/\//g, '.') || 'root',
99
+ message: detailedMessage,
100
+ code: error.keyword,
101
+ value: error.data,
102
+ };
103
+ });
104
+ return {
105
+ valid: false,
106
+ errors,
107
+ };
108
+ }
109
+ catch (error) {
110
+ // Schema compilation error
111
+ return {
112
+ valid: false,
113
+ errors: [
114
+ {
115
+ field: 'schema',
116
+ message: `Invalid schema: ${error instanceof Error ? error.message : String(error)}`,
117
+ code: 'SCHEMA_ERROR',
118
+ },
119
+ ],
120
+ };
121
+ }
122
+ }
123
+ /**
124
+ * Validates request body data against an endpoint's request body schema
125
+ *
126
+ * @param data - Request body data to validate
127
+ * @param requestBodySchema - Request body schema from OpenAPI spec
128
+ * @returns Validation result
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users' && e.method === 'POST');
133
+ * const requestData = { email: 'test@example.com', name: 'John' };
134
+ *
135
+ * const result = validateRequestBody(requestData, endpoint.requestBody);
136
+ * if (!result.valid) {
137
+ * console.error('Invalid request:', result.errors);
138
+ * }
139
+ * ```
140
+ */
141
+ export function validateRequestBody(data, requestBodySchema) {
142
+ if (!requestBodySchema) {
143
+ // No schema to validate against - consider valid
144
+ return {
145
+ valid: true,
146
+ errors: [],
147
+ };
148
+ }
149
+ return validateSchema(data, requestBodySchema);
150
+ }
151
+ /**
152
+ * Validates response data against an endpoint's response schema
153
+ *
154
+ * @param data - Response data to validate
155
+ * @param responseSchema - Response schema from OpenAPI spec
156
+ * @returns Validation result
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users' && e.method === 'GET');
161
+ * const responseData = [
162
+ * { id: 1, email: 'user1@example.com', name: 'User 1' },
163
+ * { id: 2, email: 'user2@example.com', name: 'User 2' }
164
+ * ];
165
+ *
166
+ * const result = validateResponseBody(responseData, endpoint.responses[200]);
167
+ * if (!result.valid) {
168
+ * console.error('Invalid response:', result.errors);
169
+ * }
170
+ * ```
171
+ */
172
+ export function validateResponseBody(data, responseSchema) {
173
+ if (!responseSchema) {
174
+ // No schema to validate against - consider valid
175
+ return {
176
+ valid: true,
177
+ errors: [],
178
+ };
179
+ }
180
+ return validateSchema(data, responseSchema);
181
+ }
182
+ /**
183
+ * Validates path parameters against their schemas
184
+ *
185
+ * @param params - Path parameters object
186
+ * @param paramSchemas - Array of parameter definitions from OpenAPI spec
187
+ * @returns Validation result
188
+ *
189
+ * @example
190
+ * ```typescript
191
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users/{id}');
192
+ * const params = { id: '123' };
193
+ *
194
+ * const result = validatePathParams(params, endpoint.pathParams);
195
+ * if (!result.valid) {
196
+ * console.error('Invalid path params:', result.errors);
197
+ * }
198
+ * ```
199
+ */
200
+ export function validatePathParams(params, paramSchemas) {
201
+ const errors = [];
202
+ for (const paramDef of paramSchemas) {
203
+ const paramName = paramDef.name;
204
+ const paramValue = params[paramName];
205
+ // Check if required parameter is present
206
+ if (paramDef.required && (paramValue === undefined || paramValue === null)) {
207
+ errors.push({
208
+ field: paramName,
209
+ message: `Required path parameter '${paramName}' is missing`,
210
+ code: 'REQUIRED',
211
+ });
212
+ continue;
213
+ }
214
+ // Validate against schema if present
215
+ if (paramDef.schema && !('$ref' in paramDef.schema) && paramValue !== undefined) {
216
+ const schema = paramDef.schema;
217
+ const result = validateSchema(paramValue, schema);
218
+ if (!result.valid) {
219
+ errors.push(...result.errors.map((err) => ({
220
+ ...err,
221
+ field: `${paramName}.${err.field}`,
222
+ })));
223
+ }
224
+ }
225
+ }
226
+ return {
227
+ valid: errors.length === 0,
228
+ errors,
229
+ };
230
+ }
231
+ /**
232
+ * Validates query parameters against their schemas
233
+ *
234
+ * @param params - Query parameters object
235
+ * @param paramSchemas - Array of query parameter definitions from OpenAPI spec
236
+ * @returns Validation result
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * const endpoint = extractEndpoints(spec).find(e => e.path === '/users');
241
+ * const queryParams = { page: 1, limit: 10, sortBy: 'name' };
242
+ *
243
+ * const result = validateQueryParams(queryParams, endpoint.queryParams);
244
+ * if (!result.valid) {
245
+ * console.error('Invalid query params:', result.errors);
246
+ * }
247
+ * ```
248
+ */
249
+ export function validateQueryParams(params, paramSchemas) {
250
+ const errors = [];
251
+ for (const paramDef of paramSchemas) {
252
+ const paramName = paramDef.name;
253
+ const paramValue = params[paramName];
254
+ // Check if required parameter is present
255
+ if (paramDef.required && (paramValue === undefined || paramValue === null)) {
256
+ errors.push({
257
+ field: paramName,
258
+ message: `Required query parameter '${paramName}' is missing`,
259
+ code: 'REQUIRED',
260
+ });
261
+ continue;
262
+ }
263
+ // Validate against schema if present
264
+ if (paramDef.schema && !('$ref' in paramDef.schema) && paramValue !== undefined) {
265
+ const schema = paramDef.schema;
266
+ const result = validateSchema(paramValue, schema);
267
+ if (!result.valid) {
268
+ errors.push(...result.errors.map((err) => ({
269
+ ...err,
270
+ field: `${paramName}.${err.field}`,
271
+ })));
272
+ }
273
+ }
274
+ }
275
+ return {
276
+ valid: errors.length === 0,
277
+ errors,
278
+ };
279
+ }
280
+ /**
281
+ * Checks if a value matches the expected type
282
+ *
283
+ * @param value - Value to check
284
+ * @param expectedType - Expected JSON Schema type
285
+ * @returns True if value matches expected type
286
+ *
287
+ * @example
288
+ * ```typescript
289
+ * isType(123, 'integer') // true
290
+ * isType('hello', 'string') // true
291
+ * isType([], 'array') // true
292
+ * isType({}, 'object') // true
293
+ * isType(true, 'boolean') // true
294
+ * isType(3.14, 'number') // true
295
+ * isType(123, 'string') // false
296
+ * ```
297
+ */
298
+ export function isType(value, expectedType) {
299
+ switch (expectedType) {
300
+ case 'string':
301
+ return typeof value === 'string';
302
+ case 'number':
303
+ return typeof value === 'number' && !Number.isNaN(value);
304
+ case 'integer':
305
+ return typeof value === 'number' && Number.isInteger(value);
306
+ case 'boolean':
307
+ return typeof value === 'boolean';
308
+ case 'array':
309
+ return Array.isArray(value);
310
+ case 'object':
311
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
312
+ case 'null':
313
+ return value === null;
314
+ default:
315
+ return false;
316
+ }
317
+ }
318
+ /**
319
+ * Formats validation errors into a human-readable string
320
+ *
321
+ * @param errors - Array of validation errors
322
+ * @returns Formatted error message
323
+ *
324
+ * @example
325
+ * ```typescript
326
+ * const result = validateSchema(data, schema);
327
+ * if (!result.valid) {
328
+ * console.error(formatValidationErrors(result.errors));
329
+ * }
330
+ * ```
331
+ */
332
+ export function formatValidationErrors(errors) {
333
+ if (errors.length === 0) {
334
+ return 'No errors';
335
+ }
336
+ return errors
337
+ .map((err, index) => `${index + 1}. ${err.field}: ${err.message}`)
338
+ .join('\n');
339
+ }
340
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../src/validators/schema-validator.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@machina.ai/openapi-contract-tester",
3
+ "version": "2.1.0",
4
+ "description": "MCP Server for comprehensive AI-powered API testing from OpenAPI specifications",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "openapi-contract-tester": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist/",
13
+ "README.md",
14
+ ".env.example"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "tsc --watch",
19
+ "test": "jest --config jest.config.cjs",
20
+ "test:watch": "jest --config jest.config.cjs --watch",
21
+ "test:coverage": "jest --config jest.config.cjs --coverage",
22
+ "lint": "eslint src/**/*.ts",
23
+ "lint:fix": "eslint src/**/*.ts --fix",
24
+ "format": "prettier --write \"src/**/*.ts\""
25
+ },
26
+ "keywords": [
27
+ "mcp",
28
+ "model-context-protocol",
29
+ "openapi",
30
+ "swagger",
31
+ "api-testing",
32
+ "ai-testing",
33
+ "mcp-server",
34
+ "playwright",
35
+ "rest-api",
36
+ "testing",
37
+ "automation",
38
+ "auto-repair"
39
+ ],
40
+ "author": "Daniel Jahziel Martinez",
41
+ "license": "UNLICENSED",
42
+ "dependencies": {
43
+ "@apidevtools/swagger-parser": "^10.1.0",
44
+ "@faker-js/faker": "^9.2.0",
45
+ "@modelcontextprotocol/sdk": "^1.0.4",
46
+ "@playwright/test": "^1.48.0",
47
+ "@toon-format/toon": "^1.0.0",
48
+ "@types/postman-collection": "^3.5.11",
49
+ "ajv": "^8.17.1",
50
+ "ajv-formats": "^3.0.1",
51
+ "chalk": "^5.3.0",
52
+ "cli-table3": "^0.6.5",
53
+ "openapi-types": "^12.1.3",
54
+ "papaparse": "^5.5.3",
55
+ "postman-collection": "^5.2.1",
56
+ "randexp": "^0.5.3",
57
+ "swagger2openapi": "^7.0.8",
58
+ "xlsx": "^0.18.5",
59
+ "yaml": "^2.6.1",
60
+ "zod": "^3.23.8"
61
+ },
62
+ "devDependencies": {
63
+ "@types/jest": "^29.5.14",
64
+ "@types/node": "^22.10.2",
65
+ "@types/papaparse": "^5.5.0",
66
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
67
+ "@typescript-eslint/parser": "^8.19.1",
68
+ "eslint": "^9.17.0",
69
+ "jest": "^29.7.0",
70
+ "ts-jest": "^29.2.5",
71
+ "typescript": "^5.7.2"
72
+ },
73
+ "engines": {
74
+ "node": ">=18.0.0"
75
+ }
76
+ }