scrapebadger 0.47.0 → 0.47.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
  var WebSocket__default = /*#__PURE__*/_interopDefault(WebSocket);
10
10
 
11
11
  // src/internal/version.ts
12
- var SDK_VERSION = "0.47.0";
12
+ var SDK_VERSION = "0.47.1";
13
13
 
14
14
  // src/internal/exceptions.ts
15
15
  var ScrapeBadgerError = class _ScrapeBadgerError extends Error {
@@ -211,8 +211,27 @@ var BaseClient = class _BaseClient {
211
211
  async executeWithRetry(url, options) {
212
212
  let lastError;
213
213
  for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
214
+ let retryAfterMs = 0;
214
215
  try {
215
216
  const httpResponse = await this.fetchWithTimeout(url, options);
217
+ const retryAfter = httpResponse.headers.get("Retry-After")?.trim();
218
+ if (retryAfter) {
219
+ let requestedDelay = 0;
220
+ if (/^\d+$/.test(retryAfter)) {
221
+ requestedDelay = Number(retryAfter) * 1e3;
222
+ } else if (/^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} [A-Z][a-z]{2} \d{4}|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \d{2}-[A-Z][a-z]{2}-\d{2}) \d{2}:\d{2}:\d{2} GMT$/.test(
223
+ retryAfter
224
+ )) {
225
+ requestedDelay = Date.parse(retryAfter) - Date.now();
226
+ } else if (/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) [A-Z][a-z]{2} [ \d]\d \d{2}:\d{2}:\d{2} \d{4}$/.test(
227
+ retryAfter
228
+ )) {
229
+ requestedDelay = Date.parse(`${retryAfter} GMT`) - Date.now();
230
+ }
231
+ if (requestedDelay > 0 && requestedDelay <= 2147483647) {
232
+ retryAfterMs = requestedDelay;
233
+ }
234
+ }
216
235
  const data = await this.handleResponse(httpResponse);
217
236
  const rateLimit = this.parseRateLimitHeaders(httpResponse.headers);
218
237
  return { data, rateLimit };
@@ -224,7 +243,7 @@ var BaseClient = class _BaseClient {
224
243
  if (attempt === this.config.maxRetries) {
225
244
  break;
226
245
  }
227
- const delay = this.config.retryDelay * Math.pow(2, attempt);
246
+ const delay = Math.max(this.config.retryDelay * Math.pow(2, attempt), retryAfterMs);
228
247
  const delaySec = Math.round(delay / 1e3);
229
248
  const attemptNum = attempt + 1;
230
249
  const maxRetries = this.config.maxRetries;
@@ -235,7 +254,7 @@ var BaseClient = class _BaseClient {
235
254
  if (error.retryAfter) {
236
255
  const retryDelay = (error.retryAfter - Date.now() / 1e3) * 1e3;
237
256
  if (retryDelay > 0 && retryDelay < 6e4) {
238
- await this.sleep(retryDelay);
257
+ await this.sleep(Math.max(retryDelay, retryAfterMs));
239
258
  continue;
240
259
  }
241
260
  }