interface CacheEntry { data: T; expiresAt: number; } export class TtlCache { private store = new Map>(); constructor(private defaultTtlMs: number) {} get(key: string): T | null { const entry = this.store.get(key); if (!entry) return null; if (Date.now() > entry.expiresAt) { this.store.delete(key); return null; } return entry.data; } set(key: string, data: T, ttlMs?: number): void { this.store.set(key, { data, expiresAt: Date.now() + (ttlMs ?? this.defaultTtlMs), }); } clear(): void { this.store.clear(); } get size(): number { return this.store.size; } }