DocSpace-buildtools/common/ASC.Socket.IO/app/requestManager.js

48 lines
1.1 KiB
JavaScript

const axios = require("axios");
const apiPrefixURL = "/api/2.0";
const apiTimeout = 30000;
module.exports = (options) => {
const basePath = options.basePath;
const url = `${basePath}${apiPrefixURL}${options.url}`;
const axiosOptions = {
baseURL: url,
responseType: "json",
timeout: apiTimeout,
headers: options.headers,
};
const getResponseError = (res) => {
if (!res) return;
if (res.data && res.data.error) {
return res.data.error.message;
}
if (res.isAxiosError && res.message) {
return res.message;
}
};
const onSuccess = (response) => {
const error = getResponseError(response);
if (error) throw new Error(error);
if (!response || !response.data || response.isAxiosError) return null;
if (response.request.responseType === "text") return response.data;
return response.data.response;
};
const onError = (error) => {
const errorText = error.response
? getResponseError(error.response)
: error.message;
return Promise.reject(errorText || error);
};
const request = axios.create(axiosOptions);
return request().then(onSuccess).catch(onError);
};