guardrail-cli 1.0.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/README.md +483 -10
  2. package/dist/commands/baseline.d.ts +7 -0
  3. package/dist/commands/baseline.d.ts.map +1 -0
  4. package/dist/commands/baseline.js +79 -0
  5. package/dist/commands/baseline.js.map +1 -0
  6. package/dist/commands/cache.d.ts +13 -0
  7. package/dist/commands/cache.d.ts.map +1 -0
  8. package/dist/commands/cache.js +165 -0
  9. package/dist/commands/cache.js.map +1 -0
  10. package/dist/commands/evidence.d.ts +45 -0
  11. package/dist/commands/evidence.d.ts.map +1 -0
  12. package/dist/commands/evidence.js +197 -0
  13. package/dist/commands/evidence.js.map +1 -0
  14. package/dist/commands/index.d.ts +8 -0
  15. package/dist/commands/index.d.ts.map +1 -0
  16. package/dist/commands/index.js +15 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/scan-secrets.d.ts +47 -0
  19. package/dist/commands/scan-secrets.d.ts.map +1 -0
  20. package/dist/commands/scan-secrets.js +225 -0
  21. package/dist/commands/scan-secrets.js.map +1 -0
  22. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
  23. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
  24. package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
  25. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
  26. package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
  27. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
  28. package/dist/commands/scan-vulnerabilities-osv.js +716 -0
  29. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
  30. package/dist/commands/scan-vulnerabilities.d.ts +32 -0
  31. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
  32. package/dist/commands/scan-vulnerabilities.js +283 -0
  33. package/dist/commands/scan-vulnerabilities.js.map +1 -0
  34. package/dist/commands/secrets-allowlist.d.ts +7 -0
  35. package/dist/commands/secrets-allowlist.d.ts.map +1 -0
  36. package/dist/commands/secrets-allowlist.js +85 -0
  37. package/dist/commands/secrets-allowlist.js.map +1 -0
  38. package/dist/fix/applicator.d.ts +44 -0
  39. package/dist/fix/applicator.d.ts.map +1 -0
  40. package/dist/fix/applicator.js +144 -0
  41. package/dist/fix/applicator.js.map +1 -0
  42. package/dist/fix/backup.d.ts +38 -0
  43. package/dist/fix/backup.d.ts.map +1 -0
  44. package/dist/fix/backup.js +154 -0
  45. package/dist/fix/backup.js.map +1 -0
  46. package/dist/fix/engine.d.ts +55 -0
  47. package/dist/fix/engine.d.ts.map +1 -0
  48. package/dist/fix/engine.js +285 -0
  49. package/dist/fix/engine.js.map +1 -0
  50. package/dist/fix/index.d.ts +5 -0
  51. package/dist/fix/index.d.ts.map +1 -0
  52. package/dist/fix/index.js +12 -0
  53. package/dist/fix/index.js.map +1 -0
  54. package/dist/fix/interactive.d.ts +22 -0
  55. package/dist/fix/interactive.d.ts.map +1 -0
  56. package/dist/fix/interactive.js +172 -0
  57. package/dist/fix/interactive.js.map +1 -0
  58. package/dist/formatters/index.d.ts +6 -0
  59. package/dist/formatters/index.d.ts.map +1 -0
  60. package/dist/formatters/index.js +11 -0
  61. package/dist/formatters/index.js.map +1 -0
  62. package/dist/formatters/sarif-enhanced.d.ts +78 -0
  63. package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
  64. package/dist/formatters/sarif-enhanced.js +144 -0
  65. package/dist/formatters/sarif-enhanced.js.map +1 -0
  66. package/dist/formatters/sarif-v2.d.ts +121 -0
  67. package/dist/formatters/sarif-v2.d.ts.map +1 -0
  68. package/dist/formatters/sarif-v2.js +356 -0
  69. package/dist/formatters/sarif-v2.js.map +1 -0
  70. package/dist/formatters/sarif.d.ts +72 -0
  71. package/dist/formatters/sarif.d.ts.map +1 -0
  72. package/dist/formatters/sarif.js +146 -0
  73. package/dist/formatters/sarif.js.map +1 -0
  74. package/dist/index.js +3362 -1397
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/ci-generator.d.ts +18 -0
  77. package/dist/init/ci-generator.d.ts.map +1 -0
  78. package/dist/init/ci-generator.js +251 -0
  79. package/dist/init/ci-generator.js.map +1 -0
  80. package/dist/init/detect-framework.d.ts +15 -0
  81. package/dist/init/detect-framework.d.ts.map +1 -0
  82. package/dist/init/detect-framework.js +299 -0
  83. package/dist/init/detect-framework.js.map +1 -0
  84. package/dist/init/hooks-installer.d.ts +22 -0
  85. package/dist/init/hooks-installer.d.ts.map +1 -0
  86. package/dist/init/hooks-installer.js +302 -0
  87. package/dist/init/hooks-installer.js.map +1 -0
  88. package/dist/init/index.d.ts +8 -0
  89. package/dist/init/index.d.ts.map +1 -0
  90. package/dist/init/index.js +22 -0
  91. package/dist/init/index.js.map +1 -0
  92. package/dist/init/templates.d.ts +401 -0
  93. package/dist/init/templates.d.ts.map +1 -0
  94. package/dist/init/templates.js +240 -0
  95. package/dist/init/templates.js.map +1 -0
  96. package/dist/reality/reality-runner.d.ts +76 -0
  97. package/dist/reality/reality-runner.d.ts.map +1 -0
  98. package/dist/reality/reality-runner.js +454 -0
  99. package/dist/reality/reality-runner.js.map +1 -0
  100. package/dist/runtime/auth-utils.d.ts +43 -0
  101. package/dist/runtime/auth-utils.d.ts.map +1 -0
  102. package/dist/runtime/auth-utils.js +126 -0
  103. package/dist/runtime/auth-utils.js.map +1 -0
  104. package/dist/runtime/client.d.ts +74 -0
  105. package/dist/runtime/client.d.ts.map +1 -0
  106. package/dist/runtime/client.js +222 -0
  107. package/dist/runtime/client.js.map +1 -0
  108. package/dist/runtime/creds.d.ts +48 -0
  109. package/dist/runtime/creds.d.ts.map +1 -0
  110. package/dist/runtime/creds.js +245 -0
  111. package/dist/runtime/creds.js.map +1 -0
  112. package/dist/runtime/exit-codes.d.ts +47 -0
  113. package/dist/runtime/exit-codes.d.ts.map +1 -0
  114. package/dist/runtime/exit-codes.js +91 -0
  115. package/dist/runtime/exit-codes.js.map +1 -0
  116. package/dist/runtime/index.d.ts +9 -0
  117. package/dist/runtime/index.d.ts.map +1 -0
  118. package/dist/runtime/index.js +25 -0
  119. package/dist/runtime/index.js.map +1 -0
  120. package/dist/runtime/semver.d.ts +37 -0
  121. package/dist/runtime/semver.d.ts.map +1 -0
  122. package/dist/runtime/semver.js +110 -0
  123. package/dist/runtime/semver.js.map +1 -0
  124. package/dist/scanner/baseline.d.ts +52 -0
  125. package/dist/scanner/baseline.d.ts.map +1 -0
  126. package/dist/scanner/baseline.js +85 -0
  127. package/dist/scanner/baseline.js.map +1 -0
  128. package/dist/scanner/incremental.d.ts +30 -0
  129. package/dist/scanner/incremental.d.ts.map +1 -0
  130. package/dist/scanner/incremental.js +82 -0
  131. package/dist/scanner/incremental.js.map +1 -0
  132. package/dist/scanner/parallel.d.ts +43 -0
  133. package/dist/scanner/parallel.d.ts.map +1 -0
  134. package/dist/scanner/parallel.js +99 -0
  135. package/dist/scanner/parallel.js.map +1 -0
  136. package/dist/ui/frame.d.ts +68 -0
  137. package/dist/ui/frame.d.ts.map +1 -0
  138. package/dist/ui/frame.js +165 -0
  139. package/dist/ui/frame.js.map +1 -0
  140. package/dist/ui/index.d.ts +5 -0
  141. package/dist/ui/index.d.ts.map +1 -0
  142. package/dist/ui/index.js +16 -0
  143. package/dist/ui/index.js.map +1 -0
  144. package/package.json +42 -9
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * Enterprise Auth Utilities
4
+ * - Key masking for secure display
5
+ * - Expiry warning calculations
6
+ * - Cache validity checks
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.maskApiKey = maskApiKey;
10
+ exports.hoursUntilExpiry = hoursUntilExpiry;
11
+ exports.isExpiryWarning = isExpiryWarning;
12
+ exports.formatExpiry = formatExpiry;
13
+ exports.shouldUseCachedEntitlements = shouldUseCachedEntitlements;
14
+ exports.getClientMetadata = getClientMetadata;
15
+ exports.validateApiKeyFormat = validateApiKeyFormat;
16
+ /**
17
+ * Mask an API key for secure display
18
+ * Keeps prefix and last 4 characters: gr_pro_****abcd
19
+ */
20
+ function maskApiKey(apiKey) {
21
+ if (!apiKey || apiKey.length < 12) {
22
+ return '****';
23
+ }
24
+ // Find the prefix pattern (gr_tier_)
25
+ const prefixMatch = apiKey.match(/^(gr_[a-z]+_)/);
26
+ if (prefixMatch) {
27
+ const prefix = prefixMatch[1];
28
+ const suffix = apiKey.slice(-4);
29
+ const maskedLength = apiKey.length - prefix.length - 4;
30
+ return `${prefix}${'*'.repeat(Math.max(4, maskedLength))}${suffix}`;
31
+ }
32
+ // Fallback: show first 3 and last 4
33
+ const prefix = apiKey.slice(0, 3);
34
+ const suffix = apiKey.slice(-4);
35
+ return `${prefix}****${suffix}`;
36
+ }
37
+ /**
38
+ * Calculate hours until expiry
39
+ * Returns null if no expiry or already expired
40
+ */
41
+ function hoursUntilExpiry(expiresAt) {
42
+ if (!expiresAt)
43
+ return null;
44
+ const expiry = new Date(expiresAt);
45
+ const now = new Date();
46
+ if (expiry <= now)
47
+ return 0;
48
+ const diffMs = expiry.getTime() - now.getTime();
49
+ return Math.floor(diffMs / (1000 * 60 * 60));
50
+ }
51
+ /**
52
+ * Check if expiry is within warning threshold (72 hours)
53
+ */
54
+ function isExpiryWarning(expiresAt, thresholdHours = 72) {
55
+ const hours = hoursUntilExpiry(expiresAt);
56
+ if (hours === null)
57
+ return false;
58
+ return hours > 0 && hours <= thresholdHours;
59
+ }
60
+ /**
61
+ * Format expiry for display
62
+ */
63
+ function formatExpiry(expiresAt) {
64
+ const hours = hoursUntilExpiry(expiresAt);
65
+ if (hours === null)
66
+ return 'No expiry set';
67
+ if (hours === 0)
68
+ return 'Expired';
69
+ if (hours < 24)
70
+ return `${hours}h`;
71
+ const days = Math.floor(hours / 24);
72
+ const remainingHours = hours % 24;
73
+ if (days === 1)
74
+ return `1 day ${remainingHours}h`;
75
+ return `${days} days ${remainingHours}h`;
76
+ }
77
+ /**
78
+ * Check if cached entitlements should be reused
79
+ * Returns true if cache is valid and has > 5 minutes remaining
80
+ */
81
+ function shouldUseCachedEntitlements(expiresAt) {
82
+ if (!expiresAt)
83
+ return false;
84
+ const expiry = new Date(expiresAt);
85
+ const now = new Date();
86
+ const fiveMinutesFromNow = new Date(now.getTime() + 5 * 60 * 1000);
87
+ return expiry > fiveMinutesFromNow;
88
+ }
89
+ /**
90
+ * Get client metadata for API requests
91
+ */
92
+ function getClientMetadata() {
93
+ let version = '1.0.0';
94
+ try {
95
+ const pkg = require('../../package.json');
96
+ version = pkg.version || '1.0.0';
97
+ }
98
+ catch {
99
+ // Use default version
100
+ }
101
+ return {
102
+ version,
103
+ os: process.platform,
104
+ arch: process.arch,
105
+ };
106
+ }
107
+ /**
108
+ * Validate API key format
109
+ * Returns error message or null if valid
110
+ */
111
+ function validateApiKeyFormat(apiKey) {
112
+ if (!apiKey) {
113
+ return 'API key is required';
114
+ }
115
+ if (!apiKey.startsWith('gr_')) {
116
+ return 'API key must start with "gr_"';
117
+ }
118
+ if (apiKey.length < 20) {
119
+ return 'API key is too short';
120
+ }
121
+ if (!/^gr_[a-z]+_[a-zA-Z0-9]+$/.test(apiKey)) {
122
+ return 'API key format is invalid';
123
+ }
124
+ return null;
125
+ }
126
+ //# sourceMappingURL=auth-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-utils.js","sourceRoot":"","sources":["../../src/runtime/auth-utils.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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Enterprise Credential Store
3
+ * - OS keychain first (Keychain/Windows Credential Manager/libsecret)
4
+ * - Secure fallback with 0600 perms + atomic writes
5
+ * - Token-first model (short-lived tokens preferred over static API keys)
6
+ */
7
+ export type Tier = 'free' | 'starter' | 'pro' | 'enterprise';
8
+ export interface AuthState {
9
+ apiKey?: string;
10
+ accessToken?: string;
11
+ refreshToken?: string;
12
+ tier?: Tier;
13
+ email?: string;
14
+ entitlements?: string[];
15
+ authenticatedAt?: string;
16
+ cacheUntil?: string;
17
+ expiresAt?: string;
18
+ issuedAt?: string;
19
+ }
20
+ /**
21
+ * Load authentication state
22
+ * Prefers keychain for sensitive tokens, falls back to disk
23
+ */
24
+ export declare function loadAuthState(): Promise<AuthState>;
25
+ /**
26
+ * Save authentication state
27
+ * Stores sensitive tokens in keychain when available, non-sensitive data on disk
28
+ */
29
+ export declare function saveAuthState(next: AuthState): Promise<void>;
30
+ /**
31
+ * Clear all authentication state (logout)
32
+ */
33
+ export declare function clearAuthState(): Promise<void>;
34
+ /**
35
+ * Check if cached entitlements are still valid
36
+ * Uses the shorter of cacheUntil (local) or expiresAt (server)
37
+ */
38
+ export declare function isCacheValid(state: AuthState): boolean;
39
+ /**
40
+ * Check if entitlements should be reused from cache
41
+ * Returns true only if cache is valid AND has > 5 minutes remaining
42
+ */
43
+ export declare function shouldUseCachedEntitlements(state: AuthState): boolean;
44
+ /**
45
+ * Get config directory path (for display purposes)
46
+ */
47
+ export declare function getConfigPath(): string;
48
+ //# sourceMappingURL=creds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creds.d.ts","sourceRoot":"","sources":["../../src/runtime/creds.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgFD;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAwBxD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBlE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAmBtD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAoBrE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}