@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,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoint Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts and resolves endpoint information from OpenAPI specifications.
|
|
5
|
+
*
|
|
6
|
+
* @module parsers/endpoint-extractor
|
|
7
|
+
*/
|
|
8
|
+
import { OpenAPIError, ErrorCode } from '../utils/errors.js';
|
|
9
|
+
import { createLogger } from '../utils/logger.js';
|
|
10
|
+
const log = createLogger('endpoint-extractor');
|
|
11
|
+
/**
|
|
12
|
+
* Extracts all endpoints from an OpenAPI specification
|
|
13
|
+
*
|
|
14
|
+
* @param spec - Parsed OpenAPI specification
|
|
15
|
+
* @returns Array of parsed endpoints with their metadata
|
|
16
|
+
*/
|
|
17
|
+
export function extractEndpoints(spec) {
|
|
18
|
+
log.debug('Extracting endpoints from OpenAPI specification');
|
|
19
|
+
if (!spec.paths || Object.keys(spec.paths).length === 0) {
|
|
20
|
+
throw new OpenAPIError(ErrorCode.OPENAPI_MISSING_PATHS, 'OpenAPI specification has no paths defined', 'The specification does not define any API endpoints. Please add path definitions.', { title: spec.info?.title });
|
|
21
|
+
}
|
|
22
|
+
const endpoints = [];
|
|
23
|
+
for (const [path, pathItem] of Object.entries(spec.paths || {})) {
|
|
24
|
+
if (!pathItem)
|
|
25
|
+
continue;
|
|
26
|
+
const methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
|
|
27
|
+
for (const method of methods) {
|
|
28
|
+
const methodKey = method.toLowerCase();
|
|
29
|
+
const operation = pathItem[methodKey];
|
|
30
|
+
if (!operation)
|
|
31
|
+
continue;
|
|
32
|
+
const pathParams = [];
|
|
33
|
+
const queryParams = [];
|
|
34
|
+
const headerParams = [];
|
|
35
|
+
const allParams = [
|
|
36
|
+
...(pathItem.parameters || []),
|
|
37
|
+
...(operation.parameters || [])
|
|
38
|
+
];
|
|
39
|
+
for (const param of allParams) {
|
|
40
|
+
if ('$ref' in param)
|
|
41
|
+
continue;
|
|
42
|
+
const paramObj = param;
|
|
43
|
+
switch (paramObj.in) {
|
|
44
|
+
case 'path':
|
|
45
|
+
pathParams.push(paramObj);
|
|
46
|
+
break;
|
|
47
|
+
case 'query':
|
|
48
|
+
queryParams.push(paramObj);
|
|
49
|
+
break;
|
|
50
|
+
case 'header':
|
|
51
|
+
headerParams.push(paramObj);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Extract request body schema (content-type agnostic)
|
|
56
|
+
let requestBody;
|
|
57
|
+
let requestContentType;
|
|
58
|
+
if (operation.requestBody && !('$ref' in operation.requestBody)) {
|
|
59
|
+
const requestBodyObj = operation.requestBody;
|
|
60
|
+
const contentTypes = Object.keys(requestBodyObj.content || {});
|
|
61
|
+
const priorityOrder = [
|
|
62
|
+
'application/json',
|
|
63
|
+
'application/x-www-form-urlencoded',
|
|
64
|
+
'multipart/form-data'
|
|
65
|
+
];
|
|
66
|
+
requestContentType = priorityOrder.find(ct => contentTypes.includes(ct)) || contentTypes[0];
|
|
67
|
+
if (requestContentType && requestBodyObj.content?.[requestContentType]) {
|
|
68
|
+
const content = requestBodyObj.content[requestContentType];
|
|
69
|
+
if (content.schema && !('$ref' in content.schema)) {
|
|
70
|
+
requestBody = content.schema;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Extract response schemas by status code (content-type agnostic)
|
|
75
|
+
const responses = {};
|
|
76
|
+
if (operation.responses) {
|
|
77
|
+
for (const [statusCode, response] of Object.entries(operation.responses)) {
|
|
78
|
+
if ('$ref' in response)
|
|
79
|
+
continue;
|
|
80
|
+
const responseObj = response;
|
|
81
|
+
const responseContentTypes = Object.keys(responseObj.content || {});
|
|
82
|
+
const responsePriorityOrder = [
|
|
83
|
+
'application/json',
|
|
84
|
+
'application/xml',
|
|
85
|
+
'text/plain',
|
|
86
|
+
'text/html'
|
|
87
|
+
];
|
|
88
|
+
const responseContentType = responsePriorityOrder.find(ct => responseContentTypes.includes(ct)) || responseContentTypes[0];
|
|
89
|
+
if (responseContentType && responseObj.content?.[responseContentType]) {
|
|
90
|
+
const content = responseObj.content[responseContentType];
|
|
91
|
+
if (content.schema && !('$ref' in content.schema)) {
|
|
92
|
+
// Skip 'default' — it represents an unspecified status range and
|
|
93
|
+
// cannot be mapped to a concrete code without overwriting real schemas
|
|
94
|
+
if (statusCode === 'default')
|
|
95
|
+
continue;
|
|
96
|
+
const status = parseInt(statusCode, 10);
|
|
97
|
+
responses[status] = content.schema;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const security = operation.security || spec.security;
|
|
103
|
+
const securitySchemes = extractSecuritySchemes(spec);
|
|
104
|
+
const resolvedSecurity = resolveSecurityRequirements(security, securitySchemes);
|
|
105
|
+
const requiresAuth = !(Array.isArray(security) && security.length === 0);
|
|
106
|
+
endpoints.push({
|
|
107
|
+
method,
|
|
108
|
+
path,
|
|
109
|
+
operation,
|
|
110
|
+
pathParams,
|
|
111
|
+
queryParams,
|
|
112
|
+
headerParams,
|
|
113
|
+
requestBody,
|
|
114
|
+
requestContentType,
|
|
115
|
+
responses,
|
|
116
|
+
security,
|
|
117
|
+
securitySchemes: resolvedSecurity,
|
|
118
|
+
requiresAuth
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
log.info('Successfully extracted endpoints', {
|
|
123
|
+
count: endpoints.length,
|
|
124
|
+
paths: Object.keys(spec.paths).length
|
|
125
|
+
});
|
|
126
|
+
return endpoints;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Extracts security schemes from an OpenAPI specification
|
|
130
|
+
*
|
|
131
|
+
* @param spec - Parsed OpenAPI specification
|
|
132
|
+
* @returns Map of security scheme name to security scheme object
|
|
133
|
+
*/
|
|
134
|
+
export function extractSecuritySchemes(spec) {
|
|
135
|
+
return spec.components?.securitySchemes || {};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Resolves security requirements to actual security scheme objects
|
|
139
|
+
*
|
|
140
|
+
* @param security - Security requirements array from operation or global
|
|
141
|
+
* @param schemes - Available security schemes from spec
|
|
142
|
+
* @returns Array of resolved security scheme objects
|
|
143
|
+
*/
|
|
144
|
+
export function resolveSecurityRequirements(security, schemes) {
|
|
145
|
+
if (!security || security.length === 0) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
const resolved = [];
|
|
149
|
+
for (const requirement of security) {
|
|
150
|
+
const schemeNames = Object.keys(requirement);
|
|
151
|
+
for (const schemeName of schemeNames) {
|
|
152
|
+
const scheme = schemes[schemeName];
|
|
153
|
+
if (scheme) {
|
|
154
|
+
resolved.push(scheme);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return resolved;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=endpoint-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-extractor.js","sourceRoot":"","sources":["../../src/parsers/endpoint-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI Specification Parser
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to parse, validate, and extract information
|
|
5
|
+
* from OpenAPI 3.x and Swagger 2.0 specification files (YAML or JSON format).
|
|
6
|
+
* Swagger 2.0 specs are automatically converted to OpenAPI 3.0.
|
|
7
|
+
*
|
|
8
|
+
* @module parsers/openapi-parser
|
|
9
|
+
*/
|
|
10
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
11
|
+
import type { HttpMethod, ParsedEndpoint } from '../types/index.js';
|
|
12
|
+
export { extractEndpoints, extractSecuritySchemes, resolveSecurityRequirements } from './endpoint-extractor.js';
|
|
13
|
+
export { inferAuthFromSpec } from './visitors/auth-visitor.js';
|
|
14
|
+
/**
|
|
15
|
+
* Parses and validates an OpenAPI specification file
|
|
16
|
+
*
|
|
17
|
+
* @param specPath - Path or URL to the OpenAPI specification file (YAML or JSON)
|
|
18
|
+
* @returns Parsed and dereferenced OpenAPI specification
|
|
19
|
+
* @throws {Error} If the specification is invalid or cannot be parsed
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
24
|
+
* console.log(spec.info.title); // "My API"
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseOpenAPISpec(specPath: string): Promise<OpenAPIV3.Document>;
|
|
28
|
+
/**
|
|
29
|
+
* Validates an OpenAPI specification file without dereferencing
|
|
30
|
+
*
|
|
31
|
+
* This is faster than full parsing and useful for quick validation checks.
|
|
32
|
+
*
|
|
33
|
+
* @param specPath - Path or URL to the OpenAPI specification file
|
|
34
|
+
* @returns Validation result with any errors found
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const result = await validateOpenAPISpec('./api/openapi.yml');
|
|
39
|
+
* if (result.valid) {
|
|
40
|
+
* console.log('Spec is valid!');
|
|
41
|
+
* } else {
|
|
42
|
+
* console.error('Validation errors:', result.errors);
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateOpenAPISpec(specPath: string): Promise<{
|
|
47
|
+
valid: boolean;
|
|
48
|
+
errors: string[];
|
|
49
|
+
warnings: string[];
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Gets the base URL for the API from the servers section
|
|
53
|
+
*
|
|
54
|
+
* @param spec - Parsed OpenAPI specification
|
|
55
|
+
* @param environmentName - Optional environment name to filter servers
|
|
56
|
+
* @returns Base URL for the API, or undefined if no servers defined
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
61
|
+
* const baseUrl = getBaseUrl(spec);
|
|
62
|
+
* console.log('API base URL:', baseUrl); // "https://api.example.com/v1"
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function getBaseUrl(spec: OpenAPIV3.Document, environmentName?: string): string | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Checks if an endpoint requires authentication
|
|
68
|
+
*
|
|
69
|
+
* @param endpoint - Parsed endpoint to check
|
|
70
|
+
* @param spec - OpenAPI specification (for global security)
|
|
71
|
+
* @returns True if the endpoint requires authentication
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
76
|
+
* const endpoints = extractEndpoints(spec);
|
|
77
|
+
* const authRequired = isAuthRequired(endpoints[0], spec);
|
|
78
|
+
* console.log('Auth required:', authRequired);
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function isAuthRequired(endpoint: ParsedEndpoint, spec: OpenAPIV3.Document): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Extracts all unique tags from the specification
|
|
84
|
+
*
|
|
85
|
+
* @param spec - Parsed OpenAPI specification
|
|
86
|
+
* @returns Array of unique tag names
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
91
|
+
* const tags = extractTags(spec);
|
|
92
|
+
* console.log('API tags:', tags); // ["users", "orders", "products"]
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function extractTags(spec: OpenAPIV3.Document): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Gets a human-readable summary of the OpenAPI specification
|
|
98
|
+
*
|
|
99
|
+
* @param spec - Parsed OpenAPI specification
|
|
100
|
+
* @returns Summary object with key information
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
105
|
+
* const summary = getSpecSummary(spec);
|
|
106
|
+
* console.log(summary.title); // "My API"
|
|
107
|
+
* console.log(summary.totalEndpoints); // 25
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare function getSpecSummary(spec: OpenAPIV3.Document): {
|
|
111
|
+
title: string;
|
|
112
|
+
version: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
totalEndpoints: number;
|
|
115
|
+
endpointsByMethod: Record<HttpMethod, number>;
|
|
116
|
+
tags: string[];
|
|
117
|
+
hasAuthentication: boolean;
|
|
118
|
+
servers: string[];
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=openapi-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/openapi-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQpE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAsFpF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAeD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBjG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAQ1F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,MAAM,EAAE,CA2B9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CA2BA"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI Specification Parser
|
|
3
|
+
*
|
|
4
|
+
* This module provides functionality to parse, validate, and extract information
|
|
5
|
+
* from OpenAPI 3.x and Swagger 2.0 specification files (YAML or JSON format).
|
|
6
|
+
* Swagger 2.0 specs are automatically converted to OpenAPI 3.0.
|
|
7
|
+
*
|
|
8
|
+
* @module parsers/openapi-parser
|
|
9
|
+
*/
|
|
10
|
+
import SwaggerParser from '@apidevtools/swagger-parser';
|
|
11
|
+
// @ts-ignore - swagger2openapi doesn't have type definitions
|
|
12
|
+
import * as swagger2openapi from 'swagger2openapi';
|
|
13
|
+
import { OpenAPIError, ErrorCode } from '../utils/errors.js';
|
|
14
|
+
import { createLogger } from '../utils/logger.js';
|
|
15
|
+
import { extractEndpoints } from './endpoint-extractor.js';
|
|
16
|
+
const log = createLogger('openapi-parser');
|
|
17
|
+
// Re-export from extracted modules for backward compatibility
|
|
18
|
+
export { extractEndpoints, extractSecuritySchemes, resolveSecurityRequirements } from './endpoint-extractor.js';
|
|
19
|
+
export { inferAuthFromSpec } from './visitors/auth-visitor.js';
|
|
20
|
+
/**
|
|
21
|
+
* Parses and validates an OpenAPI specification file
|
|
22
|
+
*
|
|
23
|
+
* @param specPath - Path or URL to the OpenAPI specification file (YAML or JSON)
|
|
24
|
+
* @returns Parsed and dereferenced OpenAPI specification
|
|
25
|
+
* @throws {Error} If the specification is invalid or cannot be parsed
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
30
|
+
* console.log(spec.info.title); // "My API"
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export async function parseOpenAPISpec(specPath) {
|
|
34
|
+
log.debug('Parsing OpenAPI specification', { specPath });
|
|
35
|
+
try {
|
|
36
|
+
// First, bundle without dereferencing to detect version
|
|
37
|
+
const bundled = await SwaggerParser.bundle(specPath);
|
|
38
|
+
const apiAny = bundled;
|
|
39
|
+
// Detect spec version
|
|
40
|
+
const isSwagger2 = apiAny.swagger?.startsWith('2.');
|
|
41
|
+
const isOpenAPI3 = apiAny.openapi?.startsWith('3.');
|
|
42
|
+
if (!isSwagger2 && !isOpenAPI3) {
|
|
43
|
+
throw new OpenAPIError(ErrorCode.OPENAPI_INVALID_SPEC, 'Invalid API specification: missing openapi or swagger version field', 'The specification file is not a valid OpenAPI 3.x or Swagger 2.0 document. Please check the file format.', { specPath });
|
|
44
|
+
}
|
|
45
|
+
let openapi3Spec;
|
|
46
|
+
if (isSwagger2) {
|
|
47
|
+
// Convert Swagger 2.0 to OpenAPI 3.0 automatically
|
|
48
|
+
log.info('Detected Swagger 2.0 specification, converting to OpenAPI 3.0...', {
|
|
49
|
+
specPath,
|
|
50
|
+
swaggerVersion: apiAny.swagger,
|
|
51
|
+
title: apiAny.info?.title
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
const conversionResult = await swagger2openapi.convertObj(bundled, {
|
|
55
|
+
patch: true, // Auto-fix common issues
|
|
56
|
+
warnOnly: true, // Don't fail on warnings
|
|
57
|
+
direct: true, // Return object directly
|
|
58
|
+
});
|
|
59
|
+
openapi3Spec = conversionResult.openapi;
|
|
60
|
+
log.info('Successfully converted Swagger 2.0 to OpenAPI 3.0', {
|
|
61
|
+
specPath,
|
|
62
|
+
originalVersion: apiAny.swagger,
|
|
63
|
+
convertedVersion: openapi3Spec.openapi
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (conversionError) {
|
|
67
|
+
throw new OpenAPIError(ErrorCode.OPENAPI_PARSE_ERROR, `Failed to convert Swagger 2.0 to OpenAPI 3.0: ${conversionError instanceof Error ? conversionError.message : String(conversionError)}`, 'The Swagger 2.0 specification could not be converted to OpenAPI 3.0. Please check the specification for compatibility issues.', { specPath, originalError: conversionError instanceof Error ? conversionError.message : String(conversionError) });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
openapi3Spec = bundled;
|
|
72
|
+
}
|
|
73
|
+
// Now dereference the OpenAPI 3.x spec (resolve all $ref references)
|
|
74
|
+
const dereferenced = await SwaggerParser.dereference(openapi3Spec);
|
|
75
|
+
const version = dereferenced.openapi;
|
|
76
|
+
log.info('Successfully parsed OpenAPI specification', {
|
|
77
|
+
specPath,
|
|
78
|
+
version,
|
|
79
|
+
wasConverted: isSwagger2,
|
|
80
|
+
title: dereferenced.info?.title
|
|
81
|
+
});
|
|
82
|
+
return dereferenced;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// If already an OpenAPIError, rethrow
|
|
86
|
+
if (error instanceof OpenAPIError) {
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
// Wrap other errors
|
|
90
|
+
log.error('Failed to parse OpenAPI specification', { specPath, error });
|
|
91
|
+
throw new OpenAPIError(ErrorCode.OPENAPI_PARSE_ERROR, error instanceof Error ? error.message : String(error), 'Failed to parse the OpenAPI specification. Please check that the file exists and is valid YAML/JSON.', { specPath, originalError: error instanceof Error ? error.message : String(error) });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Validates an OpenAPI specification file without dereferencing
|
|
96
|
+
*
|
|
97
|
+
* This is faster than full parsing and useful for quick validation checks.
|
|
98
|
+
*
|
|
99
|
+
* @param specPath - Path or URL to the OpenAPI specification file
|
|
100
|
+
* @returns Validation result with any errors found
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const result = await validateOpenAPISpec('./api/openapi.yml');
|
|
105
|
+
* if (result.valid) {
|
|
106
|
+
* console.log('Spec is valid!');
|
|
107
|
+
* } else {
|
|
108
|
+
* console.error('Validation errors:', result.errors);
|
|
109
|
+
* }
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export async function validateOpenAPISpec(specPath) {
|
|
113
|
+
const errors = [];
|
|
114
|
+
const warnings = [];
|
|
115
|
+
try {
|
|
116
|
+
await SwaggerParser.validate(specPath);
|
|
117
|
+
return { valid: true, errors, warnings };
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof Error) {
|
|
121
|
+
errors.push(error.message);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
errors.push('Unknown validation error');
|
|
125
|
+
}
|
|
126
|
+
return { valid: false, errors, warnings };
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Gets the base URL for the API from the servers section
|
|
131
|
+
*
|
|
132
|
+
* @param spec - Parsed OpenAPI specification
|
|
133
|
+
* @param environmentName - Optional environment name to filter servers
|
|
134
|
+
* @returns Base URL for the API, or undefined if no servers defined
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
139
|
+
* const baseUrl = getBaseUrl(spec);
|
|
140
|
+
* console.log('API base URL:', baseUrl); // "https://api.example.com/v1"
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export function getBaseUrl(spec, environmentName) {
|
|
144
|
+
if (!spec.servers || spec.servers.length === 0) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
// If environment name provided, try to find matching server
|
|
148
|
+
if (environmentName) {
|
|
149
|
+
const server = spec.servers.find(s => s.description?.toLowerCase().includes(environmentName.toLowerCase()));
|
|
150
|
+
if (server) {
|
|
151
|
+
return server.url;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Return first server URL
|
|
155
|
+
return spec.servers[0].url;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Checks if an endpoint requires authentication
|
|
159
|
+
*
|
|
160
|
+
* @param endpoint - Parsed endpoint to check
|
|
161
|
+
* @param spec - OpenAPI specification (for global security)
|
|
162
|
+
* @returns True if the endpoint requires authentication
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
167
|
+
* const endpoints = extractEndpoints(spec);
|
|
168
|
+
* const authRequired = isAuthRequired(endpoints[0], spec);
|
|
169
|
+
* console.log('Auth required:', authRequired);
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export function isAuthRequired(endpoint, spec) {
|
|
173
|
+
// Check operation-level security
|
|
174
|
+
if (endpoint.operation.security) {
|
|
175
|
+
return endpoint.operation.security.length > 0;
|
|
176
|
+
}
|
|
177
|
+
// Check global security
|
|
178
|
+
return (spec.security?.length || 0) > 0;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Extracts all unique tags from the specification
|
|
182
|
+
*
|
|
183
|
+
* @param spec - Parsed OpenAPI specification
|
|
184
|
+
* @returns Array of unique tag names
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
189
|
+
* const tags = extractTags(spec);
|
|
190
|
+
* console.log('API tags:', tags); // ["users", "orders", "products"]
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
export function extractTags(spec) {
|
|
194
|
+
const tags = new Set();
|
|
195
|
+
// Add tags from the tags section
|
|
196
|
+
if (spec.tags) {
|
|
197
|
+
for (const tag of spec.tags) {
|
|
198
|
+
tags.add(tag.name);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Add tags from operations
|
|
202
|
+
for (const pathItem of Object.values(spec.paths || {})) {
|
|
203
|
+
if (!pathItem)
|
|
204
|
+
continue;
|
|
205
|
+
const methods = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options'];
|
|
206
|
+
for (const method of methods) {
|
|
207
|
+
const operation = pathItem[method];
|
|
208
|
+
if (operation?.tags) {
|
|
209
|
+
for (const tag of operation.tags) {
|
|
210
|
+
tags.add(tag);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return Array.from(tags);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Gets a human-readable summary of the OpenAPI specification
|
|
219
|
+
*
|
|
220
|
+
* @param spec - Parsed OpenAPI specification
|
|
221
|
+
* @returns Summary object with key information
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```typescript
|
|
225
|
+
* const spec = await parseOpenAPISpec('./api/openapi.yml');
|
|
226
|
+
* const summary = getSpecSummary(spec);
|
|
227
|
+
* console.log(summary.title); // "My API"
|
|
228
|
+
* console.log(summary.totalEndpoints); // 25
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
export function getSpecSummary(spec) {
|
|
232
|
+
const endpoints = extractEndpoints(spec);
|
|
233
|
+
const endpointsByMethod = {
|
|
234
|
+
GET: 0,
|
|
235
|
+
POST: 0,
|
|
236
|
+
PUT: 0,
|
|
237
|
+
PATCH: 0,
|
|
238
|
+
DELETE: 0,
|
|
239
|
+
HEAD: 0,
|
|
240
|
+
OPTIONS: 0
|
|
241
|
+
};
|
|
242
|
+
for (const endpoint of endpoints) {
|
|
243
|
+
endpointsByMethod[endpoint.method]++;
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
title: spec.info.title,
|
|
247
|
+
version: spec.info.version,
|
|
248
|
+
description: spec.info.description,
|
|
249
|
+
totalEndpoints: endpoints.length,
|
|
250
|
+
endpointsByMethod,
|
|
251
|
+
tags: extractTags(spec),
|
|
252
|
+
hasAuthentication: (spec.security?.length || 0) > 0 ||
|
|
253
|
+
Object.keys(spec.components?.securitySchemes || {}).length > 0,
|
|
254
|
+
servers: (spec.servers || []).map(s => s.url)
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=openapi-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-parser.js","sourceRoot":"","sources":["../../src/parsers/openapi-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Inference Visitor
|
|
3
|
+
*
|
|
4
|
+
* Infers authentication configuration from OpenAPI security schemes.
|
|
5
|
+
* Implements the Visitor pattern for spec-level auth analysis.
|
|
6
|
+
*
|
|
7
|
+
* @module parsers/visitors/auth-visitor
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenAPIV3 } from 'openapi-types';
|
|
10
|
+
/**
|
|
11
|
+
* Infers authentication configuration from OpenAPI security schemes.
|
|
12
|
+
*
|
|
13
|
+
* Automatically detects OAuth2, Bearer, API Key, and Basic auth from the spec
|
|
14
|
+
* and constructs the appropriate AuthConfig using provided credentials.
|
|
15
|
+
*
|
|
16
|
+
* @param spec - Parsed OpenAPI specification
|
|
17
|
+
* @param credentials - User-provided credentials
|
|
18
|
+
* @returns AuthConfig object or undefined if no auth detected
|
|
19
|
+
*/
|
|
20
|
+
export declare function inferAuthFromSpec(spec: OpenAPIV3.Document, credentials?: {
|
|
21
|
+
clientId?: string;
|
|
22
|
+
clientSecret?: string;
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
username?: string;
|
|
25
|
+
password?: string;
|
|
26
|
+
bearerToken?: string;
|
|
27
|
+
}): any;
|
|
28
|
+
//# sourceMappingURL=auth-visitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-visitor.d.ts","sourceRoot":"","sources":["../../../src/parsers/visitors/auth-visitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,CAAC,QAAQ,EACxB,WAAW,CAAC,EAAE;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,GAAG,CA2GL"}
|