import axios from 'axios'; import { isLoggedIn, getAccessToken } from '@tempi/auth'; import { getCurrentLanguage } from '@tempi/utils'; import { handleResponseError } from '@tempi/editor-site'; const { apiServices } = window?.config || {}; const publicBuilderBffClient = axios.create({ baseURL: apiServices?.publicBuilderBff, }); const builderBffClient = axios.create({ baseURL: apiServices?.builderBff, }); const authMarketBffClient = axios.create({ baseURL: apiServices?.marketBff, }); const marketBffClient = axios.create({ baseURL: apiServices?.marketBff, }); const marketBffClientProtected = axios.create({ baseURL: apiServices?.marketBff, }); const publicMarketBffClient = axios.create({ baseURL: apiServices?.marketBff, }); const imageClient = axios.create({ baseURL: apiServices?.upload, }); const authClient = axios.create({ baseURL: apiServices?.identity, }); const identityClient = axios.create({ baseURL: apiServices?.identity, }); const smartActivationClient = axios.create({ baseURL: apiServices?.smartActivation, }); const userSegmentClient = axios.create({ baseURL: apiServices?.userSegment }); const marketCoreClient = axios.create({ baseURL: apiServices?.marketCore, }); export const getAuthorization = () => { return isLoggedIn() ? `Bearer ${getAccessToken()}` : ''; }; // Do something before request is sent export const requestInterceptor = (request) => { request = requestLanguageInterceptor(request); request.headers.Authorization = getAuthorization(); return request; }; const requestLanguageInterceptor = (request) => { request.headers['x-custom-lang'] = getCurrentLanguage(); return request; }; // Any status code that lie within the range of 2xx cause this function to trigger export const responseSuccessInterceptor = (response) => { // Do something with response data return response; }; // Any status codes that falls outside the range of 2xx cause this function to trigger export const responseErrorInterceptor = (error) => { // Do something with response error handleResponseError(error); return Promise.reject(error); }; const clients = [ imageClient, builderBffClient, marketBffClientProtected, smartActivationClient, userSegmentClient, marketCoreClient, ]; const clientsNoHandleError = [marketBffClient]; const publicClients = [ publicBuilderBffClient, authClient, publicMarketBffClient, ]; const otherClients = [authMarketBffClient, identityClient]; clients.forEach((client) => { client.interceptors.request.use(requestInterceptor); client.interceptors.response.use( responseSuccessInterceptor, responseErrorInterceptor, ); }); clientsNoHandleError.forEach((client) => { client.interceptors.request.use(requestInterceptor); client.interceptors.response.use(responseSuccessInterceptor); }); publicClients.forEach((client) => { client.interceptors.request.use(requestLanguageInterceptor); client.interceptors.response.use( responseSuccessInterceptor, responseErrorInterceptor, ); }); otherClients.forEach((client) => { client.interceptors.request.use(requestLanguageInterceptor); }); // eslint-disable-next-line export default { imageClient, builderBffClient, marketBffClient, marketBffClientProtected, publicBuilderBffClient, authClient, identityClient, publicMarketBffClient, authMarketBffClient, smartActivationClient, userSegmentClient, marketCoreClient, };