diff --git a/.changeset/slow-eels-fry.md b/.changeset/slow-eels-fry.md new file mode 100644 index 0000000..2c43ffc --- /dev/null +++ b/.changeset/slow-eels-fry.md @@ -0,0 +1,5 @@ +--- +"@labdigital/federated-token-react": patch +--- + +Expose refreshToken() via `useAuth()` diff --git a/packages/react/src/provider.tsx b/packages/react/src/provider.tsx index 98c9ecc..f0c44fa 100644 --- a/packages/react/src/provider.tsx +++ b/packages/react/src/provider.tsx @@ -50,6 +50,7 @@ type AuthContextType = { logout: () => Promise; validateLocalToken: () => void; checkToken: () => Promise; + refreshToken: () => Promise; }; const AuthContext = createContext(undefined); @@ -92,7 +93,7 @@ export function AuthProvider({ options: AuthProviderProps; }) { const [authState, setAuthState] = useState< - Omit + Omit >({ isAuthenticated: false, hasToken: false, @@ -275,15 +276,17 @@ export function AuthProvider({ Cookie.get(cookieNames.userRefreshTokenExists) ?? Cookie.get(cookieNames.guestRefreshTokenExists); if (hasRefreshToken) { - await refreshAccessToken(); - return getJWT(); + const success = await refreshAccessToken(); + if (success) { + return getJWT(); + } } // No token exists return undefined; }; - const refreshAccessToken = async () => { + const refreshAccessToken = async (): Promise => { // Since we are storing the refresh token in a cookie this will be sent // automatically by the browser. const response = await fetch(options.authEndpoint, { @@ -295,9 +298,7 @@ export function AuthProvider({ credentials: "include", }); - if (!response.ok) { - throw new Error(`Failed to refresh token: ${response.statusText}`); - } + return response.ok }; const clearTokens = async () => { @@ -323,6 +324,7 @@ export function AuthProvider({ logout, validateLocalToken, checkToken, + refreshToken: refreshAccessToken, }} > {children}