Rev 1179 | Rev 1188 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import axios from 'axios'export class Request {#client#abortControllerconstructor() {this.#client = axios.create()this.#client.interceptors.request.use(async (request) => {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 this.#client.get('/csrf')const { data, success } = responseDataif (success) {request.headers['X-CSRF-TOKEN'] = datareturn request}} catch (err) {throw new Error(`Axios problem with request during pre-flight phase: ${err}.`)}}if (['get'].includes(request.method)) {const headers = {'Content-Type': 'application/json','Cache-Control': 'no-cache, no-store',Accept: 'application/json',Vary: 'Accept'}request.headers = { ...request.headers, ...headers }return request}return request},(error) => {return Promise.reject(error)})this.#client.interceptors.response.use(async (response) => {const { fatal } = response.dataif (fatal) {window.localStorage.removeItem('jwt')window.localStorage.removeItem('aes')window.location.reload()return}return response},(error) => {return Promise.reject(error)})this.#abortController = new AbortController()if (Request.instance) {return Request.instance}Request.instance = this}setBaseURL(baseURL = '') {if (typeof baseURL !== 'string') {throw new Error('baseURL must be a string')}this.#client.defaults.baseURL = baseURL}async MakeRequest(method = 'get', { endpoint, data, params }) {const config = { ...params }config.signal = this.#abortController.signalconst response =method === 'get' || method === 'delete'? await this.#client[method](endpoint, config): await this.#client[method](endpoint, data, config)return response}async get(endpoint, params) {return await this.MakeRequest('get', { endpoint, params })}async delete(endpoint, params) {return await this.MakeRequest('delete', { endpoint, params })}async post(endpoint, data, params) {return await this.MakeRequest('post', { endpoint, data, params })}async put(endpoint, data, params) {return await this.MakeRequest('put', { endpoint, data, params })}cancelToken() {if (!this.#abortController.signal.aborted) {this.#abortController.abort()}}}