Skip to content

Commit fcc0658

Browse files
committed
fix(provider): Throw error when we ignore too large Retry-After delay
Otherwise the Spotify provider immediately retries HTTP 429 requests.
1 parent 4b0fb7d commit fcc0658

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

providers/base.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,22 @@ export abstract class MetadataProvider {
257257
/** Handles rate limit HTTP headers and sets the request delay. */
258258
protected handleRateLimit(response: Response) {
259259
const retryAfter = response.headers.get('Retry-After');
260+
const relevantHeaders = Object.fromEntries(
261+
[...response.headers].filter(([key, _value]) => key.includes('rate')),
262+
);
263+
this.log.warn(`${this.name} rate limit headers: ${JSON.stringify(relevantHeaders)}`);
260264
if (retryAfter) {
261265
this.log.info(`${this.name} rate limit (HTTP ${response.status}): Retry-After ${retryAfter}`);
262266
const retryAfterMs = parseInt(retryAfter) * 1000;
263-
if (retryAfterMs > 0 && retryAfterMs < this.requestMaxDelay) {
264-
this.requestDelay = delay(retryAfterMs);
267+
if (retryAfterMs > 0) {
268+
if (retryAfterMs < this.requestMaxDelay) {
269+
this.requestDelay = delay(retryAfterMs);
270+
} else {
271+
throw new ProviderError(
272+
this.name,
273+
`Suggested rate limit delay is unacceptably high, cancelling request (Retry-After ${retryAfter})`,
274+
);
275+
}
265276
}
266277
}
267278
}

0 commit comments

Comments
 (0)