From 8d6bc7bc0b3b19a9a94839f0e35ef523488eca4d Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Sat, 24 Jan 2026 20:26:05 +0000 Subject: [PATCH] udpate API client --- client/src/Pages/Uptime/Monitors/index.tsx | 2 +- client/src/Utils/ApiClient.ts | 64 ++++++++++++++-------- client/src/main.jsx | 3 + 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/client/src/Pages/Uptime/Monitors/index.tsx b/client/src/Pages/Uptime/Monitors/index.tsx index fc9af0105..5b05817bb 100644 --- a/client/src/Pages/Uptime/Monitors/index.tsx +++ b/client/src/Pages/Uptime/Monitors/index.tsx @@ -98,7 +98,7 @@ const UptimeMonitorsPage = () => { } = useGet( monitorsWithChecksUrl, {}, - { refreshInterval: 10000 } + { refreshInterval: 5000 } ); const { monitors: monitorsWithChecks, summary, count } = monitorsWithChecksData ?? {}; diff --git a/client/src/Utils/ApiClient.ts b/client/src/Utils/ApiClient.ts index e375b07e7..e90bc9f01 100644 --- a/client/src/Utils/ApiClient.ts +++ b/client/src/Utils/ApiClient.ts @@ -1,38 +1,54 @@ import axios from "axios"; import type { AxiosError } from "axios"; import type { AxiosRequestConfig, AxiosResponse } from "axios"; -import { store } from "@/store"; + const BASE_URL = import.meta.env.VITE_APP_API_BASE_URL; const api = axios.create({ baseURL: BASE_URL, }); -api.interceptors.request.use( - (config) => { - const authToken = store.getState().auth?.authToken ?? ""; - - config.headers.set("Authorization", `Bearer ${authToken}`); - if (!config.headers.has("Accept-Language")) { - config.headers.set("Accept-Language", "en"); - } - - return config; - }, - (error) => { - return Promise.reject(error); - } -); - -const onSuccess = (response: AxiosResponse) => response; -const onError = (error: AxiosError) => { - if (error.response?.status === 401) { - window.location.href = "/login"; - } - return Promise.reject(error); +type StoreType = { + getState: () => { auth?: { authToken?: string } }; }; -api.interceptors.response.use(onSuccess, onError); +let storeInstance: StoreType | null = null; +let interceptorsInitialized = false; + +export const initApiClient = (store: StoreType): void => { + storeInstance = store; + + if (interceptorsInitialized) { + return; + } + interceptorsInitialized = true; + + api.interceptors.request.use( + (config) => { + const authToken = storeInstance?.getState()?.auth?.authToken ?? ""; + + config.headers.set("Authorization", `Bearer ${authToken}`); + if (!config.headers.has("Accept-Language")) { + config.headers.set("Accept-Language", "en"); + } + + return config; + }, + (error) => { + return Promise.reject(error); + } + ); + + const onSuccess = (response: AxiosResponse) => response; + const onError = (error: AxiosError) => { + if (error.response?.status === 401) { + window.location.href = "/login"; + } + return Promise.reject(error); + }; + + api.interceptors.response.use(onSuccess, onError); +}; export const get = ( url: string, diff --git a/client/src/main.jsx b/client/src/main.jsx index dd42587af..5cfbe6f33 100644 --- a/client/src/main.jsx +++ b/client/src/main.jsx @@ -9,6 +9,9 @@ import NetworkServiceProvider from "./Utils/NetworkServiceProvider.jsx"; import { networkService } from "./Utils/NetworkService"; export { networkService }; import I18nLoader from "./Components/v1/I18nLoader"; +import { initApiClient } from "./Utils/ApiClient"; + +initApiClient(store); ReactDOM.createRoot(document.getElementById("root")).render(