diff --git a/src/utils/axiosClient.jsx b/src/utils/axiosClient.jsx index b9f95570..e57f102a 100644 --- a/src/utils/axiosClient.jsx +++ b/src/utils/axiosClient.jsx @@ -2,10 +2,9 @@ import axios from "axios"; import { useNavigate } from "react-router-dom"; import axiosRetry from "axios-retry"; import showToast from "../services/toastService"; -const base_Url = process.env.VITE_BASE_URL; export const axiosClient = axios.create({ - baseURL: base_Url, // Your Web API URL + baseURL: "http://localhost:5032", // Your Web API URL withCredentials: false, // Required if the API uses cookies headers: { "Content-Type": "application/json", // Specify the content type @@ -25,9 +24,7 @@ axiosClient.interceptors.request.use( } return config; }, - (error) => { - return Promise.reject(error); - } + (error) => Promise.reject(error) ); // // Response interceptor to handle responses globally (optional) @@ -38,67 +35,65 @@ axiosClient.interceptors.response.use( // debugger; const originalRequest = error.config; - if (error.code === "ERR_CONNECTION_REFUSED") { - console.error("Connection refused. Please ensure the server is running."); - showToast( - "Unable to connect to the server. Please try again later.", - "error" - ); - } - if (error.code === "ERR_NETWORK") { - console.error( - "Unable to connect server. Please ensure the server is running." - ); - showToast("Server is unreachable. Try again later.!", "error"); - - originalRequest._retry = false; - redirectToLogin(); + if (!originalRequest) { return Promise.reject(error); - } else if (error.code === "ECONNABORTED") { - console.error("Request timed out."); - showToast("The request took too long. Please try again later.", "error"); - } else { - console.error("An error occurred:", error.message); } - if ( - error.response && - error.response.status === 401 && - !originalRequest._retry - ) { - originalRequest._retry = true; + // Prevent multiple toasts for the same request + if (!originalRequest._toastShown) { + originalRequest._toastShown = true; - try { + if (error.code === "ERR_CONNECTION_REFUSED") { + console.error("Connection refused. Please ensure the server is running."); + showToast("Unable to connect to the server. Please try again later.", "error"); + } else if (error.code === "ERR_NETWORK") { + console.error("Network error: Unable to reach the server."); + showToast("Server is unreachable. Try again later!", "error"); + redirectToLogin(); + } else if (error.code === "ECONNABORTED") { + console.error("Request timed out."); + showToast("The request took too long. Please try again later.", "error"); + } else if (error.response) { + console.error("Error response:", error.response.status, error.response.data); + + if (error.response.status === 401 && !originalRequest._retry) { + originalRequest._retry = true; + + try { // debugger; // Get the refresh token from secure storage - const refreshToken = localStorage.getItem("refreshToken"); + const refreshToken = localStorage.getItem("refreshToken"); - if (!refreshToken) { + if (!refreshToken) { // Redirect to login if refresh token is not available - redirectToLogin(); - return Promise.reject(error); - } + redirectToLogin(); + return Promise.reject(error); + } // Make a request to refresh the access token - const response = await axiosClient.post("/api/Auth/refresh-token", { - token: localStorage.getItem("jwtToken"), - refreshToken: refreshToken, - }); + const response = await axiosClient.post("/api/Auth/refresh-token", { + token: localStorage.getItem("jwtToken"), + refreshToken, + }); - const { token } = response.data.data; + const { token, refreshToken: newRefreshToken } = response.data.data; + localStorage.setItem("jwtToken", token); + localStorage.setItem("refreshToken", newRefreshToken); - // Save the new access token - localStorage.setItem("jwtToken", token); - localStorage.setItem("refreshToken", response.data.data.refreshToken); - - // Update the original request with the new token - originalRequest.headers["Authorization"] = `Bearer ${token}`; + // Retry the original request with the new token + originalRequest.headers["Authorization"] = `Bearer ${token}`; // Retry the original request - return api(originalRequest); - } catch (err) { + return axiosClient(originalRequest); + } catch (err) { // Redirect to login if token refresh fails - redirectToLogin(); - return Promise.reject(err); + redirectToLogin(); + return Promise.reject(err); + } + } else { + showToast(error.response.data?.message || "An error occurred. Please try again.", "error"); + } + } else { + console.error("An unknown error occurred:", error.message); } }