Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3432 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 3432 Rev 3719
Línea 1... Línea 1...
1
import axios from 'axios'
1
import axios from 'axios';
2
 
2
 
3
export class Request {
3
export class Request {
4
  #client
4
  #client;
5
  #abortController
5
  #abortController;
6
 
6
 
7
  constructor() {
7
  constructor() {
8
    this.#client = axios.create()
8
    this.#client = axios.create();
9
 
9
 
10
    this.#client.interceptors.request.use(
10
    this.#client.interceptors.request.use(
11
      async (request) => {
11
      async (request) => {
12
        const token = window.localStorage.getItem('jwt')
12
        const token = window.localStorage.getItem('jwt');
13
 
13
 
14
        if (token) {
14
        if (token) {
15
          request.headers.Authorization = `Bearer ${token}`
15
          request.headers.Authorization = `Bearer ${token}`;
16
        }
16
        }
17
 
17
 
18
        const contentType =
-
 
19
          request.method === 'post' ? 'multipart/form-data' : 'application/json'
18
        const contentType = request.method === 'post' ? 'multipart/form-data' : 'application/json';
20
 
19
 
21
        request.headers['Content-Type'] = contentType
20
        request.headers['Content-Type'] = contentType;
22
 
21
 
23
        if (request.method !== 'get') {
22
        if (request.method !== 'get') {
24
          const csrfToken = await this.getCsrfToken()
23
          const csrfToken = await this.getCsrfToken();
25
          request.headers['X-CSRF-TOKEN'] = csrfToken
24
          request.headers['X-CSRF-TOKEN'] = csrfToken;
26
        }
25
        }
27
 
26
 
28
        return request
27
        return request;
29
      },
28
      },
30
      (error) => {
29
      (error) => {
31
        return Promise.reject(error)
30
        return Promise.reject(error);
32
      }
31
      }
33
    )
32
    );
34
 
33
 
35
    this.#client.interceptors.response.use(
34
    this.#client.interceptors.response.use(
36
      async (response) => {
35
      async (response) => {
37
        const { fatal } = response.data
36
        const { fatal } = response.data;
38
 
37
 
39
        if (fatal === true) {
38
        if (fatal === true) {
40
          throw new Error('La sesión ha caducado')
39
          throw new Error('La sesión ha caducado');
41
        }
40
        }
42
 
41
 
43
        return response
42
        return response;
44
      },
43
      },
45
      (error) => {
44
      (error) => {
46
        return Promise.reject(error)
45
        return Promise.reject(error);
47
      }
46
      }
48
    )
47
    );
49
 
48
 
50
    this.#abortController = new AbortController()
49
    this.#abortController = new AbortController();
51
  }
50
  }
52
 
51
 
53
  async getCsrfToken() {
52
  async getCsrfToken() {
54
    const response = await this.#client.get('/csrf')
53
    const response = await this.#client.get('/csrf');
55
    const { data: csrfToken, success } = response.data
54
    const { data: csrfToken, success } = response.data;
56
    if (!success) throw new Error('Error al obtener el CSRF token')
55
    if (!success) throw new Error('Error al obtener el CSRF token');
57
    return csrfToken
56
    return csrfToken;
58
  }
57
  }
59
 
58
 
60
  setBaseURL(baseURL = '') {
59
  setBaseURL(baseURL = '') {
61
    if (typeof baseURL !== 'string') {
60
    if (typeof baseURL !== 'string') {
62
      throw new Error('baseURL must be a string')
61
      throw new Error('baseURL must be a string');
63
    }
62
    }
64
    this.#client.defaults.baseURL = baseURL
63
    this.#client.defaults.baseURL = baseURL;
65
  }
64
  }
66
 
65
 
67
  async MakeRequest(method = 'get', { endpoint, data, params }) {
66
  async MakeRequest(method = 'get', { endpoint, data, params }) {
68
    const config = { ...params }
67
    const config = { ...params };
69
    config.signal = this.#abortController.signal
68
    config.signal = this.#abortController.signal;
70
 
69
 
71
    const response =
70
    const response =
72
      method === 'get' || method === 'delete'
71
      method === 'get' || method === 'delete'
73
        ? await this.#client[method](endpoint, config)
72
        ? await this.#client[method](endpoint, config)
74
        : await this.#client[method](endpoint, data, config)
73
        : await this.#client[method](endpoint, data, config);
75
 
74
 
76
    return response
75
    return response;
77
  }
76
  }
78
 
77
 
79
  async get(endpoint, params) {
78
  async get(endpoint, params) {
80
    return await this.MakeRequest('get', { endpoint, params })
79
    return await this.MakeRequest('get', { endpoint, params });
81
  }
80
  }
82
 
81
 
83
  async delete(endpoint, params) {
82
  async delete(endpoint, params) {
84
    return await this.MakeRequest('delete', { endpoint, params })
83
    return await this.MakeRequest('delete', { endpoint, params });
85
  }
84
  }
86
 
85
 
87
  async post(endpoint, data, params) {
86
  async post(endpoint, data, params) {
88
    return await this.MakeRequest('post', { endpoint, data, params })
87
    return await this.MakeRequest('post', { endpoint, data, params });
89
  }
88
  }
90
 
89
 
91
  async put(endpoint, data, params) {
90
  async put(endpoint, data, params) {
92
    return await this.MakeRequest('put', { endpoint, data, params })
91
    return await this.MakeRequest('put', { endpoint, data, params });
93
  }
92
  }
94
 
93
 
95
  cancelToken() {
94
  cancelToken() {
96
    if (!this.#abortController.signal.aborted) {
95
    if (!this.#abortController.signal.aborted) {
97
      this.#abortController.abort()
96
      this.#abortController.abort();
98
    }
97
    }
99
  }
98
  }
100
}
99
}