UNPKG

testcafe-browser-provider-browserstack

Version:
84 lines 12.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const pinkie_1 = __importDefault(require("pinkie")); const browserstack_local_1 = require("browserstack-local"); const os_family_1 = __importDefault(require("os-family")); const url_1 = __importDefault(require("url")); const tmp_1 = __importDefault(require("tmp")); const PROXY_AUTH_RE = /^([^:]*)(?::(.*))?$/; const identity = x => x; const capitalize = str => str[0].toUpperCase() + str.slice(1); function copyOptions(source, destination, transfromFunc = identity) { Object .keys(source) .forEach(key => source[key] && (destination[transfromFunc(key)] = source[key])); } function getProxyOptions(proxyConfig) { try { var { hostname, port, auth } = url_1.default.parse('http://' + proxyConfig); var parsedAuth = auth && auth.match(PROXY_AUTH_RE); return { host: hostname === 'undefined' ? null : hostname, port: port, user: parsedAuth && parsedAuth[1], pass: parsedAuth && parsedAuth[2] }; } catch (e) { return {}; } } class BrowserstackConnector { constructor(accessKey) { this.accessKey = accessKey; this.connectorInstance = null; this.tempFileName = ''; } _getTempFileName() { if (!this.tempFileName) { tmp_1.default.setGracefulCleanup(); this.tempFileName = tmp_1.default.tmpNameSync({ unsafeCleanup: true }); } return this.tempFileName; } create() { return new pinkie_1.default((resolve, reject) => { var connector = new browserstack_local_1.Local(); var parallelRuns = process.env['BROWSERSTACK_PARALLEL_RUNS']; var logfile = process.env['BROWSERSTACK_LOGFILE'] || (os_family_1.default.win ? this._getTempFileName() : '/dev/null'); var verbose = process.env['BROWSERSTACK_VERBOSE']; var binarypath = process.env['BROWSERSTACK_BINARY_PATH']; var opts = Object.assign(Object.assign(Object.assign(Object.assign({ key: this.accessKey, logfile, forceLocal: !!process.env['BROWSERSTACK_FORCE_LOCAL'], forceProxy: !!process.env['BROWSERSTACK_FORCE_PROXY'], localIdentifier: Date.now() }, parallelRuns ? { parallelRuns } : {}), verbose ? { verbose } : {}), binarypath ? { binarypath } : {}), { //NOTE: additional args use different format 'enable-logging-for-api': true }); var proxyOptions = getProxyOptions(process.env['BROWSERSTACK_PROXY']); var localProxyOptions = getProxyOptions(process.env['BROWSERSTACK_LOCAL_PROXY']); copyOptions(proxyOptions, opts, key => 'proxy' + capitalize(key)); copyOptions(localProxyOptions, opts, key => 'local-proxy-' + key); connector.start(opts, err => { if (err) { reject(err); return; } this.connectorInstance = connector; resolve(connector); }); }); } destroy() { return new pinkie_1.default((resolve, reject) => { this.connectorInstance.stop(err => { if (err) { reject(err); return; } resolve(); }); }); } } exports.default = BrowserstackConnector; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nvbm5lY3Rvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE2QjtBQUM3QiwyREFBZ0U7QUFDaEUsMERBQTJCO0FBQzNCLDhDQUEwQjtBQUMxQiw4Q0FBc0I7QUFHdEIsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUM7QUFFNUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU5RCxTQUFTLFdBQVcsQ0FBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsR0FBRyxRQUFRO0lBQy9ELE1BQU07U0FDRCxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFFLFdBQVc7SUFDakMsSUFBSTtRQUNBLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLGFBQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLElBQUksVUFBVSxHQUFpQixJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVqRSxPQUFPO1lBQ0gsSUFBSSxFQUFFLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtZ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QUFJLEdBQUcsRUFBRTtvQkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ1osT0FBTztpQkFDVjtnQkFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLGdCQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNaLE9BQU87aUJBQ1Y7Z0JBRUQsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBdEVELHdDQXNFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9taXNlIGZyb20gJ3BpbmtpZSc7XG5pbXBvcnQgeyBMb2NhbCBhcyBCcm93c2Vyc3RhY2tMb2NhbCB9IGZyb20gJ2Jyb3dzZXJzdGFjay1sb2NhbCc7XG5pbXBvcnQgT1MgZnJvbSAnb3MtZmFtaWx5JztcbmltcG9ydCBub2RlVXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgdG1wIGZyb20gJ3RtcCc7XG5cblxuY29uc3QgUFJPWFlfQVVUSF9SRSA9IC9eKFteOl0qKSg/OjooLiopKT8kLztcblxuY29uc3QgaWRlbnRpdHkgPSB4ID0+IHg7XG5cbmNvbnN0IGNhcGl0YWxpemUgPSBzdHIgPT4gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbmZ1bmN0aW9uIGNvcHlPcHRpb25zIChzb3VyY2UsIGRlc3RpbmF0aW9uLCB0cmFuc2Zyb21GdW5jID0gaWRlbnRpdHkpIHtcbiAgICBPYmplY3RcbiAgICAgICAgLmtleXMoc291cmNlKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4gc291cmNlW2tleV0gJiYgKGRlc3RpbmF0aW9uW3RyYW5zZnJvbUZ1bmMoa2V5KV0gPSBzb3VyY2Vba2V5XSkpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm94eU9wdGlvbnMgKHByb3h5Q29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHsgaG9zdG5hbWUsIHBvcnQsIGF1dGggfSA9IG5vZGVVcmwucGFyc2UoJ2h0dHA6Ly8nICsgcHJveHlDb25maWcpO1xuICAgICAgICB2YXIgcGFyc2VkQXV0aCAgICAgICAgICAgICAgID0gYXV0aCAmJiBhdXRoLm1hdGNoKFBST1hZX0FVVEhfUkUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0OiBob3N0bmFtZSA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICAgICAgdXNlcjogcGFyc2VkQXV0aCAmJiBwYXJzZWRBdXRoWzFdLFxuICAgICAgICAgICAgcGFzczogcGFyc2VkQXV0aCAmJiBwYXJzZWRBdXRoWzJdXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlcnN0YWNrQ29ubmVjdG9yIHtcbiAgICBjb25zdHJ1Y3RvciAoYWNjZXNzS2V5KSB7XG4gICAgICAgIHRoaXMuYWNjZXNzS2V5ICAgICAgICAgPSBhY2Nlc3NLZXk7XG4gICAgICAgIHRoaXMuY29ubmVjdG9ySW5zdGFuY2UgPSBudWxsO1xuICAgICAgICB0aGlzLnRlbXBGaWxlTmFtZSAgICAgID0gJyc7XG4gICAgfVxuXG4gICAgX2dldFRlbXBGaWxlTmFtZSAoKSB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wRmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHRtcC5zZXRHcmFjZWZ1bENsZWFudXAoKTtcblxuICAgICAgICAgICAgdGhpcy50ZW1wRmlsZU5hbWUgPSB0bXAudG1wTmFtZVN5bmMoeyB1bnNhZmVDbGVhbnVwOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcEZpbGVOYW1lO1xuICAgIH1cblxuICAgIGNyZWF0ZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB2YXIgY29ubmVjdG9yICAgID0gbmV3IEJyb3dzZXJzdGFja0xvY2FsKCk7XG4gICAgICAgICAgICB2YXIgcGFyYWxsZWxSdW5zID0gcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19QQVJBTExFTF9SVU5TJ107XG4gICAgICAgICAgICB2YXIgbG9nZmlsZSA9IHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfTE9HRklMRSddIHx8IChPUy53aW4gPyB0aGlzLl9nZXRUZW1wRmlsZU5hbWUoKSA6ICcvZGV2L251bGwnKTtcbiAgICAgICAgICAgIHZhciB2ZXJib3NlID0gcHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19WRVJCT1NFJ107XG4gICAgICAgICAgICB2YXIgYmluYXJ5cGF0aCA9IHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfQklOQVJZX1BBVEgnXTtcblxuICAgICAgICAgICAgdmFyIG9wdHMgPSB7XG4gICAgICAgICAgICAgICAga2V5OiAgICAgICAgICAgICB0aGlzLmFjY2Vzc0tleSxcbiAgICAgICAgICAgICAgICBsb2dmaWxlLFxuICAgICAgICAgICAgICAgIGZvcmNlTG9jYWw6ICAgICAgISFwcm9jZXNzLmVudlsnQlJPV1NFUlNUQUNLX0ZPUkNFX0xPQ0FMJ10sXG4gICAgICAgICAgICAgICAgZm9yY2VQcm94eTogICAgICAhIXByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfRk9SQ0VfUFJPWFknXSxcbiAgICAgICAgICAgICAgICBsb2NhbElkZW50aWZpZXI6IERhdGUubm93KCksXG5cbiAgICAgICAgICAgICAgICAuLi5wYXJhbGxlbFJ1bnMgPyB7IHBhcmFsbGVsUnVucyB9IDoge30sXG4gICAgICAgICAgICAgICAgLi4udmVyYm9zZSA/IHsgdmVyYm9zZSB9IDoge30sXG4gICAgICAgICAgICAgICAgLi4uYmluYXJ5cGF0aCA/IHsgYmluYXJ5cGF0aCB9IDoge30sXG5cbiAgICAgICAgICAgICAgICAvL05PVEU6IGFkZGl0aW9uYWwgYXJncyB1c2UgZGlmZmVyZW50IGZvcm1hdFxuICAgICAgICAgICAgICAgICdlbmFibGUtbG9nZ2luZy1mb3ItYXBpJzogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHByb3h5T3B0aW9ucyAgICAgID0gZ2V0UHJveHlPcHRpb25zKHByb2Nlc3MuZW52WydCUk9XU0VSU1RBQ0tfUFJPWFknXSk7XG4gICAgICAgICAgICB2YXIgbG9jYWxQcm94eU9wdGlvbnMgPSBnZXRQcm94eU9wdGlvbnMocHJvY2Vzcy5lbnZbJ0JST1dTRVJTVEFDS19MT0NBTF9QUk9YWSddKTtcblxuICAgICAgICAgICAgY29weU9wdGlvbnMocHJveHlPcHRpb25zLCBvcHRzLCBrZXkgPT4gJ3Byb3h5JyArIGNhcGl0YWxpemUoa2V5KSk7XG4gICAgICAgICAgICBjb3B5T3B0aW9ucyhsb2NhbFByb3h5T3B0aW9ucywgb3B0cywga2V5ID0+ICdsb2NhbC1wcm94eS0nICsga2V5KTtcblxuICAgICAgICAgICAgY29ubmVjdG9yLnN0YXJ0KG9wdHMsIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdG9ySW5zdGFuY2UgPSBjb25uZWN0b3I7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25uZWN0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlc3Ryb3kgKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0b3JJbnN0YW5jZS5zdG9wKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=