UNPKG

http-retrier

Version:

69 lines 3.12 kB
"use strict"; 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();