refreshSession method

  1. @override
Future<Either<Failure, AuthenticationData>> refreshSession()
override

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