@vibecheckai/cli 2.5.1
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/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/autopatch/verified-autopatch.d.ts +111 -0
- package/dist/autopatch/verified-autopatch.d.ts.map +1 -0
- package/dist/autopatch/verified-autopatch.js +503 -0
- package/dist/autopatch/verified-autopatch.js.map +1 -0
- package/dist/bundles/guardrail-core.js +25799 -0
- package/dist/bundles/guardrail-security.js +208687 -0
- package/dist/bundles/guardrail-ship.js +2318 -0
- package/dist/bundles/index.js +8 -0
- package/dist/commands/autopilot-decision.d.ts +24 -0
- package/dist/commands/autopilot-decision.d.ts.map +1 -0
- package/dist/commands/autopilot-decision.js +304 -0
- package/dist/commands/autopilot-decision.js.map +1 -0
- package/dist/commands/autopilot.d.ts +33 -0
- package/dist/commands/autopilot.d.ts.map +1 -0
- package/dist/commands/autopilot.js +1539 -0
- package/dist/commands/autopilot.js.map +1 -0
- package/dist/commands/baseline.d.ts +7 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +79 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/cache.d.ts +13 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +165 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +8 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +35 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +340 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/debug.d.ts +78 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +381 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/doctor.d.ts +17 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +226 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/evidence.d.ts +45 -0
- package/dist/commands/evidence.d.ts.map +1 -0
- package/dist/commands/evidence.js +197 -0
- package/dist/commands/evidence.js.map +1 -0
- package/dist/commands/explain.d.ts +8 -0
- package/dist/commands/explain.d.ts.map +1 -0
- package/dist/commands/explain.js +52 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/fix-consolidated.d.ts +19 -0
- package/dist/commands/fix-consolidated.d.ts.map +1 -0
- package/dist/commands/fix-consolidated.js +165 -0
- package/dist/commands/fix-consolidated.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +125 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/launcher.d.ts +10 -0
- package/dist/commands/launcher.d.ts.map +1 -0
- package/dist/commands/launcher.js +174 -0
- package/dist/commands/launcher.js.map +1 -0
- package/dist/commands/on.d.ts +8 -0
- package/dist/commands/on.d.ts.map +1 -0
- package/dist/commands/on.js +123 -0
- package/dist/commands/on.js.map +1 -0
- package/dist/commands/preview.d.ts +54 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +352 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/quality/check.d.ts +31 -0
- package/dist/commands/quality/check.d.ts.map +1 -0
- package/dist/commands/quality/check.js +242 -0
- package/dist/commands/quality/check.js.map +1 -0
- package/dist/commands/quality/index.d.ts +8 -0
- package/dist/commands/quality/index.d.ts.map +1 -0
- package/dist/commands/quality/index.js +14 -0
- package/dist/commands/quality/index.js.map +1 -0
- package/dist/commands/quality/setup-quality.d.ts +23 -0
- package/dist/commands/quality/setup-quality.d.ts.map +1 -0
- package/dist/commands/quality/setup-quality.js +452 -0
- package/dist/commands/quality/setup-quality.js.map +1 -0
- package/dist/commands/quality/tidy.d.ts +41 -0
- package/dist/commands/quality/tidy.d.ts.map +1 -0
- package/dist/commands/quality/tidy.js +466 -0
- package/dist/commands/quality/tidy.js.map +1 -0
- package/dist/commands/quality/utils.d.ts +73 -0
- package/dist/commands/quality/utils.d.ts.map +1 -0
- package/dist/commands/quality/utils.js +158 -0
- package/dist/commands/quality/utils.js.map +1 -0
- package/dist/commands/replay.d.ts +8 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +52 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/scan-consolidated.d.ts +61 -0
- package/dist/commands/scan-consolidated.d.ts.map +1 -0
- package/dist/commands/scan-consolidated.js +243 -0
- package/dist/commands/scan-consolidated.js.map +1 -0
- package/dist/commands/scan-secrets.d.ts +47 -0
- package/dist/commands/scan-secrets.d.ts.map +1 -0
- package/dist/commands/scan-secrets.js +225 -0
- package/dist/commands/scan-secrets.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
- package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
- package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
- package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities-osv.js +716 -0
- package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
- package/dist/commands/scan-vulnerabilities.d.ts +32 -0
- package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
- package/dist/commands/scan-vulnerabilities.js +283 -0
- package/dist/commands/scan-vulnerabilities.js.map +1 -0
- package/dist/commands/secrets-allowlist.d.ts +7 -0
- package/dist/commands/secrets-allowlist.d.ts.map +1 -0
- package/dist/commands/secrets-allowlist.js +85 -0
- package/dist/commands/secrets-allowlist.js.map +1 -0
- package/dist/commands/ship-consolidated.d.ts +58 -0
- package/dist/commands/ship-consolidated.d.ts.map +1 -0
- package/dist/commands/ship-consolidated.js +515 -0
- package/dist/commands/ship-consolidated.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +134 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +30 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/fix/analytics.d.ts +121 -0
- package/dist/fix/analytics.d.ts.map +1 -0
- package/dist/fix/analytics.js +289 -0
- package/dist/fix/analytics.js.map +1 -0
- package/dist/fix/applicator.d.ts +44 -0
- package/dist/fix/applicator.d.ts.map +1 -0
- package/dist/fix/applicator.js +144 -0
- package/dist/fix/applicator.js.map +1 -0
- package/dist/fix/audit.d.ts +61 -0
- package/dist/fix/audit.d.ts.map +1 -0
- package/dist/fix/audit.js +149 -0
- package/dist/fix/audit.js.map +1 -0
- package/dist/fix/backup.d.ts +38 -0
- package/dist/fix/backup.d.ts.map +1 -0
- package/dist/fix/backup.js +154 -0
- package/dist/fix/backup.js.map +1 -0
- package/dist/fix/config.d.ts +78 -0
- package/dist/fix/config.d.ts.map +1 -0
- package/dist/fix/config.js +200 -0
- package/dist/fix/config.js.map +1 -0
- package/dist/fix/engine.d.ts +55 -0
- package/dist/fix/engine.d.ts.map +1 -0
- package/dist/fix/engine.js +285 -0
- package/dist/fix/engine.js.map +1 -0
- package/dist/fix/impact.d.ts +74 -0
- package/dist/fix/impact.d.ts.map +1 -0
- package/dist/fix/impact.js +281 -0
- package/dist/fix/impact.js.map +1 -0
- package/dist/fix/index.d.ts +5 -0
- package/dist/fix/index.d.ts.map +1 -0
- package/dist/fix/index.js +12 -0
- package/dist/fix/index.js.map +1 -0
- package/dist/fix/interactive.d.ts +22 -0
- package/dist/fix/interactive.d.ts.map +1 -0
- package/dist/fix/interactive.js +172 -0
- package/dist/fix/interactive.js.map +1 -0
- package/dist/fix/learning.d.ts +109 -0
- package/dist/fix/learning.d.ts.map +1 -0
- package/dist/fix/learning.js +296 -0
- package/dist/fix/learning.js.map +1 -0
- package/dist/fix/metrics.d.ts +106 -0
- package/dist/fix/metrics.d.ts.map +1 -0
- package/dist/fix/metrics.js +138 -0
- package/dist/fix/metrics.js.map +1 -0
- package/dist/fix/parallel.d.ts +69 -0
- package/dist/fix/parallel.d.ts.map +1 -0
- package/dist/fix/parallel.js +203 -0
- package/dist/fix/parallel.js.map +1 -0
- package/dist/fix/report.d.ts +40 -0
- package/dist/fix/report.d.ts.map +1 -0
- package/dist/fix/report.js +212 -0
- package/dist/fix/report.js.map +1 -0
- package/dist/fix/strategy.d.ts +53 -0
- package/dist/fix/strategy.d.ts.map +1 -0
- package/dist/fix/strategy.js +143 -0
- package/dist/fix/strategy.js.map +1 -0
- package/dist/fix/templates.d.ts +58 -0
- package/dist/fix/templates.d.ts.map +1 -0
- package/dist/fix/templates.js +259 -0
- package/dist/fix/templates.js.map +1 -0
- package/dist/fix/testing.d.ts +68 -0
- package/dist/fix/testing.d.ts.map +1 -0
- package/dist/fix/testing.js +245 -0
- package/dist/fix/testing.js.map +1 -0
- package/dist/fix/validation.d.ts +71 -0
- package/dist/fix/validation.d.ts.map +1 -0
- package/dist/fix/validation.js +267 -0
- package/dist/fix/validation.js.map +1 -0
- package/dist/fix/visualization.d.ts +73 -0
- package/dist/fix/visualization.d.ts.map +1 -0
- package/dist/fix/visualization.js +243 -0
- package/dist/fix/visualization.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +11 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/sarif-enhanced.d.ts +78 -0
- package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
- package/dist/formatters/sarif-enhanced.js +144 -0
- package/dist/formatters/sarif-enhanced.js.map +1 -0
- package/dist/formatters/sarif-v2.d.ts +121 -0
- package/dist/formatters/sarif-v2.d.ts.map +1 -0
- package/dist/formatters/sarif-v2.js +356 -0
- package/dist/formatters/sarif-v2.js.map +1 -0
- package/dist/formatters/sarif.d.ts +72 -0
- package/dist/formatters/sarif.d.ts.map +1 -0
- package/dist/formatters/sarif.js +146 -0
- package/dist/formatters/sarif.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4455 -0
- package/dist/index.js.map +1 -0
- package/dist/init/ci-generator.d.ts +18 -0
- package/dist/init/ci-generator.d.ts.map +1 -0
- package/dist/init/ci-generator.js +317 -0
- package/dist/init/ci-generator.js.map +1 -0
- package/dist/init/detect-framework.d.ts +15 -0
- package/dist/init/detect-framework.d.ts.map +1 -0
- package/dist/init/detect-framework.js +301 -0
- package/dist/init/detect-framework.js.map +1 -0
- package/dist/init/hooks-installer.d.ts +22 -0
- package/dist/init/hooks-installer.d.ts.map +1 -0
- package/dist/init/hooks-installer.js +310 -0
- package/dist/init/hooks-installer.js.map +1 -0
- package/dist/init/index.d.ts +8 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +22 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/templates.d.ts +401 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +240 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +42 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/telemetry.d.ts +40 -0
- package/dist/mcp/telemetry.d.ts.map +1 -0
- package/dist/mcp/telemetry.js +98 -0
- package/dist/mcp/telemetry.js.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +32 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js +236 -0
- package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +1 -0
- package/dist/reality/no-dead-buttons/index.d.ts +11 -0
- package/dist/reality/no-dead-buttons/index.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/index.js +18 -0
- package/dist/reality/no-dead-buttons/index.js.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts +34 -0
- package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +1 -0
- package/dist/reality/no-dead-buttons/static-scanner.js +230 -0
- package/dist/reality/no-dead-buttons/static-scanner.js.map +1 -0
- package/dist/reality/reality-graph.d.ts +192 -0
- package/dist/reality/reality-graph.d.ts.map +1 -0
- package/dist/reality/reality-graph.js +600 -0
- package/dist/reality/reality-graph.js.map +1 -0
- package/dist/reality/reality-runner.d.ts +89 -0
- package/dist/reality/reality-runner.d.ts.map +1 -0
- package/dist/reality/reality-runner.js +540 -0
- package/dist/reality/reality-runner.js.map +1 -0
- package/dist/reality/receipt-generator.d.ts +152 -0
- package/dist/reality/receipt-generator.d.ts.map +1 -0
- package/dist/reality/receipt-generator.js +495 -0
- package/dist/reality/receipt-generator.js.map +1 -0
- package/dist/reality/runtime-tracer.d.ts +75 -0
- package/dist/reality/runtime-tracer.d.ts.map +1 -0
- package/dist/reality/runtime-tracer.js +109 -0
- package/dist/reality/runtime-tracer.js.map +1 -0
- package/dist/runtime/auth-utils.d.ts +43 -0
- package/dist/runtime/auth-utils.d.ts.map +1 -0
- package/dist/runtime/auth-utils.js +130 -0
- package/dist/runtime/auth-utils.js.map +1 -0
- package/dist/runtime/cli-errors.d.ts +38 -0
- package/dist/runtime/cli-errors.d.ts.map +1 -0
- package/dist/runtime/cli-errors.js +354 -0
- package/dist/runtime/cli-errors.js.map +1 -0
- package/dist/runtime/client.d.ts +74 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +222 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/creds.d.ts +48 -0
- package/dist/runtime/creds.d.ts.map +1 -0
- package/dist/runtime/creds.js +245 -0
- package/dist/runtime/creds.js.map +1 -0
- package/dist/runtime/exit-codes.d.ts +49 -0
- package/dist/runtime/exit-codes.d.ts.map +1 -0
- package/dist/runtime/exit-codes.js +93 -0
- package/dist/runtime/exit-codes.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +25 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/json-output.d.ts +42 -0
- package/dist/runtime/json-output.d.ts.map +1 -0
- package/dist/runtime/json-output.js +59 -0
- package/dist/runtime/json-output.js.map +1 -0
- package/dist/runtime/owner-mode.d.ts +48 -0
- package/dist/runtime/owner-mode.d.ts.map +1 -0
- package/dist/runtime/owner-mode.js +284 -0
- package/dist/runtime/owner-mode.js.map +1 -0
- package/dist/runtime/semver.d.ts +37 -0
- package/dist/runtime/semver.d.ts.map +1 -0
- package/dist/runtime/semver.js +110 -0
- package/dist/runtime/semver.js.map +1 -0
- package/dist/scan/dead-ui-detector.d.ts +48 -0
- package/dist/scan/dead-ui-detector.d.ts.map +1 -0
- package/dist/scan/dead-ui-detector.js +170 -0
- package/dist/scan/dead-ui-detector.js.map +1 -0
- package/dist/scan/playwright-sweep.d.ts +40 -0
- package/dist/scan/playwright-sweep.d.ts.map +1 -0
- package/dist/scan/playwright-sweep.js +216 -0
- package/dist/scan/playwright-sweep.js.map +1 -0
- package/dist/scan/proof-bundle.d.ts +25 -0
- package/dist/scan/proof-bundle.d.ts.map +1 -0
- package/dist/scan/proof-bundle.js +203 -0
- package/dist/scan/proof-bundle.js.map +1 -0
- package/dist/scan/proof-graph.d.ts +59 -0
- package/dist/scan/proof-graph.d.ts.map +1 -0
- package/dist/scan/proof-graph.js +64 -0
- package/dist/scan/proof-graph.js.map +1 -0
- package/dist/scan/reality-sniff.d.ts +56 -0
- package/dist/scan/reality-sniff.d.ts.map +1 -0
- package/dist/scan/reality-sniff.js +200 -0
- package/dist/scan/reality-sniff.js.map +1 -0
- package/dist/scan/structural-verifier.d.ts +20 -0
- package/dist/scan/structural-verifier.d.ts.map +1 -0
- package/dist/scan/structural-verifier.js +112 -0
- package/dist/scan/structural-verifier.js.map +1 -0
- package/dist/scan/verification-engine.d.ts +47 -0
- package/dist/scan/verification-engine.d.ts.map +1 -0
- package/dist/scan/verification-engine.js +141 -0
- package/dist/scan/verification-engine.js.map +1 -0
- package/dist/scanner/baseline.d.ts +52 -0
- package/dist/scanner/baseline.d.ts.map +1 -0
- package/dist/scanner/baseline.js +85 -0
- package/dist/scanner/baseline.js.map +1 -0
- package/dist/scanner/incremental.d.ts +30 -0
- package/dist/scanner/incremental.d.ts.map +1 -0
- package/dist/scanner/incremental.js +82 -0
- package/dist/scanner/incremental.js.map +1 -0
- package/dist/scanner/index.d.ts +8 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +15 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/parallel.d.ts +43 -0
- package/dist/scanner/parallel.d.ts.map +1 -0
- package/dist/scanner/parallel.js +99 -0
- package/dist/scanner/parallel.js.map +1 -0
- package/dist/scanner/placeholder-detector.d.ts +56 -0
- package/dist/scanner/placeholder-detector.d.ts.map +1 -0
- package/dist/scanner/placeholder-detector.js +220 -0
- package/dist/scanner/placeholder-detector.js.map +1 -0
- package/dist/scanner/route-detector.d.ts +100 -0
- package/dist/scanner/route-detector.d.ts.map +1 -0
- package/dist/scanner/route-detector.js +455 -0
- package/dist/scanner/route-detector.js.map +1 -0
- package/dist/scanner/scoring.d.ts +67 -0
- package/dist/scanner/scoring.d.ts.map +1 -0
- package/dist/scanner/scoring.js +284 -0
- package/dist/scanner/scoring.js.map +1 -0
- package/dist/ship-baseline.d.ts +56 -0
- package/dist/ship-baseline.d.ts.map +1 -0
- package/dist/ship-baseline.js +194 -0
- package/dist/ship-baseline.js.map +1 -0
- package/dist/ship-config.d.ts +91 -0
- package/dist/ship-config.d.ts.map +1 -0
- package/dist/ship-config.js +133 -0
- package/dist/ship-config.js.map +1 -0
- package/dist/ship-data-loader.d.ts +70 -0
- package/dist/ship-data-loader.d.ts.map +1 -0
- package/dist/ship-data-loader.js +301 -0
- package/dist/ship-data-loader.js.map +1 -0
- package/dist/standalone.d.ts +1 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +1 -0
- package/dist/standalone.js.map +1 -0
- package/dist/truth-pack/index.d.ts +102 -0
- package/dist/truth-pack/index.d.ts.map +1 -0
- package/dist/truth-pack/index.js +694 -0
- package/dist/truth-pack/index.js.map +1 -0
- package/dist/ui/frame.d.ts +68 -0
- package/dist/ui/frame.d.ts.map +1 -0
- package/dist/ui/frame.js +165 -0
- package/dist/ui/frame.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui.d.ts +36 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +45 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/ai-helpers.d.ts +72 -0
- package/dist/utils/ai-helpers.d.ts.map +1 -0
- package/dist/utils/ai-helpers.js +339 -0
- package/dist/utils/ai-helpers.js.map +1 -0
- package/dist/utils/validation.d.ts +34 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +160 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner Mode Password Protection
|
|
3
|
+
* Provides secure password-based access control for owner mode
|
|
4
|
+
*/
|
|
5
|
+
export interface OwnerModeResult {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
verified: boolean;
|
|
8
|
+
reason?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get owner password hash from config
|
|
12
|
+
*/
|
|
13
|
+
export declare function getOwnerPasswordHash(): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Save owner password hash to config
|
|
16
|
+
*/
|
|
17
|
+
export declare function saveOwnerPasswordHash(passwordHash: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Hash password using SHA-256
|
|
20
|
+
*/
|
|
21
|
+
export declare function hashPassword(password: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Verify password against hash
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyPassword(password: string, hash: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Prompt for password securely (hide input)
|
|
28
|
+
* Cross-platform compatible
|
|
29
|
+
*/
|
|
30
|
+
export declare function promptPassword(message?: string): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Check if owner mode is enabled (requires password verification)
|
|
33
|
+
*/
|
|
34
|
+
export declare function isOwnerMode(requirePassword?: boolean): Promise<OwnerModeResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Synchronous check (for non-interactive contexts)
|
|
37
|
+
* Only checks environment variable, not password
|
|
38
|
+
*/
|
|
39
|
+
export declare function isOwnerModeSync(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Set owner password
|
|
42
|
+
*/
|
|
43
|
+
export declare function setOwnerPassword(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Remove owner password (disable password protection)
|
|
46
|
+
*/
|
|
47
|
+
export declare function removeOwnerPassword(): boolean;
|
|
48
|
+
//# sourceMappingURL=owner-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-mode.d.ts","sourceRoot":"","sources":["../../src/runtime/owner-mode.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAWpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiBhE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAiC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmEjG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,eAAe,GAAE,OAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA6C3F;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CA2BzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAiB7C"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Owner Mode Password Protection
|
|
4
|
+
* Provides secure password-based access control for owner mode
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.getOwnerPasswordHash = getOwnerPasswordHash;
|
|
41
|
+
exports.saveOwnerPasswordHash = saveOwnerPasswordHash;
|
|
42
|
+
exports.hashPassword = hashPassword;
|
|
43
|
+
exports.verifyPassword = verifyPassword;
|
|
44
|
+
exports.promptPassword = promptPassword;
|
|
45
|
+
exports.isOwnerMode = isOwnerMode;
|
|
46
|
+
exports.isOwnerModeSync = isOwnerModeSync;
|
|
47
|
+
exports.setOwnerPassword = setOwnerPassword;
|
|
48
|
+
exports.removeOwnerPassword = removeOwnerPassword;
|
|
49
|
+
const readline = __importStar(require("readline"));
|
|
50
|
+
const crypto = __importStar(require("crypto"));
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const creds_1 = require("./creds");
|
|
54
|
+
function getConfigPath() {
|
|
55
|
+
const configDir = (0, creds_1.getConfigDir)();
|
|
56
|
+
return path.join(configDir, 'config.json');
|
|
57
|
+
}
|
|
58
|
+
function ensureConfigDir(configPath) {
|
|
59
|
+
const dir = path.dirname(configPath);
|
|
60
|
+
if (!fs.existsSync(dir)) {
|
|
61
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get owner password hash from config
|
|
66
|
+
*/
|
|
67
|
+
function getOwnerPasswordHash() {
|
|
68
|
+
try {
|
|
69
|
+
const configPath = getConfigPath();
|
|
70
|
+
if (fs.existsSync(configPath)) {
|
|
71
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
72
|
+
return config.ownerPasswordHash || null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// ignore config errors
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save owner password hash to config
|
|
82
|
+
*/
|
|
83
|
+
function saveOwnerPasswordHash(passwordHash) {
|
|
84
|
+
const configPath = getConfigPath();
|
|
85
|
+
ensureConfigDir(configPath);
|
|
86
|
+
let config = {};
|
|
87
|
+
try {
|
|
88
|
+
if (fs.existsSync(configPath)) {
|
|
89
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
// ignore, start fresh
|
|
94
|
+
}
|
|
95
|
+
config.ownerPasswordHash = passwordHash;
|
|
96
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), {
|
|
97
|
+
mode: 0o600,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Hash password using SHA-256
|
|
102
|
+
*/
|
|
103
|
+
function hashPassword(password) {
|
|
104
|
+
return crypto.createHash('sha256').update(password).digest('hex');
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Verify password against hash
|
|
108
|
+
*/
|
|
109
|
+
function verifyPassword(password, hash) {
|
|
110
|
+
if (!password || !hash)
|
|
111
|
+
return false;
|
|
112
|
+
return hashPassword(password) === hash;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Prompt for password securely (hide input)
|
|
116
|
+
* Cross-platform compatible
|
|
117
|
+
*/
|
|
118
|
+
function promptPassword(message = 'Enter owner password: ') {
|
|
119
|
+
return new Promise((resolve) => {
|
|
120
|
+
// For Windows compatibility, use a simpler approach
|
|
121
|
+
if (process.platform === 'win32') {
|
|
122
|
+
// On Windows, use readline (password may be visible)
|
|
123
|
+
const rl = readline.createInterface({
|
|
124
|
+
input: process.stdin,
|
|
125
|
+
output: process.stdout,
|
|
126
|
+
});
|
|
127
|
+
rl.question(message, (password) => {
|
|
128
|
+
rl.close();
|
|
129
|
+
resolve(password || null);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Unix-like systems: use raw mode
|
|
134
|
+
const rl = readline.createInterface({
|
|
135
|
+
input: process.stdin,
|
|
136
|
+
output: process.stdout,
|
|
137
|
+
});
|
|
138
|
+
process.stdout.write(message);
|
|
139
|
+
process.stdin.setRawMode(true);
|
|
140
|
+
process.stdin.resume();
|
|
141
|
+
process.stdin.setEncoding('utf8');
|
|
142
|
+
let password = '';
|
|
143
|
+
const onData = (char) => {
|
|
144
|
+
const charStr = char.toString();
|
|
145
|
+
switch (charStr) {
|
|
146
|
+
case '\n':
|
|
147
|
+
case '\r':
|
|
148
|
+
case '\u0004': // Ctrl+D
|
|
149
|
+
process.stdin.setRawMode(false);
|
|
150
|
+
process.stdin.pause();
|
|
151
|
+
process.stdin.removeListener('data', onData);
|
|
152
|
+
rl.close();
|
|
153
|
+
process.stdout.write('\n');
|
|
154
|
+
resolve(password);
|
|
155
|
+
break;
|
|
156
|
+
case '\u0003': // Ctrl+C
|
|
157
|
+
process.stdin.setRawMode(false);
|
|
158
|
+
process.stdin.pause();
|
|
159
|
+
process.stdin.removeListener('data', onData);
|
|
160
|
+
rl.close();
|
|
161
|
+
process.stdout.write('\n');
|
|
162
|
+
resolve(null);
|
|
163
|
+
break;
|
|
164
|
+
case '\u007f': // Backspace
|
|
165
|
+
if (password.length > 0) {
|
|
166
|
+
password = password.slice(0, -1);
|
|
167
|
+
process.stdout.write('\b \b');
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
default:
|
|
171
|
+
if (charStr >= ' ') {
|
|
172
|
+
// Printable characters only
|
|
173
|
+
password += charStr;
|
|
174
|
+
process.stdout.write('*');
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
process.stdin.on('data', onData);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check if owner mode is enabled (requires password verification)
|
|
185
|
+
*/
|
|
186
|
+
async function isOwnerMode(requirePassword = true) {
|
|
187
|
+
// Check environment variable first (for CI/CD - can bypass password)
|
|
188
|
+
const envOwnerMode = !!(process.env.GUARDRAIL_OWNER_MODE === 'true' ||
|
|
189
|
+
process.env.GUARDRAIL_OWNER_MODE === '1' ||
|
|
190
|
+
process.env.GUARDRAIL_ADMIN === 'true');
|
|
191
|
+
if (envOwnerMode) {
|
|
192
|
+
// If password is set, require verification even with env var
|
|
193
|
+
const passwordHash = getOwnerPasswordHash();
|
|
194
|
+
if (passwordHash && requirePassword) {
|
|
195
|
+
// Password is set, require verification
|
|
196
|
+
const password = await promptPassword('Owner password: ');
|
|
197
|
+
if (!password) {
|
|
198
|
+
return { enabled: false, verified: false, reason: 'Password entry cancelled' };
|
|
199
|
+
}
|
|
200
|
+
if (!verifyPassword(password, passwordHash)) {
|
|
201
|
+
return { enabled: false, verified: false, reason: 'Invalid password' };
|
|
202
|
+
}
|
|
203
|
+
return { enabled: true, verified: true };
|
|
204
|
+
}
|
|
205
|
+
// No password set or password verification disabled
|
|
206
|
+
return { enabled: true, verified: !passwordHash };
|
|
207
|
+
}
|
|
208
|
+
// No environment variable - check if password is set
|
|
209
|
+
const passwordHash = getOwnerPasswordHash();
|
|
210
|
+
if (!passwordHash) {
|
|
211
|
+
return { enabled: false, verified: false, reason: 'Owner password not set' };
|
|
212
|
+
}
|
|
213
|
+
// Password is set, require verification
|
|
214
|
+
if (requirePassword) {
|
|
215
|
+
const password = await promptPassword('Owner password: ');
|
|
216
|
+
if (!password) {
|
|
217
|
+
return { enabled: false, verified: false, reason: 'Password entry cancelled' };
|
|
218
|
+
}
|
|
219
|
+
if (!verifyPassword(password, passwordHash)) {
|
|
220
|
+
return { enabled: false, verified: false, reason: 'Invalid password' };
|
|
221
|
+
}
|
|
222
|
+
return { enabled: true, verified: true };
|
|
223
|
+
}
|
|
224
|
+
return { enabled: false, verified: false, reason: 'Password verification required' };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Synchronous check (for non-interactive contexts)
|
|
228
|
+
* Only checks environment variable, not password
|
|
229
|
+
*/
|
|
230
|
+
function isOwnerModeSync() {
|
|
231
|
+
return !!(process.env.GUARDRAIL_OWNER_MODE === 'true' ||
|
|
232
|
+
process.env.GUARDRAIL_OWNER_MODE === '1' ||
|
|
233
|
+
process.env.GUARDRAIL_ADMIN === 'true');
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Set owner password
|
|
237
|
+
*/
|
|
238
|
+
async function setOwnerPassword() {
|
|
239
|
+
const password1 = await promptPassword('Enter new owner password: ');
|
|
240
|
+
if (!password1) {
|
|
241
|
+
console.error('Password entry cancelled.');
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
const password2 = await promptPassword('Confirm owner password: ');
|
|
245
|
+
if (!password2) {
|
|
246
|
+
console.error('Password confirmation cancelled.');
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
if (password1 !== password2) {
|
|
250
|
+
console.error('Passwords do not match.');
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
253
|
+
if (password1.length < 8) {
|
|
254
|
+
console.error('Password must be at least 8 characters long.');
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
const hash = hashPassword(password1);
|
|
258
|
+
saveOwnerPasswordHash(hash);
|
|
259
|
+
console.log('✓ Owner password set successfully.');
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Remove owner password (disable password protection)
|
|
264
|
+
*/
|
|
265
|
+
function removeOwnerPassword() {
|
|
266
|
+
try {
|
|
267
|
+
const configPath = getConfigPath();
|
|
268
|
+
if (fs.existsSync(configPath)) {
|
|
269
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
270
|
+
delete config.ownerPasswordHash;
|
|
271
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), {
|
|
272
|
+
mode: 0o600,
|
|
273
|
+
});
|
|
274
|
+
console.log('✓ Owner password removed. Environment variable only.');
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
console.error('Failed to remove owner password:', err.message);
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=owner-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-mode.js","sourceRoot":"","sources":["../../src/runtime/owner-mode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight Semver Utilities
|
|
3
|
+
* Proper version comparison for vulnerability checking
|
|
4
|
+
* (Avoids incorrect lexicographic comparison like "10.0.0" < "2.0.0")
|
|
5
|
+
*/
|
|
6
|
+
export interface SemverParts {
|
|
7
|
+
major: number;
|
|
8
|
+
minor: number;
|
|
9
|
+
patch: number;
|
|
10
|
+
prerelease?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse a semver string into components
|
|
14
|
+
* Handles formats: 1.2.3, 1.2.3-beta.1, ^1.2.3, ~1.2.3
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseSemver(version: string): SemverParts | null;
|
|
17
|
+
/**
|
|
18
|
+
* Compare two semver versions
|
|
19
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
20
|
+
*/
|
|
21
|
+
export declare function compareSemver(a: string, b: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Check if version is less than target
|
|
24
|
+
* Enterprise-grade: "10.0.0" is NOT less than "2.0.0"
|
|
25
|
+
*/
|
|
26
|
+
export declare function isVersionLessThan(version: string, target: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if version satisfies a range expression
|
|
29
|
+
* Supports: <1.2.3, <=1.2.3, >1.2.3, >=1.2.3, 1.2.3 (exact)
|
|
30
|
+
*/
|
|
31
|
+
export declare function satisfiesRange(version: string, range: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if version is affected by vulnerability
|
|
34
|
+
* affectedVersions format: "<4.17.21" or ">=1.0.0 <2.0.0"
|
|
35
|
+
*/
|
|
36
|
+
export declare function isAffected(version: string, affectedVersions: string): boolean;
|
|
37
|
+
//# sourceMappingURL=semver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.d.ts","sourceRoot":"","sources":["../../src/runtime/semver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAyB/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAkBtE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAM7E"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lightweight Semver Utilities
|
|
4
|
+
* Proper version comparison for vulnerability checking
|
|
5
|
+
* (Avoids incorrect lexicographic comparison like "10.0.0" < "2.0.0")
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parseSemver = parseSemver;
|
|
9
|
+
exports.compareSemver = compareSemver;
|
|
10
|
+
exports.isVersionLessThan = isVersionLessThan;
|
|
11
|
+
exports.satisfiesRange = satisfiesRange;
|
|
12
|
+
exports.isAffected = isAffected;
|
|
13
|
+
/**
|
|
14
|
+
* Parse a semver string into components
|
|
15
|
+
* Handles formats: 1.2.3, 1.2.3-beta.1, ^1.2.3, ~1.2.3
|
|
16
|
+
*/
|
|
17
|
+
function parseSemver(version) {
|
|
18
|
+
// Strip range prefixes
|
|
19
|
+
const cleaned = version.replace(/^[\^~>=<]+/, '').trim();
|
|
20
|
+
// Match semver pattern
|
|
21
|
+
const match = cleaned.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
|
|
22
|
+
if (!match) {
|
|
23
|
+
// Try partial versions (1.2, 1)
|
|
24
|
+
const partial = cleaned.match(/^(\d+)(?:\.(\d+))?$/);
|
|
25
|
+
if (partial) {
|
|
26
|
+
return {
|
|
27
|
+
major: parseInt(partial[1], 10),
|
|
28
|
+
minor: partial[2] ? parseInt(partial[2], 10) : 0,
|
|
29
|
+
patch: 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
major: parseInt(match[1], 10),
|
|
36
|
+
minor: parseInt(match[2], 10),
|
|
37
|
+
patch: parseInt(match[3], 10),
|
|
38
|
+
prerelease: match[4],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Compare two semver versions
|
|
43
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
44
|
+
*/
|
|
45
|
+
function compareSemver(a, b) {
|
|
46
|
+
const parsedA = parseSemver(a);
|
|
47
|
+
const parsedB = parseSemver(b);
|
|
48
|
+
if (!parsedA || !parsedB) {
|
|
49
|
+
// Fallback to string comparison if parsing fails
|
|
50
|
+
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
|
|
51
|
+
}
|
|
52
|
+
// Compare major.minor.patch
|
|
53
|
+
if (parsedA.major !== parsedB.major) {
|
|
54
|
+
return parsedA.major < parsedB.major ? -1 : 1;
|
|
55
|
+
}
|
|
56
|
+
if (parsedA.minor !== parsedB.minor) {
|
|
57
|
+
return parsedA.minor < parsedB.minor ? -1 : 1;
|
|
58
|
+
}
|
|
59
|
+
if (parsedA.patch !== parsedB.patch) {
|
|
60
|
+
return parsedA.patch < parsedB.patch ? -1 : 1;
|
|
61
|
+
}
|
|
62
|
+
// Handle prerelease (1.0.0-alpha < 1.0.0)
|
|
63
|
+
if (parsedA.prerelease && !parsedB.prerelease)
|
|
64
|
+
return -1;
|
|
65
|
+
if (!parsedA.prerelease && parsedB.prerelease)
|
|
66
|
+
return 1;
|
|
67
|
+
if (parsedA.prerelease && parsedB.prerelease) {
|
|
68
|
+
return parsedA.prerelease.localeCompare(parsedB.prerelease);
|
|
69
|
+
}
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if version is less than target
|
|
74
|
+
* Enterprise-grade: "10.0.0" is NOT less than "2.0.0"
|
|
75
|
+
*/
|
|
76
|
+
function isVersionLessThan(version, target) {
|
|
77
|
+
return compareSemver(version, target) < 0;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if version satisfies a range expression
|
|
81
|
+
* Supports: <1.2.3, <=1.2.3, >1.2.3, >=1.2.3, 1.2.3 (exact)
|
|
82
|
+
*/
|
|
83
|
+
function satisfiesRange(version, range) {
|
|
84
|
+
const trimmed = range.trim();
|
|
85
|
+
if (trimmed.startsWith('<=')) {
|
|
86
|
+
return compareSemver(version, trimmed.slice(2)) <= 0;
|
|
87
|
+
}
|
|
88
|
+
if (trimmed.startsWith('<')) {
|
|
89
|
+
return compareSemver(version, trimmed.slice(1)) < 0;
|
|
90
|
+
}
|
|
91
|
+
if (trimmed.startsWith('>=')) {
|
|
92
|
+
return compareSemver(version, trimmed.slice(2)) >= 0;
|
|
93
|
+
}
|
|
94
|
+
if (trimmed.startsWith('>')) {
|
|
95
|
+
return compareSemver(version, trimmed.slice(1)) > 0;
|
|
96
|
+
}
|
|
97
|
+
// Exact match
|
|
98
|
+
return compareSemver(version, trimmed) === 0;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if version is affected by vulnerability
|
|
102
|
+
* affectedVersions format: "<4.17.21" or ">=1.0.0 <2.0.0"
|
|
103
|
+
*/
|
|
104
|
+
function isAffected(version, affectedVersions) {
|
|
105
|
+
// Split on spaces for compound ranges
|
|
106
|
+
const parts = affectedVersions.split(/\s+/).filter(Boolean);
|
|
107
|
+
// All conditions must be satisfied
|
|
108
|
+
return parts.every(part => satisfiesRange(version, part));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=semver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/runtime/semver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No Dead UI Static Gate
|
|
3
|
+
*
|
|
4
|
+
* Fast pre-test gate that blocks obvious deadness:
|
|
5
|
+
* - href="#"
|
|
6
|
+
* - noop onClick={() => {}}
|
|
7
|
+
* - "coming soon" UI in prod surfaces
|
|
8
|
+
* - disabled buttons without reason text
|
|
9
|
+
* - raw fetch("/api/...") in components
|
|
10
|
+
*/
|
|
11
|
+
export interface DeadUIFinding {
|
|
12
|
+
id: string;
|
|
13
|
+
type: 'dead_link' | 'noop_handler' | 'coming_soon' | 'disabled_no_reason' | 'raw_fetch';
|
|
14
|
+
file: string;
|
|
15
|
+
line: number;
|
|
16
|
+
column?: number;
|
|
17
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
18
|
+
issue: string;
|
|
19
|
+
suggestion: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DeadUIScanResult {
|
|
22
|
+
findings: DeadUIFinding[];
|
|
23
|
+
summary: {
|
|
24
|
+
total: number;
|
|
25
|
+
critical: number;
|
|
26
|
+
high: number;
|
|
27
|
+
medium: number;
|
|
28
|
+
low: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare class DeadUIDetector {
|
|
32
|
+
private findings;
|
|
33
|
+
private findingCounter;
|
|
34
|
+
/**
|
|
35
|
+
* Scan for dead UI issues
|
|
36
|
+
*/
|
|
37
|
+
scan(projectPath: string, options?: {
|
|
38
|
+
exclude?: string[];
|
|
39
|
+
includeTests?: boolean;
|
|
40
|
+
}): Promise<DeadUIScanResult>;
|
|
41
|
+
private scanDirectory;
|
|
42
|
+
private scanFile;
|
|
43
|
+
private checkPatterns;
|
|
44
|
+
private hasReasonText;
|
|
45
|
+
private addFinding;
|
|
46
|
+
private getSuggestion;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=dead-ui-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-ui-detector.d.ts","sourceRoot":"","sources":["../../src/scan/dead-ui-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,oBAAoB,GAAG,WAAW,CAAC;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAyCD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAK;IAE3B;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAyBpB,aAAa;YAyBb,QAAQ;IAyEtB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;CAUtB"}
|