Rev 3432 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import axios from 'axios';export class Request {#client;#abortController;constructor() {this.#client = axios.create();this.#client.interceptors.request.use(async (request) => {const token = window.localStorage.getItem('jwt');if (token) {request.headers.Authorization = `Bearer ${token}`;}const contentType = request.method === 'post' ? 'multipart/form-data' : 'application/json';request.headers['Content-Type'] = contentType;if (request.method !== 'get') {const csrfToken = await this.getCsrfToken();request.headers['X-CSRF-TOKEN'] = csrfToken;}return request;},(error) => {return Promise.reject(error);});this.#client.interceptors.response.use(async (response) => {const { fatal } = response.data;if (fatal === true) {throw new Error('La sesión ha caducado');}return response;},(error) => {return Promise.reject(error);});this.#abortController = new AbortController();}async getCsrfToken() {const response = await this.#client.get('/csrf');const { data: csrfToken, success } = response.data;if (!success) throw new Error('Error al obtener el CSRF token');return csrfToken;}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.signal;const 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();}}}