@oculum/cli 1.0.19 → 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.
@@ -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
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Oculum CLI
4
- * AI-native security scanner for your codebase
5
- */
6
- export {};
7
- //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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
@@ -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"}