defaultClient static method

dynamic defaultClient({
  1. Duration? maxAge,
  2. void onRefreshToken(
    1. Map<String, String> tokens
    )?,
  3. String? refreshTokenMethod,
  4. String refreshTokenUrl(
    1. String token,
    2. JWT decodedToken
    )?,
  5. required SharedPreferences sharedPreferences,
  6. FutureOr<String> customRefreshTokenRequestBodyMapper(
    1. String refreshToken,
    2. String authToken,
    3. AuthDeviceInfo? deviceInfo
    )?,
  7. FutureOr<Map<String, String>> customRefreshTokenResponseParser(
    1. String body
    )?,
  8. Duration? refreshTokenTimeout,
  9. void onRefreshTokenFailure(
    1. String token,
    2. Object exception
    )?,
  10. FutureOr<Map<String, String>> customRefreshTokenCallback(
    1. String token,
    2. String? refreshToken,
    3. AuthDeviceInfo? deviceInfo
    )?,
})

Implementation

static defaultClient({
  Duration? maxAge,
  void Function(Map<String, String> tokens)? onRefreshToken,
  String? refreshTokenMethod,
  String Function(String token, JWT decodedToken)? refreshTokenUrl,
  required SharedPreferences sharedPreferences,
  FutureOr<String> Function(String refreshToken, String authToken, AuthDeviceInfo? deviceInfo)?
      customRefreshTokenRequestBodyMapper,
  FutureOr<Map<String, String>> Function(String body)? customRefreshTokenResponseParser,
  Duration? refreshTokenTimeout,
  void Function(String token, Object exception)? onRefreshTokenFailure,

  /// This Callback is called whenever a refresh token is needed, this a way to implement any custom logic
  /// if user wants to call a 3rd part SDK in order to gain the new token, etc
  FutureOr<Map<String, String>> Function(String token, String? refreshToken, AuthDeviceInfo? deviceInfo)?
      customRefreshTokenCallback,
}) {
  return HttpClientImpl.defaultClient(
    sharedPreferences: sharedPreferences,
    maxAge: maxAge,
    onRefreshToken: (tokens) {
      _authRefreshEventsController.add(
        right(
          RefreshTokenSuccess(tokens: tokens),
        ),
      );
      onRefreshToken?.call(tokens);
    },
    refreshTokenMethod: refreshTokenMethod,
    refreshTokenUrl: refreshTokenUrl,
    customRefreshTokenRequestBodyMapper: (refreshToken, authToken) async {
      // let's try to get previous deviceInfo
      final session =
          (await GetIt.instance<AuthenticationService>().getAuthenticatedSession()).fold((l) => null, (r) => r);
      if (customRefreshTokenRequestBodyMapper != null) {
        return customRefreshTokenRequestBodyMapper.call(
          refreshToken,
          authToken,
          session?.deviceInfo,
        );
      }
      return jsonEncode({
        "refreshToken": refreshToken,
        "deviceInfo": session?.deviceInfo?.toMap(),
      });
    },
    customRefreshTokenResponseParser: customRefreshTokenResponseParser,
    customRefreshTokenRequestWrapper: (request) async {
      request.headers.addAll({
        HttpHeaders.contentTypeHeader: "application/json",
      });
      return request;
    },
    refreshTokenTimeout: refreshTokenTimeout,
    onRefreshTokenFailure: (token, exception) {
      _authRefreshEventsController.add(
        left(
          RefreshTokenFailure(token: token, exception: exception),
        ),
      );
      onRefreshTokenFailure?.call(token, exception);
    },
    customRefreshTokenCallback: customRefreshTokenCallback != null
        ? (token, refreshToken) async {
            // let's try to get previous deviceInfo
            final session =
                (await GetIt.instance<AuthenticationService>().getAuthenticatedSession()).fold((l) => null, (r) => r);
            return customRefreshTokenCallback(
              token,
              refreshToken,
              session?.deviceInfo,
            );
          }
        : null,
  );
}