recoverSession method

Future<AuthResponse> recoverSession(
  1. String jsonStr
)

Recover session from stringified Session.

Implementation

Future<AuthResponse> recoverSession(String jsonStr) async {
  try {
    final session = Session.fromJson(json.decode(jsonStr));
    if (session == null) {
      await signOut();
      throw notifyException(
        AuthException('Current session is missing data.'),
      );
    }

    if (session.isExpired) {
      final refreshToken = session.refreshToken;
      if (_autoRefreshToken && refreshToken != null) {
        return await _callRefreshToken(refreshToken);
      } else {
        await signOut();
        throw notifyException(AuthException('Session expired.'));
      }
    } else {
      final shouldEmitEvent = _currentSession == null ||
          _currentSession?.user.id != session.user.id;
      _saveSession(session);

      if (shouldEmitEvent) {
        notifyAllSubscribers(AuthChangeEvent.tokenRefreshed);
      }

      return AuthResponse(session: session);
    }
  } catch (error) {
    notifyException(error);
    rethrow;
  }
}