const singlePromiseMap: Record> = {}; export const singlePromise = ( cb: () => Promise, key: string ): Promise => { let promise: null | 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; };