@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,354 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared CLI error formatting utilities
|
|
4
|
+
* Provides user-friendly, actionable error messages with optional debug information
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isDebugEnabled = isDebugEnabled;
|
|
8
|
+
exports.redactSecrets = redactSecrets;
|
|
9
|
+
exports.formatCliError = formatCliError;
|
|
10
|
+
exports.classifyError = classifyError;
|
|
11
|
+
const colors = {
|
|
12
|
+
reset: '\x1b[0m',
|
|
13
|
+
red: '\x1b[31m',
|
|
14
|
+
yellow: '\x1b[33m',
|
|
15
|
+
cyan: '\x1b[36m',
|
|
16
|
+
green: '\x1b[32m',
|
|
17
|
+
bold: '\x1b[1m',
|
|
18
|
+
dim: '\x1b[2m',
|
|
19
|
+
};
|
|
20
|
+
const c = {
|
|
21
|
+
red: (text) => `${colors.red}${text}${colors.reset}`,
|
|
22
|
+
yellow: (text) => `${colors.yellow}${text}${colors.reset}`,
|
|
23
|
+
cyan: (text) => `${colors.cyan}${text}${colors.reset}`,
|
|
24
|
+
green: (text) => `${colors.green}${text}${colors.reset}`,
|
|
25
|
+
bold: (text) => `${colors.bold}${text}${colors.reset}`,
|
|
26
|
+
dim: (text) => `${colors.dim}${text}${colors.reset}`,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Check if debug mode is enabled from argv or environment
|
|
30
|
+
*/
|
|
31
|
+
function isDebugEnabled(argv) {
|
|
32
|
+
// Support both array (process.argv) and object (parsed args)
|
|
33
|
+
if (Array.isArray(argv)) {
|
|
34
|
+
return argv.includes('--debug');
|
|
35
|
+
}
|
|
36
|
+
if (argv && typeof argv === 'object' && !Array.isArray(argv)) {
|
|
37
|
+
return !!argv.debug || !!argv.verbose;
|
|
38
|
+
}
|
|
39
|
+
return !!(process.env.DEBUG ||
|
|
40
|
+
process.env.GUARDRAIL_DEBUG ||
|
|
41
|
+
process.argv.includes('--debug'));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Redact secrets from text to prevent leaking API keys, tokens, etc.
|
|
45
|
+
*/
|
|
46
|
+
function redactSecrets(text) {
|
|
47
|
+
if (!text || typeof text !== 'string') {
|
|
48
|
+
return String(text || '');
|
|
49
|
+
}
|
|
50
|
+
let redacted = text;
|
|
51
|
+
// Redact API keys (apikey=, api_key=, apiKey=)
|
|
52
|
+
redacted = redacted.replace(/(?:apikey|api_key|apiKey)\s*=\s*([^\s"'&;]+)/gi, (match, key) => {
|
|
53
|
+
if (key.length > 8) {
|
|
54
|
+
return match.replace(key, key.substring(0, 4) + '***' + key.substring(key.length - 4));
|
|
55
|
+
}
|
|
56
|
+
return match.replace(key, '***');
|
|
57
|
+
});
|
|
58
|
+
// Redact tokens (token=, access_token=, bearer tokens)
|
|
59
|
+
redacted = redacted.replace(/(?:token|access_token|refresh_token)\s*=\s*([^\s"'&;]+)/gi, (match, token) => {
|
|
60
|
+
if (token.length > 8) {
|
|
61
|
+
return match.replace(token, token.substring(0, 4) + '***' + token.substring(token.length - 4));
|
|
62
|
+
}
|
|
63
|
+
return match.replace(token, '***');
|
|
64
|
+
});
|
|
65
|
+
// Redact Authorization headers (Authorization: Bearer, Authorization: Basic)
|
|
66
|
+
redacted = redacted.replace(/Authorization:\s*(?:Bearer|Basic)\s+([^\s"'&;]+)/gi, (match, auth) => {
|
|
67
|
+
if (auth.length > 8) {
|
|
68
|
+
return match.replace(auth, auth.substring(0, 4) + '***' + auth.substring(auth.length - 4));
|
|
69
|
+
}
|
|
70
|
+
return match.replace(auth, '***');
|
|
71
|
+
});
|
|
72
|
+
// Redact common secret patterns
|
|
73
|
+
const secretPatterns = [
|
|
74
|
+
/(?:password|pwd|passwd)\s*=\s*([^\s"'&;]+)/gi,
|
|
75
|
+
/(?:secret|secret_key)\s*=\s*([^\s"'&;]+)/gi,
|
|
76
|
+
/(?:private[_-]?key)\s*=\s*([^\s"'&;]+)/gi,
|
|
77
|
+
];
|
|
78
|
+
for (const pattern of secretPatterns) {
|
|
79
|
+
redacted = redacted.replace(pattern, (match, secret) => {
|
|
80
|
+
return match.replace(secret, '***REDACTED***');
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return redacted;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Extract file path from error message
|
|
87
|
+
*/
|
|
88
|
+
function extractPathFromMessage(message) {
|
|
89
|
+
const pathMatch = message.match(/['"]([^'"]+)['"]/);
|
|
90
|
+
return pathMatch ? pathMatch[1] : null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Determine error type and extract context
|
|
94
|
+
*/
|
|
95
|
+
function classifyError(err) {
|
|
96
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
97
|
+
const message = error.message || String(err);
|
|
98
|
+
const code = error.code || error.statusCode || error.name;
|
|
99
|
+
// API connection errors
|
|
100
|
+
if (code === 'ECONNREFUSED' ||
|
|
101
|
+
code === 'ECONNRESET' ||
|
|
102
|
+
code === 'ETIMEDOUT' ||
|
|
103
|
+
code === 'ENOTFOUND' ||
|
|
104
|
+
code === 'ENETUNREACH' ||
|
|
105
|
+
error.name === 'NetworkError' ||
|
|
106
|
+
message.includes('connect') ||
|
|
107
|
+
message.includes('network') ||
|
|
108
|
+
message.includes('timeout') ||
|
|
109
|
+
message.includes('ECONN')) {
|
|
110
|
+
return {
|
|
111
|
+
type: 'API_CONNECTION',
|
|
112
|
+
headline: 'Cannot connect to Guardrail API',
|
|
113
|
+
whatHappened: 'Failed to establish connection to the Guardrail service',
|
|
114
|
+
why: [
|
|
115
|
+
'Your internet connection may be down',
|
|
116
|
+
'The Guardrail service may be temporarily unavailable',
|
|
117
|
+
'A firewall or proxy may be blocking the connection',
|
|
118
|
+
],
|
|
119
|
+
whatToDo: [
|
|
120
|
+
'Check your internet connection',
|
|
121
|
+
'Verify the service status at https://status.getguardrail.io',
|
|
122
|
+
'Check firewall/proxy settings if behind a corporate network',
|
|
123
|
+
'Try again in a few moments',
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// File not found errors
|
|
128
|
+
if (code === 'ENOENT' ||
|
|
129
|
+
message.includes('not found') ||
|
|
130
|
+
message.includes('Cannot find') ||
|
|
131
|
+
message.includes('does not exist')) {
|
|
132
|
+
const path = error.path || extractPathFromMessage(message);
|
|
133
|
+
return {
|
|
134
|
+
type: 'FILE_NOT_FOUND',
|
|
135
|
+
headline: 'File or directory not found',
|
|
136
|
+
whatHappened: `The requested file or directory could not be located${path ? `: ${path}` : ''}`,
|
|
137
|
+
why: [
|
|
138
|
+
'The file may have been moved or deleted',
|
|
139
|
+
'The path may be incorrect',
|
|
140
|
+
'You may not have the required files in your project',
|
|
141
|
+
],
|
|
142
|
+
whatToDo: [
|
|
143
|
+
`Verify the path is correct${path ? `: ${path}` : ''}`,
|
|
144
|
+
'Check if the file exists in your project',
|
|
145
|
+
'Ensure you are running the command from the correct directory',
|
|
146
|
+
],
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Permission errors
|
|
150
|
+
if (code === 'EACCES' ||
|
|
151
|
+
code === 'EPERM' ||
|
|
152
|
+
message.includes('permission') ||
|
|
153
|
+
message.includes('access denied') ||
|
|
154
|
+
message.includes('Permission denied')) {
|
|
155
|
+
return {
|
|
156
|
+
type: 'PERMISSION',
|
|
157
|
+
headline: 'Permission denied',
|
|
158
|
+
whatHappened: 'You do not have permission to perform this operation',
|
|
159
|
+
why: [
|
|
160
|
+
'The file or directory may be owned by another user',
|
|
161
|
+
'Your user account may not have the required privileges',
|
|
162
|
+
'The file system may have restricted access',
|
|
163
|
+
],
|
|
164
|
+
whatToDo: [
|
|
165
|
+
'Check file permissions: `ls -la` (Unix) or check Properties (Windows)',
|
|
166
|
+
'Run with appropriate user privileges',
|
|
167
|
+
'Contact your system administrator if needed',
|
|
168
|
+
],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Configuration errors
|
|
172
|
+
if (code === 'EINVAL' ||
|
|
173
|
+
message.includes('invalid') ||
|
|
174
|
+
message.includes('configuration') ||
|
|
175
|
+
message.includes('config') ||
|
|
176
|
+
message.includes('missing') ||
|
|
177
|
+
error.name === 'ValidationError') {
|
|
178
|
+
return {
|
|
179
|
+
type: 'CONFIGURATION',
|
|
180
|
+
headline: 'Configuration error',
|
|
181
|
+
whatHappened: 'The configuration is invalid or missing required settings',
|
|
182
|
+
why: [
|
|
183
|
+
'Required configuration values may be missing',
|
|
184
|
+
'The configuration file may be malformed',
|
|
185
|
+
'Environment variables may not be set correctly',
|
|
186
|
+
],
|
|
187
|
+
whatToDo: [
|
|
188
|
+
'Check your .env file or configuration file',
|
|
189
|
+
'Verify all required environment variables are set',
|
|
190
|
+
'Run `guardrail login` if authentication is required',
|
|
191
|
+
'See documentation: https://docs.getguardrail.io',
|
|
192
|
+
],
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Authentication/Authorization errors
|
|
196
|
+
if (code === 401 ||
|
|
197
|
+
code === 'UNAUTHORIZED' ||
|
|
198
|
+
code === 403 ||
|
|
199
|
+
code === 'FORBIDDEN' ||
|
|
200
|
+
error.name === 'AuthenticationError' ||
|
|
201
|
+
message.includes('authentication') ||
|
|
202
|
+
message.includes('unauthorized') ||
|
|
203
|
+
message.includes('forbidden')) {
|
|
204
|
+
return {
|
|
205
|
+
type: 'AUTHENTICATION',
|
|
206
|
+
headline: code === 403 || code === 'FORBIDDEN' ? 'Access denied' : 'Authentication failed',
|
|
207
|
+
whatHappened: code === 403 || code === 'FORBIDDEN'
|
|
208
|
+
? 'You do not have permission to access this resource'
|
|
209
|
+
: 'Your authentication credentials are invalid or expired',
|
|
210
|
+
why: [
|
|
211
|
+
code === 403 || code === 'FORBIDDEN'
|
|
212
|
+
? 'Your account may not have the required permissions'
|
|
213
|
+
: 'Your API key may be missing, invalid, or expired',
|
|
214
|
+
'You may need to upgrade your plan for this feature',
|
|
215
|
+
],
|
|
216
|
+
whatToDo: [
|
|
217
|
+
code === 403 || code === 'FORBIDDEN'
|
|
218
|
+
? 'Check your account permissions and plan tier'
|
|
219
|
+
: 'Run `guardrail login` to authenticate',
|
|
220
|
+
'Verify your API key at https://getguardrail.io/settings/keys',
|
|
221
|
+
'Check if this feature requires a premium plan',
|
|
222
|
+
],
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Tier restriction errors
|
|
226
|
+
if (code === 'LIMIT_EXCEEDED' ||
|
|
227
|
+
code === 'FEATURE_NOT_AVAILABLE' ||
|
|
228
|
+
code === 'TIER_RESTRICTION' ||
|
|
229
|
+
message.includes('tier') ||
|
|
230
|
+
message.includes('upgrade') ||
|
|
231
|
+
message.includes('premium') ||
|
|
232
|
+
message.includes('limit')) {
|
|
233
|
+
return {
|
|
234
|
+
type: 'TIER_RESTRICTION',
|
|
235
|
+
headline: 'Feature not available on your plan',
|
|
236
|
+
whatHappened: 'This feature requires a higher tier subscription',
|
|
237
|
+
why: [
|
|
238
|
+
'Your current plan does not include this feature',
|
|
239
|
+
'You may have exceeded your usage limits',
|
|
240
|
+
],
|
|
241
|
+
whatToDo: [
|
|
242
|
+
'Visit https://getguardrail.io/pricing to upgrade',
|
|
243
|
+
'Check your usage limits: `guardrail status`',
|
|
244
|
+
'Contact support if you believe this is an error',
|
|
245
|
+
],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
// Generic error
|
|
249
|
+
return {
|
|
250
|
+
type: 'UNKNOWN',
|
|
251
|
+
headline: 'An error occurred',
|
|
252
|
+
whatHappened: message || 'An unexpected error occurred',
|
|
253
|
+
why: ['An unexpected error occurred during execution'],
|
|
254
|
+
whatToDo: [
|
|
255
|
+
'Check the error message above for details',
|
|
256
|
+
'Run with --debug for more information',
|
|
257
|
+
'If the issue persists, contact support',
|
|
258
|
+
],
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Format a CLI error with user-friendly structure
|
|
263
|
+
*/
|
|
264
|
+
function formatCliError(err, options = {}) {
|
|
265
|
+
const { debug = false, context = '' } = options;
|
|
266
|
+
const debugMode = isDebugEnabled(debug !== false ? debug : process.argv);
|
|
267
|
+
const classification = classifyError(err);
|
|
268
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
269
|
+
// Build the error message
|
|
270
|
+
const lines = [];
|
|
271
|
+
// Headline
|
|
272
|
+
lines.push(c.red(c.bold(`✗ ${classification.headline}`)));
|
|
273
|
+
lines.push('');
|
|
274
|
+
// What happened
|
|
275
|
+
lines.push(c.bold('What happened:'));
|
|
276
|
+
lines.push(` ${classification.whatHappened}`);
|
|
277
|
+
if (context) {
|
|
278
|
+
lines.push(` ${c.dim(`Context: ${context}`)}`);
|
|
279
|
+
}
|
|
280
|
+
lines.push('');
|
|
281
|
+
// Why it happened
|
|
282
|
+
if (classification.why && classification.why.length > 0) {
|
|
283
|
+
lines.push(c.bold('Why it happened:'));
|
|
284
|
+
classification.why.forEach((reason) => {
|
|
285
|
+
lines.push(` • ${reason}`);
|
|
286
|
+
});
|
|
287
|
+
lines.push('');
|
|
288
|
+
}
|
|
289
|
+
// What to do next
|
|
290
|
+
if (classification.whatToDo && classification.whatToDo.length > 0) {
|
|
291
|
+
lines.push(c.bold('What to do next:'));
|
|
292
|
+
classification.whatToDo.slice(0, 3).forEach((action) => {
|
|
293
|
+
lines.push(` • ${action}`);
|
|
294
|
+
});
|
|
295
|
+
lines.push('');
|
|
296
|
+
}
|
|
297
|
+
// Debug information
|
|
298
|
+
if (debugMode) {
|
|
299
|
+
lines.push(c.dim('─'.repeat(60)));
|
|
300
|
+
lines.push(c.dim(c.bold('Debug Information:')));
|
|
301
|
+
lines.push('');
|
|
302
|
+
// Stack trace
|
|
303
|
+
if (error.stack) {
|
|
304
|
+
lines.push(c.dim('Stack trace:'));
|
|
305
|
+
const redactedStack = redactSecrets(error.stack);
|
|
306
|
+
lines.push(c.dim(redactedStack));
|
|
307
|
+
lines.push('');
|
|
308
|
+
}
|
|
309
|
+
// Raw error details
|
|
310
|
+
lines.push(c.dim('Error details:'));
|
|
311
|
+
const errorDetails = {
|
|
312
|
+
name: error.name,
|
|
313
|
+
code: error.code || error.statusCode,
|
|
314
|
+
message: error.message,
|
|
315
|
+
};
|
|
316
|
+
if (error.response) {
|
|
317
|
+
errorDetails.response = {
|
|
318
|
+
status: error.response.status,
|
|
319
|
+
statusText: error.response.statusText,
|
|
320
|
+
body: redactSecrets(typeof error.response.body === 'string'
|
|
321
|
+
? error.response.body
|
|
322
|
+
: JSON.stringify(error.response.body || {})),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
if (error.body) {
|
|
326
|
+
errorDetails.body = redactSecrets(typeof error.body === 'string' ? error.body : JSON.stringify(error.body || {}));
|
|
327
|
+
}
|
|
328
|
+
const redactedDetails = redactSecrets(JSON.stringify(errorDetails, null, 2));
|
|
329
|
+
lines.push(c.dim(redactedDetails));
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
lines.push(c.dim('💡 Run with --debug for detailed error information'));
|
|
333
|
+
}
|
|
334
|
+
// Determine exit code based on error type
|
|
335
|
+
let exitCode = 1; // Default: verification failed
|
|
336
|
+
if (classification.type === 'FILE_NOT_FOUND' ||
|
|
337
|
+
classification.type === 'CONFIGURATION' ||
|
|
338
|
+
classification.type === 'PERMISSION' ||
|
|
339
|
+
classification.type === 'AUTHENTICATION') {
|
|
340
|
+
exitCode = 2; // User error
|
|
341
|
+
}
|
|
342
|
+
else if (classification.type === 'TIER_RESTRICTION') {
|
|
343
|
+
exitCode = 2; // User error (need to upgrade)
|
|
344
|
+
}
|
|
345
|
+
else if (classification.type === 'API_CONNECTION') {
|
|
346
|
+
exitCode = 1; // Verification failed (couldn't complete check)
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
exitCode,
|
|
350
|
+
message: lines.join('\n'),
|
|
351
|
+
type: classification.type,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=cli-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-errors.js","sourceRoot":"","sources":["../../src/runtime/cli-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise API Client
|
|
3
|
+
* - Real entitlement validation (no key prefix parsing)
|
|
4
|
+
* - Proper timeouts and retries with exponential backoff
|
|
5
|
+
* - User-agent for tracking
|
|
6
|
+
* - Circuit breaker pattern for resilience
|
|
7
|
+
*/
|
|
8
|
+
import { Tier } from './creds';
|
|
9
|
+
export interface AuthValidateRequest {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
client: {
|
|
12
|
+
version: string;
|
|
13
|
+
os: string;
|
|
14
|
+
arch: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface AuthValidateResponse {
|
|
18
|
+
ok: boolean;
|
|
19
|
+
tier: Tier;
|
|
20
|
+
email?: string;
|
|
21
|
+
entitlements?: string[];
|
|
22
|
+
expiresAt?: string;
|
|
23
|
+
issuedAt?: string;
|
|
24
|
+
reason?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ValidateResponse {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
tier: Tier;
|
|
29
|
+
email?: string;
|
|
30
|
+
entitlements?: string[];
|
|
31
|
+
expiresAt?: string;
|
|
32
|
+
issuedAt?: string;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ClientOptions {
|
|
36
|
+
baseUrl?: string;
|
|
37
|
+
timeout?: number;
|
|
38
|
+
maxRetries?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate API key against the enterprise auth endpoint
|
|
42
|
+
* POST /v1/cli/auth/validate with proper request format and retries
|
|
43
|
+
*/
|
|
44
|
+
export declare function validateApiKey(opts: {
|
|
45
|
+
apiKey: string;
|
|
46
|
+
baseUrl?: string;
|
|
47
|
+
timeout?: number;
|
|
48
|
+
maxRetries?: number;
|
|
49
|
+
}): Promise<ValidateResponse>;
|
|
50
|
+
/**
|
|
51
|
+
* Legacy validate function - wraps new validateApiKey for backwards compatibility
|
|
52
|
+
*/
|
|
53
|
+
export declare function validateCredentials(opts: {
|
|
54
|
+
apiKey?: string;
|
|
55
|
+
accessToken?: string;
|
|
56
|
+
baseUrl?: string;
|
|
57
|
+
timeout?: number;
|
|
58
|
+
}): Promise<ValidateResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* Refresh access token using refresh token
|
|
61
|
+
*/
|
|
62
|
+
export declare function refreshAccessToken(opts: {
|
|
63
|
+
refreshToken: string;
|
|
64
|
+
baseUrl?: string;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
accessToken?: string;
|
|
67
|
+
expiresIn?: number;
|
|
68
|
+
error?: string;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate cache expiry (15 minutes from now)
|
|
72
|
+
*/
|
|
73
|
+
export declare function getCacheExpiry(minutes?: number): string;
|
|
74
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0G5B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkD5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BxE;AAcD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAW,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enterprise API Client
|
|
4
|
+
* - Real entitlement validation (no key prefix parsing)
|
|
5
|
+
* - Proper timeouts and retries with exponential backoff
|
|
6
|
+
* - User-agent for tracking
|
|
7
|
+
* - Circuit breaker pattern for resilience
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.validateApiKey = validateApiKey;
|
|
11
|
+
exports.validateCredentials = validateCredentials;
|
|
12
|
+
exports.refreshAccessToken = refreshAccessToken;
|
|
13
|
+
exports.getCacheExpiry = getCacheExpiry;
|
|
14
|
+
const auth_utils_1 = require("./auth-utils");
|
|
15
|
+
const DEFAULT_API_BASE = process.env.GUARDRAIL_API_BASE_URL || 'https://api.guardrail.dev';
|
|
16
|
+
const DEFAULT_TIMEOUT = 10000;
|
|
17
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
18
|
+
const RETRY_DELAYS = [1000, 2000, 4000]; // Exponential backoff
|
|
19
|
+
/**
|
|
20
|
+
* Sleep utility for retry delays
|
|
21
|
+
*/
|
|
22
|
+
function sleep(ms) {
|
|
23
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate API key against the enterprise auth endpoint
|
|
27
|
+
* POST /v1/cli/auth/validate with proper request format and retries
|
|
28
|
+
*/
|
|
29
|
+
async function validateApiKey(opts) {
|
|
30
|
+
const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
|
|
31
|
+
const timeout = opts.timeout || DEFAULT_TIMEOUT;
|
|
32
|
+
const maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
33
|
+
const clientMeta = (0, auth_utils_1.getClientMetadata)();
|
|
34
|
+
const requestBody = {
|
|
35
|
+
apiKey: opts.apiKey,
|
|
36
|
+
client: clientMeta,
|
|
37
|
+
};
|
|
38
|
+
let lastError = 'Unknown error';
|
|
39
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
40
|
+
const controller = new AbortController();
|
|
41
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
42
|
+
try {
|
|
43
|
+
const res = await fetch(`${baseUrl}/v1/cli/auth/validate`, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'content-type': 'application/json',
|
|
47
|
+
'user-agent': `guardrail-cli/${clientMeta.version} (${clientMeta.os}; ${clientMeta.arch}; node ${process.version})`,
|
|
48
|
+
'x-client-version': clientMeta.version,
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify(requestBody),
|
|
51
|
+
signal: controller.signal,
|
|
52
|
+
});
|
|
53
|
+
clearTimeout(timeoutId);
|
|
54
|
+
if (!res.ok) {
|
|
55
|
+
const errorBody = await res.text().catch(() => '');
|
|
56
|
+
let errorMessage;
|
|
57
|
+
try {
|
|
58
|
+
const errorJson = JSON.parse(errorBody);
|
|
59
|
+
errorMessage = errorJson.reason || errorJson.message || errorJson.error || `HTTP ${res.status}`;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
errorMessage = `HTTP ${res.status}: ${res.statusText}`;
|
|
63
|
+
}
|
|
64
|
+
if (res.status === 401) {
|
|
65
|
+
return { ok: false, tier: 'free', error: 'Invalid or expired API key' };
|
|
66
|
+
}
|
|
67
|
+
if (res.status === 403) {
|
|
68
|
+
return { ok: false, tier: 'free', error: 'Access denied - API key revoked or suspended' };
|
|
69
|
+
}
|
|
70
|
+
if (res.status === 429) {
|
|
71
|
+
lastError = 'Rate limited - please try again later';
|
|
72
|
+
if (attempt < maxRetries) {
|
|
73
|
+
await sleep(RETRY_DELAYS[attempt] || 4000);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
return { ok: false, tier: 'free', error: lastError };
|
|
77
|
+
}
|
|
78
|
+
if (res.status >= 500) {
|
|
79
|
+
lastError = `Server error: ${errorMessage}`;
|
|
80
|
+
if (attempt < maxRetries) {
|
|
81
|
+
await sleep(RETRY_DELAYS[attempt] || 4000);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
return { ok: false, tier: 'free', error: lastError };
|
|
85
|
+
}
|
|
86
|
+
return { ok: false, tier: 'free', error: errorMessage };
|
|
87
|
+
}
|
|
88
|
+
const data = await res.json();
|
|
89
|
+
if (!data.ok) {
|
|
90
|
+
return {
|
|
91
|
+
ok: false,
|
|
92
|
+
tier: 'free',
|
|
93
|
+
error: data.reason || 'Validation failed'
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
ok: true,
|
|
98
|
+
tier: data.tier || 'free',
|
|
99
|
+
email: data.email,
|
|
100
|
+
entitlements: data.entitlements,
|
|
101
|
+
expiresAt: data.expiresAt,
|
|
102
|
+
issuedAt: data.issuedAt,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
clearTimeout(timeoutId);
|
|
107
|
+
if (err.name === 'AbortError') {
|
|
108
|
+
lastError = 'Request timed out';
|
|
109
|
+
}
|
|
110
|
+
else if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
|
|
111
|
+
lastError = 'Unable to reach Guardrail API - check your network connection';
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
lastError = `Network error: ${err.message}`;
|
|
115
|
+
}
|
|
116
|
+
if (attempt < maxRetries) {
|
|
117
|
+
await sleep(RETRY_DELAYS[attempt] || 4000);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { ok: false, tier: 'free', error: lastError };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Legacy validate function - wraps new validateApiKey for backwards compatibility
|
|
126
|
+
*/
|
|
127
|
+
async function validateCredentials(opts) {
|
|
128
|
+
if (!opts.apiKey && !opts.accessToken) {
|
|
129
|
+
return { ok: false, tier: 'free', error: 'No credentials provided' };
|
|
130
|
+
}
|
|
131
|
+
if (opts.apiKey) {
|
|
132
|
+
return validateApiKey({
|
|
133
|
+
apiKey: opts.apiKey,
|
|
134
|
+
baseUrl: opts.baseUrl,
|
|
135
|
+
timeout: opts.timeout,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// For access tokens, use the legacy endpoint
|
|
139
|
+
const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
|
|
140
|
+
const timeout = opts.timeout || DEFAULT_TIMEOUT;
|
|
141
|
+
const controller = new AbortController();
|
|
142
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
143
|
+
try {
|
|
144
|
+
const clientMeta = (0, auth_utils_1.getClientMetadata)();
|
|
145
|
+
const res = await fetch(`${baseUrl}/v1/cli/validate`, {
|
|
146
|
+
method: 'POST',
|
|
147
|
+
headers: {
|
|
148
|
+
'content-type': 'application/json',
|
|
149
|
+
'authorization': `Bearer ${opts.accessToken}`,
|
|
150
|
+
'user-agent': `guardrail-cli/${clientMeta.version} (node ${process.version})`,
|
|
151
|
+
},
|
|
152
|
+
body: JSON.stringify({ ts: new Date().toISOString() }),
|
|
153
|
+
signal: controller.signal,
|
|
154
|
+
});
|
|
155
|
+
clearTimeout(timeoutId);
|
|
156
|
+
if (!res.ok) {
|
|
157
|
+
if (res.status === 401) {
|
|
158
|
+
return { ok: false, tier: 'free', error: 'Invalid or expired credentials' };
|
|
159
|
+
}
|
|
160
|
+
return { ok: false, tier: 'free', error: `API error: ${res.status}` };
|
|
161
|
+
}
|
|
162
|
+
const data = await res.json();
|
|
163
|
+
return { ...data, ok: true };
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
clearTimeout(timeoutId);
|
|
167
|
+
if (err.name === 'AbortError') {
|
|
168
|
+
return { ok: false, tier: 'free', error: 'Request timed out' };
|
|
169
|
+
}
|
|
170
|
+
return { ok: false, tier: 'free', error: `Network error: ${err.message}` };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Refresh access token using refresh token
|
|
175
|
+
*/
|
|
176
|
+
async function refreshAccessToken(opts) {
|
|
177
|
+
const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
|
|
178
|
+
const controller = new AbortController();
|
|
179
|
+
const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT);
|
|
180
|
+
try {
|
|
181
|
+
const res = await fetch(`${baseUrl}/v1/cli/refresh`, {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers: {
|
|
184
|
+
'content-type': 'application/json',
|
|
185
|
+
'user-agent': `guardrail-cli/${getVersion()} (node ${process.version})`,
|
|
186
|
+
},
|
|
187
|
+
body: JSON.stringify({ refreshToken: opts.refreshToken }),
|
|
188
|
+
signal: controller.signal,
|
|
189
|
+
});
|
|
190
|
+
if (!res.ok) {
|
|
191
|
+
return { error: `Refresh failed: ${res.status}` };
|
|
192
|
+
}
|
|
193
|
+
return await res.json();
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
return { error: err.message };
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
clearTimeout(timeoutId);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get CLI version from package.json
|
|
204
|
+
*/
|
|
205
|
+
function getVersion() {
|
|
206
|
+
try {
|
|
207
|
+
const pkg = require('../../package.json');
|
|
208
|
+
return pkg.version || '0.0.0';
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return '0.0.0';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Calculate cache expiry (15 minutes from now)
|
|
216
|
+
*/
|
|
217
|
+
function getCacheExpiry(minutes = 15) {
|
|
218
|
+
const expiry = new Date();
|
|
219
|
+
expiry.setMinutes(expiry.getMinutes() + minutes);
|
|
220
|
+
return expiry.toISOString();
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=client.js.map
|