Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 35 lines 959 B view raw
1import { ApolloLink, fromPromise, toPromise } from "@apollo/client"; 2import { hydrateAuthTokens, signOut } from "@/store/persisted/useAuthStore"; 3import { isTokenExpiringSoon, refreshTokens } from "./tokenManager"; 4 5const authLink = new ApolloLink((operation, forward) => { 6 const { accessToken, refreshToken } = hydrateAuthTokens(); 7 8 if (!accessToken || !refreshToken) { 9 signOut(); 10 return forward(operation); 11 } 12 13 const isExpiringSoon = isTokenExpiringSoon(accessToken); 14 15 if (!isExpiringSoon) { 16 operation.setContext({ 17 headers: { "X-Access-Token": accessToken } 18 }); 19 20 return forward(operation); 21 } 22 23 return fromPromise( 24 refreshTokens(refreshToken) 25 .then((newAccessToken) => { 26 operation.setContext({ 27 headers: { "X-Access-Token": newAccessToken } 28 }); 29 return toPromise(forward(operation)); 30 }) 31 .catch(() => toPromise(forward(operation))) 32 ); 33}); 34 35export default authLink;