type CacheEntry = { data: T; expiresAt: number }; const store = new Map>(); export function cached( key: string, ttlMs: number, fn: () => Promise, ): Promise { const existing = store.get(key); if (existing && existing.expiresAt > Date.now()) { return Promise.resolve(existing.data as T); } return fn().then((data) => { store.set(key, { data, expiresAt: Date.now() + ttlMs }); return data; }); }