http-retrier
Version:
69 lines • 3.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.httpRetrier = exports.createHttpRetrier = void 0;
const axios_1 = __importDefault(require("axios"));
const response_js_1 = require("./response.js");
const settings_js_1 = require("./settings.js");
const utility_js_1 = require("./utility.js");
/**
*
* @param {Partial<HttpRetrierSettings>} settings - The settings to initialize the retrier with
* @returns {Promise<HttpRetrierResponse>} - A promise that resolves to the response object
*/
function createHttpRetrier(settings = {}) {
// Initialize the settings object with default values
const defaultSettings = new settings_js_1.HttpRetrierSettingsInit(settings);
/**
* HttpRetrier function
* @param {string}
* @param {HttpRetrierOptions} options - The options for the retrier
* @returns {Promise<HttpRetrierResponse>} - A promise that resolves to the response object
*/
async function httpRetrier(url, options) {
// set attempt counter
let attempt = 1;
// Initialize the settings object with default values
const settings = defaultSettings.create(options);
// Initialize the request
const request = new settings_js_1.HttpRetrierRequestInit(url, options);
// Initialize the response
const response = new response_js_1.HttpRetrierResponseInit(url, options.method || "GET", options.data);
// Log the start of the request
if (settings.logging?.beforeStart)
settings.logging.beforeStart(response);
do {
// Wait for the specified delay
if (settings.logging?.beforeAttempt)
settings.logging.beforeAttempt(response);
await (0, utility_js_1.wait)(settings.delay, attempt, settings.exponentialBackoff);
try {
// Make the request
const axiosRequest = request.create();
const axiosResponse = await (0, axios_1.default)(axiosRequest);
response.update(axiosResponse, attempt);
}
catch (error) {
response.error(error, attempt);
}
const lastResponse = response.create(settings.outputConverter);
if (settings.logging?.afterAttempt)
settings.logging.afterAttempt(lastResponse);
attempt++;
} while (attempt < settings.maxAttempts && settings.retryOn(response.create(settings.outputConverter)));
if (settings.logging?.afterDone)
settings.logging.afterDone(response.create(settings.outputConverter));
return response;
}
return httpRetrier;
}
exports.createHttpRetrier = createHttpRetrier;
/**
* HttpRetrier function
* @param {string}
* @param {HttpRetrierOptions} options - The options for the retrier
* @returns {Promise<HttpRetrierResponse>} - A promise that resolves to the response object
*/
exports.httpRetrier = createHttpRetrier();