export interface WrapStore { get(key: string): Promise set(key: string, value: T, ttlSeconds?: number): Promise } export async function wrapValue( store: WrapStore, key: string, factory: () => Promise, ttlSeconds?: number, ): Promise { const cached = await store.get(key) if (cached !== null) return cached const value = await factory() await store.set(key, value, ttlSeconds) return value }