Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2201 | Rev 2221 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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