import { Request, Response, NextFunction } from 'express'; interface CacheEntry { data: unknown; expiresAt: number; } const cache = new Map(); const DEFAULT_TTL = 60 * 1000; // 1 minute export function cacheMiddleware(ttl: number = DEFAULT_TTL) { return (req: Request, res: Response, next: NextFunction) => { const key = `${req.method}:${req.originalUrl}`; const cached = cache.get(key); if (cached && cached.expiresAt > Date.now()) { return res.json(cached.data); } // Store original json method const originalJson = res.json.bind(res); // Override json method to cache response res.json = function (body: unknown) { cache.set(key, { data: body, expiresAt: Date.now() + ttl, }); return originalJson(body); }; next(); }; } export function clearCache(): void { cache.clear(); } export function clearCacheForPattern(pattern: string): void { for (const key of cache.keys()) { if (key.includes(pattern)) { cache.delete(key); } } }