@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,160 @@
1
+ /**
2
+ * Endpoint Extractor
3
+ *
4
+ * Extracts and resolves endpoint information from OpenAPI specifications.
5
+ *
6
+ * @module parsers/endpoint-extractor
7
+ */
8
+ import { OpenAPIError, ErrorCode } from '../utils/errors.js';
9
+ import { createLogger } from '../utils/logger.js';
10
+ const log = createLogger('endpoint-extractor');
11
+ /**
12
+ * Extracts all endpoints from an OpenAPI specification
13
+ *
14
+ * @param spec - Parsed OpenAPI specification
15
+ * @returns Array of parsed endpoints with their metadata
16
+ */
17
+ export function extractEndpoints(spec) {
18
+ log.debug('Extracting endpoints from OpenAPI specification');
19
+ if (!spec.paths || Object.keys(spec.paths).length === 0) {
20
+ throw new OpenAPIError(ErrorCode.OPENAPI_MISSING_PATHS, 'OpenAPI specification has no paths defined', 'The specification does not define any API endpoints. Please add path definitions.', { title: spec.info?.title });
21
+ }
22
+ const endpoints = [];
23
+ for (const [path, pathItem] of Object.entries(spec.paths || {})) {
24
+ if (!pathItem)
25
+ continue;
26
+ const methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
27
+ for (const method of methods) {
28
+ const methodKey = method.toLowerCase();
29
+ const operation = pathItem[methodKey];
30
+ if (!operation)
31
+ continue;
32
+ const pathParams = [];
33
+ const queryParams = [];
34
+ const headerParams = [];
35
+ const allParams = [
36
+ ...(pathItem.parameters || []),
37
+ ...(operation.parameters || [])
38
+ ];
39
+ for (const param of allParams) {
40
+ if ('$ref' in param)
41
+ continue;
42
+ const paramObj = param;
43
+ switch (paramObj.in) {
44
+ case 'path':
45
+ pathParams.push(paramObj);
46
+ break;
47
+ case 'query':
48
+ queryParams.push(paramObj);
49
+ break;
50
+ case 'header':
51
+ headerParams.push(paramObj);
52
+ break;
53
+ }
54
+ }
55
+ // Extract request body schema (content-type agnostic)
56
+ let requestBody;
57
+ let requestContentType;
58
+ if (operation.requestBody && !('$ref' in operation.requestBody)) {
59
+ const requestBodyObj = operation.requestBody;
60
+ const contentTypes = Object.keys(requestBodyObj.content || {});
61
+ const priorityOrder = [
62
+ 'application/json',
63
+ 'application/x-www-form-urlencoded',
64
+ 'multipart/form-data'
65
+ ];
66
+ requestContentType = priorityOrder.find(ct => contentTypes.includes(ct)) || contentTypes[0];
67
+ if (requestContentType && requestBodyObj.content?.[requestContentType]) {
68
+ const content = requestBodyObj.content[requestContentType];
69
+ if (content.schema && !('$ref' in content.schema)) {
70
+ requestBody = content.schema;
71
+ }
72
+ }
73
+ }
74
+ // Extract response schemas by status code (content-type agnostic)
75
+ const responses = {};
76
+ if (operation.responses) {
77
+ for (const [statusCode, response] of Object.entries(operation.responses)) {
78
+ if ('$ref' in response)
79
+ continue;
80
+ const responseObj = response;
81
+ const responseContentTypes = Object.keys(responseObj.content || {});
82
+ const responsePriorityOrder = [
83
+ 'application/json',
84
+ 'application/xml',
85
+ 'text/plain',
86
+ 'text/html'
87
+ ];
88
+ const responseContentType = responsePriorityOrder.find(ct => responseContentTypes.includes(ct)) || responseContentTypes[0];
89
+ if (responseContentType && responseObj.content?.[responseContentType]) {
90
+ const content = responseObj.content[responseContentType];
91
+ if (content.schema && !('$ref' in content.schema)) {
92
+ // Skip 'default' — it represents an unspecified status range and
93
+ // cannot be mapped to a concrete code without overwriting real schemas
94
+ if (statusCode === 'default')
95
+ continue;
96
+ const status = parseInt(statusCode, 10);
97
+ responses[status] = content.schema;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ const security = operation.security || spec.security;
103
+ const securitySchemes = extractSecuritySchemes(spec);
104
+ const resolvedSecurity = resolveSecurityRequirements(security, securitySchemes);
105
+ const requiresAuth = !(Array.isArray(security) && security.length === 0);
106
+ endpoints.push({
107
+ method,
108
+ path,
109
+ operation,
110
+ pathParams,
111
+ queryParams,
112
+ headerParams,
113
+ requestBody,
114
+ requestContentType,
115
+ responses,
116
+ security,
117
+ securitySchemes: resolvedSecurity,
118
+ requiresAuth
119
+ });
120
+ }
121
+ }
122
+ log.info('Successfully extracted endpoints', {
123
+ count: endpoints.length,
124
+ paths: Object.keys(spec.paths).length
125
+ });
126
+ return endpoints;
127
+ }
128
+ /**
129
+ * Extracts security schemes from an OpenAPI specification
130
+ *
131
+ * @param spec - Parsed OpenAPI specification
132
+ * @returns Map of security scheme name to security scheme object
133
+ */
134
+ export function extractSecuritySchemes(spec) {
135
+ return spec.components?.securitySchemes || {};
136
+ }
137
+ /**
138
+ * Resolves security requirements to actual security scheme objects
139
+ *
140
+ * @param security - Security requirements array from operation or global
141
+ * @param schemes - Available security schemes from spec
142
+ * @returns Array of resolved security scheme objects
143
+ */
144
+ export function resolveSecurityRequirements(security, schemes) {
145
+ if (!security || security.length === 0) {
146
+ return [];
147
+ }
148
+ const resolved = [];
149
+ for (const requirement of security) {
150
+ const schemeNames = Object.keys(requirement);
151
+ for (const schemeName of schemeNames) {
152
+ const scheme = schemes[schemeName];
153
+ if (scheme) {
154
+ resolved.push(scheme);
155
+ }
156
+ }
157
+ }
158
+ return resolved;
159
+ }
160
+ //# sourceMappingURL=endpoint-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint-extractor.js","sourceRoot":"","sources":["../../src/parsers/endpoint-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * OpenAPI Specification Parser
3
+ *
4
+ * This module provides functionality to parse, validate, and extract information
5
+ * from OpenAPI 3.x and Swagger 2.0 specification files (YAML or JSON format).
6
+ * Swagger 2.0 specs are automatically converted to OpenAPI 3.0.
7
+ *
8
+ * @module parsers/openapi-parser
9
+ */
10
+ import type { OpenAPIV3 } from 'openapi-types';
11
+ import type { HttpMethod, ParsedEndpoint } from '../types/index.js';
12
+ export { extractEndpoints, extractSecuritySchemes, resolveSecurityRequirements } from './endpoint-extractor.js';
13
+ export { inferAuthFromSpec } from './visitors/auth-visitor.js';
14
+ /**
15
+ * Parses and validates an OpenAPI specification file
16
+ *
17
+ * @param specPath - Path or URL to the OpenAPI specification file (YAML or JSON)
18
+ * @returns Parsed and dereferenced OpenAPI specification
19
+ * @throws {Error} If the specification is invalid or cannot be parsed
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
24
+ * console.log(spec.info.title); // "My API"
25
+ * ```
26
+ */
27
+ export declare function parseOpenAPISpec(specPath: string): Promise<OpenAPIV3.Document>;
28
+ /**
29
+ * Validates an OpenAPI specification file without dereferencing
30
+ *
31
+ * This is faster than full parsing and useful for quick validation checks.
32
+ *
33
+ * @param specPath - Path or URL to the OpenAPI specification file
34
+ * @returns Validation result with any errors found
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const result = await validateOpenAPISpec('./api/openapi.yml');
39
+ * if (result.valid) {
40
+ * console.log('Spec is valid!');
41
+ * } else {
42
+ * console.error('Validation errors:', result.errors);
43
+ * }
44
+ * ```
45
+ */
46
+ export declare function validateOpenAPISpec(specPath: string): Promise<{
47
+ valid: boolean;
48
+ errors: string[];
49
+ warnings: string[];
50
+ }>;
51
+ /**
52
+ * Gets the base URL for the API from the servers section
53
+ *
54
+ * @param spec - Parsed OpenAPI specification
55
+ * @param environmentName - Optional environment name to filter servers
56
+ * @returns Base URL for the API, or undefined if no servers defined
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
61
+ * const baseUrl = getBaseUrl(spec);
62
+ * console.log('API base URL:', baseUrl); // "https://api.example.com/v1"
63
+ * ```
64
+ */
65
+ export declare function getBaseUrl(spec: OpenAPIV3.Document, environmentName?: string): string | undefined;
66
+ /**
67
+ * Checks if an endpoint requires authentication
68
+ *
69
+ * @param endpoint - Parsed endpoint to check
70
+ * @param spec - OpenAPI specification (for global security)
71
+ * @returns True if the endpoint requires authentication
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
76
+ * const endpoints = extractEndpoints(spec);
77
+ * const authRequired = isAuthRequired(endpoints[0], spec);
78
+ * console.log('Auth required:', authRequired);
79
+ * ```
80
+ */
81
+ export declare function isAuthRequired(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
82
+ /**
83
+ * Extracts all unique tags from the specification
84
+ *
85
+ * @param spec - Parsed OpenAPI specification
86
+ * @returns Array of unique tag names
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
91
+ * const tags = extractTags(spec);
92
+ * console.log('API tags:', tags); // ["users", "orders", "products"]
93
+ * ```
94
+ */
95
+ export declare function extractTags(spec: OpenAPIV3.Document): string[];
96
+ /**
97
+ * Gets a human-readable summary of the OpenAPI specification
98
+ *
99
+ * @param spec - Parsed OpenAPI specification
100
+ * @returns Summary object with key information
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
105
+ * const summary = getSpecSummary(spec);
106
+ * console.log(summary.title); // "My API"
107
+ * console.log(summary.totalEndpoints); // 25
108
+ * ```
109
+ */
110
+ export declare function getSpecSummary(spec: OpenAPIV3.Document): {
111
+ title: string;
112
+ version: string;
113
+ description?: string;
114
+ totalEndpoints: number;
115
+ endpointsByMethod: Record<HttpMethod, number>;
116
+ tags: string[];
117
+ hasAuthentication: boolean;
118
+ servers: string[];
119
+ };
120
+ //# sourceMappingURL=openapi-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/openapi-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQpE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAsFpF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAeD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBjG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAQ1F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,MAAM,EAAE,CA2B9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CA2BA"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * OpenAPI Specification Parser
3
+ *
4
+ * This module provides functionality to parse, validate, and extract information
5
+ * from OpenAPI 3.x and Swagger 2.0 specification files (YAML or JSON format).
6
+ * Swagger 2.0 specs are automatically converted to OpenAPI 3.0.
7
+ *
8
+ * @module parsers/openapi-parser
9
+ */
10
+ import SwaggerParser from '@apidevtools/swagger-parser';
11
+ // @ts-ignore - swagger2openapi doesn't have type definitions
12
+ import * as swagger2openapi from 'swagger2openapi';
13
+ import { OpenAPIError, ErrorCode } from '../utils/errors.js';
14
+ import { createLogger } from '../utils/logger.js';
15
+ import { extractEndpoints } from './endpoint-extractor.js';
16
+ const log = createLogger('openapi-parser');
17
+ // Re-export from extracted modules for backward compatibility
18
+ export { extractEndpoints, extractSecuritySchemes, resolveSecurityRequirements } from './endpoint-extractor.js';
19
+ export { inferAuthFromSpec } from './visitors/auth-visitor.js';
20
+ /**
21
+ * Parses and validates an OpenAPI specification file
22
+ *
23
+ * @param specPath - Path or URL to the OpenAPI specification file (YAML or JSON)
24
+ * @returns Parsed and dereferenced OpenAPI specification
25
+ * @throws {Error} If the specification is invalid or cannot be parsed
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
30
+ * console.log(spec.info.title); // "My API"
31
+ * ```
32
+ */
33
+ export async function parseOpenAPISpec(specPath) {
34
+ log.debug('Parsing OpenAPI specification', { specPath });
35
+ try {
36
+ // First, bundle without dereferencing to detect version
37
+ const bundled = await SwaggerParser.bundle(specPath);
38
+ const apiAny = bundled;
39
+ // Detect spec version
40
+ const isSwagger2 = apiAny.swagger?.startsWith('2.');
41
+ const isOpenAPI3 = apiAny.openapi?.startsWith('3.');
42
+ if (!isSwagger2 && !isOpenAPI3) {
43
+ throw new OpenAPIError(ErrorCode.OPENAPI_INVALID_SPEC, 'Invalid API specification: missing openapi or swagger version field', 'The specification file is not a valid OpenAPI 3.x or Swagger 2.0 document. Please check the file format.', { specPath });
44
+ }
45
+ let openapi3Spec;
46
+ if (isSwagger2) {
47
+ // Convert Swagger 2.0 to OpenAPI 3.0 automatically
48
+ log.info('Detected Swagger 2.0 specification, converting to OpenAPI 3.0...', {
49
+ specPath,
50
+ swaggerVersion: apiAny.swagger,
51
+ title: apiAny.info?.title
52
+ });
53
+ try {
54
+ const conversionResult = await swagger2openapi.convertObj(bundled, {
55
+ patch: true, // Auto-fix common issues
56
+ warnOnly: true, // Don't fail on warnings
57
+ direct: true, // Return object directly
58
+ });
59
+ openapi3Spec = conversionResult.openapi;
60
+ log.info('Successfully converted Swagger 2.0 to OpenAPI 3.0', {
61
+ specPath,
62
+ originalVersion: apiAny.swagger,
63
+ convertedVersion: openapi3Spec.openapi
64
+ });
65
+ }
66
+ catch (conversionError) {
67
+ throw new OpenAPIError(ErrorCode.OPENAPI_PARSE_ERROR, `Failed to convert Swagger 2.0 to OpenAPI 3.0: ${conversionError instanceof Error ? conversionError.message : String(conversionError)}`, 'The Swagger 2.0 specification could not be converted to OpenAPI 3.0. Please check the specification for compatibility issues.', { specPath, originalError: conversionError instanceof Error ? conversionError.message : String(conversionError) });
68
+ }
69
+ }
70
+ else {
71
+ openapi3Spec = bundled;
72
+ }
73
+ // Now dereference the OpenAPI 3.x spec (resolve all $ref references)
74
+ const dereferenced = await SwaggerParser.dereference(openapi3Spec);
75
+ const version = dereferenced.openapi;
76
+ log.info('Successfully parsed OpenAPI specification', {
77
+ specPath,
78
+ version,
79
+ wasConverted: isSwagger2,
80
+ title: dereferenced.info?.title
81
+ });
82
+ return dereferenced;
83
+ }
84
+ catch (error) {
85
+ // If already an OpenAPIError, rethrow
86
+ if (error instanceof OpenAPIError) {
87
+ throw error;
88
+ }
89
+ // Wrap other errors
90
+ log.error('Failed to parse OpenAPI specification', { specPath, error });
91
+ throw new OpenAPIError(ErrorCode.OPENAPI_PARSE_ERROR, error instanceof Error ? error.message : String(error), 'Failed to parse the OpenAPI specification. Please check that the file exists and is valid YAML/JSON.', { specPath, originalError: error instanceof Error ? error.message : String(error) });
92
+ }
93
+ }
94
+ /**
95
+ * Validates an OpenAPI specification file without dereferencing
96
+ *
97
+ * This is faster than full parsing and useful for quick validation checks.
98
+ *
99
+ * @param specPath - Path or URL to the OpenAPI specification file
100
+ * @returns Validation result with any errors found
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * const result = await validateOpenAPISpec('./api/openapi.yml');
105
+ * if (result.valid) {
106
+ * console.log('Spec is valid!');
107
+ * } else {
108
+ * console.error('Validation errors:', result.errors);
109
+ * }
110
+ * ```
111
+ */
112
+ export async function validateOpenAPISpec(specPath) {
113
+ const errors = [];
114
+ const warnings = [];
115
+ try {
116
+ await SwaggerParser.validate(specPath);
117
+ return { valid: true, errors, warnings };
118
+ }
119
+ catch (error) {
120
+ if (error instanceof Error) {
121
+ errors.push(error.message);
122
+ }
123
+ else {
124
+ errors.push('Unknown validation error');
125
+ }
126
+ return { valid: false, errors, warnings };
127
+ }
128
+ }
129
+ /**
130
+ * Gets the base URL for the API from the servers section
131
+ *
132
+ * @param spec - Parsed OpenAPI specification
133
+ * @param environmentName - Optional environment name to filter servers
134
+ * @returns Base URL for the API, or undefined if no servers defined
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
139
+ * const baseUrl = getBaseUrl(spec);
140
+ * console.log('API base URL:', baseUrl); // "https://api.example.com/v1"
141
+ * ```
142
+ */
143
+ export function getBaseUrl(spec, environmentName) {
144
+ if (!spec.servers || spec.servers.length === 0) {
145
+ return undefined;
146
+ }
147
+ // If environment name provided, try to find matching server
148
+ if (environmentName) {
149
+ const server = spec.servers.find(s => s.description?.toLowerCase().includes(environmentName.toLowerCase()));
150
+ if (server) {
151
+ return server.url;
152
+ }
153
+ }
154
+ // Return first server URL
155
+ return spec.servers[0].url;
156
+ }
157
+ /**
158
+ * Checks if an endpoint requires authentication
159
+ *
160
+ * @param endpoint - Parsed endpoint to check
161
+ * @param spec - OpenAPI specification (for global security)
162
+ * @returns True if the endpoint requires authentication
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
167
+ * const endpoints = extractEndpoints(spec);
168
+ * const authRequired = isAuthRequired(endpoints[0], spec);
169
+ * console.log('Auth required:', authRequired);
170
+ * ```
171
+ */
172
+ export function isAuthRequired(endpoint, spec) {
173
+ // Check operation-level security
174
+ if (endpoint.operation.security) {
175
+ return endpoint.operation.security.length > 0;
176
+ }
177
+ // Check global security
178
+ return (spec.security?.length || 0) > 0;
179
+ }
180
+ /**
181
+ * Extracts all unique tags from the specification
182
+ *
183
+ * @param spec - Parsed OpenAPI specification
184
+ * @returns Array of unique tag names
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
189
+ * const tags = extractTags(spec);
190
+ * console.log('API tags:', tags); // ["users", "orders", "products"]
191
+ * ```
192
+ */
193
+ export function extractTags(spec) {
194
+ const tags = new Set();
195
+ // Add tags from the tags section
196
+ if (spec.tags) {
197
+ for (const tag of spec.tags) {
198
+ tags.add(tag.name);
199
+ }
200
+ }
201
+ // Add tags from operations
202
+ for (const pathItem of Object.values(spec.paths || {})) {
203
+ if (!pathItem)
204
+ continue;
205
+ const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];
206
+ for (const method of methods) {
207
+ const operation = pathItem[method];
208
+ if (operation?.tags) {
209
+ for (const tag of operation.tags) {
210
+ tags.add(tag);
211
+ }
212
+ }
213
+ }
214
+ }
215
+ return Array.from(tags);
216
+ }
217
+ /**
218
+ * Gets a human-readable summary of the OpenAPI specification
219
+ *
220
+ * @param spec - Parsed OpenAPI specification
221
+ * @returns Summary object with key information
222
+ *
223
+ * @example
224
+ * ```typescript
225
+ * const spec = await parseOpenAPISpec('./api/openapi.yml');
226
+ * const summary = getSpecSummary(spec);
227
+ * console.log(summary.title); // "My API"
228
+ * console.log(summary.totalEndpoints); // 25
229
+ * ```
230
+ */
231
+ export function getSpecSummary(spec) {
232
+ const endpoints = extractEndpoints(spec);
233
+ const endpointsByMethod = {
234
+ GET: 0,
235
+ POST: 0,
236
+ PUT: 0,
237
+ PATCH: 0,
238
+ DELETE: 0,
239
+ HEAD: 0,
240
+ OPTIONS: 0
241
+ };
242
+ for (const endpoint of endpoints) {
243
+ endpointsByMethod[endpoint.method]++;
244
+ }
245
+ return {
246
+ title: spec.info.title,
247
+ version: spec.info.version,
248
+ description: spec.info.description,
249
+ totalEndpoints: endpoints.length,
250
+ endpointsByMethod,
251
+ tags: extractTags(spec),
252
+ hasAuthentication: (spec.security?.length || 0) > 0 ||
253
+ Object.keys(spec.components?.securitySchemes || {}).length > 0,
254
+ servers: (spec.servers || []).map(s => s.url)
255
+ };
256
+ }
257
+ //# sourceMappingURL=openapi-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-parser.js","sourceRoot":"","sources":["../../src/parsers/openapi-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Auth Inference Visitor
3
+ *
4
+ * Infers authentication configuration from OpenAPI security schemes.
5
+ * Implements the Visitor pattern for spec-level auth analysis.
6
+ *
7
+ * @module parsers/visitors/auth-visitor
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ /**
11
+ * Infers authentication configuration from OpenAPI security schemes.
12
+ *
13
+ * Automatically detects OAuth2, Bearer, API Key, and Basic auth from the spec
14
+ * and constructs the appropriate AuthConfig using provided credentials.
15
+ *
16
+ * @param spec - Parsed OpenAPI specification
17
+ * @param credentials - User-provided credentials
18
+ * @returns AuthConfig object or undefined if no auth detected
19
+ */
20
+ export declare function inferAuthFromSpec(spec: OpenAPIV3.Document, credentials?: {
21
+ clientId?: string;
22
+ clientSecret?: string;
23
+ apiKey?: string;
24
+ username?: string;
25
+ password?: string;
26
+ bearerToken?: string;
27
+ }): any;
28
+ //# sourceMappingURL=auth-visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-visitor.d.ts","sourceRoot":"","sources":["../../../src/parsers/visitors/auth-visitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,CAAC,QAAQ,EACxB,WAAW,CAAC,EAAE;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,GAAG,CA2GL"}