import {
API_BASE_URL, API_KEY, TOKEN_KEY, TOKEN_REFRESH_KEY, USER_DETAILS_KEY
} from "config";
function getAuthToken(token = localStorage.getItem(TOKEN_KEY)) {
return `Bearer ${token}`;
}
export const axiosInstance: AxiosInstance = axios.create();
axiosInstance.interceptors.request.use(
(request: AxiosRequestConfig) => {
if (request.headers) {
request.headers["x-api-key"] = API_KEY;
} else {
request.headers = { "x-api-key": API_KEY };
}
return request;
},
);
const refreshAuthLogic = async (failedRequest: AxiosError) => {
const refreshToken = localStorage.getItem(TOKEN_REFRESH_KEY);
if (refreshToken) {
try {
const { data } = await axios
.post(`${API_BASE_URL}/token/refresh/`, {
refresh: refreshToken,
});
const { access, refresh } = data;
// save token to storage
axiosInstance.defaults.headers.common["Authorization"] = getAuthToken(access);
return Promise.resolve();
} catch {
// remove token from storage
return Promise.reject(failedRequest);
}
}
// remove token from storage
return Promise.reject(failedRequest);
};
createAuthRefreshInterceptor(
axiosInstance,
refreshAuthLogic,
{
pauseInstanceWhileRefreshing: true,
}
);
import {
API_BASE_URL, API_KEY, TOKEN_KEY, TOKEN_REFRESH_KEY, USER_DETAILS_KEY
} from "config";
function getAuthToken(token = localStorage.getItem(TOKEN_KEY)) {
return `Bearer ${token}`;
}
export const axiosInstance: AxiosInstance = axios.create();
axiosInstance.interceptors.request.use(
(request: AxiosRequestConfig) => {
if (request.headers) {
request.headers["x-api-key"] = API_KEY;
} else {
request.headers = { "x-api-key": API_KEY };
}
return request;
},
);
const refreshAuthLogic = async (failedRequest: AxiosError) => {
const refreshToken = localStorage.getItem(TOKEN_REFRESH_KEY);
if (refreshToken) {
try {
const { data } = await axios
.post(`${API_BASE_URL}/token/refresh/`, {
refresh: refreshToken,
});
const { access, refresh } = data;
// save token to storage
axiosInstance.defaults.headers.common["Authorization"] = getAuthToken(access);
return Promise.resolve();
} catch {
// remove token from storage
return Promise.reject(failedRequest);
}
}
// remove token from storage
return Promise.reject(failedRequest);
};
createAuthRefreshInterceptor(
axiosInstance,
refreshAuthLogic,
{
pauseInstanceWhileRefreshing: true,
}
);