@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 @@
1
+ {"version":3,"file":"test-executor.js","sourceRoot":"","sources":["../../src/executor/test-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Test Runner
3
+ *
4
+ * Orchestrates sequential happy-path execution and parallel batch execution
5
+ * of other test categories. Delegates single-test logic to test-executor,
6
+ * summary generation and persistence to result-processor.
7
+ *
8
+ * @module executor/test-runner
9
+ */
10
+ import type { TestCase, TestResult, TestSuiteSummary, Environment, ParsedEndpoint } from '../types/index.js';
11
+ /**
12
+ * Options for test execution
13
+ */
14
+ export interface TestRunnerOptions {
15
+ /** Maximum number of tests to run in parallel @default 5 */
16
+ parallel?: number;
17
+ /** Whether to stop execution on first failure @default false */
18
+ stopOnFailure?: boolean;
19
+ /** Test execution timeout in milliseconds @default 30000 */
20
+ timeout?: number;
21
+ /** Whether to validate response schemas @default true */
22
+ validateSchemas?: boolean;
23
+ /** Callback for progress updates */
24
+ onProgress?: (completed: number, total: number, current: TestCase) => void;
25
+ /** Callback for test completion */
26
+ onTestComplete?: (result: TestResult) => void;
27
+ /** OPTIONAL: Auth endpoint to execute first for token detection */
28
+ authEndpoint?: string;
29
+ /** OPTIONAL: Data flow configuration for extracting / injecting data between tests */
30
+ dataFlow?: Record<string, {
31
+ extract?: Record<string, string>;
32
+ inject?: Record<string, string>;
33
+ }>;
34
+ /** Use type-based matchers for response validation @default false */
35
+ useMatchers?: boolean;
36
+ /** Custom matchers configuration */
37
+ matchers?: Record<string, Record<string, import('../types/index.js').ResponseMatcher>>;
38
+ /** Callback executed before each test */
39
+ beforeTest?: (testCase: TestCase) => Promise<void> | void;
40
+ /** Callback executed after each test */
41
+ afterTest?: (testCase: TestCase) => Promise<void> | void;
42
+ }
43
+ /**
44
+ * Test Runner class for executing test suites.
45
+ *
46
+ * Happy-path tests run sequentially (for token detection); all other
47
+ * categories run in parallel batches for performance.
48
+ */
49
+ export declare class TestRunner {
50
+ private environment;
51
+ private client;
52
+ private workingDirectory;
53
+ private autoDetectedToken;
54
+ private dataContext;
55
+ constructor(environment: Environment, workingDirectory?: string);
56
+ /**
57
+ * Runs a test suite.
58
+ *
59
+ * @param testCases - Array of test cases to execute
60
+ * @param endpoints - Array of endpoint definitions for validation
61
+ * @param options - Execution options
62
+ * @returns Test results, summary, and path to the saved results file
63
+ */
64
+ runTests(testCases: TestCase[], endpoints: ParsedEndpoint[], options?: TestRunnerOptions): Promise<{
65
+ results: TestResult[];
66
+ summary: TestSuiteSummary;
67
+ savedPath: string;
68
+ }>;
69
+ /**
70
+ * Runs a single test case. Convenience method for individual test execution.
71
+ *
72
+ * @param testCase - Test case to execute
73
+ * @param endpoint - Endpoint definition for validation
74
+ * @param options - Execution options
75
+ * @returns Test result
76
+ */
77
+ runTest(testCase: TestCase, endpoint: ParsedEndpoint, options?: Pick<TestRunnerOptions, 'validateSchemas' | 'useMatchers' | 'matchers' | 'beforeTest' | 'afterTest'>): Promise<TestResult>;
78
+ }
79
+ /** Filters test results by status. */
80
+ export declare function filterResultsByStatus(results: TestResult[], status: TestResult['status']): TestResult[];
81
+ /** Filters test results by category. */
82
+ export declare function filterResultsByCategory(results: TestResult[], category: TestCase['category']): TestResult[];
83
+ /** Returns the N slowest test results sorted by response time. */
84
+ export declare function getSlowestTests(results: TestResult[], count?: number): TestResult[];
85
+ //# sourceMappingURL=test-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/executor/test-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Test Runner
3
+ *
4
+ * Orchestrates sequential happy-path execution and parallel batch execution
5
+ * of other test categories. Delegates single-test logic to test-executor,
6
+ * summary generation and persistence to result-processor.
7
+ *
8
+ * @module executor/test-runner
9
+ */
10
+ import { HttpClient } from './http-client.js';
11
+ import { config } from '../utils/config.js';
12
+ import { createLogger } from '../utils/logger.js';
13
+ import { executeSingleTest } from './test-executor.js';
14
+ import { generateSummary, saveResults } from './result-processor.js';
15
+ const log = createLogger('test-runner');
16
+ /**
17
+ * Test Runner class for executing test suites.
18
+ *
19
+ * Happy-path tests run sequentially (for token detection); all other
20
+ * categories run in parallel batches for performance.
21
+ */
22
+ export class TestRunner {
23
+ environment;
24
+ client = null;
25
+ workingDirectory;
26
+ autoDetectedToken = null;
27
+ dataContext = {};
28
+ constructor(environment, workingDirectory) {
29
+ this.environment = environment;
30
+ this.workingDirectory = workingDirectory || process.cwd();
31
+ }
32
+ /**
33
+ * Runs a test suite.
34
+ *
35
+ * @param testCases - Array of test cases to execute
36
+ * @param endpoints - Array of endpoint definitions for validation
37
+ * @param options - Execution options
38
+ * @returns Test results, summary, and path to the saved results file
39
+ */
40
+ async runTests(testCases, endpoints, options = {}) {
41
+ const { parallel = config.test.maxParallel, stopOnFailure = false, timeout = config.test.timeout, validateSchemas = true, onProgress, onTestComplete, dataFlow, useMatchers = false, matchers, beforeTest, afterTest, } = options;
42
+ this.dataContext = {};
43
+ log.info('Starting test run', {
44
+ totalTests: testCases.length,
45
+ parallel,
46
+ timeout,
47
+ validateSchemas,
48
+ environment: this.environment.name,
49
+ hasDataFlow: !!dataFlow,
50
+ dataFlowCount: dataFlow ? Object.keys(dataFlow).length : 0,
51
+ });
52
+ this.client = new HttpClient(this.environment);
53
+ await this.client.initialize();
54
+ const results = [];
55
+ let completed = 0;
56
+ let shouldStop = false;
57
+ const endpointMap = new Map();
58
+ for (const endpoint of endpoints) {
59
+ endpointMap.set(`${endpoint.method}:${endpoint.path}`, endpoint);
60
+ }
61
+ const happyPathTests = testCases.filter(tc => tc.category === 'happy-path');
62
+ const otherTests = testCases.filter(tc => tc.category !== 'happy-path');
63
+ // Move auth endpoint test to front if specified
64
+ const { authEndpoint } = options;
65
+ if (authEndpoint) {
66
+ const authIndex = happyPathTests.findIndex(tc => tc.path === authEndpoint);
67
+ if (authIndex > 0) {
68
+ const authTest = happyPathTests.splice(authIndex, 1)[0];
69
+ happyPathTests.unshift(authTest);
70
+ log.info('Reordered tests to execute auth endpoint first', {
71
+ authEndpoint,
72
+ authTestName: authTest.name,
73
+ });
74
+ }
75
+ else if (authIndex === -1) {
76
+ log.warn('Auth endpoint specified but no happy path test found for it', { authEndpoint });
77
+ }
78
+ }
79
+ const execOptions = {
80
+ validateSchemas,
81
+ dataFlow,
82
+ useMatchers,
83
+ matchers,
84
+ beforeTest,
85
+ afterTest,
86
+ environment: this.environment,
87
+ };
88
+ // Sequential: happy-path tests (needed for token detection ordering)
89
+ log.info('Executing happy path tests sequentially', { count: happyPathTests.length });
90
+ for (const testCase of happyPathTests) {
91
+ if (shouldStop)
92
+ break;
93
+ const { testResult, detectedToken, extractedData } = await executeSingleTest(testCase, this.client, { autoDetectedToken: this.autoDetectedToken, dataContext: this.dataContext }, endpointMap, execOptions);
94
+ if (detectedToken)
95
+ this.autoDetectedToken = detectedToken;
96
+ Object.assign(this.dataContext, extractedData);
97
+ results.push(testResult);
98
+ completed++;
99
+ onProgress?.(completed, testCases.length, testResult.testCase);
100
+ onTestComplete?.(testResult);
101
+ if (stopOnFailure && testResult.status === 'failed') {
102
+ shouldStop = true;
103
+ break;
104
+ }
105
+ }
106
+ // Parallel batches: remaining tests
107
+ log.info('Executing remaining tests in parallel', { count: otherTests.length, parallel });
108
+ for (let i = 0; i < otherTests.length; i += parallel) {
109
+ if (shouldStop)
110
+ break;
111
+ const batch = otherTests.slice(i, i + parallel);
112
+ const batchResults = await Promise.all(batch.map(testCase => executeSingleTest(testCase, this.client, { autoDetectedToken: this.autoDetectedToken, dataContext: this.dataContext }, endpointMap, execOptions)));
113
+ for (const { testResult, detectedToken, extractedData } of batchResults) {
114
+ if (detectedToken && !this.autoDetectedToken)
115
+ this.autoDetectedToken = detectedToken;
116
+ Object.assign(this.dataContext, extractedData);
117
+ results.push(testResult);
118
+ completed++;
119
+ onProgress?.(completed, testCases.length, testResult.testCase);
120
+ onTestComplete?.(testResult);
121
+ if (stopOnFailure && testResult.status === 'failed') {
122
+ shouldStop = true;
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ await this.client.dispose();
128
+ this.client = null;
129
+ const summary = generateSummary(results);
130
+ const savedPath = await saveResults(results, summary, this.workingDirectory, this.environment.name);
131
+ return { results, summary, savedPath };
132
+ }
133
+ /**
134
+ * Runs a single test case. Convenience method for individual test execution.
135
+ *
136
+ * @param testCase - Test case to execute
137
+ * @param endpoint - Endpoint definition for validation
138
+ * @param options - Execution options
139
+ * @returns Test result
140
+ */
141
+ async runTest(testCase, endpoint, options = {}) {
142
+ const { validateSchemas = true, useMatchers, matchers, beforeTest, afterTest } = options;
143
+ const shouldDisposeClient = !this.client;
144
+ if (!this.client) {
145
+ this.client = new HttpClient(this.environment);
146
+ await this.client.initialize();
147
+ }
148
+ const endpointMap = new Map();
149
+ endpointMap.set(`${endpoint.method}:${endpoint.path}`, endpoint);
150
+ const { testResult, detectedToken, extractedData } = await executeSingleTest(testCase, this.client, { autoDetectedToken: this.autoDetectedToken, dataContext: this.dataContext }, endpointMap, { validateSchemas, useMatchers, matchers, beforeTest, afterTest, environment: this.environment });
151
+ if (detectedToken)
152
+ this.autoDetectedToken = detectedToken;
153
+ Object.assign(this.dataContext, extractedData);
154
+ if (shouldDisposeClient && this.client) {
155
+ await this.client.dispose();
156
+ this.client = null;
157
+ }
158
+ return testResult;
159
+ }
160
+ }
161
+ // ── Exported helpers ───────────────────────────────────────────────────────
162
+ /** Filters test results by status. */
163
+ export function filterResultsByStatus(results, status) {
164
+ return results.filter(r => r.status === status);
165
+ }
166
+ /** Filters test results by category. */
167
+ export function filterResultsByCategory(results, category) {
168
+ return results.filter(r => r.testCase.category === category);
169
+ }
170
+ /** Returns the N slowest test results sorted by response time. */
171
+ export function getSlowestTests(results, count = 10) {
172
+ return results
173
+ .filter(r => r.responseTime !== undefined)
174
+ .sort((a, b) => (b.responseTime || 0) - (a.responseTime || 0))
175
+ .slice(0, count);
176
+ }
177
+ //# sourceMappingURL=test-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/executor/test-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Token Detector - Public API
3
+ *
4
+ * @module executor/token-detector
5
+ */
6
+ export { findTokenInResponse, findTokenRecursively, getNestedValue, isValidToken, KNOWN_TOKEN_FIELDS, TOKEN_NAME_PATTERNS, type TokenDetectionResult, } from './token-detector.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executor/token-detector/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Token Detector - Public API
3
+ *
4
+ * @module executor/token-detector
5
+ */
6
+ export { findTokenInResponse, findTokenRecursively, getNestedValue, isValidToken, KNOWN_TOKEN_FIELDS, TOKEN_NAME_PATTERNS, } from './token-detector.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/executor/token-detector/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Token Detector - Chain of Responsibility Pattern
3
+ *
4
+ * Detects authentication tokens in API responses using multiple strategies:
5
+ * 1. Custom field specified by user
6
+ * 2. Known token field names (OAuth2, JWT, session, API keys)
7
+ * 3. Heuristic name-based search
8
+ * 4. Deep recursive search in nested objects
9
+ *
10
+ * @module executor/token-detector
11
+ */
12
+ import { getNestedValue } from '../../validators/response-matcher.js';
13
+ export { getNestedValue };
14
+ /**
15
+ * Result of token detection
16
+ */
17
+ export interface TokenDetectionResult {
18
+ /** The token value */
19
+ value: string;
20
+ /** Field name where token was found */
21
+ field: string;
22
+ /** Full path to token (e.g., "data.auth.token") */
23
+ path: string;
24
+ /** Detection method used */
25
+ method: 'custom' | 'known-field' | 'heuristic' | 'deep-search';
26
+ }
27
+ /**
28
+ * Known token field names covering OAuth2, JWT, session tokens, API keys
29
+ */
30
+ export declare const KNOWN_TOKEN_FIELDS: string[];
31
+ /**
32
+ * Heuristic patterns for token field names (case-insensitive)
33
+ */
34
+ export declare const TOKEN_NAME_PATTERNS: string[];
35
+ /**
36
+ * Validates if a value looks like a valid authentication token
37
+ */
38
+ export declare function isValidToken(value: unknown): value is string;
39
+ /**
40
+ * Recursively searches for a token in a nested object
41
+ */
42
+ export declare function findTokenRecursively(obj: unknown, currentPath?: string, depth?: number): TokenDetectionResult | null;
43
+ /**
44
+ * Finds an authentication token in an API response body.
45
+ *
46
+ * Detection order (Chain of Responsibility):
47
+ * 1. Custom field specified by user
48
+ * 2. Known token fields (OAuth2, JWT, session, etc.)
49
+ * 3. Heuristic search (field names containing "token", "auth", etc.)
50
+ * 4. Deep recursive search in nested objects
51
+ *
52
+ * @param body - Response body to search
53
+ * @param customField - Optional custom field name specified by user
54
+ * @returns Token detection result or null
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * // Standard OAuth2 response
59
+ * findTokenInResponse({ access_token: "abc123" })
60
+ * // => { value: "abc123", field: "access_token", method: "known-field" }
61
+ * ```
62
+ */
63
+ export declare function findTokenInResponse(body: unknown, customField?: string): TokenDetectionResult | null;
64
+ //# sourceMappingURL=token-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-detector.d.ts","sourceRoot":"","sources":["../../../src/executor/token-detector/token-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;CAChE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAmB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAE/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAO5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,WAAW,SAAK,EAChB,KAAK,SAAI,GACR,oBAAoB,GAAG,IAAI,CA+B7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,oBAAoB,GAAG,IAAI,CA+B7B"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Token Detector - Chain of Responsibility Pattern
3
+ *
4
+ * Detects authentication tokens in API responses using multiple strategies:
5
+ * 1. Custom field specified by user
6
+ * 2. Known token field names (OAuth2, JWT, session, API keys)
7
+ * 3. Heuristic name-based search
8
+ * 4. Deep recursive search in nested objects
9
+ *
10
+ * @module executor/token-detector
11
+ */
12
+ // Re-export the canonical getNestedValue (supports array indices) from response-matcher
13
+ // so consumers of token-detector keep the same public API without a duplicate implementation.
14
+ import { getNestedValue } from '../../validators/response-matcher.js';
15
+ export { getNestedValue };
16
+ /**
17
+ * Known token field names covering OAuth2, JWT, session tokens, API keys
18
+ */
19
+ export const KNOWN_TOKEN_FIELDS = [
20
+ // OAuth2 standard
21
+ 'access_token', 'refresh_token', 'id_token',
22
+ // CamelCase variants
23
+ 'accessToken', 'refreshToken', 'idToken',
24
+ // Generic token names
25
+ 'token', 'jwt', 'jwtToken', 'JWT',
26
+ // Auth-prefixed
27
+ 'authToken', 'auth_token', 'authenticationToken', 'authentication_token',
28
+ // Bearer
29
+ 'bearer', 'bearerToken', 'bearer_token',
30
+ // Session
31
+ 'session', 'sessionToken', 'session_token', 'sessionId', 'session_id', 'sid',
32
+ // API keys
33
+ 'key', 'apiKey', 'api_key', 'apiToken', 'api_token',
34
+ // Credentials
35
+ 'credential', 'credentials', 'secret',
36
+ // Authorization
37
+ 'auth', 'authorization',
38
+ ];
39
+ /**
40
+ * Heuristic patterns for token field names (case-insensitive)
41
+ */
42
+ export const TOKEN_NAME_PATTERNS = [
43
+ 'token', 'jwt', 'auth', 'bearer', 'session', 'key', 'credential', 'secret'
44
+ ];
45
+ /**
46
+ * Validates if a value looks like a valid authentication token
47
+ */
48
+ export function isValidToken(value) {
49
+ if (typeof value !== 'string')
50
+ return false;
51
+ if (value.length < 10)
52
+ return false;
53
+ if (value.includes(' '))
54
+ return false;
55
+ if (value.length > 4096)
56
+ return false;
57
+ if (!/^[A-Za-z0-9._\-+=\/]+$/.test(value))
58
+ return false;
59
+ return true;
60
+ }
61
+ /**
62
+ * Recursively searches for a token in a nested object
63
+ */
64
+ export function findTokenRecursively(obj, currentPath = '', depth = 0) {
65
+ if (depth > 10)
66
+ return null;
67
+ if (typeof obj !== 'object' || obj === null)
68
+ return null;
69
+ for (const [key, value] of Object.entries(obj)) {
70
+ const path = currentPath ? `${currentPath}.${key}` : key;
71
+ const lowerKey = key.toLowerCase();
72
+ const isTokenLikeName = TOKEN_NAME_PATTERNS.some(pattern => lowerKey.includes(pattern));
73
+ if (isTokenLikeName && isValidToken(value)) {
74
+ return { value: value, field: key, path, method: 'heuristic' };
75
+ }
76
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
77
+ const found = findTokenRecursively(value, path, depth + 1);
78
+ if (found)
79
+ return { ...found, method: 'deep-search' };
80
+ }
81
+ if (Array.isArray(value) && value.length > 0) {
82
+ const firstItem = value[0];
83
+ if (typeof firstItem === 'object' && firstItem !== null) {
84
+ const found = findTokenRecursively(firstItem, `${path}[0]`, depth + 1);
85
+ if (found)
86
+ return { ...found, method: 'deep-search' };
87
+ }
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * Finds an authentication token in an API response body.
94
+ *
95
+ * Detection order (Chain of Responsibility):
96
+ * 1. Custom field specified by user
97
+ * 2. Known token fields (OAuth2, JWT, session, etc.)
98
+ * 3. Heuristic search (field names containing "token", "auth", etc.)
99
+ * 4. Deep recursive search in nested objects
100
+ *
101
+ * @param body - Response body to search
102
+ * @param customField - Optional custom field name specified by user
103
+ * @returns Token detection result or null
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * // Standard OAuth2 response
108
+ * findTokenInResponse({ access_token: "abc123" })
109
+ * // => { value: "abc123", field: "access_token", method: "known-field" }
110
+ * ```
111
+ */
112
+ export function findTokenInResponse(body, customField) {
113
+ if (typeof body !== 'object' || body === null)
114
+ return null;
115
+ const bodyObj = body;
116
+ // Step 1: Custom field (highest priority)
117
+ if (customField) {
118
+ const value = customField.includes('.')
119
+ ? getNestedValue(bodyObj, customField)
120
+ : bodyObj[customField];
121
+ if (isValidToken(value)) {
122
+ return {
123
+ value: value,
124
+ field: customField.split('.').pop() || customField,
125
+ path: customField,
126
+ method: 'custom'
127
+ };
128
+ }
129
+ }
130
+ // Step 2: Known token fields
131
+ for (const field of KNOWN_TOKEN_FIELDS) {
132
+ const value = bodyObj[field];
133
+ if (isValidToken(value)) {
134
+ return { value: value, field, path: field, method: 'known-field' };
135
+ }
136
+ }
137
+ // Step 3 & 4: Heuristic + deep search
138
+ return findTokenRecursively(bodyObj);
139
+ }
140
+ //# sourceMappingURL=token-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-detector.js","sourceRoot":"","sources":["../../../src/executor/token-detector/token-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Business Rule Generator from User Stories
3
+ *
4
+ * Converts user stories (natural language) into executable test cases
5
+ * using AI to interpret the business rules and map them to API endpoints.
6
+ *
7
+ * @module generators/business-rule-from-stories-generator
8
+ */
9
+ import type { TestCase, ParsedEndpoint } from '../types/index.js';
10
+ /**
11
+ * Generates test cases from user stories using AI
12
+ *
13
+ * @param userStories - Plain text user stories or business rules
14
+ * @param endpoints - Available API endpoints
15
+ * @param options - Generation options
16
+ * @returns Array of test cases validating the business rules
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const tests = await generateFromUserStories(
21
+ * "Usuario no puede transferir más de $1,000 sin 2FA",
22
+ * endpoints,
23
+ * { aiLevel: 'smart' }
24
+ * );
25
+ * ```
26
+ */
27
+ export declare function generateFromUserStories(userStories: string, endpoints: ParsedEndpoint[], options?: {
28
+ aiLevel: string;
29
+ }): Promise<TestCase[]>;
30
+ //# sourceMappingURL=business-rule-from-stories-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-rule-from-stories-generator.d.ts","sourceRoot":"","sources":["../../src/generators/business-rule-from-stories-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAwBlE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EAAE,EAC3B,OAAO,GAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAyB,GAClD,OAAO,CAAC,QAAQ,EAAE,CAAC,CA+CrB"}