export function request()

in lib/utils.ts [43:84]


export function request(
    method: string, port: string, path: string, timeout?: number, data?: any): Promise<string> {
  let headers: {[key: string]: string} = {};
  let hasContent = data && ((method == 'POST') || (method == 'PUT'));
  if (hasContent) {
    data = data ? JSON.stringify(data) : '';
    headers['Content-Length'] = data.length;
    headers['Content-Type'] = 'application/json;charset=UTF-8';
  }
  return new Promise<string>((resolve, reject) => {
    let unexpectedEnd = () => {
      reject({code: 'UNKNOWN', message: 'Request ended unexpectedly'});
    };
    let req = http.request(
        {port: parseInt(port), method: method, path: path, headers: headers}, (res) => {
          req.removeListener('end', unexpectedEnd);
          if (res.statusCode !== 200) {
            reject({code: res.statusCode, message: res.statusMessage});
          } else {
            let buffer: (string|Buffer)[] = [];
            res.on('data', buffer.push.bind(buffer));
            res.on('end', () => {
              resolve(buffer.join('').replace(/\0/g, ''));
            });
          }
        });

    if (timeout) {
      req.setTimeout(timeout, () => {
        reject({code: 'TIMEOUT', message: 'Request timed out'});
      });
    }
    req.on('error', reject);
    req.on('end', unexpectedEnd);

    if (hasContent) {
      req.write(data as string);
    }

    req.end();
  });
}