@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,386 @@
1
+ /**
2
+ * AI Client Module
3
+ *
4
+ * Generic LLM client that supports various AI API providers.
5
+ * Uses TOON format to reduce token usage by ~40%.
6
+ *
7
+ * @module llm/ai-client
8
+ */
9
+ import { encode as toTOON } from '@toon-format/toon';
10
+ import { createLogger } from '../utils/logger.js';
11
+ import { aiCache } from './ai-cache.js';
12
+ import http from 'http';
13
+ import https from 'https';
14
+ const log = createLogger('ai-client');
15
+ /**
16
+ * Default AI configuration
17
+ */
18
+ const DEFAULT_AI_BASE_URL = 'http://localhost:13800/cell_apps/v1.1/gemini/v1beta/models';
19
+ const DEFAULT_AI_MODEL = 'gemini-3-flash-preview';
20
+ const DEFAULT_AI_ENDPOINT = 'generateContent';
21
+ /**
22
+ * Model limits for LLM
23
+ */
24
+ const MODEL_LIMITS = {
25
+ maxContextTokens: 32000, // Total context window
26
+ thinkingMargin: 3000, // Reserve for thinking tokens
27
+ minOutputTokens: 1024, // Minimum output tokens
28
+ maxOutputTokens: 8192, // Maximum output tokens
29
+ charsPerToken: 4, // Approximate chars per token
30
+ };
31
+ /**
32
+ * Get the AI API URL from environment or use default
33
+ *
34
+ * Priority order:
35
+ * 1. AI_API_URL (complete URL override)
36
+ * 2. AI_MODEL (model name only, uses default base URL)
37
+ * 3. DEFAULT values
38
+ *
39
+ * @returns The full AI API URL
40
+ *
41
+ * @example
42
+ * // Using defaults
43
+ * // Returns: http://localhost:13800/cell_apps/v1.1/gemini/v1beta/models/gemini-3-flash-preview:generateContent
44
+ *
45
+ * // Using AI_MODEL env var
46
+ * // AI_MODEL=gemini-2.0-flash-exp
47
+ * // Returns: http://localhost:13800/cell_apps/v1.1/gemini/v1beta/models/gemini-2.0-flash-exp:generateContent
48
+ *
49
+ * // Using AI_API_URL env var (complete override)
50
+ * // AI_API_URL=https://custom-api.com/v1/generate
51
+ * // Returns: https://custom-api.com/v1/generate
52
+ */
53
+ function getAIApiUrl() {
54
+ // Priority 1: Complete URL override
55
+ if (process.env.AI_API_URL) {
56
+ return process.env.AI_API_URL;
57
+ }
58
+ // Priority 2: Model override with default base URL
59
+ const model = process.env.AI_MODEL || DEFAULT_AI_MODEL;
60
+ const baseUrl = process.env.AI_BASE_URL || DEFAULT_AI_BASE_URL;
61
+ const endpoint = process.env.AI_ENDPOINT || DEFAULT_AI_ENDPOINT;
62
+ return `${baseUrl}/${model}:${endpoint}`;
63
+ }
64
+ /**
65
+ * Estimates token count from text (approximate)
66
+ * @param text - Text to estimate tokens for
67
+ * @returns Estimated token count
68
+ */
69
+ function estimateTokens(text) {
70
+ return Math.ceil(text.length / MODEL_LIMITS.charsPerToken);
71
+ }
72
+ /**
73
+ * Calculates optimal maxOutputTokens based on prompt size
74
+ * Accounts for thinking tokens used by LLM
75
+ *
76
+ * @param promptTokens - Estimated tokens in the prompt
77
+ * @returns Optimal maxOutputTokens value
78
+ */
79
+ function calculateMaxOutputTokens(promptTokens) {
80
+ const availableTokens = MODEL_LIMITS.maxContextTokens - promptTokens - MODEL_LIMITS.thinkingMargin;
81
+ // Clamp between min and max
82
+ return Math.max(MODEL_LIMITS.minOutputTokens, Math.min(MODEL_LIMITS.maxOutputTokens, availableTokens));
83
+ }
84
+ /**
85
+ * Converts data to TOON format for token-efficient prompts
86
+ *
87
+ * @param data - Data to convert
88
+ * @returns TOON string or JSON fallback
89
+ */
90
+ export function toTOONFormat(data) {
91
+ try {
92
+ return toTOON(data);
93
+ }
94
+ catch (error) {
95
+ log.warn('TOON conversion failed, using JSON', { error });
96
+ return JSON.stringify(data, null, 2);
97
+ }
98
+ }
99
+ /**
100
+ * Makes HTTP/HTTPS request using native Node.js modules
101
+ * This works reliably with local AI proxies (e.g., localhost:13800)
102
+ * whereas fetch() can have streaming issues with some proxies
103
+ *
104
+ * @param url - Full URL to request
105
+ * @param payload - JSON payload to send
106
+ * @param timeout - Timeout in milliseconds
107
+ * @returns Promise with response text
108
+ */
109
+ async function httpRequest(url, payload, timeout) {
110
+ return new Promise((resolve, reject) => {
111
+ const urlObj = new URL(url);
112
+ const isHttps = urlObj.protocol === 'https:';
113
+ const httpModule = isHttps ? https : http;
114
+ const body = JSON.stringify(payload);
115
+ const options = {
116
+ hostname: urlObj.hostname,
117
+ port: urlObj.port || (isHttps ? 443 : 80),
118
+ path: urlObj.pathname + urlObj.search,
119
+ method: 'POST',
120
+ headers: {
121
+ 'Content-Type': 'application/json',
122
+ 'Content-Length': Buffer.byteLength(body)
123
+ },
124
+ timeout
125
+ };
126
+ log.debug('Starting HTTP request', { hostname: options.hostname, port: options.port });
127
+ const req = httpModule.request(options, (res) => {
128
+ log.debug('HTTP response received', { status: res.statusCode });
129
+ const chunks = [];
130
+ res.on('data', (chunk) => {
131
+ log.debug('Received chunk', { size: chunk.length });
132
+ chunks.push(chunk);
133
+ });
134
+ res.on('end', () => {
135
+ const responseText = Buffer.concat(chunks).toString('utf-8');
136
+ log.debug('HTTP response complete', { totalBytes: responseText.length });
137
+ resolve({
138
+ status: res.statusCode || 500,
139
+ text: responseText
140
+ });
141
+ });
142
+ res.on('error', (error) => {
143
+ log.error('HTTP response error', { error: error.message });
144
+ reject(error);
145
+ });
146
+ });
147
+ req.on('timeout', () => {
148
+ req.destroy();
149
+ log.error('HTTP request timeout', { timeout });
150
+ reject(new Error(`Request timed out after ${timeout}ms`));
151
+ });
152
+ req.on('error', (error) => {
153
+ log.error('HTTP request error', { error: error.message });
154
+ reject(error);
155
+ });
156
+ req.write(body);
157
+ req.end();
158
+ });
159
+ }
160
+ /**
161
+ * Calls the LLM with a prompt and returns the response
162
+ *
163
+ * @param prompt - The prompt to send to the LLM
164
+ * @param options - Call options
165
+ * @returns LLM response
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * const result = await callLLM('Analyze these test failures and suggest fixes');
170
+ * if (result.success) {
171
+ * console.log(result.text);
172
+ * }
173
+ * ```
174
+ */
175
+ export async function callLLM(prompt, options = {}) {
176
+ const { temperature = 0.3, timeout = 300000 // 5 minutes default timeout (very generous for complex analysis)
177
+ } = options;
178
+ // Check cache first
179
+ const cached = aiCache.get(prompt);
180
+ if (cached) {
181
+ log.info('LLM response from cache', {
182
+ promptLength: prompt.length,
183
+ responseLength: cached.length
184
+ });
185
+ aiCache.logStats(); // Log cache stats periodically
186
+ return { success: true, text: cached };
187
+ }
188
+ const apiUrl = getAIApiUrl();
189
+ // Calculate optimal maxOutputTokens dynamically based on prompt size
190
+ const estimatedPromptTokens = estimateTokens(prompt);
191
+ const maxTokens = options.maxTokens || calculateMaxOutputTokens(estimatedPromptTokens);
192
+ log.info('Calling LLM (cache miss)', {
193
+ apiUrl,
194
+ promptLength: prompt.length,
195
+ estimatedPromptTokens,
196
+ maxTokens,
197
+ temperature
198
+ });
199
+ try {
200
+ // Prepare request payload
201
+ const requestPayload = {
202
+ contents: [
203
+ {
204
+ parts: [{ text: prompt }]
205
+ }
206
+ ],
207
+ generationConfig: {
208
+ maxOutputTokens: maxTokens,
209
+ temperature: temperature
210
+ }
211
+ };
212
+ log.debug('LLM Request payload', {
213
+ prompt: prompt.length > 500 ? prompt.slice(0, 500) + '...' : prompt,
214
+ fullPromptLength: prompt.length,
215
+ generationConfig: requestPayload.generationConfig
216
+ });
217
+ // Use native http/https module instead of fetch
218
+ // (fetch can have issues with some local AI proxy streaming)
219
+ const response = await httpRequest(apiUrl, requestPayload, timeout);
220
+ log.debug('Response received', {
221
+ status: response.status,
222
+ length: response.text.length,
223
+ preview: response.text.slice(0, 200)
224
+ });
225
+ if (response.status !== 200) {
226
+ log.error('LLM API error', { status: response.status, error: response.text });
227
+ return {
228
+ success: false,
229
+ error: `API error: ${response.status} - ${response.text}`
230
+ };
231
+ }
232
+ const rawText = response.text;
233
+ log.debug('LLM Full Response', {
234
+ fullResponse: rawText.length > 2000 ? rawText.slice(0, 2000) + '...' : rawText,
235
+ fullLength: rawText.length
236
+ });
237
+ // Parse JSON from text
238
+ log.debug('Parsing JSON from text');
239
+ let data;
240
+ try {
241
+ data = JSON.parse(rawText);
242
+ log.debug('JSON parsed successfully');
243
+ // Log parsed response structure
244
+ log.debug('Parsed LLM Response', {
245
+ hasCandidates: !!data.candidates,
246
+ candidatesCount: data.candidates?.length || 0,
247
+ hasError: !!data.error,
248
+ finishReason: data.candidates?.[0]?.finishReason,
249
+ textLength: data.candidates?.[0]?.content?.parts?.[0]?.text?.length || 0
250
+ });
251
+ }
252
+ catch (parseError) {
253
+ log.error('JSON parse failed', {
254
+ error: parseError instanceof Error ? parseError.message : String(parseError),
255
+ rawTextLength: rawText.length,
256
+ rawTextPreview: rawText.slice(0, 500)
257
+ });
258
+ return {
259
+ success: false,
260
+ error: `Failed to parse JSON response: ${parseError instanceof Error ? parseError.message : String(parseError)}`
261
+ };
262
+ }
263
+ // Check for API error in response
264
+ if (data.error) {
265
+ log.error('LLM returned error', { error: data.error });
266
+ return {
267
+ success: false,
268
+ error: data.error.message || 'Unknown API error'
269
+ };
270
+ }
271
+ // Extract text from response
272
+ const text = data.candidates?.[0]?.content?.parts?.[0]?.text;
273
+ if (!text) {
274
+ log.warn('LLM returned empty response', { data });
275
+ return {
276
+ success: false,
277
+ error: 'Empty response from LLM'
278
+ };
279
+ }
280
+ log.debug('LLM response received', { responseLength: text.length });
281
+ // Store in cache
282
+ aiCache.set(prompt, text);
283
+ log.debug('Response cached');
284
+ return {
285
+ success: true,
286
+ text
287
+ };
288
+ }
289
+ catch (error) {
290
+ const errorMessage = error instanceof Error ? error.message : String(error);
291
+ // Check if it's a timeout error
292
+ if (errorMessage.includes('timed out')) {
293
+ log.error('LLM call timed out', { timeout, error: errorMessage });
294
+ return {
295
+ success: false,
296
+ error: `Request timed out after ${timeout}ms`
297
+ };
298
+ }
299
+ log.error('LLM call failed', { errorMessage, errorType: error instanceof Error ? error.name : typeof error });
300
+ return {
301
+ success: false,
302
+ error: errorMessage
303
+ };
304
+ }
305
+ }
306
+ /**
307
+ * Calls the LLM with structured data (automatically converts to TOON)
308
+ *
309
+ * @param instruction - What you want the LLM to do
310
+ * @param data - Structured data to include (will be converted to TOON)
311
+ * @param options - Call options
312
+ * @returns LLM response
313
+ *
314
+ * @example
315
+ * ```typescript
316
+ * const result = await callLLMWithData(
317
+ * 'Analyze these failures and suggest fixes',
318
+ * { failures: [{ endpoint: '/users', status: 401, count: 10 }] }
319
+ * );
320
+ * ```
321
+ */
322
+ export async function callLLMWithData(instruction, data, options = {}) {
323
+ const toonData = toTOONFormat(data);
324
+ const prompt = `${instruction}\n\nData:\n${toonData}`;
325
+ log.debug('Calling LLM with TOON data', {
326
+ instructionLength: instruction.length,
327
+ dataLength: toonData.length
328
+ });
329
+ return callLLM(prompt, options);
330
+ }
331
+ /**
332
+ * Cache for LLM availability check
333
+ */
334
+ let llmAvailabilityCache = null;
335
+ const LLM_AVAILABILITY_CACHE_TTL = 30000; // 30 seconds
336
+ /**
337
+ * Checks if the LLM service is available
338
+ * Result is cached for 30 seconds to avoid repeated checks
339
+ *
340
+ * @returns true if LLM is reachable
341
+ */
342
+ export async function isLLMAvailable() {
343
+ const now = Date.now();
344
+ // Return cached result if still valid
345
+ if (llmAvailabilityCache && (now - llmAvailabilityCache.timestamp) < LLM_AVAILABILITY_CACHE_TTL) {
346
+ log.debug('LLM availability check (from cache)', {
347
+ available: llmAvailabilityCache.available,
348
+ cacheAge: now - llmAvailabilityCache.timestamp
349
+ });
350
+ return llmAvailabilityCache.available;
351
+ }
352
+ // Cache expired or doesn't exist - perform actual check
353
+ log.debug('LLM availability check (fresh check)');
354
+ try {
355
+ const result = await callLLM('Say "ok"', {
356
+ maxTokens: 10,
357
+ timeout: 5000
358
+ });
359
+ const available = result.success;
360
+ // Update cache
361
+ llmAvailabilityCache = {
362
+ available,
363
+ timestamp: now
364
+ };
365
+ log.info('LLM availability check complete', { available });
366
+ return available;
367
+ }
368
+ catch {
369
+ // Cache negative result too
370
+ llmAvailabilityCache = {
371
+ available: false,
372
+ timestamp: now
373
+ };
374
+ log.info('LLM availability check failed');
375
+ return false;
376
+ }
377
+ }
378
+ /**
379
+ * Gets the configured AI API URL
380
+ *
381
+ * @returns The API URL being used
382
+ */
383
+ export function getConfiguredAIUrl() {
384
+ return getAIApiUrl();
385
+ }
386
+ //# sourceMappingURL=ai-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-client.js","sourceRoot":"","sources":["../../src/llm/ai-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * AI-Powered Data Generator
3
+ *
4
+ * Generates contextual, realistic test data using LLM.
5
+ * Used as a fallback when Faker data is not appropriate for the API domain.
6
+ *
7
+ * @module llm/data-generator-ai
8
+ */
9
+ import type { OpenAPIV3 } from 'openapi-types';
10
+ /**
11
+ * API context for intelligent data generation
12
+ */
13
+ export interface APIContext {
14
+ /**
15
+ * Type of API (banking, ecommerce, blog, internal, other)
16
+ */
17
+ type?: string;
18
+ /**
19
+ * Domain of the API (more specific than type)
20
+ */
21
+ domain?: string;
22
+ /**
23
+ * Industry classification
24
+ */
25
+ industry?: string;
26
+ /**
27
+ * Entity types in the API (users, products, orders, etc.)
28
+ */
29
+ entityTypes?: string[];
30
+ /**
31
+ * Endpoint path for context-specific generation
32
+ */
33
+ endpoint?: string;
34
+ /**
35
+ * Purpose of the endpoint (login, payment, transfer, etc.)
36
+ */
37
+ purpose?: string;
38
+ /**
39
+ * Validation level (strict for banking, relaxed for blogs)
40
+ */
41
+ validationLevel?: 'strict' | 'relaxed';
42
+ /**
43
+ * Whether to use real formats (IBANs, credit cards, etc.)
44
+ */
45
+ useRealFormats?: boolean;
46
+ }
47
+ /**
48
+ * Checks if an endpoint is critical and requires AI-generated data
49
+ *
50
+ * @param context - API context
51
+ * @returns true if endpoint is critical
52
+ */
53
+ export declare function isCriticalEndpoint(context?: APIContext): boolean;
54
+ /**
55
+ * Generates a realistic value using AI based on schema and context
56
+ *
57
+ * @param schema - JSON Schema object
58
+ * @param propertyName - Name of the property being generated
59
+ * @param context - API context for domain-specific generation
60
+ * @returns Generated value or null if AI fails
61
+ */
62
+ export declare function generateValueWithAI(schema: OpenAPIV3.SchemaObject, propertyName: string, context?: APIContext): Promise<unknown | null>;
63
+ /**
64
+ * Generates intelligent edge case values using AI
65
+ *
66
+ * @param schema - JSON Schema object
67
+ * @param propertyName - Name of the property
68
+ * @param context - API context
69
+ * @returns Array of edge case values with descriptions
70
+ */
71
+ export declare function generateEdgeCasesWithAI(schema: OpenAPIV3.SchemaObject, propertyName: string, context?: APIContext): Promise<Array<{
72
+ value: unknown;
73
+ description: string;
74
+ expectedStatus: number;
75
+ }>>;
76
+ /**
77
+ * Infers the purpose of an endpoint from its path and method
78
+ *
79
+ * @param endpoint - Endpoint path
80
+ * @param method - HTTP method
81
+ * @returns Inferred purpose
82
+ */
83
+ export declare function inferEndpointPurpose(endpoint: string, method: string): string;
84
+ //# sourceMappingURL=data-generator-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-generator-ai.d.ts","sourceRoot":"","sources":["../../src/llm/data-generator-ai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAM/C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,eAAe,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEvC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAoBhE;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA4BzB;AAyHD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,CAAC,YAAY,EAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkDjF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgC7E"}