Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 658 | Autoría | Ultima modificación | Ver Log |

import Axios from 'axios'

const BASE_URL = 'https://dev-services.leaderslinked.com'

const axiosInstance = Axios.create()

axiosInstance.all = Axios.all
axiosInstance.spread = Axios.spread

axiosInstance.get = (_url, params = {}) => {
  const headers = {
    Accept: 'application/json',
    Vary: 'Accept',
    'Cache-Control': 'no-cache, no-store',
    'Content-Type': 'application/json'
  }

  const token = window.localStorage.getItem('jwt')

  if (token) {
    headers.Authorization = 'Bearer ' + token
  }

  return Axios({
    baseURL: BASE_URL,
    url: _url,
    params,
    headers
  })
}

axiosInstance.interceptors.request.use(
  async (request) => {
    request.baseURL = BASE_URL
    const token = window.localStorage.getItem('jwt')

    if (token) {
      request.headers.Authorization = 'Bearer ' + token
    }

    if (['post', 'put', 'delete'].includes(request.method)) {
      try {
        const { data: responseData } = await axiosInstance.get('/csrf')
        const { data, success } = responseData

        if (success) {
          request.headers['X-CSRF-TOKEN'] = data
          return request
        }
      } catch (err) {
        throw new Error(
          `Axios problem with request during pre-flight phase: ${err}.`
        )
      }
    }
  },
  (error) => {
    return Promise.reject(error)
  }
)

Axios.interceptors.response.use(
  async (response) => {
    const { fatal } = response.data

    if (fatal) {
      window.localStorage.removeItem('jwt')
      window.localStorage.removeItem('aes')
      window.location.reload()
      return
    }

    return response
  },
  (error) => {
    return Promise.reject(error)
  }
)

export default axiosInstance