testcafe-browser-provider-browserstack
Version:
Browserstack TestCafe browser provider plugin.
44 lines • 5.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const http_1 = __importDefault(require("http"));
const url_1 = require("url");
const pinkie_1 = __importDefault(require("pinkie"));
module.exports = class BrowserProxy {
constructor(targetHost, targetPort, { targetProtocol, proxyPort, responseDelay } = {}) {
this.targetProtocol = targetProtocol || 'http';
this.targetHost = targetHost;
this.targetPort = targetPort;
this.proxyPort = proxyPort || 0;
this.responseDelay = responseDelay || 0;
this.server = http_1.default.createServer((...args) => this._onBrowserRequest(...args));
this.server.on('connection', socket => socket.unref());
}
_onBrowserRequest(req, res) {
setTimeout(() => {
const parsedRequestUrl = (0, url_1.parse)(req.url);
const destinationUrl = this.targetProtocol + '//' + this.targetHost + ':' + this.targetPort + parsedRequestUrl.path;
res.statusCode = 302;
res.setHeader('location', destinationUrl);
res.end();
}, this.responseDelay);
}
async init() {
return new pinkie_1.default((resolve, reject) => {
this.server.listen(this.proxyPort, err => {
if (err)
reject(err);
else {
this.proxyPort = this.server.address().port;
resolve();
}
});
});
}
dispose() {
this.server.close();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1wcm94eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLXByb3h5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLDZCQUF3QztBQUN4QyxvREFBNkI7QUFHN0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLFlBQVk7SUFDL0IsWUFBYSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQ2xGLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFPLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFPLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFRLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBSSxhQUFhLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUIsQ0FBRSxHQUFHLEVBQUUsR0FBRztRQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLFdBQVEsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUssSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFFdEgsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFFckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDMUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixPQUFPLElBQUksZ0JBQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLEdBQUc7b0JBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNYO29CQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBRTVDLE9BQU8sRUFBRSxDQUFDO2lCQUNiO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VVcmwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJyb3dzZXJQcm94eSB7XG4gICAgY29uc3RydWN0b3IgKHRhcmdldEhvc3QsIHRhcmdldFBvcnQsIHsgdGFyZ2V0UHJvdG9jb2wsIHByb3h5UG9ydCwgcmVzcG9uc2VEZWxheSB9ID0ge30pIHtcbiAgICAgICAgdGhpcy50YXJnZXRQcm90b2NvbCA9IHRhcmdldFByb3RvY29sIHx8ICdodHRwJztcbiAgICAgICAgdGhpcy50YXJnZXRIb3N0ICAgICA9IHRhcmdldEhvc3Q7XG4gICAgICAgIHRoaXMudGFyZ2V0UG9ydCAgICAgPSB0YXJnZXRQb3J0O1xuICAgICAgICB0aGlzLnByb3h5UG9ydCAgICAgID0gcHJveHlQb3J0IHx8IDA7XG4gICAgICAgIHRoaXMucmVzcG9uc2VEZWxheSAgPSByZXNwb25zZURlbGF5IHx8IDA7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcigoLi4uYXJncykgPT4gdGhpcy5fb25Ccm93c2VyUmVxdWVzdCguLi5hcmdzKSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBzb2NrZXQgPT4gc29ja2V0LnVucmVmKCkpO1xuICAgIH1cblxuICAgIF9vbkJyb3dzZXJSZXF1ZXN0IChyZXEsIHJlcykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlcXVlc3RVcmwgPSBwYXJzZVVybChyZXEudXJsKTtcbiAgICAgICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsICAgPSB0aGlzLnRhcmdldFByb3RvY29sICsgJy8vJyArIHRoaXMudGFyZ2V0SG9zdCArICc6JyArIHRoaXMudGFyZ2V0UG9ydCArIHBhcnNlZFJlcXVlc3RVcmwucGF0aDtcblxuICAgICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAzMDI7XG5cbiAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ2xvY2F0aW9uJywgZGVzdGluYXRpb25VcmwpO1xuICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICB9LCB0aGlzLnJlc3BvbnNlRGVsYXkpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXIubGlzdGVuKHRoaXMucHJveHlQb3J0LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3h5UG9ydCA9IHRoaXMuc2VydmVyLmFkZHJlc3MoKS5wb3J0O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGlzcG9zZSAoKSB7XG4gICAgICAgIHRoaXMuc2VydmVyLmNsb3NlKCk7XG4gICAgfVxufTtcbiJdfQ==