UNPKG

@crowdin/app-project-module

Version:

Module that generates for you all common endpoints for serving standalone Crowdin App

47 lines (46 loc) 1.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AxiosProvider = void 0; const axios_1 = __importDefault(require("axios")); //copy from api client to control throughput class AxiosProvider { constructor() { this.pendingRequests = 0; this.axios = axios_1.default.create({ validateStatus: (status) => { return status < 400; // Resolve only if the status code is less than 400 }, }); this.configureRequest(); this.configureResponse(); } configureRequest() { this.axios.interceptors.request.use((config) => { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type return new Promise((resolve) => { const interval = setInterval(() => { if (this.pendingRequests < AxiosProvider.CROWDIN_API_MAX_CONCURRENT_REQUESTS) { this.pendingRequests++; clearInterval(interval); resolve(config); } }, AxiosProvider.CROWDIN_API_REQUESTS_INTERVAL_MS); }); }); } configureResponse() { this.axios.interceptors.response.use((response) => { this.pendingRequests = Math.max(0, this.pendingRequests - 1); return Promise.resolve(response); }, (error) => { this.pendingRequests = Math.max(0, this.pendingRequests - 1); return Promise.reject(error); }); } } exports.AxiosProvider = AxiosProvider; AxiosProvider.CROWDIN_API_MAX_CONCURRENT_REQUESTS = 15; AxiosProvider.CROWDIN_API_REQUESTS_INTERVAL_MS = 10;