const singlePromiseMap: Record> = {} export const singlePromise = (cb: () => Promise, key: string) => { let promise = singlePromiseMap[key] if (!promise) { promise = cb().finally(() => { delete singlePromiseMap[key] promise = null }) singlePromiseMap[key] = promise } return promise } export const retryPromise = async ( cb: () => Promise, maxNumberOfRetries = 3, ) => { for (let i = 0; i < maxNumberOfRetries; i++) { if (await cb()) return true } return false }