Skip to main content

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);    }  });};