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