averox-sdk-secure
Version:
Real-time SDK for key monitoring, secure messaging, and A/V streaming with encryption
67 lines (66 loc) • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SecurityMonitor = void 0;
const events_1 = require("events");
const logger_1 = require("@config/logger");
class SecurityMonitor extends events_1.EventEmitter {
constructor(telemetryLevel) {
super();
this.keyEvents = new Map();
this.encryptionStats = new Map();
this.telemetryLevel = telemetryLevel;
this.logger = new logger_1.Logger({
minLevel: logger_1.LogLevel.INFO,
timestamps: true,
showLevel: true,
});
}
trackKeyEvent(keyId, event) {
this.keyEvents.set(keyId, event);
this.logger.info(`Key Event: ${keyId} - ${event.type}`, event);
this.updateUI('keyEvents', Array.from(this.keyEvents.values()));
}
trackEncryptionStats(operationId, stats) {
this.encryptionStats.set(operationId, stats);
this.logger.info(`Encryption Stats: ${operationId}`, stats);
this.updateUI('encryptionStats', Array.from(this.encryptionStats.values()));
}
updateUI(component, data) {
// Emit events that UI components can listen to
this.emit('monitoringUpdate', {
component,
data,
timestamp: new Date(),
});
}
getKeyMetrics() {
return {
totalKeys: this.keyEvents.size,
activeKeys: Array.from(this.keyEvents.values()).filter((e) => e.status === 'active').length,
compromisedKeys: Array.from(this.keyEvents.values()).filter((e) => e.status === 'compromised')
.length,
lastUpdated: new Date(),
};
}
getEncryptionMetrics() {
return {
totalOperations: this.encryptionStats.size,
successRate: this.calculateSuccessRate(),
averageLatency: this.calculateAverageLatency(),
lastUpdated: new Date(),
};
}
calculateSuccessRate() {
const stats = Array.from(this.encryptionStats.values());
if (stats.length === 0)
return 0;
return stats.filter((s) => s.success).length / stats.length;
}
calculateAverageLatency() {
const stats = Array.from(this.encryptionStats.values());
if (stats.length === 0)
return 0;
return stats.reduce((sum, s) => sum + s.latency, 0) / stats.length;
}
}
exports.SecurityMonitor = SecurityMonitor;