import axios from "axios"; import { batchActions } from 'redux-batched-actions'; import { logOut, setRefreshToken, setToken } from "../../store/actions"; import store from "../../store/index"; import { API_ENDPOINT } from '../endpointDef'; let refreshingPromise = null export async function refreshTokens() { // console.log("RefreshTokens") if (!refreshingPromise) { refreshingPromise = new Promise(async (resolve, reject) => { // console.log("Sending the requst for new tokens") const refreshToken = store.getState().user.refreshToken const username = store.getState().user.username try { const { data } = await axios.post(`${API_ENDPOINT}api/token/refresh`, { Token: refreshToken, Username: username, }); // console.log("Dispatch from refresh", data.Data.AccessToken, data.Data.RefreshToken) store.dispatch(batchActions([setToken(data.Data.AccessToken), setRefreshToken(data.Data.RefreshToken)])) resolve() } catch (e) { // console.log("Could not refresh token.") store.dispatch(logOut()) reject(e) } finally { refreshingPromise = null } }) } // else { // console.log("Someone is refreshing...") // } await refreshingPromise }