@@ -50,6 +50,7 @@ type AuthContextType = {
50
50
logout : ( ) => Promise < void > ;
51
51
validateLocalToken : ( ) => void ;
52
52
checkToken : ( ) => Promise < void > ;
53
+ refreshToken : ( ) => Promise < boolean > ;
53
54
} ;
54
55
55
56
const AuthContext = createContext < AuthContextType | undefined > ( undefined ) ;
@@ -92,7 +93,10 @@ export function AuthProvider({
92
93
options : AuthProviderProps ;
93
94
} ) {
94
95
const [ authState , setAuthState ] = useState <
95
- Omit < AuthContextType , "logout" | "validateLocalToken" | "checkToken" >
96
+ Omit <
97
+ AuthContextType ,
98
+ "logout" | "validateLocalToken" | "checkToken" | "refreshToken"
99
+ >
96
100
> ( {
97
101
isAuthenticated : false ,
98
102
hasToken : false ,
@@ -275,15 +279,17 @@ export function AuthProvider({
275
279
Cookie . get ( cookieNames . userRefreshTokenExists ) ??
276
280
Cookie . get ( cookieNames . guestRefreshTokenExists ) ;
277
281
if ( hasRefreshToken ) {
278
- await refreshAccessToken ( ) ;
279
- return getJWT ( ) ;
282
+ const success = await refreshAccessToken ( ) ;
283
+ if ( success ) {
284
+ return getJWT ( ) ;
285
+ }
280
286
}
281
287
282
288
// No token exists
283
289
return undefined ;
284
290
} ;
285
291
286
- const refreshAccessToken = async ( ) => {
292
+ const refreshAccessToken = async ( ) : Promise < boolean > => {
287
293
// Since we are storing the refresh token in a cookie this will be sent
288
294
// automatically by the browser.
289
295
const response = await fetch ( options . authEndpoint , {
@@ -295,9 +301,7 @@ export function AuthProvider({
295
301
credentials : "include" ,
296
302
} ) ;
297
303
298
- if ( ! response . ok ) {
299
- throw new Error ( `Failed to refresh token: ${ response . statusText } ` ) ;
300
- }
304
+ return response . ok ;
301
305
} ;
302
306
303
307
const clearTokens = async ( ) => {
@@ -323,6 +327,7 @@ export function AuthProvider({
323
327
logout,
324
328
validateLocalToken,
325
329
checkToken,
330
+ refreshToken : refreshAccessToken ,
326
331
} }
327
332
>
328
333
{ children }
0 commit comments