async processRequest(request) {
    const controller = this.getController(request);

    global.kuzzle.statistics.startRequest(request);
    this.concurrentRequests++;

    let _request = request;

    try {
      await this._checkSdkVersion(_request);
      _request = await global.kuzzle.pipe("request:onExecution", _request);
      _request = await this.performDocumentAlias(_request, "before");
      _request = await global.kuzzle.pipe(
        this.getEventName(_request, "before"),
        _request,
      );

      const responseData = await doAction(controller, _request);

      _request.setResult(responseData, {
        status: _request.status === 102 ? 200 : _request.status,
      });

      if (
        !this.isNativeController(_request.input.controller) &&
        !_request.response.raw
      ) {
        // check if the plugin response can be serialized
        try {
          if (!(responseData instanceof HttpStream)) {
            JSON.stringify(responseData);
          }
        } catch (e) {
          _request.setResult(null);
          throw kerror.get("plugin", "controller", "unserializable_response");
        }
      }

      _request = await global.kuzzle.pipe(
        this.getEventName(_request, "after"),
        _request,
      );

      _request = await this.performDocumentAlias(_request, "after");
      _request = await global.kuzzle.pipe("request:onSuccess", _request);
      global.kuzzle.statistics.completedRequest(_request);
    } catch (error) {
      return this.handleProcessRequestError(_request, _request, error);
    } finally {
      this.concurrentRequests--;
    }

    return _request;
  }
Executes the request immediately.
/!\ To be used only by methods having already passed the overload check.

@param {Request} request
@returns {Promise}