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; };