@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.
- package/.env.example +91 -0
- package/README.md +472 -0
- package/dist/ai-engine/assertion-generator.d.ts +48 -0
- package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
- package/dist/ai-engine/assertion-generator.js +166 -0
- package/dist/ai-engine/assertion-generator.js.map +1 -0
- package/dist/ai-engine/context-data-generator.d.ts +38 -0
- package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
- package/dist/ai-engine/context-data-generator.js +146 -0
- package/dist/ai-engine/context-data-generator.js.map +1 -0
- package/dist/ai-engine/dataflow-detector.d.ts +53 -0
- package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
- package/dist/ai-engine/dataflow-detector.js +217 -0
- package/dist/ai-engine/dataflow-detector.js.map +1 -0
- package/dist/ai-engine/dependency-detector.d.ts +52 -0
- package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
- package/dist/ai-engine/dependency-detector.js +241 -0
- package/dist/ai-engine/dependency-detector.js.map +1 -0
- package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
- package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
- package/dist/ai-engine/edge-case-suggester.js +177 -0
- package/dist/ai-engine/edge-case-suggester.js.map +1 -0
- package/dist/ai-engine/index.d.ts +13 -0
- package/dist/ai-engine/index.d.ts.map +1 -0
- package/dist/ai-engine/index.js +13 -0
- package/dist/ai-engine/index.js.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
- package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/ai-failure-analyzer.js +220 -0
- package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
- package/dist/analyzers/comparison-utils.d.ts +31 -0
- package/dist/analyzers/comparison-utils.d.ts.map +1 -0
- package/dist/analyzers/comparison-utils.js +85 -0
- package/dist/analyzers/comparison-utils.js.map +1 -0
- package/dist/analyzers/context-analyzer.d.ts +49 -0
- package/dist/analyzers/context-analyzer.d.ts.map +1 -0
- package/dist/analyzers/context-analyzer.js +292 -0
- package/dist/analyzers/context-analyzer.js.map +1 -0
- package/dist/analyzers/dependency-analyzer.d.ts +44 -0
- package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dependency-analyzer.js +313 -0
- package/dist/analyzers/dependency-analyzer.js.map +1 -0
- package/dist/analyzers/failure-analyzer.d.ts +122 -0
- package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
- package/dist/analyzers/failure-analyzer.js +140 -0
- package/dist/analyzers/failure-analyzer.js.map +1 -0
- package/dist/analyzers/failure-detectors/index.d.ts +33 -0
- package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
- package/dist/analyzers/failure-detectors/index.js +164 -0
- package/dist/analyzers/failure-detectors/index.js.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
- package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
- package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
- package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
- package/dist/analyzers/index.d.ts +10 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +10 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/semantic-matcher.d.ts +123 -0
- package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
- package/dist/analyzers/semantic-matcher.js +297 -0
- package/dist/analyzers/semantic-matcher.js.map +1 -0
- package/dist/analyzers/source-comparator.d.ts +177 -0
- package/dist/analyzers/source-comparator.d.ts.map +1 -0
- package/dist/analyzers/source-comparator.js +225 -0
- package/dist/analyzers/source-comparator.js.map +1 -0
- package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
- package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
- package/dist/business-rules/business-rules-analyzer.js +363 -0
- package/dist/business-rules/business-rules-analyzer.js.map +1 -0
- package/dist/business-rules/business-rules-generator.d.ts +78 -0
- package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
- package/dist/business-rules/business-rules-generator.js +357 -0
- package/dist/business-rules/business-rules-generator.js.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
- package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
- package/dist/business-rules/extractors/rule-extractors.js +189 -0
- package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
- package/dist/business-rules/value-generators.d.ts +70 -0
- package/dist/business-rules/value-generators.d.ts.map +1 -0
- package/dist/business-rules/value-generators.js +142 -0
- package/dist/business-rules/value-generators.js.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
- package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
- package/dist/executor/auth-providers/auth-header-builder.js +47 -0
- package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
- package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
- package/dist/executor/auth-providers/oauth2-provider.js +114 -0
- package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
- package/dist/executor/http-client.d.ts +133 -0
- package/dist/executor/http-client.d.ts.map +1 -0
- package/dist/executor/http-client.js +172 -0
- package/dist/executor/http-client.js.map +1 -0
- package/dist/executor/http-request-builder.d.ts +69 -0
- package/dist/executor/http-request-builder.d.ts.map +1 -0
- package/dist/executor/http-request-builder.js +140 -0
- package/dist/executor/http-request-builder.js.map +1 -0
- package/dist/executor/http-response-parser.d.ts +28 -0
- package/dist/executor/http-response-parser.d.ts.map +1 -0
- package/dist/executor/http-response-parser.js +74 -0
- package/dist/executor/http-response-parser.js.map +1 -0
- package/dist/executor/response-handler.d.ts +66 -0
- package/dist/executor/response-handler.d.ts.map +1 -0
- package/dist/executor/response-handler.js +135 -0
- package/dist/executor/response-handler.js.map +1 -0
- package/dist/executor/result-processor.d.ts +27 -0
- package/dist/executor/result-processor.d.ts.map +1 -0
- package/dist/executor/result-processor.js +140 -0
- package/dist/executor/result-processor.js.map +1 -0
- package/dist/executor/result-utils.d.ts +21 -0
- package/dist/executor/result-utils.d.ts.map +1 -0
- package/dist/executor/result-utils.js +29 -0
- package/dist/executor/result-utils.js.map +1 -0
- package/dist/executor/test-executor.d.ts +49 -0
- package/dist/executor/test-executor.d.ts.map +1 -0
- package/dist/executor/test-executor.js +226 -0
- package/dist/executor/test-executor.js.map +1 -0
- package/dist/executor/test-runner.d.ts +85 -0
- package/dist/executor/test-runner.d.ts.map +1 -0
- package/dist/executor/test-runner.js +177 -0
- package/dist/executor/test-runner.js.map +1 -0
- package/dist/executor/token-detector/index.d.ts +7 -0
- package/dist/executor/token-detector/index.d.ts.map +1 -0
- package/dist/executor/token-detector/index.js +7 -0
- package/dist/executor/token-detector/index.js.map +1 -0
- package/dist/executor/token-detector/token-detector.d.ts +64 -0
- package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
- package/dist/executor/token-detector/token-detector.js +140 -0
- package/dist/executor/token-detector/token-detector.js.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
- package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
- package/dist/generators/business-rule-from-stories-generator.js +227 -0
- package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
- package/dist/generators/data/ai-data-generator.d.ts +23 -0
- package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
- package/dist/generators/data/ai-data-generator.js +41 -0
- package/dist/generators/data/ai-data-generator.js.map +1 -0
- package/dist/generators/data/base-generator.d.ts +121 -0
- package/dist/generators/data/base-generator.d.ts.map +1 -0
- package/dist/generators/data/base-generator.js +200 -0
- package/dist/generators/data/base-generator.js.map +1 -0
- package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
- package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
- package/dist/generators/data/heuristic-data-generator.js +49 -0
- package/dist/generators/data/heuristic-data-generator.js.map +1 -0
- package/dist/generators/data/index.d.ts +48 -0
- package/dist/generators/data/index.d.ts.map +1 -0
- package/dist/generators/data/index.js +201 -0
- package/dist/generators/data/index.js.map +1 -0
- package/dist/generators/data/schema-walker.d.ts +45 -0
- package/dist/generators/data/schema-walker.d.ts.map +1 -0
- package/dist/generators/data/schema-walker.js +103 -0
- package/dist/generators/data/schema-walker.js.map +1 -0
- package/dist/generators/data/type-strategies.d.ts +79 -0
- package/dist/generators/data/type-strategies.d.ts.map +1 -0
- package/dist/generators/data/type-strategies.js +394 -0
- package/dist/generators/data/type-strategies.js.map +1 -0
- package/dist/generators/data-generator.d.ts +11 -0
- package/dist/generators/data-generator.d.ts.map +1 -0
- package/dist/generators/data-generator.js +11 -0
- package/dist/generators/data-generator.js.map +1 -0
- package/dist/generators/edge-case-generator.d.ts +55 -0
- package/dist/generators/edge-case-generator.d.ts.map +1 -0
- package/dist/generators/edge-case-generator.js +327 -0
- package/dist/generators/edge-case-generator.js.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
- package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
- package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
- package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
- package/dist/generators/error-case-generator.d.ts +11 -0
- package/dist/generators/error-case-generator.d.ts.map +1 -0
- package/dist/generators/error-case-generator.js +11 -0
- package/dist/generators/error-case-generator.js.map +1 -0
- package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
- package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/auth-error-strategy.js +118 -0
- package/dist/generators/errors/auth-error-strategy.js.map +1 -0
- package/dist/generators/errors/business-error-strategy.d.ts +44 -0
- package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/business-error-strategy.js +152 -0
- package/dist/generators/errors/business-error-strategy.js.map +1 -0
- package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
- package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy-factory.js +47 -0
- package/dist/generators/errors/error-strategy-factory.js.map +1 -0
- package/dist/generators/errors/error-strategy.d.ts +62 -0
- package/dist/generators/errors/error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/error-strategy.js +69 -0
- package/dist/generators/errors/error-strategy.js.map +1 -0
- package/dist/generators/errors/index.d.ts +23 -0
- package/dist/generators/errors/index.d.ts.map +1 -0
- package/dist/generators/errors/index.js +73 -0
- package/dist/generators/errors/index.js.map +1 -0
- package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
- package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
- package/dist/generators/errors/validation-error-strategy.js +214 -0
- package/dist/generators/errors/validation-error-strategy.js.map +1 -0
- package/dist/generators/happy-path-generator.d.ts +93 -0
- package/dist/generators/happy-path-generator.d.ts.map +1 -0
- package/dist/generators/happy-path-generator.js +275 -0
- package/dist/generators/happy-path-generator.js.map +1 -0
- package/dist/generators/test-enricher.d.ts +44 -0
- package/dist/generators/test-enricher.d.ts.map +1 -0
- package/dist/generators/test-enricher.js +109 -0
- package/dist/generators/test-enricher.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/ai-cache.d.ts +123 -0
- package/dist/llm/ai-cache.d.ts.map +1 -0
- package/dist/llm/ai-cache.js +220 -0
- package/dist/llm/ai-cache.js.map +1 -0
- package/dist/llm/ai-client.d.ts +92 -0
- package/dist/llm/ai-client.d.ts.map +1 -0
- package/dist/llm/ai-client.js +386 -0
- package/dist/llm/ai-client.js.map +1 -0
- package/dist/llm/data-generator-ai.d.ts +84 -0
- package/dist/llm/data-generator-ai.d.ts.map +1 -0
- package/dist/llm/data-generator-ai.js +284 -0
- package/dist/llm/data-generator-ai.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/mcp/handlers/base-handler.d.ts +72 -0
- package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
- package/dist/mcp/handlers/base-handler.js +86 -0
- package/dist/mcp/handlers/base-handler.js.map +1 -0
- package/dist/mcp/handlers/compare-sources.d.ts +91 -0
- package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
- package/dist/mcp/handlers/compare-sources.js +182 -0
- package/dist/mcp/handlers/compare-sources.js.map +1 -0
- package/dist/mcp/handlers/export-results.d.ts +53 -0
- package/dist/mcp/handlers/export-results.d.ts.map +1 -0
- package/dist/mcp/handlers/export-results.js +132 -0
- package/dist/mcp/handlers/export-results.js.map +1 -0
- package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
- package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
- package/dist/mcp/handlers/export-to-postman.js +128 -0
- package/dist/mcp/handlers/export-to-postman.js.map +1 -0
- package/dist/mcp/handlers/generate-tests.d.ts +74 -0
- package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/generate-tests.js +519 -0
- package/dist/mcp/handlers/generate-tests.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +13 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -0
- package/dist/mcp/handlers/index.js +12 -0
- package/dist/mcp/handlers/index.js.map +1 -0
- package/dist/mcp/handlers/run-tests.d.ts +89 -0
- package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/run-tests.js +233 -0
- package/dist/mcp/handlers/run-tests.js.map +1 -0
- package/dist/mcp/handlers/types.d.ts +61 -0
- package/dist/mcp/handlers/types.d.ts.map +1 -0
- package/dist/mcp/handlers/types.js +9 -0
- package/dist/mcp/handlers/types.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +200 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/services/file-service.d.ts +66 -0
- package/dist/mcp/services/file-service.d.ts.map +1 -0
- package/dist/mcp/services/file-service.js +143 -0
- package/dist/mcp/services/file-service.js.map +1 -0
- package/dist/mcp/services/llm-service.d.ts +70 -0
- package/dist/mcp/services/llm-service.d.ts.map +1 -0
- package/dist/mcp/services/llm-service.js +189 -0
- package/dist/mcp/services/llm-service.js.map +1 -0
- package/dist/mcp/services/postman-service.d.ts +128 -0
- package/dist/mcp/services/postman-service.d.ts.map +1 -0
- package/dist/mcp/services/postman-service.js +266 -0
- package/dist/mcp/services/postman-service.js.map +1 -0
- package/dist/mcp/services/report-service.d.ts +81 -0
- package/dist/mcp/services/report-service.d.ts.map +1 -0
- package/dist/mcp/services/report-service.js +210 -0
- package/dist/mcp/services/report-service.js.map +1 -0
- package/dist/mcp/services/spec-service.d.ts +58 -0
- package/dist/mcp/services/spec-service.d.ts.map +1 -0
- package/dist/mcp/services/spec-service.js +140 -0
- package/dist/mcp/services/spec-service.js.map +1 -0
- package/dist/parsers/endpoint-extractor.d.ts +32 -0
- package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
- package/dist/parsers/endpoint-extractor.js +160 -0
- package/dist/parsers/endpoint-extractor.js.map +1 -0
- package/dist/parsers/openapi-parser.d.ts +120 -0
- package/dist/parsers/openapi-parser.d.ts.map +1 -0
- package/dist/parsers/openapi-parser.js +257 -0
- package/dist/parsers/openapi-parser.js.map +1 -0
- package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
- package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
- package/dist/parsers/visitors/auth-visitor.js +116 -0
- package/dist/parsers/visitors/auth-visitor.js.map +1 -0
- package/dist/prd/index.d.ts +10 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +10 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/prd/prd-reader.d.ts +124 -0
- package/dist/prd/prd-reader.d.ts.map +1 -0
- package/dist/prd/prd-reader.js +308 -0
- package/dist/prd/prd-reader.js.map +1 -0
- package/dist/prd/prd-storage.d.ts +232 -0
- package/dist/prd/prd-storage.d.ts.map +1 -0
- package/dist/prd/prd-storage.js +129 -0
- package/dist/prd/prd-storage.js.map +1 -0
- package/dist/repairers/test-auto-repairer.d.ts +61 -0
- package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
- package/dist/repairers/test-auto-repairer.js +213 -0
- package/dist/repairers/test-auto-repairer.js.map +1 -0
- package/dist/reporters/comparison-report-generator.d.ts +58 -0
- package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
- package/dist/reporters/comparison-report-generator.js +369 -0
- package/dist/reporters/comparison-report-generator.js.map +1 -0
- package/dist/reporters/gherkin-formatter.d.ts +34 -0
- package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
- package/dist/reporters/gherkin-formatter.js +231 -0
- package/dist/reporters/gherkin-formatter.js.map +1 -0
- package/dist/reporters/html-report-generator.d.ts +174 -0
- package/dist/reporters/html-report-generator.d.ts.map +1 -0
- package/dist/reporters/html-report-generator.js +194 -0
- package/dist/reporters/html-report-generator.js.map +1 -0
- package/dist/reporters/report-charts.d.ts +23 -0
- package/dist/reporters/report-charts.d.ts.map +1 -0
- package/dist/reporters/report-charts.js +182 -0
- package/dist/reporters/report-charts.js.map +1 -0
- package/dist/reporters/report-sections.d.ts +34 -0
- package/dist/reporters/report-sections.d.ts.map +1 -0
- package/dist/reporters/report-sections.js +481 -0
- package/dist/reporters/report-sections.js.map +1 -0
- package/dist/reporters/report-styles.d.ts +12 -0
- package/dist/reporters/report-styles.d.ts.map +1 -0
- package/dist/reporters/report-styles.js +412 -0
- package/dist/reporters/report-styles.js.map +1 -0
- package/dist/reporters/report-test-details.d.ts +56 -0
- package/dist/reporters/report-test-details.d.ts.map +1 -0
- package/dist/reporters/report-test-details.js +328 -0
- package/dist/reporters/report-test-details.js.map +1 -0
- package/dist/reporters/report-utils.d.ts +40 -0
- package/dist/reporters/report-utils.d.ts.map +1 -0
- package/dist/reporters/report-utils.js +163 -0
- package/dist/reporters/report-utils.js.map +1 -0
- package/dist/types/ai-config.d.ts +63 -0
- package/dist/types/ai-config.d.ts.map +1 -0
- package/dist/types/ai-config.js +79 -0
- package/dist/types/ai-config.js.map +1 -0
- package/dist/types/business-rules.d.ts +235 -0
- package/dist/types/business-rules.d.ts.map +1 -0
- package/dist/types/business-rules.js +6 -0
- package/dist/types/business-rules.js.map +1 -0
- package/dist/types/config.d.ts +106 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +72 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +139 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +6 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/pact.d.ts +101 -0
- package/dist/types/pact.d.ts.map +1 -0
- package/dist/types/pact.js +6 -0
- package/dist/types/pact.js.map +1 -0
- package/dist/types/reporting.d.ts +93 -0
- package/dist/types/reporting.d.ts.map +1 -0
- package/dist/types/reporting.js +6 -0
- package/dist/types/reporting.js.map +1 -0
- package/dist/types/test-case.d.ts +233 -0
- package/dist/types/test-case.d.ts.map +1 -0
- package/dist/types/test-case.js +6 -0
- package/dist/types/test-case.js.map +1 -0
- package/dist/types/test-execution.d.ts +80 -0
- package/dist/types/test-execution.d.ts.map +1 -0
- package/dist/types/test-execution.js +6 -0
- package/dist/types/test-execution.js.map +1 -0
- package/dist/utils/auth-generator.d.ts +30 -0
- package/dist/utils/auth-generator.d.ts.map +1 -0
- package/dist/utils/auth-generator.js +68 -0
- package/dist/utils/auth-generator.js.map +1 -0
- package/dist/utils/config.d.ts +181 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +141 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/coverage-calculator.d.ts +81 -0
- package/dist/utils/coverage-calculator.d.ts.map +1 -0
- package/dist/utils/coverage-calculator.js +134 -0
- package/dist/utils/coverage-calculator.js.map +1 -0
- package/dist/utils/data-loader.d.ts +52 -0
- package/dist/utils/data-loader.d.ts.map +1 -0
- package/dist/utils/data-loader.js +192 -0
- package/dist/utils/data-loader.js.map +1 -0
- package/dist/utils/errors.d.ts +167 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +257 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +220 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +325 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/openapi-discovery.d.ts +31 -0
- package/dist/utils/openapi-discovery.d.ts.map +1 -0
- package/dist/utils/openapi-discovery.js +322 -0
- package/dist/utils/openapi-discovery.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +101 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +167 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/resilience.d.ts +181 -0
- package/dist/utils/resilience.d.ts.map +1 -0
- package/dist/utils/resilience.js +269 -0
- package/dist/utils/resilience.js.map +1 -0
- package/dist/validators/openapi-validator.d.ts +198 -0
- package/dist/validators/openapi-validator.d.ts.map +1 -0
- package/dist/validators/openapi-validator.js +349 -0
- package/dist/validators/openapi-validator.js.map +1 -0
- package/dist/validators/response-matcher.d.ts +84 -0
- package/dist/validators/response-matcher.d.ts.map +1 -0
- package/dist/validators/response-matcher.js +234 -0
- package/dist/validators/response-matcher.js.map +1 -0
- package/dist/validators/schema-validator.d.ts +174 -0
- package/dist/validators/schema-validator.d.ts.map +1 -0
- package/dist/validators/schema-validator.js +340 -0
- package/dist/validators/schema-validator.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Service - AI/LLM operations
|
|
3
|
+
*
|
|
4
|
+
* Centralizes all LLM interactions including:
|
|
5
|
+
* - Calling AI for test generation
|
|
6
|
+
* - TOON format conversion
|
|
7
|
+
* - Prompt construction
|
|
8
|
+
*
|
|
9
|
+
* @module mcp/services/llm-service
|
|
10
|
+
*/
|
|
11
|
+
import { callLLM, toTOONFormat } from '../../llm/ai-client.js';
|
|
12
|
+
import { encode as toTOON, decode as fromTOON } from '@toon-format/toon';
|
|
13
|
+
import { createLogger } from '../../utils/logger.js';
|
|
14
|
+
const log = createLogger('llm-service');
|
|
15
|
+
/**
|
|
16
|
+
* Service for LLM operations
|
|
17
|
+
*/
|
|
18
|
+
export class LLMService {
|
|
19
|
+
/**
|
|
20
|
+
* Calls the LLM with a prompt
|
|
21
|
+
*
|
|
22
|
+
* @param prompt - Prompt text to send to LLM
|
|
23
|
+
* @param options - Optional configuration
|
|
24
|
+
* @returns LLM response text
|
|
25
|
+
*/
|
|
26
|
+
async callLLM(prompt, options) {
|
|
27
|
+
log.info('Calling LLM', {
|
|
28
|
+
promptLength: prompt.length,
|
|
29
|
+
model: options?.model
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
const result = await callLLM(prompt, {
|
|
33
|
+
temperature: options?.temperature
|
|
34
|
+
});
|
|
35
|
+
if (!result.success || !result.text) {
|
|
36
|
+
throw new Error(result.error || 'LLM call failed with no response');
|
|
37
|
+
}
|
|
38
|
+
log.info('LLM response received', {
|
|
39
|
+
responseLength: result.text.length
|
|
40
|
+
});
|
|
41
|
+
return result.text;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
log.error('LLM call failed', { error });
|
|
45
|
+
throw new Error(`LLM call failed: ${error}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Formats data as TOON (Tree Object Oriented Notation)
|
|
50
|
+
*
|
|
51
|
+
* @param data - Data to format
|
|
52
|
+
* @returns TOON formatted string
|
|
53
|
+
*/
|
|
54
|
+
formatAsTOON(data) {
|
|
55
|
+
log.debug('Formatting data as TOON');
|
|
56
|
+
try {
|
|
57
|
+
const toon = toTOON(data);
|
|
58
|
+
log.debug('TOON formatting complete', {
|
|
59
|
+
outputLength: toon.length
|
|
60
|
+
});
|
|
61
|
+
return toon;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
log.error('TOON formatting failed', { error });
|
|
65
|
+
throw new Error(`TOON formatting failed: ${error}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parses TOON formatted text back to data
|
|
70
|
+
*
|
|
71
|
+
* @param text - TOON formatted text
|
|
72
|
+
* @returns Parsed data
|
|
73
|
+
*/
|
|
74
|
+
parseTOONResponse(text) {
|
|
75
|
+
log.debug('Parsing TOON response', {
|
|
76
|
+
textLength: text.length
|
|
77
|
+
});
|
|
78
|
+
try {
|
|
79
|
+
const data = fromTOON(text);
|
|
80
|
+
log.debug('TOON parsing complete');
|
|
81
|
+
return data;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
log.error('TOON parsing failed', { error });
|
|
85
|
+
throw new Error(`TOON parsing failed: ${error}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Converts data to TOON format for AI consumption
|
|
90
|
+
*
|
|
91
|
+
* Uses toTOONFormat from ai-client which handles special formatting
|
|
92
|
+
* for AI prompts.
|
|
93
|
+
*
|
|
94
|
+
* @param data - Data to convert
|
|
95
|
+
* @returns TOON formatted string for AI
|
|
96
|
+
*/
|
|
97
|
+
toTOONFormatForAI(data) {
|
|
98
|
+
log.debug('Converting to TOON format for AI');
|
|
99
|
+
try {
|
|
100
|
+
const toon = toTOONFormat(data);
|
|
101
|
+
log.debug('TOON conversion complete', {
|
|
102
|
+
outputLength: toon.length
|
|
103
|
+
});
|
|
104
|
+
return toon;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
log.error('TOON conversion failed', { error });
|
|
108
|
+
throw new Error(`TOON conversion for AI failed: ${error}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Constructs a prompt for test generation
|
|
113
|
+
*
|
|
114
|
+
* @param params - Parameters for prompt construction
|
|
115
|
+
* @returns Constructed prompt
|
|
116
|
+
*/
|
|
117
|
+
constructTestGenerationPrompt(params) {
|
|
118
|
+
const { endpoints, userStories, apiContext, categories } = params;
|
|
119
|
+
log.info('Constructing test generation prompt', {
|
|
120
|
+
endpointCount: endpoints.length,
|
|
121
|
+
hasUserStories: !!userStories,
|
|
122
|
+
hasApiContext: !!apiContext,
|
|
123
|
+
categories: categories?.length || 0
|
|
124
|
+
});
|
|
125
|
+
const parts = [];
|
|
126
|
+
// Header
|
|
127
|
+
parts.push('Generate comprehensive test cases for the following API endpoints.\n');
|
|
128
|
+
// Endpoints in TOON format
|
|
129
|
+
parts.push('# Endpoints\n');
|
|
130
|
+
parts.push(this.formatAsTOON(endpoints));
|
|
131
|
+
parts.push('\n');
|
|
132
|
+
// User stories if provided
|
|
133
|
+
if (userStories) {
|
|
134
|
+
parts.push('# User Stories\n');
|
|
135
|
+
parts.push(userStories);
|
|
136
|
+
parts.push('\n');
|
|
137
|
+
}
|
|
138
|
+
// API context if provided
|
|
139
|
+
if (apiContext) {
|
|
140
|
+
parts.push('# API Context\n');
|
|
141
|
+
parts.push(this.formatAsTOON(apiContext));
|
|
142
|
+
parts.push('\n');
|
|
143
|
+
}
|
|
144
|
+
// Categories to generate
|
|
145
|
+
if (categories && categories.length > 0) {
|
|
146
|
+
parts.push('# Categories to Generate\n');
|
|
147
|
+
parts.push(categories.join(', '));
|
|
148
|
+
parts.push('\n');
|
|
149
|
+
}
|
|
150
|
+
// Instructions
|
|
151
|
+
parts.push('# Instructions\n');
|
|
152
|
+
parts.push('Generate test cases in the following categories:\n');
|
|
153
|
+
parts.push('- happy-path: Valid scenarios that should succeed\n');
|
|
154
|
+
parts.push('- edge-case: Boundary values and special cases\n');
|
|
155
|
+
parts.push('- error-case: Invalid inputs that should fail\n');
|
|
156
|
+
if (userStories) {
|
|
157
|
+
parts.push('- business-rule: Tests based on user stories\n');
|
|
158
|
+
}
|
|
159
|
+
parts.push('\n');
|
|
160
|
+
parts.push('Return test cases as JSON array.');
|
|
161
|
+
const prompt = parts.join('');
|
|
162
|
+
log.debug('Prompt constructed', { length: prompt.length });
|
|
163
|
+
return prompt;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Constructs a prompt for failure analysis
|
|
167
|
+
*
|
|
168
|
+
* @param failedTests - Failed test results
|
|
169
|
+
* @returns Constructed prompt
|
|
170
|
+
*/
|
|
171
|
+
constructFailureAnalysisPrompt(failedTests) {
|
|
172
|
+
log.info('Constructing failure analysis prompt', {
|
|
173
|
+
failedTestCount: failedTests.length
|
|
174
|
+
});
|
|
175
|
+
const parts = [];
|
|
176
|
+
parts.push('Analyze the following failed test cases and provide insights.\n\n');
|
|
177
|
+
parts.push('# Failed Tests\n');
|
|
178
|
+
parts.push(this.formatAsTOON(failedTests));
|
|
179
|
+
parts.push('\n\n');
|
|
180
|
+
parts.push('Provide:\n');
|
|
181
|
+
parts.push('1. Root cause analysis\n');
|
|
182
|
+
parts.push('2. Common patterns in failures\n');
|
|
183
|
+
parts.push('3. Suggested fixes\n');
|
|
184
|
+
const prompt = parts.join('');
|
|
185
|
+
log.debug('Failure analysis prompt constructed', { length: prompt.length });
|
|
186
|
+
return prompt;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=llm-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../../src/mcp/services/llm-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postman Service - Converts test cases to Postman Collections
|
|
3
|
+
*
|
|
4
|
+
* Generates Postman Collection v2.1 JSON format manually
|
|
5
|
+
* compatible with Postman app and Newman CLI.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp/services/postman-service
|
|
8
|
+
*/
|
|
9
|
+
import type { TestCase } from '../../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Options for Postman collection generation
|
|
12
|
+
*/
|
|
13
|
+
export interface PostmanCollectionOptions {
|
|
14
|
+
/** Collection name */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Base URL for all requests */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/** Include test scripts (pm.test assertions) */
|
|
19
|
+
includeTests?: boolean;
|
|
20
|
+
/** Group requests by category into folders */
|
|
21
|
+
groupByCategory?: boolean;
|
|
22
|
+
/** Collection-level authentication */
|
|
23
|
+
auth?: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Postman Collection v2.1 JSON structure
|
|
27
|
+
*/
|
|
28
|
+
interface PostmanCollection {
|
|
29
|
+
info: {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
schema: string;
|
|
33
|
+
};
|
|
34
|
+
item: PostmanItem[];
|
|
35
|
+
auth?: any;
|
|
36
|
+
variable?: Array<{
|
|
37
|
+
key: string;
|
|
38
|
+
value: string;
|
|
39
|
+
type: string;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
interface PostmanItem {
|
|
43
|
+
name: string;
|
|
44
|
+
item?: PostmanItem[];
|
|
45
|
+
request?: PostmanRequest;
|
|
46
|
+
event?: PostmanEvent[];
|
|
47
|
+
}
|
|
48
|
+
interface PostmanRequest {
|
|
49
|
+
url: string | PostmanUrl;
|
|
50
|
+
method: string;
|
|
51
|
+
header: PostmanHeader[];
|
|
52
|
+
body?: PostmanBody;
|
|
53
|
+
description?: string;
|
|
54
|
+
}
|
|
55
|
+
interface PostmanUrl {
|
|
56
|
+
raw: string;
|
|
57
|
+
host: string[];
|
|
58
|
+
path: string[];
|
|
59
|
+
query?: Array<{
|
|
60
|
+
key: string;
|
|
61
|
+
value: string;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
interface PostmanHeader {
|
|
65
|
+
key: string;
|
|
66
|
+
value: string;
|
|
67
|
+
}
|
|
68
|
+
interface PostmanBody {
|
|
69
|
+
mode: string;
|
|
70
|
+
raw?: string;
|
|
71
|
+
urlencoded?: Array<{
|
|
72
|
+
key: string;
|
|
73
|
+
value: string;
|
|
74
|
+
}>;
|
|
75
|
+
options?: any;
|
|
76
|
+
}
|
|
77
|
+
interface PostmanEvent {
|
|
78
|
+
listen: string;
|
|
79
|
+
script: {
|
|
80
|
+
exec: string[];
|
|
81
|
+
type: string;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Service for generating Postman Collections from test cases
|
|
86
|
+
*/
|
|
87
|
+
export declare class PostmanService {
|
|
88
|
+
/**
|
|
89
|
+
* Generates a Postman Collection v2.1 from test cases
|
|
90
|
+
*
|
|
91
|
+
* @param tests - Test cases to convert
|
|
92
|
+
* @param options - Generation options
|
|
93
|
+
* @returns Collection object with toJSON() method
|
|
94
|
+
*/
|
|
95
|
+
generateCollection(tests: TestCase[], options: PostmanCollectionOptions): {
|
|
96
|
+
toJSON: () => PostmanCollection;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Groups tests by category and returns folder items
|
|
100
|
+
*/
|
|
101
|
+
private groupTestsByCategory;
|
|
102
|
+
/**
|
|
103
|
+
* Creates a Postman request item from a test case
|
|
104
|
+
*/
|
|
105
|
+
private createRequestItem;
|
|
106
|
+
/**
|
|
107
|
+
* Builds URL string from test case
|
|
108
|
+
*/
|
|
109
|
+
private buildUrl;
|
|
110
|
+
/**
|
|
111
|
+
* Builds headers array from test case
|
|
112
|
+
*/
|
|
113
|
+
private buildHeaders;
|
|
114
|
+
/**
|
|
115
|
+
* Builds request body from test case
|
|
116
|
+
*/
|
|
117
|
+
private buildBody;
|
|
118
|
+
/**
|
|
119
|
+
* Generates Postman test script for validating responses
|
|
120
|
+
*/
|
|
121
|
+
private generateTestScript;
|
|
122
|
+
/**
|
|
123
|
+
* Counts total requests in collection (including nested folders)
|
|
124
|
+
*/
|
|
125
|
+
private countTotalRequests;
|
|
126
|
+
}
|
|
127
|
+
export {};
|
|
128
|
+
//# sourceMappingURL=postman-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postman-service.d.ts","sourceRoot":"","sources":["../../../src/mcp/services/postman-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKrD;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;;OAMG;IACH,kBAAkB,CAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,wBAAwB,GAChC;QAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;KAAE;IA8CtC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAyBhB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsCjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postman Service - Converts test cases to Postman Collections
|
|
3
|
+
*
|
|
4
|
+
* Generates Postman Collection v2.1 JSON format manually
|
|
5
|
+
* compatible with Postman app and Newman CLI.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp/services/postman-service
|
|
8
|
+
*/
|
|
9
|
+
import { createLogger } from '../../utils/logger.js';
|
|
10
|
+
const log = createLogger('postman-service');
|
|
11
|
+
/**
|
|
12
|
+
* Service for generating Postman Collections from test cases
|
|
13
|
+
*/
|
|
14
|
+
export class PostmanService {
|
|
15
|
+
/**
|
|
16
|
+
* Generates a Postman Collection v2.1 from test cases
|
|
17
|
+
*
|
|
18
|
+
* @param tests - Test cases to convert
|
|
19
|
+
* @param options - Generation options
|
|
20
|
+
* @returns Collection object with toJSON() method
|
|
21
|
+
*/
|
|
22
|
+
generateCollection(tests, options) {
|
|
23
|
+
log.info('Generating Postman collection', {
|
|
24
|
+
testCount: tests.length,
|
|
25
|
+
collectionName: options.name,
|
|
26
|
+
groupByCategory: options.groupByCategory
|
|
27
|
+
});
|
|
28
|
+
// Create collection
|
|
29
|
+
const collection = {
|
|
30
|
+
info: {
|
|
31
|
+
name: options.name,
|
|
32
|
+
description: `Generated API test collection with ${tests.length} requests`,
|
|
33
|
+
schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json'
|
|
34
|
+
},
|
|
35
|
+
item: [],
|
|
36
|
+
auth: options.auth
|
|
37
|
+
};
|
|
38
|
+
// Add variables if baseUrl provided
|
|
39
|
+
if (options.baseUrl) {
|
|
40
|
+
collection.variable = [
|
|
41
|
+
{
|
|
42
|
+
key: 'baseUrl',
|
|
43
|
+
value: options.baseUrl,
|
|
44
|
+
type: 'string'
|
|
45
|
+
}
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
// Group by category or add flat
|
|
49
|
+
if (options.groupByCategory !== false) {
|
|
50
|
+
collection.item = this.groupTestsByCategory(tests, options);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
collection.item = tests.map(test => this.createRequestItem(test, options));
|
|
54
|
+
}
|
|
55
|
+
log.info('Postman collection generated', {
|
|
56
|
+
folderCount: collection.item.length,
|
|
57
|
+
totalRequests: this.countTotalRequests(collection)
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
toJSON: () => collection
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Groups tests by category and returns folder items
|
|
65
|
+
*/
|
|
66
|
+
groupTestsByCategory(tests, options) {
|
|
67
|
+
const categoryFolders = new Map();
|
|
68
|
+
const categoryNames = {
|
|
69
|
+
'happy-path': '✅ Happy Path',
|
|
70
|
+
'edge-case': '⚡ Edge Cases',
|
|
71
|
+
'error-case': '❌ Error Cases',
|
|
72
|
+
'business-rule': '📋 Business Rules'
|
|
73
|
+
};
|
|
74
|
+
for (const test of tests) {
|
|
75
|
+
const category = test.category || 'other';
|
|
76
|
+
if (!categoryFolders.has(category)) {
|
|
77
|
+
categoryFolders.set(category, []);
|
|
78
|
+
}
|
|
79
|
+
const item = this.createRequestItem(test, options);
|
|
80
|
+
categoryFolders.get(category).push(item);
|
|
81
|
+
}
|
|
82
|
+
// Convert to folder structure
|
|
83
|
+
const folders = [];
|
|
84
|
+
for (const [category, items] of categoryFolders) {
|
|
85
|
+
const folderName = categoryNames[category] || category;
|
|
86
|
+
folders.push({
|
|
87
|
+
name: folderName,
|
|
88
|
+
item: items
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return folders;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a Postman request item from a test case
|
|
95
|
+
*/
|
|
96
|
+
createRequestItem(test, options) {
|
|
97
|
+
// Build URL
|
|
98
|
+
const url = this.buildUrl(test, options.baseUrl);
|
|
99
|
+
// Build headers
|
|
100
|
+
const headers = this.buildHeaders(test);
|
|
101
|
+
// Build body
|
|
102
|
+
const body = this.buildBody(test);
|
|
103
|
+
// Create request
|
|
104
|
+
const request = {
|
|
105
|
+
url,
|
|
106
|
+
method: test.method.toUpperCase(),
|
|
107
|
+
header: headers,
|
|
108
|
+
description: test.description || `${test.method.toUpperCase()} ${test.path}`
|
|
109
|
+
};
|
|
110
|
+
if (body) {
|
|
111
|
+
request.body = body;
|
|
112
|
+
}
|
|
113
|
+
// Create item
|
|
114
|
+
const item = {
|
|
115
|
+
name: test.name,
|
|
116
|
+
request
|
|
117
|
+
};
|
|
118
|
+
// Add test scripts if enabled
|
|
119
|
+
if (options.includeTests !== false) {
|
|
120
|
+
const testScript = this.generateTestScript(test);
|
|
121
|
+
if (testScript) {
|
|
122
|
+
item.event = [
|
|
123
|
+
{
|
|
124
|
+
listen: 'test',
|
|
125
|
+
script: {
|
|
126
|
+
exec: testScript.split('\n'),
|
|
127
|
+
type: 'text/javascript'
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return item;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Builds URL string from test case
|
|
137
|
+
*/
|
|
138
|
+
buildUrl(test, baseUrl) {
|
|
139
|
+
// Replace path params
|
|
140
|
+
let path = test.path;
|
|
141
|
+
if (test.pathParams) {
|
|
142
|
+
for (const [key, value] of Object.entries(test.pathParams)) {
|
|
143
|
+
path = path.replace(`{${key}}`, String(value));
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Build full URL
|
|
147
|
+
let url = baseUrl
|
|
148
|
+
? `{{baseUrl}}${path}`
|
|
149
|
+
: `https://api.example.com${path}`;
|
|
150
|
+
// Add query params
|
|
151
|
+
if (test.queryParams && Object.keys(test.queryParams).length > 0) {
|
|
152
|
+
const params = Object.entries(test.queryParams)
|
|
153
|
+
.map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
|
|
154
|
+
.join('&');
|
|
155
|
+
url += `?${params}`;
|
|
156
|
+
}
|
|
157
|
+
return url;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Builds headers array from test case
|
|
161
|
+
*/
|
|
162
|
+
buildHeaders(test) {
|
|
163
|
+
const headers = [];
|
|
164
|
+
if (test.headers) {
|
|
165
|
+
for (const [key, value] of Object.entries(test.headers)) {
|
|
166
|
+
headers.push({ key, value });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Add Content-Type if body present and not already set
|
|
170
|
+
if (test.body && !test.headers?.['Content-Type']) {
|
|
171
|
+
headers.push({
|
|
172
|
+
key: 'Content-Type',
|
|
173
|
+
value: test.contentType || 'application/json'
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
return headers;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Builds request body from test case
|
|
180
|
+
*/
|
|
181
|
+
buildBody(test) {
|
|
182
|
+
if (!test.body) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
const contentType = test.contentType || 'application/json';
|
|
186
|
+
if (contentType === 'application/json') {
|
|
187
|
+
return {
|
|
188
|
+
mode: 'raw',
|
|
189
|
+
raw: JSON.stringify(test.body, null, 2)
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (contentType === 'application/x-www-form-urlencoded') {
|
|
193
|
+
const urlencoded = [];
|
|
194
|
+
if (typeof test.body === 'object' && test.body !== null) {
|
|
195
|
+
for (const [key, value] of Object.entries(test.body)) {
|
|
196
|
+
urlencoded.push({
|
|
197
|
+
key,
|
|
198
|
+
value: String(value)
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
mode: 'urlencoded',
|
|
204
|
+
urlencoded
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Default: raw
|
|
208
|
+
return {
|
|
209
|
+
mode: 'raw',
|
|
210
|
+
raw: typeof test.body === 'string' ? test.body : JSON.stringify(test.body)
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generates Postman test script for validating responses
|
|
215
|
+
*/
|
|
216
|
+
generateTestScript(test) {
|
|
217
|
+
const scripts = [];
|
|
218
|
+
// Status code test
|
|
219
|
+
scripts.push(`pm.test("Status code is ${test.expectedStatus}", function () {`);
|
|
220
|
+
scripts.push(` pm.response.to.have.status(${test.expectedStatus});`);
|
|
221
|
+
scripts.push(`});`);
|
|
222
|
+
scripts.push('');
|
|
223
|
+
// Response time test
|
|
224
|
+
scripts.push(`pm.test("Response time is less than 2000ms", function () {`);
|
|
225
|
+
scripts.push(` pm.expect(pm.response.responseTime).to.be.below(2000);`);
|
|
226
|
+
scripts.push(`});`);
|
|
227
|
+
scripts.push('');
|
|
228
|
+
// Expected error message test
|
|
229
|
+
if (test.expectedError?.message) {
|
|
230
|
+
const expectedMsg = typeof test.expectedError.message === 'string'
|
|
231
|
+
? test.expectedError.message
|
|
232
|
+
: 'error';
|
|
233
|
+
scripts.push(`pm.test("Response contains expected error message", function () {`);
|
|
234
|
+
scripts.push(` const body = pm.response.json();`);
|
|
235
|
+
scripts.push(` pm.expect(JSON.stringify(body)).to.include("${expectedMsg}");`);
|
|
236
|
+
scripts.push(`});`);
|
|
237
|
+
scripts.push('');
|
|
238
|
+
}
|
|
239
|
+
// Schema validation for happy-path
|
|
240
|
+
if (test.category === 'happy-path' && test.validateSchema !== false) {
|
|
241
|
+
scripts.push(`pm.test("Response has valid JSON body", function () {`);
|
|
242
|
+
scripts.push(` pm.response.to.be.json;`);
|
|
243
|
+
scripts.push(`});`);
|
|
244
|
+
}
|
|
245
|
+
return scripts.join('\n');
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Counts total requests in collection (including nested folders)
|
|
249
|
+
*/
|
|
250
|
+
countTotalRequests(collection) {
|
|
251
|
+
let count = 0;
|
|
252
|
+
function countItems(items) {
|
|
253
|
+
for (const item of items) {
|
|
254
|
+
if (item.request) {
|
|
255
|
+
count++;
|
|
256
|
+
}
|
|
257
|
+
if (item.item && Array.isArray(item.item)) {
|
|
258
|
+
countItems(item.item);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
countItems(collection.item);
|
|
263
|
+
return count;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=postman-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postman-service.js","sourceRoot":"","sources":["../../../src/mcp/services/postman-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AA8E5C;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB;;;;;;OAMG;IACH,kBAAkB,CAChB,KAAiB,EACjB,OAAiC;QAEjC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE;YACxC,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,cAAc,EAAE,OAAO,CAAC,IAAI;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,UAAU,GAAsB;YACpC,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,sCAAsC,KAAK,CAAC,MAAM,WAAW;gBAC1E,MAAM,EAAE,sEAAsE;aAC/E;YACD,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;QAEF,oCAAoC;QACpC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,UAAU,CAAC,QAAQ,GAAG;gBACpB;oBACE,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,OAAO,CAAC,OAAO;oBACtB,IAAI,EAAE,QAAQ;iBACf;aACF,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACvC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM;YACnC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;SACnD,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAC1B,KAAiB,EACjB,OAAiC;QAEjC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;QAEzD,MAAM,aAAa,GAA2B;YAC5C,YAAY,EAAE,cAAc;YAC5B,WAAW,EAAE,cAAc;YAC3B,YAAY,EAAE,eAAe;YAC7B,eAAe,EAAE,mBAAmB;SACrC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;YAE1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnD,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,8BAA8B;QAC9B,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,IAAc,EACd,OAAiC;QAEjC,YAAY;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjD,gBAAgB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAExC,aAAa;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,iBAAiB;QACjB,MAAM,OAAO,GAAmB;YAC9B,GAAG;YACH,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACjC,MAAM,EAAE,OAAO;YACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE;SAC7E,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,cAAc;QACd,MAAM,IAAI,GAAgB;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO;SACR,CAAC;QAEF,8BAA8B;QAC9B,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG;oBACX;wBACE,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE;4BACN,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;4BAC5B,IAAI,EAAE,iBAAiB;yBACxB;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,IAAc,EAAE,OAAgB;QAC/C,sBAAsB;QACtB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,GAAG,GAAG,OAAO;YACf,CAAC,CAAC,cAAc,IAAI,EAAE;YACtB,CAAC,CAAC,0BAA0B,IAAI,EAAE,CAAC;QAErC,mBAAmB;QACnB,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;iBAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;iBACpE,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAc;QACjC,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,cAAc;gBACnB,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,kBAAkB;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,IAAc;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,kBAAkB,CAAC;QAE3D,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;YACvC,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,KAAK,mCAAmC,EAAE,CAAC;YACxD,MAAM,UAAU,GAA0C,EAAE,CAAC;YAC7D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrD,UAAU,CAAC,IAAI,CAAC;wBACd,GAAG;wBACH,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,UAAU;aACX,CAAC;QACJ,CAAC;QAED,eAAe;QACf,OAAO;YACL,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3E,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,IAAc;QACvC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,mBAAmB;QACnB,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,cAAc,kBAAkB,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjB,qBAAqB;QACrB,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEjB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ;gBAChE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO;gBAC5B,CAAC,CAAC,OAAO,CAAC;YAEZ,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,mDAAmD,WAAW,KAAK,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,UAA6B;QACtD,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,SAAS,UAAU,CAAC,KAAoB;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,KAAK,EAAE,CAAC;gBACV,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE5B,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|