const { logToFile } = require('./logger'); class MemoryCache { constructor() { this.store = new Map(); } get(key) { const entry = this.store.get(key); if (!entry) return null; if (Date.now() > entry.expiresAt) { this.store.delete(key); return null; } return entry.value; } set(key, value, ttlMs) { this.store.set(key, { value, expiresAt: Date.now() + ttlMs }); } invalidate(key) { this.store.delete(key); } clear() { this.store.clear(); } getStats() { const now = Date.now(); const entries = []; let totalSize = 0; for (const [key, entry] of this.store.entries()) { const json = JSON.stringify(entry.value); const sizeBytes = Buffer.byteLength(json, 'utf8'); totalSize += sizeBytes; const ttlRemaining = Math.max(0, entry.expiresAt - now); const expired = now > entry.expiresAt; let itemCount = null; if (Array.isArray(entry.value)) { itemCount = entry.value.length; } else if (entry.value && typeof entry.value === 'object') { if (Array.isArray(entry.value.records)) itemCount = entry.value.records.length; else if (Array.isArray(entry.value.slots)) itemCount = entry.value.slots.length; } entries.push({ key, sizeBytes, itemCount, ttlRemainingMs: ttlRemaining, expired }); } return { entryCount: this.store.size, totalSizeBytes: totalSize, entries }; } } const cache = new MemoryCache(); module.exports = cache;