async _request()

in lib/client.js [120:178]


  async _request(verb, projectName, path, queries, body, headers, options) {
    var prefix = projectName ? `${projectName}.` : '';
    var suffix = queries ? `?${querystring.stringify(queries)}` : '';
    var url = `http://${prefix}${this.endpoint}${path}${suffix}`;

    const mergedHeaders = Object.assign({
      'content-type': 'application/json',
      'date': new Date().toGMTString(),
      'x-log-apiversion': '0.6.0',
      'x-log-signaturemethod': 'hmac-sha1'
    }, headers);

    const credentials = await this._getCredentials();
    // support STS stoken
    if (credentials.securityToken) {
      mergedHeaders['x-acs-security-token'] = credentials.securityToken;
    }

    if (body) {
      assert(Buffer.isBuffer(body), 'body must be buffer');
      mergedHeaders['content-md5'] = kitx.md5(body, 'hex').toUpperCase();
      mergedHeaders['content-length'] = body.length;
    }

    // verb, path, queries, headers
    const sign = this._sign(verb, path, queries, mergedHeaders, credentials);
    mergedHeaders['authorization'] = sign;

    const response = await httpx.request(url, Object.assign({
      method: verb,
      data: body,
      headers: mergedHeaders
    }, options));

    var responseBody = await httpx.read(response, 'utf8');
    const contentType = response.headers['content-type'] || '';

    if (contentType.startsWith('application/json')) {
      responseBody = JSON.parse(responseBody);
    }

    if (responseBody.errorCode && responseBody.errorMessage) {
      var err = new Error(responseBody.errorMessage);
      err.code = responseBody.errorCode;
      err.requestid = response.headers['x-log-requestid'];
      err.name = `${err.code}Error`;
      throw err;
    }

    if (responseBody.Error) {
      var err = new Error(responseBody.Error.Message);
      err.code = responseBody.Error.Code;
      err.requestid = responseBody.Error.RequestId;
      err.name = `${err.code}Error`;
      throw err;
    }

    return responseBody;
  }