@oculum/cli 1.0.20 → 1.0.21
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/dist/index.js +18735 -16092
- package/package.json +7 -3
- package/dist/commands/auth.d.ts +0 -11
- package/dist/commands/auth.d.ts.map +0 -1
- package/dist/commands/auth.js +0 -156
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -23
- package/dist/commands/scan.d.ts.map +0 -1
- package/dist/commands/scan.js +0 -323
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -10
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -231
- package/dist/commands/watch.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/utils/api.d.ts +0 -42
- package/dist/utils/api.d.ts.map +0 -1
- package/dist/utils/api.js +0 -120
- package/dist/utils/api.js.map +0 -1
- package/dist/utils/config.d.ts +0 -50
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -91
- package/dist/utils/config.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oculum/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "AI-native security scanner CLI for detecting vulnerabilities in AI-generated code, BYOK patterns, and modern web applications",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"url": "https://github.com/flexipie/oculum/issues"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "esbuild src/index.ts --bundle --platform=node --target=node18 --outfile=dist/index.js --banner:js=\"#!/usr/bin/env node\" --define:process.env.OCULUM_API_URL='undefined' --define:VERSION='\"'$npm_package_version'\"'",
|
|
22
|
+
"build": "esbuild src/index.ts --bundle --platform=node --target=node18 --outfile=dist/index.js --banner:js=\"#!/usr/bin/env node\" --define:process.env.OCULUM_API_URL='undefined' --define:VERSION='\"'$npm_package_version'\"' --external:tree-sitter --external:tree-sitter-javascript --external:tree-sitter-typescript --external:tree-sitter-python && chmod +x dist/index.js",
|
|
23
23
|
"dev": "npm run build -- --watch",
|
|
24
24
|
"test": "echo \"No tests configured yet\"",
|
|
25
25
|
"lint": "eslint src/"
|
|
@@ -33,7 +33,11 @@
|
|
|
33
33
|
"commander": "^12.1.0",
|
|
34
34
|
"glob": "^11.0.0",
|
|
35
35
|
"minimatch": "^10.1.1",
|
|
36
|
-
"ora": "^8.1.1"
|
|
36
|
+
"ora": "^8.1.1",
|
|
37
|
+
"tree-sitter": "^0.21.1",
|
|
38
|
+
"tree-sitter-javascript": "^0.23.1",
|
|
39
|
+
"tree-sitter-python": "^0.21.0",
|
|
40
|
+
"tree-sitter-typescript": "^0.23.2"
|
|
37
41
|
},
|
|
38
42
|
"devDependencies": {
|
|
39
43
|
"@types/node": "^20",
|
package/dist/commands/auth.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth Commands
|
|
3
|
-
* Handle login, logout, and status
|
|
4
|
-
*/
|
|
5
|
-
import { Command } from 'commander';
|
|
6
|
-
/**
|
|
7
|
-
* Auth command group
|
|
8
|
-
*/
|
|
9
|
-
export declare const authCommand: Command;
|
|
10
|
-
export declare const loginCommand: Command;
|
|
11
|
-
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiJnC;;GAEG;AACH,eAAO,MAAM,WAAW,SACe,CAAA;AA+BvC,eAAO,MAAM,YAAY,SAGT,CAAA"}
|
package/dist/commands/auth.js
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Auth Commands
|
|
4
|
-
* Handle login, logout, and status
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.loginCommand = exports.authCommand = void 0;
|
|
11
|
-
const commander_1 = require("commander");
|
|
12
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
-
const ora_1 = __importDefault(require("ora"));
|
|
14
|
-
const config_js_1 = require("../utils/config.js");
|
|
15
|
-
const api_js_1 = require("../utils/api.js");
|
|
16
|
-
/**
|
|
17
|
-
* Login command
|
|
18
|
-
*/
|
|
19
|
-
async function login(options) {
|
|
20
|
-
const spinner = (0, ora_1.default)();
|
|
21
|
-
// If API key provided directly, verify and store it
|
|
22
|
-
if (options.apiKey) {
|
|
23
|
-
spinner.start('Verifying API key...');
|
|
24
|
-
const result = await (0, api_js_1.verifyApiKey)(options.apiKey);
|
|
25
|
-
if (!result.valid) {
|
|
26
|
-
spinner.fail('Invalid API key');
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
(0, config_js_1.setAuthCredentials)(options.apiKey, result.email, result.tier);
|
|
30
|
-
spinner.succeed('Logged in successfully!');
|
|
31
|
-
console.log(chalk_1.default.dim(` Email: ${result.email}`));
|
|
32
|
-
console.log(chalk_1.default.dim(` Tier: ${result.tier}`));
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
// Otherwise, use device flow
|
|
36
|
-
try {
|
|
37
|
-
spinner.start('Initiating login...');
|
|
38
|
-
const { authUrl, deviceCode } = await (0, api_js_1.initiateLogin)();
|
|
39
|
-
spinner.stop();
|
|
40
|
-
console.log('\nTo complete login:');
|
|
41
|
-
console.log(chalk_1.default.cyan(`\n 1. Open this URL in your browser:\n ${authUrl}`));
|
|
42
|
-
console.log(chalk_1.default.dim(`\n 2. Enter the code: ${chalk_1.default.bold(deviceCode)}`));
|
|
43
|
-
console.log(chalk_1.default.dim('\n Waiting for authorization...'));
|
|
44
|
-
// Poll for completion
|
|
45
|
-
spinner.start('Waiting for browser authorization...');
|
|
46
|
-
const maxAttempts = 60; // 5 minutes with 5s interval
|
|
47
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
48
|
-
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
49
|
-
const result = await (0, api_js_1.pollForLogin)(deviceCode);
|
|
50
|
-
if (result.complete) {
|
|
51
|
-
(0, config_js_1.setAuthCredentials)(result.apiKey, result.email, result.tier);
|
|
52
|
-
spinner.succeed('Logged in successfully!');
|
|
53
|
-
console.log(chalk_1.default.dim(` Email: ${result.email}`));
|
|
54
|
-
console.log(chalk_1.default.dim(` Tier: ${result.tier}`));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
spinner.fail('Login timed out. Please try again.');
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
spinner.fail(`Login failed: ${err}`);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Logout command
|
|
68
|
-
*/
|
|
69
|
-
function logout() {
|
|
70
|
-
if (!(0, config_js_1.isAuthenticated)()) {
|
|
71
|
-
console.log(chalk_1.default.yellow('Not logged in.'));
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
(0, config_js_1.clearAuth)();
|
|
75
|
-
console.log(chalk_1.default.green('Logged out successfully.'));
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Status command
|
|
79
|
-
*/
|
|
80
|
-
async function status() {
|
|
81
|
-
const config = (0, config_js_1.getConfig)();
|
|
82
|
-
console.log('\n' + chalk_1.default.bold('Oculum CLI Status'));
|
|
83
|
-
console.log(chalk_1.default.dim('─'.repeat(40)));
|
|
84
|
-
if (!(0, config_js_1.isAuthenticated)()) {
|
|
85
|
-
console.log(chalk_1.default.yellow('\nNot logged in.'));
|
|
86
|
-
console.log(chalk_1.default.dim('\nRun `oculum login` to authenticate.'));
|
|
87
|
-
console.log(chalk_1.default.dim('Free tier allows cheap (local) scans only.'));
|
|
88
|
-
console.log(chalk_1.default.dim('Paid tiers unlock AI-powered validated and deep scans.\n'));
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
// Verify the stored key is still valid
|
|
92
|
-
const spinner = (0, ora_1.default)('Verifying credentials...').start();
|
|
93
|
-
const result = await (0, api_js_1.verifyApiKey)(config.apiKey);
|
|
94
|
-
if (!result.valid) {
|
|
95
|
-
spinner.fail('Stored credentials are invalid or expired.');
|
|
96
|
-
console.log(chalk_1.default.dim('Run `oculum login` to re-authenticate.'));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
spinner.succeed('Authenticated');
|
|
100
|
-
console.log(chalk_1.default.dim(` Email: ${result.email || config.email}`));
|
|
101
|
-
console.log(chalk_1.default.dim(` Tier: ${result.tier || config.tier}`));
|
|
102
|
-
// Show tier capabilities
|
|
103
|
-
console.log('\n' + chalk_1.default.bold('Available Scan Depths:'));
|
|
104
|
-
const tier = result.tier || config.tier || 'free';
|
|
105
|
-
console.log(chalk_1.default.green(' cheap - Fast pattern matching (always available)'));
|
|
106
|
-
if (tier === 'pro' || tier === 'enterprise') {
|
|
107
|
-
console.log(chalk_1.default.green(' validated - AI-powered validation'));
|
|
108
|
-
console.log(chalk_1.default.green(' deep - Full AI semantic analysis'));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
console.log(chalk_1.default.dim(' validated - AI-powered validation (requires Pro)'));
|
|
112
|
-
console.log(chalk_1.default.dim(' deep - Full AI semantic analysis (requires Pro)'));
|
|
113
|
-
}
|
|
114
|
-
console.log('');
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Upgrade command (opens billing portal)
|
|
118
|
-
*/
|
|
119
|
-
function upgrade() {
|
|
120
|
-
console.log(chalk_1.default.cyan('\nTo upgrade your subscription, visit:'));
|
|
121
|
-
console.log(chalk_1.default.bold(' https://oculum.dev/billing\n'));
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Auth command group
|
|
125
|
-
*/
|
|
126
|
-
exports.authCommand = new commander_1.Command('auth')
|
|
127
|
-
.description('Manage authentication');
|
|
128
|
-
// Login subcommand
|
|
129
|
-
exports.authCommand
|
|
130
|
-
.command('login')
|
|
131
|
-
.description('Log in to Oculum')
|
|
132
|
-
.option('-k, --api-key <key>', 'API key (skip browser auth)')
|
|
133
|
-
.action(login);
|
|
134
|
-
// Logout subcommand
|
|
135
|
-
exports.authCommand
|
|
136
|
-
.command('logout')
|
|
137
|
-
.description('Log out from Oculum')
|
|
138
|
-
.action(logout);
|
|
139
|
-
// Status subcommand
|
|
140
|
-
exports.authCommand
|
|
141
|
-
.command('status')
|
|
142
|
-
.description('Show current authentication status')
|
|
143
|
-
.action(status);
|
|
144
|
-
// Upgrade subcommand
|
|
145
|
-
exports.authCommand
|
|
146
|
-
.command('upgrade')
|
|
147
|
-
.description('Upgrade your subscription')
|
|
148
|
-
.action(upgrade);
|
|
149
|
-
// Default: show status
|
|
150
|
-
exports.authCommand.action(status);
|
|
151
|
-
// Also export standalone login command for convenience
|
|
152
|
-
exports.loginCommand = new commander_1.Command('login')
|
|
153
|
-
.description('Log in to Oculum')
|
|
154
|
-
.option('-k, --api-key <key>', 'API key (skip browser auth)')
|
|
155
|
-
.action(login);
|
|
156
|
-
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,yCAAmC;AACnC,kDAAyB;AACzB,8CAAqB;AACrB,kDAK2B;AAC3B,4CAIwB;AAExB;;GAEG;AACH,KAAK,UAAU,KAAK,CAAC,OAA4B;IAC/C,MAAM,OAAO,GAAG,IAAA,aAAG,GAAE,CAAA;IAErB,oDAAoD;IACpD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,IAAA,8BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC7D,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,sBAAa,GAAE,CAAA;QAErD,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,OAAO,EAAE,CAAC,CAAC,CAAA;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAE1D,sBAAsB;QACtB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;QAErD,MAAM,WAAW,GAAG,EAAE,CAAA,CAAC,6BAA6B;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YAEvD,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAA;YAC7C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAA,8BAAkB,EAAC,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7D,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;gBAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAChD,OAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,MAAM;IACb,IAAI,CAAC,IAAA,2BAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;QAC3C,OAAM;IACR,CAAC;IAED,IAAA,qBAAS,GAAE,CAAA;IACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAA;AACtD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,MAAM;IACnB,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAA;IAE1B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtC,IAAI,CAAC,IAAA,2BAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAA;QACpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAA;QAClF,OAAM;IACR,CAAC;IAED,uCAAuC;IACvC,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAA;IACvD,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,MAAM,CAAC,MAAO,CAAC,CAAA;IAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAA;QAChE,OAAM;IACR,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAE/D,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAExD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAA;IAEjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAA;IAEjF,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAA;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAA;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,OAAO;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED;;GAEG;AACU,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,uBAAuB,CAAC,CAAA;AAEvC,mBAAmB;AACnB,mBAAW;KACR,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,KAAK,CAAC,CAAA;AAEhB,oBAAoB;AACpB,mBAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjB,oBAAoB;AACpB,mBAAW;KACR,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjB,qBAAqB;AACrB,mBAAW;KACR,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,OAAO,CAAC,CAAA;AAElB,uBAAuB;AACvB,mBAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAE1B,uDAAuD;AAC1C,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,KAAK,CAAC,CAAA"}
|
package/dist/commands/scan.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scan Command
|
|
3
|
-
* Main scanning functionality for the CLI
|
|
4
|
-
*/
|
|
5
|
-
import { Command } from 'commander';
|
|
6
|
-
export interface ScanOptions {
|
|
7
|
-
depth: 'cheap' | 'validated' | 'deep';
|
|
8
|
-
format: 'terminal' | 'json' | 'sarif' | 'markdown';
|
|
9
|
-
failOn: 'critical' | 'high' | 'medium' | 'low' | 'none';
|
|
10
|
-
color?: boolean;
|
|
11
|
-
incremental?: boolean;
|
|
12
|
-
diff?: string;
|
|
13
|
-
output?: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Main scan function
|
|
17
|
-
*/
|
|
18
|
-
export declare function runScan(targetPath: string, options: ScanOptions): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Scan command definition
|
|
21
|
-
*/
|
|
22
|
-
export declare const scanCommand: Command;
|
|
23
|
-
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwBnC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAA;IACrC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAClD,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IACvD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAuND;;GAEG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0GrF;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,SAUN,CAAA"}
|
package/dist/commands/scan.js
DELETED
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Scan Command
|
|
4
|
-
* Main scanning functionality for the CLI
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.scanCommand = void 0;
|
|
11
|
-
exports.runScan = runScan;
|
|
12
|
-
const commander_1 = require("commander");
|
|
13
|
-
const path_1 = require("path");
|
|
14
|
-
const fs_1 = require("fs");
|
|
15
|
-
const glob_1 = require("glob");
|
|
16
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
17
|
-
const ora_1 = __importDefault(require("ora"));
|
|
18
|
-
const scanner_1 = require("@oculum/scanner");
|
|
19
|
-
const formatters_1 = require("@oculum/scanner/formatters");
|
|
20
|
-
const config_js_1 = require("../utils/config.js");
|
|
21
|
-
const api_js_1 = require("../utils/api.js");
|
|
22
|
-
/**
|
|
23
|
-
* Check if file should be scanned
|
|
24
|
-
*/
|
|
25
|
-
function isScannableFile(filePath) {
|
|
26
|
-
const ext = (0, path_1.extname)(filePath).toLowerCase();
|
|
27
|
-
const fileName = (0, path_1.basename)(filePath);
|
|
28
|
-
// Check special files first
|
|
29
|
-
if (scanner_1.SPECIAL_FILES.includes(fileName)) {
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
// Check extensions
|
|
33
|
-
return scanner_1.SCANNABLE_EXTENSIONS.includes(ext);
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Map file extension to language
|
|
37
|
-
*/
|
|
38
|
-
function getLanguage(filePath) {
|
|
39
|
-
const ext = (0, path_1.extname)(filePath).toLowerCase();
|
|
40
|
-
const langMap = {
|
|
41
|
-
'.js': 'javascript',
|
|
42
|
-
'.jsx': 'javascript',
|
|
43
|
-
'.mjs': 'javascript',
|
|
44
|
-
'.cjs': 'javascript',
|
|
45
|
-
'.ts': 'typescript',
|
|
46
|
-
'.tsx': 'typescript',
|
|
47
|
-
'.py': 'python',
|
|
48
|
-
'.go': 'go',
|
|
49
|
-
'.java': 'java',
|
|
50
|
-
'.rb': 'ruby',
|
|
51
|
-
'.php': 'php',
|
|
52
|
-
'.cs': 'csharp',
|
|
53
|
-
'.yaml': 'yaml',
|
|
54
|
-
'.yml': 'yaml',
|
|
55
|
-
'.json': 'json',
|
|
56
|
-
'.toml': 'toml',
|
|
57
|
-
'.env': 'dotenv',
|
|
58
|
-
'.sh': 'shell',
|
|
59
|
-
'.bash': 'shell',
|
|
60
|
-
};
|
|
61
|
-
return langMap[ext] || 'text';
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Collect files to scan from a directory
|
|
65
|
-
*/
|
|
66
|
-
async function collectFiles(targetPath) {
|
|
67
|
-
const absolutePath = (0, path_1.resolve)(targetPath);
|
|
68
|
-
const stats = (0, fs_1.statSync)(absolutePath);
|
|
69
|
-
const files = [];
|
|
70
|
-
if (stats.isFile()) {
|
|
71
|
-
// Single file scan
|
|
72
|
-
if (isScannableFile(absolutePath)) {
|
|
73
|
-
const content = (0, fs_1.readFileSync)(absolutePath, 'utf-8');
|
|
74
|
-
if (content.length <= scanner_1.MAX_FILE_SIZE) {
|
|
75
|
-
files.push({
|
|
76
|
-
path: (0, path_1.relative)(process.cwd(), absolutePath),
|
|
77
|
-
content,
|
|
78
|
-
language: getLanguage(absolutePath),
|
|
79
|
-
size: content.length,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else if (stats.isDirectory()) {
|
|
85
|
-
// Directory scan - use glob to find all files
|
|
86
|
-
const patterns = [
|
|
87
|
-
'**/*.js',
|
|
88
|
-
'**/*.jsx',
|
|
89
|
-
'**/*.ts',
|
|
90
|
-
'**/*.tsx',
|
|
91
|
-
'**/*.py',
|
|
92
|
-
'**/*.go',
|
|
93
|
-
'**/*.java',
|
|
94
|
-
'**/*.rb',
|
|
95
|
-
'**/*.php',
|
|
96
|
-
'**/*.cs',
|
|
97
|
-
'**/*.yaml',
|
|
98
|
-
'**/*.yml',
|
|
99
|
-
'**/*.json',
|
|
100
|
-
'**/*.toml',
|
|
101
|
-
'**/*.env*',
|
|
102
|
-
'**/Dockerfile*',
|
|
103
|
-
'**/docker-compose*.yml',
|
|
104
|
-
'**/package.json',
|
|
105
|
-
'**/.env*',
|
|
106
|
-
];
|
|
107
|
-
const ignorePatterns = [
|
|
108
|
-
'**/node_modules/**',
|
|
109
|
-
'**/dist/**',
|
|
110
|
-
'**/build/**',
|
|
111
|
-
'**/.git/**',
|
|
112
|
-
'**/vendor/**',
|
|
113
|
-
'**/__pycache__/**',
|
|
114
|
-
'**/venv/**',
|
|
115
|
-
'**/.venv/**',
|
|
116
|
-
'**/coverage/**',
|
|
117
|
-
'**/.next/**',
|
|
118
|
-
'**/.nuxt/**',
|
|
119
|
-
];
|
|
120
|
-
const foundFiles = await (0, glob_1.glob)(patterns, {
|
|
121
|
-
cwd: absolutePath,
|
|
122
|
-
ignore: ignorePatterns,
|
|
123
|
-
nodir: true,
|
|
124
|
-
absolute: true,
|
|
125
|
-
});
|
|
126
|
-
for (const filePath of foundFiles) {
|
|
127
|
-
try {
|
|
128
|
-
const fileStats = (0, fs_1.statSync)(filePath);
|
|
129
|
-
if (fileStats.size > scanner_1.MAX_FILE_SIZE)
|
|
130
|
-
continue;
|
|
131
|
-
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
132
|
-
files.push({
|
|
133
|
-
path: (0, path_1.relative)(process.cwd(), filePath),
|
|
134
|
-
content,
|
|
135
|
-
language: getLanguage(filePath),
|
|
136
|
-
size: content.length,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
catch {
|
|
140
|
-
// Skip files that can't be read
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return files;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Format result based on output format
|
|
148
|
-
*/
|
|
149
|
-
function formatOutput(result, format, noColor) {
|
|
150
|
-
switch (format) {
|
|
151
|
-
case 'json':
|
|
152
|
-
return (0, formatters_1.formatJSON)(result, true);
|
|
153
|
-
case 'sarif':
|
|
154
|
-
return JSON.stringify((0, formatters_1.formatSARIF)(result), null, 2);
|
|
155
|
-
case 'markdown':
|
|
156
|
-
return formatMarkdown(result);
|
|
157
|
-
case 'terminal':
|
|
158
|
-
default:
|
|
159
|
-
return (0, formatters_1.formatTerminalOutput)(result, { noColor });
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Format as markdown (for docs/reports)
|
|
164
|
-
*/
|
|
165
|
-
function formatMarkdown(result) {
|
|
166
|
-
const { vulnerabilities, severityCounts, filesScanned, scanDuration } = result;
|
|
167
|
-
let md = `# Oculum Security Scan Report\n\n`;
|
|
168
|
-
md += `**Scanned:** ${filesScanned} files in ${(scanDuration / 1000).toFixed(1)}s\n\n`;
|
|
169
|
-
// Summary table
|
|
170
|
-
md += `## Summary\n\n`;
|
|
171
|
-
md += `| Severity | Count |\n`;
|
|
172
|
-
md += `|----------|-------|\n`;
|
|
173
|
-
md += `| Critical | ${severityCounts.critical} |\n`;
|
|
174
|
-
md += `| High | ${severityCounts.high} |\n`;
|
|
175
|
-
md += `| Medium | ${severityCounts.medium} |\n`;
|
|
176
|
-
md += `| Low | ${severityCounts.low} |\n`;
|
|
177
|
-
md += `| Info | ${severityCounts.info} |\n\n`;
|
|
178
|
-
if (vulnerabilities.length === 0) {
|
|
179
|
-
md += `## Findings\n\n`;
|
|
180
|
-
md += `No security issues found.\n`;
|
|
181
|
-
return md;
|
|
182
|
-
}
|
|
183
|
-
// Findings by severity
|
|
184
|
-
md += `## Findings\n\n`;
|
|
185
|
-
for (const severity of ['critical', 'high', 'medium', 'low', 'info']) {
|
|
186
|
-
const findings = vulnerabilities.filter(v => v.severity === severity);
|
|
187
|
-
if (findings.length === 0)
|
|
188
|
-
continue;
|
|
189
|
-
md += `### ${severity.charAt(0).toUpperCase() + severity.slice(1)} (${findings.length})\n\n`;
|
|
190
|
-
for (const finding of findings) {
|
|
191
|
-
md += `#### ${finding.title}\n\n`;
|
|
192
|
-
md += `- **File:** \`${finding.filePath}:${finding.lineNumber}\`\n`;
|
|
193
|
-
md += `- **Category:** ${finding.category}\n`;
|
|
194
|
-
md += `- **Description:** ${finding.description}\n`;
|
|
195
|
-
if (finding.suggestedFix) {
|
|
196
|
-
md += `- **Fix:** ${finding.suggestedFix}\n`;
|
|
197
|
-
}
|
|
198
|
-
md += `\n`;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return md;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get severity rank for comparison
|
|
205
|
-
*/
|
|
206
|
-
function severityRank(severity) {
|
|
207
|
-
const ranks = {
|
|
208
|
-
critical: 5,
|
|
209
|
-
high: 4,
|
|
210
|
-
medium: 3,
|
|
211
|
-
low: 2,
|
|
212
|
-
info: 1,
|
|
213
|
-
none: 0,
|
|
214
|
-
};
|
|
215
|
-
return ranks[severity] || 0;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Main scan function
|
|
219
|
-
*/
|
|
220
|
-
async function runScan(targetPath, options) {
|
|
221
|
-
const spinner = (0, ora_1.default)();
|
|
222
|
-
const config = (0, config_js_1.getConfig)();
|
|
223
|
-
const noColor = options.color === false;
|
|
224
|
-
// Validate depth against auth
|
|
225
|
-
if ((options.depth === 'validated' || options.depth === 'deep') && !(0, config_js_1.isAuthenticated)()) {
|
|
226
|
-
console.log(chalk_1.default.yellow('\nNote: validated and deep scans require authentication.'));
|
|
227
|
-
console.log(chalk_1.default.dim('Run `oculum login` to authenticate, or use `--depth cheap` for free local scans.\n'));
|
|
228
|
-
console.log(chalk_1.default.dim('Falling back to cheap scan...\n'));
|
|
229
|
-
options.depth = 'cheap';
|
|
230
|
-
}
|
|
231
|
-
// Collect files
|
|
232
|
-
spinner.start('Collecting files to scan...');
|
|
233
|
-
let files;
|
|
234
|
-
try {
|
|
235
|
-
files = await collectFiles(targetPath);
|
|
236
|
-
}
|
|
237
|
-
catch (err) {
|
|
238
|
-
spinner.fail(`Failed to collect files: ${err}`);
|
|
239
|
-
process.exit(1);
|
|
240
|
-
}
|
|
241
|
-
if (files.length === 0) {
|
|
242
|
-
spinner.fail('No scannable files found');
|
|
243
|
-
process.exit(1);
|
|
244
|
-
}
|
|
245
|
-
spinner.succeed(`Found ${files.length} files to scan`);
|
|
246
|
-
// Progress callback
|
|
247
|
-
const onProgress = (progress) => {
|
|
248
|
-
switch (progress.status) {
|
|
249
|
-
case 'layer1':
|
|
250
|
-
spinner.text = `Layer 1: Pattern matching... (${progress.vulnerabilitiesFound} findings)`;
|
|
251
|
-
break;
|
|
252
|
-
case 'layer2':
|
|
253
|
-
spinner.text = `Layer 2: Structural analysis... (${progress.vulnerabilitiesFound} findings)`;
|
|
254
|
-
break;
|
|
255
|
-
case 'validating':
|
|
256
|
-
spinner.text = `AI validation... (${progress.vulnerabilitiesFound} candidates)`;
|
|
257
|
-
break;
|
|
258
|
-
case 'layer3':
|
|
259
|
-
spinner.text = `Layer 3: AI semantic analysis...`;
|
|
260
|
-
break;
|
|
261
|
-
case 'complete':
|
|
262
|
-
spinner.succeed(`Scan complete: ${progress.vulnerabilitiesFound} issues found`);
|
|
263
|
-
break;
|
|
264
|
-
case 'failed':
|
|
265
|
-
spinner.fail(progress.message);
|
|
266
|
-
break;
|
|
267
|
-
}
|
|
268
|
-
};
|
|
269
|
-
// Run scan
|
|
270
|
-
let result;
|
|
271
|
-
try {
|
|
272
|
-
spinner.start('Starting scan...');
|
|
273
|
-
// For validated/deep scans, call the backend API
|
|
274
|
-
if (options.depth !== 'cheap' && (0, config_js_1.isAuthenticated)()) {
|
|
275
|
-
result = await (0, api_js_1.callBackendAPI)(files, options.depth, config.apiKey);
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
// Local scan for cheap depth
|
|
279
|
-
result = await (0, scanner_1.runScan)(files, {
|
|
280
|
-
name: (0, path_1.basename)((0, path_1.resolve)(targetPath)),
|
|
281
|
-
url: '',
|
|
282
|
-
branch: 'local',
|
|
283
|
-
}, {
|
|
284
|
-
enableAI: false, // Cheap mode = no AI
|
|
285
|
-
scanDepth: 'cheap',
|
|
286
|
-
}, onProgress);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
catch (err) {
|
|
290
|
-
spinner.fail(`Scan failed: ${err}`);
|
|
291
|
-
process.exit(1);
|
|
292
|
-
}
|
|
293
|
-
// Output results
|
|
294
|
-
const output = formatOutput(result, options.format, noColor);
|
|
295
|
-
console.log(output);
|
|
296
|
-
// Write to file if specified
|
|
297
|
-
if (options.output) {
|
|
298
|
-
const { writeFileSync } = await import('fs');
|
|
299
|
-
writeFileSync(options.output, output);
|
|
300
|
-
console.log(chalk_1.default.dim(`\nResults written to ${options.output}`));
|
|
301
|
-
}
|
|
302
|
-
// Exit code based on findings
|
|
303
|
-
const failThreshold = severityRank(options.failOn);
|
|
304
|
-
const highestSeverity = result.vulnerabilities.reduce((max, v) => Math.max(max, severityRank(v.severity)), 0);
|
|
305
|
-
if (highestSeverity >= failThreshold) {
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Scan command definition
|
|
311
|
-
*/
|
|
312
|
-
exports.scanCommand = new commander_1.Command('scan')
|
|
313
|
-
.description('Scan a directory or file for security vulnerabilities')
|
|
314
|
-
.argument('[path]', 'path to scan', '.')
|
|
315
|
-
.option('-d, --depth <depth>', 'scan depth: cheap (free), validated, deep', 'cheap')
|
|
316
|
-
.option('-f, --format <format>', 'output format: terminal, json, sarif, markdown', 'terminal')
|
|
317
|
-
.option('--fail-on <severity>', 'exit with error code if findings at severity', 'high')
|
|
318
|
-
.option('--no-color', 'disable colored output')
|
|
319
|
-
.option('-o, --output <file>', 'write output to file')
|
|
320
|
-
.option('--incremental', 'only scan changed files (requires git)')
|
|
321
|
-
.option('--diff <ref>', 'diff against branch/commit for incremental scan')
|
|
322
|
-
.action(runScan);
|
|
323
|
-
//# sourceMappingURL=scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/watch.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmPnC;;GAEG;AACH,eAAO,MAAM,YAAY,SAYrB,CAAA"}
|