Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3483 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3481 stevensc 1
import axios from 'axios';
2
 
3
async function fetchCsrfToken(axiosInstance) {
4
  try {
5
    const csrfToken = await axiosInstance.get('/csrf');
6
    return csrfToken;
7
  } catch (error) {
8
    console.error('Error fetching CSRF token:', error);
9
    throw new Error('Error fetching CSRF token');
10
  }
11
}
12
 
13
class ApiClient {
14
  constructor(baseURL = null, config = {}) {
15
    this.instance = axios.create({ baseURL, ...config });
16
 
17
    this.instance.interceptors.request.use(
18
      (request) => this.requestInterceptor(request),
19
      (error) => Promise.reject(error)
20
    );
21
    this.instance.interceptors.response.use(
22
      (response) => this.responseInterceptor(response),
23
      (error) => Promise.reject(error)
24
    );
25
  }
26
 
27
  async requestInterceptor(request) {
28
    const token = window.localStorage.getItem('jwt');
29
    if (token) request.headers.Authorization = `Bearer ${token}`;
30
 
31
    if (request.method === 'post') {
32
      const csrfToken = await fetchCsrfToken(this.instance);
33
      request.headers['Content-Type'] = 'multipart/form-data';
34
      request.headers['X-CSRF-TOKEN'] = csrfToken;
35
    }
36
 
37
    if (request.method === 'get') {
38
      request.headers['Content-Type'] = 'application/json';
39
    }
40
 
41
    return request;
42
  }
43
 
44
  responseInterceptor(response) {
45
    const { fatal } = response.data;
46
    if (fatal) throw new Error('La sesión ha caducado');
47
    return response;
48
  }
49
 
50
  setBaseURL(baseURL) {
51
    this.instance.defaults.baseURL = baseURL;
52
  }
53
 
54
  getInstance() {
55
    return this.instance;
56
  }
57
}
58
 
59
export const apiClientInstance = new ApiClient();
60
export const api = apiClientInstance.getInstance();