Files
myDrive/src/axiosInterceptor/index.js
T
2024-06-27 02:10:03 -04:00

154 lines
4.0 KiB
JavaScript

import axios from "axios";
import uuid from "uuid";
let browserIDCheck = localStorage.getItem("browser-id");
const sleep = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 150);
});
};
const axiosRetry = axios.create({ baseURL: "http://localhost:5173/api" });
const axiosNoRetry = axios.create({ baseURL: "http://localhost:5173/api" });
const axios3 = axios.create({ baseURL: "http://localhost:5173/api" });
axiosRetry.interceptors.request.use(
(config) => {
if (!browserIDCheck) {
browserIDCheck = uuid.v4();
localStorage.setItem("browser-id", browserIDCheck);
}
config.headers.uuid = browserIDCheck;
return config;
},
(error) => {
return Promise.reject(error);
}
);
axiosRetry.interceptors.response.use(
(response) => {
//console.log("axios interceptor successful")
return response;
},
(error) => {
return new Promise((resolve, reject) => {
let originalRequest = error.config;
if (error.response.status !== 401) {
return reject(error);
}
if (originalRequest.ran === true) {
//console.log("original request ran", error.config.url);
return reject(error);
}
if (error.config.url === "/user-service/get-token") {
//console.log("error url equal to refresh token route")
return reject();
}
if (!browserIDCheck) {
browserIDCheck = uuid.v4();
localStorage.setItem("browser-id", browserIDCheck);
}
axiosNoRetry
.post(
"/user-service/get-token",
{},
{
headers: {
uuid: browserIDCheck,
},
}
)
.then((cookieResponse) => {
// We need to sleep before requesting again, if not I believe
// The old request will still be open and it will not make a
// Brand new request sometimes, so it will log users out
// But adding a sleep function seems to fix this.
return sleep("sleepy boi");
})
.then((sleepres) => {
return axios3(originalRequest);
})
.then((response) => {
resolve(response);
})
.catch((e) => {
//console.log("error");
return reject(error);
});
});
}
);
// axios.interceptors.response.use( (response) => {
// console.log("axios interceptor")
// // Return a successful response back to the calling service
// return response;
// }, (error) => {
// const originalRequest = error.config;
// if (originalRequest.ran) {
// console.log("Request already ran");
// return Promise.reject(error);
// }
// console.log("axios interceptor failed first request")
// // Return any error which is not due to authentication back to the calling service
// if (error.response.status !== 401) {
// console.log("error does not equal 401");
// return new Promise((resolve, reject) => {
// reject(error);
// });
// }
// // Logout user if token refresh didn't work or user is disabled
// console.log("error url", error.config.url);
// if (error.config.url === "/user-service/get-token") {
// console.log("error url equal to refresh token route")
// return new Promise((resolve, reject) => {
// reject(error);
// });
// }
// // Try request again with new token
// // return new Promise((resolve, reject) => {
// // })
// return axios.post("/user-service/get-token").then((cookieResponse) => {
// console.log("cookie status", cookieResponse.status);
// if (cookieResponse.status === 201) {
// console.log("cookie response", cookieResponse.data);
// originalRequest.ran = true;
// return axios(originalRequest);
// } else {
// return Promise.reject(error);
// }
// })
// // .catch((cookieError) => {
// // console.log("cookieError", cookieError);
// // return Promise.reject(error);
// // })
// });
export default axiosRetry;