private requestJson()

in lib/binaries/config_source.ts [156:192]


  private requestJson(): Promise<any> {
    return new Promise<any>((resolve, reject) => {
      let options = HttpUtils.initOptions(this.jsonUrl);
      options = HttpUtils.optionsHeader(options, 'Host', 'api.github.com');
      options = HttpUtils.optionsHeader(options, 'User-Agent', 'request');

      let curl = this.getFileName() + ' ' + options.url;
      if (HttpUtils.requestOpts.proxy) {
        let pathUrl = url.parse(options.url.toString()).path;
        let host = url.parse(options.url.toString()).host;
        let newFileUrl = url.resolve(HttpUtils.requestOpts.proxy, pathUrl);
        curl = this.getFileName() + ' \'' + newFileUrl + '\' -H \'host:' + host + '\'';
      }
      if (HttpUtils.requestOpts.ignoreSSL) {
        curl = 'k ' + curl;
      }
      logger.info('curl -o' + curl);

      let req = request(options);
      req.on('response', response => {
        if (response.statusCode === 200) {
          let output = '';
          response.on('data', (data) => {
            output += data;
          });
          response.on('end', () => {
            resolve(output);
          });

        } else if (response.statusCode == 403 && response.headers['x-ratelimit-remaining'] == '0') {
          reject(new Error('Failed to make Github request, rate limit reached.'));
        } else {
          reject(new Error('response status code is not 200.  It was ' + response.statusCode));
        }
      })
    });
  }