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'))