Handling Token Refresh
For the library to automatically obtain fresh Bearer token, two properties need to be provided:
type hasTokenExpired = (error: any) => boolean;
and
type refreshHandler = RefreshHandler<FetcherConfig>;
type RefreshHandler<FetcherConfig extends Tokens> = ( fetcherConfig: FetcherConfig) => Promise<Tokens>;
hasTokenExpired
#
This function is called whenever a request fails. Sample implementation:
export function hasTokenExpired(apiError: ApiError): boolean { if (apiError instanceof Error) { return false; } const { body } = apiError; return 'message' in body && body.message === 'Unauthorized';}
refreshHandler
#
If request failed because of expired Bearer token, refreshHandler
is called to refresh the token. Sample implementation:
export const handleTokenRefresh: RefreshHandler<FetchConfig> = ( fetcherConfig): Promise<Tokens> => { return new Promise<Tokens>(async (resolve, reject) => { try { const newTokens: AuthenticateResponse = await postUsersRefreshToken( fetcherConfig )();
resolve({ bearerToken: newTokens.jwtToken, }); } catch (e) { reject(e); } });};