@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,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Handlers - Exports all tool handlers
|
|
3
|
+
*
|
|
4
|
+
* @module mcp/handlers
|
|
5
|
+
*/
|
|
6
|
+
export { GenerateTestsHandler } from './generate-tests.js';
|
|
7
|
+
export { RunTestsHandler } from './run-tests.js';
|
|
8
|
+
export { ExportResultsHandler } from './export-results.js';
|
|
9
|
+
export { CompareSourcesHandler } from './compare-sources.js';
|
|
10
|
+
export { ExportToPostmanHandler } from './export-to-postman.js';
|
|
11
|
+
export { BaseToolHandler } from './base-handler.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Tests Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles the run-tests tool which executes test suites against APIs.
|
|
5
|
+
*
|
|
6
|
+
* @module mcp/handlers/run-tests
|
|
7
|
+
*/
|
|
8
|
+
import { BaseToolHandler } from './base-handler.js';
|
|
9
|
+
import type { ToolResponse } from './types.js';
|
|
10
|
+
import { SpecService } from '../services/spec-service.js';
|
|
11
|
+
/**
|
|
12
|
+
* Handler for test execution tool
|
|
13
|
+
*/
|
|
14
|
+
export declare class RunTestsHandler extends BaseToolHandler {
|
|
15
|
+
private specService;
|
|
16
|
+
readonly name = "run-tests";
|
|
17
|
+
readonly description: string;
|
|
18
|
+
readonly inputSchema: {
|
|
19
|
+
type: string;
|
|
20
|
+
properties: {
|
|
21
|
+
specPath: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
baseUrl: {
|
|
26
|
+
type: string;
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
tests: {
|
|
30
|
+
type: string;
|
|
31
|
+
description: string;
|
|
32
|
+
items: {
|
|
33
|
+
type: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
credentials: {
|
|
37
|
+
type: string;
|
|
38
|
+
description: string;
|
|
39
|
+
properties: {
|
|
40
|
+
bearerToken: {
|
|
41
|
+
type: string;
|
|
42
|
+
description: string;
|
|
43
|
+
};
|
|
44
|
+
apiKey: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
username: {
|
|
49
|
+
type: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
password: {
|
|
53
|
+
type: string;
|
|
54
|
+
description: string;
|
|
55
|
+
};
|
|
56
|
+
clientId: {
|
|
57
|
+
type: string;
|
|
58
|
+
description: string;
|
|
59
|
+
};
|
|
60
|
+
clientSecret: {
|
|
61
|
+
type: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
authToken: {
|
|
67
|
+
type: string;
|
|
68
|
+
description: string;
|
|
69
|
+
};
|
|
70
|
+
testData: {
|
|
71
|
+
type: string;
|
|
72
|
+
description: string;
|
|
73
|
+
additionalProperties: boolean;
|
|
74
|
+
};
|
|
75
|
+
parallel: {
|
|
76
|
+
type: string;
|
|
77
|
+
description: string;
|
|
78
|
+
};
|
|
79
|
+
timeout: {
|
|
80
|
+
type: string;
|
|
81
|
+
description: string;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
required: string[];
|
|
85
|
+
};
|
|
86
|
+
constructor(specService: SpecService);
|
|
87
|
+
handle(args: unknown): Promise<ToolResponse>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=run-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/run-tests.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI1D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IA+FhD,OAAO,CAAC,WAAW;IA9FrB,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,SASuD;IAE3E,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+ElB;gBAGQ,WAAW,EAAE,WAAW;IAK5B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAuEnD"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Tests Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles the run-tests tool which executes test suites against APIs.
|
|
5
|
+
*
|
|
6
|
+
* @module mcp/handlers/run-tests
|
|
7
|
+
*/
|
|
8
|
+
import { BaseToolHandler } from './base-handler.js';
|
|
9
|
+
import { TestRunner } from '../../executor/test-runner.js';
|
|
10
|
+
/**
|
|
11
|
+
* Handler for test execution tool
|
|
12
|
+
*/
|
|
13
|
+
export class RunTestsHandler extends BaseToolHandler {
|
|
14
|
+
specService;
|
|
15
|
+
name = 'run-tests';
|
|
16
|
+
description = 'STEP 2 of 3 — Execute test cases against a live API and return pass/fail results. ' +
|
|
17
|
+
'Receives the "tests" array from generate-tests and runs each test case against baseUrl. ' +
|
|
18
|
+
'Happy-path tests run sequentially first; if a login endpoint returns a token, it is ' +
|
|
19
|
+
'automatically captured and injected as Bearer token for all subsequent protected endpoints — ' +
|
|
20
|
+
'no manual token handling needed. ' +
|
|
21
|
+
'For APIs that require credentials, provide the "credentials" object: ' +
|
|
22
|
+
'use bearerToken for a pre-existing JWT, apiKey for API key auth, ' +
|
|
23
|
+
'username+password for Basic/form login, or clientId+clientSecret for OAuth2. ' +
|
|
24
|
+
'The auth type is auto-detected from the OpenAPI spec security schemes.';
|
|
25
|
+
inputSchema = {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
specPath: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'Path to the OpenAPI spec file (YAML or JSON). ' +
|
|
31
|
+
'Required for schema validation and OAuth2 token URL auto-discovery. ' +
|
|
32
|
+
'Example: "/project/api/openapi.yaml".'
|
|
33
|
+
},
|
|
34
|
+
baseUrl: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Base URL of the live API to test. ' +
|
|
37
|
+
'Example: "https://api.example.com" or "http://localhost:3000". ' +
|
|
38
|
+
'All test requests are sent to this URL.'
|
|
39
|
+
},
|
|
40
|
+
tests: {
|
|
41
|
+
type: 'array',
|
|
42
|
+
description: 'Array of test cases to execute — pass the "tests" value returned by generate-tests directly here.',
|
|
43
|
+
items: { type: 'object' }
|
|
44
|
+
},
|
|
45
|
+
credentials: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
description: 'API credentials for authenticated endpoints. ' +
|
|
48
|
+
'Provide only the fields that match your auth type — the tool auto-detects which to use. ' +
|
|
49
|
+
'bearerToken: use when you already have a JWT/Bearer token. ' +
|
|
50
|
+
'apiKey: use for API key auth (sent as X-API-Key header). ' +
|
|
51
|
+
'username + password: use for Basic auth or form-based login. ' +
|
|
52
|
+
'clientId + clientSecret: use for OAuth2 client credentials flow. ' +
|
|
53
|
+
'Example for OAuth2: { "clientId": "myapp", "clientSecret": "s3cr3t" }.',
|
|
54
|
+
properties: {
|
|
55
|
+
bearerToken: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
description: 'Pre-existing Bearer/JWT token to use for the Authorization header'
|
|
58
|
+
},
|
|
59
|
+
apiKey: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'API key value (sent as X-API-Key request header)'
|
|
62
|
+
},
|
|
63
|
+
username: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Username for Basic auth or OAuth2 password flow'
|
|
66
|
+
},
|
|
67
|
+
password: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
description: 'Password for Basic auth or OAuth2 password flow'
|
|
70
|
+
},
|
|
71
|
+
clientId: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'OAuth2 client ID for client credentials flow'
|
|
74
|
+
},
|
|
75
|
+
clientSecret: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'OAuth2 client secret for client credentials flow'
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
authToken: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Bearer token shortcut (deprecated — use credentials.bearerToken instead).'
|
|
84
|
+
},
|
|
85
|
+
testData: {
|
|
86
|
+
type: 'object',
|
|
87
|
+
description: 'Domain-specific values to inject into tests at runtime. ' +
|
|
88
|
+
'Use the same keys as in generate-tests. ' +
|
|
89
|
+
'Example: { "userId": "123", "productId": "prod_abc" }.',
|
|
90
|
+
additionalProperties: true
|
|
91
|
+
},
|
|
92
|
+
parallel: {
|
|
93
|
+
type: 'boolean',
|
|
94
|
+
description: 'Run non-happy-path tests in parallel batches for speed (default: false). ' +
|
|
95
|
+
'Happy-path tests always run sequentially for automatic token detection.'
|
|
96
|
+
},
|
|
97
|
+
timeout: {
|
|
98
|
+
type: 'number',
|
|
99
|
+
description: 'Per-request timeout in milliseconds (default: 5000). ' +
|
|
100
|
+
'Increase for slow APIs. Example: 10000 for 10 seconds.'
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
required: ['baseUrl']
|
|
104
|
+
};
|
|
105
|
+
constructor(specService) {
|
|
106
|
+
super();
|
|
107
|
+
this.specService = specService;
|
|
108
|
+
}
|
|
109
|
+
async handle(args) {
|
|
110
|
+
const params = args;
|
|
111
|
+
this.log.info('Running tests', {
|
|
112
|
+
baseUrl: params.baseUrl,
|
|
113
|
+
testCount: params.tests?.length || 0,
|
|
114
|
+
hasAuth: !!(params.authToken || params.credentials),
|
|
115
|
+
parallel: params.parallel || false
|
|
116
|
+
});
|
|
117
|
+
try {
|
|
118
|
+
// Get tests to run
|
|
119
|
+
const tests = params.tests || [];
|
|
120
|
+
if (tests.length === 0) {
|
|
121
|
+
throw new Error('No tests provided. Use generate-tests first or provide tests array.');
|
|
122
|
+
}
|
|
123
|
+
// Parse spec first (needed for both endpoint extraction and OAuth2 tokenUrl discovery)
|
|
124
|
+
let endpoints = [];
|
|
125
|
+
let specDoc = null;
|
|
126
|
+
if (params.specPath) {
|
|
127
|
+
specDoc = await this.specService.parseSpec(params.specPath);
|
|
128
|
+
endpoints = await this.specService.extractEndpoints(specDoc);
|
|
129
|
+
}
|
|
130
|
+
// Build minimal environment for TestRunner
|
|
131
|
+
const environment = {
|
|
132
|
+
name: 'test',
|
|
133
|
+
baseUrl: params.baseUrl,
|
|
134
|
+
timeout: params.timeout || 5000,
|
|
135
|
+
auth: buildAuthConfig(params.credentials, params.authToken, specDoc),
|
|
136
|
+
};
|
|
137
|
+
// Run tests
|
|
138
|
+
const runner = new TestRunner(environment);
|
|
139
|
+
const runResult = await runner.runTests(tests, endpoints, {
|
|
140
|
+
parallel: params.parallel ? 5 : 1
|
|
141
|
+
});
|
|
142
|
+
const results = runResult.results;
|
|
143
|
+
const total = results.length;
|
|
144
|
+
const passed = results.filter(r => r.status === 'passed').length;
|
|
145
|
+
const failed = results.filter(r => r.status === 'failed').length;
|
|
146
|
+
this.log.info('Tests completed', { total, passed, failed });
|
|
147
|
+
return this.formatResponse({
|
|
148
|
+
success: true,
|
|
149
|
+
results,
|
|
150
|
+
summary: {
|
|
151
|
+
total,
|
|
152
|
+
passed,
|
|
153
|
+
failed,
|
|
154
|
+
passRate: total > 0
|
|
155
|
+
? `${((passed / total) * 100).toFixed(2)}%`
|
|
156
|
+
: '0.00%',
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return this.formatError(error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Builds an AuthConfig from flat credentials and/or a legacy authToken.
|
|
167
|
+
* Auth type is auto-detected from the available credential fields.
|
|
168
|
+
* For OAuth2, the tokenUrl is extracted from the OpenAPI spec when available.
|
|
169
|
+
*/
|
|
170
|
+
function buildAuthConfig(credentials, authToken, specDoc) {
|
|
171
|
+
// 1. Deprecated authToken shortcut (no credentials object)
|
|
172
|
+
if (authToken && !credentials) {
|
|
173
|
+
return { type: 'bearer', token: authToken };
|
|
174
|
+
}
|
|
175
|
+
if (!credentials)
|
|
176
|
+
return undefined;
|
|
177
|
+
// 2. Explicit bearer token inside credentials (highest priority)
|
|
178
|
+
if (credentials.bearerToken) {
|
|
179
|
+
return { type: 'bearer', token: credentials.bearerToken };
|
|
180
|
+
}
|
|
181
|
+
// 3. Legacy authToken alongside credentials
|
|
182
|
+
if (authToken) {
|
|
183
|
+
return { type: 'bearer', token: authToken };
|
|
184
|
+
}
|
|
185
|
+
// 4. OAuth2: needs clientId + clientSecret; tokenUrl extracted from spec when available
|
|
186
|
+
if (credentials.clientId && credentials.clientSecret) {
|
|
187
|
+
const tokenUrl = extractOAuth2TokenUrl(specDoc) || '';
|
|
188
|
+
return {
|
|
189
|
+
type: 'oauth2',
|
|
190
|
+
oauth2: {
|
|
191
|
+
tokenUrl,
|
|
192
|
+
clientId: credentials.clientId,
|
|
193
|
+
clientSecret: credentials.clientSecret,
|
|
194
|
+
...(credentials.username && { username: credentials.username }),
|
|
195
|
+
...(credentials.password && { password: credentials.password }),
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// 5. API key → default header name X-API-Key
|
|
200
|
+
if (credentials.apiKey) {
|
|
201
|
+
return {
|
|
202
|
+
type: 'api-key',
|
|
203
|
+
apiKey: { name: 'X-API-Key', in: 'header', value: credentials.apiKey }
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// 6. Basic auth (username + password without OAuth2 client credentials)
|
|
207
|
+
if (credentials.username && credentials.password) {
|
|
208
|
+
return {
|
|
209
|
+
type: 'basic',
|
|
210
|
+
basic: { username: credentials.username, password: credentials.password }
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Attempts to extract an OAuth2 tokenUrl from the OpenAPI spec's security schemes.
|
|
217
|
+
* Returns the first tokenUrl found across all OAuth2 flows, or undefined.
|
|
218
|
+
*/
|
|
219
|
+
function extractOAuth2TokenUrl(specDoc) {
|
|
220
|
+
const schemes = specDoc?.components?.securitySchemes;
|
|
221
|
+
if (!schemes)
|
|
222
|
+
return undefined;
|
|
223
|
+
for (const scheme of Object.values(schemes)) {
|
|
224
|
+
if (scheme.type === 'oauth2' && scheme.flows) {
|
|
225
|
+
for (const flow of Object.values(scheme.flows)) {
|
|
226
|
+
if (flow?.tokenUrl)
|
|
227
|
+
return flow.tokenUrl;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=run-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.js","sourceRoot":"","sources":["../../../src/mcp/handlers/run-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler types - Common interfaces for MCP tool handlers
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract that all tool handlers must implement.
|
|
5
|
+
*
|
|
6
|
+
* @module mcp/handlers/types
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Response from a tool handler
|
|
10
|
+
*/
|
|
11
|
+
export interface ToolResponse {
|
|
12
|
+
/**
|
|
13
|
+
* Content blocks to return to the MCP client
|
|
14
|
+
*/
|
|
15
|
+
content: Array<{
|
|
16
|
+
/**
|
|
17
|
+
* Content type (usually 'text')
|
|
18
|
+
*/
|
|
19
|
+
type: string;
|
|
20
|
+
/**
|
|
21
|
+
* Content text/data
|
|
22
|
+
*/
|
|
23
|
+
text: string;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Optional error flag
|
|
27
|
+
*/
|
|
28
|
+
isError?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Tool handler interface
|
|
32
|
+
*
|
|
33
|
+
* All MCP tool handlers must implement this interface.
|
|
34
|
+
*/
|
|
35
|
+
export interface ToolHandler {
|
|
36
|
+
/**
|
|
37
|
+
* Tool name (matches MCP tool name)
|
|
38
|
+
*/
|
|
39
|
+
readonly name: string;
|
|
40
|
+
/**
|
|
41
|
+
* Tool description (shown to MCP clients)
|
|
42
|
+
*/
|
|
43
|
+
readonly description: string;
|
|
44
|
+
/**
|
|
45
|
+
* JSON Schema for tool input validation
|
|
46
|
+
*/
|
|
47
|
+
readonly inputSchema: {
|
|
48
|
+
type: string;
|
|
49
|
+
properties?: Record<string, unknown>;
|
|
50
|
+
required?: string[];
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Handles the tool invocation
|
|
55
|
+
*
|
|
56
|
+
* @param args - Tool arguments (validated against inputSchema)
|
|
57
|
+
* @returns Tool response
|
|
58
|
+
*/
|
|
59
|
+
handle(args: unknown): Promise<ToolResponse>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC;QACb;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;QAEb;;WAEG;QACH,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IAEH;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IAEF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp/handlers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Implementation
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server for OpenAPI contract testing.
|
|
5
|
+
* Provides tools for test generation, execution, and contract validation
|
|
6
|
+
* via STDIO transport for MCP client integration.
|
|
7
|
+
*
|
|
8
|
+
* This server uses a handler registry pattern for clean separation of concerns.
|
|
9
|
+
*
|
|
10
|
+
* @module mcp/server
|
|
11
|
+
*/
|
|
12
|
+
import { type ToolHandler } from './handlers/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* OpenAPI Contract Tester MCP Server
|
|
15
|
+
*
|
|
16
|
+
* Provides 5 essential tools for API testing:
|
|
17
|
+
* 1. generate-tests - Generate intelligent test suites from OpenAPI specs (AI-powered)
|
|
18
|
+
* 2. run-tests - Execute test suites against APIs with auto-repair
|
|
19
|
+
* 3. export-results - Export test results with AI analysis and coverage
|
|
20
|
+
* 4. compare-sources - Compare OpenAPI vs Code vs PRD
|
|
21
|
+
* 5. export-to-postman - Export tests as Postman Collection v2.1 (Newman compatible)
|
|
22
|
+
*
|
|
23
|
+
* Architecture:
|
|
24
|
+
* - Uses Strategy pattern for tool handlers
|
|
25
|
+
* - Each handler implements ToolHandler interface
|
|
26
|
+
* - Services provide shared functionality (spec parsing, LLM calls, reporting, file I/O)
|
|
27
|
+
* - Handler registry enables clean dispatch and extensibility
|
|
28
|
+
*/
|
|
29
|
+
export declare class OpenAPIContractTesterServer {
|
|
30
|
+
private server;
|
|
31
|
+
private handlers;
|
|
32
|
+
private specService;
|
|
33
|
+
private reportService;
|
|
34
|
+
private fileService;
|
|
35
|
+
private postmanService;
|
|
36
|
+
constructor();
|
|
37
|
+
/**
|
|
38
|
+
* Registers all tool handlers
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
private registerHandlers;
|
|
42
|
+
/**
|
|
43
|
+
* Sets up MCP request handlers
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
private setupHandlers;
|
|
47
|
+
/**
|
|
48
|
+
* Starts the MCP server
|
|
49
|
+
*/
|
|
50
|
+
run(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Stops the MCP server gracefully
|
|
53
|
+
*/
|
|
54
|
+
stop(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Gets the list of registered handlers (for testing/debugging)
|
|
57
|
+
*/
|
|
58
|
+
getHandlers(): ReadonlyMap<string, ToolHandler>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates and starts the MCP server
|
|
62
|
+
*/
|
|
63
|
+
export declare function startMCPServer(): Promise<void>;
|
|
64
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAQ7B;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;IAG3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;;IAmCvC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqErB;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB1B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;OAEG;IACH,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC;CAGhD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD"}
|