Skip to content

Commit 240b33f

Browse files
committed
chore(react): Expose refreshToken() via useAuth()
1 parent f2a59d7 commit 240b33f

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

.changeset/slow-eels-fry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@labdigital/federated-token-react": patch
3+
---
4+
5+
Expose refreshToken() via `useAuth()`

packages/react/src/provider.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ type AuthContextType = {
5050
logout: () => Promise<void>;
5151
validateLocalToken: () => void;
5252
checkToken: () => Promise<void>;
53+
refreshToken: () => Promise<boolean>;
5354
};
5455

5556
const AuthContext = createContext<AuthContextType | undefined>(undefined);
@@ -92,7 +93,10 @@ export function AuthProvider({
9293
options: AuthProviderProps;
9394
}) {
9495
const [authState, setAuthState] = useState<
95-
Omit<AuthContextType, "logout" | "validateLocalToken" | "checkToken">
96+
Omit<
97+
AuthContextType,
98+
"logout" | "validateLocalToken" | "checkToken" | "refreshToken"
99+
>
96100
>({
97101
isAuthenticated: false,
98102
hasToken: false,
@@ -275,15 +279,17 @@ export function AuthProvider({
275279
Cookie.get(cookieNames.userRefreshTokenExists) ??
276280
Cookie.get(cookieNames.guestRefreshTokenExists);
277281
if (hasRefreshToken) {
278-
await refreshAccessToken();
279-
return getJWT();
282+
const success = await refreshAccessToken();
283+
if (success) {
284+
return getJWT();
285+
}
280286
}
281287

282288
// No token exists
283289
return undefined;
284290
};
285291

286-
const refreshAccessToken = async () => {
292+
const refreshAccessToken = async (): Promise<boolean> => {
287293
// Since we are storing the refresh token in a cookie this will be sent
288294
// automatically by the browser.
289295
const response = await fetch(options.authEndpoint, {
@@ -295,9 +301,7 @@ export function AuthProvider({
295301
credentials: "include",
296302
});
297303

298-
if (!response.ok) {
299-
throw new Error(`Failed to refresh token: ${response.statusText}`);
300-
}
304+
return response.ok;
301305
};
302306

303307
const clearTokens = async () => {
@@ -323,6 +327,7 @@ export function AuthProvider({
323327
logout,
324328
validateLocalToken,
325329
checkToken,
330+
refreshToken: refreshAccessToken,
326331
}}
327332
>
328333
{children}

0 commit comments

Comments
 (0)