refreshSession method
Implementation
@override
Future<Either<Failure, AuthenticationData>> refreshSession() async {
final currentSessionResult = await getAuthenticatedSession();
return currentSessionResult.fold((l) => left(l), (session) async {
if (session == null) {
return left(NoAuthenticatedFailure());
}
if (config.refreshTokenAPIendpoint != null) {
return wrapAndHandleHttpBaseRequest<AuthenticationData>(
() {
final Uri uri = config.refreshTokenAPIendpoint!(session.id, JWT.parse(session.token));
return Request(
config.refreshTokenMethod ?? "POST",
uri,
)
..headers.addAll({
AuthHttpClientKeys.noAuthenticateOverride: "true",
})
..body =
jsonEncode(config.customRefreshTokenRequestBodyMapper?.call(session.refreshToken!, session.token) ??
{
"refreshToken": session.refreshToken,
});
},
onResponse: (response, left, right) async {
final tokens = await config.customRefreshTokenResponseParser?.call(
jsonDecode(response.body),
) ??
_defaultRefreshTokenResponseParser(response.body);
return right(
session.copyWith(
token: tokens[AuthSharedPrefKeys.TOKEN_KEY], refreshToken: tokens[AuthSharedPrefKeys.REFRESH_KEY]),
);
},
);
} else if (config.customRefreshTokenCallback != null) {
final tokens = await config.customRefreshTokenCallback?.call(session.token, session.refreshToken);
if (tokens == null || !tokens.containsKey(AuthSharedPrefKeys.TOKEN_KEY)) {
throw Exception("config.customRefreshTokenCallback were not able to provide auth tokens");
}
return right(
session.copyWith(
token: tokens[AuthSharedPrefKeys.TOKEN_KEY], refreshToken: tokens[AuthSharedPrefKeys.REFRESH_KEY]),
);
}
return throw Exception(
"Cannot refresh authentication sinceno 'config.refreshTokenAPIendpoint' nor 'config.customRefreshTokenCallback' defined",
);
});
}