Skip to content

Instantly share code, notes, and snippets.

@sudomann
Created December 12, 2020 03:16
Show Gist options
  • Save sudomann/3418dbf9248153bd1d40b195f2cff0b0 to your computer and use it in GitHub Desktop.
Save sudomann/3418dbf9248153bd1d40b195f2cff0b0 to your computer and use it in GitHub Desktop.
const tokenChecker = (config) => {
if (!someCondition) {
try {
return somePossiblyThrowingAsync()
.then(successCallback);
} catch (e) {
switch (true) {
case e instanceof AccessTokenRefreshError: {
console.warn('AccessTokenRefreshError');
break;
}
case e instanceof ExpiredTokenError: {
console.warn('ExpiredTokenError');
break;
}
case e instanceof InvalidTokenError: {
console.error('InvalidTokenError');
break;
}
case e instanceof RefreshTokenRecoveryError: {
console.warn('RefreshTokenRecoveryError');
break;
}
case e instanceof RefreshTokenSaveError: {
console.warn('RefreshTokenSaveError');
break;
}
default: {
// report anomally
}
}
}
}
return Promise.resolve(config);
};
const somePossiblyThrowingAsync = async () => {
const recoveredRefresh = await TokenStorage.getRefreshToken()
.then((token) => {
const {
exp: tokenExpiration
} = getTokenData(token);
if (expiryTimeIsCloseOrPast(tokenExpiration))
throw new ExpiredTokenError();
if ((token?.length ?? 0) < JWT_REASONABLE_MIN_LENGTH)
throw new InvalidTokenError();
return token;
})
.catch((reason) => {
console.log("throwing RefreshTokenRecoveryError");
throw new RefreshTokenRecoveryError(reason);
});
return authClient
.post("/token/refresh/", {
refresh: recoveredRefresh,
})
.then((response) => response.data.access) // return just the access token string
.catch((reason) => {
throw new AccessTokenRefreshError(reason);
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment