UNPKG

webdriverio-automation

Version:

WebdriverIO-Automation android ios project

125 lines (94 loc) 14.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.server = server; exports.configureServer = configureServer; require("source-map-support/register"); var _path = _interopRequireDefault(require("path")); var _express = _interopRequireDefault(require("express")); var _http = _interopRequireDefault(require("http")); var _serveFavicon = _interopRequireDefault(require("serve-favicon")); var _bodyParser = _interopRequireDefault(require("body-parser")); var _methodOverride = _interopRequireDefault(require("method-override")); var _logger = _interopRequireDefault(require("./logger")); var _expressLogging = require("./express-logging"); var _middleware = require("./middleware"); var _static = require("./static"); var _crash = require("./crash"); var _websocket = require("./websocket"); var _bluebird = _interopRequireDefault(require("bluebird")); async function server(configureRoutes, port, hostname = null, allowCors = true) { const app = (0, _express.default)(); let httpServer = _http.default.createServer(app); httpServer.addWebSocketHandler = _websocket.addWebSocketHandler; httpServer.removeWebSocketHandler = _websocket.removeWebSocketHandler; httpServer.removeAllWebSocketHandlers = _websocket.removeAllWebSocketHandlers; httpServer.getWebSocketHandlers = _websocket.getWebSocketHandlers; const close = httpServer.close.bind(httpServer); httpServer.close = async () => { return await new _bluebird.default((resolve, reject) => { httpServer.on('close', resolve); close(err => { if (err) reject(err); }); }); }; return await new _bluebird.default((resolve, reject) => { httpServer.on('error', err => { if (err.code === 'EADDRNOTAVAIL') { _logger.default.error('Could not start REST http interface listener. ' + 'Requested address is not available.'); } else { _logger.default.error('Could not start REST http interface listener. The requested ' + 'port may already be in use. Please make sure there is no ' + 'other instance of this server running already.'); } reject(err); }); httpServer.on('connection', socket => { socket.setTimeout(600 * 1000); socket.on('error', reject); }); configureServer(app, configureRoutes, allowCors); let serverArgs = [port]; if (hostname) { serverArgs.push(hostname); } httpServer.listen(...serverArgs, err => { if (err) { reject(err); } resolve(httpServer); }); }); } function configureServer(app, configureRoutes, allowCors = true) { app.use(_expressLogging.endLogFormatter); app.use((0, _serveFavicon.default)(_path.default.resolve(_static.STATIC_DIR, 'favicon.ico'))); app.use(_express.default.static(_static.STATIC_DIR)); app.use('/wd/hub/produce_error', _crash.produceError); app.use('/wd/hub/crash', _crash.produceCrash); if (allowCors) { app.use(_middleware.allowCrossDomain); } else { app.use(_middleware.allowCrossDomainAsyncExecute); } app.use(_middleware.fixPythonContentType); app.use(_middleware.defaultToJSONContentType); app.use(_bodyParser.default.urlencoded({ extended: true })); app.use((0, _methodOverride.default)()); app.use(_middleware.catch4XXHandler); app.use(_middleware.catchAllHandler); app.use(_bodyParser.default.json({ limit: '1gb' })); app.use(_expressLogging.startLogFormatter); configureRoutes(app); app.all('/welcome', _static.welcome); app.all('/test/guinea-pig', _static.guineaPig); app.all('/test/guinea-pig-scrollable', _static.guineaPigScrollable); app.all('/test/guinea-pig-app-banner', _static.guineaPigAppBanner); app.use(_middleware.catch404Handler); }require('source-map-support').install(); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHByZXNzL3NlcnZlci5qcyJdLCJuYW1lcyI6WyJzZXJ2ZXIiLCJjb25maWd1cmVSb3V0ZXMiLCJwb3J0IiwiaG9zdG5hbWUiLCJhbGxvd0NvcnMiLCJhcHAiLCJodHRwU2VydmVyIiwiaHR0cCIsImNyZWF0ZVNlcnZlciIsImFkZFdlYlNvY2tldEhhbmRsZXIiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicmVtb3ZlQWxsV2ViU29ja2V0SGFuZGxlcnMiLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImNsb3NlIiwiYmluZCIsIkIiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJjb2RlIiwibG9nIiwiZXJyb3IiLCJzb2NrZXQiLCJzZXRUaW1lb3V0IiwiY29uZmlndXJlU2VydmVyIiwic2VydmVyQXJncyIsInB1c2giLCJsaXN0ZW4iLCJ1c2UiLCJlbmRMb2dGb3JtYXR0ZXIiLCJwYXRoIiwiU1RBVElDX0RJUiIsImV4cHJlc3MiLCJzdGF0aWMiLCJwcm9kdWNlRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dDcm9zc0RvbWFpbkFzeW5jRXhlY3V0ZSIsImZpeFB5dGhvbkNvbnRlbnRUeXBlIiwiZGVmYXVsdFRvSlNPTkNvbnRlbnRUeXBlIiwiYm9keVBhcnNlciIsInVybGVuY29kZWQiLCJleHRlbmRlZCIsImNhdGNoNFhYSGFuZGxlciIsImNhdGNoQWxsSGFuZGxlciIsImpzb24iLCJsaW1pdCIsInN0YXJ0TG9nRm9ybWF0dGVyIiwiYWxsIiwid2VsY29tZSIsImd1aW5lYVBpZyIsImd1aW5lYVBpZ1Njcm9sbGFibGUiLCJndWluZWFQaWdBcHBCYW5uZXIiLCJjYXRjaDQwNEhhbmRsZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUVBOztBQUdBLGVBQWVBLE1B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RCxFQUFBQSxHQUFHLENBQUN3QixHQUFKLENBQVF5QiwyQkFBUjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IGZhdmljb24gZnJvbSAnc2VydmUtZmF2aWNvbic7XG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgbWV0aG9kT3ZlcnJpZGUgZnJvbSAnbWV0aG9kLW92ZXJyaWRlJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgc3RhcnRMb2dGb3JtYXR0ZXIsIGVuZExvZ0Zvcm1hdHRlciB9IGZyb20gJy4vZXhwcmVzcy1sb2dnaW5nJztcbmltcG9ydCB7IGFsbG93Q3Jvc3NEb21haW4sIGZpeFB5dGhvbkNvbnRlbnRUeXBlLCBkZWZhdWx0VG9KU09OQ29udGVudFR5cGUsXG4gICAgICAgICBjYXRjaEFsbEhhbmRsZXIsIGNhdGNoNDA0SGFuZGxlciwgY2F0Y2g0WFhIYW5kbGVyLFxuICAgICAgICAgYWxsb3dDcm9zc0RvbWFpbkFzeW5jRXhlY3V0ZX0gZnJvbSAnLi9taWRkbGV3YXJlJztcbmltcG9ydCB7IGd1aW5lYVBpZywgZ3VpbmVhUGlnU2Nyb2xsYWJsZSwgZ3VpbmVhUGlnQXBwQmFubmVyLCB3ZWxjb21lLCBTVEFUSUNfRElSIH0gZnJvbSAnLi9zdGF0aWMnO1xuaW1wb3J0IHsgcHJvZHVjZUVycm9yLCBwcm9kdWNlQ3Jhc2ggfSBmcm9tICcuL2NyYXNoJztcbmltcG9ydCB7IGFkZFdlYlNvY2tldEhhbmRsZXIsIHJlbW92ZVdlYlNvY2tldEhhbmRsZXIsIHJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzLFxuICAgICAgICAgZ2V0V2ViU29ja2V0SGFuZGxlcnMgfSBmcm9tICcuL3dlYnNvY2tldCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2VydmVyIChjb25maWd1cmVSb3V0ZXMsIHBvcnQsIGhvc3RuYW1lID0gbnVsbCwgYWxsb3dDb3JzID0gdHJ1ZSkge1xuICAvLyBjcmVhdGUgdGhlIGFjdHVhbCBodHRwIHNlcnZlclxuICBjb25zdCBhcHAgPSBleHByZXNzKCk7XG4gIGxldCBodHRwU2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcbiAgaHR0cFNlcnZlci5hZGRXZWJTb2NrZXRIYW5kbGVyID0gYWRkV2ViU29ja2V0SGFuZGxlcjtcbiAgaHR0cFNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyID0gcmVtb3ZlV2ViU29ja2V0SGFuZGxlcjtcbiAgaHR0cFNlcnZlci5yZW1vdmVBbGxXZWJTb2NrZXRIYW5kbGVycyA9IHJlbW92ZUFsbFdlYlNvY2tldEhhbmRsZXJzO1xuICBodHRwU2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzID0gZ2V0V2ViU29ja2V0SGFuZGxlcnM7XG5cbiAgLy8gaHR0cC5TZXJ2ZXIuY2xvc2UoKSBvbmx5IHN0b3BzIG5ldyBjb25uZWN0aW9ucywgYnV0IHdlIG5lZWQgdG8gd2FpdCB1bnRpbFxuICAvLyBhbGwgY29ubmVjdGlvbnMgYXJlIGNsb3NlZCBhbmQgdGhlIGBjbG9zZWAgZXZlbnQgaXMgZW1pdHRlZFxuICBjb25zdCBjbG9zZSA9IGh0dHBTZXJ2ZXIuY2xvc2UuYmluZChodHRwU2VydmVyKTtcbiAgaHR0cFNlcnZlci5jbG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaHR0cFNlcnZlci5vbignY2xvc2UnLCByZXNvbHZlKTtcbiAgICAgIGNsb3NlKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cFNlcnZlci5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFQUREUk5PVEFWQUlMJykge1xuICAgICAgICBsb2cuZXJyb3IoJ0NvdWxkIG5vdCBzdGFydCBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyLiAnICtcbiAgICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWQgYWRkcmVzcyBpcyBub3QgYXZhaWxhYmxlLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yKCdDb3VsZCBub3Qgc3RhcnQgUkVTVCBodHRwIGludGVyZmFjZSBsaXN0ZW5lci4gVGhlIHJlcXVlc3RlZCAnICtcbiAgICAgICAgICAgICAgICAgICdwb3J0IG1heSBhbHJlYWR5IGJlIGluIHVzZS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyAnICtcbiAgICAgICAgICAgICAgICAgICdvdGhlciBpbnN0YW5jZSBvZiB0aGlzIHNlcnZlciBydW5uaW5nIGFscmVhZHkuJyk7XG4gICAgICB9XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgICBodHRwU2VydmVyLm9uKCdjb25uZWN0aW9uJywgKHNvY2tldCkgPT4ge1xuICAgICAgc29ja2V0LnNldFRpbWVvdXQoNjAwICogMTAwMCk7IC8vIDEwIG1pbnV0ZSB0aW1lb3V0XG4gICAgICBzb2NrZXQub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICB9KTtcbiAgICBjb25maWd1cmVTZXJ2ZXIoYXBwLCBjb25maWd1cmVSb3V0ZXMsIGFsbG93Q29ycyk7XG5cbiAgICBsZXQgc2VydmVyQXJncyA9IFtwb3J0XTtcbiAgICBpZiAoaG9zdG5hbWUpIHtcbiAgICAgIC8vIElmIHRoZSBob3N0bmFtZSBpcyBvbWl0dGVkLCB0aGUgc2VydmVyIHdpbGwgYWNjZXB0XG4gICAgICAvLyBjb25uZWN0aW9ucyBvbiBhbnkgSVAgYWRkcmVzc1xuICAgICAgc2VydmVyQXJncy5wdXNoKGhvc3RuYW1lKTtcbiAgICB9XG4gICAgaHR0cFNlcnZlci5saXN0ZW4oLi4uc2VydmVyQXJncywgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaHR0cFNlcnZlcik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmVTZXJ2ZXIgKGFwcCwgY29uZmlndXJlUm91dGVzLCBhbGxvd0NvcnMgPSB0cnVlKSB7XG4gIGFwcC51c2UoZW5kTG9nRm9ybWF0dGVyKTtcblxuICAvLyBzZXQgdXAgc3RhdGljIGFzc2V0c1xuICBhcHAudXNlKGZhdmljb24ocGF0aC5yZXNvbHZlKFNUQVRJQ19ESVIsICdmYXZpY29uLmljbycpKSk7XG4gIGFwcC51c2UoZXhwcmVzcy5zdGF0aWMoU1RBVElDX0RJUikpO1xuXG4gIC8vIGNyYXNoIHJvdXRlcywgZm9yIHRlc3RpbmdcbiAgYXBwLnVzZSgnL3dkL2h1Yi9wcm9kdWNlX2Vycm9yJywgcHJvZHVjZUVycm9yKTtcbiAgYXBwLnVzZSgnL3dkL2h1Yi9jcmFzaCcsIHByb2R1Y2VDcmFzaCk7XG5cbiAgLy8gYWRkIG1pZGRsZXdhcmVzXG4gIGlmIChhbGxvd0NvcnMpIHtcbiAgICBhcHAudXNlKGFsbG93Q3Jvc3NEb21haW4pO1xuICB9IGVsc2Uge1xuICAgIGFwcC51c2UoYWxsb3dDcm9zc0RvbWFpbkFzeW5jRXhlY3V0ZSk7XG4gIH1cbiAgYXBwLnVzZShmaXhQeXRob25Db250ZW50VHlwZSk7XG4gIGFwcC51c2UoZGVmYXVsdFRvSlNPTkNvbnRlbnRUeXBlKTtcbiAgYXBwLnVzZShib2R5UGFyc2VyLnVybGVuY29kZWQoe2V4dGVuZGVkOiB0cnVlfSkpO1xuICBhcHAudXNlKG1ldGhvZE92ZXJyaWRlKCkpO1xuICBhcHAudXNlKGNhdGNoNFhYSGFuZGxlcik7XG4gIGFwcC51c2UoY2F0Y2hBbGxIYW5kbGVyKTtcblxuICAvLyBtYWtlIHN1cmUgYXBwaXVtIG5ldmVyIGZhaWxzIGJlY2F1c2Ugb2YgYSBmaWxlIHNpemUgdXBsb2FkIGxpbWl0XG4gIGFwcC51c2UoYm9keVBhcnNlci5qc29uKHtsaW1pdDogJzFnYid9KSk7XG5cbiAgLy8gc2V0IHVwIHN0YXJ0IGxvZ2dpbmcgKHdoaWNoIGRlcGVuZHMgb24gYm9keVBhcnNlciBkb2luZyBpdHMgdGhpbmcpXG4gIGFwcC51c2Uoc3RhcnRMb2dGb3JtYXR0ZXIpO1xuXG4gIGNvbmZpZ3VyZVJvdXRlcyhhcHApO1xuXG4gIC8vIGR5bmFtaWMgcm91dGVzIGZvciB0ZXN0aW5nLCBldGMuXG4gIGFwcC5hbGwoJy93ZWxjb21lJywgd2VsY29tZSk7XG4gIGFwcC5hbGwoJy90ZXN0L2d1aW5lYS1waWcnLCBndWluZWFQaWcpO1xuICBhcHAuYWxsKCcvdGVzdC9ndWluZWEtcGlnLXNjcm9sbGFibGUnLCBndWluZWFQaWdTY3JvbGxhYmxlKTtcbiAgYXBwLmFsbCgnL3Rlc3QvZ3VpbmVhLXBpZy1hcHAtYmFubmVyJywgZ3VpbmVhUGlnQXBwQmFubmVyKTtcblxuICAvLyBjYXRjaCB0aGlzIGxhc3QsIHNvIGFueXRoaW5nIHRoYXQgZmFsbHMgdGhyb3VnaCBpcyA0MDRlZFxuICBhcHAudXNlKGNhdGNoNDA0SGFuZGxlcik7XG59XG5cbmV4cG9ydCB7IHNlcnZlciwgY29uZmlndXJlU2VydmVyIH07XG4iXSwiZmlsZSI6ImxpYi9leHByZXNzL3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9