defaultClient static method
dynamic
defaultClient({
- Logger? logger,
- Duration? maxAge,
- void onRefreshToken(
- AuthenticationTokenParsedData tokens
- String? refreshTokenMethod,
- String refreshTokenUrl(
- String token,
- JWT decodedToken
- FutureOr<
String> customRefreshTokenRequestBodyMapper(- String refreshToken,
- String authToken,
- AuthDeviceInfo? deviceInfo
- FutureOr<
AuthenticationTokenParsedData> customRefreshTokenResponseParser(- String body
- Duration? refreshTokenTimeout,
- void onRefreshTokenFailure()?,
- FutureOr<
AuthenticationTokenParsedData> customRefreshTokenCallback(- String token,
- String? refreshToken,
- 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,
);
}