/**
* @file
* File : axios.js\
* Defines the default Axios instance used for API requests.
* Configures base URL and request interceptors.
*
* @author Pierre-Yves Léglise <contact@axialdata.net>
* @name axios
*/
import axios from 'axios'
import frontend from '../config/frontend'
import backend from '../config/backend'
import store from '../store'
/**
* Creates and configures an Axios instance.
* Determines the base URL based on the environment mode and sets up interceptors.
*
* @function
* @author Pierre-Yves Léglise <contact@axialdata.net>
* @param {Object} env - The environment object.
* @example
* const axiosInstance = axios(env) // env is imported from the store
* @returns {AxiosInstance} Configured Axios instance.
*/
let env = import.meta.env
let frontendMode = frontend(env).mode
let backendData = backend(env)
let baseUrl = backendData.baseUrlProd
if (frontendMode === 'developpement') {
baseUrl = backendData.baseUrlDev
}
const axiosInstance = axios.create({
baseURL: baseUrl,
headers: {
'Content-Type': 'application/json',
// 'Cache-Control': 'no-cache',
// Pragma: 'no-cache',
// Expires: '0',
// 'Content-Security-Policy':
// "script-src 'sha256-{HASHED_INLINE_SCRIPT}' 'strict-dynamic'; object-src 'none';base-uri 'none';",
},
})
/**
* Request interceptor for adding authorization token to requests.
* Retrieves the access token from Redux store and adds it to the request headers.
*
* @function
* @author Pierre-Yves Léglise <contact@axialdata.net>
* @param {Object} config - Axios request configuration.
* @example
* axiosInstance.interceptors.request.use(config => {
* return config
* })
* @returns {Object} Modified Axios request configuration.
* @throws {Error} Throws error if request configuration fails.
*/
axiosInstance.interceptors.request.use((config) => {
const state = store.getState()
let token = state.auth.accessToken
if (token) {
config.headers.Authorization = 'Bearer ' + token
}
return config
}),
(error) => {
return Promise.reject(error)
}
export default axiosInstance