Skip to content

Commit f5059f4

Browse files
authored
Fix invalid token error message (#321)
1 parent 3c60de4 commit f5059f4

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/utils/api.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import {
44
useOidcIdToken,
55
} from "@axa-fr/react-oidc";
66
import loadConfig from "@utils/config";
7+
import { sleep } from "@utils/helpers";
78
import { usePathname } from "next/navigation";
9+
import { isExpired } from "react-jwt";
810
import useSWR from "swr";
911
import { useErrorBoundary } from "@/contexts/ErrorBoundary";
1012

@@ -40,15 +42,30 @@ export function useNetBirdFetch() {
4042
const tokenSource = config.tokenSource || "accessToken";
4143
const { idToken } = useOidcIdToken();
4244
const { accessToken } = useOidcAccessToken();
45+
const token = tokenSource.toLowerCase() == "idtoken" ? idToken : accessToken;
46+
const handleErrors = useApiErrorHandling();
47+
48+
const isTokenExpired = async () => {
49+
let attempts = 20;
50+
while (isExpired(token) && attempts > 0) {
51+
await sleep(500);
52+
attempts = attempts - 1;
53+
}
54+
return isExpired(token);
55+
};
4356

4457
const nativeFetch = async (input: RequestInfo, init?: RequestInit) => {
45-
const token =
46-
tokenSource.toLowerCase() == "idtoken" ? idToken : accessToken;
58+
const tokenExpired = await isTokenExpired();
59+
if (tokenExpired) {
60+
return handleErrors({ code: 401, message: "token expired" });
61+
}
62+
4763
const headers = {
4864
"Content-Type": "application/json",
4965
Accept: "application/json",
5066
Authorization: `Bearer ${token}`,
5167
};
68+
5269
return fetch(input, {
5370
...init,
5471
headers,
@@ -122,6 +139,9 @@ export function useApiErrorHandling() {
122139
if (err.code == 401 && err.message == "no valid authentication provided") {
123140
return login(currentPath);
124141
}
142+
if (err.code == 401 && err.message == "token expired") {
143+
return login(currentPath);
144+
}
125145
if (err.code == 401 && err.message == "token invalid") {
126146
return setError(err);
127147
}

0 commit comments

Comments
 (0)