averox-sdk-secure
Version:
Real-time SDK for key monitoring, secure messaging, and A/V streaming with encryption
79 lines (78 loc) • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KeyManager = void 0;
const events_1 = require("events");
const crypto_1 = require("crypto");
const logger_1 = require("@config/logger");
class KeyManager extends events_1.EventEmitter {
constructor() {
super();
this.keys = new Map();
this.metadata = new Map();
this.logger = new logger_1.Logger({
minLevel: logger_1.LogLevel.INFO,
timestamps: true,
showLevel: true,
});
}
generateKey(type) {
const key = (0, crypto_1.randomBytes)(32).toString('hex');
const now = new Date();
this.keys.set(type, key);
this.metadata.set(type, {
createdAt: now,
lastRotated: now,
compromised: false,
usageCount: 0,
});
this.emit('keyGenerated', { type, timestamp: now });
this.logger.info(`Generated new key for type: ${type}`);
return key;
}
rotateKey(type) {
const oldKey = this.keys.get(type);
const newKey = this.generateKey(type);
this.emit('keyRotated', {
type,
oldKey,
newKey,
timestamp: new Date(),
});
this.logger.info(`Rotated key for type: ${type}`);
return newKey;
}
getKey(type) {
const key = this.keys.get(type);
if (key) {
const metadata = this.metadata.get(type);
if (metadata) {
metadata.usageCount++;
this.metadata.set(type, metadata);
}
}
return key;
}
markKeyAsCompromised(type) {
const metadata = this.metadata.get(type);
if (metadata) {
metadata.compromised = true;
this.metadata.set(type, metadata);
this.emit('keyCompromised', { type, timestamp: new Date() });
this.logger.warn(`Key marked as compromised for type: ${type}`);
this.rotateKey(type);
}
}
getKeyMetadata(type) {
return this.metadata.get(type);
}
onKeyGenerated(callback) {
this.on('keyGenerated', callback);
}
onKeyRotated(callback) {
this.on('keyRotated', callback);
}
onKeyCompromised(callback) {
this.on('keyCompromised', callback);
}
}
exports.KeyManager = KeyManager;