@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/dist/commands/watch.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Watch Command
|
|
4
|
-
* File watcher for continuous scanning during development
|
|
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.watchCommand = void 0;
|
|
11
|
-
const commander_1 = require("commander");
|
|
12
|
-
const path_1 = require("path");
|
|
13
|
-
const fs_1 = require("fs");
|
|
14
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
-
const chokidar_1 = __importDefault(require("chokidar"));
|
|
16
|
-
const scanner_1 = require("@oculum/scanner");
|
|
17
|
-
const formatters_1 = require("@oculum/scanner/formatters");
|
|
18
|
-
const config_js_1 = require("../utils/config.js");
|
|
19
|
-
/**
|
|
20
|
-
* Check if file should be scanned
|
|
21
|
-
*/
|
|
22
|
-
function isScannableFile(filePath) {
|
|
23
|
-
const ext = (0, path_1.extname)(filePath).toLowerCase();
|
|
24
|
-
const fileName = (0, path_1.basename)(filePath);
|
|
25
|
-
if (scanner_1.SPECIAL_FILES.includes(fileName))
|
|
26
|
-
return true;
|
|
27
|
-
return scanner_1.SCANNABLE_EXTENSIONS.includes(ext);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Map file extension to language
|
|
31
|
-
*/
|
|
32
|
-
function getLanguage(filePath) {
|
|
33
|
-
const ext = (0, path_1.extname)(filePath).toLowerCase();
|
|
34
|
-
const langMap = {
|
|
35
|
-
'.js': 'javascript',
|
|
36
|
-
'.jsx': 'javascript',
|
|
37
|
-
'.ts': 'typescript',
|
|
38
|
-
'.tsx': 'typescript',
|
|
39
|
-
'.py': 'python',
|
|
40
|
-
'.go': 'go',
|
|
41
|
-
'.java': 'java',
|
|
42
|
-
'.rb': 'ruby',
|
|
43
|
-
'.php': 'php',
|
|
44
|
-
'.yaml': 'yaml',
|
|
45
|
-
'.yml': 'yaml',
|
|
46
|
-
'.json': 'json',
|
|
47
|
-
};
|
|
48
|
-
return langMap[ext] || 'text';
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Read file as ScanFile
|
|
52
|
-
*/
|
|
53
|
-
function readScanFile(filePath) {
|
|
54
|
-
try {
|
|
55
|
-
const stats = (0, fs_1.statSync)(filePath);
|
|
56
|
-
if (stats.size > scanner_1.MAX_FILE_SIZE)
|
|
57
|
-
return null;
|
|
58
|
-
const content = (0, fs_1.readFileSync)(filePath, 'utf-8');
|
|
59
|
-
return {
|
|
60
|
-
path: (0, path_1.relative)(process.cwd(), filePath),
|
|
61
|
-
content,
|
|
62
|
-
language: getLanguage(filePath),
|
|
63
|
-
size: content.length,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Debounce function
|
|
72
|
-
*/
|
|
73
|
-
function debounce(fn, delay) {
|
|
74
|
-
let timeoutId = null;
|
|
75
|
-
return (...args) => {
|
|
76
|
-
if (timeoutId)
|
|
77
|
-
clearTimeout(timeoutId);
|
|
78
|
-
timeoutId = setTimeout(() => fn(...args), delay);
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Watch command
|
|
83
|
-
*/
|
|
84
|
-
async function watch(targetPath, options) {
|
|
85
|
-
const absolutePath = (0, path_1.resolve)(targetPath);
|
|
86
|
-
const config = (0, config_js_1.getConfig)();
|
|
87
|
-
// Validate depth against auth
|
|
88
|
-
if ((options.depth === 'validated' || options.depth === 'deep') && !(0, config_js_1.isAuthenticated)()) {
|
|
89
|
-
console.log(chalk_1.default.yellow('\nNote: validated and deep scans require authentication.'));
|
|
90
|
-
console.log(chalk_1.default.dim('Run `oculum login` to authenticate.\n'));
|
|
91
|
-
options.depth = 'cheap';
|
|
92
|
-
}
|
|
93
|
-
console.log(chalk_1.default.bold('\nOculum Watch Mode'));
|
|
94
|
-
console.log(chalk_1.default.dim('─'.repeat(40)));
|
|
95
|
-
console.log(chalk_1.default.dim(`Watching: ${absolutePath}`));
|
|
96
|
-
console.log(chalk_1.default.dim(`Depth: ${options.depth}`));
|
|
97
|
-
console.log(chalk_1.default.dim(`Debounce: ${options.debounce}ms`));
|
|
98
|
-
console.log(chalk_1.default.dim('\nPress Ctrl+C to stop\n'));
|
|
99
|
-
// Track changed files for incremental scanning
|
|
100
|
-
const changedFiles = new Set();
|
|
101
|
-
let isScanning = false;
|
|
102
|
-
// Scan function (debounced)
|
|
103
|
-
const runScanOnChanges = debounce(async () => {
|
|
104
|
-
if (isScanning || changedFiles.size === 0)
|
|
105
|
-
return;
|
|
106
|
-
isScanning = true;
|
|
107
|
-
const filesToScan = Array.from(changedFiles);
|
|
108
|
-
changedFiles.clear();
|
|
109
|
-
// Clear console if requested
|
|
110
|
-
if (options.clearOnScan) {
|
|
111
|
-
console.clear();
|
|
112
|
-
}
|
|
113
|
-
console.log(chalk_1.default.cyan(`\n[${new Date().toLocaleTimeString()}] Scanning ${filesToScan.length} changed file(s)...`));
|
|
114
|
-
// Read files
|
|
115
|
-
const scanFiles = [];
|
|
116
|
-
for (const filePath of filesToScan) {
|
|
117
|
-
const file = readScanFile(filePath);
|
|
118
|
-
if (file)
|
|
119
|
-
scanFiles.push(file);
|
|
120
|
-
}
|
|
121
|
-
if (scanFiles.length === 0) {
|
|
122
|
-
console.log(chalk_1.default.dim('No scannable files found.'));
|
|
123
|
-
isScanning = false;
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
try {
|
|
127
|
-
const result = await (0, scanner_1.runScan)(scanFiles, {
|
|
128
|
-
name: (0, path_1.basename)(absolutePath),
|
|
129
|
-
url: '',
|
|
130
|
-
branch: 'watch',
|
|
131
|
-
}, {
|
|
132
|
-
enableAI: options.depth !== 'cheap' && (0, config_js_1.isAuthenticated)(),
|
|
133
|
-
scanDepth: options.depth,
|
|
134
|
-
scanMode: 'incremental',
|
|
135
|
-
});
|
|
136
|
-
// Output results
|
|
137
|
-
if (result.vulnerabilities.length === 0) {
|
|
138
|
-
console.log(chalk_1.default.green('No issues found.'));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
console.log((0, formatters_1.formatTerminalOutput)(result, {
|
|
142
|
-
maxFindingsPerGroup: 5,
|
|
143
|
-
}));
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
console.error(chalk_1.default.red(`Scan error: ${err}`));
|
|
148
|
-
}
|
|
149
|
-
isScanning = false;
|
|
150
|
-
}, options.debounce);
|
|
151
|
-
// Set up watcher
|
|
152
|
-
const watcher = chokidar_1.default.watch(absolutePath, {
|
|
153
|
-
ignored: [
|
|
154
|
-
'**/node_modules/**',
|
|
155
|
-
'**/dist/**',
|
|
156
|
-
'**/build/**',
|
|
157
|
-
'**/.git/**',
|
|
158
|
-
'**/vendor/**',
|
|
159
|
-
'**/__pycache__/**',
|
|
160
|
-
'**/venv/**',
|
|
161
|
-
'**/.venv/**',
|
|
162
|
-
'**/coverage/**',
|
|
163
|
-
'**/.next/**',
|
|
164
|
-
'**/.nuxt/**',
|
|
165
|
-
],
|
|
166
|
-
persistent: true,
|
|
167
|
-
ignoreInitial: true,
|
|
168
|
-
});
|
|
169
|
-
watcher.on('change', (filePath) => {
|
|
170
|
-
if (!isScannableFile(filePath))
|
|
171
|
-
return;
|
|
172
|
-
changedFiles.add((0, path_1.resolve)(filePath));
|
|
173
|
-
console.log(chalk_1.default.dim(`Changed: ${(0, path_1.relative)(process.cwd(), filePath)}`));
|
|
174
|
-
runScanOnChanges();
|
|
175
|
-
});
|
|
176
|
-
watcher.on('add', (filePath) => {
|
|
177
|
-
if (!isScannableFile(filePath))
|
|
178
|
-
return;
|
|
179
|
-
changedFiles.add((0, path_1.resolve)(filePath));
|
|
180
|
-
console.log(chalk_1.default.dim(`Added: ${(0, path_1.relative)(process.cwd(), filePath)}`));
|
|
181
|
-
runScanOnChanges();
|
|
182
|
-
});
|
|
183
|
-
watcher.on('error', (error) => {
|
|
184
|
-
console.error(chalk_1.default.red(`Watcher error: ${error}`));
|
|
185
|
-
});
|
|
186
|
-
// Handle shutdown
|
|
187
|
-
process.on('SIGINT', () => {
|
|
188
|
-
console.log(chalk_1.default.dim('\n\nStopping watch mode...'));
|
|
189
|
-
watcher.close();
|
|
190
|
-
process.exit(0);
|
|
191
|
-
});
|
|
192
|
-
// Initial scan
|
|
193
|
-
console.log(chalk_1.default.dim('Performing initial scan...'));
|
|
194
|
-
const { glob } = await import('glob');
|
|
195
|
-
const patterns = [
|
|
196
|
-
'**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx',
|
|
197
|
-
'**/*.py', '**/*.go', '**/*.java', '**/*.rb',
|
|
198
|
-
'**/*.php', '**/*.cs', '**/package.json',
|
|
199
|
-
];
|
|
200
|
-
const ignorePatterns = [
|
|
201
|
-
'**/node_modules/**', '**/dist/**', '**/build/**',
|
|
202
|
-
'**/.git/**', '**/vendor/**', '**/__pycache__/**',
|
|
203
|
-
];
|
|
204
|
-
const allFiles = await glob(patterns, {
|
|
205
|
-
cwd: absolutePath,
|
|
206
|
-
ignore: ignorePatterns,
|
|
207
|
-
nodir: true,
|
|
208
|
-
absolute: true,
|
|
209
|
-
});
|
|
210
|
-
for (const filePath of allFiles) {
|
|
211
|
-
changedFiles.add(filePath);
|
|
212
|
-
}
|
|
213
|
-
runScanOnChanges();
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Watch command definition
|
|
217
|
-
*/
|
|
218
|
-
exports.watchCommand = new commander_1.Command('watch')
|
|
219
|
-
.description('Watch files and scan on changes')
|
|
220
|
-
.argument('[path]', 'path to watch', '.')
|
|
221
|
-
.option('-d, --depth <depth>', 'scan depth: cheap, validated, deep', 'cheap')
|
|
222
|
-
.option('--debounce <ms>', 'debounce time in milliseconds', '500')
|
|
223
|
-
.option('--clear', 'clear console before each scan', false)
|
|
224
|
-
.action((path, options) => {
|
|
225
|
-
watch(path, {
|
|
226
|
-
depth: options.depth,
|
|
227
|
-
debounce: parseInt(options.debounce, 10),
|
|
228
|
-
clearOnScan: options.clear,
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,yCAAmC;AACnC,gDAAgD;AAChD,gDAAgD;AAChD,kDAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gFAAgF,CAAC;KAC7F,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAA;AAC/B,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAA;AAC/B,OAAO,CAAC,UAAU,CAAC,uBAAY,CAAC,CAAA;AAEhC,2BAA2B;AAC3B,OAAO;KACJ,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC;KACvC,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,EAAE,OAAO,CAAC;KAC7E,MAAM,CAAC,uBAAuB,EAAE,iDAAiD,EAAE,UAAU,CAAC;KAC9F,MAAM,CAAC,sBAAsB,EAAE,kDAAkD,EAAE,MAAM,CAAC;KAC1F,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,6BAA6B;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;IACtD,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC9B,CAAC,CAAC,CAAA;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/utils/api.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Backend API Client
|
|
3
|
-
* Handles communication with Oculum backend for authenticated scans
|
|
4
|
-
*/
|
|
5
|
-
import type { ScanFile, ScanResult, ScanDepth } from '@oculum/scanner';
|
|
6
|
-
/**
|
|
7
|
-
* API Error
|
|
8
|
-
*/
|
|
9
|
-
export declare class APIError extends Error {
|
|
10
|
-
statusCode: number;
|
|
11
|
-
code?: string | undefined;
|
|
12
|
-
constructor(message: string, statusCode: number, code?: string | undefined);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Call backend API for validated/deep scans
|
|
16
|
-
*/
|
|
17
|
-
export declare function callBackendAPI(files: ScanFile[], depth: ScanDepth, apiKey: string): Promise<ScanResult>;
|
|
18
|
-
/**
|
|
19
|
-
* Verify API key and get user info
|
|
20
|
-
*/
|
|
21
|
-
export declare function verifyApiKey(apiKey: string): Promise<{
|
|
22
|
-
valid: boolean;
|
|
23
|
-
email?: string;
|
|
24
|
-
tier?: 'free' | 'pro' | 'enterprise';
|
|
25
|
-
}>;
|
|
26
|
-
/**
|
|
27
|
-
* Login via GitHub OAuth (opens browser)
|
|
28
|
-
*/
|
|
29
|
-
export declare function initiateLogin(): Promise<{
|
|
30
|
-
authUrl: string;
|
|
31
|
-
deviceCode: string;
|
|
32
|
-
}>;
|
|
33
|
-
/**
|
|
34
|
-
* Poll for login completion
|
|
35
|
-
*/
|
|
36
|
-
export declare function pollForLogin(deviceCode: string): Promise<{
|
|
37
|
-
complete: boolean;
|
|
38
|
-
apiKey?: string;
|
|
39
|
-
email?: string;
|
|
40
|
-
tier?: 'free' | 'pro' | 'enterprise';
|
|
41
|
-
}>;
|
|
42
|
-
//# sourceMappingURL=api.d.ts.map
|
package/dist/utils/api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAWtE;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAUD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1D,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAA;CACrC,CAAC,CAsBD;AAUD;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAC,CAiBD;AAWD;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9D,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAA;CACrC,CAAC,CA2BD"}
|
package/dist/utils/api.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Backend API Client
|
|
4
|
-
* Handles communication with Oculum backend for authenticated scans
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.APIError = void 0;
|
|
8
|
-
exports.callBackendAPI = callBackendAPI;
|
|
9
|
-
exports.verifyApiKey = verifyApiKey;
|
|
10
|
-
exports.initiateLogin = initiateLogin;
|
|
11
|
-
exports.pollForLogin = pollForLogin;
|
|
12
|
-
const config_js_1 = require("./config.js");
|
|
13
|
-
/**
|
|
14
|
-
* API Error
|
|
15
|
-
*/
|
|
16
|
-
class APIError extends Error {
|
|
17
|
-
statusCode;
|
|
18
|
-
code;
|
|
19
|
-
constructor(message, statusCode, code) {
|
|
20
|
-
super(message);
|
|
21
|
-
this.statusCode = statusCode;
|
|
22
|
-
this.code = code;
|
|
23
|
-
this.name = 'APIError';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.APIError = APIError;
|
|
27
|
-
/**
|
|
28
|
-
* Call backend API for validated/deep scans
|
|
29
|
-
*/
|
|
30
|
-
async function callBackendAPI(files, depth, apiKey) {
|
|
31
|
-
const baseUrl = (0, config_js_1.getApiBaseUrl)();
|
|
32
|
-
const url = `${baseUrl}/v1/scan`;
|
|
33
|
-
const response = await fetch(url, {
|
|
34
|
-
method: 'POST',
|
|
35
|
-
headers: {
|
|
36
|
-
'Content-Type': 'application/json',
|
|
37
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
38
|
-
},
|
|
39
|
-
body: JSON.stringify({
|
|
40
|
-
files,
|
|
41
|
-
depth,
|
|
42
|
-
}),
|
|
43
|
-
});
|
|
44
|
-
if (!response.ok) {
|
|
45
|
-
const error = await response.json().catch(() => ({ message: 'Unknown error' }));
|
|
46
|
-
throw new APIError(error.message || `API error: ${response.status}`, response.status, error.code);
|
|
47
|
-
}
|
|
48
|
-
const result = await response.json();
|
|
49
|
-
return result;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Verify API key and get user info
|
|
53
|
-
*/
|
|
54
|
-
async function verifyApiKey(apiKey) {
|
|
55
|
-
const baseUrl = (0, config_js_1.getApiBaseUrl)();
|
|
56
|
-
const url = `${baseUrl}/v1/verify-key`;
|
|
57
|
-
const response = await fetch(url, {
|
|
58
|
-
method: 'POST',
|
|
59
|
-
headers: {
|
|
60
|
-
'Content-Type': 'application/json',
|
|
61
|
-
},
|
|
62
|
-
body: JSON.stringify({ apiKey }),
|
|
63
|
-
});
|
|
64
|
-
if (!response.ok) {
|
|
65
|
-
return { valid: false };
|
|
66
|
-
}
|
|
67
|
-
const result = await response.json();
|
|
68
|
-
return {
|
|
69
|
-
valid: true,
|
|
70
|
-
email: result.email,
|
|
71
|
-
tier: result.tier,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Login via GitHub OAuth (opens browser)
|
|
76
|
-
*/
|
|
77
|
-
async function initiateLogin() {
|
|
78
|
-
const baseUrl = (0, config_js_1.getApiBaseUrl)();
|
|
79
|
-
const url = `${baseUrl}/v1/auth/device`;
|
|
80
|
-
const response = await fetch(url, {
|
|
81
|
-
method: 'POST',
|
|
82
|
-
headers: {
|
|
83
|
-
'Content-Type': 'application/json',
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
if (!response.ok) {
|
|
87
|
-
throw new APIError('Failed to initiate login', response.status);
|
|
88
|
-
}
|
|
89
|
-
const result = await response.json();
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Poll for login completion
|
|
94
|
-
*/
|
|
95
|
-
async function pollForLogin(deviceCode) {
|
|
96
|
-
const baseUrl = (0, config_js_1.getApiBaseUrl)();
|
|
97
|
-
const url = `${baseUrl}/v1/auth/device/poll`;
|
|
98
|
-
const response = await fetch(url, {
|
|
99
|
-
method: 'POST',
|
|
100
|
-
headers: {
|
|
101
|
-
'Content-Type': 'application/json',
|
|
102
|
-
},
|
|
103
|
-
body: JSON.stringify({ deviceCode }),
|
|
104
|
-
});
|
|
105
|
-
if (!response.ok) {
|
|
106
|
-
if (response.status === 428) {
|
|
107
|
-
// Precondition Required - still waiting
|
|
108
|
-
return { complete: false };
|
|
109
|
-
}
|
|
110
|
-
throw new APIError('Login failed', response.status);
|
|
111
|
-
}
|
|
112
|
-
const result = await response.json();
|
|
113
|
-
return {
|
|
114
|
-
complete: true,
|
|
115
|
-
apiKey: result.apiKey,
|
|
116
|
-
email: result.email,
|
|
117
|
-
tier: result.tier,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=api.js.map
|
package/dist/utils/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Configuration Management
|
|
3
|
-
* Handles user config, auth tokens, and settings
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* CLI Configuration
|
|
7
|
-
*/
|
|
8
|
-
export interface CLIConfig {
|
|
9
|
-
/** API key for authenticated scans */
|
|
10
|
-
apiKey?: string;
|
|
11
|
-
/** User email (from login) */
|
|
12
|
-
email?: string;
|
|
13
|
-
/** Subscription tier */
|
|
14
|
-
tier?: 'free' | 'pro' | 'enterprise';
|
|
15
|
-
/** Default scan depth */
|
|
16
|
-
defaultDepth?: 'cheap' | 'validated' | 'deep';
|
|
17
|
-
/** Default output format */
|
|
18
|
-
defaultFormat?: 'terminal' | 'json' | 'sarif' | 'markdown';
|
|
19
|
-
/** API base URL (for development) */
|
|
20
|
-
apiBaseUrl?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Get current configuration
|
|
24
|
-
*/
|
|
25
|
-
export declare function getConfig(): CLIConfig;
|
|
26
|
-
/**
|
|
27
|
-
* Save configuration
|
|
28
|
-
*/
|
|
29
|
-
export declare function saveConfig(config: CLIConfig): void;
|
|
30
|
-
/**
|
|
31
|
-
* Update specific config values
|
|
32
|
-
*/
|
|
33
|
-
export declare function updateConfig(updates: Partial<CLIConfig>): void;
|
|
34
|
-
/**
|
|
35
|
-
* Clear authentication
|
|
36
|
-
*/
|
|
37
|
-
export declare function clearAuth(): void;
|
|
38
|
-
/**
|
|
39
|
-
* Check if user is authenticated
|
|
40
|
-
*/
|
|
41
|
-
export declare function isAuthenticated(): boolean;
|
|
42
|
-
/**
|
|
43
|
-
* Get API base URL
|
|
44
|
-
*/
|
|
45
|
-
export declare function getApiBaseUrl(): string;
|
|
46
|
-
/**
|
|
47
|
-
* Store API key and user info after login
|
|
48
|
-
*/
|
|
49
|
-
export declare function setAuthCredentials(apiKey: string, email?: string, tier?: CLIConfig['tier']): void;
|
|
50
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAA;IACpC,yBAAyB;IACzB,YAAY,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAA;IAC7C,4BAA4B;IAC5B,aAAa,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAC1D,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAeD;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAerC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAG9D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAMhC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAEjG"}
|
package/dist/utils/config.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* CLI Configuration Management
|
|
4
|
-
* Handles user config, auth tokens, and settings
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.getConfig = getConfig;
|
|
8
|
-
exports.saveConfig = saveConfig;
|
|
9
|
-
exports.updateConfig = updateConfig;
|
|
10
|
-
exports.clearAuth = clearAuth;
|
|
11
|
-
exports.isAuthenticated = isAuthenticated;
|
|
12
|
-
exports.getApiBaseUrl = getApiBaseUrl;
|
|
13
|
-
exports.setAuthCredentials = setAuthCredentials;
|
|
14
|
-
const fs_1 = require("fs");
|
|
15
|
-
const path_1 = require("path");
|
|
16
|
-
const os_1 = require("os");
|
|
17
|
-
const CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), '.oculum');
|
|
18
|
-
const CONFIG_FILE = (0, path_1.join)(CONFIG_DIR, 'config.json');
|
|
19
|
-
const DEFAULT_API_URL = 'https://oculum.dev/api';
|
|
20
|
-
/**
|
|
21
|
-
* Ensure config directory exists
|
|
22
|
-
*/
|
|
23
|
-
function ensureConfigDir() {
|
|
24
|
-
if (!(0, fs_1.existsSync)(CONFIG_DIR)) {
|
|
25
|
-
(0, fs_1.mkdirSync)(CONFIG_DIR, { recursive: true });
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get current configuration
|
|
30
|
-
*/
|
|
31
|
-
function getConfig() {
|
|
32
|
-
try {
|
|
33
|
-
if ((0, fs_1.existsSync)(CONFIG_FILE)) {
|
|
34
|
-
const content = (0, fs_1.readFileSync)(CONFIG_FILE, 'utf-8');
|
|
35
|
-
return JSON.parse(content);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Return defaults if config is corrupted
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
apiBaseUrl: process.env.OCULUM_API_URL || DEFAULT_API_URL,
|
|
43
|
-
defaultDepth: 'cheap',
|
|
44
|
-
defaultFormat: 'terminal',
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Save configuration
|
|
49
|
-
*/
|
|
50
|
-
function saveConfig(config) {
|
|
51
|
-
ensureConfigDir();
|
|
52
|
-
(0, fs_1.writeFileSync)(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Update specific config values
|
|
56
|
-
*/
|
|
57
|
-
function updateConfig(updates) {
|
|
58
|
-
const current = getConfig();
|
|
59
|
-
saveConfig({ ...current, ...updates });
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Clear authentication
|
|
63
|
-
*/
|
|
64
|
-
function clearAuth() {
|
|
65
|
-
const config = getConfig();
|
|
66
|
-
delete config.apiKey;
|
|
67
|
-
delete config.email;
|
|
68
|
-
delete config.tier;
|
|
69
|
-
saveConfig(config);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Check if user is authenticated
|
|
73
|
-
*/
|
|
74
|
-
function isAuthenticated() {
|
|
75
|
-
const config = getConfig();
|
|
76
|
-
return !!config.apiKey;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Get API base URL
|
|
80
|
-
*/
|
|
81
|
-
function getApiBaseUrl() {
|
|
82
|
-
const config = getConfig();
|
|
83
|
-
return config.apiBaseUrl || process.env.OCULUM_API_URL || DEFAULT_API_URL;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Store API key and user info after login
|
|
87
|
-
*/
|
|
88
|
-
function setAuthCredentials(apiKey, email, tier) {
|
|
89
|
-
updateConfig({ apiKey, email, tier });
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=config.js.map
|
package/dist/utils/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAwCH,8BAeC;AAKD,gCAGC;AAKD,oCAGC;AAKD,8BAMC;AAKD,0CAGC;AAKD,sCAGC;AAKD,gDAEC;AAvGD,2BAAuE;AACvE,+BAA2B;AAC3B,2BAA4B;AAoB5B,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,CAAC,CAAA;AAC7C,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AACnD,MAAM,eAAe,GAAG,wBAAwB,CAAA;AAEhD;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAA,cAAS,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,IAAI,CAAC;QACH,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,eAAe;QACzD,YAAY,EAAE,OAAO;QACrB,aAAa,EAAE,UAAU;KAC1B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAiB;IAC1C,eAAe,EAAE,CAAA;IACjB,IAAA,kBAAa,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAA2B;IACtD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAA;IACpB,OAAO,MAAM,CAAC,KAAK,CAAA;IACnB,OAAO,MAAM,CAAC,IAAI,CAAA;IAClB,UAAU,CAAC,MAAM,CAAC,CAAA;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,eAAe,CAAA;AAC3E,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAc,EAAE,KAAc,EAAE,IAAwB;IACzF,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACvC,CAAC"}
|