client/client-node.js

global.WebSocket = require('ws'); // Polyfill for extending browser code
const Client = require('./client-web');
const request = require('request');
const Deferred = require('../lib/deferred');


/**
 * Polyfill http request for node
 */
Client.fetchResponseUrl = function(url, timeout = 3000) {
    return new Deferred({
        timeout,
        handler: (deferred) => {
            request
                .head(url, {followRedirect: false})
                .on('response', (response) => {
                    if (response.statusCode != 301 && response.statusCode != 302) {
                        return deferred.reject(new Error(`Not redirected, status code: "${response.statusCode}"`));
                    }

                    if (!response.headers.location) {
                        return deferred.reject(new Error(`Redirected, but no location header`));
                    }

                    deferred.resolve(response.headers.location);
                })
                .on('error', err => deferred.reject(err));
        }
    });
};


module.exports = Client;