export async function fetchJson( url: string, init: RequestInit, timeoutMs: number, fetchFn: typeof fetch, ): Promise { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { return await fetchFn(url, { ...init, signal: controller.signal }); } finally { clearTimeout(timer); } }