supamend
Version:
Pluggable DevSecOps Security Scanner with 10+ scanners and multiple reporting channels
51 lines • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ErrorRecoveryManager = exports.FileSystemErrorRecovery = exports.NetworkErrorRecovery = void 0;
class NetworkErrorRecovery {
canRecover(error) {
return error.message.includes('network') ||
error.message.includes('timeout') ||
error.message.includes('ECONNREFUSED');
}
async recover(error, context) {
// Wait and retry with exponential backoff
const delay = Math.min(1000 * Math.pow(2, context.attempt || 0), 10000);
await new Promise(resolve => setTimeout(resolve, delay));
return context.retry();
}
}
exports.NetworkErrorRecovery = NetworkErrorRecovery;
class FileSystemErrorRecovery {
canRecover(error) {
return error.message.includes('ENOENT') ||
error.message.includes('permission denied');
}
async recover(error, context) {
if (error.message.includes('ENOENT')) {
// Try to create missing directories
const fs = require('fs-extra');
await fs.ensureDir(context.directory);
return context.retry();
}
throw error; // Cannot recover from permission errors
}
}
exports.FileSystemErrorRecovery = FileSystemErrorRecovery;
class ErrorRecoveryManager {
constructor() {
this.strategies = [
new NetworkErrorRecovery(),
new FileSystemErrorRecovery()
];
}
async attemptRecovery(error, context) {
for (const strategy of this.strategies) {
if (strategy.canRecover(error)) {
return await strategy.recover(error, context);
}
}
throw error; // No recovery strategy found
}
}
exports.ErrorRecoveryManager = ErrorRecoveryManager;
//# sourceMappingURL=error-recovery.js.map