import { getEnvs } from "@/libs/environment/env"; import { CreateInterceptor } from "@/libs/interceptor/interceptor"; import { useServerDataCtx } from "@/providers/server-data-provider/server-data-provider"; import { useAuthStore } from "@/store/auth-store/use-auth-store"; import { useInterceptorStore } from "@/store/interceptor-store/use-interceptor-store"; const WL_BOOKING_API = "wl-booking"; const WL_AUTH_API = "wl-auth-api"; const WL_DISPLAY_API = "wl-display-api"; const EVA_DATA_API = "eva-data-api"; const EVA_PANEL_API = "eva-panel-api"; const MASTERPASS_API = "masterpass-api"; const WITHOUT_CREDENTIALS_APIS = [WL_AUTH_API]; const WITHOUT_TOKEN_APIS = [MASTERPASS_API]; type API = | typeof WL_BOOKING_API | typeof WL_AUTH_API | typeof WL_DISPLAY_API | typeof EVA_DATA_API | typeof EVA_PANEL_API | typeof MASTERPASS_API; const FCDSCP_SETTER_WHITE_LIST = [WL_DISPLAY_API]; export const useHttp = (resourceApi: API, responseType?: "blob" | "json") => { const envs = getEnvs(window.location.href); const authStore = useAuthStore(); const { clientToken } = useServerDataCtx(); const token = authStore.tokenInfo?.accessToken ?? clientToken; const { networkError } = useInterceptorStore(); const apiUrls: Record = { [WL_BOOKING_API]: envs.wlBookingUrl, [WL_AUTH_API]: envs.wlAuthUrl, [WL_DISPLAY_API]: envs.wlDisplayUrl, [EVA_DATA_API]: envs.evaDataApiUrl, [EVA_PANEL_API]: envs.evaPanelUrl, [MASTERPASS_API]: envs.masterpassUrl, }; const apiUrl = apiUrls[resourceApi]; if (!apiUrl) { throw new Error("API not found"); } function handleNetworkError() { networkError.increment(); } return CreateInterceptor( apiUrl, token, responseType ?? "json", !WITHOUT_CREDENTIALS_APIS.includes(resourceApi), WITHOUT_TOKEN_APIS.includes(resourceApi), handleNetworkError, FCDSCP_SETTER_WHITE_LIST.includes(resourceApi), ); };