Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
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;