UNPKG

pact-audit-free

Version:

Free smart contract security scanner using Slither static analysis

94 lines 3.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatResults = formatResults; exports.printBanner = printBanner; const chalk_1 = __importDefault(require("chalk")); function formatResults(vulnerabilities) { console.log(''); console.log(chalk_1.default.cyan.bold('📊 SCAN RESULTS')); console.log(chalk_1.default.gray('═'.repeat(30))); if (vulnerabilities.length === 0) { console.log(chalk_1.default.green('🎉 No vulnerabilities found!')); console.log(chalk_1.default.gray('The smart contract appears to follow security best practices.')); return; } // Group by severity const grouped = vulnerabilities.reduce((acc, vuln) => { acc[vuln.severity] = (acc[vuln.severity] || 0) + 1; return acc; }, {}); // Summary console.log(chalk_1.default.white('Summary:')); const severityOrder = ['HIGH', 'MEDIUM', 'LOW', 'INFORMATIONAL']; severityOrder.forEach(severity => { const count = grouped[severity]; if (count) { const color = getSeverityColor(severity); console.log(chalk_1.default[color](` ${severity}: ${count}`)); } }); console.log(''); console.log(chalk_1.default.white('Details:')); // Sort vulnerabilities by severity const sortedVulns = sortVulnerabilitiesBySeverity(vulnerabilities); // List vulnerabilities sortedVulns.forEach((vuln, i) => { const color = getSeverityColor(vuln.severity); console.log(chalk_1.default[color](`${i + 1}. [${vuln.severity}] ${vuln.type}`)); // Truncate long descriptions const desc = vuln.description.length > 80 ? vuln.description.slice(0, 80) + '...' : vuln.description; console.log(chalk_1.default.gray(` ${desc}`)); if (vuln.sourceMapping?.filename) { const lineInfo = vuln.sourceMapping.lines.length > 0 ? `:${vuln.sourceMapping.lines[0]}` : ''; console.log(chalk_1.default.gray(` 📍 ${vuln.sourceMapping.filename}${lineInfo}`)); } console.log(''); }); // Final warning/success message const hasHigh = vulnerabilities.some(v => v.severity === 'HIGH'); const hasMedium = vulnerabilities.some(v => v.severity === 'MEDIUM'); if (hasHigh) { console.log(chalk_1.default.red.bold('⚠️ HIGH SEVERITY ISSUES DETECTED - Review required before deployment!')); } else if (hasMedium) { console.log(chalk_1.default.yellow.bold('⚡ Medium severity issues detected - Review recommended')); } else { console.log(chalk_1.default.green.bold('✅ No critical security issues detected')); } } function getSeverityColor(severity) { switch (severity) { case 'HIGH': return 'red'; case 'MEDIUM': return 'yellow'; case 'LOW': return 'cyan'; case 'INFORMATIONAL': default: return 'gray'; } } function sortVulnerabilitiesBySeverity(vulnerabilities) { const severityOrder = { 'HIGH': 0, 'MEDIUM': 1, 'LOW': 2, 'INFORMATIONAL': 3 }; return vulnerabilities.sort((a, b) => (severityOrder[a.severity] ?? 999) - (severityOrder[b.severity] ?? 999)); } function printBanner() { console.log(chalk_1.default.blue.bold('🔍 PACT Audit Free - Slither Security Scanner')); console.log(chalk_1.default.gray('Free smart contract security analysis')); console.log(chalk_1.default.gray('═'.repeat(50))); } //# sourceMappingURL=formatter.js.map