Rev 3575 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import axios from 'axios';async function fetchCsrfToken(axiosInstance) {try {const csrfToken = await axiosInstance.get('/csrf');return csrfToken;} catch (error) {console.error('Error fetching CSRF token:', error);throw new Error('Error fetching CSRF token');}}class ApiClient {constructor(baseURL = null, config = {}) {this.instance = axios.create({ baseURL, ...config });this.instance.interceptors.request.use((request) => this.requestInterceptor(request),(error) => Promise.reject(error));this.instance.interceptors.response.use((response) => this.responseInterceptor(response),(error) => Promise.reject(error));}async requestInterceptor(request) {const token = window.localStorage.getItem('jwt');if (token) request.headers.Authorization = `Bearer ${token}`;if (request.method === 'post') {const csrfToken = await fetchCsrfToken(this.instance);request.headers['Content-Type'] = 'multipart/form-data';request.headers['X-CSRF-TOKEN'] = csrfToken;}if (request.method === 'get') {request.headers['Content-Type'] = 'application/json';}return request;}responseInterceptor(response) {const { fatal, success, data } = response.data;if (fatal) throw new Error('La sesión ha caducado');if (!data) return response.data;if (!success) {const errorMessage =typeof data === 'string'? data: 'Ha ocurrido un error inesperado, por favor intente más tarde.';throw new Error(errorMessage);}return data;}setBaseURL(baseURL) {this.instance.defaults.baseURL = baseURL;}getInstance() {return this.instance;}}const API_URL = import.meta.env.VITE_API_URL;export const apiClientInstance = new ApiClient(API_URL);export const api = apiClientInstance.getInstance();