implement tidal’s (new?) retry-after header for rate-limiting
This commit is contained in:
@ -81,6 +81,7 @@ export class TidalPlaylistAdder extends OauthPlaylistAdder implements PlaylistAd
|
||||
}
|
||||
|
||||
private processTidalHeaders(headers: Headers) {
|
||||
const retryAfterHeader = headers.get('Retry-After');
|
||||
const remainingTokens = headers.get('x-ratelimit-remaining');
|
||||
const requiredTokens = headers.get('x-ratelimit-requested-tokens');
|
||||
const replenishRate = headers.get('x-ratelimit-replenish-rate');
|
||||
@ -97,6 +98,10 @@ export class TidalPlaylistAdder extends OauthPlaylistAdder implements PlaylistAd
|
||||
replenishRateValue
|
||||
);
|
||||
}
|
||||
if (retryAfterHeader) {
|
||||
const retryAfter = parseInt(retryAfterHeader);
|
||||
this.logger.debug('Tidal rate limit. Retry-After', retryAfter);
|
||||
}
|
||||
}
|
||||
|
||||
private async getAlbumItems(
|
||||
@ -284,6 +289,11 @@ export class TidalPlaylistAdder extends OauthPlaylistAdder implements PlaylistAd
|
||||
this.logger.info('Added to playlist', song.tidalUri, song.title);
|
||||
break;
|
||||
case 429:
|
||||
let secondsToWait = -1;
|
||||
const retryAfterHeader = resp.headers.get('Retry-After');
|
||||
if (retryAfterHeader) {
|
||||
secondsToWait = parseInt(retryAfterHeader);
|
||||
} else {
|
||||
const remainingTokens = resp.headers.get('x-ratelimit-remaining');
|
||||
const requiredTokens = resp.headers.get('x-ratelimit-requested-tokens');
|
||||
const replenishRate = resp.headers.get('x-ratelimit-replenish-rate');
|
||||
@ -292,7 +302,12 @@ export class TidalPlaylistAdder extends OauthPlaylistAdder implements PlaylistAd
|
||||
const requiredTokensValue = parseInt(requiredTokens);
|
||||
const replenishRateValue = parseInt(replenishRate);
|
||||
const needToReplenish = requiredTokensValue - remainingTokensValue;
|
||||
const secondsToWait = 1 + needToReplenish / replenishRateValue;
|
||||
secondsToWait = 1 + needToReplenish / replenishRateValue;
|
||||
}
|
||||
}
|
||||
if (secondsToWait === -1) {
|
||||
this.logger.warn('Could not read headers how long to wait', resp.headers);
|
||||
} else {
|
||||
this.logger.warn(
|
||||
'Received HTTP 429 Too Many Requests. Retrying in',
|
||||
secondsToWait,
|
||||
@ -302,8 +317,6 @@ export class TidalPlaylistAdder extends OauthPlaylistAdder implements PlaylistAd
|
||||
setTimeout(() => {
|
||||
this.addToPlaylistRetry(song, remaning--);
|
||||
}, secondsToWait * 1000);
|
||||
} else {
|
||||
this.logger.warn('Could not read headers how long to wait', resp.headers);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
Reference in New Issue
Block a user