qa360 2.1.2 → 2.1.4
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/.BETA_TESTING_FEEDBACK.md +256 -0
- package/.claude/settings.local.json +151 -0
- package/.editorconfig +21 -0
- package/.github/CODEOWNERS +23 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
- package/.github/ISSUE_TEMPLATE/feedback_dx.yml +121 -0
- package/.github/dependabot.yml +35 -0
- package/.github/workflows/mcp-dx.yml +106 -0
- package/.github/workflows/release.yml +26 -0
- package/.github/workflows/test.yml +93 -0
- package/.nvmrc +1 -0
- package/.qa360-artifacts/.gitkeep +0 -0
- package/.qa360-artifacts/baselines/.gitkeep +0 -0
- package/.qa360-artifacts/cache/.gitkeep +0 -0
- package/.qa360-artifacts/reports/.gitkeep +0 -0
- package/.qa360-artifacts/screenshots/.gitkeep +0 -0
- package/.qa360-baselines/www_xyqo_ai.baseline.json +33 -0
- package/CHANGELOG.md +234 -0
- package/CODEOWNERS +43 -0
- package/CONTRIBUTING.md +273 -0
- package/NOVICE_USER_GUIDE.md +272 -0
- package/QUICK_START.md +191 -0
- package/README.md +191 -163
- package/adapters/README.md +62 -0
- package/check-branches.sh +32 -0
- package/cli/CHANGELOG.md +84 -0
- package/cli/LICENSE +24 -0
- package/cli/README.md +222 -0
- package/cli/examples/README.md +160 -0
- package/cli/package.json +76 -0
- package/cli/scripts/bundle-for-npm.sh +51 -0
- package/cli/scripts/validate-package.js +116 -0
- package/cli/src/__tests__/commands/doctor.test.ts +97 -0
- package/cli/src/__tests__/index.test.ts +15 -0
- package/cli/src/cli-minimal.ts +44 -0
- package/cli/src/commands/__tests__/crawl.test.ts +412 -0
- package/cli/src/commands/__tests__/doctor-qa360-home.test.ts +156 -0
- package/cli/src/commands/__tests__/e2e-ui-tests.test.ts +494 -0
- package/cli/src/commands/__tests__/e2e.test.ts +187 -0
- package/cli/src/commands/__tests__/flakiness.test.ts +528 -0
- package/cli/src/commands/__tests__/generate.test.ts +507 -0
- package/cli/src/commands/__tests__/history.integration.test.ts +358 -0
- package/cli/src/commands/__tests__/history.test.ts +433 -0
- package/cli/src/commands/__tests__/monitor-realworld.test.ts +199 -0
- package/cli/src/commands/__tests__/monitor.test.ts +81 -0
- package/cli/src/commands/__tests__/ollama.test.ts +529 -0
- package/cli/src/commands/__tests__/repair.test.ts +225 -0
- package/cli/src/commands/__tests__/report.integration.test.ts +167 -0
- package/cli/src/commands/__tests__/report.test.ts +294 -0
- package/cli/src/commands/__tests__/report.vitest.ts +288 -0
- package/cli/src/commands/__tests__/retry.test.ts +78 -0
- package/cli/src/commands/__tests__/run.integration.test.ts +240 -0
- package/cli/src/commands/__tests__/run.test.ts +346 -0
- package/cli/src/commands/__tests__/run.vitest.ts +301 -0
- package/cli/src/commands/__tests__/secrets.test.ts +114 -0
- package/cli/src/commands/__tests__/serve.test.ts +80 -0
- package/cli/src/commands/__tests__/verify.test.ts +103 -0
- package/cli/src/commands/ai.ts +579 -0
- package/cli/src/commands/ask.ts +678 -0
- package/cli/src/commands/coverage.ts +305 -0
- package/cli/src/commands/crawl.ts +155 -0
- package/cli/src/commands/doctor.ts +610 -0
- package/cli/src/commands/examples.ts +248 -0
- package/cli/src/commands/explain.ts +710 -0
- package/cli/src/commands/flakiness.ts +560 -0
- package/cli/src/commands/generate.ts +566 -0
- package/cli/src/commands/history.ts +914 -0
- package/cli/src/commands/init.ts +763 -0
- package/cli/src/commands/monitor.ts +270 -0
- package/cli/src/commands/ollama.ts +337 -0
- package/cli/src/commands/pack.ts +497 -0
- package/cli/src/commands/regression.ts +400 -0
- package/cli/src/commands/repair.ts +356 -0
- package/cli/src/commands/report.ts +463 -0
- package/cli/src/commands/retry.ts +380 -0
- package/cli/src/commands/run.ts +218 -0
- package/cli/src/commands/scan.ts +177 -0
- package/cli/src/commands/secrets.ts +340 -0
- package/cli/src/commands/serve.ts +194 -0
- package/cli/src/commands/slo.ts +387 -0
- package/cli/src/commands/verify-temp-note.md +11 -0
- package/cli/src/commands/verify.ts +322 -0
- package/cli/src/generators/index.ts +6 -0
- package/cli/src/generators/json-reporter.ts +15 -0
- package/cli/src/generators/test-generator.ts +90 -0
- package/cli/src/index.ts +289 -0
- package/cli/src/scanners/dom-scanner.ts +360 -0
- package/cli/src/scanners/index.ts +5 -0
- package/cli/src/types/scan.ts +84 -0
- package/cli/src/utils/config.ts +145 -0
- package/cli/tsconfig.bundle.json +12 -0
- package/cli/tsconfig.json +23 -0
- package/cli/vitest.config.ts +57 -0
- package/core/LICENSE +24 -0
- package/core/README.md +64 -0
- package/core/package.json +81 -0
- package/core/src/__tests__/adapters-contract/adapters-contract.test.md +156 -0
- package/core/src/__tests__/index.test.ts +31 -0
- package/core/src/__tests__/integration/phase3.test.ts +405 -0
- package/core/src/__tests__/pack/validator.test.ts +312 -0
- package/core/src/__tests__/secrets/crypto.test.ts +190 -0
- package/core/src/__tests__/secrets/manager.test.ts +316 -0
- package/core/src/__tests__/security/redactor-phase3.test.ts +233 -0
- package/core/src/__tests__/serve/health-checker.test.ts +155 -0
- package/core/src/__tests__/serve/process-manager.test.ts +213 -0
- package/core/src/__tests__/serve/server.test.ts +103 -0
- package/core/src/__tests__/vault/cas.test.ts +178 -0
- package/core/src/__tests__/vault/vault.test.ts +296 -0
- package/core/src/adapters/__tests__/gitleaks-secrets.test.ts +452 -0
- package/core/src/adapters/__tests__/k6-perf.test.ts +538 -0
- package/core/src/adapters/__tests__/osv-deps.test.ts +471 -0
- package/core/src/adapters/__tests__/playwright-native-api.test.ts +792 -0
- package/core/src/adapters/__tests__/playwright-ui-e2e.test.ts +431 -0
- package/core/src/adapters/__tests__/playwright-ui.test.ts +1073 -0
- package/core/src/adapters/__tests__/semgrep-sast.test.ts +436 -0
- package/core/src/adapters/__tests__/zap-dast.test.ts +453 -0
- package/core/src/adapters/gitleaks-secrets.ts +521 -0
- package/core/src/adapters/k6-perf.ts +479 -0
- package/core/src/adapters/osv-deps.ts +467 -0
- package/core/src/adapters/playwright-native-adapter.ts +472 -0
- package/core/src/adapters/playwright-native-api.ts +619 -0
- package/core/src/adapters/playwright-ui.ts +1088 -0
- package/core/src/adapters/semgrep-sast.ts +410 -0
- package/core/src/adapters/zap-dast.ts +551 -0
- package/core/src/ai/__tests__/deepseek-provider.test.ts +586 -0
- package/core/src/ai/__tests__/ollama-provider.test.ts +641 -0
- package/core/src/ai/anthropic-provider.ts +248 -0
- package/core/src/ai/deepseek-provider.ts +301 -0
- package/core/src/ai/index.ts +87 -0
- package/core/src/ai/llm-client.ts +52 -0
- package/core/src/ai/mock-provider.ts +146 -0
- package/core/src/ai/ollama-provider.ts +255 -0
- package/core/src/ai/openai-provider.ts +226 -0
- package/core/src/ai/provider-factory.ts +408 -0
- package/core/src/artifacts/README.md +78 -0
- package/core/src/artifacts/index.ts +16 -0
- package/core/src/artifacts/ui-artifacts.ts +412 -0
- package/core/src/assertions/__tests__/engine.test.ts +360 -0
- package/core/src/assertions/engine.ts +577 -0
- package/core/src/assertions/index.ts +13 -0
- package/core/src/assertions/types.ts +229 -0
- package/core/src/auth/__tests__/api-key-provider.test.ts +282 -0
- package/core/src/auth/__tests__/auth-manager.test.ts +430 -0
- package/core/src/auth/__tests__/basic-auth-provider.test.ts +364 -0
- package/core/src/auth/__tests__/cloud-providers.test.ts +751 -0
- package/core/src/auth/__tests__/jwt-provider.test.ts +400 -0
- package/core/src/auth/__tests__/oauth2-provider.test.ts +383 -0
- package/core/src/auth/__tests__/totp-provider.test.ts +294 -0
- package/core/src/auth/__tests__/ui-login-provider.test.ts +323 -0
- package/core/src/auth/api-key-provider.ts +75 -0
- package/core/src/auth/aws-iam-provider.ts +212 -0
- package/core/src/auth/azure-ad-provider.ts +126 -0
- package/core/src/auth/basic-auth-provider.ts +133 -0
- package/core/src/auth/gcp-adc-provider.ts +146 -0
- package/core/src/auth/index.ts +342 -0
- package/core/src/auth/jwt-provider.ts +193 -0
- package/core/src/auth/manager.ts +281 -0
- package/core/src/auth/oauth2-provider.ts +141 -0
- package/core/src/auth/totp-provider.ts +163 -0
- package/core/src/auth/ui-login-provider.ts +242 -0
- package/core/src/cache/__tests__/lru-cache.test.ts +564 -0
- package/core/src/cache/index.ts +13 -0
- package/core/src/cache/lru-cache.ts +536 -0
- package/core/src/crawler/__tests__/journey-generator.test.ts +344 -0
- package/core/src/crawler/__tests__/selector-generator.test.ts +211 -0
- package/core/src/crawler/index.ts +335 -0
- package/core/src/crawler/journey-generator.ts +471 -0
- package/core/src/crawler/page-analyzer.ts +857 -0
- package/core/src/crawler/selector-generator.ts +280 -0
- package/core/src/crawler/types.ts +475 -0
- package/core/src/dashboard/__tests__/real-world.test.ts +430 -0
- package/core/src/dashboard/__tests__/server.test.ts +283 -0
- package/core/src/dashboard/__tests__/types.test.ts +208 -0
- package/core/src/dashboard/assets.ts +692 -0
- package/core/src/dashboard/index.ts +17 -0
- package/core/src/dashboard/server.ts +401 -0
- package/core/src/dashboard/types.ts +78 -0
- package/core/src/discoverer/__tests__/test-discoverer.test.ts +444 -0
- package/core/src/discoverer/index.ts +374 -0
- package/core/src/flakiness/__tests__/flakiness.test.ts +554 -0
- package/core/src/flakiness/index.ts +536 -0
- package/core/src/generation/__tests__/code-formatter.test.ts +170 -0
- package/core/src/generation/__tests__/code-generator-contract.test.ts +207 -0
- package/core/src/generation/__tests__/code-generator.test.ts +586 -0
- package/core/src/generation/__tests__/crawler-pack-generator.test.ts +479 -0
- package/core/src/generation/__tests__/generation-e2e-b2bshop.test.ts +718 -0
- package/core/src/generation/__tests__/generation-integration.test.ts +655 -0
- package/core/src/generation/__tests__/pack-generator.test.ts +408 -0
- package/core/src/generation/__tests__/prompt-builder.test.ts +200 -0
- package/core/src/generation/__tests__/real-provider-integration.test.ts +414 -0
- package/core/src/generation/__tests__/source-analyzer.test.ts +774 -0
- package/core/src/generation/__tests__/test-optimizer.test.ts +255 -0
- package/core/src/generation/code-formatter.ts +408 -0
- package/core/src/generation/code-generator.ts +470 -0
- package/core/src/generation/crawler-pack-generator.ts +289 -0
- package/core/src/generation/generator.ts +113 -0
- package/core/src/generation/index.ts +59 -0
- package/core/src/generation/pack-generator.ts +527 -0
- package/core/src/generation/prompt-builder.ts +772 -0
- package/core/src/generation/source-analyzer.ts +830 -0
- package/core/src/generation/test-optimizer.ts +474 -0
- package/core/src/generation/types.ts +217 -0
- package/core/src/hooks/__tests__/compose.test.ts +636 -0
- package/core/src/hooks/__tests__/runner.test.ts +478 -0
- package/core/src/hooks/compose.ts +268 -0
- package/core/src/hooks/runner.ts +364 -0
- package/core/src/index.ts +237 -0
- package/core/src/pack/__tests__/migrator.test.ts +594 -0
- package/core/src/pack/__tests__/validator.test.ts +759 -0
- package/core/src/pack/migrator.ts +353 -0
- package/core/src/pack/validator.ts +359 -0
- package/core/src/pack-v2/__tests__/loader.test.ts +533 -0
- package/core/src/pack-v2/__tests__/migrator.test.ts +455 -0
- package/core/src/pack-v2/__tests__/validator.test.ts +549 -0
- package/core/src/pack-v2/index.ts +41 -0
- package/core/src/pack-v2/loader.ts +321 -0
- package/core/src/pack-v2/migrator.ts +540 -0
- package/core/src/pack-v2/validator.ts +673 -0
- package/core/src/parallel/README.md +143 -0
- package/core/src/parallel/index.ts +16 -0
- package/core/src/parallel/parallel-runner.ts +282 -0
- package/core/src/proof/__tests__/proof-roundtrip.test.ts +149 -0
- package/core/src/proof/__tests__/schema-validation-manual.mjs +211 -0
- package/core/src/proof/__tests__/schema-validation.test.ts +336 -0
- package/core/src/proof/__tests__/signer.test.ts +486 -0
- package/core/src/proof/__tests__/temporal-regression.test.ts +537 -0
- package/core/src/proof/__tests__/verifier-advanced.test.ts +588 -0
- package/core/src/proof/__tests__/verifier.test.ts +413 -0
- package/core/src/proof/bundle.ts +290 -0
- package/core/src/proof/canonicalize.ts +116 -0
- package/core/src/proof/index.ts +74 -0
- package/core/src/proof/schema.ts +285 -0
- package/core/src/proof/signer.ts +293 -0
- package/core/src/proof/verifier.ts +380 -0
- package/core/src/regression/__tests__/detector.test.ts +396 -0
- package/core/src/regression/__tests__/trend-analyzer.test.ts +300 -0
- package/core/src/regression/detector.ts +629 -0
- package/core/src/regression/index.ts +34 -0
- package/core/src/regression/trend-analyzer.ts +468 -0
- package/core/src/regression/types.ts +295 -0
- package/core/src/regression/vault.ts +419 -0
- package/core/src/repair/__tests__/repairer.test.ts +572 -0
- package/core/src/repair/__tests__/types.test.ts +302 -0
- package/core/src/repair/engine/__tests__/fixer.test.ts +482 -0
- package/core/src/repair/engine/__tests__/suggestion-engine.test.ts +395 -0
- package/core/src/repair/engine/fixer.ts +271 -0
- package/core/src/repair/engine/suggestion-engine.ts +234 -0
- package/core/src/repair/index.ts +53 -0
- package/core/src/repair/repairer.ts +376 -0
- package/core/src/repair/types.ts +119 -0
- package/core/src/repair/utils/__tests__/error-analyzer.test.ts +454 -0
- package/core/src/repair/utils/error-analyzer.ts +308 -0
- package/core/src/reporting/README.md +144 -0
- package/core/src/reporting/html-reporter.ts +835 -0
- package/core/src/reporting/index.ts +16 -0
- package/core/src/retry/README.md +192 -0
- package/core/src/retry/__tests__/flakiness-integration.test.ts +475 -0
- package/core/src/retry/__tests__/retry-engine.test.ts +424 -0
- package/core/src/retry/flakiness-integration.ts +267 -0
- package/core/src/retry/index.ts +48 -0
- package/core/src/retry/retry-engine.ts +368 -0
- package/core/src/retry/types.ts +208 -0
- package/core/src/retry/vault.ts +413 -0
- package/core/src/runner/__tests__/flakiness-integration.test.ts +566 -0
- package/core/src/runner/__tests__/phase3-e2e-b2bshop.test.ts +218 -0
- package/core/src/runner/__tests__/phase3-e2e-reqres.test.ts +199 -0
- package/core/src/runner/__tests__/phase3-runner.test.ts +1118 -0
- package/core/src/runner/e2e-helpers.ts +216 -0
- package/core/src/runner/phase3-runner.ts +1236 -0
- package/core/src/schemas/gherkin-report.json +122 -0
- package/core/src/secrets/__tests__/crypto.test.ts +180 -0
- package/core/src/secrets/crypto.ts +289 -0
- package/core/src/secrets/manager.ts +272 -0
- package/core/src/security/__tests__/hardening.test.ts +480 -0
- package/core/src/security/redaction-patterns-extended.ts +278 -0
- package/core/src/security/redactor.ts +326 -0
- package/core/src/self-healing/assertion-healer.ts +485 -0
- package/core/src/self-healing/engine.ts +626 -0
- package/core/src/self-healing/index.ts +33 -0
- package/core/src/self-healing/selector-healer.ts +488 -0
- package/core/src/self-healing/types.ts +193 -0
- package/core/src/serve/diagnostics-collector.ts +201 -0
- package/core/src/serve/health-checker.ts +274 -0
- package/core/src/serve/index.ts +9 -0
- package/core/src/serve/metrics-collector.ts +386 -0
- package/core/src/serve/process-manager.ts +265 -0
- package/core/src/serve/server.ts +230 -0
- package/core/src/slo/config.ts +408 -0
- package/core/src/slo/index.ts +68 -0
- package/core/src/slo/sli-calculator.ts +474 -0
- package/core/src/slo/slo-tracker.ts +481 -0
- package/core/src/slo/types.ts +408 -0
- package/core/src/slo/vault.ts +600 -0
- package/core/src/tui/__tests__/monitor.test.ts +336 -0
- package/core/src/tui/__tests__/real-world.test.ts +376 -0
- package/core/src/tui/__tests__/renderer.test.ts +201 -0
- package/core/src/tui/__tests__/types.test.ts +295 -0
- package/core/src/tui/index.ts +19 -0
- package/core/src/tui/monitor.ts +331 -0
- package/core/src/tui/renderer.ts +269 -0
- package/core/src/tui/types.ts +68 -0
- package/core/src/types/pack-v1.ts +305 -0
- package/core/src/types/pack-v2.ts +491 -0
- package/core/src/types/trust-score.ts +258 -0
- package/core/src/vault/__tests__/flakiness-vault.test.ts +562 -0
- package/core/src/vault/__tests__/vault.test.ts +259 -0
- package/core/src/vault/cas.ts +323 -0
- package/core/src/vault/index.ts +1361 -0
- package/core/src/vault/schema.sql +168 -0
- package/core/src/visual/README.md +185 -0
- package/core/src/visual/index.ts +14 -0
- package/core/src/visual/visual-regression.ts +347 -0
- package/core/src/watch/__tests__/watch-mode.test.ts +192 -0
- package/core/src/watch/index.ts +14 -0
- package/core/src/watch/watch-mode.ts +565 -0
- package/core/tsconfig.json +12 -0
- package/core/vitest.config.ts +52 -0
- package/docs/ARCHITECTURE.md +901 -0
- package/docs/AUDIT-GLOBAL-DEC2025.md +271 -0
- package/docs/BETA_TESTING.md +257 -0
- package/docs/BETA_TESTING_PLAN.md +727 -0
- package/docs/CERTIFICATION-REPORT.md +142 -0
- package/docs/COMPLETE_AUDIT_REFACTORING.md +965 -0
- package/docs/DEVELOPMENT.md +331 -0
- package/docs/DEVELOPMENT_HISTORY.md +345 -0
- package/docs/LIMITATIONS.md +176 -0
- package/docs/MIGRATION.md +303 -0
- package/docs/OPTION_3_4_EXPLORATION.md +1257 -0
- package/docs/PHASE1_PERFORMANCE.md +144 -0
- package/docs/QA360_Cloud.postman_collection.json +89 -0
- package/docs/README.md +50 -0
- package/docs/STATUS.md +179 -0
- package/docs/STRATEGIC_STUDY_GOOSE_INTEGRATION.md +615 -0
- package/docs/USER_GUIDE.md +687 -0
- package/docs/WORK-DONE-ADAPTER-TESTS.md +136 -0
- package/docs/adapters-security.md +485 -0
- package/docs/architecture-diagram.mmd +168 -0
- package/docs/archive/ARCH-01-DAY6-BUILD-FIXES.md +396 -0
- package/docs/archive/ARCH-01-DAY6-FINAL-STATUS.md +324 -0
- package/docs/archive/ARCH-01_MCP_MERGE_ANALYSIS.md +644 -0
- package/docs/archive/ARCH-01_NEXT_STEPS.md +60 -0
- package/docs/archive/BRANCH_PROTECTION.md +183 -0
- package/docs/archive/CI_LOCKDOWN_CHECKLIST.md +222 -0
- package/docs/archive/HANDOFF_TEST-01.md +669 -0
- package/docs/archive/LEGAL_READY_PLACEHOLDERS.md +372 -0
- package/docs/archive/NODE_UPGRADE_GUIDE.md +188 -0
- package/docs/archive/PHASE1_COMPLETION.md +386 -0
- package/docs/archive/PHASE2_COMPLETION.md +404 -0
- package/docs/archive/PHASE3_AND_4_FINAL.md +360 -0
- package/docs/archive/PHASE3_COMPLETE.md +301 -0
- package/docs/archive/PHASE3_STATUS.md +255 -0
- package/docs/archive/PRE-WEEK2-AUDIT.md +364 -0
- package/docs/archive/README.md +33 -0
- package/docs/archive/SCHEMA_AJV_2020_FIX.md +245 -0
- package/docs/archive/TEST-01_AUDIT_REPORT.md +240 -0
- package/docs/archive/TEST-01_COVERAGE_PLAN.md +423 -0
- package/docs/budgets-advanced.md +308 -0
- package/docs/examples/history-export-gc.md +285 -0
- package/docs/examples/pack-v2-complete.yaml +158 -0
- package/docs/examples/pack-v2-quickstart.yaml +24 -0
- package/docs/examples/pack-v2-ui-login.yaml +81 -0
- package/docs/examples/qa360-report.json +50 -0
- package/docs/history.md +565 -0
- package/docs/hooks.md +304 -0
- package/docs/llm-providers.md +419 -0
- package/docs/mcp-server.md +651 -0
- package/docs/mcp-tools.md +1131 -0
- package/docs/pack-v1.md +383 -0
- package/docs/pack-v2.md +558 -0
- package/docs/proofs.md +670 -0
- package/docs/quickstart-5min.md +257 -0
- package/docs/readiness-ci.md +654 -0
- package/docs/rfc/README.md +20 -0
- package/docs/rfc/proof-bundle-v1.md +787 -0
- package/docs/secrets.md +392 -0
- package/docs/serve.md +494 -0
- package/docs/vault.md +491 -0
- package/e2e/qa360-e2e.test.ts +696 -0
- package/e2e/vitest.config.ts +18 -0
- package/examples/README.md +30 -140
- package/examples/ci/docker-compose-serve.yml +375 -0
- package/examples/ci/github-actions-serve.yml +345 -0
- package/examples/ci/gitlab-ci-serve.yml +407 -0
- package/examples/datasets/README.md +101 -0
- package/examples/datasets/b2bshop.ts +155 -0
- package/examples/datasets/index.ts +57 -0
- package/examples/datasets/reqres.ts +195 -0
- package/examples/future-api/README.md +16 -0
- package/examples/future-api/diag.js +7 -0
- package/examples/future-api/health.js +4 -0
- package/examples/future-api/packs.js +13 -0
- package/examples/future-api/runpack.js +10 -0
- package/examples/generation/README.md +148 -0
- package/examples/generation/pack-generator-example.js +115 -0
- package/examples/generation/source-analyzer-example.js +115 -0
- package/examples/httpbin/pack.yml +59 -0
- package/examples/load-testing/mcp-load.yml +115 -0
- package/examples/load-testing/mcp-stdio.yml +95 -0
- package/examples/mcp/claude-desktop-config.json +33 -0
- package/examples/mcp/claude-desktop.json +16 -0
- package/examples/mcp/conversation-sample.md +131 -0
- package/examples/mcp/demo-60s.md +330 -0
- package/examples/mcp/sample-conversation.jsonl +21 -0
- package/examples/mcp/vscode-settings.json +22 -0
- package/examples/pack-v2-complete.yml +242 -0
- package/examples/pack-v2-examples.md +244 -0
- package/examples/pack-v2-quickstart.yml +55 -0
- package/examples/packs-business/ecommerce-api.yml +121 -0
- package/examples/packs-business/saas-dashboard-ui.yml +133 -0
- package/examples/packs-conformance/compose-multi.yml +174 -0
- package/examples/packs-conformance/full.yml +152 -0
- package/examples/packs-conformance/heavy-artifacts.yml +152 -0
- package/examples/packs-conformance/minimal.yml +71 -0
- package/examples/packs-conformance/secrets-missing.yml +97 -0
- package/examples/packs-conformance/timeouts.yml +77 -0
- package/examples/proofs/e2e-playwright-proof.json +75 -0
- package/examples/proofs/httpbin-proof.json +69 -0
- package/examples/proofs/multi-adapter-proof.json +117 -0
- package/examples/proofs/test-proof.json +26 -0
- package/examples/restful-api-dev/README.md +102 -0
- package/examples/restful-api-dev/restful-api-advanced.yml +29 -0
- package/examples/restful-api-dev/restful-api-basic.yml +29 -0
- package/examples/web-lite/.github/workflows/qa360-phase3.yml +73 -0
- package/examples/web-lite/api-mock/server.js +258 -0
- package/examples/web-lite/pack.yml +71 -0
- package/examples/web-lite/services.yml +43 -0
- package/examples/web-lite/web-content/healthz +1 -0
- package/examples/web-lite/web-content/index.html +259 -0
- package/package.json +55 -45
- package/packages/mcp/CHANGELOG.md +109 -0
- package/packages/mcp/IMPLEMENTATION_SUMMARY.md +350 -0
- package/packages/mcp/LICENSE +21 -0
- package/packages/mcp/QUICK_START.md +291 -0
- package/packages/mcp/README.md +294 -0
- package/packages/mcp/TELEMETRY.md +220 -0
- package/packages/mcp/package.json +92 -0
- package/packages/mcp/scripts/generate-sbom-fallback.cjs +84 -0
- package/packages/mcp/scripts/safe-postinstall.cjs +32 -0
- package/packages/mcp/src/__tests__/contract.test.ts +902 -0
- package/packages/mcp/src/cli/cli.ts +137 -0
- package/packages/mcp/src/cli/doctor.ts +286 -0
- package/packages/mcp/src/cli/fix.ts +99 -0
- package/packages/mcp/src/cli/init.ts +233 -0
- package/packages/mcp/src/cli/postinstall.ts +14 -0
- package/packages/mcp/src/cli/reset.ts +44 -0
- package/packages/mcp/src/cli/telemetry.ts +166 -0
- package/packages/mcp/src/cli/test-dx.ts +94 -0
- package/packages/mcp/src/cli/uninstall.ts +80 -0
- package/packages/mcp/src/cli/up.ts +178 -0
- package/packages/mcp/src/index.ts +12 -0
- package/packages/mcp/src/scripts/e2e-local.ts +337 -0
- package/packages/mcp/src/scripts/verify-settings.ts +242 -0
- package/packages/mcp/src/security/audit.ts +244 -0
- package/packages/mcp/src/security/manager.ts +242 -0
- package/packages/mcp/src/server/full-server.ts +212 -0
- package/packages/mcp/src/server/minimal-server.ts +134 -0
- package/packages/mcp/src/tools/history.ts +388 -0
- package/packages/mcp/src/tools/pack.ts +449 -0
- package/packages/mcp/src/tools/registry.ts +638 -0
- package/packages/mcp/src/tools/report.ts +100 -0
- package/packages/mcp/src/tools/run.ts +268 -0
- package/packages/mcp/src/tools/secrets.ts +198 -0
- package/packages/mcp/src/tools/serve.ts +221 -0
- package/packages/mcp/src/tools/triage.ts +532 -0
- package/packages/mcp/src/tools/types.ts +26 -0
- package/packages/mcp/src/tools/vault.ts +164 -0
- package/packages/mcp/src/tools/verify.ts +166 -0
- package/packages/mcp/src/types/index.ts +311 -0
- package/packages/mcp/src/types/mcp-stubs.ts +83 -0
- package/packages/mcp/tsconfig.json +16 -0
- package/playwright.config.ts +20 -0
- package/pnpm-workspace.yaml +4 -0
- package/run-test-and-push.sh +20 -0
- package/scripts/build-proof-cli.sh +110 -0
- package/scripts/ci/check-windows-paths.js +92 -0
- package/scripts/ci/invariants.sh +124 -0
- package/scripts/ci/make-final-bundle.js +106 -0
- package/scripts/ci/mcp-run-multipack.js +305 -0
- package/scripts/ci/run-pack-suite.sh +103 -0
- package/scripts/ci/run-phase7-final.sh +190 -0
- package/scripts/ci/slo-assert.js +158 -0
- package/scripts/ci/test-fault-tolerance.sh +301 -0
- package/scripts/install-mcp.sh +66 -0
- package/scripts/mcp-smoke.mjs +27 -0
- package/scripts/smoke.sh +26 -0
- package/scripts/stress-test.js +288 -0
- package/scripts/validate-examples.mjs +404 -0
- package/scripts/validation/simple-pack-check.sh +51 -0
- package/scripts/validation/validate-universal-pack.mjs +77 -0
- package/scripts/verify-persistence.js +127 -0
- package/test-pack.yaml +43 -0
- package/test-results/.last-run.json +4 -0
- package/test-runner.mjs +87 -0
- package/tests/artifacts.spec.js +147 -0
- package/tests/contracts.spec.js +239 -0
- package/tests/e2e/assertions.test.mjs +370 -0
- package/tests/e2e/crawler.test.mjs +451 -0
- package/tests/e2e/playwright-plus-plus.test.mjs +604 -0
- package/tests/e2e/proof-bundle.test.mjs +258 -0
- package/tests/e2e/real-world/saucedemo.test.mjs +714 -0
- package/tests/e2e/real-world/the-internet-herokuapp.test.mjs +760 -0
- package/tests/e2e/ui-actions.test.mjs +546 -0
- package/tests/gherkin.e2e.spec.ts +310 -0
- package/tests/no-console-errors.spec.js +136 -0
- package/tests/pdf.spec.ts +252 -0
- package/tests/run-pack.spec.ts +58 -0
- package/tsconfig.base.json +15 -0
- package/tsconfig.build.json +8 -0
- package/tsconfig.json +37 -0
- package/tsconfig.test.json +18 -0
- package/typedoc.json +37 -0
- package/ui/README.md +51 -0
- package/verify-proof.mjs +60 -0
- package/dist/cli-minimal.d.ts +0 -6
- package/dist/cli-minimal.js +0 -36
- package/dist/commands/ai.d.ts +0 -41
- package/dist/commands/ai.js +0 -511
- package/dist/commands/ask.d.ts +0 -94
- package/dist/commands/ask.js +0 -582
- package/dist/commands/coverage.d.ts +0 -8
- package/dist/commands/coverage.js +0 -252
- package/dist/commands/crawl.d.ts +0 -24
- package/dist/commands/crawl.js +0 -121
- package/dist/commands/doctor.d.ts +0 -54
- package/dist/commands/doctor.js +0 -513
- package/dist/commands/examples.d.ts +0 -33
- package/dist/commands/examples.js +0 -193
- package/dist/commands/explain.d.ts +0 -27
- package/dist/commands/explain.js +0 -630
- package/dist/commands/flakiness.d.ts +0 -73
- package/dist/commands/flakiness.js +0 -435
- package/dist/commands/generate.d.ts +0 -66
- package/dist/commands/generate.js +0 -438
- package/dist/commands/history.d.ts +0 -76
- package/dist/commands/history.js +0 -757
- package/dist/commands/init.d.ts +0 -106
- package/dist/commands/init.js +0 -599
- package/dist/commands/monitor.d.ts +0 -27
- package/dist/commands/monitor.js +0 -225
- package/dist/commands/ollama.d.ts +0 -40
- package/dist/commands/ollama.js +0 -301
- package/dist/commands/pack.d.ts +0 -70
- package/dist/commands/pack.js +0 -413
- package/dist/commands/regression.d.ts +0 -8
- package/dist/commands/regression.js +0 -340
- package/dist/commands/repair.d.ts +0 -26
- package/dist/commands/repair.js +0 -307
- package/dist/commands/report.d.ts +0 -62
- package/dist/commands/report.js +0 -378
- package/dist/commands/retry.d.ts +0 -43
- package/dist/commands/retry.js +0 -275
- package/dist/commands/run.d.ts +0 -41
- package/dist/commands/run.js +0 -169
- package/dist/commands/scan.d.ts +0 -5
- package/dist/commands/scan.js +0 -155
- package/dist/commands/secrets.d.ts +0 -58
- package/dist/commands/secrets.js +0 -289
- package/dist/commands/serve.d.ts +0 -13
- package/dist/commands/serve.js +0 -156
- package/dist/commands/slo.d.ts +0 -8
- package/dist/commands/slo.js +0 -327
- package/dist/commands/verify.d.ts +0 -32
- package/dist/commands/verify.js +0 -278
- package/dist/core/adapters/gitleaks-secrets.d.ts +0 -114
- package/dist/core/adapters/gitleaks-secrets.js +0 -410
- package/dist/core/adapters/k6-perf.d.ts +0 -85
- package/dist/core/adapters/k6-perf.js +0 -398
- package/dist/core/adapters/osv-deps.d.ts +0 -123
- package/dist/core/adapters/osv-deps.js +0 -372
- package/dist/core/adapters/playwright-native-adapter.d.ts +0 -121
- package/dist/core/adapters/playwright-native-adapter.js +0 -339
- package/dist/core/adapters/playwright-native-api.d.ts +0 -183
- package/dist/core/adapters/playwright-native-api.js +0 -461
- package/dist/core/adapters/playwright-ui.d.ts +0 -197
- package/dist/core/adapters/playwright-ui.js +0 -840
- package/dist/core/adapters/semgrep-sast.d.ts +0 -99
- package/dist/core/adapters/semgrep-sast.js +0 -322
- package/dist/core/adapters/zap-dast.d.ts +0 -133
- package/dist/core/adapters/zap-dast.js +0 -424
- package/dist/core/ai/anthropic-provider.d.ts +0 -50
- package/dist/core/ai/anthropic-provider.js +0 -211
- package/dist/core/ai/deepseek-provider.d.ts +0 -81
- package/dist/core/ai/deepseek-provider.js +0 -254
- package/dist/core/ai/index.d.ts +0 -60
- package/dist/core/ai/index.js +0 -18
- package/dist/core/ai/llm-client.d.ts +0 -45
- package/dist/core/ai/llm-client.js +0 -7
- package/dist/core/ai/mock-provider.d.ts +0 -49
- package/dist/core/ai/mock-provider.js +0 -121
- package/dist/core/ai/ollama-provider.d.ts +0 -78
- package/dist/core/ai/ollama-provider.js +0 -192
- package/dist/core/ai/openai-provider.d.ts +0 -48
- package/dist/core/ai/openai-provider.js +0 -188
- package/dist/core/ai/provider-factory.d.ts +0 -160
- package/dist/core/ai/provider-factory.js +0 -269
- package/dist/core/artifacts/index.d.ts +0 -6
- package/dist/core/artifacts/index.js +0 -6
- package/dist/core/artifacts/ui-artifacts.d.ts +0 -133
- package/dist/core/artifacts/ui-artifacts.js +0 -304
- package/dist/core/assertions/engine.d.ts +0 -51
- package/dist/core/assertions/engine.js +0 -530
- package/dist/core/assertions/index.d.ts +0 -11
- package/dist/core/assertions/index.js +0 -11
- package/dist/core/assertions/types.d.ts +0 -121
- package/dist/core/assertions/types.js +0 -37
- package/dist/core/auth/api-key-provider.d.ts +0 -16
- package/dist/core/auth/api-key-provider.js +0 -63
- package/dist/core/auth/aws-iam-provider.d.ts +0 -35
- package/dist/core/auth/aws-iam-provider.js +0 -177
- package/dist/core/auth/azure-ad-provider.d.ts +0 -15
- package/dist/core/auth/azure-ad-provider.js +0 -99
- package/dist/core/auth/basic-auth-provider.d.ts +0 -26
- package/dist/core/auth/basic-auth-provider.js +0 -111
- package/dist/core/auth/gcp-adc-provider.d.ts +0 -27
- package/dist/core/auth/gcp-adc-provider.js +0 -126
- package/dist/core/auth/index.d.ts +0 -238
- package/dist/core/auth/index.js +0 -82
- package/dist/core/auth/jwt-provider.d.ts +0 -19
- package/dist/core/auth/jwt-provider.js +0 -160
- package/dist/core/auth/manager.d.ts +0 -84
- package/dist/core/auth/manager.js +0 -230
- package/dist/core/auth/oauth2-provider.d.ts +0 -17
- package/dist/core/auth/oauth2-provider.js +0 -114
- package/dist/core/auth/totp-provider.d.ts +0 -31
- package/dist/core/auth/totp-provider.js +0 -134
- package/dist/core/auth/ui-login-provider.d.ts +0 -26
- package/dist/core/auth/ui-login-provider.js +0 -198
- package/dist/core/cache/index.d.ts +0 -7
- package/dist/core/cache/index.js +0 -6
- package/dist/core/cache/lru-cache.d.ts +0 -203
- package/dist/core/cache/lru-cache.js +0 -397
- package/dist/core/core/coverage/analyzer.d.ts +0 -101
- package/dist/core/core/coverage/analyzer.js +0 -415
- package/dist/core/core/coverage/collector.d.ts +0 -74
- package/dist/core/core/coverage/collector.js +0 -459
- package/dist/core/core/coverage/config.d.ts +0 -37
- package/dist/core/core/coverage/config.js +0 -156
- package/dist/core/core/coverage/index.d.ts +0 -11
- package/dist/core/core/coverage/index.js +0 -15
- package/dist/core/core/coverage/types.d.ts +0 -267
- package/dist/core/core/coverage/types.js +0 -6
- package/dist/core/core/coverage/vault.d.ts +0 -95
- package/dist/core/core/coverage/vault.js +0 -405
- package/dist/core/coverage/analyzer.d.ts +0 -101
- package/dist/core/coverage/analyzer.js +0 -415
- package/dist/core/coverage/collector.d.ts +0 -74
- package/dist/core/coverage/collector.js +0 -459
- package/dist/core/coverage/config.d.ts +0 -37
- package/dist/core/coverage/config.js +0 -156
- package/dist/core/coverage/index.d.ts +0 -11
- package/dist/core/coverage/index.js +0 -15
- package/dist/core/coverage/types.d.ts +0 -267
- package/dist/core/coverage/types.js +0 -6
- package/dist/core/coverage/vault.d.ts +0 -95
- package/dist/core/coverage/vault.js +0 -405
- package/dist/core/crawler/index.d.ts +0 -57
- package/dist/core/crawler/index.js +0 -281
- package/dist/core/crawler/journey-generator.d.ts +0 -49
- package/dist/core/crawler/journey-generator.js +0 -412
- package/dist/core/crawler/page-analyzer.d.ts +0 -88
- package/dist/core/crawler/page-analyzer.js +0 -709
- package/dist/core/crawler/selector-generator.d.ts +0 -34
- package/dist/core/crawler/selector-generator.js +0 -240
- package/dist/core/crawler/types.d.ts +0 -353
- package/dist/core/crawler/types.js +0 -6
- package/dist/core/dashboard/assets.d.ts +0 -6
- package/dist/core/dashboard/assets.js +0 -690
- package/dist/core/dashboard/index.d.ts +0 -6
- package/dist/core/dashboard/index.js +0 -5
- package/dist/core/dashboard/server.d.ts +0 -72
- package/dist/core/dashboard/server.js +0 -354
- package/dist/core/dashboard/types.d.ts +0 -70
- package/dist/core/dashboard/types.js +0 -5
- package/dist/core/discoverer/index.d.ts +0 -115
- package/dist/core/discoverer/index.js +0 -250
- package/dist/core/flakiness/index.d.ts +0 -228
- package/dist/core/flakiness/index.js +0 -384
- package/dist/core/generation/code-formatter.d.ts +0 -111
- package/dist/core/generation/code-formatter.js +0 -307
- package/dist/core/generation/code-generator.d.ts +0 -144
- package/dist/core/generation/code-generator.js +0 -293
- package/dist/core/generation/crawler-pack-generator.d.ts +0 -44
- package/dist/core/generation/crawler-pack-generator.js +0 -231
- package/dist/core/generation/generator.d.ts +0 -40
- package/dist/core/generation/generator.js +0 -76
- package/dist/core/generation/index.d.ts +0 -32
- package/dist/core/generation/index.js +0 -30
- package/dist/core/generation/pack-generator.d.ts +0 -107
- package/dist/core/generation/pack-generator.js +0 -416
- package/dist/core/generation/prompt-builder.d.ts +0 -132
- package/dist/core/generation/prompt-builder.js +0 -672
- package/dist/core/generation/source-analyzer.d.ts +0 -213
- package/dist/core/generation/source-analyzer.js +0 -657
- package/dist/core/generation/test-optimizer.d.ts +0 -117
- package/dist/core/generation/test-optimizer.js +0 -328
- package/dist/core/generation/types.d.ts +0 -214
- package/dist/core/generation/types.js +0 -4
- package/dist/core/hooks/compose.d.ts +0 -61
- package/dist/core/hooks/compose.js +0 -225
- package/dist/core/hooks/runner.d.ts +0 -68
- package/dist/core/hooks/runner.js +0 -303
- package/dist/core/index.d.ts +0 -104
- package/dist/core/index.js +0 -91
- package/dist/core/pack/migrator.d.ts +0 -51
- package/dist/core/pack/migrator.js +0 -304
- package/dist/core/pack/validator.d.ts +0 -42
- package/dist/core/pack/validator.js +0 -322
- package/dist/core/pack-v2/index.d.ts +0 -9
- package/dist/core/pack-v2/index.js +0 -8
- package/dist/core/pack-v2/loader.d.ts +0 -62
- package/dist/core/pack-v2/loader.js +0 -259
- package/dist/core/pack-v2/migrator.d.ts +0 -61
- package/dist/core/pack-v2/migrator.js +0 -480
- package/dist/core/pack-v2/validator.d.ts +0 -61
- package/dist/core/pack-v2/validator.js +0 -577
- package/dist/core/parallel/index.d.ts +0 -6
- package/dist/core/parallel/index.js +0 -6
- package/dist/core/parallel/parallel-runner.d.ts +0 -107
- package/dist/core/parallel/parallel-runner.js +0 -192
- package/dist/core/proof/bundle.d.ts +0 -137
- package/dist/core/proof/bundle.js +0 -160
- package/dist/core/proof/canonicalize.d.ts +0 -47
- package/dist/core/proof/canonicalize.js +0 -105
- package/dist/core/proof/index.d.ts +0 -13
- package/dist/core/proof/index.js +0 -18
- package/dist/core/proof/schema.d.ts +0 -217
- package/dist/core/proof/schema.js +0 -263
- package/dist/core/proof/signer.d.ts +0 -111
- package/dist/core/proof/signer.js +0 -226
- package/dist/core/proof/verifier.d.ts +0 -97
- package/dist/core/proof/verifier.js +0 -308
- package/dist/core/regression/detector.d.ts +0 -107
- package/dist/core/regression/detector.js +0 -497
- package/dist/core/regression/index.d.ts +0 -9
- package/dist/core/regression/index.js +0 -11
- package/dist/core/regression/trend-analyzer.d.ts +0 -102
- package/dist/core/regression/trend-analyzer.js +0 -345
- package/dist/core/regression/types.d.ts +0 -222
- package/dist/core/regression/types.js +0 -7
- package/dist/core/regression/vault.d.ts +0 -87
- package/dist/core/regression/vault.js +0 -289
- package/dist/core/repair/engine/fixer.d.ts +0 -24
- package/dist/core/repair/engine/fixer.js +0 -226
- package/dist/core/repair/engine/suggestion-engine.d.ts +0 -18
- package/dist/core/repair/engine/suggestion-engine.js +0 -187
- package/dist/core/repair/index.d.ts +0 -10
- package/dist/core/repair/index.js +0 -13
- package/dist/core/repair/repairer.d.ts +0 -90
- package/dist/core/repair/repairer.js +0 -284
- package/dist/core/repair/types.d.ts +0 -91
- package/dist/core/repair/types.js +0 -6
- package/dist/core/repair/utils/error-analyzer.d.ts +0 -28
- package/dist/core/repair/utils/error-analyzer.js +0 -264
- package/dist/core/reporting/html-reporter.d.ts +0 -119
- package/dist/core/reporting/html-reporter.js +0 -737
- package/dist/core/reporting/index.d.ts +0 -6
- package/dist/core/reporting/index.js +0 -6
- package/dist/core/retry/flakiness-integration.d.ts +0 -60
- package/dist/core/retry/flakiness-integration.js +0 -228
- package/dist/core/retry/index.d.ts +0 -14
- package/dist/core/retry/index.js +0 -16
- package/dist/core/retry/retry-engine.d.ts +0 -80
- package/dist/core/retry/retry-engine.js +0 -296
- package/dist/core/retry/types.d.ts +0 -178
- package/dist/core/retry/types.js +0 -52
- package/dist/core/retry/vault.d.ts +0 -77
- package/dist/core/retry/vault.js +0 -304
- package/dist/core/runner/e2e-helpers.d.ts +0 -102
- package/dist/core/runner/e2e-helpers.js +0 -153
- package/dist/core/runner/phase3-runner.d.ts +0 -200
- package/dist/core/runner/phase3-runner.js +0 -1039
- package/dist/core/secrets/crypto.d.ts +0 -75
- package/dist/core/secrets/crypto.js +0 -223
- package/dist/core/secrets/manager.d.ts +0 -76
- package/dist/core/secrets/manager.js +0 -219
- package/dist/core/security/redaction-patterns-extended.d.ts +0 -27
- package/dist/core/security/redaction-patterns-extended.js +0 -247
- package/dist/core/security/redactor.d.ts +0 -71
- package/dist/core/security/redactor.js +0 -279
- package/dist/core/self-healing/assertion-healer.d.ts +0 -97
- package/dist/core/self-healing/assertion-healer.js +0 -371
- package/dist/core/self-healing/engine.d.ts +0 -122
- package/dist/core/self-healing/engine.js +0 -538
- package/dist/core/self-healing/index.d.ts +0 -10
- package/dist/core/self-healing/index.js +0 -11
- package/dist/core/self-healing/selector-healer.d.ts +0 -103
- package/dist/core/self-healing/selector-healer.js +0 -372
- package/dist/core/self-healing/types.d.ts +0 -152
- package/dist/core/self-healing/types.js +0 -6
- package/dist/core/serve/diagnostics-collector.d.ts +0 -32
- package/dist/core/serve/diagnostics-collector.js +0 -149
- package/dist/core/serve/health-checker.d.ts +0 -44
- package/dist/core/serve/health-checker.js +0 -219
- package/dist/core/serve/index.d.ts +0 -8
- package/dist/core/serve/index.js +0 -8
- package/dist/core/serve/metrics-collector.d.ts +0 -24
- package/dist/core/serve/metrics-collector.js +0 -322
- package/dist/core/serve/process-manager.d.ts +0 -36
- package/dist/core/serve/process-manager.js +0 -213
- package/dist/core/serve/server.d.ts +0 -36
- package/dist/core/serve/server.js +0 -191
- package/dist/core/slo/config.d.ts +0 -107
- package/dist/core/slo/config.js +0 -360
- package/dist/core/slo/index.d.ts +0 -11
- package/dist/core/slo/index.js +0 -15
- package/dist/core/slo/sli-calculator.d.ts +0 -92
- package/dist/core/slo/sli-calculator.js +0 -364
- package/dist/core/slo/slo-tracker.d.ts +0 -148
- package/dist/core/slo/slo-tracker.js +0 -379
- package/dist/core/slo/types.d.ts +0 -281
- package/dist/core/slo/types.js +0 -7
- package/dist/core/slo/vault.d.ts +0 -102
- package/dist/core/slo/vault.js +0 -427
- package/dist/core/tui/index.d.ts +0 -7
- package/dist/core/tui/index.js +0 -6
- package/dist/core/tui/monitor.d.ts +0 -92
- package/dist/core/tui/monitor.js +0 -271
- package/dist/core/tui/renderer.d.ts +0 -33
- package/dist/core/tui/renderer.js +0 -218
- package/dist/core/tui/types.d.ts +0 -63
- package/dist/core/tui/types.js +0 -5
- package/dist/core/types/pack-v1.d.ts +0 -251
- package/dist/core/types/pack-v1.js +0 -5
- package/dist/core/types/pack-v2.d.ts +0 -425
- package/dist/core/types/pack-v2.js +0 -8
- package/dist/core/types/trust-score.d.ts +0 -69
- package/dist/core/types/trust-score.js +0 -191
- package/dist/core/vault/cas.d.ts +0 -90
- package/dist/core/vault/cas.js +0 -261
- package/dist/core/vault/index.d.ts +0 -326
- package/dist/core/vault/index.js +0 -1042
- package/dist/core/visual/index.d.ts +0 -6
- package/dist/core/visual/index.js +0 -6
- package/dist/core/visual/visual-regression.d.ts +0 -113
- package/dist/core/visual/visual-regression.js +0 -236
- package/dist/core/watch/index.d.ts +0 -7
- package/dist/core/watch/index.js +0 -6
- package/dist/core/watch/watch-mode.d.ts +0 -213
- package/dist/core/watch/watch-mode.js +0 -389
- package/dist/generators/index.d.ts +0 -5
- package/dist/generators/index.js +0 -5
- package/dist/generators/json-reporter.d.ts +0 -10
- package/dist/generators/json-reporter.js +0 -12
- package/dist/generators/test-generator.d.ts +0 -18
- package/dist/generators/test-generator.js +0 -78
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -246
- package/dist/scanners/dom-scanner.d.ts +0 -52
- package/dist/scanners/dom-scanner.js +0 -296
- package/dist/scanners/index.d.ts +0 -4
- package/dist/scanners/index.js +0 -4
- package/dist/schemas/pack.schema.json +0 -236
- package/dist/types/scan.d.ts +0 -68
- package/dist/types/scan.js +0 -4
- package/dist/utils/config.d.ts +0 -5
- package/dist/utils/config.js +0 -136
- /package/{bin → cli/bin}/qa360.js +0 -0
- /package/{examples → cli/examples}/accessibility.yml +0 -0
- /package/{examples → cli/examples}/api-basic.yml +0 -0
- /package/{examples → cli/examples}/complete.yml +0 -0
- /package/{examples → cli/examples}/crawler.yml +0 -0
- /package/{examples → cli/examples}/fullstack.yml +0 -0
- /package/{examples → cli/examples}/security.yml +0 -0
- /package/{examples → cli/examples}/ui-advanced.yml +0 -0
- /package/{examples → cli/examples}/ui-basic.yml +0 -0
- /package/{dist/core → core}/schemas/pack.schema.json +0 -0
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GCP Application Default Credentials Provider
|
|
3
|
-
*
|
|
4
|
-
* Handles GCP authentication using Application Default Credentials.
|
|
5
|
-
* Supports service account credentials and ADC resolution.
|
|
6
|
-
*/
|
|
7
|
-
import { authCache, createCacheKey } from './index.js';
|
|
8
|
-
export class GCPADCProvider {
|
|
9
|
-
type = 'gcp_adc';
|
|
10
|
-
async authenticate(config) {
|
|
11
|
-
const cacheKey = this.getCacheKey(config);
|
|
12
|
-
// Check cache first
|
|
13
|
-
if (config.cache?.enabled !== false) {
|
|
14
|
-
const cached = authCache.get(cacheKey);
|
|
15
|
-
if (cached) {
|
|
16
|
-
return { success: true, credentials: cached };
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
// Try to get GCP access token
|
|
20
|
-
try {
|
|
21
|
-
const token = await this.getAccessToken(config);
|
|
22
|
-
if (!token) {
|
|
23
|
-
return {
|
|
24
|
-
success: false,
|
|
25
|
-
error: 'Failed to obtain GCP access token. Ensure you are authenticated with gcloud auth application-default login or have a service account key.'
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
const credentials = {
|
|
29
|
-
type: 'gcp_adc',
|
|
30
|
-
headers: {
|
|
31
|
-
'Authorization': `Bearer ${token}`
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
// GCP tokens typically expire in 1 hour
|
|
35
|
-
if (config.cache?.enabled !== false) {
|
|
36
|
-
const ttl = config.cache?.ttl || 3600;
|
|
37
|
-
authCache.set(cacheKey, credentials, ttl);
|
|
38
|
-
}
|
|
39
|
-
return {
|
|
40
|
-
success: true,
|
|
41
|
-
credentials,
|
|
42
|
-
expiresAt: Date.now() + 3600 * 1000
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
return {
|
|
47
|
-
success: false,
|
|
48
|
-
error: `GCP ADC authentication failed: ${error.message}`
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async refresh(config) {
|
|
53
|
-
// Clear cache and re-authenticate
|
|
54
|
-
authCache.clear(this.getCacheKey(config));
|
|
55
|
-
return this.authenticate(config);
|
|
56
|
-
}
|
|
57
|
-
clear(config) {
|
|
58
|
-
const key = this.getCacheKey(config);
|
|
59
|
-
authCache.clear(key);
|
|
60
|
-
return Promise.resolve();
|
|
61
|
-
}
|
|
62
|
-
async validate(config) {
|
|
63
|
-
const key = this.getCacheKey(config);
|
|
64
|
-
return authCache.has(key);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get GCP access token from various sources
|
|
68
|
-
*/
|
|
69
|
-
async getAccessToken(config) {
|
|
70
|
-
// Method 1: Try environment variable (GOOGLE_TOKEN)
|
|
71
|
-
if (process.env.GOOGLE_TOKEN) {
|
|
72
|
-
return process.env.GOOGLE_TOKEN;
|
|
73
|
-
}
|
|
74
|
-
// Method 2: Try gcloud auth print-access-token
|
|
75
|
-
const token = await this.getTokenFromGcloud();
|
|
76
|
-
if (token)
|
|
77
|
-
return token;
|
|
78
|
-
// Method 3: Try metadata server (for GCE/GKE)
|
|
79
|
-
const metadataToken = await this.getTokenFromMetadataServer();
|
|
80
|
-
if (metadataToken)
|
|
81
|
-
return metadataToken;
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Get token from gcloud CLI
|
|
86
|
-
*/
|
|
87
|
-
async getTokenFromGcloud() {
|
|
88
|
-
try {
|
|
89
|
-
const { execSync } = require('node:child_process');
|
|
90
|
-
const token = execSync('gcloud auth print-access-token', {
|
|
91
|
-
encoding: 'utf-8',
|
|
92
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
93
|
-
}).trim();
|
|
94
|
-
return token || null;
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Get token from GCP metadata server
|
|
102
|
-
*/
|
|
103
|
-
async getTokenFromMetadataServer() {
|
|
104
|
-
try {
|
|
105
|
-
const response = await fetch('http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token', {
|
|
106
|
-
headers: {
|
|
107
|
-
'Metadata-Flavor': 'Google'
|
|
108
|
-
},
|
|
109
|
-
// Timeout for metadata server
|
|
110
|
-
signal: AbortSignal.timeout(2000)
|
|
111
|
-
});
|
|
112
|
-
if (!response.ok) {
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
const data = await response.json();
|
|
116
|
-
return data.access_token;
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
getCacheKey(config) {
|
|
123
|
-
const identifier = config.project_id || 'default';
|
|
124
|
-
return createCacheKey('gcp_adc', identifier);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QA360 Authentication Module
|
|
3
|
-
*
|
|
4
|
-
* Comprehensive authentication support for test adapters.
|
|
5
|
-
* Supports JWT, OAuth2, API Keys, Bearer tokens, Basic auth, TOTP,
|
|
6
|
-
* UI Login, and cloud provider credentials (GCP, AWS, Azure).
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Authentication result
|
|
10
|
-
*/
|
|
11
|
-
export interface AuthResult {
|
|
12
|
-
success: boolean;
|
|
13
|
-
credentials?: AuthCredentials;
|
|
14
|
-
error?: string;
|
|
15
|
-
expiresAt?: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Authentication credentials to be used in requests
|
|
19
|
-
*/
|
|
20
|
-
export interface AuthCredentials {
|
|
21
|
-
type: AuthType;
|
|
22
|
-
headers?: Record<string, string>;
|
|
23
|
-
queryParams?: Record<string, string>;
|
|
24
|
-
cookies?: Cookie[];
|
|
25
|
-
body?: Record<string, unknown>;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Cookie for session management
|
|
29
|
-
*/
|
|
30
|
-
export interface Cookie {
|
|
31
|
-
name: string;
|
|
32
|
-
value: string;
|
|
33
|
-
domain?: string;
|
|
34
|
-
path?: string;
|
|
35
|
-
expires?: Date;
|
|
36
|
-
httpOnly?: boolean;
|
|
37
|
-
secure?: boolean;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Authentication types
|
|
41
|
-
*/
|
|
42
|
-
export type AuthType = 'none' | 'jwt' | 'oauth2' | 'api_key' | 'bearer' | 'basic' | 'totp' | 'ui_login' | 'gcp_adc' | 'aws_iam' | 'azure_ad';
|
|
43
|
-
/**
|
|
44
|
-
* Base configuration for all auth providers
|
|
45
|
-
*/
|
|
46
|
-
export interface BaseAuthConfig {
|
|
47
|
-
type: AuthType;
|
|
48
|
-
enabled?: boolean;
|
|
49
|
-
cache?: {
|
|
50
|
-
enabled?: boolean;
|
|
51
|
-
ttl?: number;
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* JWT configuration
|
|
56
|
-
*/
|
|
57
|
-
export interface JWTAuthConfig extends BaseAuthConfig {
|
|
58
|
-
type: 'jwt';
|
|
59
|
-
issuer?: string;
|
|
60
|
-
audience?: string;
|
|
61
|
-
subject?: string;
|
|
62
|
-
client_id?: string;
|
|
63
|
-
client_secret?: string;
|
|
64
|
-
token_endpoint?: string;
|
|
65
|
-
scopes?: string[];
|
|
66
|
-
auto_refresh?: boolean;
|
|
67
|
-
token?: string;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* OAuth2 configuration
|
|
71
|
-
*/
|
|
72
|
-
export interface OAuth2AuthConfig extends BaseAuthConfig {
|
|
73
|
-
type: 'oauth2';
|
|
74
|
-
token_url: string;
|
|
75
|
-
client_id: string;
|
|
76
|
-
client_secret?: string;
|
|
77
|
-
scopes?: string[];
|
|
78
|
-
grant_type?: 'client_credentials' | 'authorization_code' | 'password';
|
|
79
|
-
username?: string;
|
|
80
|
-
password?: string;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* API Key configuration
|
|
84
|
-
*/
|
|
85
|
-
export interface APIKeyAuthConfig extends BaseAuthConfig {
|
|
86
|
-
type: 'api_key';
|
|
87
|
-
key: string;
|
|
88
|
-
header_name?: string;
|
|
89
|
-
prefix?: string;
|
|
90
|
-
location?: 'header' | 'query';
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Bearer token configuration
|
|
94
|
-
*/
|
|
95
|
-
export interface BearerAuthConfig extends BaseAuthConfig {
|
|
96
|
-
type: 'bearer';
|
|
97
|
-
token: string;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Basic auth configuration
|
|
101
|
-
*/
|
|
102
|
-
export interface BasicAuthConfig extends BaseAuthConfig {
|
|
103
|
-
type: 'basic';
|
|
104
|
-
username: string;
|
|
105
|
-
password: string;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* TOTP configuration
|
|
109
|
-
*/
|
|
110
|
-
export interface TOTPAuthConfig extends BaseAuthConfig {
|
|
111
|
-
type: 'totp';
|
|
112
|
-
secret: string;
|
|
113
|
-
digits?: number;
|
|
114
|
-
period?: number;
|
|
115
|
-
algorithm?: 'sha1' | 'sha256' | 'sha512';
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* UI Login configuration
|
|
119
|
-
*/
|
|
120
|
-
export interface UILoginAuthConfig extends BaseAuthConfig {
|
|
121
|
-
type: 'ui_login';
|
|
122
|
-
url: string;
|
|
123
|
-
username?: string;
|
|
124
|
-
password?: string;
|
|
125
|
-
username_selector?: string;
|
|
126
|
-
password_selector?: string;
|
|
127
|
-
submit_selector?: string;
|
|
128
|
-
totp_secret?: string;
|
|
129
|
-
totp_selector?: string;
|
|
130
|
-
session_file?: string;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* GCP ADC configuration
|
|
134
|
-
*/
|
|
135
|
-
export interface GCPADCConfig extends BaseAuthConfig {
|
|
136
|
-
type: 'gcp_adc';
|
|
137
|
-
project_id?: string;
|
|
138
|
-
scopes?: string[];
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* AWS IAM configuration
|
|
142
|
-
*/
|
|
143
|
-
export interface AWSIamConfig extends BaseAuthConfig {
|
|
144
|
-
type: 'aws_iam';
|
|
145
|
-
region?: string;
|
|
146
|
-
access_key_id?: string;
|
|
147
|
-
secret_access_key?: string;
|
|
148
|
-
session_token?: string;
|
|
149
|
-
role_arn?: string;
|
|
150
|
-
profile?: string;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Azure AD configuration
|
|
154
|
-
*/
|
|
155
|
-
export interface AzureADConfig extends BaseAuthConfig {
|
|
156
|
-
type: 'azure_ad';
|
|
157
|
-
tenant_id: string;
|
|
158
|
-
client_id: string;
|
|
159
|
-
client_secret?: string;
|
|
160
|
-
scope?: string;
|
|
161
|
-
token_endpoint?: string;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* No-auth configuration (for unauthenticated requests)
|
|
165
|
-
*/
|
|
166
|
-
export interface NoneAuthConfig extends BaseAuthConfig {
|
|
167
|
-
type: 'none';
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Union type for all auth configurations
|
|
171
|
-
*/
|
|
172
|
-
export type AuthConfig = JWTAuthConfig | OAuth2AuthConfig | APIKeyAuthConfig | BearerAuthConfig | BasicAuthConfig | TOTPAuthConfig | UILoginAuthConfig | GCPADCConfig | AWSIamConfig | AzureADConfig | NoneAuthConfig;
|
|
173
|
-
/**
|
|
174
|
-
* Base interface for all auth providers
|
|
175
|
-
*/
|
|
176
|
-
export interface AuthProvider<T extends AuthConfig = AuthConfig> {
|
|
177
|
-
/**
|
|
178
|
-
* Provider type identifier
|
|
179
|
-
*/
|
|
180
|
-
readonly type: AuthType;
|
|
181
|
-
/**
|
|
182
|
-
* Authenticate and retrieve credentials
|
|
183
|
-
*/
|
|
184
|
-
authenticate(config: T): Promise<AuthResult>;
|
|
185
|
-
/**
|
|
186
|
-
* Refresh credentials if applicable
|
|
187
|
-
*/
|
|
188
|
-
refresh?(config: T): Promise<AuthResult>;
|
|
189
|
-
/**
|
|
190
|
-
* Clear cached credentials
|
|
191
|
-
*/
|
|
192
|
-
clear?(config: T): Promise<void>;
|
|
193
|
-
/**
|
|
194
|
-
* Validate current credentials
|
|
195
|
-
*/
|
|
196
|
-
validate?(config: T): Promise<boolean>;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Simple in-memory cache for auth credentials
|
|
200
|
-
*/
|
|
201
|
-
export declare class AuthCache {
|
|
202
|
-
private cache;
|
|
203
|
-
private defaultTTL;
|
|
204
|
-
set(key: string, credentials: AuthCredentials, ttl?: number): void;
|
|
205
|
-
get(key: string): AuthCredentials | null;
|
|
206
|
-
clear(key?: string): void;
|
|
207
|
-
has(key: string): boolean;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Global auth cache instance
|
|
211
|
-
*/
|
|
212
|
-
export declare const authCache: AuthCache;
|
|
213
|
-
/**
|
|
214
|
-
* Create cache key from config
|
|
215
|
-
*/
|
|
216
|
-
export declare function createCacheKey(type: AuthType, identifier: string): string;
|
|
217
|
-
/**
|
|
218
|
-
* Check if credentials are expired
|
|
219
|
-
*/
|
|
220
|
-
export declare function isExpired(expiresAt?: number): boolean;
|
|
221
|
-
/**
|
|
222
|
-
* Parse token from string (extracts token without "Bearer " prefix)
|
|
223
|
-
*/
|
|
224
|
-
export declare function parseToken(token: string): string;
|
|
225
|
-
/**
|
|
226
|
-
* Encode basic auth header
|
|
227
|
-
*/
|
|
228
|
-
export declare function encodeBasicAuth(username: string, password: string): string;
|
|
229
|
-
export { JWTProvider } from './jwt-provider.js';
|
|
230
|
-
export { OAuth2Provider } from './oauth2-provider.js';
|
|
231
|
-
export { APIKeyProvider } from './api-key-provider.js';
|
|
232
|
-
export { BearerProvider, BasicAuthProvider } from './basic-auth-provider.js';
|
|
233
|
-
export { TOTPProvider } from './totp-provider.js';
|
|
234
|
-
export { UILoginProvider } from './ui-login-provider.js';
|
|
235
|
-
export { GCPADCProvider } from './gcp-adc-provider.js';
|
|
236
|
-
export { AWSIamProvider } from './aws-iam-provider.js';
|
|
237
|
-
export { AzureADProvider } from './azure-ad-provider.js';
|
|
238
|
-
export { AuthManager, authManager, authenticate, createAuthHeaders, applyAuthToRequest, AuthError } from './manager.js';
|
package/dist/core/auth/index.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QA360 Authentication Module
|
|
3
|
-
*
|
|
4
|
-
* Comprehensive authentication support for test adapters.
|
|
5
|
-
* Supports JWT, OAuth2, API Keys, Bearer tokens, Basic auth, TOTP,
|
|
6
|
-
* UI Login, and cloud provider credentials (GCP, AWS, Azure).
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Simple in-memory cache for auth credentials
|
|
10
|
-
*/
|
|
11
|
-
export class AuthCache {
|
|
12
|
-
cache = new Map();
|
|
13
|
-
defaultTTL = 3600; // 1 hour
|
|
14
|
-
set(key, credentials, ttl) {
|
|
15
|
-
const expiresAt = Date.now() + (ttl || this.defaultTTL) * 1000;
|
|
16
|
-
this.cache.set(key, { credentials, expiresAt });
|
|
17
|
-
}
|
|
18
|
-
get(key) {
|
|
19
|
-
const entry = this.cache.get(key);
|
|
20
|
-
if (!entry)
|
|
21
|
-
return null;
|
|
22
|
-
if (Date.now() > entry.expiresAt) {
|
|
23
|
-
this.cache.delete(key);
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
return entry.credentials;
|
|
27
|
-
}
|
|
28
|
-
clear(key) {
|
|
29
|
-
if (key) {
|
|
30
|
-
this.cache.delete(key);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
this.cache.clear();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
has(key) {
|
|
37
|
-
return this.get(key) !== null;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Global auth cache instance
|
|
42
|
-
*/
|
|
43
|
-
export const authCache = new AuthCache();
|
|
44
|
-
/**
|
|
45
|
-
* Create cache key from config
|
|
46
|
-
*/
|
|
47
|
-
export function createCacheKey(type, identifier) {
|
|
48
|
-
return `${type}:${identifier}`;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if credentials are expired
|
|
52
|
-
*/
|
|
53
|
-
export function isExpired(expiresAt) {
|
|
54
|
-
if (!expiresAt)
|
|
55
|
-
return false;
|
|
56
|
-
return Date.now() >= expiresAt;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Parse token from string (extracts token without "Bearer " prefix)
|
|
60
|
-
*/
|
|
61
|
-
export function parseToken(token) {
|
|
62
|
-
return token.replace(/^Bearer\s+/i, '').trim();
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Encode basic auth header
|
|
66
|
-
*/
|
|
67
|
-
export function encodeBasicAuth(username, password) {
|
|
68
|
-
const encoded = Buffer.from(`${username}:${password}`).toString('base64');
|
|
69
|
-
return `Basic ${encoded}`;
|
|
70
|
-
}
|
|
71
|
-
// Re-export all providers
|
|
72
|
-
export { JWTProvider } from './jwt-provider.js';
|
|
73
|
-
export { OAuth2Provider } from './oauth2-provider.js';
|
|
74
|
-
export { APIKeyProvider } from './api-key-provider.js';
|
|
75
|
-
export { BearerProvider, BasicAuthProvider } from './basic-auth-provider.js';
|
|
76
|
-
export { TOTPProvider } from './totp-provider.js';
|
|
77
|
-
export { UILoginProvider } from './ui-login-provider.js';
|
|
78
|
-
export { GCPADCProvider } from './gcp-adc-provider.js';
|
|
79
|
-
export { AWSIamProvider } from './aws-iam-provider.js';
|
|
80
|
-
export { AzureADProvider } from './azure-ad-provider.js';
|
|
81
|
-
// Re-export manager and factory functions
|
|
82
|
-
export { AuthManager, authManager, authenticate, createAuthHeaders, applyAuthToRequest, AuthError } from './manager.js';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JWT Authentication Provider
|
|
3
|
-
*
|
|
4
|
-
* Handles JWT bearer token authentication with support for:
|
|
5
|
-
* - Pre-existing tokens
|
|
6
|
-
* - OAuth2 token endpoint (client credentials flow)
|
|
7
|
-
* - Automatic token refresh
|
|
8
|
-
*/
|
|
9
|
-
import { AuthProvider, AuthResult, JWTAuthConfig } from './index.js';
|
|
10
|
-
export declare class JWTProvider implements AuthProvider<JWTAuthConfig> {
|
|
11
|
-
readonly type: "jwt";
|
|
12
|
-
authenticate(config: JWTAuthConfig): Promise<AuthResult>;
|
|
13
|
-
refresh(config: JWTAuthConfig): Promise<AuthResult>;
|
|
14
|
-
clear(config: JWTAuthConfig): Promise<void>;
|
|
15
|
-
validate(config: JWTAuthConfig): Promise<boolean>;
|
|
16
|
-
private fetchToken;
|
|
17
|
-
private createTokenResult;
|
|
18
|
-
private getCacheKey;
|
|
19
|
-
}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JWT Authentication Provider
|
|
3
|
-
*
|
|
4
|
-
* Handles JWT bearer token authentication with support for:
|
|
5
|
-
* - Pre-existing tokens
|
|
6
|
-
* - OAuth2 token endpoint (client credentials flow)
|
|
7
|
-
* - Automatic token refresh
|
|
8
|
-
*/
|
|
9
|
-
import { authCache, createCacheKey, parseToken } from './index.js';
|
|
10
|
-
export class JWTProvider {
|
|
11
|
-
type = 'jwt';
|
|
12
|
-
async authenticate(config) {
|
|
13
|
-
// If we have a pre-existing token, use it directly
|
|
14
|
-
if (config.token) {
|
|
15
|
-
return this.createTokenResult(config.token, config);
|
|
16
|
-
}
|
|
17
|
-
// If token_endpoint is provided, fetch token via OAuth2
|
|
18
|
-
if (config.token_endpoint) {
|
|
19
|
-
return await this.fetchToken(config);
|
|
20
|
-
}
|
|
21
|
-
return {
|
|
22
|
-
success: false,
|
|
23
|
-
error: 'JWT token or token_endpoint must be provided'
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
async refresh(config) {
|
|
27
|
-
if (!config.token_endpoint) {
|
|
28
|
-
return {
|
|
29
|
-
success: false,
|
|
30
|
-
error: 'Cannot refresh: no token_endpoint configured'
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return await this.fetchToken(config);
|
|
34
|
-
}
|
|
35
|
-
clear(config) {
|
|
36
|
-
const key = this.getCacheKey(config);
|
|
37
|
-
authCache.clear(key);
|
|
38
|
-
return Promise.resolve();
|
|
39
|
-
}
|
|
40
|
-
async validate(config) {
|
|
41
|
-
if (!config.token)
|
|
42
|
-
return false;
|
|
43
|
-
try {
|
|
44
|
-
const parts = config.token.split('.');
|
|
45
|
-
if (parts.length !== 3)
|
|
46
|
-
return false;
|
|
47
|
-
// Decode payload (no verification, just check structure)
|
|
48
|
-
const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
|
|
49
|
-
// Check expiration if present
|
|
50
|
-
if (payload.exp) {
|
|
51
|
-
const now = Math.floor(Date.now() / 1000);
|
|
52
|
-
return payload.exp > now;
|
|
53
|
-
}
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async fetchToken(config) {
|
|
61
|
-
const cacheKey = this.getCacheKey(config);
|
|
62
|
-
// Check cache first
|
|
63
|
-
if (config.cache?.enabled !== false) {
|
|
64
|
-
const cached = authCache.get(cacheKey);
|
|
65
|
-
if (cached) {
|
|
66
|
-
return { success: true, credentials: cached };
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// Prepare token request
|
|
70
|
-
const body = {
|
|
71
|
-
grant_type: 'client_credentials',
|
|
72
|
-
client_id: config.client_id,
|
|
73
|
-
client_secret: config.client_secret,
|
|
74
|
-
};
|
|
75
|
-
if (config.scopes && config.scopes.length > 0) {
|
|
76
|
-
body.scope = config.scopes.join(' ');
|
|
77
|
-
}
|
|
78
|
-
if (config.audience)
|
|
79
|
-
body.audience = config.audience;
|
|
80
|
-
try {
|
|
81
|
-
const endpoint = config.token_endpoint;
|
|
82
|
-
if (!endpoint) {
|
|
83
|
-
return { success: false, error: 'Token endpoint is required' };
|
|
84
|
-
}
|
|
85
|
-
const response = await fetch(endpoint, {
|
|
86
|
-
method: 'POST',
|
|
87
|
-
headers: {
|
|
88
|
-
'Content-Type': 'application/json',
|
|
89
|
-
},
|
|
90
|
-
body: JSON.stringify(body),
|
|
91
|
-
});
|
|
92
|
-
if (!response.ok) {
|
|
93
|
-
const error = await response.text().catch(() => 'Unknown error');
|
|
94
|
-
return {
|
|
95
|
-
success: false,
|
|
96
|
-
error: `Token request failed: ${response.status} ${error}`
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
const data = await response.json();
|
|
100
|
-
const token = data.access_token;
|
|
101
|
-
if (!token) {
|
|
102
|
-
return {
|
|
103
|
-
success: false,
|
|
104
|
-
error: 'No access_token in response'
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
return this.createTokenResult(token, config, data.expires_in);
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
return {
|
|
111
|
-
success: false,
|
|
112
|
-
error: `Token fetch failed: ${error.message}`
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
createTokenResult(token, config, expiresIn) {
|
|
117
|
-
const cleanToken = parseToken(token);
|
|
118
|
-
const credentials = {
|
|
119
|
-
type: 'jwt',
|
|
120
|
-
headers: {
|
|
121
|
-
'Authorization': `Bearer ${cleanToken}`
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
// Calculate expiration
|
|
125
|
-
let expiresAt;
|
|
126
|
-
if (expiresIn) {
|
|
127
|
-
expiresAt = Date.now() + expiresIn * 1000;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
// Try to decode JWT and get exp claim
|
|
131
|
-
try {
|
|
132
|
-
const parts = cleanToken.split('.');
|
|
133
|
-
if (parts.length === 3) {
|
|
134
|
-
const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
|
|
135
|
-
if (payload.exp) {
|
|
136
|
-
expiresAt = payload.exp * 1000;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
// Ignore decode errors
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Cache if enabled
|
|
145
|
-
if (config.cache?.enabled !== false && expiresAt) {
|
|
146
|
-
const ttl = config.cache?.ttl || Math.floor((expiresAt - Date.now()) / 1000);
|
|
147
|
-
const key = this.getCacheKey(config);
|
|
148
|
-
authCache.set(key, credentials, ttl);
|
|
149
|
-
}
|
|
150
|
-
return {
|
|
151
|
-
success: true,
|
|
152
|
-
credentials,
|
|
153
|
-
expiresAt
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
getCacheKey(config) {
|
|
157
|
-
const identifier = config.client_id || config.issuer || 'default';
|
|
158
|
-
return createCacheKey('jwt', identifier);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Authentication Manager and Factory
|
|
3
|
-
*
|
|
4
|
-
* Central manager for handling multiple authentication profiles
|
|
5
|
-
* and creating auth providers based on configuration.
|
|
6
|
-
*/
|
|
7
|
-
import { AuthProvider, AuthConfig, AuthResult, AuthCredentials } from './index.js';
|
|
8
|
-
/**
|
|
9
|
-
* Authentication error
|
|
10
|
-
*/
|
|
11
|
-
export declare class AuthError extends Error {
|
|
12
|
-
code: string;
|
|
13
|
-
provider?: string;
|
|
14
|
-
constructor(message: string, provider?: string);
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Authentication Manager
|
|
18
|
-
*
|
|
19
|
-
* Manages multiple authentication profiles and provides
|
|
20
|
-
* a unified interface for authentication operations.
|
|
21
|
-
*/
|
|
22
|
-
export declare class AuthManager {
|
|
23
|
-
private profiles;
|
|
24
|
-
/**
|
|
25
|
-
* Register an authentication profile
|
|
26
|
-
*/
|
|
27
|
-
registerProfile(name: string, config: AuthConfig): void;
|
|
28
|
-
/**
|
|
29
|
-
* Unregister an authentication profile
|
|
30
|
-
*/
|
|
31
|
-
unregisterProfile(name: string): void;
|
|
32
|
-
/**
|
|
33
|
-
* Get a registered profile
|
|
34
|
-
*/
|
|
35
|
-
getProfile(name: string): AuthConfig | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* List all registered profiles
|
|
38
|
-
*/
|
|
39
|
-
listProfiles(): string[];
|
|
40
|
-
/**
|
|
41
|
-
* Authenticate using a named profile
|
|
42
|
-
*/
|
|
43
|
-
authenticate(name: string): Promise<AuthResult>;
|
|
44
|
-
/**
|
|
45
|
-
* Authenticate using a configuration directly
|
|
46
|
-
*/
|
|
47
|
-
authenticateWithConfig(config: AuthConfig): Promise<AuthResult>;
|
|
48
|
-
/**
|
|
49
|
-
* Create an auth provider based on configuration type
|
|
50
|
-
*/
|
|
51
|
-
createProvider(config: AuthConfig): AuthProvider;
|
|
52
|
-
/**
|
|
53
|
-
* Refresh authentication for a named profile
|
|
54
|
-
*/
|
|
55
|
-
refresh(name: string): Promise<AuthResult>;
|
|
56
|
-
/**
|
|
57
|
-
* Clear authentication for a named profile
|
|
58
|
-
*/
|
|
59
|
-
clear(name: string): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Validate authentication for a named profile
|
|
62
|
-
*/
|
|
63
|
-
validate(name: string): Promise<boolean>;
|
|
64
|
-
/**
|
|
65
|
-
* Clear all cached credentials
|
|
66
|
-
*/
|
|
67
|
-
clearAll(): void;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Global auth manager instance
|
|
71
|
-
*/
|
|
72
|
-
export declare const authManager: AuthManager;
|
|
73
|
-
/**
|
|
74
|
-
* Helper function to authenticate with a single config
|
|
75
|
-
*/
|
|
76
|
-
export declare function authenticate(config: AuthConfig): Promise<AuthResult>;
|
|
77
|
-
/**
|
|
78
|
-
* Helper function to create auth credentials for use in requests
|
|
79
|
-
*/
|
|
80
|
-
export declare function createAuthHeaders(credentials: AuthCredentials): Record<string, string>;
|
|
81
|
-
/**
|
|
82
|
-
* Apply auth credentials to a fetch request init
|
|
83
|
-
*/
|
|
84
|
-
export declare function applyAuthToRequest(credentials: AuthCredentials, init?: RequestInit): RequestInit;
|