Rev 2201 | Rev 2221 | 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
#abortController
constructor() {
this.#client = axios.create()
this.#client.interceptors.request.use(
async (request) => {
const token = window.localStorage.getItem('jwt')
console.log(token)
if (token) {
request.headers.Authorization = 'Bearer ' + token
}
if (request.method === 'get') {
request.headers['Content-Type'] = 'application/json'
return request
}
if (['post', 'put', 'delete'].includes(request.method)) {
try {
const { data: responseData } = await this.#client.get('/csrf')
const { data, success } = responseData
if (success) {
request.headers['X-CSRF-TOKEN'] = data
return request
}
} catch (err) {
throw new Error(
`Axios problem with request during pre-flight phase: ${err}.`
)
}
}
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()
}
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()
}
}
}