"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = request; exports.requestWithRetry = requestWithRetry; var _stream = require("stream"); var _util = require("util"); const pipelineAsync = (0, _util.promisify)(_stream.pipeline); async function request(transport, opt, body = null) { return new Promise((resolve, reject) => { const requestObj = transport.request(opt, response => { resolve(response); }); requestObj.on('error', reject); if (!body || Buffer.isBuffer(body) || typeof body === 'string') { requestObj.end(body); } else { pipelineAsync(body, requestObj).catch(reject); } }); } const MAX_RETRIES = 1; const BASE_DELAY_MS = 100; // Base delay for exponential backoff const MAX_DELAY_MS = 60000; // Max delay for exponential backoff // Retryable error codes for HTTP ( ref: minio-go) const retryHttpCodes = { 408: true, 429: true, 499: true, 500: true, 502: true, 503: true, 504: true, 520: true }; exports.retryHttpCodes = retryHttpCodes; const isHttpRetryable = httpResCode => { return retryHttpCodes[httpResCode] !== undefined; }; const sleep = ms => { return new Promise(resolve => setTimeout(resolve, ms)); }; const getExpBackOffDelay = (retryCount, baseDelayMs, maximumDelayMs) => { const backOffBy = baseDelayMs * (1 << retryCount); const additionalDelay = Math.random() * backOffBy; return Math.min(backOffBy + additionalDelay, maximumDelayMs); }; async function requestWithRetry(transport, opt, body = null, maxRetries = MAX_RETRIES, baseDelayMs = BASE_DELAY_MS, maximumDelayMs = MAX_DELAY_MS) { let attempt = 0; let isRetryable = false; while (attempt <= maxRetries) { try { const response = await request(transport, opt, body); // Check if the HTTP status code is retryable if (isHttpRetryable(response.statusCode)) { isRetryable = true; throw new Error(`Retryable HTTP status: ${response.statusCode}`); // trigger retry attempt with calculated delay } return response; // Success, return the raw response } catch (err) { if (isRetryable) { attempt++; isRetryable = false; if (attempt > maxRetries) { throw new Error(`Request failed after ${maxRetries} retries: ${err}`); } const delay = getExpBackOffDelay(attempt, baseDelayMs, maximumDelayMs); // eslint-disable-next-line no-console console.warn(`${new Date().toLocaleString()} Retrying request (attempt ${attempt}/${maxRetries}) after ${delay}ms due to: ${err}`); await sleep(delay); } else { throw err; // re-throw if any request, syntax errors } } } throw new Error(`${MAX_RETRIES} Retries exhausted, request failed.`); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3RyZWFtIiwicmVxdWlyZSIsIl91dGlsIiwicGlwZWxpbmVBc3luYyIsInByb21pc2lmeSIsInBpcGVsaW5lIiwicmVxdWVzdCIsInRyYW5zcG9ydCIsIm9wdCIsImJvZHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcXVlc3RPYmoiLCJyZXNwb25zZSIsIm9uIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJlbmQiLCJjYXRjaCIsIk1BWF9SRVRSSUVTIiwiQkFTRV9ERUxBWV9NUyIsIk1BWF9ERUxBWV9NUyIsInJldHJ5SHR0cENvZGVzIiwiZXhwb3J0cyIsImlzSHR0cFJldHJ5YWJsZSIsImh0dHBSZXNDb2RlIiwidW5kZWZpbmVkIiwic2xlZXAiLCJtcyIsInNldFRpbWVvdXQiLCJnZXRFeHBCYWNrT2ZmRGVsYXkiLCJyZXRyeUNvdW50IiwiYmFzZURlbGF5TXMiLCJtYXhpbXVtRGVsYXlNcyIsImJhY2tPZmZCeSIsImFkZGl0aW9uYWxEZWxheSIsIk1hdGgiLCJyYW5kb20iLCJtaW4iLCJyZXF1ZXN0V2l0aFJldHJ5IiwibWF4UmV0cmllcyIsImF0dGVtcHQiLCJpc1JldHJ5YWJsZSIsInN0YXR1c0NvZGUiLCJFcnJvciIsImVyciIsImRlbGF5IiwiY29uc29sZSIsIndhcm4iLCJEYXRlIiwidG9Mb2NhbGVTdHJpbmciXSwic291cmNlcyI6WyJyZXF1ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgaHR0cCBmcm9tICdub2RlOmh0dHAnXG5pbXBvcnQgdHlwZSAqIGFzIGh0dHBzIGZyb20gJ25vZGU6aHR0cHMnXG5pbXBvcnQgdHlwZSAqIGFzIHN0cmVhbSBmcm9tICdub2RlOnN0cmVhbSdcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSAnbm9kZTpzdHJlYW0nXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5cbmltcG9ydCB0eXBlIHsgVHJhbnNwb3J0IH0gZnJvbSAnLi90eXBlLnRzJ1xuXG5jb25zdCBwaXBlbGluZUFzeW5jID0gcHJvbWlzaWZ5KHBpcGVsaW5lKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgdHJhbnNwb3J0OiBUcmFuc3BvcnQsXG4gIG9wdDogaHR0cHMuUmVxdWVzdE9wdGlvbnMsXG4gIGJvZHk6IEJ1ZmZlciB8IHN0cmluZyB8IHN0cmVhbS5SZWFkYWJsZSB8IG51bGwgPSBudWxsLFxuKTogUHJvbWlzZTxodHRwLkluY29taW5nTWVzc2FnZT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8aHR0cC5JbmNvbWluZ01lc3NhZ2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0T2JqID0gdHJhbnNwb3J0LnJlcXVlc3Qob3B0LCAocmVzcG9uc2UpID0+IHtcbiAgICAgIHJlc29sdmUocmVzcG9uc2UpXG4gICAgfSlcblxuICAgIHJlcXVlc3RPYmoub24oJ2Vycm9yJywgcmVqZWN0KVxuXG4gICAgaWYgKCFib2R5IHx8IEJ1ZmZlci5pc0J1ZmZlcihib2R5KSB8fCB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcXVlc3RPYmouZW5kKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHBpcGVsaW5lQXN5bmMoYm9keSwgcmVxdWVzdE9iaikuY2F0Y2gocmVqZWN0KVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgTUFYX1JFVFJJRVMgPSAxXG5jb25zdCBCQVNFX0RFTEFZX01TID0gMTAwIC8vIEJhc2UgZGVsYXkgZm9yIGV4cG9uZW50aWFsIGJhY2tvZmZcbmNvbnN0IE1BWF9ERUxBWV9NUyA9IDYwMDAwIC8vIE1heCBkZWxheSBmb3IgZXhwb25lbnRpYWwgYmFja29mZlxuXG4vLyBSZXRyeWFibGUgZXJyb3IgY29kZXMgZm9yIEhUVFAgKCByZWY6IG1pbmlvLWdvKVxuZXhwb3J0IGNvbnN0IHJldHJ5SHR0cENvZGVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHtcbiAgNDA4OiB0cnVlLFxuICA0Mjk6IHRydWUsXG4gIDQ5OTogdHJ1ZSxcbiAgNTAwOiB0cnVlLFxuICA1MDI6IHRydWUsXG4gIDUwMzogdHJ1ZSxcbiAgNTA0OiB0cnVlLFxuICA1MjA6IHRydWUsXG59XG5cbmNvbnN0IGlzSHR0cFJldHJ5YWJsZSA9IChodHRwUmVzQ29kZTogbnVtYmVyKSA9PiB7XG4gIHJldHVybiByZXRyeUh0dHBDb2Rlc1todHRwUmVzQ29kZV0gIT09IHVuZGVmaW5lZFxufVxuXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXG59XG5cbmNvbnN0IGdldEV4cEJhY2tPZmZEZWxheSA9IChyZXRyeUNvdW50OiBudW1iZXIsIGJhc2VEZWxheU1zOiBudW1iZXIsIG1heGltdW1EZWxheU1zOiBudW1iZXIpID0+IHtcbiAgY29uc3QgYmFja09mZkJ5ID0gYmFzZURlbGF5TXMgKiAoMSA8PCByZXRyeUNvdW50KVxuICBjb25zdCBhZGRpdGlvbmFsRGVsYXkgPSBNYXRoLnJhbmRvbSgpICogYmFja09mZkJ5XG4gIHJldHVybiBNYXRoLm1pbihiYWNrT2ZmQnkgKyBhZGRpdGlvbmFsRGVsYXksIG1heGltdW1EZWxheU1zKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFdpdGhSZXRyeShcbiAgdHJhbnNwb3J0OiBUcmFuc3BvcnQsXG4gIG9wdDogaHR0cHMuUmVxdWVzdE9wdGlvbnMsXG4gIGJvZHk6IEJ1ZmZlciB8IHN0cmluZyB8IHN0cmVhbS5SZWFkYWJsZSB8IG51bGwgPSBudWxsLFxuICBtYXhSZXRyaWVzOiBudW1iZXIgPSBNQVhfUkVUUklFUyxcbiAgYmFzZURlbGF5TXM6IG51bWJlciA9IEJBU0VfREVMQVlfTVMsXG4gIG1heGltdW1EZWxheU1zOiBudW1iZXIgPSBNQVhfREVMQVlfTVMsXG4pOiBQcm9taXNlPGh0dHAuSW5jb21pbmdNZXNzYWdlPiB7XG4gIGxldCBhdHRlbXB0ID0gMFxuICBsZXQgaXNSZXRyeWFibGUgPSBmYWxzZVxuICB3aGlsZSAoYXR0ZW1wdCA8PSBtYXhSZXRyaWVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh0cmFuc3BvcnQsIG9wdCwgYm9keSlcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGlzIHJldHJ5YWJsZVxuICAgICAgaWYgKGlzSHR0cFJldHJ5YWJsZShyZXNwb25zZS5zdGF0dXNDb2RlIGFzIG51bWJlcikpIHtcbiAgICAgICAgaXNSZXRyeWFibGUgPSB0cnVlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmV0cnlhYmxlIEhUVFAgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9YCkgLy8gdHJpZ2dlciByZXRyeSBhdHRlbXB0IHdpdGggY2FsY3VsYXRlZCBkZWxheVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UgLy8gU3VjY2VzcywgcmV0dXJuIHRoZSByYXcgcmVzcG9uc2VcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGlmIChpc1JldHJ5YWJsZSkge1xuICAgICAgICBhdHRlbXB0KytcbiAgICAgICAgaXNSZXRyeWFibGUgPSBmYWxzZVxuXG4gICAgICAgIGlmIChhdHRlbXB0ID4gbWF4UmV0cmllcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgYWZ0ZXIgJHttYXhSZXRyaWVzfSByZXRyaWVzOiAke2Vycn1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gZ2V0RXhwQmFja09mZkRlbGF5KGF0dGVtcHQsIGJhc2VEZWxheU1zLCBtYXhpbXVtRGVsYXlNcylcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0gUmV0cnlpbmcgcmVxdWVzdCAoYXR0ZW1wdCAke2F0dGVtcHR9LyR7bWF4UmV0cmllc30pIGFmdGVyICR7ZGVsYXl9bXMgZHVlIHRvOiAke2Vycn1gLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyIC8vIHJlLXRocm93IGlmIGFueSByZXF1ZXN0LCBzeW50YXggZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGAke01BWF9SRVRSSUVTfSBSZXRyaWVzIGV4aGF1c3RlZCwgcmVxdWVzdCBmYWlsZWQuYClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUlBLE1BQU1FLGFBQWEsR0FBRyxJQUFBQyxlQUFTLEVBQUNDLGdCQUFRLENBQUM7QUFFbEMsZUFBZUMsT0FBT0EsQ0FDM0JDLFNBQW9CLEVBQ3BCQyxHQUF5QixFQUN6QkMsSUFBOEMsR0FBRyxJQUFJLEVBQ3RCO0VBQy9CLE9BQU8sSUFBSUMsT0FBTyxDQUF1QixDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztJQUM1RCxNQUFNQyxVQUFVLEdBQUdOLFNBQVMsQ0FBQ0QsT0FBTyxDQUFDRSxHQUFHLEVBQUdNLFFBQVEsSUFBSztNQUN0REgsT0FBTyxDQUFDRyxRQUFRLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUZELFVBQVUsQ0FBQ0UsRUFBRSxDQUFDLE9BQU8sRUFBRUgsTUFBTSxDQUFDO0lBRTlCLElBQUksQ0FBQ0gsSUFBSSxJQUFJTyxNQUFNLENBQUNDLFFBQVEsQ0FBQ1IsSUFBSSxDQUFDLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM5REksVUFBVSxDQUFDSyxHQUFHLENBQUNULElBQUksQ0FBQztJQUN0QixDQUFDLE1BQU07TUFDTE4sYUFBYSxDQUFDTSxJQUFJLEVBQUVJLFVBQVUsQ0FBQyxD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