@indicated/vibeguard 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROGRESS.md +42 -13
- package/dist/api/license.d.ts +14 -2
- package/dist/api/license.d.ts.map +1 -1
- package/dist/api/license.js +49 -16
- package/dist/api/license.js.map +1 -1
- package/dist/cli/commands/scan.d.ts.map +1 -1
- package/dist/cli/commands/scan.js +7 -2
- package/dist/cli/commands/scan.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +70 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +3 -2
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +27 -4
- package/dist/cli/output.js.map +1 -1
- package/dist/scanner/index.d.ts +4 -1
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +15 -2
- package/dist/scanner/index.js.map +1 -1
- package/dist/scanner/parsers/javascript.d.ts.map +1 -1
- package/dist/scanner/parsers/javascript.js +6 -0
- package/dist/scanner/parsers/javascript.js.map +1 -1
- package/dist/scanner/parsers/python.d.ts.map +1 -1
- package/dist/scanner/parsers/python.js +2 -0
- package/dist/scanner/parsers/python.js.map +1 -1
- package/dist/scanner/rules/definitions.d.ts.map +1 -1
- package/dist/scanner/rules/definitions.js +52 -4
- package/dist/scanner/rules/definitions.js.map +1 -1
- package/dist/scanner/rules/loader.js +1 -1
- package/dist/scanner/rules/loader.js.map +1 -1
- package/dist/scanner/rules/matcher.d.ts.map +1 -1
- package/dist/scanner/rules/matcher.js +1 -0
- package/dist/scanner/rules/matcher.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/license.ts +53 -18
- package/src/cli/commands/scan.ts +8 -2
- package/src/cli/commands/upgrade.ts +76 -0
- package/src/cli/index.ts +2 -0
- package/src/cli/output.ts +28 -5
- package/src/scanner/index.ts +19 -3
- package/src/scanner/parsers/javascript.ts +6 -0
- package/src/scanner/parsers/python.ts +2 -0
- package/src/scanner/rules/definitions.ts +53 -4
- package/src/scanner/rules/loader.ts +1 -1
- package/src/scanner/rules/matcher.ts +1 -0
- package/src/types.ts +3 -0
package/PROGRESS.md
CHANGED
|
@@ -43,6 +43,7 @@ VibeGuard is a local CLI security scanner for AI-generated code. This document t
|
|
|
43
43
|
- [x] `--language` filter
|
|
44
44
|
- [x] `--json` output
|
|
45
45
|
- [x] `vibeguard login` / `vibeguard logout` - License key management
|
|
46
|
+
- [x] `vibeguard upgrade` - Show Pro features and pricing
|
|
46
47
|
- [x] Pretty terminal output with colors
|
|
47
48
|
- [x] Config file support (`.vibeguardrc.json`)
|
|
48
49
|
|
|
@@ -53,6 +54,19 @@ VibeGuard is a local CLI security scanner for AI-generated code. This document t
|
|
|
53
54
|
- [x] Offline mode fallback (works without server)
|
|
54
55
|
- [x] API client stubs ready for server integration
|
|
55
56
|
|
|
57
|
+
### Phase 5: Free/Pro Tier System
|
|
58
|
+
- [x] `Tier` type added (`'free' | 'pro'`)
|
|
59
|
+
- [x] All 45 rules categorized by tier:
|
|
60
|
+
- **Free Tier (24 rules):** Basic vulnerabilities - hardcoded secrets, SQL injection, XSS, eval, command injection, CSRF, SSRF, path traversal, etc.
|
|
61
|
+
- **Pro Tier (21 rules):** Framework-specific - Next.js (4), Django (5), FastAPI (2), NestJS (2), React (2), Express (3), Supabase, Firebase, missing-auth-route
|
|
62
|
+
- [x] `isRestricted` field on findings for gated content
|
|
63
|
+
- [x] `[PRO]` badge display for restricted findings
|
|
64
|
+
- [x] Upgrade prompt showing count of restricted findings
|
|
65
|
+
- [x] `vibeguard upgrade` command with pricing and features
|
|
66
|
+
- [x] Tier info in JSON output (`tier`, `isRestricted` fields)
|
|
67
|
+
- [x] License tier caching for offline mode
|
|
68
|
+
- [x] `getUserTier()` and `getCachedTier()` functions
|
|
69
|
+
|
|
56
70
|
### Bonus: MCP Integration
|
|
57
71
|
- [x] `vibeguard mcp` command to start MCP server
|
|
58
72
|
- [x] `scan_code` tool - Scan files/directories
|
|
@@ -64,13 +78,24 @@ VibeGuard is a local CLI security scanner for AI-generated code. This document t
|
|
|
64
78
|
|
|
65
79
|
## 🔲 Not Yet Implemented
|
|
66
80
|
|
|
67
|
-
### Server-Side (
|
|
81
|
+
### Server-Side: Website + Backend (Phase 2 - Future Session)
|
|
82
|
+
- [ ] Next.js 14+ website on Vercel
|
|
83
|
+
- [ ] Landing page with feature showcase
|
|
84
|
+
- [ ] Pricing page (Monthly $9, Annual $79)
|
|
85
|
+
- [ ] Documentation site
|
|
86
|
+
- [ ] User dashboard (license management, usage stats)
|
|
68
87
|
- [ ] License validation API (`POST /v1/license/validate`)
|
|
69
88
|
- [ ] License activation API (`POST /v1/license/activate`)
|
|
70
89
|
- [ ] Rules API (`GET /v1/rules`) for auto-updates
|
|
71
|
-
- [ ]
|
|
72
|
-
- [ ]
|
|
73
|
-
|
|
90
|
+
- [ ] Vercel Postgres database (users, licenses, activations tables)
|
|
91
|
+
- [ ] NextAuth.js or Clerk authentication
|
|
92
|
+
|
|
93
|
+
### Server-Side: Stripe Integration (Phase 3 - Future Session)
|
|
94
|
+
- [ ] Stripe product setup (Pro Monthly, Pro Annual)
|
|
95
|
+
- [ ] Checkout flow
|
|
96
|
+
- [ ] Webhook handlers for payment events
|
|
97
|
+
- [ ] License key email delivery
|
|
98
|
+
- [ ] Subscription management
|
|
74
99
|
|
|
75
100
|
### CLI Enhancements
|
|
76
101
|
- [ ] `vibeguard update` - Manual rule update command
|
|
@@ -139,14 +164,15 @@ vibeguard/
|
|
|
139
164
|
│ │ ├── init.ts # init command
|
|
140
165
|
│ │ ├── login.ts # login/logout commands
|
|
141
166
|
│ │ ├── rules.ts # rules command
|
|
142
|
-
│ │
|
|
167
|
+
│ │ ├── mcp.ts # mcp command
|
|
168
|
+
│ │ └── upgrade.ts # upgrade command (Pro features/pricing)
|
|
143
169
|
│ ├── scanner/
|
|
144
170
|
│ │ ├── index.ts # Main scanner logic
|
|
145
171
|
│ │ ├── parsers/
|
|
146
172
|
│ │ │ ├── javascript.ts # JS/TS AST + pattern scanning
|
|
147
173
|
│ │ │ └── python.ts # Python pattern scanning
|
|
148
174
|
│ │ └── rules/
|
|
149
|
-
│ │ ├── definitions.ts #
|
|
175
|
+
│ │ ├── definitions.ts # 45 security rules (24 free, 21 pro)
|
|
150
176
|
│ │ ├── loader.ts # Rule loading (local + API)
|
|
151
177
|
│ │ └── matcher.ts # Pattern matching utilities
|
|
152
178
|
│ ├── mcp/
|
|
@@ -167,11 +193,14 @@ vibeguard/
|
|
|
167
193
|
|
|
168
194
|
## 🚀 Next Steps (Recommended Order)
|
|
169
195
|
|
|
170
|
-
1. **
|
|
171
|
-
|
|
196
|
+
1. **Website + Backend (Phase 2)** - Build vibeguard-web on Vercel with Next.js
|
|
197
|
+
- Landing page, pricing, docs
|
|
198
|
+
- License validation API
|
|
199
|
+
- Vercel Postgres database
|
|
200
|
+
2. **Stripe Integration (Phase 3)** - Payment flow and license delivery
|
|
172
201
|
3. **npm Publish** - Get it in users' hands
|
|
173
|
-
4. **
|
|
174
|
-
5. **
|
|
202
|
+
4. **CI Integration** - SARIF output for GitHub/GitLab
|
|
203
|
+
5. **More Rules** - Expand rule coverage based on user feedback
|
|
175
204
|
|
|
176
205
|
---
|
|
177
206
|
|
|
@@ -179,13 +208,13 @@ vibeguard/
|
|
|
179
208
|
|
|
180
209
|
| Metric | Count |
|
|
181
210
|
|--------|-------|
|
|
182
|
-
| Security Rules | 45 |
|
|
183
|
-
| CLI Commands |
|
|
211
|
+
| Security Rules | 45 (24 free, 21 pro) |
|
|
212
|
+
| CLI Commands | 7 |
|
|
184
213
|
| MCP Tools | 3 |
|
|
185
214
|
| Supported Languages | 3 (JS, TS, Python) |
|
|
186
215
|
| Frameworks | 6 (Next.js, Django, FastAPI, NestJS, Express, React) |
|
|
187
216
|
| Unit Tests | 246 |
|
|
188
|
-
| Lines of TypeScript | ~2,
|
|
217
|
+
| Lines of TypeScript | ~2,200 |
|
|
189
218
|
|
|
190
219
|
---
|
|
191
220
|
|
package/dist/api/license.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
+
import { Tier } from '../types';
|
|
2
|
+
interface LicenseData {
|
|
3
|
+
key: string;
|
|
4
|
+
email?: string;
|
|
5
|
+
validUntil?: string;
|
|
6
|
+
tier?: Tier;
|
|
7
|
+
}
|
|
1
8
|
export declare function getLicenseKey(): string | null;
|
|
2
|
-
export declare function
|
|
9
|
+
export declare function getLicenseData(): LicenseData | null;
|
|
10
|
+
export declare function getCachedTier(): Tier;
|
|
11
|
+
export declare function saveLicenseKey(key: string, email?: string, tier?: Tier): void;
|
|
3
12
|
export declare function clearLicenseKey(): void;
|
|
4
13
|
export declare function validateLicense(key: string): Promise<{
|
|
5
14
|
valid: boolean;
|
|
6
15
|
message?: string;
|
|
7
|
-
tier
|
|
16
|
+
tier: Tier;
|
|
8
17
|
}>;
|
|
18
|
+
export declare function getUserTier(licenseKey?: string): Promise<Tier>;
|
|
9
19
|
export declare function activateLicense(email: string, key: string): Promise<{
|
|
10
20
|
success: boolean;
|
|
11
21
|
message: string;
|
|
22
|
+
tier: Tier;
|
|
12
23
|
}>;
|
|
24
|
+
export {};
|
|
13
25
|
//# sourceMappingURL=license.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/api/license.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/api/license.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAMhC,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAU7C;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CASnD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAO7E;AAED,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC,CAwCD;AAED,wBAAsB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpE;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAqC5D"}
|
package/dist/api/license.js
CHANGED
|
@@ -34,16 +34,19 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.getLicenseKey = getLicenseKey;
|
|
37
|
+
exports.getLicenseData = getLicenseData;
|
|
38
|
+
exports.getCachedTier = getCachedTier;
|
|
37
39
|
exports.saveLicenseKey = saveLicenseKey;
|
|
38
40
|
exports.clearLicenseKey = clearLicenseKey;
|
|
39
41
|
exports.validateLicense = validateLicense;
|
|
42
|
+
exports.getUserTier = getUserTier;
|
|
40
43
|
exports.activateLicense = activateLicense;
|
|
41
44
|
const fs = __importStar(require("fs"));
|
|
42
45
|
const path = __importStar(require("path"));
|
|
43
46
|
const os = __importStar(require("os"));
|
|
44
47
|
const CONFIG_DIR = path.join(os.homedir(), '.vibeguard');
|
|
45
48
|
const LICENSE_FILE = path.join(CONFIG_DIR, 'license.json');
|
|
46
|
-
const API_BASE_URL = process.env.VIBEGUARD_API_URL || 'https://
|
|
49
|
+
const API_BASE_URL = process.env.VIBEGUARD_API_URL || 'https://vibeguard-web.vercel.app';
|
|
47
50
|
function getLicenseKey() {
|
|
48
51
|
try {
|
|
49
52
|
if (fs.existsSync(LICENSE_FILE)) {
|
|
@@ -56,11 +59,26 @@ function getLicenseKey() {
|
|
|
56
59
|
}
|
|
57
60
|
return null;
|
|
58
61
|
}
|
|
59
|
-
function
|
|
62
|
+
function getLicenseData() {
|
|
63
|
+
try {
|
|
64
|
+
if (fs.existsSync(LICENSE_FILE)) {
|
|
65
|
+
return JSON.parse(fs.readFileSync(LICENSE_FILE, 'utf-8'));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Ignore errors
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
function getCachedTier() {
|
|
74
|
+
const data = getLicenseData();
|
|
75
|
+
return data?.tier || 'free';
|
|
76
|
+
}
|
|
77
|
+
function saveLicenseKey(key, email, tier) {
|
|
60
78
|
if (!fs.existsSync(CONFIG_DIR)) {
|
|
61
79
|
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
62
80
|
}
|
|
63
|
-
const data = { key, email };
|
|
81
|
+
const data = { key, email, tier: tier || 'pro' };
|
|
64
82
|
fs.writeFileSync(LICENSE_FILE, JSON.stringify(data, null, 2));
|
|
65
83
|
}
|
|
66
84
|
function clearLicenseKey() {
|
|
@@ -69,12 +87,12 @@ function clearLicenseKey() {
|
|
|
69
87
|
}
|
|
70
88
|
}
|
|
71
89
|
async function validateLicense(key) {
|
|
72
|
-
// For offline/development mode, accept any key
|
|
90
|
+
// For offline/development mode, accept any key and grant pro access
|
|
73
91
|
if (process.env.VIBEGUARD_OFFLINE === 'true') {
|
|
74
|
-
return { valid: true, tier: '
|
|
92
|
+
return { valid: true, tier: 'pro' };
|
|
75
93
|
}
|
|
76
94
|
try {
|
|
77
|
-
const response = await fetch(`${API_BASE_URL}/
|
|
95
|
+
const response = await fetch(`${API_BASE_URL}/api/license/validate`, {
|
|
78
96
|
method: 'POST',
|
|
79
97
|
headers: {
|
|
80
98
|
'Content-Type': 'application/json',
|
|
@@ -83,33 +101,44 @@ async function validateLicense(key) {
|
|
|
83
101
|
});
|
|
84
102
|
if (response.ok) {
|
|
85
103
|
const data = (await response.json());
|
|
104
|
+
// Map tier from API to our Tier type
|
|
105
|
+
const tier = data.tier === 'pro' ? 'pro' : 'free';
|
|
86
106
|
return {
|
|
87
107
|
valid: true,
|
|
88
|
-
tier
|
|
108
|
+
tier,
|
|
89
109
|
};
|
|
90
110
|
}
|
|
91
111
|
const error = (await response.json().catch(() => ({})));
|
|
92
112
|
return {
|
|
93
113
|
valid: false,
|
|
94
114
|
message: error.message || 'Invalid license key',
|
|
115
|
+
tier: 'free',
|
|
95
116
|
};
|
|
96
117
|
}
|
|
97
118
|
catch {
|
|
98
|
-
// If API is unreachable,
|
|
119
|
+
// If API is unreachable, use cached tier or default to free
|
|
120
|
+
const cachedTier = getCachedTier();
|
|
99
121
|
return {
|
|
100
122
|
valid: true,
|
|
101
123
|
message: 'Running in offline mode',
|
|
102
|
-
tier:
|
|
124
|
+
tier: cachedTier,
|
|
103
125
|
};
|
|
104
126
|
}
|
|
105
127
|
}
|
|
128
|
+
async function getUserTier(licenseKey) {
|
|
129
|
+
if (!licenseKey) {
|
|
130
|
+
return 'free';
|
|
131
|
+
}
|
|
132
|
+
const result = await validateLicense(licenseKey);
|
|
133
|
+
return result.tier;
|
|
134
|
+
}
|
|
106
135
|
async function activateLicense(email, key) {
|
|
107
136
|
if (process.env.VIBEGUARD_OFFLINE === 'true') {
|
|
108
|
-
saveLicenseKey(key, email);
|
|
109
|
-
return { success: true, message: 'License activated in offline mode' };
|
|
137
|
+
saveLicenseKey(key, email, 'pro');
|
|
138
|
+
return { success: true, message: 'License activated in offline mode', tier: 'pro' };
|
|
110
139
|
}
|
|
111
140
|
try {
|
|
112
|
-
const response = await fetch(`${API_BASE_URL}/
|
|
141
|
+
const response = await fetch(`${API_BASE_URL}/api/license/activate`, {
|
|
113
142
|
method: 'POST',
|
|
114
143
|
headers: {
|
|
115
144
|
'Content-Type': 'application/json',
|
|
@@ -117,21 +146,25 @@ async function activateLicense(email, key) {
|
|
|
117
146
|
body: JSON.stringify({ email, key }),
|
|
118
147
|
});
|
|
119
148
|
if (response.ok) {
|
|
120
|
-
|
|
121
|
-
|
|
149
|
+
const data = (await response.json());
|
|
150
|
+
const tier = data.tier === 'pro' ? 'pro' : 'free';
|
|
151
|
+
saveLicenseKey(key, email, tier);
|
|
152
|
+
return { success: true, message: 'License activated successfully', tier };
|
|
122
153
|
}
|
|
123
154
|
const error = (await response.json().catch(() => ({})));
|
|
124
155
|
return {
|
|
125
156
|
success: false,
|
|
126
157
|
message: error.message || 'Failed to activate license',
|
|
158
|
+
tier: 'free',
|
|
127
159
|
};
|
|
128
160
|
}
|
|
129
161
|
catch {
|
|
130
|
-
// Allow offline activation
|
|
131
|
-
saveLicenseKey(key, email);
|
|
162
|
+
// Allow offline activation - assume pro for offline mode
|
|
163
|
+
saveLicenseKey(key, email, 'pro');
|
|
132
164
|
return {
|
|
133
165
|
success: true,
|
|
134
166
|
message: 'License saved locally (offline mode)',
|
|
167
|
+
tier: 'pro',
|
|
135
168
|
};
|
|
136
169
|
}
|
|
137
170
|
}
|
package/dist/api/license.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/api/license.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/api/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAgF3C"}
|
|
@@ -68,17 +68,21 @@ function createScanCommand() {
|
|
|
68
68
|
}
|
|
69
69
|
// Output results
|
|
70
70
|
if (options.json) {
|
|
71
|
+
const userTier = scanner.getUserTier();
|
|
71
72
|
console.log(JSON.stringify({
|
|
72
73
|
version: packageJson.version,
|
|
74
|
+
tier: userTier,
|
|
73
75
|
files: result.files,
|
|
74
76
|
findings: result.findings.map(f => ({
|
|
75
77
|
rule: f.rule.id,
|
|
76
78
|
severity: f.rule.severity,
|
|
79
|
+
tier: f.rule.tier,
|
|
77
80
|
file: path.relative(cwd, f.file),
|
|
78
81
|
line: f.line,
|
|
79
82
|
column: f.column,
|
|
80
83
|
message: f.rule.name,
|
|
81
|
-
fix: f.rule.fix,
|
|
84
|
+
fix: f.isRestricted ? null : f.rule.fix,
|
|
85
|
+
isRestricted: f.isRestricted,
|
|
82
86
|
})),
|
|
83
87
|
duration: result.duration,
|
|
84
88
|
}, null, 2));
|
|
@@ -88,10 +92,11 @@ function createScanCommand() {
|
|
|
88
92
|
console.log((0, output_1.formatCleanResult)());
|
|
89
93
|
}
|
|
90
94
|
else {
|
|
95
|
+
const userTier = scanner.getUserTier();
|
|
91
96
|
for (const finding of result.findings) {
|
|
92
97
|
console.log((0, output_1.formatFinding)(finding, cwd));
|
|
93
98
|
}
|
|
94
|
-
console.log((0, output_1.formatSummary)(result));
|
|
99
|
+
console.log((0, output_1.formatSummary)(result, userTier));
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
// Determine exit code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,oBAAoB,IAAI,OAAO,CA4C9C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createUpgradeCommand = createUpgradeCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const license_1 = require("../../api/license");
|
|
6
|
+
const output_1 = require("../output");
|
|
7
|
+
// ANSI color codes
|
|
8
|
+
const colors = {
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
bold: '\x1b[1m',
|
|
11
|
+
dim: '\x1b[2m',
|
|
12
|
+
cyan: '\x1b[36m',
|
|
13
|
+
green: '\x1b[32m',
|
|
14
|
+
magenta: '\x1b[35m',
|
|
15
|
+
yellow: '\x1b[33m',
|
|
16
|
+
};
|
|
17
|
+
const PRO_FEATURES = [
|
|
18
|
+
'Next.js security rules (server actions, API routes, env exposure)',
|
|
19
|
+
'Django security rules (DEBUG mode, SECRET_KEY, raw SQL)',
|
|
20
|
+
'FastAPI security rules (auth dependencies, CORS)',
|
|
21
|
+
'NestJS security rules (auth guards, exception handling)',
|
|
22
|
+
'React security rules (javascript: URLs, URL state injection)',
|
|
23
|
+
'Express.js security rules (Helmet, body parser, sessions)',
|
|
24
|
+
'Supabase RLS detection',
|
|
25
|
+
'Firebase security rules detection',
|
|
26
|
+
];
|
|
27
|
+
const PRICING = {
|
|
28
|
+
monthly: { price: 9, period: 'month' },
|
|
29
|
+
annual: { price: 79, period: 'year', savings: 29 },
|
|
30
|
+
};
|
|
31
|
+
function createUpgradeCommand() {
|
|
32
|
+
const upgrade = new commander_1.Command('upgrade')
|
|
33
|
+
.description('View Pro features and upgrade options')
|
|
34
|
+
.action(() => {
|
|
35
|
+
const licenseKey = (0, license_1.getLicenseKey)();
|
|
36
|
+
const currentTier = (0, license_1.getCachedTier)();
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log(`${colors.cyan}${colors.bold}VibeGuard Pro${colors.reset}`);
|
|
39
|
+
console.log(`${colors.dim}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
|
|
40
|
+
console.log('');
|
|
41
|
+
if (currentTier === 'pro') {
|
|
42
|
+
console.log((0, output_1.formatSuccess)('You are already on the Pro plan!'));
|
|
43
|
+
console.log('');
|
|
44
|
+
console.log(`${colors.dim}License: ${licenseKey?.substring(0, 8)}...${colors.reset}`);
|
|
45
|
+
console.log('');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
console.log(`${colors.bold}Unlock framework-specific security scanning:${colors.reset}`);
|
|
49
|
+
console.log('');
|
|
50
|
+
for (const feature of PRO_FEATURES) {
|
|
51
|
+
console.log(` ${colors.green}✓${colors.reset} ${feature}`);
|
|
52
|
+
}
|
|
53
|
+
console.log('');
|
|
54
|
+
console.log(`${colors.dim}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(`${colors.bold}Pricing:${colors.reset}`);
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log(` ${colors.magenta}Monthly${colors.reset} $${PRICING.monthly.price}/${PRICING.monthly.period}`);
|
|
59
|
+
console.log(` ${colors.magenta}Annual${colors.reset} $${PRICING.annual.price}/${PRICING.annual.period} ${colors.green}(Save $${PRICING.annual.savings})${colors.reset}`);
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(`${colors.dim}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${colors.reset}`);
|
|
62
|
+
console.log('');
|
|
63
|
+
console.log((0, output_1.formatInfo)(`Visit ${colors.cyan}https://vibeguard.dev/pro${colors.reset} to upgrade`));
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log(`${colors.dim}After purchase, run: ${colors.reset}vibeguard login`);
|
|
66
|
+
console.log('');
|
|
67
|
+
});
|
|
68
|
+
return upgrade;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -7,6 +7,7 @@ const login_1 = require("./commands/login");
|
|
|
7
7
|
const init_1 = require("./commands/init");
|
|
8
8
|
const rules_1 = require("./commands/rules");
|
|
9
9
|
const mcp_1 = require("./commands/mcp");
|
|
10
|
+
const upgrade_1 = require("./commands/upgrade");
|
|
10
11
|
const packageJson = require('../../package.json');
|
|
11
12
|
const program = new commander_1.Command();
|
|
12
13
|
program
|
|
@@ -20,6 +21,7 @@ program.addCommand((0, login_1.createLogoutCommand)());
|
|
|
20
21
|
program.addCommand((0, init_1.createInitCommand)());
|
|
21
22
|
program.addCommand((0, rules_1.createRulesCommand)());
|
|
22
23
|
program.addCommand((0, mcp_1.createMcpCommand)());
|
|
24
|
+
program.addCommand((0, upgrade_1.createUpgradeCommand)());
|
|
23
25
|
// Parse and execute
|
|
24
26
|
program.parse();
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,4CAA2E;AAC3E,0CAAoD;AACpD,4CAAsD;AACtD,wCAAkD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,4CAA2E;AAC3E,0CAAoD;AACpD,4CAAsD;AACtD,wCAAkD;AAClD,gDAA0D;AAE1D,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,0BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,2BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,0BAAkB,GAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC;AAE3C,oBAAoB;AACpB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/cli/output.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Finding, ScanResult, Severity, SecurityRule } from '../types';
|
|
1
|
+
import { Finding, ScanResult, Severity, SecurityRule, Tier } from '../types';
|
|
2
2
|
export declare function formatSeverity(severity: Severity): string;
|
|
3
3
|
export declare function formatFinding(finding: Finding, cwd: string): string;
|
|
4
|
-
export declare function formatSummary(result: ScanResult): string;
|
|
4
|
+
export declare function formatSummary(result: ScanResult, userTier?: Tier): string;
|
|
5
|
+
export declare function formatUpgradePrompt(restrictedCount: number): string;
|
|
5
6
|
export declare function formatHeader(version: string): string;
|
|
6
7
|
export declare function formatScanning(fileCount: number): string;
|
|
7
8
|
export declare function formatSuccess(message: string): string;
|
package/dist/cli/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAkC7E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAIzD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAmBnE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,CAmCzE;AAED,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAMnE;AA2BD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAUrD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAI7D"}
|
package/dist/cli/output.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.formatSeverity = formatSeverity;
|
|
4
4
|
exports.formatFinding = formatFinding;
|
|
5
5
|
exports.formatSummary = formatSummary;
|
|
6
|
+
exports.formatUpgradePrompt = formatUpgradePrompt;
|
|
6
7
|
exports.formatHeader = formatHeader;
|
|
7
8
|
exports.formatScanning = formatScanning;
|
|
8
9
|
exports.formatSuccess = formatSuccess;
|
|
@@ -52,21 +53,32 @@ function formatFinding(finding, cwd) {
|
|
|
52
53
|
const location = `${relativePath}:${finding.line}`;
|
|
53
54
|
const severity = formatSeverity(finding.rule.severity);
|
|
54
55
|
let output = `\n${severity} ${colors.cyan}${location}${colors.reset}\n`;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
output += ` ${colors.
|
|
56
|
+
if (finding.isRestricted) {
|
|
57
|
+
// Show restricted message for pro-only rules when user is on free tier
|
|
58
|
+
output += ` ${colors.magenta}[PRO]${colors.reset} ${finding.rule.name}\n`;
|
|
59
|
+
output += ` ${colors.dim}→ Upgrade to Pro to see fix details${colors.reset}\n`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
output += ` ${finding.rule.name}\n`;
|
|
63
|
+
if (finding.rule.fix) {
|
|
64
|
+
output += ` ${colors.dim}→ ${finding.rule.fix}${colors.reset}\n`;
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
return output;
|
|
60
68
|
}
|
|
61
|
-
function formatSummary(result) {
|
|
69
|
+
function formatSummary(result, userTier) {
|
|
62
70
|
const counts = {
|
|
63
71
|
critical: 0,
|
|
64
72
|
high: 0,
|
|
65
73
|
medium: 0,
|
|
66
74
|
low: 0,
|
|
67
75
|
};
|
|
76
|
+
let restrictedCount = 0;
|
|
68
77
|
for (const finding of result.findings) {
|
|
69
78
|
counts[finding.rule.severity]++;
|
|
79
|
+
if (finding.isRestricted) {
|
|
80
|
+
restrictedCount++;
|
|
81
|
+
}
|
|
70
82
|
}
|
|
71
83
|
const total = result.findings.length;
|
|
72
84
|
const grade = calculateGrade(counts);
|
|
@@ -78,6 +90,17 @@ function formatSummary(result) {
|
|
|
78
90
|
output += `${colors.blue}${counts.medium} medium${colors.reset}, `;
|
|
79
91
|
output += `${colors.dim}${counts.low} low${colors.reset})\n\n`;
|
|
80
92
|
output += `Grade: ${formatGrade(grade)}\n`;
|
|
93
|
+
// Show upgrade prompt if there are restricted findings
|
|
94
|
+
if (restrictedCount > 0 && userTier === 'free') {
|
|
95
|
+
output += formatUpgradePrompt(restrictedCount);
|
|
96
|
+
}
|
|
97
|
+
return output;
|
|
98
|
+
}
|
|
99
|
+
function formatUpgradePrompt(restrictedCount) {
|
|
100
|
+
let output = '\n';
|
|
101
|
+
output += `${colors.magenta}${colors.bold}[PRO]${colors.reset} `;
|
|
102
|
+
output += `${restrictedCount} finding${restrictedCount !== 1 ? 's' : ''} require${restrictedCount === 1 ? 's' : ''} Pro to see details\n`;
|
|
103
|
+
output += `${colors.dim}Run ${colors.reset}${colors.cyan}vibeguard upgrade${colors.reset}${colors.dim} to unlock framework-specific security rules${colors.reset}\n`;
|
|
81
104
|
return output;
|
|
82
105
|
}
|
|
83
106
|
function calculateGrade(counts) {
|
package/dist/cli/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":";;AAkCA,wCAIC;AAED,
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner/index.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { ScanResult, SecurityRule, Config } from '../types';
|
|
1
|
+
import { ScanResult, SecurityRule, Config, Tier } from '../types';
|
|
2
2
|
export declare class Scanner {
|
|
3
3
|
private rules;
|
|
4
4
|
private config;
|
|
5
|
+
private userTier;
|
|
5
6
|
constructor(config?: Config);
|
|
6
7
|
initialize(licenseKey?: string): Promise<void>;
|
|
8
|
+
getUserTier(): Tier;
|
|
7
9
|
scan(targets: string[]): Promise<ScanResult>;
|
|
8
10
|
scanStaged(): Promise<ScanResult>;
|
|
9
11
|
private scanFile;
|
|
10
12
|
private isSupportedFile;
|
|
11
13
|
private sortFindings;
|
|
12
14
|
private deduplicateFindings;
|
|
15
|
+
private markRestrictedFindings;
|
|
13
16
|
getRules(): SecurityRule[];
|
|
14
17
|
}
|
|
15
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AA8B3E,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,MAAM,GAAE,MAAW;IAIzB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,WAAW,IAAI,IAAI;IAIb,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAoC5C,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;YAuCzB,QAAQ;IA2CtB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,sBAAsB;IAO9B,QAAQ,IAAI,YAAY,EAAE;CAG3B"}
|