@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,118 @@
1
+ /**
2
+ * Auth Error Strategies - 401 and 403 scenarios
3
+ *
4
+ * @module generators/errors/auth-error-strategy
5
+ */
6
+ import { generateAuthHeaders } from '../../utils/auth-generator.js';
7
+ import { BaseErrorStrategy } from './error-strategy.js';
8
+ /**
9
+ * Strategy for 401 Unauthorized tests
10
+ * Generates: no-auth and invalid-token scenarios
11
+ */
12
+ export class UnauthorizedErrorStrategy extends BaseErrorStrategy {
13
+ statusCodes = [401];
14
+ isApplicable(endpoint, spec) {
15
+ return this.isAuthRequired(endpoint, spec);
16
+ }
17
+ generate(endpoint, _spec, options) {
18
+ const body = endpoint.requestBody
19
+ ? this.generateBody(endpoint.requestBody, options)
20
+ : undefined;
21
+ const pathParams = this.generatePathParams(endpoint);
22
+ return [
23
+ {
24
+ id: this.buildId(endpoint, '401-no-auth'),
25
+ name: `${endpoint.method} ${endpoint.path} - No authentication`,
26
+ description: 'Request without authentication should return 401',
27
+ category: 'error-case',
28
+ method: endpoint.method,
29
+ path: endpoint.path,
30
+ pathParams,
31
+ body,
32
+ contentType: endpoint.requestContentType,
33
+ headers: {},
34
+ expectedStatus: 401,
35
+ requiresAuth: endpoint.requiresAuth,
36
+ },
37
+ {
38
+ id: this.buildId(endpoint, '401-invalid-token'),
39
+ name: `${endpoint.method} ${endpoint.path} - Invalid token`,
40
+ description: 'Request with invalid token should return 401',
41
+ category: 'error-case',
42
+ method: endpoint.method,
43
+ path: endpoint.path,
44
+ pathParams,
45
+ body,
46
+ contentType: endpoint.requestContentType,
47
+ headers: { Authorization: 'Bearer invalid-token-12345' },
48
+ expectedStatus: 401,
49
+ requiresAuth: endpoint.requiresAuth,
50
+ },
51
+ ];
52
+ }
53
+ }
54
+ /**
55
+ * Strategy for 403 Forbidden tests
56
+ * Generates: valid auth but insufficient permissions
57
+ */
58
+ export class ForbiddenErrorStrategy extends BaseErrorStrategy {
59
+ statusCodes = [403];
60
+ isApplicable(_endpoint, _spec) {
61
+ return true; // 403 can happen on any endpoint
62
+ }
63
+ generate(endpoint, _spec, options) {
64
+ const body = endpoint.requestBody
65
+ ? this.generateBody(endpoint.requestBody, options)
66
+ : undefined;
67
+ return [{
68
+ id: this.buildId(endpoint, '403-forbidden'),
69
+ name: `${endpoint.method} ${endpoint.path} - Forbidden (insufficient permissions)`,
70
+ description: 'Request with valid auth but insufficient permissions should return 403',
71
+ category: 'error-case',
72
+ method: endpoint.method,
73
+ path: endpoint.path,
74
+ pathParams: this.generatePathParams(endpoint),
75
+ body,
76
+ contentType: endpoint.requestContentType,
77
+ headers: { Authorization: 'Bearer {{LIMITED_PERMISSIONS_TOKEN}}' },
78
+ expectedStatus: 403,
79
+ requiresAuth: endpoint.requiresAuth,
80
+ }];
81
+ }
82
+ }
83
+ /**
84
+ * Strategy for heuristic 401 tests (when spec doesn't define 401 explicitly)
85
+ * Used in the heuristic fallback path
86
+ */
87
+ export class HeuristicAuthErrorStrategy extends BaseErrorStrategy {
88
+ statusCodes = [401];
89
+ isApplicable(endpoint, _spec) {
90
+ return endpoint.requiresAuth !== false;
91
+ }
92
+ generate(endpoint, spec, options) {
93
+ if (!this.isAuthRequired(endpoint, spec))
94
+ return [];
95
+ const body = endpoint.requestBody
96
+ ? this.generateBody(endpoint.requestBody, options)
97
+ : undefined;
98
+ const pathParams = this.generatePathParams(endpoint);
99
+ const authHeaders = generateAuthHeaders(endpoint.securitySchemes || []);
100
+ return [
101
+ {
102
+ id: this.buildId(endpoint, '401-no-auth'),
103
+ name: `${endpoint.method} ${endpoint.path} - No authentication`,
104
+ description: 'Request without authentication should return 401',
105
+ category: 'error-case',
106
+ method: endpoint.method,
107
+ path: endpoint.path,
108
+ pathParams,
109
+ body,
110
+ contentType: endpoint.requestContentType,
111
+ headers: authHeaders,
112
+ expectedStatus: 401,
113
+ requiresAuth: endpoint.requiresAuth,
114
+ },
115
+ ];
116
+ }
117
+ }
118
+ //# sourceMappingURL=auth-error-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/auth-error-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAE/E;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,iBAAiB;IACrD,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;IAE7B,YAAY,CAAC,QAAwB,EAAE,IAAwB;QAC7D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,QAAwB,EAAE,KAAyB,EAAE,OAAyB;QACrF,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW;YAC/B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAErD,OAAO;YACL;gBACE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;gBACzC,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,sBAAsB;gBAC/D,WAAW,EAAE,kDAAkD;gBAC/D,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU;gBACV,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,kBAAkB;gBACxC,OAAO,EAAE,EAAE;gBACX,cAAc,EAAE,GAAG;gBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC;YACD;gBACE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gBAC/C,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,kBAAkB;gBAC3D,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU;gBACV,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,kBAAkB;gBACxC,OAAO,EAAE,EAAE,aAAa,EAAE,4BAA4B,EAAE;gBACxD,cAAc,EAAE,GAAG;gBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC;SACF,CAAC;IACJ,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IAClD,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;IAE7B,YAAY,CAAC,SAAyB,EAAE,KAAyB;QAC/D,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAChD,CAAC;IAED,QAAQ,CAAC,QAAwB,EAAE,KAAyB,EAAE,OAAyB;QACrF,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW;YAC/B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO,CAAC;gBACN,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC;gBAC3C,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,yCAAyC;gBAClF,WAAW,EAAE,wEAAwE;gBACrF,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC7C,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,kBAAkB;gBACxC,OAAO,EAAE,EAAE,aAAa,EAAE,sCAAsC,EAAE;gBAClE,cAAc,EAAE,GAAG;gBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,iBAAiB;IACtD,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;IAE7B,YAAY,CAAC,QAAwB,EAAE,KAAyB;QAC9D,OAAO,QAAQ,CAAC,YAAY,KAAK,KAAK,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,QAAwB,EAAE,IAAwB,EAAE,OAAyB;QACpF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAEpD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW;YAC/B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO;YACL;gBACE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;gBACzC,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,sBAAsB;gBAC/D,WAAW,EAAE,kDAAkD;gBAC/D,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU;gBACV,IAAI;gBACJ,WAAW,EAAE,QAAQ,CAAC,kBAAkB;gBACxC,OAAO,EAAE,WAAW;gBACpB,cAAc,EAAE,GAAG;gBACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Business Error Strategies - 404, 409, 422 and generic error scenarios
3
+ *
4
+ * @module generators/errors/business-error-strategy
5
+ */
6
+ import type { OpenAPIV3 } from 'openapi-types';
7
+ import type { TestCase, ParsedEndpoint } from '../../types/index.js';
8
+ import { BaseErrorStrategy, type ErrorCaseOptions } from './error-strategy.js';
9
+ /**
10
+ * Strategy for 404 Not Found tests
11
+ */
12
+ export declare class NotFoundErrorStrategy extends BaseErrorStrategy {
13
+ readonly statusCodes: number[];
14
+ isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
15
+ generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
16
+ }
17
+ /**
18
+ * Strategy for 409 Conflict tests
19
+ */
20
+ export declare class ConflictErrorStrategy extends BaseErrorStrategy {
21
+ readonly statusCodes: number[];
22
+ isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
23
+ generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
24
+ }
25
+ /**
26
+ * Strategy for 422 Unprocessable Entity tests
27
+ */
28
+ export declare class UnprocessableEntityErrorStrategy extends BaseErrorStrategy {
29
+ readonly statusCodes: number[];
30
+ isApplicable(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
31
+ generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
32
+ }
33
+ /**
34
+ * Generic error strategy for 429, 5xx, and other unhandled codes
35
+ */
36
+ export declare class GenericErrorStrategy extends BaseErrorStrategy {
37
+ private readonly errorCode;
38
+ private static readonly ERROR_DESCRIPTIONS;
39
+ constructor(errorCode: number);
40
+ readonly statusCodes: number[];
41
+ isApplicable(_endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document): boolean;
42
+ generate(endpoint: ParsedEndpoint, _spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
43
+ }
44
+ //# sourceMappingURL=business-error-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-error-strategy.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/business-error-strategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAO1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAuCrG;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB;IAC1D,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAkBrG;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,iBAAiB;IACrE,QAAQ,CAAC,WAAW,WAAS;IAE7B,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI1E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAkBrG;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IAS7C,OAAO,CAAC,QAAQ,CAAC,SAAS;IARtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAMxC;gBAE2B,SAAS,EAAE,MAAM;IAI9C,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAEpC,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAI3E,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;CAoBrG"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Business Error Strategies - 404, 409, 422 and generic error scenarios
3
+ *
4
+ * @module generators/errors/business-error-strategy
5
+ */
6
+ import { generateAuthHeaders } from '../../utils/auth-generator.js';
7
+ import { BaseErrorStrategy } from './error-strategy.js';
8
+ /**
9
+ * Strategy for 404 Not Found tests
10
+ */
11
+ export class NotFoundErrorStrategy extends BaseErrorStrategy {
12
+ statusCodes = [404];
13
+ isApplicable(endpoint, _spec) {
14
+ return (endpoint.pathParams.length > 0 &&
15
+ ['GET', 'PUT', 'PATCH', 'DELETE'].includes(endpoint.method));
16
+ }
17
+ generate(endpoint, _spec, options) {
18
+ if (!this.isApplicable(endpoint, _spec))
19
+ return [];
20
+ const body = endpoint.requestBody
21
+ ? this.generateBody(endpoint.requestBody, options)
22
+ : undefined;
23
+ // Use non-existent IDs for path params
24
+ const pathParams = {};
25
+ for (const param of endpoint.pathParams) {
26
+ if (param.schema && !('$ref' in param.schema)) {
27
+ const schema = param.schema;
28
+ if (schema.format === 'uuid') {
29
+ pathParams[param.name] = '00000000-0000-0000-0000-000000000000';
30
+ }
31
+ else if (schema.type === 'integer') {
32
+ pathParams[param.name] = 99999999;
33
+ }
34
+ else {
35
+ pathParams[param.name] = 'non-existent-id';
36
+ }
37
+ }
38
+ else {
39
+ pathParams[param.name] = 'non-existent-id';
40
+ }
41
+ }
42
+ return [{
43
+ id: this.buildId(endpoint, '404-not-found'),
44
+ name: `${endpoint.method} ${endpoint.path} - Resource not found`,
45
+ description: 'Request for non-existent resource should return 404',
46
+ category: 'error-case',
47
+ method: endpoint.method,
48
+ path: endpoint.path,
49
+ pathParams,
50
+ headers: generateAuthHeaders(endpoint.securitySchemes || []),
51
+ body,
52
+ contentType: endpoint.requestContentType,
53
+ expectedStatus: 404,
54
+ requiresAuth: endpoint.requiresAuth,
55
+ }];
56
+ }
57
+ }
58
+ /**
59
+ * Strategy for 409 Conflict tests
60
+ */
61
+ export class ConflictErrorStrategy extends BaseErrorStrategy {
62
+ statusCodes = [409];
63
+ isApplicable(endpoint, _spec) {
64
+ return ['POST', 'PUT'].includes(endpoint.method) && !!endpoint.requestBody;
65
+ }
66
+ generate(endpoint, _spec, options) {
67
+ if (!endpoint.requestBody)
68
+ return [];
69
+ return [{
70
+ id: this.buildId(endpoint, '409-conflict'),
71
+ name: `${endpoint.method} ${endpoint.path} - Conflict (duplicate resource)`,
72
+ description: 'Request that creates a duplicate resource should return 409',
73
+ category: 'error-case',
74
+ method: endpoint.method,
75
+ path: endpoint.path,
76
+ pathParams: this.generatePathParams(endpoint),
77
+ headers: generateAuthHeaders(endpoint.securitySchemes || []),
78
+ body: this.generateBody(endpoint.requestBody, options),
79
+ contentType: endpoint.requestContentType,
80
+ expectedStatus: 409,
81
+ requiresAuth: endpoint.requiresAuth,
82
+ }];
83
+ }
84
+ }
85
+ /**
86
+ * Strategy for 422 Unprocessable Entity tests
87
+ */
88
+ export class UnprocessableEntityErrorStrategy extends BaseErrorStrategy {
89
+ statusCodes = [422];
90
+ isApplicable(endpoint, _spec) {
91
+ return !!endpoint.requestBody;
92
+ }
93
+ generate(endpoint, _spec, options) {
94
+ if (!endpoint.requestBody)
95
+ return [];
96
+ return [{
97
+ id: this.buildId(endpoint, '422-unprocessable'),
98
+ name: `${endpoint.method} ${endpoint.path} - Unprocessable Entity (business rule violation)`,
99
+ description: 'Request that violates business rules should return 422',
100
+ category: 'error-case',
101
+ method: endpoint.method,
102
+ path: endpoint.path,
103
+ pathParams: this.generatePathParams(endpoint),
104
+ headers: generateAuthHeaders(endpoint.securitySchemes || []),
105
+ body: this.generateBody(endpoint.requestBody, options),
106
+ contentType: endpoint.requestContentType,
107
+ expectedStatus: 422,
108
+ requiresAuth: endpoint.requiresAuth,
109
+ }];
110
+ }
111
+ }
112
+ /**
113
+ * Generic error strategy for 429, 5xx, and other unhandled codes
114
+ */
115
+ export class GenericErrorStrategy extends BaseErrorStrategy {
116
+ errorCode;
117
+ static ERROR_DESCRIPTIONS = {
118
+ 429: 'Too Many Requests (rate limited)',
119
+ 500: 'Internal Server Error',
120
+ 502: 'Bad Gateway',
121
+ 503: 'Service Unavailable',
122
+ 504: 'Gateway Timeout',
123
+ };
124
+ constructor(errorCode) {
125
+ super();
126
+ this.errorCode = errorCode;
127
+ }
128
+ statusCodes = [];
129
+ isApplicable(_endpoint, _spec) {
130
+ return true;
131
+ }
132
+ generate(endpoint, _spec, options) {
133
+ const description = GenericErrorStrategy.ERROR_DESCRIPTIONS[this.errorCode] || `Error ${this.errorCode}`;
134
+ const body = endpoint.requestBody
135
+ ? this.generateBody(endpoint.requestBody, options)
136
+ : undefined;
137
+ return [{
138
+ id: this.buildId(endpoint, `${this.errorCode}`),
139
+ name: `${endpoint.method} ${endpoint.path} - ${description}`,
140
+ description: `Endpoint should handle ${this.errorCode} responses correctly`,
141
+ category: 'error-case',
142
+ method: endpoint.method,
143
+ path: endpoint.path,
144
+ pathParams: this.generatePathParams(endpoint),
145
+ headers: generateAuthHeaders(endpoint.securitySchemes || []),
146
+ body,
147
+ contentType: endpoint.requestContentType,
148
+ expectedStatus: this.errorCode,
149
+ }];
150
+ }
151
+ }
152
+ //# sourceMappingURL=business-error-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/business-error-strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Error Strategy Factory
3
+ *
4
+ * Creates appropriate error strategy instances for a given HTTP status code.
5
+ * Centralizes strategy instantiation and selection logic.
6
+ *
7
+ * @module generators/errors/error-strategy-factory
8
+ */
9
+ import type { ErrorStrategy } from './error-strategy.js';
10
+ /**
11
+ * Factory that creates appropriate error strategies for HTTP status codes
12
+ */
13
+ export declare class ErrorStrategyFactory {
14
+ /**
15
+ * Create the appropriate strategy for a given HTTP error code
16
+ */
17
+ static createForCode(errorCode: number): ErrorStrategy;
18
+ /**
19
+ * Create all heuristic strategies (used when spec doesn't define error codes)
20
+ */
21
+ static createHeuristicStrategies(): ErrorStrategy[];
22
+ /**
23
+ * Create strategies for all provided error codes
24
+ */
25
+ static createForCodes(errorCodes: number[]): ErrorStrategy[];
26
+ }
27
+ //# sourceMappingURL=error-strategy-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-strategy-factory.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAYtD;;OAEG;IACH,MAAM,CAAC,yBAAyB,IAAI,aAAa,EAAE;IAQnD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE;CAG7D"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Error Strategy Factory
3
+ *
4
+ * Creates appropriate error strategy instances for a given HTTP status code.
5
+ * Centralizes strategy instantiation and selection logic.
6
+ *
7
+ * @module generators/errors/error-strategy-factory
8
+ */
9
+ import { UnauthorizedErrorStrategy, ForbiddenErrorStrategy } from './auth-error-strategy.js';
10
+ import { BadRequestErrorStrategy } from './validation-error-strategy.js';
11
+ import { NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, } from './business-error-strategy.js';
12
+ /**
13
+ * Factory that creates appropriate error strategies for HTTP status codes
14
+ */
15
+ export class ErrorStrategyFactory {
16
+ /**
17
+ * Create the appropriate strategy for a given HTTP error code
18
+ */
19
+ static createForCode(errorCode) {
20
+ switch (errorCode) {
21
+ case 400: return new BadRequestErrorStrategy();
22
+ case 401: return new UnauthorizedErrorStrategy();
23
+ case 403: return new ForbiddenErrorStrategy();
24
+ case 404: return new NotFoundErrorStrategy();
25
+ case 409: return new ConflictErrorStrategy();
26
+ case 422: return new UnprocessableEntityErrorStrategy();
27
+ default: return new GenericErrorStrategy(errorCode);
28
+ }
29
+ }
30
+ /**
31
+ * Create all heuristic strategies (used when spec doesn't define error codes)
32
+ */
33
+ static createHeuristicStrategies() {
34
+ return [
35
+ new BadRequestErrorStrategy(), // 400
36
+ new UnauthorizedErrorStrategy(), // 401
37
+ new NotFoundErrorStrategy(), // 404
38
+ ];
39
+ }
40
+ /**
41
+ * Create strategies for all provided error codes
42
+ */
43
+ static createForCodes(errorCodes) {
44
+ return errorCodes.map(code => this.createForCode(code));
45
+ }
46
+ }
47
+ //# sourceMappingURL=error-strategy-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-strategy-factory.js","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,SAAiB;QACpC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC;YAC/C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,yBAAyB,EAAE,CAAC;YACjD,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,sBAAsB,EAAE,CAAC;YAC9C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC7C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;YAC7C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,gCAAgC,EAAE,CAAC;YACxD,OAAO,CAAC,CAAE,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,yBAAyB;QAC9B,OAAO;YACL,IAAI,uBAAuB,EAAE,EAAQ,MAAM;YAC3C,IAAI,yBAAyB,EAAE,EAAM,MAAM;YAC3C,IAAI,qBAAqB,EAAE,EAAU,MAAM;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAoB;QACxC,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Error Strategy - Base Strategy Interface
3
+ *
4
+ * Defines the contract for all error test case generators.
5
+ * Each HTTP error code family has its own strategy implementation.
6
+ *
7
+ * @module generators/errors/error-strategy
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ import type { TestCase, ParsedEndpoint } from '../../types/index.js';
11
+ import type { AILevel } from '../../types/ai-config.js';
12
+ import type { APIContext } from '../../llm/data-generator-ai.js';
13
+ /**
14
+ * Options passed to each error strategy
15
+ */
16
+ export interface ErrorCaseOptions {
17
+ seed?: number;
18
+ aiLevel?: AILevel;
19
+ apiContext?: APIContext;
20
+ }
21
+ /**
22
+ * Base Strategy interface for error test generation
23
+ */
24
+ export interface ErrorStrategy {
25
+ /**
26
+ * The HTTP status code(s) this strategy handles
27
+ */
28
+ readonly statusCodes: number[];
29
+ /**
30
+ * Whether this strategy applies to the given endpoint
31
+ */
32
+ isApplicable(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
33
+ /**
34
+ * Generate test cases for the given endpoint
35
+ */
36
+ generate(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
37
+ }
38
+ /**
39
+ * Abstract base class with shared helpers for all error strategies
40
+ */
41
+ export declare abstract class BaseErrorStrategy implements ErrorStrategy {
42
+ abstract readonly statusCodes: number[];
43
+ abstract isApplicable(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
44
+ abstract generate(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document, options: ErrorCaseOptions): TestCase[];
45
+ /**
46
+ * Generate body data using current options
47
+ */
48
+ protected generateBody(schema: OpenAPIV3.SchemaObject, options: ErrorCaseOptions, includeOptional?: boolean): unknown;
49
+ /**
50
+ * Generate standard path parameters for an endpoint
51
+ */
52
+ protected generatePathParams(endpoint: ParsedEndpoint): Record<string, string | number>;
53
+ /**
54
+ * Build a unique test case ID
55
+ */
56
+ protected buildId(endpoint: ParsedEndpoint, suffix: string): string;
57
+ /**
58
+ * Check if global or operation-level auth is required
59
+ */
60
+ protected isAuthRequired(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
61
+ }
62
+ //# sourceMappingURL=error-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-strategy.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE,CAAC;CACrG;AAED;;GAEG;AACH,8BAAsB,iBAAkB,YAAW,aAAa;IAC9D,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;IAClF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,QAAQ,EAAE;IAE5G;;OAEG;IACH,SAAS,CAAC,YAAY,CACpB,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,OAAO,EAAE,gBAAgB,EACzB,eAAe,UAAQ,GACtB,OAAO;IAWV;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAqBvF;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAKnE;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO;CAKtF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Error Strategy - Base Strategy Interface
3
+ *
4
+ * Defines the contract for all error test case generators.
5
+ * Each HTTP error code family has its own strategy implementation.
6
+ *
7
+ * @module generators/errors/error-strategy
8
+ */
9
+ import { faker } from '@faker-js/faker';
10
+ import { generateDataFromSchemaSync, aiLevelToMode } from '../data-generator.js';
11
+ /**
12
+ * Abstract base class with shared helpers for all error strategies
13
+ */
14
+ export class BaseErrorStrategy {
15
+ /**
16
+ * Generate body data using current options
17
+ */
18
+ generateBody(schema, options, includeOptional = false) {
19
+ const { aiLevel, apiContext } = options;
20
+ const effectiveAiMode = aiLevelToMode(aiLevel);
21
+ return generateDataFromSchemaSync(schema, {
22
+ includeOptional,
23
+ aiMode: effectiveAiMode || 'faker',
24
+ apiContext
25
+ });
26
+ }
27
+ /**
28
+ * Generate standard path parameters for an endpoint
29
+ */
30
+ generatePathParams(endpoint) {
31
+ const params = {};
32
+ for (const param of endpoint.pathParams) {
33
+ if (param.schema && !('$ref' in param.schema)) {
34
+ const schema = param.schema;
35
+ if (schema.type === 'integer') {
36
+ params[param.name] = 1;
37
+ }
38
+ else if (schema.format === 'uuid') {
39
+ params[param.name] = faker.string.uuid();
40
+ }
41
+ else {
42
+ params[param.name] = faker.string.alphanumeric(10);
43
+ }
44
+ }
45
+ else {
46
+ params[param.name] = faker.string.uuid();
47
+ }
48
+ }
49
+ return params;
50
+ }
51
+ /**
52
+ * Build a unique test case ID
53
+ */
54
+ buildId(endpoint, suffix) {
55
+ const safePath = endpoint.path.replace(/[^a-zA-Z0-9]/g, '-');
56
+ return `error-${endpoint.method.toLowerCase()}-${safePath}-${suffix}`;
57
+ }
58
+ /**
59
+ * Check if global or operation-level auth is required
60
+ */
61
+ isAuthRequired(endpoint, spec) {
62
+ if (endpoint.security && endpoint.security.length > 0)
63
+ return true;
64
+ if (spec.security && spec.security.length > 0)
65
+ return true;
66
+ return false;
67
+ }
68
+ }
69
+ //# sourceMappingURL=error-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-strategy.js","sourceRoot":"","sources":["../../../src/generators/errors/error-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiCjF;;GAEG;AACH,MAAM,OAAgB,iBAAiB;IAKrC;;OAEG;IACO,YAAY,CACpB,MAA8B,EAC9B,OAAyB,EACzB,eAAe,GAAG,KAAK;QAEvB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACxC,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE/C,OAAO,0BAA0B,CAAC,MAAM,EAAE;YACxC,eAAe;YACf,MAAM,EAAE,eAAe,IAAI,OAAO;YAClC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,QAAwB;QACnD,MAAM,MAAM,GAAoC,EAAE,CAAC;QAEnD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAgC,CAAC;gBACtD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,OAAO,CAAC,QAAwB,EAAE,MAAc;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,QAAwB,EAAE,IAAwB;QACzE,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Error Generators - Public API
3
+ *
4
+ * @module generators/errors
5
+ */
6
+ export { type ErrorStrategy, type ErrorCaseOptions, BaseErrorStrategy } from './error-strategy.js';
7
+ export { UnauthorizedErrorStrategy, ForbiddenErrorStrategy, HeuristicAuthErrorStrategy } from './auth-error-strategy.js';
8
+ export { BadRequestErrorStrategy } from './validation-error-strategy.js';
9
+ export { NotFoundErrorStrategy, ConflictErrorStrategy, UnprocessableEntityErrorStrategy, GenericErrorStrategy, } from './business-error-strategy.js';
10
+ export { ErrorStrategyFactory } from './error-strategy-factory.js';
11
+ import type { OpenAPIV3 } from 'openapi-types';
12
+ import type { TestCase, ParsedEndpoint } from '../../types/index.js';
13
+ import type { ErrorCaseOptions } from './error-strategy.js';
14
+ /**
15
+ * Main entry point: generate error case test cases for all endpoints
16
+ *
17
+ * @param endpoints - Array of parsed endpoints
18
+ * @param spec - Full OpenAPI spec
19
+ * @param options - Generation options
20
+ * @returns Array of error case test cases
21
+ */
22
+ export declare function generateErrorCaseTests(endpoints: ParsedEndpoint[], spec: OpenAPIV3.Document, options?: ErrorCaseOptions): TestCase[];
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,EAAE,EAC3B,IAAI,EAAE,SAAS,CAAC,QAAQ,EACxB,OAAO,GAAE,gBAAqB,GAC7B,QAAQ,EAAE,CA2CZ"}