‘use strict’;

const dns = require(‘dns’); const util = require(‘util’);

const REQUEST_TIMEOUT = 10000;

// callback(err, data) async function externalRequest(transport, options, callback) {

// perform the DNS lookup manually so that the HTTP host header generated by
// http.get will contain the IP address, this is needed because since Chrome
// 66 the host header cannot contain an host name different than localhost
// (see https://github.com/cyrus-and/chrome-remote-interface/issues/340)
if (!options.useHostName) {
    try {
        const {address} = await util.promisify(dns.lookup)(options.host);
        options.host = address;
    } catch (err) {
        callback(err);
        return;
    }
}
// perform the actual request
const request = transport.get(options, (response) => {
    let data = '';
    response.on('data', (chunk) => {
        data += chunk;
    });
    response.on('end', () => {
        if (response.statusCode === 200) {
            callback(null, data);
        } else {
            callback(new Error(data));
        }
    });
});
request.setTimeout(REQUEST_TIMEOUT, () => {
    request.abort();
});
request.on('error', callback);

}

module.exports = externalRequest;