import * as retry from 'bluebird-retry'; function isRateLimitOrTempError(err: Error & { statusCode?: number }) { return err.statusCode && ( err.statusCode == 429 // Rate Limit || err.statusCode == 502 // Temporary error, retry again ); } function retryOnRateLimited<T>(request: () => Promise<T>): Promise<T> { return retry(request, { max_tries: 50, backoff: 1.25, throw_original: true, interval: 2000, predicate: isRateLimitOrTempError, }); } const result = await retryOnRateLimited(() => request.post('/limit-me'))