defaultClient static method

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

Implementation

static defaultClient({
  Logger? logger,
  Duration? maxAge,
  void Function(AuthenticationTokenParsedData 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<AuthenticationTokenParsedData> 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<AuthenticationTokenParsedData> Function(
          String token, String? refreshToken, AuthDeviceInfo? deviceInfo)?
      customRefreshTokenCallback,
}) {
  return HttpClientImpl.defaultClient(
    logger: logger,
    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(
          RefreshTokenError(
            token: token,
            exception: exception,
            failure: RefreshSessionFailure(
              exception: exception,
              refreshToken: token,
            ),
          ),
        ),
      );
      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,
  );
}