Skip to content

Instantly share code, notes, and snippets.

@RBFraphael
Created August 11, 2023 15:40
Show Gist options
  • Save RBFraphael/ad27df11aedebc59455f7d57fef7b3a6 to your computer and use it in GitHub Desktop.
Save RBFraphael/ad27df11aedebc59455f7d57fef7b3a6 to your computer and use it in GitHub Desktop.
Service TypeScript
import axios, { AxiosError } from "axios";
const WebApi: any = axios.create({
headers: {
'Content-Type': "application/json",
'Accept': "application/json",
}
});
const PublicApi: any = axios.create({
baseURL: process.env.apiUrl,
headers: {
'Content-Type': "application/json",
'Accept': "application/json",
}
});
const PrivateApi: any = axios.create({
baseURL: process.env.apiUrl,
headers: {
'Content-Type': "application/json",
'Accept': "application/json",
}
});
PrivateApi.interceptors.request.use(
(config: any) => {
if(typeof window !== "undefined"){
const token = localStorage.getItem("access_token");
if(token){
config.headers = {
...config.headers,
'Authorization': `Bearer ${token}`
};
}
}
return config;
}
);
PrivateApi.interceptors.response.use(
(response: any) => {
return response
},
async (error: any) => {
const originalRequest = error.config;
let token = localStorage.getItem("access_token");
console.log(error);
if(error.response.status == 401 && !originalRequest._retry && token){
originalRequest._retry = true;
let newToken: any = await refreshToken();
if(newToken.access_token){
localStorage.setItem("access_token", newToken.access_token);
originalRequest.headers = {
...originalRequest.headers,
'Authorization': `Bearer ${newToken.access_token}`
};
}
return axios(originalRequest);
}
return Promise.reject(error);
}
);
async function refreshToken(error: any = null)
{
let token = localStorage.getItem("access_token");
let headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'Authorization': `Bearer ${token}`
};
var newToken = null;
await PublicApi.post("/auth/refresh", {}, { headers }).then((res: any) => {
let data = res.data;
if(data.access_token){
newToken = data;
}
}).catch((err: AxiosError) => {
localStorage.removeItem("access_token");
window.location.reload();
});
return newToken;
}
export {
WebApi,
PublicApi,
PrivateApi
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment