refreshJwtToken method

Future<void> refreshJwtToken({
  1. String? refreshToken,
  2. bool? notify,
  3. Dio? internalDio,
  4. bool interceptRefreshToken = false,
})

Implementation

Future<void> refreshJwtToken(
    {String? refreshToken,
    bool? notify,
    Dio? internalDio,
    bool interceptRefreshToken = false}) async {
  _refreshTokenPending = true;
  try {
    refreshToken ??= _refreshToken;
    if (_isTokenValid(refreshToken)) {
      var refreshTokenRequest = RefreshTokenRequest(refreshToken!);
      try {
        var targetDio = internalDio ?? _dio;
        var response = await targetDio.post('/api/auth/token',
            data: jsonEncode(refreshTokenRequest));
        var loginResponse = LoginResponse.fromJson(response.data);
        await _setUserFromJwtToken(
            loginResponse.token, loginResponse.refreshToken, notify);
      } catch (e) {
        await _clearJwtToken();
        rethrow;
      }
    } else {
      await _clearJwtToken();
      if (interceptRefreshToken) {
        throw ThingsboardError(
            message: 'Session expired!',
            errorCode: ThingsBoardErrorCode.jwtTokenExpired);
      }
    }
  } finally {
    _refreshTokenPending = false;
  }
}