sendRequest<T> method
Implementation
Future<T> sendRequest<T>(SendWebContext info) async {
Response? res = null;
try {
var req = await createRequest(info);
if (urlFilter != null) {
urlFilter!(req.url.toString());
}
var streamedRes = await client.send(req);
res = await Response.fromStream(streamedRes);
} on Exception catch (e) {
Log.debug("sendRequest() createResponse: $e");
return await handleError(null, e);
}
try {
var response = await createResponse(res, info);
return response;
} on Exception catch (e) {
var debug = Log.isDebugEnabled();
if (debug) Log.debug("sendRequest(): statusCode:${res.statusCode}, $e");
if (res.statusCode == 401) {
if (refreshToken != null || useTokenCookie) {
var jwtRequest = GetAccessToken(refreshToken: this.refreshToken);
var url = refreshTokenUri ?? createUrlFromDto("POST", jwtRequest);
var jwtInfo = SendWebContext(
method: "POST", request: jwtRequest, args: null, url: url);
try {
var jwtReq = await createRequest(jwtInfo);
var jwtStreamedRes = await client.send(jwtReq);
var jwtRes = await Response.fromStream(jwtStreamedRes);
var jwtResponse =
await (createResponse<GetAccessTokenResponse>(jwtRes, jwtInfo)
as FutureOr<GetAccessTokenResponse>);
bearerToken = jwtResponse.accessToken;
if (debug) Log.debug("sendRequest(): bearerToken refreshed");
return await _resendRequest<T>(info);
} on Exception catch (jwtEx) {
if (debug) Log.debug("sendRequest(): jwtEx: $jwtEx");
return await handleError(
res, jwtEx, WebServiceExceptionType.RefreshTokenException);
}
}
if (onAuthenticationRequired != null) {
await onAuthenticationRequired!();
return await _resendRequest<T>(info);
}
}
return await handleError(res, e);
}
}