Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
459 stevensc 1
import axios from 'axios'
2
 
3
export class Request {
460 stevensc 4
  #client
5
  #abortController
459 stevensc 6
 
7
  constructor(baseURL, timeout = 5000) {
460 stevensc 8
    this.#client = axios({ baseURL, timeout })
467 stevensc 9
 
10
    this.#client.interceptors.request.use(
11
      async (request) => {
12
        const token = window.localStorage.getItem("jwt");
13
 
14
        if (token) {
15
          request.headers["Authorization"] = "Bearer " + token;
16
        }
17
 
18
        if (["post", "put", "delete"].includes(request.method)) {
19
          try {
20
            const resp = await this.get("/csrf");
21
            const { data, success } = resp.data
22
 
23
            if (success) {
24
              request.headers["X-CSRF-TOKEN"] = data;
25
              return request;
26
            }
27
 
28
          } catch (err) {
29
            throw new Error(
30
              `Axios problem with request during pre-flight phase: ${err}.`
31
            );
32
          }
33
        }
34
      },
35
      (error) => {
36
        return Promise.reject(error);
37
      }
38
    );
39
 
460 stevensc 40
    this.#abortController = new AbortController()
459 stevensc 41
  }
42
 
43
  async MakeRequest(method = 'get', { endpoint, data, params }) {
44
    const config = { ...params }
460 stevensc 45
    config.signal = this.abortController.signal
459 stevensc 46
 
47
    const response = method === 'get' || method === 'delete'
48
      ? await this.client[method](endpoint, config)
49
      : await this.client[method](endpoint, data, config)
50
 
51
    return response.data
52
  }
53
 
54
  async get(endpoint, params) {
55
    return await this.MakeRequest('get', { endpoint, params })
56
  }
460 stevensc 57
 
58
  async delete(endpoint, params) {
59
    return await this.MakeRequest('delete', { endpoint, params })
60
  }
61
 
62
  async post(endpoint, data, params) {
63
    return await this.MakeRequest('delete', { endpoint, data, params })
64
  }
65
 
66
  async put(endpoint, data, params) {
67
    return await this.MakeRequest('delete', { endpoint, data, params })
68
  }
69
 
70
  cancelToken() {
71
    if (!this.abortController.signal.aborted) {
72
      this.abortController.abort()
73
    }
74
  }
459 stevensc 75
}