@crowdin/crowdin-api-client
Version:
JavaScript library for Crowdin API
41 lines (40 loc) • 1.43 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.AxiosProvider = void 0;
const axios_1 = require("axios");
/**
* @internal
*/
class AxiosProvider {
constructor() {
this.pendingRequests = 0;
this.axios = axios_1.default.create({});
this.configureRequest();
this.configureResponse();
}
configureRequest() {
this.axios.interceptors.request.use((config) => {
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.data);
}, (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;
;