avana-cli 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE +21 -0
  3. package/README.md +584 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +153 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/install.d.ts +6 -0
  9. package/dist/commands/install.d.ts.map +1 -0
  10. package/dist/commands/install.js +101 -0
  11. package/dist/commands/install.js.map +1 -0
  12. package/dist/commands/scan.d.ts +19 -0
  13. package/dist/commands/scan.d.ts.map +1 -0
  14. package/dist/commands/scan.js +383 -0
  15. package/dist/commands/scan.js.map +1 -0
  16. package/dist/commands/uninstall.d.ts +6 -0
  17. package/dist/commands/uninstall.d.ts.map +1 -0
  18. package/dist/commands/uninstall.js +80 -0
  19. package/dist/commands/uninstall.js.map +1 -0
  20. package/dist/index.d.ts +97 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +475 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/rules/additional-patterns.d.ts +12 -0
  25. package/dist/rules/additional-patterns.d.ts.map +1 -0
  26. package/dist/rules/additional-patterns.js +170 -0
  27. package/dist/rules/additional-patterns.js.map +1 -0
  28. package/dist/rules/code-patterns.d.ts +26 -0
  29. package/dist/rules/code-patterns.d.ts.map +1 -0
  30. package/dist/rules/code-patterns.js +220 -0
  31. package/dist/rules/code-patterns.js.map +1 -0
  32. package/dist/rules/secret-patterns.d.ts +28 -0
  33. package/dist/rules/secret-patterns.d.ts.map +1 -0
  34. package/dist/rules/secret-patterns.js +1729 -0
  35. package/dist/rules/secret-patterns.js.map +1 -0
  36. package/dist/scanners/secret-scanner.d.ts +34 -0
  37. package/dist/scanners/secret-scanner.d.ts.map +1 -0
  38. package/dist/scanners/secret-scanner.js +281 -0
  39. package/dist/scanners/secret-scanner.js.map +1 -0
  40. package/dist/types/index.d.ts +116 -0
  41. package/dist/types/index.d.ts.map +1 -0
  42. package/dist/types/index.js +7 -0
  43. package/dist/types/index.js.map +1 -0
  44. package/dist/utils/error-handler.d.ts +126 -0
  45. package/dist/utils/error-handler.d.ts.map +1 -0
  46. package/dist/utils/error-handler.js +222 -0
  47. package/dist/utils/error-handler.js.map +1 -0
  48. package/dist/utils/exit-codes.d.ts +52 -0
  49. package/dist/utils/exit-codes.d.ts.map +1 -0
  50. package/dist/utils/exit-codes.js +89 -0
  51. package/dist/utils/exit-codes.js.map +1 -0
  52. package/dist/utils/file-stream-scanner.d.ts +31 -0
  53. package/dist/utils/file-stream-scanner.d.ts.map +1 -0
  54. package/dist/utils/file-stream-scanner.js +159 -0
  55. package/dist/utils/file-stream-scanner.js.map +1 -0
  56. package/dist/utils/file-type-detector.d.ts +45 -0
  57. package/dist/utils/file-type-detector.d.ts.map +1 -0
  58. package/dist/utils/file-type-detector.js +237 -0
  59. package/dist/utils/file-type-detector.js.map +1 -0
  60. package/dist/utils/ignore-pattern-manager.d.ts +61 -0
  61. package/dist/utils/ignore-pattern-manager.d.ts.map +1 -0
  62. package/dist/utils/ignore-pattern-manager.js +204 -0
  63. package/dist/utils/ignore-pattern-manager.js.map +1 -0
  64. package/dist/utils/json-output-formatter.d.ts +232 -0
  65. package/dist/utils/json-output-formatter.d.ts.map +1 -0
  66. package/dist/utils/json-output-formatter.js +367 -0
  67. package/dist/utils/json-output-formatter.js.map +1 -0
  68. package/dist/utils/logger.d.ts +181 -0
  69. package/dist/utils/logger.d.ts.map +1 -0
  70. package/dist/utils/logger.js +414 -0
  71. package/dist/utils/logger.js.map +1 -0
  72. package/dist/utils/markdown-output-formatter.d.ts +65 -0
  73. package/dist/utils/markdown-output-formatter.d.ts.map +1 -0
  74. package/dist/utils/markdown-output-formatter.js +316 -0
  75. package/dist/utils/markdown-output-formatter.js.map +1 -0
  76. package/dist/utils/memory-manager.d.ts +77 -0
  77. package/dist/utils/memory-manager.d.ts.map +1 -0
  78. package/dist/utils/memory-manager.js +157 -0
  79. package/dist/utils/memory-manager.js.map +1 -0
  80. package/dist/utils/parallel-scanner-worker.d.ts +19 -0
  81. package/dist/utils/parallel-scanner-worker.d.ts.map +1 -0
  82. package/dist/utils/parallel-scanner-worker.js +51 -0
  83. package/dist/utils/parallel-scanner-worker.js.map +1 -0
  84. package/dist/utils/parallel-scanner.d.ts +82 -0
  85. package/dist/utils/parallel-scanner.d.ts.map +1 -0
  86. package/dist/utils/parallel-scanner.js +229 -0
  87. package/dist/utils/parallel-scanner.js.map +1 -0
  88. package/dist/utils/pattern-validator.d.ts +108 -0
  89. package/dist/utils/pattern-validator.d.ts.map +1 -0
  90. package/dist/utils/pattern-validator.js +315 -0
  91. package/dist/utils/pattern-validator.js.map +1 -0
  92. package/dist/utils/progress-reporter.d.ts +68 -0
  93. package/dist/utils/progress-reporter.d.ts.map +1 -0
  94. package/dist/utils/progress-reporter.js +194 -0
  95. package/dist/utils/progress-reporter.js.map +1 -0
  96. package/dist/utils/result-cache.d.ts +99 -0
  97. package/dist/utils/result-cache.d.ts.map +1 -0
  98. package/dist/utils/result-cache.js +335 -0
  99. package/dist/utils/result-cache.js.map +1 -0
  100. package/package.json +80 -0
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ /**
3
+ * Avana CLI - Scan Command
4
+ * Scans project for security issues
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.scanCommand = scanCommand;
41
+ const index_1 = require("../index");
42
+ const json_output_formatter_1 = require("../utils/json-output-formatter");
43
+ const markdown_output_formatter_1 = require("../utils/markdown-output-formatter");
44
+ const exit_codes_1 = require("../utils/exit-codes");
45
+ const child_process_1 = require("child_process");
46
+ const path = __importStar(require("path"));
47
+ const fs = __importStar(require("fs"));
48
+ /**
49
+ * Format memory size in human-readable format
50
+ */
51
+ function formatMemorySize(bytes) {
52
+ const units = ['B', 'KB', 'MB', 'GB'];
53
+ let size = bytes;
54
+ let unitIndex = 0;
55
+ while (size >= 1024 && unitIndex < units.length - 1) {
56
+ size /= 1024;
57
+ unitIndex++;
58
+ }
59
+ return `${size.toFixed(2)} ${units[unitIndex]}`;
60
+ }
61
+ /**
62
+ * Get list of Git staged files
63
+ */
64
+ function getStagedFiles() {
65
+ try {
66
+ const output = (0, child_process_1.execSync)('git diff --cached --name-only --diff-filter=ACM', {
67
+ encoding: 'utf-8',
68
+ stdio: ['pipe', 'pipe', 'ignore']
69
+ });
70
+ return output
71
+ .split('\n')
72
+ .filter(file => file.trim() !== '')
73
+ .map(file => path.resolve(process.cwd(), file))
74
+ .filter(file => fs.existsSync(file) && fs.statSync(file).isFile());
75
+ }
76
+ catch (error) {
77
+ // Not a git repository or no staged files
78
+ return [];
79
+ }
80
+ }
81
+ /**
82
+ * Save results to file
83
+ */
84
+ async function saveResults(result, score, outputJson, outputMd, rootPath) {
85
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('T')[0];
86
+ const reportsDir = path.join(rootPath, 'scan-reports');
87
+ // Create scan-reports directory if it doesn't exist
88
+ if (!fs.existsSync(reportsDir)) {
89
+ fs.mkdirSync(reportsDir, { recursive: true });
90
+ }
91
+ const savedPaths = {};
92
+ if (outputJson) {
93
+ const jsonFormatter = new json_output_formatter_1.JSONOutputFormatter();
94
+ const jsonContent = jsonFormatter.format(result, {
95
+ pretty: true,
96
+ includeMetadata: true,
97
+ includeDebugInfo: false
98
+ });
99
+ const jsonFilename = `avana-security-report-${timestamp}.json`;
100
+ const jsonPath = path.join(reportsDir, jsonFilename);
101
+ try {
102
+ fs.writeFileSync(jsonPath, jsonContent, 'utf-8');
103
+ console.log(`📄 JSON report saved: ${jsonFilename}`);
104
+ savedPaths.jsonPath = jsonPath;
105
+ }
106
+ catch (error) {
107
+ console.error(`❌ Failed to save JSON report: ${error instanceof Error ? error.message : String(error)}`);
108
+ }
109
+ }
110
+ if (outputMd) {
111
+ const mdFormatter = new markdown_output_formatter_1.MarkdownOutputFormatter();
112
+ const mdContent = mdFormatter.format(result, score);
113
+ const mdFilename = `avana-security-report-${timestamp}.md`;
114
+ const mdPath = path.join(reportsDir, mdFilename);
115
+ try {
116
+ fs.writeFileSync(mdPath, mdContent, 'utf-8');
117
+ console.log(`📝 Markdown report saved: ${mdFilename}`);
118
+ savedPaths.mdPath = mdPath;
119
+ }
120
+ catch (error) {
121
+ console.error(`❌ Failed to save Markdown report: ${error instanceof Error ? error.message : String(error)}`);
122
+ }
123
+ }
124
+ return savedPaths;
125
+ }
126
+ async function scanCommand(options) {
127
+ const projectPath = options.path || process.cwd();
128
+ const rootPath = process.cwd(); // Always save reports to root directory
129
+ // Handle --staged flag
130
+ if (options.staged) {
131
+ const stagedFiles = getStagedFiles();
132
+ if (stagedFiles.length === 0) {
133
+ if (!options.quiet) {
134
+ console.log('ℹ️ No staged files to scan\n');
135
+ }
136
+ return;
137
+ }
138
+ if (!options.quiet) {
139
+ console.log(`🔍 Scanning ${stagedFiles.length} staged file(s)...\n`);
140
+ }
141
+ // Create Avana instance with robust options
142
+ const avana = new index_1.Avana({
143
+ debugMode: options.debug || false,
144
+ maxMemoryMB: options.maxMemory || 500,
145
+ cacheDir: path.join(rootPath, '.avana-cache'),
146
+ workerCount: options.workers
147
+ });
148
+ const scanOptions = {
149
+ path: projectPath,
150
+ verbose: options.verbose && !options.quiet,
151
+ includeFiles: stagedFiles,
152
+ config: {
153
+ enabled: true,
154
+ scanOnCommit: false,
155
+ scanOnPush: false,
156
+ blockOnCritical: false,
157
+ rules: {
158
+ secrets: {
159
+ enabled: true,
160
+ patterns: []
161
+ },
162
+ dependencies: {
163
+ enabled: false,
164
+ checkVulnerabilities: false,
165
+ minSeverity: 'low'
166
+ },
167
+ codePatterns: {
168
+ enabled: false,
169
+ checks: []
170
+ }
171
+ },
172
+ ignore: options.ignorePatterns || [],
173
+ notifications: {
174
+ cli: true,
175
+ web: false,
176
+ email: false
177
+ }
178
+ }
179
+ };
180
+ const result = await avana.scan(scanOptions);
181
+ const scoreResult = avana.calculateSecurityScore(result);
182
+ // Save results to files
183
+ const savedPaths = await saveResults(result, scoreResult.score, options.outputJson || false, !options.outputJson, projectPath);
184
+ // Display results for staged files
185
+ displayStagedResults(result, scoreResult.score, savedPaths, options);
186
+ // Cleanup resources
187
+ await avana.cleanup();
188
+ // Determine and use proper exit code
189
+ const exitCode = (0, exit_codes_1.determineExitCode)(result, { failOnHigh: options.failOnHigh });
190
+ process.exit(exitCode);
191
+ return;
192
+ }
193
+ if (!options.quiet) {
194
+ console.log('🔍 Scanning project for security issues...\n');
195
+ console.log(`📁 Path: ${projectPath}\n`);
196
+ }
197
+ // Create Avana instance with robust options
198
+ const avana = new index_1.Avana({
199
+ debugMode: options.debug || false,
200
+ maxMemoryMB: options.maxMemory || 500,
201
+ cacheDir: path.join(rootPath, '.avana-cache'),
202
+ workerCount: options.workers
203
+ });
204
+ const scanOptions = {
205
+ path: projectPath,
206
+ verbose: (options.verbose && !options.quiet) || false,
207
+ config: {
208
+ enabled: true,
209
+ scanOnCommit: false,
210
+ scanOnPush: false,
211
+ blockOnCritical: false,
212
+ rules: {
213
+ secrets: {
214
+ enabled: true,
215
+ patterns: []
216
+ },
217
+ dependencies: {
218
+ enabled: false,
219
+ checkVulnerabilities: false,
220
+ minSeverity: 'low'
221
+ },
222
+ codePatterns: {
223
+ enabled: false,
224
+ checks: []
225
+ }
226
+ },
227
+ ignore: options.ignorePatterns || [],
228
+ notifications: {
229
+ cli: true,
230
+ web: false,
231
+ email: false
232
+ }
233
+ }
234
+ };
235
+ const result = await avana.scan(scanOptions);
236
+ const scoreResult = avana.calculateSecurityScore(result);
237
+ // Save results to files
238
+ const savedPaths = await saveResults(result, scoreResult.score, options.outputJson || false, !options.outputJson, projectPath);
239
+ // Display results
240
+ if (!options.quiet) {
241
+ console.log(`✅ Scan complete in ${result.duration}ms\n`);
242
+ // Show statistics if debug mode
243
+ if (options.debug) {
244
+ const memoryStats = avana.getMemoryStats();
245
+ const cacheStats = avana.getCacheStats();
246
+ const errorStats = avana.getErrorStats();
247
+ console.log('🔧 Debug Information:');
248
+ console.log(` Memory: ${formatMemorySize(memoryStats.currentUsage)} / ${formatMemorySize(memoryStats.limit)}`);
249
+ console.log(` Cache: ${cacheStats.hitRate.toFixed(1)}% hit rate (${cacheStats.hitCount} hits, ${cacheStats.missCount} misses)`);
250
+ console.log(` Errors: ${errorStats.totalErrors} total errors`);
251
+ console.log('');
252
+ }
253
+ }
254
+ if (result.issues.length === 0) {
255
+ if (!options.quiet) {
256
+ console.log('🎉 No security issues found!\n');
257
+ console.log(`📊 Security Score: ${scoreResult.score}/100 (Excellent)\n`);
258
+ // Show file output message with paths
259
+ console.log(`📋 Reports have been saved:`);
260
+ if (savedPaths.jsonPath) {
261
+ console.log(` 📄 JSON: ${savedPaths.jsonPath}`);
262
+ }
263
+ if (savedPaths.mdPath) {
264
+ console.log(` 📝 Markdown: ${savedPaths.mdPath}`);
265
+ }
266
+ console.log('');
267
+ }
268
+ // Cleanup resources
269
+ await avana.cleanup();
270
+ // Exit with success code
271
+ process.exit(exit_codes_1.ExitCode.SUCCESS);
272
+ return;
273
+ }
274
+ // Display summary
275
+ if (!options.quiet) {
276
+ console.log('🚨 SECURITY ISSUES FOUND\n');
277
+ console.log(`┌─────────────────────────────────────────┐`);
278
+ console.log(`│ 🔴 Critical: ${result.summary.critical.toString().padEnd(27)}│`);
279
+ console.log(`│ 🟠 High: ${result.summary.high.toString().padEnd(27)}│`);
280
+ console.log(`│ 🟡 Medium: ${result.summary.medium.toString().padEnd(27)}│`);
281
+ console.log(`│ 🟢 Low: ${result.summary.low.toString().padEnd(27)}│`);
282
+ console.log(`└─────────────────────────────────────────┘\n`);
283
+ // Display critical, high, and medium issues
284
+ const criticalIssues = result.issues.filter(i => i.severity === 'critical' || i.severity === 'high' || i.severity === 'medium');
285
+ if (criticalIssues.length > 0) {
286
+ console.log('Critical, High & Medium Severity Issues:\n');
287
+ criticalIssues.slice(0, 10).forEach((issue) => {
288
+ const icon = issue.severity === 'critical' ? '🔴' : issue.severity === 'high' ? '🟠' : '🟡';
289
+ console.log(`${icon} ${issue.title}`);
290
+ console.log(` File: ${issue.file}:${issue.line}`);
291
+ console.log(` ${issue.description}`);
292
+ if (issue.suggestion) {
293
+ console.log(` ✅ Fix: ${issue.suggestion}`);
294
+ }
295
+ console.log('');
296
+ });
297
+ if (criticalIssues.length > 10) {
298
+ console.log(`... and ${criticalIssues.length - 10} more issues\n`);
299
+ }
300
+ }
301
+ console.log(`📊 Security Score: ${scoreResult.score}/100\n`);
302
+ if (scoreResult.score < 50) {
303
+ console.log('⚠️ Your security score is low. Please address critical issues immediately.\n');
304
+ }
305
+ else if (scoreResult.score < 80) {
306
+ console.log('💡 Your security score is moderate. Consider addressing high-priority issues.\n');
307
+ }
308
+ // Show file output message with paths
309
+ console.log(`📋 Detailed reports have been saved for easy review:`);
310
+ if (savedPaths.jsonPath) {
311
+ console.log(` 📄 JSON: ${savedPaths.jsonPath}`);
312
+ }
313
+ if (savedPaths.mdPath) {
314
+ console.log(` 📝 Markdown: ${savedPaths.mdPath}`);
315
+ }
316
+ console.log('');
317
+ }
318
+ // Cleanup resources
319
+ await avana.cleanup();
320
+ // Determine and use proper exit code
321
+ const exitCode = (0, exit_codes_1.determineExitCode)(result, { failOnHigh: options.failOnHigh });
322
+ process.exit(exitCode);
323
+ }
324
+ /**
325
+ * Display results for staged files (pre-commit hook)
326
+ */
327
+ function displayStagedResults(result, score, savedPaths, options) {
328
+ if (result.issues.length === 0) {
329
+ console.log('✅ No security issues found in staged files\n');
330
+ // Show file output message with paths for staged scans
331
+ console.log(`📋 Reports have been saved:`);
332
+ if (savedPaths.jsonPath) {
333
+ console.log(` 📄 JSON: ${savedPaths.jsonPath}`);
334
+ }
335
+ if (savedPaths.mdPath) {
336
+ console.log(` 📝 Markdown: ${savedPaths.mdPath}`);
337
+ }
338
+ console.log('');
339
+ return;
340
+ }
341
+ const criticalCount = result.summary.critical;
342
+ const highCount = result.summary.high;
343
+ const mediumCount = result.summary.medium;
344
+ // Display critical, high, and medium issues
345
+ const criticalIssues = result.issues.filter((i) => i.severity === 'critical' || i.severity === 'high' || i.severity === 'medium');
346
+ if (criticalIssues.length > 0) {
347
+ console.log('🚨 COMMIT BLOCKED - Security Issues Found\n');
348
+ console.log(`Found ${criticalCount} critical, ${highCount} high, and ${mediumCount} medium severity issue(s):\n`);
349
+ criticalIssues.forEach((issue) => {
350
+ const icon = issue.severity === 'critical' ? '🔴' : issue.severity === 'high' ? '🟠' : '🟡';
351
+ console.log(`${icon} ${issue.title}`);
352
+ console.log(` File: ${issue.file}:${issue.line}`);
353
+ console.log(` ${issue.description}`);
354
+ if (issue.suggestion) {
355
+ console.log(` ✅ Fix: ${issue.suggestion}`);
356
+ }
357
+ console.log('');
358
+ });
359
+ console.log('❌ Please fix these issues before committing\n');
360
+ console.log('💡 Tips:');
361
+ console.log(' • Fix the issues and try again');
362
+ console.log(' • Check the detailed security report for more information');
363
+ console.log(' • To bypass (not recommended): git commit --no-verify\n');
364
+ // Don't exit here - let the caller handle the exit code
365
+ return;
366
+ }
367
+ else {
368
+ // Only low issues - allow commit with warning
369
+ console.log('⚠️ Found security issues in staged files:\n');
370
+ console.log(`🟢 Low: ${result.summary.low}\n`);
371
+ console.log('💡 Consider fixing these issues soon\n');
372
+ // Show file output message with paths for staged scans
373
+ console.log(`📋 Reports have been saved:`);
374
+ if (savedPaths.jsonPath) {
375
+ console.log(` 📄 JSON: ${savedPaths.jsonPath}`);
376
+ }
377
+ if (savedPaths.mdPath) {
378
+ console.log(` 📝 Markdown: ${savedPaths.mdPath}`);
379
+ }
380
+ console.log('');
381
+ }
382
+ }
383
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Avana CLI - Uninstall Command
3
+ * Removes Git hooks installed by Avana
4
+ */
5
+ export declare function uninstallCommand(): Promise<void>;
6
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoCtD"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Avana CLI - Uninstall Command
4
+ * Removes Git hooks installed by Avana
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.uninstallCommand = uninstallCommand;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const exit_codes_1 = require("../utils/exit-codes");
44
+ async function uninstallCommand() {
45
+ console.log('🔓 Uninstalling Avana Git hooks...\n');
46
+ try {
47
+ // Check if .husky directory exists
48
+ const huskyDir = path.join(process.cwd(), '.husky');
49
+ if (!fs.existsSync(huskyDir)) {
50
+ console.log('ℹ️ No Git hooks found to uninstall\n');
51
+ process.exit(exit_codes_1.ExitCode.SUCCESS);
52
+ return;
53
+ }
54
+ // Remove pre-commit hook
55
+ const preCommitPath = path.join(huskyDir, 'pre-commit');
56
+ if (fs.existsSync(preCommitPath)) {
57
+ // Check if it's an Avana hook
58
+ const content = fs.readFileSync(preCommitPath, 'utf-8');
59
+ if (content.includes('avana scan')) {
60
+ fs.unlinkSync(preCommitPath);
61
+ console.log('✅ Removed pre-commit hook\n');
62
+ }
63
+ else {
64
+ console.log('ℹ️ Pre-commit hook exists but was not created by Avana');
65
+ console.log(' Skipping removal to preserve your custom hook\n');
66
+ }
67
+ }
68
+ else {
69
+ console.log('ℹ️ No pre-commit hook found\n');
70
+ }
71
+ console.log('✅ Avana Git hooks uninstalled successfully!\n');
72
+ console.log('💡 To reinstall: avana install\n');
73
+ process.exit(exit_codes_1.ExitCode.SUCCESS);
74
+ }
75
+ catch (error) {
76
+ console.error('❌ Error uninstalling Git hooks:', error.message);
77
+ (0, exit_codes_1.handleUnexpectedError)(error instanceof Error ? error : new Error(String(error)));
78
+ }
79
+ }
80
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMH,4CAoCC;AAxCD,uCAAyB;AACzB,2CAA6B;AAC7B,oDAAsE;AAE/D,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,qBAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,8BAA8B;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAEhD,OAAO,CAAC,IAAI,CAAC,qBAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChE,IAAA,kCAAqB,EAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Avana - Core Engine
3
+ * Main entry point for security scanning functionality
4
+ */
5
+ export * from './types';
6
+ export * from './scanners/secret-scanner';
7
+ export * from './rules/secret-patterns';
8
+ export * from './rules/additional-patterns';
9
+ import type { ScanResult, ScanOptions, ScoreBreakdown } from './types';
10
+ /**
11
+ * Main Avana Engine with robust file handling and performance optimization
12
+ */
13
+ export declare class Avana {
14
+ private secretScanner;
15
+ private fileTypeDetector;
16
+ private fileStreamScanner;
17
+ private errorHandler;
18
+ private memoryManager;
19
+ private resultCache;
20
+ private parallelScanner;
21
+ private jsonFormatter;
22
+ constructor(options?: {
23
+ debugMode?: boolean;
24
+ maxMemoryMB?: number;
25
+ cacheDir?: string;
26
+ workerCount?: number;
27
+ });
28
+ /**
29
+ * Perform a complete security scan with robust file handling
30
+ */
31
+ scan(options: ScanOptions): Promise<ScanResult>;
32
+ /**
33
+ * Scan specific files with robust handling
34
+ */
35
+ private scanSpecificFiles;
36
+ /**
37
+ * Scan directory with robust handling and parallel processing
38
+ */
39
+ private scanDirectoryRobust;
40
+ /**
41
+ * Calculate security score (0-100) with detailed breakdown
42
+ * - Start with base score of 100
43
+ * - Deduct points based on severity:
44
+ * - Critical: -20 points each
45
+ * - High: -10 points each
46
+ * - Medium: -5 points each
47
+ * - Low: -2 points each
48
+ * - Minimum score is 0
49
+ *
50
+ * This calculation is deterministic - same inputs always produce same output
51
+ */
52
+ calculateSecurityScore(result: ScanResult): {
53
+ score: number;
54
+ breakdown: ScoreBreakdown;
55
+ };
56
+ /**
57
+ * Get total pattern count
58
+ */
59
+ getPatternCount(): number;
60
+ /**
61
+ * Get memory statistics
62
+ */
63
+ getMemoryStats(): import("./utils/memory-manager").MemoryStats;
64
+ /**
65
+ * Get cache statistics
66
+ */
67
+ getCacheStats(): import("./utils/result-cache").CacheStats;
68
+ /**
69
+ * Get error statistics
70
+ */
71
+ getErrorStats(): {
72
+ totalErrors: number;
73
+ errorsByType: Record<string, number>;
74
+ hasErrors: boolean;
75
+ };
76
+ /**
77
+ * Format scan result as JSON
78
+ */
79
+ formatAsJSON(result: ScanResult, options?: {
80
+ pretty?: boolean;
81
+ includeMetadata?: boolean;
82
+ includeDebugInfo?: boolean;
83
+ }): string;
84
+ /**
85
+ * Clear all caches and reset state
86
+ */
87
+ clearCache(): void;
88
+ /**
89
+ * Cleanup resources
90
+ */
91
+ cleanup(): Promise<void>;
92
+ /**
93
+ * Convert ScanResult to JSONOutputFormatter format
94
+ */
95
+ private convertToFormatterResult;
96
+ }
97
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAiB,cAAc,EAAE,MAAM,SAAS,CAAC;AActF;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAsB;gBAE/B,OAAO,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAWD;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAgG5D;;OAEG;YACW,iBAAiB;IA0E/B;;OAEG;YACW,mBAAmB;IAgIjC;;;;;;;;;;;OAWG;IACI,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,cAAc,CAAA;KAAE;IA+B/F;;OAEG;IACI,eAAe,IAAI,MAAM;IAIhC;;OAEG;IACI,cAAc;IAIrB;;OAEG;IACI,aAAa;IAIpB;;OAEG;IACI,aAAa;;;;;IAQpB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAChD,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GAAG,MAAM;IAMV;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAyDjC"}