Browse Source

Merge pull request #9 from zeithq/fix/429-error-handling

Fix rate limit error handling
master
Guillermo Rauch 9 years ago
parent
commit
85dc7afc01
  1. 8
      bin/now
  2. 20
      lib/index.js

8
bin/now

@ -137,6 +137,14 @@ async function sync (token) {
function handleError (err) { function handleError (err) {
if (403 === err.status) { if (403 === err.status) {
error('Authentication error. Run `now -L` or `now --login` to log-in again.'); error('Authentication error. Run `now -L` or `now --login` to log-in again.');
} else if (429 === err.status) {
if (null != err.retryAfter) {
error('Rate limit exceeded error. Try again in ' +
ms(err.retryAfter * 1000, { long: true }) +
', or upgrade your account: https://zeit.co/now#pricing');
} else {
error('Rate limit exceeded error. Please try later.');
}
} else if (err.userError) { } else if (err.userError) {
error(err.message); error(err.message);
} else if (500 === err.status) { } else if (500 === err.status) {

20
lib/index.js

@ -87,10 +87,10 @@ export default class Now extends EventEmitter {
}); });
if (this._debug) console.timeEnd('> [debug] /create'); if (this._debug) console.timeEnd('> [debug] /create');
// no retry on 403 // no retry on 4xx
if (403 === res.status) { if (400 <= res.status && 500 > res.status) {
if (this._debug) { if (this._debug) {
console.log('> [debug] bailing on creating due to 403'); console.log('> [debug] bailing on creating due to %s', res.status);
} }
return bail(responseError(res)); return bail(responseError(res));
} }
@ -140,9 +140,9 @@ export default class Now extends EventEmitter {
}); });
if (this._debug) console.timeEnd(`> [debug] /sync ${name}`); if (this._debug) console.timeEnd(`> [debug] /sync ${name}`);
// no retry on 403 // no retry on 4xx
if (403 === res.status) { if (400 <= res.status || 500 > res.status) {
if (this._debug) console.log('> [debug] bailing on creating due to 403'); if (this._debug) console.log('> [debug] bailing on creating due to %s', res.status);
return bail(responseError(res)); return bail(responseError(res));
} }
@ -195,5 +195,13 @@ function toRelative (path, base) {
function responseError (res) { function responseError (res) {
const err = new Error('Response error'); const err = new Error('Response error');
err.status = res.status; err.status = res.status;
if (429 === res.status) {
const retryAfter = res.headers.get('Retry-After');
if (retryAfter) {
err.retryAfter = parseInt(retryAfter, 10);
}
}
return err; return err;
} }

Loading…
Cancel
Save