Skip to content

Commit e6d1bff

Browse files
authored
fix: Retry-After header in node should be lower-case (#2779)
1 parent a19e33e commit e6d1bff

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

packages/browser/src/transports/fetch.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ export class FetchTransport extends BaseTransport {
5757

5858
if (status === Status.RateLimit) {
5959
const now = Date.now();
60-
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, response.headers.get('Retry-After')));
60+
/**
61+
* "The name is case-insensitive."
62+
* https://developer.mozilla.org/en-US/docs/Web/API/Headers/get
63+
*/
64+
const retryAfterHeader = response.headers.get('Retry-After');
65+
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, retryAfterHeader));
6166
logger.warn(`Too many requests, backing off till: ${this._disabledUntil}`);
6267
}
6368

packages/browser/src/transports/xhr.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ export class XHRTransport extends BaseTransport {
4141

4242
if (status === Status.RateLimit) {
4343
const now = Date.now();
44-
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, request.getResponseHeader('Retry-After')));
44+
/**
45+
* "The search for the header name is case-insensitive."
46+
* https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getResponseHeader
47+
*/
48+
const retryAfterHeader = request.getResponseHeader('Retry-After');
49+
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, retryAfterHeader));
4550
logger.warn(`Too many requests, backing off till: ${this._disabledUntil}`);
4651
}
4752

packages/node/src/transports/base.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,13 @@ export abstract class BaseTransport implements Transport {
106106
} else {
107107
if (status === Status.RateLimit) {
108108
const now = Date.now();
109-
let header = res.headers ? res.headers['Retry-After'] : '';
110-
header = Array.isArray(header) ? header[0] : header;
111-
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, header));
109+
/**
110+
* "Key-value pairs of header names and values. Header names are lower-cased."
111+
* https://nodejs.org/api/http.html#http_message_headers
112+
*/
113+
let retryAfterHeader = res.headers ? res.headers['retry-after'] : '';
114+
retryAfterHeader = Array.isArray(retryAfterHeader) ? retryAfterHeader[0] : retryAfterHeader;
115+
this._disabledUntil = new Date(now + parseRetryAfterHeader(now, retryAfterHeader));
112116
logger.warn(`Too many requests, backing off till: ${this._disabledUntil}`);
113117
}
114118

0 commit comments

Comments
 (0)