requestInterceptor method

FutureOr<Request> requestInterceptor(
  1. Request request
)

Implementation

FutureOr<Request> requestInterceptor(Request request) async {
  request.headers['date'] = DateTime.now().toString();
  final AliceHttpCall call = AliceHttpCall(request.hashCode);
  call.method = request.method;
  call.endpoint = request.url.path;
  call.server = request.url.host;
  call.client = "Get Connect";
  if (request.url.scheme.contains("https")) {
    call.secure = true;
  }
  final AliceHttpRequest aliceHttpRequest = AliceHttpRequest();

  aliceHttpRequest.size = request.contentLength ?? 0;
  aliceHttpRequest.body = await request.getBody();
  if (aliceHttpRequest.body == 'Form Data') {
    final listFormData = await request.toListFormData();
    aliceHttpRequest.formDataFields =
        listFormData.whereType<AliceFormDataField>().toList();
    aliceHttpRequest.formDataFiles =
        listFormData.whereType<AliceFormDataFile>().toList();
  }

  aliceHttpRequest.time = DateTime.now();
  aliceHttpRequest.headers = request.headers;

  String? contentType = "unknown";
  if (request.headers.containsKey("Content-Type")) {
    contentType = request.headers["Content-Type"];
  }
  aliceHttpRequest.contentType = contentType;
  aliceHttpRequest.queryParameters = request.url.queryParameters;

  call.request = aliceHttpRequest;
  call.response = AliceHttpResponse();

  aliceCore.addCall(call);

  // HANDLE REQUEST TIMEOUT
  Future.delayed(timeout).then((value) {
    final callSelected = _selectCall(request.id);
    //WHEN STILL WAITING FOR REQUEST
    if (callSelected != null && callSelected.loading) {
      aliceCore.addResponse(AliceHttpResponse(), request.id);
      aliceCore.addError(
        AliceHttpError()..error = 'Connection Timeout!',
        request.id,
      );
    }
  });

  return request;
}