UNPKG

@appello/services

Version:

Services package with api / graphql

57 lines (56 loc) 2.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createApiService = void 0; const common_1 = require("@appello/common"); const axios_1 = __importDefault(require("axios")); const consts_1 = require("./consts"); const utils_1 = require("./utils"); const createApiService = (config) => { const { url: baseURL, axiosConfig } = config; const axiosInstance = axios_1.default.create(Object.assign({ baseURL, headers: Object.assign({ Accept: 'application/json', 'Content-Type': 'application/json' }, axiosConfig === null || axiosConfig === void 0 ? void 0 : axiosConfig.headers) }, axiosConfig)); axiosInstance.interceptors.request.use(async (requestConfig) => { var _a; const accessToken = await ((_a = config.getAccessToken) === null || _a === void 0 ? void 0 : _a.call(config)); if (!accessToken) { return requestConfig; } requestConfig.headers = (0, utils_1.setAuthorizationHeader)(accessToken, requestConfig.headers); return requestConfig; }); axiosInstance.interceptors.response.use(response => response, (error) => { var _a, _b; const originalRequest = error.config; if (!originalRequest || !axios_1.default.isAxiosError(error)) { return Promise.reject(error); } const isRefreshing = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === consts_1.ApiErrorStatusEnum.UNAUTHORIZED && !originalRequest.refreshRetry && ((_b = error === null || error === void 0 ? void 0 : error.config) === null || _b === void 0 ? void 0 : _b.url) !== config.refreshTokenUrl; if (isRefreshing) { return (0, utils_1.refreshTokens)(axiosInstance, error, config); } return Promise.reject(error); }); return { axios: axiosInstance, get: (url, query, config) => axiosInstance.get(url, Object.assign({ params: query }, config)), delete: (url, query, config) => axiosInstance.delete(url, Object.assign({ params: query }, config)), post: (url, data, config) => axiosInstance.post(url, data, config), put: (url, data, config) => axiosInstance.put(url, data, config), patch: (url, data, config) => axiosInstance.patch(url, data, config), request: config => axiosInstance.request(config), setBaseUrl: url => { axiosInstance.defaults.baseURL = url; }, setAxiosConfig: config => { (0, common_1.deepMergeObjects)(axiosInstance.defaults, config); }, clone: (newConfig) => { return (0, exports.createApiService)((0, common_1.deepMergeObjects)(config, newConfig)); }, }; }; exports.createApiService = createApiService;