@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
JavaScript
;
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;