pact-audit-free
Version:
Free smart contract security scanner using Slither static analysis
94 lines • 3.76 kB
JavaScript
;
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