Hossein Salari 8dda6b05d7
All checks were successful
Build and Deploy Next.js + Nginx Docker Image / build-and-deploy (push) Successful in 2m50s
Build and Deploy Next.js + Nginx Docker Image / deploy (push) Successful in 8s
feat: connect LLM + LoRA tab to backend api
2026-02-26 17:34:37 +03:30

53 lines
1.3 KiB
JavaScript

import axios from "axios";
import keycloak from "./keycloak";
export const baseUrl = process.env.NEXT_PUBLIC_BASE_URL;
const axiosInstance = axios.create({
baseURL: baseUrl,
});
axiosInstance.interceptors.request.use(
async (config) => {
if (keycloak?.authenticated) {
config.headers.Authorization = `Bearer ${keycloak.token}`;
}
return config;
},
(error) => Promise.reject(error),
);
axiosInstance.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
if (error?.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
keycloak.login();
try {
await keycloak.updateToken(30);
const newToken = keycloak.token;
if (newToken) {
originalRequest.headers["Authorization"] = `Bearer ${newToken}`;
return axiosInstance(originalRequest);
}
} catch (refreshError) {
keycloak.logout({ redirectUri: window.location.origin });
}
}
return Promise.reject(error);
},
);
// ✅ Fetcher for GET (used in SWR)
export const fetcher = async (url) => {
const fullUrl = url.startsWith("http") ? url : `${baseUrl}${url}`;
const resp = await axiosInstance.get(fullUrl);
return resp.data;
};
export default axiosInstance;