export const sleep = (ms: number) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; export async function asyncRunSafe( fn: Promise, ): Promise<[Error] | [null, T]> { try { return [null, await fn]; } catch (e: any) { return [e || new Error('unknown error')]; } } export async function fetchWithRetry( fn: Promise, retries = 3, ): Promise<[Error] | [null, T]> { const [error, res] = await asyncRunSafe(fn); if (error) { if (retries > 0) { const res = await fetchWithRetry(fn, retries - 1); return res; } else { if (error instanceof Error) return [error]; return [new Error('unknown error')]; } } else { return [null, res]; } }