Portalweb/src/features/login/api.ts

38 lines
1.1 KiB
TypeScript
Raw Normal View History

import axios, { AxiosError, AxiosInstance, InternalAxiosRequestConfig } from 'axios';
import { getAccessToken, handleTokenRefresh } from './utils/tokenRefresh';
const AUTH_API_URL = process.env.NEXT_PUBLIC_AUTH_API_URL;
export const authApi: AxiosInstance = axios.create({
baseURL: AUTH_API_URL,
withCredentials: true,
headers: {
'Content-Type': 'application/json',
},
});
const addToken = (config: InternalAxiosRequestConfig) => {
if (globalThis.window !== undefined) {
const token = getAccessToken();
if (token && config.headers) {
config.headers.Authorization = `Bearer ${token}`;
}
}
return config;
};
authApi.interceptors.request.use(addToken);
const handleResponseError = async (error: AxiosError) => {
const originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };
if (!originalRequest) {
throw error;
}
return handleTokenRefresh(error, originalRequest, authApi);
};
authApi.interceptors.response.use((response) => response, handleResponseError);