/**
* Simple in-memory cache with TTL.
*/
interface CacheEntry<T> {
value: T;
expiresAt: number;
}
const store = new Map<string, CacheEntry<unknown>>();
export function get<T>(key: string): T | undefined {
const entry = store.get(key) as CacheEntry<T> | undefined;
if (!entry || Date.now() > entry.expiresAt) {
store.delete(key);
return undefined;
}
return entry.value;
}
export function set<T>(key: string, value: T, ttlSeconds: number): void {
store.set(key, {
value,
expiresAt: Date.now() + ttlSeconds * 1000,
});
}
export function invalidate(key: string): void {
store.delete(key);
}
export function invalidateAll(): void {
store.clear();
}