@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,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-Powered Failure Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Takes structured failure data and uses LLM to generate:
|
|
5
|
+
* - Human-readable summary
|
|
6
|
+
* - Actionable recommendations
|
|
7
|
+
* - Pattern detection
|
|
8
|
+
* - Critical issues identification
|
|
9
|
+
*
|
|
10
|
+
* @module analyzers/ai-failure-analyzer
|
|
11
|
+
*/
|
|
12
|
+
import { callLLM } from '../llm/ai-client.js';
|
|
13
|
+
import { createLogger } from '../utils/logger.js';
|
|
14
|
+
const log = createLogger('ai-failure-analyzer');
|
|
15
|
+
/**
|
|
16
|
+
* Analyzes failures using AI to generate actionable insights
|
|
17
|
+
*
|
|
18
|
+
* @param failureAnalysis - Structured failure analysis from heuristic analyzer
|
|
19
|
+
* @returns AI-generated insights and recommendations
|
|
20
|
+
*/
|
|
21
|
+
export async function analyzeFailuresWithAI(failureAnalysis) {
|
|
22
|
+
log.info('Starting AI failure analysis', {
|
|
23
|
+
totalFailures: failureAnalysis.summary.totalFailures
|
|
24
|
+
});
|
|
25
|
+
if (failureAnalysis.summary.totalFailures === 0) {
|
|
26
|
+
return {
|
|
27
|
+
summary: 'No hay fallos que analizar. Todos los tests pasaron exitosamente.',
|
|
28
|
+
recommendations: []
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Build compact prompt for AI
|
|
32
|
+
const prompt = buildAnalysisPrompt(failureAnalysis);
|
|
33
|
+
try {
|
|
34
|
+
const result = await callLLM(prompt, {
|
|
35
|
+
maxTokens: 4096,
|
|
36
|
+
temperature: 0.3
|
|
37
|
+
});
|
|
38
|
+
if (!result.success || !result.text) {
|
|
39
|
+
log.warn('AI analysis failed, returning basic summary');
|
|
40
|
+
return buildFallbackAnalysis(failureAnalysis);
|
|
41
|
+
}
|
|
42
|
+
// Parse AI response
|
|
43
|
+
const aiAnalysis = parseAIResponse(result.text, failureAnalysis);
|
|
44
|
+
log.info('AI analysis complete', {
|
|
45
|
+
recommendationsCount: aiAnalysis.recommendations.length,
|
|
46
|
+
patternsCount: aiAnalysis.patterns?.length || 0
|
|
47
|
+
});
|
|
48
|
+
return aiAnalysis;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
log.error('AI analysis failed', { error });
|
|
52
|
+
return buildFallbackAnalysis(failureAnalysis);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Builds the prompt for AI analysis
|
|
57
|
+
*/
|
|
58
|
+
function buildAnalysisPrompt(analysis) {
|
|
59
|
+
const failureSummary = {
|
|
60
|
+
total: analysis.summary.totalFailures,
|
|
61
|
+
byType: Object.entries(analysis.summary.byType)
|
|
62
|
+
.filter(([_, count]) => count > 0)
|
|
63
|
+
.map(([type, count]) => `${type}: ${count}`),
|
|
64
|
+
bySeverity: analysis.summary.bySeverity,
|
|
65
|
+
topFailures: analysis.failures.slice(0, 10).map(f => ({
|
|
66
|
+
test: f.testCase.name,
|
|
67
|
+
endpoint: `${f.request.method} ${f.request.url}`,
|
|
68
|
+
type: f.failureType,
|
|
69
|
+
expected: f.expected.status,
|
|
70
|
+
actual: f.actual.status,
|
|
71
|
+
error: f.validationErrors?.map(e => e.message).join('; ')
|
|
72
|
+
}))
|
|
73
|
+
};
|
|
74
|
+
return `Analiza estos fallos de tests de API y genera recomendaciones accionables.
|
|
75
|
+
|
|
76
|
+
FALLOS:
|
|
77
|
+
${JSON.stringify(failureSummary, null, 2)}
|
|
78
|
+
|
|
79
|
+
Retorna SOLO JSON en este formato (sin texto adicional):
|
|
80
|
+
{
|
|
81
|
+
"summary": "Resumen ejecutivo en 2-3 oraciones explicando los problemas principales",
|
|
82
|
+
"recommendations": [
|
|
83
|
+
{
|
|
84
|
+
"issue": "Descripción del problema",
|
|
85
|
+
"fix": "Solución específica y accionable",
|
|
86
|
+
"priority": "critical|high|medium|low",
|
|
87
|
+
"autoRepairSuggestion": "Comando o código para reparar automáticamente (opcional)"
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"patterns": [
|
|
91
|
+
{
|
|
92
|
+
"pattern": "Nombre del patrón detectado",
|
|
93
|
+
"occurrences": número,
|
|
94
|
+
"description": "Explicación del patrón",
|
|
95
|
+
"impact": "critical|high|medium|low"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"criticalIssues": [
|
|
99
|
+
{
|
|
100
|
+
"title": "Título del issue crítico",
|
|
101
|
+
"description": "Descripción detallada",
|
|
102
|
+
"affectedEndpoints": ["GET /endpoint1", "POST /endpoint2"]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
IMPORTANTE:
|
|
108
|
+
- El "summary" DEBE ser texto legible, NO un objeto JSON
|
|
109
|
+
- Prioriza recomendaciones accionables sobre análisis genérico
|
|
110
|
+
- Detecta patrones comunes (ej: todos los POST fallan con 401 → problema de auth)
|
|
111
|
+
- Sugiere fixes específicos, no solo "revisar el código"`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Parses AI response into structured analysis
|
|
115
|
+
*/
|
|
116
|
+
function parseAIResponse(text, fallback) {
|
|
117
|
+
try {
|
|
118
|
+
// Extract JSON from response (handle markdown code blocks)
|
|
119
|
+
const jsonMatch = text.match(/```(?:json)?\s*(\{[\s\S]*\})\s*```/) ||
|
|
120
|
+
text.match(/(\{[\s\S]*\})/);
|
|
121
|
+
if (!jsonMatch) {
|
|
122
|
+
log.warn('No JSON found in AI response, using fallback');
|
|
123
|
+
return buildFallbackAnalysis(fallback);
|
|
124
|
+
}
|
|
125
|
+
const parsed = JSON.parse(jsonMatch[1]);
|
|
126
|
+
// Validate summary is a string, not an object
|
|
127
|
+
if (typeof parsed.summary !== 'string') {
|
|
128
|
+
log.warn('AI returned object as summary, converting to string');
|
|
129
|
+
parsed.summary = `Se detectaron ${fallback.summary.totalFailures} fallos: ` +
|
|
130
|
+
`${fallback.summary.bySeverity.critical} críticos, ` +
|
|
131
|
+
`${fallback.summary.bySeverity.high} altos. ` +
|
|
132
|
+
`Los tipos más comunes son: ${Object.entries(fallback.summary.byType)
|
|
133
|
+
.filter(([_, count]) => count > 0)
|
|
134
|
+
.slice(0, 3)
|
|
135
|
+
.map(([type, count]) => `${type} (${count})`)
|
|
136
|
+
.join(', ')}.`;
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
summary: parsed.summary || buildFallbackSummary(fallback),
|
|
140
|
+
recommendations: parsed.recommendations || [],
|
|
141
|
+
patterns: parsed.patterns || [],
|
|
142
|
+
errorExplanations: parsed.errorExplanations || {},
|
|
143
|
+
criticalIssues: parsed.criticalIssues || []
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
log.error('Failed to parse AI response', { error });
|
|
148
|
+
return buildFallbackAnalysis(fallback);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Builds fallback analysis when AI is unavailable
|
|
153
|
+
*/
|
|
154
|
+
function buildFallbackAnalysis(analysis) {
|
|
155
|
+
return {
|
|
156
|
+
summary: buildFallbackSummary(analysis),
|
|
157
|
+
recommendations: buildFallbackRecommendations(analysis),
|
|
158
|
+
patterns: [],
|
|
159
|
+
errorExplanations: {}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Builds fallback summary from structured data
|
|
164
|
+
*/
|
|
165
|
+
function buildFallbackSummary(analysis) {
|
|
166
|
+
const { totalFailures, bySeverity, byType } = analysis.summary;
|
|
167
|
+
const topTypes = Object.entries(byType)
|
|
168
|
+
.filter(([_, count]) => count > 0)
|
|
169
|
+
.sort(([_, a], [__, b]) => b - a)
|
|
170
|
+
.slice(0, 3)
|
|
171
|
+
.map(([type, count]) => `${type} (${count})`)
|
|
172
|
+
.join(', ');
|
|
173
|
+
return `Se detectaron ${totalFailures} test${totalFailures !== 1 ? 's' : ''} fallido${totalFailures !== 1 ? 's' : ''}. ` +
|
|
174
|
+
`Severidad: ${bySeverity.critical} crítico${bySeverity.critical !== 1 ? 's' : ''}, ` +
|
|
175
|
+
`${bySeverity.high} alto${bySeverity.high !== 1 ? 's' : ''}, ` +
|
|
176
|
+
`${bySeverity.medium} medio${bySeverity.medium !== 1 ? 's' : ''}, ` +
|
|
177
|
+
`${bySeverity.low} bajo${bySeverity.low !== 1 ? 's' : ''}. ` +
|
|
178
|
+
`Tipos más comunes: ${topTypes}.`;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Builds fallback recommendations from structured data
|
|
182
|
+
*/
|
|
183
|
+
function buildFallbackRecommendations(analysis) {
|
|
184
|
+
const recommendations = [];
|
|
185
|
+
const { byType } = analysis.summary;
|
|
186
|
+
// Auth failures
|
|
187
|
+
if (byType.auth_failure > 0) {
|
|
188
|
+
recommendations.push({
|
|
189
|
+
issue: `${byType.auth_failure} test${byType.auth_failure !== 1 ? 's' : ''} fallaron por autenticación`,
|
|
190
|
+
fix: 'Verificar que los tokens de autenticación sean válidos y no hayan expirado',
|
|
191
|
+
priority: 'critical'
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
// Status mismatches
|
|
195
|
+
if (byType.status_mismatch > 0) {
|
|
196
|
+
recommendations.push({
|
|
197
|
+
issue: `${byType.status_mismatch} test${byType.status_mismatch !== 1 ? 's' : ''} recibieron status code incorrecto`,
|
|
198
|
+
fix: 'Revisar la lógica del endpoint y validar que los códigos de estado sean correctos según el caso',
|
|
199
|
+
priority: 'high'
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// Connection errors
|
|
203
|
+
if (byType.connection_error > 0) {
|
|
204
|
+
recommendations.push({
|
|
205
|
+
issue: `${byType.connection_error} test${byType.connection_error !== 1 ? 's' : ''} no pudieron conectarse al servidor`,
|
|
206
|
+
fix: 'Verificar que el servidor esté corriendo y accesible en la URL configurada',
|
|
207
|
+
priority: 'critical'
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Schema validation
|
|
211
|
+
if (byType.schema_validation_failed > 0) {
|
|
212
|
+
recommendations.push({
|
|
213
|
+
issue: `${byType.schema_validation_failed} test${byType.schema_validation_failed !== 1 ? 's' : ''} fallaron en validación de schema`,
|
|
214
|
+
fix: 'Revisar que la respuesta del API cumpla con el schema definido en OpenAPI',
|
|
215
|
+
priority: 'medium'
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return recommendations;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=ai-failure-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-failure-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/ai-failure-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comparison Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utility functions for source comparison logic.
|
|
5
|
+
*
|
|
6
|
+
* @module analyzers/comparison-utils
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Calculates priority level for a discrepancy based on endpoint importance.
|
|
10
|
+
*
|
|
11
|
+
* Uses keyword-based heuristics to determine business priority:
|
|
12
|
+
* - critical: auth, payment, login, checkout, order, transaction
|
|
13
|
+
* - high: user, account, profile, admin, subscription
|
|
14
|
+
* - medium: product, item, cart, search, notification
|
|
15
|
+
* - low: debug, test, health, metrics, deprecated
|
|
16
|
+
*
|
|
17
|
+
* @param endpoint - Endpoint path
|
|
18
|
+
* @param severity - Severity level
|
|
19
|
+
* @returns Priority level
|
|
20
|
+
*/
|
|
21
|
+
export declare function calculatePriority(endpoint: string | undefined, severity: 'error' | 'warning' | 'info'): 'critical' | 'high' | 'medium' | 'low';
|
|
22
|
+
/**
|
|
23
|
+
* Creates a normalized key for endpoint comparison
|
|
24
|
+
*
|
|
25
|
+
* @param method - HTTP method
|
|
26
|
+
* @param path - Endpoint path
|
|
27
|
+
* @param normalizeParams - Whether to normalize path parameters
|
|
28
|
+
* @returns Normalized endpoint key
|
|
29
|
+
*/
|
|
30
|
+
export declare function createEndpointKey(method: string, path: string, normalizeParams: boolean): string;
|
|
31
|
+
//# sourceMappingURL=comparison-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-utils.d.ts","sourceRoot":"","sources":["../../src/analyzers/comparison-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GACrC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CA4CxC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,CAWhG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comparison Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared utility functions for source comparison logic.
|
|
5
|
+
*
|
|
6
|
+
* @module analyzers/comparison-utils
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Calculates priority level for a discrepancy based on endpoint importance.
|
|
10
|
+
*
|
|
11
|
+
* Uses keyword-based heuristics to determine business priority:
|
|
12
|
+
* - critical: auth, payment, login, checkout, order, transaction
|
|
13
|
+
* - high: user, account, profile, admin, subscription
|
|
14
|
+
* - medium: product, item, cart, search, notification
|
|
15
|
+
* - low: debug, test, health, metrics, deprecated
|
|
16
|
+
*
|
|
17
|
+
* @param endpoint - Endpoint path
|
|
18
|
+
* @param severity - Severity level
|
|
19
|
+
* @returns Priority level
|
|
20
|
+
*/
|
|
21
|
+
export function calculatePriority(endpoint, severity) {
|
|
22
|
+
if (!endpoint) {
|
|
23
|
+
if (severity === 'error')
|
|
24
|
+
return 'high';
|
|
25
|
+
if (severity === 'warning')
|
|
26
|
+
return 'medium';
|
|
27
|
+
return 'low';
|
|
28
|
+
}
|
|
29
|
+
const path = endpoint.toLowerCase();
|
|
30
|
+
const criticalKeywords = [
|
|
31
|
+
'auth', 'login', 'signin', 'signup', 'register',
|
|
32
|
+
'payment', 'checkout', 'purchase', 'buy',
|
|
33
|
+
'order', 'transaction', 'transfer',
|
|
34
|
+
'password', 'reset', 'verify', 'token'
|
|
35
|
+
];
|
|
36
|
+
const highKeywords = [
|
|
37
|
+
'user', 'account', 'profile', 'settings',
|
|
38
|
+
'admin', 'role', 'permission',
|
|
39
|
+
'subscription', 'billing', 'invoice'
|
|
40
|
+
];
|
|
41
|
+
const mediumKeywords = [
|
|
42
|
+
'product', 'item', 'catalog',
|
|
43
|
+
'cart', 'wishlist',
|
|
44
|
+
'search', 'filter', 'query',
|
|
45
|
+
'notification', 'message', 'email'
|
|
46
|
+
];
|
|
47
|
+
const lowKeywords = [
|
|
48
|
+
'debug', 'test', 'mock',
|
|
49
|
+
'health', 'ping', 'status',
|
|
50
|
+
'metrics', 'analytics', 'log',
|
|
51
|
+
'deprecated', 'legacy', 'old'
|
|
52
|
+
];
|
|
53
|
+
if (criticalKeywords.some(k => path.includes(k)))
|
|
54
|
+
return 'critical';
|
|
55
|
+
if (highKeywords.some(k => path.includes(k)))
|
|
56
|
+
return 'high';
|
|
57
|
+
if (mediumKeywords.some(k => path.includes(k)))
|
|
58
|
+
return 'medium';
|
|
59
|
+
if (lowKeywords.some(k => path.includes(k)))
|
|
60
|
+
return 'low';
|
|
61
|
+
if (severity === 'error')
|
|
62
|
+
return 'high';
|
|
63
|
+
if (severity === 'warning')
|
|
64
|
+
return 'medium';
|
|
65
|
+
return 'low';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a normalized key for endpoint comparison
|
|
69
|
+
*
|
|
70
|
+
* @param method - HTTP method
|
|
71
|
+
* @param path - Endpoint path
|
|
72
|
+
* @param normalizeParams - Whether to normalize path parameters
|
|
73
|
+
* @returns Normalized endpoint key
|
|
74
|
+
*/
|
|
75
|
+
export function createEndpointKey(method, path, normalizeParams) {
|
|
76
|
+
let normalizedPath = path;
|
|
77
|
+
if (normalizeParams) {
|
|
78
|
+
// Normalize path parameters: /users/:id -> /users/{id}
|
|
79
|
+
normalizedPath = path.replace(/:(\w+)/g, '{$1}');
|
|
80
|
+
// Normalize trailing slashes
|
|
81
|
+
normalizedPath = normalizedPath.replace(/\/$/, '');
|
|
82
|
+
}
|
|
83
|
+
return `${method.toUpperCase()} ${normalizedPath}`;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=comparison-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-utils.js","sourceRoot":"","sources":["../../src/analyzers/comparison-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,QAAsC;IAEtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,QAAQ,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEpC,MAAM,gBAAgB,GAAG;QACvB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU;QAC/C,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK;QACxC,OAAO,EAAE,aAAa,EAAE,UAAU;QAClC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;KACvC,CAAC;IAEF,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;QACxC,OAAO,EAAE,MAAM,EAAE,YAAY;QAC7B,cAAc,EAAE,SAAS,EAAE,SAAS;KACrC,CAAC;IAEF,MAAM,cAAc,GAAG;QACrB,SAAS,EAAE,MAAM,EAAE,SAAS;QAC5B,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,QAAQ,EAAE,OAAO;QAC3B,cAAc,EAAE,SAAS,EAAE,OAAO;KACnC,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,MAAM,EAAE,MAAM;QACvB,QAAQ,EAAE,MAAM,EAAE,QAAQ;QAC1B,SAAS,EAAE,WAAW,EAAE,KAAK;QAC7B,YAAY,EAAE,QAAQ,EAAE,KAAK;KAC9B,CAAC;IAEF,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC;IACpE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChE,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1D,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,IAAY,EAAE,eAAwB;IACtF,IAAI,cAAc,GAAG,IAAI,CAAC;IAE1B,IAAI,eAAe,EAAE,CAAC;QACpB,uDAAuD;QACvD,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,6BAA6B;QAC7B,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,cAAc,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Context Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes OpenAPI specifications to determine the type of API
|
|
5
|
+
* (banking, ecommerce, blog, internal, etc.) for contextual test generation.
|
|
6
|
+
*
|
|
7
|
+
* @module analyzers/context-analyzer
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
10
|
+
import type { APIContext } from '../llm/data-generator-ai.js';
|
|
11
|
+
export type { APIContext };
|
|
12
|
+
/**
|
|
13
|
+
* Detects the type of API from the OpenAPI specification
|
|
14
|
+
*
|
|
15
|
+
* @param spec - OpenAPI specification document
|
|
16
|
+
* @returns API context with detected type and settings
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectAPIContext(spec: OpenAPIV3.Document): Promise<APIContext>;
|
|
19
|
+
/**
|
|
20
|
+
* Enriches APIContext with entity types inferred from endpoints
|
|
21
|
+
*
|
|
22
|
+
* Extracts entity names from endpoint paths (e.g., /api/users/{id} → 'users')
|
|
23
|
+
* to help the AI engine understand what domain entities the API deals with.
|
|
24
|
+
*
|
|
25
|
+
* @param context - Base API context to enrich
|
|
26
|
+
* @param endpoints - Array of parsed endpoints
|
|
27
|
+
* @returns Enriched API context with entityTypes populated
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const baseContext = { type: 'banking', domain: 'banking', industry: 'financial', entityTypes: [] };
|
|
32
|
+
* const endpoints = [{ path: '/api/accounts/{id}' }, { path: '/api/transactions' }];
|
|
33
|
+
* const enriched = enrichAPIContext(baseContext, endpoints);
|
|
34
|
+
* // enriched.entityTypes = ['accounts', 'transactions']
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function enrichAPIContext(context: APIContext, endpoints: {
|
|
38
|
+
path: string;
|
|
39
|
+
}[]): APIContext;
|
|
40
|
+
/**
|
|
41
|
+
* Infers the purpose of a specific endpoint
|
|
42
|
+
*
|
|
43
|
+
* @param path - Endpoint path
|
|
44
|
+
* @param method - HTTP method
|
|
45
|
+
* @param operation - OpenAPI operation object
|
|
46
|
+
* @returns Inferred purpose
|
|
47
|
+
*/
|
|
48
|
+
export declare function inferEndpointPurpose(path: string, method: string, operation?: OpenAPIV3.OperationObject): string;
|
|
49
|
+
//# sourceMappingURL=context-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-analyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/context-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D,YAAY,EAAE,UAAU,EAAE,CAAC;AAI3B;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDpF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAC5B,UAAU,CAgCZ;AAwJD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,CAAC,eAAe,GACpC,MAAM,CAsCR"}
|