import { pipeline } from "stream"; import { promisify } from "util"; const pipelineAsync = promisify(pipeline); export 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) export const retryHttpCodes = { 408: true, 429: true, 499: true, 500: true, 502: true, 503: true, 504: true, 520: true }; 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); }; export 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwaXBlbGluZSIsInByb21pc2lmeSIsInBpcGVsaW5lQXN5bmMiLCJyZXF1ZXN0IiwidHJhbnNwb3J0Iiwib3B0IiwiYm9keSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxdWVzdE9iaiIsInJlc3BvbnNlIiwib24iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImVuZCIsImNhdGNoIiwiTUFYX1JFVFJJRVMiLCJCQVNFX0RFTEFZX01TIiwiTUFYX0RFTEFZX01TIiwicmV0cnlIdHRwQ29kZXMiLCJpc0h0dHBSZXRyeWFibGUiLCJodHRwUmVzQ29kZSIsInVuZGVmaW5lZCIsInNsZWVwIiwibXMiLCJzZXRUaW1lb3V0IiwiZ2V0RXhwQmFja09mZkRlbGF5IiwicmV0cnlDb3VudCIsImJhc2VEZWxheU1zIiwibWF4aW11bURlbGF5TXMiLCJiYWNrT2ZmQnkiLCJhZGRpdGlvbmFsRGVsYXkiLCJNYXRoIiwicmFuZG9tIiwibWluIiwicmVxdWVzdFdpdGhSZXRyeSIsIm1heFJldHJpZXMiLCJhdHRlbXB0IiwiaXNSZXRyeWFibGUiLCJzdGF0dXNDb2RlIiwiRXJyb3IiLCJlcnIiLCJkZWxheSIsImNvbnNvbGUiLCJ3YXJuIiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIl0sInNvdXJjZXMiOlsicmVxdWVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGh0dHAgZnJvbSAnbm9kZTpodHRwJ1xuaW1wb3J0IHR5cGUgKiBhcyBodHRwcyBmcm9tICdub2RlOmh0dHBzJ1xuaW1wb3J0IHR5cGUgKiBhcyBzdHJlYW0gZnJvbSAnbm9kZTpzdHJlYW0nXG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gJ25vZGU6c3RyZWFtJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJ1xuXG5pbXBvcnQgdHlwZSB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZS50cydcblxuY29uc3QgcGlwZWxpbmVBc3luYyA9IHByb21pc2lmeShwaXBlbGluZSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoXG4gIHRyYW5zcG9ydDogVHJhbnNwb3J0LFxuICBvcHQ6IGh0dHBzLlJlcXVlc3RPcHRpb25zLFxuICBib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBzdHJlYW0uUmVhZGFibGUgfCBudWxsID0gbnVsbCxcbik6IFByb21pc2U8aHR0cC5JbmNvbWluZ01lc3NhZ2U+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGh0dHAuSW5jb21pbmdNZXNzYWdlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdE9iaiA9IHRyYW5zcG9ydC5yZXF1ZXN0KG9wdCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXNvbHZlKHJlc3BvbnNlKVxuICAgIH0pXG5cbiAgICByZXF1ZXN0T2JqLm9uKCdlcnJvcicsIHJlamVjdClcblxuICAgIGlmICghYm9keSB8fCBCdWZmZXIuaXNCdWZmZXIoYm9keSkgfHwgdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXF1ZXN0T2JqLmVuZChib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICBwaXBlbGluZUFzeW5jKGJvZHksIHJlcXVlc3RPYmopLmNhdGNoKHJlamVjdClcbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IE1BWF9SRVRSSUVTID0gMVxuY29uc3QgQkFTRV9ERUxBWV9NUyA9IDEwMCAvLyBCYXNlIGRlbGF5IGZvciBleHBvbmVudGlhbCBiYWNrb2ZmXG5jb25zdCBNQVhfREVMQVlfTVMgPSA2MDAwMCAvLyBNYXggZGVsYXkgZm9yIGV4cG9uZW50aWFsIGJhY2tvZmZcblxuLy8gUmV0cnlhYmxlIGVycm9yIGNvZGVzIGZvciBIVFRQICggcmVmOiBtaW5pby1nbylcbmV4cG9ydCBjb25zdCByZXRyeUh0dHBDb2RlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7XG4gIDQwODogdHJ1ZSxcbiAgNDI5OiB0cnVlLFxuICA0OTk6IHRydWUsXG4gIDUwMDogdHJ1ZSxcbiAgNTAyOiB0cnVlLFxuICA1MDM6IHRydWUsXG4gIDUwNDogdHJ1ZSxcbiAgNTIwOiB0cnVlLFxufVxuXG5jb25zdCBpc0h0dHBSZXRyeWFibGUgPSAoaHR0cFJlc0NvZGU6IG51bWJlcikgPT4ge1xuICByZXR1cm4gcmV0cnlIdHRwQ29kZXNbaHR0cFJlc0NvZGVdICE9PSB1bmRlZmluZWRcbn1cblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxufVxuXG5jb25zdCBnZXRFeHBCYWNrT2ZmRGVsYXkgPSAocmV0cnlDb3VudDogbnVtYmVyLCBiYXNlRGVsYXlNczogbnVtYmVyLCBtYXhpbXVtRGVsYXlNczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGJhY2tPZmZCeSA9IGJhc2VEZWxheU1zICogKDEgPDwgcmV0cnlDb3VudClcbiAgY29uc3QgYWRkaXRpb25hbERlbGF5ID0gTWF0aC5yYW5kb20oKSAqIGJhY2tPZmZCeVxuICByZXR1cm4gTWF0aC5taW4oYmFja09mZkJ5ICsgYWRkaXRpb25hbERlbGF5LCBtYXhpbXVtRGVsYXlNcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RXaXRoUmV0cnkoXG4gIHRyYW5zcG9ydDogVHJhbnNwb3J0LFxuICBvcHQ6IGh0dHBzLlJlcXVlc3RPcHRpb25zLFxuICBib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBzdHJlYW0uUmVhZGFibGUgfCBudWxsID0gbnVsbCxcbiAgbWF4UmV0cmllczogbnVtYmVyID0gTUFYX1JFVFJJRVMsXG4gIGJhc2VEZWxheU1zOiBudW1iZXIgPSBCQVNFX0RFTEFZX01TLFxuICBtYXhpbXVtRGVsYXlNczogbnVtYmVyID0gTUFYX0RFTEFZX01TLFxuKTogUHJvbWlzZTxodHRwLkluY29taW5nTWVzc2FnZT4ge1xuICBsZXQgYXR0ZW1wdCA9IDBcbiAgbGV0IGlzUmV0cnlhYmxlID0gZmFsc2VcbiAgd2hpbGUgKGF0dGVtcHQgPD0gbWF4UmV0cmllcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3QodHJhbnNwb3J0LCBvcHQsIGJvZHkpXG4gICAgICAvLyBDaGVjayBpZiB0aGUgSFRUUCBzdGF0dXMgY29kZSBpcyByZXRyeWFibGVcbiAgICAgIGlmIChpc0h0dHBSZXRyeWFibGUocmVzcG9uc2Uuc3RhdHVzQ29kZSBhcyBudW1iZXIpKSB7XG4gICAgICAgIGlzUmV0cnlhYmxlID0gdHJ1ZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJldHJ5YWJsZSBIVFRQIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApIC8vIHRyaWdnZXIgcmV0cnkgYXR0ZW1wdCB3aXRoIGNhbGN1bGF0ZWQgZGVsYXlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlIC8vIFN1Y2Nlc3MsIHJldHVybiB0aGUgcmF3IHJlc3BvbnNlXG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBpZiAoaXNSZXRyeWFibGUpIHtcbiAgICAgICAgYXR0ZW1wdCsrXG4gICAgICAgIGlzUmV0cnlhYmxlID0gZmFsc2VcblxuICAgICAgICBpZiAoYXR0ZW1wdCA+IG1heFJldHJpZXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIGFmdGVyICR7bWF4UmV0cmllc30gcmV0cmllczogJHtlcnJ9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWxheSA9IGdldEV4cEJhY2tPZmZEZWxheShhdHRlbXB0LCBiYXNlRGVsYXlNcywgbWF4aW11bURlbGF5TXMpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9IFJldHJ5aW5nIHJlcXVlc3QgKGF0dGVtcHQgJHthdHRlbXB0fS8ke21heFJldHJpZXN9KSBhZnRlciAke2RlbGF5fW1zIGR1ZSB0bzogJHtlcnJ9YCxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCBzbGVlcChkZWxheSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVyciAvLyByZS10aHJvdyBpZiBhbnkgcmVxdWVzdCwgc3ludGF4IGVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgJHtNQVhfUkVUUklFU30gUmV0cmllcyBleGhhdXN0ZWQsIHJlcXVlc3QgZmFpbGVkLmApXG59XG4iXSwibWFwcGluZ3MiOiJBQUdBLFNBQVNBLFFBQVE7QUFDakIsU0FBU0MsU0FBUztBQUlsQixNQUFNQyxhQUFhLEdBQUdELFNBQVMsQ0FBQ0QsUUFBUSxDQUFDO0FBRXpDLE9BQU8sZUFBZUcsT0FBT0EsQ0FDM0JDLFNBQW9CLEVBQ3BCQyxHQUF5QixFQUN6QkMsSUFBOEMsR0FBRyxJQUFJLEVBQ3RCO0VBQy9CLE9BQU8sSUFBSUMsT0FBTyxDQUF1QixDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztJQUM1RCxNQUFNQyxVQUFVLEdBQUdOLFNBQVMsQ0FBQ0QsT0FBTyxDQUFDRSxHQUFHLEVBQUdNLFFBQVEsSUFBSztNQUN0REgsT0FBTyxDQUFDRyxRQUFRLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUZELFVBQVUsQ0FBQ0UsRUFBRSxDQUFDLE9BQU8sRUFBRUgsTUFBTSxDQUFDO0lBRTlCLElBQUksQ0FBQ0gsSUFBSSxJQUFJTyxNQUFNLENBQUNDLFFBQVEsQ0FBQ1IsSUFBSSxDQUFDLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUM5REksVUFBVSxDQUFDSyxHQUFHLENBQUNULElBQUksQ0FBQztJQUN0QixDQUFDLE1BQU07TUFDTEosYUFBYSxDQUFDSSxJQUFJLEVBQUVJLFVBQVUsQ0FBQyxDQUFDTSxLQUFLLENBQUNQLE1BQU0sQ0FBQztJQUMvQztFQUNGLENBQUMsQ0FBQztBQUNKO0FBRUEsTUFBTVEsV0FB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