UNPKG

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
"use strict"; 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;