@appium/base-driver 8.1.1 → 8.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/build/lib/basedriver/capabilities.js +6 -6
  2. package/build/lib/basedriver/commands/find.js +1 -1
  3. package/build/lib/basedriver/commands/index.js +2 -4
  4. package/build/lib/basedriver/commands/log.js +1 -1
  5. package/build/lib/basedriver/commands/session.js +1 -1
  6. package/build/lib/basedriver/commands/timeout.js +1 -1
  7. package/build/lib/basedriver/desired-caps.js +1 -1
  8. package/build/lib/basedriver/device-settings.js +1 -1
  9. package/build/lib/basedriver/driver.js +5 -7
  10. package/build/lib/basedriver/helpers.js +5 -3
  11. package/build/lib/constants.js +1 -1
  12. package/build/lib/express/crash.js +1 -1
  13. package/build/lib/express/middleware.js +3 -3
  14. package/build/lib/express/server.js +1 -1
  15. package/build/lib/express/static.js +2 -2
  16. package/build/lib/express/websocket.js +3 -3
  17. package/build/lib/index.js +124 -0
  18. package/build/lib/jsonwp-status/status.js +1 -1
  19. package/build/lib/protocol/errors.js +6 -5
  20. package/build/lib/protocol/helpers.js +3 -3
  21. package/build/lib/protocol/index.js +31 -19
  22. package/build/lib/protocol/protocol.js +22 -11
  23. package/build/lib/protocol/routes.js +6 -12
  24. package/build/test/basedriver/capability-specs.js +10 -10
  25. package/build/test/basedriver/commands/event-specs.js +10 -10
  26. package/build/test/basedriver/driver-e2e-specs.js +3 -3
  27. package/build/test/basedriver/driver-e2e-tests.js +53 -256
  28. package/build/test/basedriver/driver-specs.js +3 -3
  29. package/build/test/basedriver/driver-tests.js +6 -6
  30. package/build/test/basedriver/helpers-e2e-specs.js +10 -4
  31. package/build/test/basedriver/index.js +4 -4
  32. package/build/test/basedriver/timeout-specs.js +7 -7
  33. package/build/test/basedriver/websockets-e2e-specs.js +11 -11
  34. package/build/test/express/server-e2e-specs.js +156 -0
  35. package/build/test/express/server-specs.js +151 -0
  36. package/build/test/express/static-specs.js +23 -0
  37. package/build/test/helpers.js +57 -0
  38. package/build/test/jsonwp-proxy/mock-request.js +93 -0
  39. package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
  40. package/build/test/jsonwp-proxy/proxy-e2e-specs.js +62 -0
  41. package/build/test/jsonwp-proxy/proxy-specs.js +299 -0
  42. package/build/test/jsonwp-proxy/url-specs.js +167 -0
  43. package/build/test/jsonwp-status/status-specs.js +36 -0
  44. package/build/test/protocol/errors-specs.js +388 -0
  45. package/build/test/protocol/fake-driver.js +168 -0
  46. package/build/test/protocol/helpers.js +27 -0
  47. package/build/test/protocol/protocol-e2e-specs.js +1242 -0
  48. package/build/test/protocol/routes-specs.js +82 -0
  49. package/build/test/protocol/validator-specs.js +151 -0
  50. package/index.d.ts +309 -44
  51. package/index.js +1 -62
  52. package/lib/basedriver/commands/index.js +0 -2
  53. package/lib/basedriver/driver.js +2 -22
  54. package/lib/basedriver/helpers.js +5 -4
  55. package/lib/index.js +62 -0
  56. package/lib/protocol/index.js +3 -1
  57. package/lib/protocol/protocol.js +18 -7
  58. package/lib/protocol/routes.js +1 -4
  59. package/package.json +8 -16
  60. package/test/basedriver/capability-specs.js +1 -1
  61. package/test/basedriver/commands/event-specs.js +1 -1
  62. package/test/basedriver/driver-e2e-specs.js +1 -1
  63. package/test/basedriver/driver-e2e-tests.js +66 -213
  64. package/test/basedriver/driver-specs.js +1 -1
  65. package/test/basedriver/driver-tests.js +3 -3
  66. package/test/basedriver/helpers-e2e-specs.js +9 -4
  67. package/test/basedriver/timeout-specs.js +1 -1
  68. package/test/basedriver/websockets-e2e-specs.js +7 -7
  69. package/build/index.js +0 -118
  70. package/build/lib/basedriver/commands/execute-child.js +0 -137
  71. package/build/lib/basedriver/commands/execute.js +0 -119
  72. package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
  73. package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
  74. package/lib/basedriver/commands/execute-child.js +0 -132
  75. package/lib/basedriver/commands/execute.js +0 -126
@@ -1,26 +1,26 @@
1
1
  import _ from 'lodash';
2
2
  import { server, routeConfiguringFunction,
3
- DEFAULT_WS_PATHNAME_PREFIX } from '../..';
3
+ DEFAULT_WS_PATHNAME_PREFIX } from '../../lib';
4
4
  import { FakeDriver } from '../protocol/fake-driver';
5
5
  import WebSocket from 'ws';
6
6
  import B from 'bluebird';
7
- import getPort from 'get-port';
7
+ import {TEST_HOST, getTestPort} from '../helpers';
8
8
 
9
9
 
10
10
  describe('Websockets (e2e)', function () {
11
11
  let baseServer;
12
12
  let driver;
13
+ let port;
13
14
  const SESSION_ID = 'foo';
14
15
  const WS_DATA = 'Hello';
15
- let PORT;
16
16
 
17
17
  before(async function () {
18
18
  driver = new FakeDriver();
19
19
  driver.sessionId = SESSION_ID;
20
- PORT = await getPort();
20
+ port = await getTestPort();
21
21
  baseServer = await server({
22
22
  routeConfiguringFunction: routeConfiguringFunction(driver),
23
- port: PORT,
23
+ port,
24
24
  });
25
25
  });
26
26
  after(async function () {
@@ -44,7 +44,7 @@ describe('Websockets (e2e)', function () {
44
44
  baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
45
45
  _.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
46
46
  await new B((resolve, reject) => {
47
- const client = new WebSocket(`ws://localhost:${PORT}${endpoint}`);
47
+ const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
48
48
  client.on('connection', (ws, req) => {
49
49
  ws.should.not.be.empty;
50
50
  req.connection.remoteAddress.should.not.be.empty;
@@ -61,7 +61,7 @@ describe('Websockets (e2e)', function () {
61
61
  (await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
62
62
  _.keys(await baseServer.getWebSocketHandlers()).length.should.eql(0);
63
63
  await new B((resolve, reject) => {
64
- const client = new WebSocket(`ws://localhost:${PORT}${endpoint}`);
64
+ const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
65
65
  client.on('message', (data) =>
66
66
  reject(new Error(`No websocket messages are expected after the handler ` +
67
67
  `has been removed. '${data}' is received instead. `))
package/build/index.js DELETED
@@ -1,118 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "DEFAULT_BASE_PATH", {
7
- enumerable: true,
8
- get: function () {
9
- return _constants.DEFAULT_BASE_PATH;
10
- }
11
- });
12
- Object.defineProperty(exports, "PROTOCOLS", {
13
- enumerable: true,
14
- get: function () {
15
- return _constants.PROTOCOLS;
16
- }
17
- });
18
- exports.DEFAULT_WS_PATHNAME_PREFIX = exports.validateCaps = exports.isStandardCap = exports.processCapabilities = exports.getSummaryByCode = exports.statusCodes = exports.JWProxy = exports.server = exports.STATIC_DIR = exports.normalizeBasePath = exports.isSessionCommand = exports.NO_SESSION_ID_COMMANDS = exports.routeToCommandName = exports.METHOD_MAP = exports.ALL_COMMANDS = exports.determineProtocol = exports.errorFromW3CJsonCode = exports.errorFromCode = exports.errorFromMJSONWPStatusCode = exports.isErrorType = exports.errors = exports.routeConfiguringFunction = exports.Protocol = exports.default = exports.BASEDRIVER_HANDLED_SETTINGS = exports.DeviceSettings = exports.BaseDriver = void 0;
19
-
20
- require("source-map-support/register");
21
-
22
- var driver = _interopRequireWildcard(require("./lib/basedriver/driver"));
23
-
24
- var deviceSettings = _interopRequireWildcard(require("./lib/basedriver/device-settings"));
25
-
26
- var protocol = _interopRequireWildcard(require("./lib/protocol"));
27
-
28
- var _constants = require("./lib/constants");
29
-
30
- var staticIndex = _interopRequireWildcard(require("./lib/express/static"));
31
-
32
- var serverIndex = _interopRequireWildcard(require("./lib/express/server"));
33
-
34
- var proxyIndex = _interopRequireWildcard(require("./lib/jsonwp-proxy/proxy"));
35
-
36
- var statusIndex = _interopRequireWildcard(require("./lib/jsonwp-status/status"));
37
-
38
- var caps = _interopRequireWildcard(require("./lib/basedriver/capabilities"));
39
-
40
- var ws = _interopRequireWildcard(require("./lib/express/websocket"));
41
-
42
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
-
44
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
-
46
- const {
47
- BaseDriver
48
- } = driver;
49
- exports.BaseDriver = BaseDriver;
50
- const {
51
- DeviceSettings,
52
- BASEDRIVER_HANDLED_SETTINGS
53
- } = deviceSettings;
54
- exports.BASEDRIVER_HANDLED_SETTINGS = BASEDRIVER_HANDLED_SETTINGS;
55
- exports.DeviceSettings = DeviceSettings;
56
- var _default = BaseDriver;
57
- exports.default = _default;
58
- const {
59
- Protocol,
60
- routeConfiguringFunction,
61
- errors,
62
- isErrorType,
63
- errorFromMJSONWPStatusCode,
64
- errorFromW3CJsonCode,
65
- ALL_COMMANDS,
66
- METHOD_MAP,
67
- routeToCommandName,
68
- NO_SESSION_ID_COMMANDS,
69
- isSessionCommand,
70
- normalizeBasePath,
71
- determineProtocol
72
- } = protocol;
73
- exports.determineProtocol = determineProtocol;
74
- exports.normalizeBasePath = normalizeBasePath;
75
- exports.isSessionCommand = isSessionCommand;
76
- exports.NO_SESSION_ID_COMMANDS = NO_SESSION_ID_COMMANDS;
77
- exports.routeToCommandName = routeToCommandName;
78
- exports.METHOD_MAP = METHOD_MAP;
79
- exports.ALL_COMMANDS = ALL_COMMANDS;
80
- exports.errorFromW3CJsonCode = errorFromW3CJsonCode;
81
- exports.errorFromCode = exports.errorFromMJSONWPStatusCode = errorFromMJSONWPStatusCode;
82
- exports.isErrorType = isErrorType;
83
- exports.errors = errors;
84
- exports.routeConfiguringFunction = routeConfiguringFunction;
85
- exports.Protocol = Protocol;
86
- const {
87
- STATIC_DIR
88
- } = staticIndex;
89
- exports.STATIC_DIR = STATIC_DIR;
90
- const {
91
- server
92
- } = serverIndex;
93
- exports.server = server;
94
- const {
95
- JWProxy
96
- } = proxyIndex;
97
- exports.JWProxy = JWProxy;
98
- const {
99
- codes: statusCodes,
100
- getSummaryByCode
101
- } = statusIndex;
102
- exports.getSummaryByCode = getSummaryByCode;
103
- exports.statusCodes = statusCodes;
104
- const {
105
- processCapabilities,
106
- isStandardCap,
107
- validateCaps
108
- } = caps;
109
- exports.validateCaps = validateCaps;
110
- exports.isStandardCap = isStandardCap;
111
- exports.processCapabilities = processCapabilities;
112
- const {
113
- DEFAULT_WS_PATHNAME_PREFIX
114
- } = ws;
115
- exports.DEFAULT_WS_PATHNAME_PREFIX = DEFAULT_WS_PATHNAME_PREFIX;require('source-map-support').install();
116
-
117
-
118
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkJhc2VEcml2ZXIiLCJkcml2ZXIiLCJEZXZpY2VTZXR0aW5ncyIsIkJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUyIsImRldmljZVNldHRpbmdzIiwiUHJvdG9jb2wiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJlcnJvcnMiLCJpc0Vycm9yVHlwZSIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJBTExfQ09NTUFORFMiLCJNRVRIT0RfTUFQIiwicm91dGVUb0NvbW1hbmROYW1lIiwiTk9fU0VTU0lPTl9JRF9DT01NQU5EUyIsImlzU2Vzc2lvbkNvbW1hbmQiLCJub3JtYWxpemVCYXNlUGF0aCIsImRldGVybWluZVByb3RvY29sIiwicHJvdG9jb2wiLCJTVEFUSUNfRElSIiwic3RhdGljSW5kZXgiLCJzZXJ2ZXIiLCJzZXJ2ZXJJbmRleCIsIkpXUHJveHkiLCJwcm94eUluZGV4IiwiY29kZXMiLCJzdGF0dXNDb2RlcyIsImdldFN1bW1hcnlCeUNvZGUiLCJzdGF0dXNJbmRleCIsInByb2Nlc3NDYXBhYmlsaXRpZXMiLCJpc1N0YW5kYXJkQ2FwIiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsIkRFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYIiwid3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQVVBOztBQUNBOztBQW9CQTs7QUFJQTs7QUFLQTs7QUFLQTs7QUFLQTs7QUFLQTs7Ozs7O0FBckRBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFpQkMsTUFBdkI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxjQUFGO0FBQWtCQyxFQUFBQTtBQUFsQixJQUFrREMsY0FBeEQ7OztlQUdlSixVOztBQVNmLE1BQU07QUFDSkssRUFBQUEsUUFESTtBQUNNQyxFQUFBQSx3QkFETjtBQUNnQ0MsRUFBQUEsTUFEaEM7QUFDd0NDLEVBQUFBLFdBRHhDO0FBRUpDLEVBQUFBLDBCQUZJO0FBRXdCQyxFQUFBQSxvQkFGeEI7QUFFOENDLEVBQUFBLFlBRjlDO0FBRTREQyxFQUFBQSxVQUY1RDtBQUdKQyxFQUFBQSxrQkFISTtBQUdnQkMsRUFBQUEsc0JBSGhCO0FBR3dDQyxFQUFBQSxnQkFIeEM7QUFJSkMsRUFBQUEsaUJBSkk7QUFJZUMsRUFBQUE7QUFKZixJQUtGQyxRQUxKOzs7Ozs7Ozs7Ozs7OztBQWlCQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBaUJDLFdBQXZCOztBQUlBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFhQyxXQUFuQjs7QUFLQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBY0MsVUFBcEI7O0FBS0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFLLEVBQUVDLFdBQVQ7QUFBc0JDLEVBQUFBO0FBQXRCLElBQTJDQyxXQUFqRDs7O0FBS0EsTUFBTTtBQUFFQyxFQUFBQSxtQkFBRjtBQUF1QkMsRUFBQUEsYUFBdkI7QUFBc0NDLEVBQUFBO0FBQXRDLElBQXVEQyxJQUE3RDs7OztBQUtBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFpQ0MsRUFBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG4vLyBCYXNlRHJpdmVyIGV4cG9ydHNcbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9iYXNlZHJpdmVyL2RyaXZlcic7XG5pbXBvcnQgKiBhcyBkZXZpY2VTZXR0aW5ncyBmcm9tICcuL2xpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncyc7XG5cbmNvbnN0IHsgQmFzZURyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBEZXZpY2VTZXR0aW5ncywgQkFTRURSSVZFUl9IQU5ETEVEX1NFVFRJTkdTIH0gPSBkZXZpY2VTZXR0aW5ncztcblxuZXhwb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MsIEJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUyB9O1xuZXhwb3J0IGRlZmF1bHQgQmFzZURyaXZlcjtcblxuXG4vLyBNSlNPTldQIGV4cG9ydHNcbmltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vbGliL3Byb3RvY29sJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFNcbn0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcblxuY29uc3Qge1xuICBQcm90b2NvbCwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBlcnJvcnMsIGlzRXJyb3JUeXBlLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsIEFMTF9DT01NQU5EUywgTUVUSE9EX01BUCxcbiAgcm91dGVUb0NvbW1hbmROYW1lLCBOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBpc1Nlc3Npb25Db21tYW5kLFxuICBub3JtYWxpemVCYXNlUGF0aCwgZGV0ZXJtaW5lUHJvdG9jb2xcbn0gPSBwcm90b2NvbDtcblxuZXhwb3J0IHtcbiAgUHJvdG9jb2wsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgUFJPVE9DT0xTLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsIGRldGVybWluZVByb3RvY29sLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSBhcyBlcnJvckZyb21Db2RlLCBBTExfQ09NTUFORFMsIE1FVEhPRF9NQVAsXG4gIHJvdXRlVG9Db21tYW5kTmFtZSwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUywgaXNTZXNzaW9uQ29tbWFuZCxcbiAgREVGQVVMVF9CQVNFX1BBVEgsIG5vcm1hbGl6ZUJhc2VQYXRoXG59O1xuXG4vLyBFeHByZXNzIGV4cG9ydHNcbmltcG9ydCAqIGFzIHN0YXRpY0luZGV4IGZyb20gJy4vbGliL2V4cHJlc3Mvc3RhdGljJztcbmNvbnN0IHsgU1RBVElDX0RJUiB9ID0gc3RhdGljSW5kZXg7XG5leHBvcnQgeyBTVEFUSUNfRElSIH07XG5cbmltcG9ydCAqIGFzIHNlcnZlckluZGV4IGZyb20gJy4vbGliL2V4cHJlc3Mvc2VydmVyJztcbmNvbnN0IHsgc2VydmVyIH0gPSBzZXJ2ZXJJbmRleDtcbmV4cG9ydCB7IHNlcnZlciB9O1xuXG4vLyBqc29ud3AtcHJveHkgZXhwb3J0c1xuaW1wb3J0ICogYXMgcHJveHlJbmRleCBmcm9tICcuL2xpYi9qc29ud3AtcHJveHkvcHJveHknO1xuY29uc3QgeyBKV1Byb3h5IH0gPSBwcm94eUluZGV4O1xuZXhwb3J0IHsgSldQcm94eSB9O1xuXG4vLyBqc29ud3Atc3RhdHVzIGV4cG9ydHNcbmltcG9ydCAqIGFzIHN0YXR1c0luZGV4IGZyb20gJy4vbGliL2pzb253cC1zdGF0dXMvc3RhdHVzJztcbmNvbnN0IHsgY29kZXM6IHN0YXR1c0NvZGVzLCBnZXRTdW1tYXJ5QnlDb2RlIH0gPSBzdGF0dXNJbmRleDtcbmV4cG9ydCB7IHN0YXR1c0NvZGVzLCBnZXRTdW1tYXJ5QnlDb2RlIH07XG5cbi8vIFczQyBjYXBhYmlsaXRpZXMgcGFyc2VyXG5pbXBvcnQgKiBhcyBjYXBzIGZyb20gJy4vbGliL2Jhc2Vkcml2ZXIvY2FwYWJpbGl0aWVzJztcbmNvbnN0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgaXNTdGFuZGFyZENhcCwgdmFsaWRhdGVDYXBzIH0gPSBjYXBzO1xuZXhwb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgaXNTdGFuZGFyZENhcCwgdmFsaWRhdGVDYXBzIH07XG5cbi8vIFdlYiBzb2NrZXQgaGVscGVyc1xuaW1wb3J0ICogYXMgd3MgZnJvbSAnLi9saWIvZXhwcmVzcy93ZWJzb2NrZXQnO1xuY29uc3QgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCB9ID0gd3M7XG5leHBvcnQgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCB9OyJdLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4ifQ==
@@ -1,137 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lodash = _interopRequireDefault(require("lodash"));
8
-
9
- var _bluebird = _interopRequireDefault(require("bluebird"));
10
-
11
- var _vm = _interopRequireDefault(require("vm"));
12
-
13
- var _logger = _interopRequireDefault(require("../logger"));
14
-
15
- var _webdriverio = require("webdriverio");
16
-
17
- const W3C_ELEMENT_KEY = 'element-6066-11e4-a52e-4f735466cecf';
18
- const MJSONWP_ELEMENT_KEY = 'ELEMENT';
19
-
20
- async function runScript(driverOpts, script, timeout) {
21
- if (!_lodash.default.isNumber(timeout)) {
22
- throw new Error('Timeout parameter must be a number');
23
- }
24
-
25
- const logLevels = ['error', 'warn', 'log'];
26
- const logs = {};
27
- const consoleFns = {};
28
-
29
- for (const level of logLevels) {
30
- logs[level] = [];
31
-
32
- consoleFns[level] = (...logMsgs) => logs[level].push(...logMsgs);
33
- }
34
-
35
- const driver = (0, _webdriverio.attach)(driverOpts);
36
- const fullScript = buildScript(script);
37
-
38
- const vmCtx = _vm.default.runInNewContext(fullScript, {}, {
39
- timeout
40
- });
41
-
42
- _logger.default.info('Running driver script in Node vm');
43
-
44
- let result = await vmCtx(driver, consoleFns, _bluebird.default);
45
-
46
- _logger.default.info('Ensuring driver script result is appropriate type for return');
47
-
48
- result = coerceScriptResult(result);
49
- return {
50
- result,
51
- logs
52
- };
53
- }
54
-
55
- function buildScript(script) {
56
- return `(async function execute (driver, console, Promise) {
57
- ${script}
58
- })`;
59
- }
60
-
61
- function coerceScriptResult(obj) {
62
- try {
63
- obj = JSON.parse(JSON.stringify(obj));
64
- } catch (e) {
65
- _logger.default.warn('Could not convert executeDriverScript to safe response!' + `Result was: ${obj}. Will make it null`);
66
-
67
- return null;
68
- }
69
-
70
- let res;
71
-
72
- if (_lodash.default.isPlainObject(obj)) {
73
- res = {};
74
-
75
- if (obj[MJSONWP_ELEMENT_KEY] || obj[W3C_ELEMENT_KEY]) {
76
- if (obj[MJSONWP_ELEMENT_KEY]) {
77
- res[MJSONWP_ELEMENT_KEY] = obj[MJSONWP_ELEMENT_KEY];
78
- }
79
-
80
- if (obj[W3C_ELEMENT_KEY]) {
81
- res[W3C_ELEMENT_KEY] = obj[W3C_ELEMENT_KEY];
82
- }
83
-
84
- return res;
85
- }
86
-
87
- for (const key of Object.keys(obj)) {
88
- res[key] = coerceScriptResult(obj[key]);
89
- }
90
-
91
- return res;
92
- }
93
-
94
- if (_lodash.default.isArray(obj)) {
95
- return obj.map(coerceScriptResult);
96
- }
97
-
98
- return obj;
99
- }
100
-
101
- async function main(driverOpts, script, timeout) {
102
- let res;
103
-
104
- try {
105
- res = {
106
- success: await runScript(driverOpts, script, timeout)
107
- };
108
- } catch (error) {
109
- res = {
110
- error: {
111
- message: error.message,
112
- stack: error.stack
113
- }
114
- };
115
- }
116
-
117
- await _bluebird.default.promisify(process.send, {
118
- context: process
119
- })(res);
120
- }
121
-
122
- if (require.main === module) {
123
- _logger.default.info('Running driver execution in child process');
124
-
125
- process.on('message', ({
126
- driverOpts,
127
- script,
128
- timeout
129
- }) => {
130
- _logger.default.info('Parameters received from parent process');
131
-
132
- main(driverOpts, script, timeout);
133
- });
134
- }require('source-map-support').install();
135
-
136
-
137
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2V4ZWN1dGUtY2hpbGQuanMiXSwibmFtZXMiOlsiVzNDX0VMRU1FTlRfS0VZIiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsInJ1blNjcmlwdCIsImRyaXZlck9wdHMiLCJzY3JpcHQiLCJ0aW1lb3V0IiwiXyIsImlzTnVtYmVyIiwiRXJyb3IiLCJsb2dMZXZlbHMiLCJsb2dzIiwiY29uc29sZUZucyIsImxldmVsIiwibG9nTXNncyIsInB1c2giLCJkcml2ZXIiLCJmdWxsU2NyaXB0IiwiYnVpbGRTY3JpcHQiLCJ2bUN0eCIsInZtIiwicnVuSW5OZXdDb250ZXh0IiwibG9nIiwiaW5mbyIsInJlc3VsdCIsIkIiLCJjb2VyY2VTY3JpcHRSZXN1bHQiLCJvYmoiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJlIiwid2FybiIsInJlcyIsImlzUGxhaW5PYmplY3QiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiaXNBcnJheSIsIm1hcCIsIm1haW4iLCJzdWNjZXNzIiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJwcm9taXNpZnkiLCJwcm9jZXNzIiwic2VuZCIsImNvbnRleHQiLCJyZXF1aXJlIiwibW9kdWxlIiwib24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLGVBQWUsR0FBRyxxQ0FBeEI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxTQUE1Qjs7QUFFQSxlQUFlQyxTQUFmLENBQTBCQyxVQUExQixFQUFzQ0MsTUFBdEMsRUFBOENDLE9BQTlDLEVBQXVEO0FBQ3JELE1BQUksQ0FBQ0MsZ0JBQUVDLFFBQUYsQ0FBV0YsT0FBWCxDQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSUcsS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRDs7QUFHRCxRQUFNQyxTQUFTLEdBQUcsQ0FBQyxPQUFELEVBQVUsTUFBVixFQUFrQixLQUFsQixDQUFsQjtBQUNBLFFBQU1DLElB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QUFDUSxNQUFBQSxPQUFPLEVBQUUsTUFBTXRDLFNBQVMsQ0FBQ0MsVUFBRCxFQUFhQyxNQUFiLEVBQXFCQyxPQUFyQjtBQUF6QixLQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9vQyxLQUFQLEVBQWM7QUFDZFQsSUFBQUEsR0FBRyxHQUFHO0FBQUNTLE1BQUFBLEtBQUssRUFBRTtBQUFDQyxRQUFBQSxPQUFPLEVBQUVELEtBQUssQ0FBQ0MsT0FBaEI7QUFBeUJDLFFBQUFBLEtBQUssRUFBRUYsS0FBSyxDQUFDRTtBQUF0QztBQUFSLEtBQU47QUFDRDs7QUFDRCxRQUFNbkIsa0JBQUVvQixTQUFGLENBQVlDLE9BQU8sQ0FBQ0MsSUFBcEIsRUFBMEI7QUFBQ0MsSUFBQUEsT0FBTyxFQUFFRjtBQUFWLEdBQTFCLEVBQThDYixHQUE5QyxDQUFOO0FBQ0Q7O0FBRUQsSUFBSWdCLE9BQU8sQ0FBQ1QsSUFBUixLQUFpQlUsTUFBckIsRUFBNkI7QUFDM0I1QixrQkFBSUMsSUFBSixDQUFTLDJDQUFUOztBQUNBdUIsRUFBQUEsT0FBTyxDQUFDSyxFQUFSLENBQVcsU0FBWCxFQUFzQixDQUFDO0FBQUMvQyxJQUFBQSxVQUFEO0FBQWFDLElBQUFBLE1BQWI7QUFBcUJDLElBQUFBO0FBQXJCLEdBQUQsS0FBbUM7QUFDdkRnQixvQkFBSUMsSUFBSixDQUFTLHlDQUFUOztBQUNBaUIsSUFBQUEsSUFBSSxDQUFDcEMsVUFBRCxFQUFhQyxNQUFiLEVBQXFCQyxPQUFyQixDQUFKO0FBQ0QsR0FIRDtBQUlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB2bSBmcm9tICd2bSc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBhdHRhY2ggfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbi8vIGR1cGxpY2F0ZSBkZWZpbmluZyB0aGVzZSBrZXlzIGhlcmUgc28gd2UgZG9uJ3QgbmVlZCB0byByZS1sb2FkIGEgaHVnZSBhcHBpdW1cbi8vIGRlcGVuZGVuY3kgdHJlZSBpbnRvIG1lbW9yeSBqdXN0IHRvIHJ1biBhIHdkaW8gc2NyaXB0XG5jb25zdCBXM0NfRUxFTUVOVF9LRVkgPSAnZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YnO1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcblxuYXN5bmMgZnVuY3Rpb24gcnVuU2NyaXB0IChkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXQpIHtcbiAgaWYgKCFfLmlzTnVtYmVyKHRpbWVvdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lb3V0IHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICAvLyBzZXQgdXAgZmFrZSBsb2dnZXJcbiAgY29uc3QgbG9nTGV2ZWxzID0gWydlcnJvcicsICd3YXJuJywgJ2xvZyddO1xuICBjb25zdCBsb2dzID0ge307XG4gIGNvbnN0IGNvbnNvbGVGbnMgPSB7fTtcbiAgZm9yIChjb25zdCBsZXZlbCBvZiBsb2dMZXZlbHMpIHtcbiAgICBsb2dzW2xldmVsXSA9IFtdO1xuICAgIGNvbnNvbGVGbnNbbGV2ZWxdID0gKC4uLmxvZ01zZ3MpID0+IGxvZ3NbbGV2ZWxdLnB1c2goLi4ubG9nTXNncyk7XG4gIH1cblxuICBjb25zdCBkcml2ZXIgPSBhdHRhY2goZHJpdmVyT3B0cyk7XG5cbiAgY29uc3QgZnVsbFNjcmlwdCA9IGJ1aWxkU2NyaXB0KHNjcmlwdCk7XG4gIC8vIHRoZSB0aW1lb3V0IGhlcmUgd2lsbCBub3QgbWF0dGVyIHJlYWxseSwgYnV0IHNldCBpdCBhbnl3YXkgdG8gYmUgb24gdGhlXG4gIC8vIHNhZmUgc2lkZVxuICBjb25zdCB2bUN0eCA9IHZtLnJ1bkluTmV3Q29udGV4dChmdWxsU2NyaXB0LCB7fSwge3RpbWVvdXR9KTtcblxuICAvLyBydW4gdGhlIGRyaXZlciBzY3JpcHQsIGdpdmluZyB1c2VyIGFjY2VzcyB0byB0aGUgZHJpdmVyIG9iamVjdCwgYSBmYWtlXG4gIC8vIGNvbnNvbGUgbG9nZ2VyLCBhbmQgYSBwcm9taXNlIGxpYnJhcnlcbiAgbG9nLmluZm8oJ1J1bm5pbmcgZHJpdmVyIHNjcmlwdCBpbiBOb2RlIHZtJyk7XG4gIGxldCByZXN1bHQgPSBhd2FpdCB2bUN0eChkcml2ZXIsIGNvbnNvbGVGbnMsIEIpO1xuXG4gIGxvZy5pbmZvKCdFbnN1cmluZyBkcml2ZXIgc2NyaXB0IHJlc3VsdCBpcyBhcHByb3ByaWF0ZSB0eXBlIGZvciByZXR1cm4nKTtcbiAgcmVzdWx0ID0gY29lcmNlU2NyaXB0UmVzdWx0KHJlc3VsdCk7XG4gIHJldHVybiB7cmVzdWx0LCBsb2dzfTtcbn1cblxuLyoqXG4gKiBFbWJlZCBhIHVzZXItZ2VuZXJhdGVkIHNjcmlwdCBpbnNpZGUgYSBtZXRob2Qgd2hpY2ggdGFrZXMgb25seSB0aGVcbiAqIHByZWRldGVybWluZWQgb2JqZWN0cyB3ZSBzcGVjaWZ5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdCAtIHRoZSBqYXZhc2NyaXB0IHRvIGV4ZWN1dGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IC0gdGhlIGZ1bGwgc2NyaXB0IHRvIGV4ZWN1dGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHQgKHNjcmlwdCkge1xuICByZXR1cm4gYChhc3luYyBmdW5jdGlvbiBleGVjdXRlIChkcml2ZXIsIGNvbnNvbGUsIFByb21pc2UpIHtcbiAgICAke3NjcmlwdH1cbiAgfSlgO1xufVxuXG4vKipcbiAqIFdlIGNhbiBnZXQgYW55IG1hbm5lciBvZiBjcmF6eSB0aGluZyBiYWNrIGZyb20gYSB2bSBleGVjdXRpbmcgdW50cnVzdGVkXG4gKiBjb2RlLiBXZSBtaWdodCBhbHNvIGdldCBXZWJkcml2ZXJJTyBvYmplY3RzIHRoYXQgYXJlbid0IHN1aXRhYmxlIGZvciBKU09OXG4gKiByZXNwb25zZS4gU28gbWFrZSBzdXJlIHdlIGNvbnZlcnQgdGhlIHRoaW5ncyB3ZSBrbm93IGFib3V0IHRvIHRoZWlyXG4gKiBhcHByb3ByaWF0ZSByZXNwb25zZSBmb3JtYXQsIGFuZCBzcXVhc2ggb3RoZXIgd2VpcmQgdGhpbmdzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBvYmplY3QgdG8gY29udmVydCBhbmQgc2FuaXRpemVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gc2FmZWx5IGNvbnZlcnRlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29lcmNlU2NyaXB0UmVzdWx0IChvYmopIHtcbiAgLy8gZmlyc3QgZW5zdXJlIG9iaiBpcyBvZiBhIHR5cGUgdGhhdCBjYW4gYmUgSlNPTiBlbmNvZGVkIHNhZmVseS4gVGhpcyB3aWxsXG4gIC8vIGdldCByaWQgb2YgY3VzdG9tIG9iamVjdHMsIGZ1bmN0aW9ucywgZXRjLi4uIGFuZCB0dXJuIHRoZW0gaW50byBQT0pPc1xuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cud2FybignQ291bGQgbm90IGNvbnZlcnQgZXhlY3V0ZURyaXZlclNjcmlwdCB0byBzYWZlIHJlc3BvbnNlIScgK1xuICAgICAgICAgICAgIGBSZXN1bHQgd2FzOiAke29ian0uIFdpbGwgbWFrZSBpdCBudWxsYCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgcmVzO1xuXG4gIC8vIG5vdyB3ZSBiZWdpbiBvdXIgcmVjdXJzaXZlIGNhc2Ugb3B0aW9uc1xuICBpZiAoXy5pc1BsYWluT2JqZWN0KG9iaikpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFuIG9iamVjdCwgaXQncyBlaXRoZXIgYW4gZWxlbWVudCBvYmplY3Qgb3Igc29tZXRoaW5nIGVsc2VcbiAgICAvLyB3ZWJkcml2ZXJpbyBoYXMgbm8gbW9uYWRpYyBvYmplY3QgdHlwZXMgb3RoZXIgdGhhbiBlbGVtZW50IGFuZCBkcml2ZXIsXG4gICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cgc3BlY2lhbCBjYXNpbmcgcmV0dXJuIG9mIGRyaXZlclxuICAgIHJlcyA9IHt9O1xuXG4gICAgaWYgKG9ialtNSlNPTldQX0VMRU1FTlRfS0VZXSB8fCBvYmpbVzNDX0VMRU1FTlRfS0VZXSkge1xuICAgICAgLy8gaWYgaXQncyBhbiBlbGVtZW50IG9iamVjdCwgY2xlYXIgb3V0IGFueXRoaW5nIHRoYXQncyBub3QgdGhlIGtleSwgYW5kXG4gICAgICAvLyB0aGVuIHJldHVybiB0aGUgb2JqZWN0XG4gICAgICBpZiAob2JqW01KU09OV1BfRUxFTUVOVF9LRVldKSB7XG4gICAgICAgIHJlc1tNSlNPTldQX0VMRU1FTlRfS0VZXSA9IG9ialtNSlNPTldQX0VMRU1FTlRfS0VZXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9ialtXM0NfRUxFTUVOVF9LRVldKSB7XG4gICAgICAgIHJlc1tXM0NfRUxFTUVOVF9LRVldID0gb2JqW1czQ19FTEVNRU5UX0tFWV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSwgcmVjdXJzZSBpbnRvIHRoZSBvYmplY3RcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICByZXNba2V5XSA9IGNvZXJjZVNjcmlwdFJlc3VsdChvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBpbiB0aGUgY2FlIG9mIGFuIGFycmF5LCBqdXN0IHJlY3Vyc2UgaW50byB0aGUgaXRlbXNcbiAgaWYgKF8uaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoY29lcmNlU2NyaXB0UmVzdWx0KTtcbiAgfVxuXG4gIC8vIGJhc2UgY2FzZSwgaWYgaXQncyBub3QgYW4gb2JqZWN0IG9yIGFycmF5LCByZXR1cm4gc3RyYWlnaHRhd2F5XG4gIHJldHVybiBvYmo7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKGRyaXZlck9wdHMsIHNjcmlwdCwgdGltZW91dCkge1xuICBsZXQgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IHtzdWNjZXNzOiBhd2FpdCBydW5TY3JpcHQoZHJpdmVyT3B0cywgc2NyaXB0LCB0aW1lb3V0KX07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzID0ge2Vycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07XG4gIH1cbiAgYXdhaXQgQi5wcm9taXNpZnkocHJvY2Vzcy5zZW5kLCB7Y29udGV4dDogcHJvY2Vzc30pKHJlcyk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBsb2cuaW5mbygnUnVubmluZyBkcml2ZXIgZXhlY3V0aW9uIGluIGNoaWxkIHByb2Nlc3MnKTtcbiAgcHJvY2Vzcy5vbignbWVzc2FnZScsICh7ZHJpdmVyT3B0cywgc2NyaXB0LCB0aW1lb3V0fSkgPT4ge1xuICAgIGxvZy5pbmZvKCdQYXJhbWV0ZXJzIHJlY2VpdmVkIGZyb20gcGFyZW50IHByb2Nlc3MnKTtcbiAgICBtYWluKGRyaXZlck9wdHMsIHNjcmlwdCwgdGltZW91dCk7XG4gIH0pO1xufVxuIl0sImZpbGUiOiJsaWIvYmFzZWRyaXZlci9jb21tYW5kcy9leGVjdXRlLWNoaWxkLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uIn0=
@@ -1,119 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _path = _interopRequireDefault(require("path"));
15
-
16
- var _child_process = _interopRequireDefault(require("child_process"));
17
-
18
- var _logger = _interopRequireDefault(require("../logger"));
19
-
20
- var _bluebird = _interopRequireDefault(require("bluebird"));
21
-
22
- const FEAT_FLAG = 'execute_driver_script';
23
- const DEFAULT_SCRIPT_TIMEOUT = 1000 * 60 * 60;
24
- const SCRIPT_TYPE_WDIO = 'webdriverio';
25
- let commands = {};
26
-
27
- commands.executeDriverScript = async function (script, scriptType = 'webdriverio', timeout = DEFAULT_SCRIPT_TIMEOUT) {
28
- if (!this.isFeatureEnabled(FEAT_FLAG)) {
29
- throw new Error(`Execute driver script functionality is not available ` + `unless server is started with --allow-insecure including ` + `the '${FEAT_FLAG}' flag, e.g., --allow-insecure=${FEAT_FLAG}`);
30
- }
31
-
32
- if (scriptType !== SCRIPT_TYPE_WDIO) {
33
- throw new Error(`Only the '${SCRIPT_TYPE_WDIO}' script type is currently supported`);
34
- }
35
-
36
- if (!this.opts.address || !this.opts.port) {
37
- throw new Error('Address or port of running server were not defined; this ' + 'is required. This is probably a programming error in the driver');
38
- }
39
-
40
- if (!_lodash.default.isNumber(timeout)) {
41
- throw new Error('Timeout parameter must be a number');
42
- }
43
-
44
- const driverOpts = {
45
- sessionId: this.sessionId,
46
- protocol: 'http',
47
- hostname: this.opts.address,
48
- port: this.opts.port,
49
- path: this.basePath,
50
- isW3C: this.isW3CProtocol(),
51
- isMobile: true,
52
- capabilities: this.caps
53
- };
54
-
55
- _logger.default.info(`Constructed webdriverio driver options; W3C mode is ${driverOpts.isW3C ? 'on' : 'off'}`);
56
-
57
- const childScript = _path.default.join(__dirname, 'execute-child.js');
58
-
59
- _logger.default.info(`Forking process to run webdriver script as child using ${childScript}`);
60
-
61
- const scriptProc = _child_process.default.fork(childScript);
62
-
63
- let timeoutCanceled = false;
64
-
65
- try {
66
- const timeoutStart = Date.now();
67
-
68
- const waitForResult = async function () {
69
- const resPromise = new _bluebird.default(res => {
70
- scriptProc.on('message', res);
71
- });
72
- const res = await resPromise;
73
-
74
- _logger.default.info('Received execute driver script result from child process, shutting it down');
75
-
76
- if (res.error) {
77
- throw new Error(res.error.message);
78
- }
79
-
80
- return res.success;
81
- };
82
-
83
- const waitForTimeout = async function () {
84
- while (!timeoutCanceled && Date.now() - timeoutStart < timeout) {
85
- await _bluebird.default.delay(500);
86
- }
87
-
88
- if (timeoutCanceled) {
89
- return;
90
- }
91
-
92
- throw new Error(`Execute driver script timed out after ${timeout}ms. ` + `You can adjust this with the 'timeout' parameter.`);
93
- };
94
-
95
- _logger.default.info('Sending driver and script data to child');
96
-
97
- scriptProc.send({
98
- driverOpts,
99
- script,
100
- timeout
101
- });
102
- return await _bluebird.default.race([waitForResult(), waitForTimeout()]);
103
- } catch (err) {
104
- throw new Error(`Could not execute driver script. Original error was: ${err}`);
105
- } finally {
106
- timeoutCanceled = true;
107
-
108
- _logger.default.info('Disconnecting from and killing driver script child proc');
109
-
110
- scriptProc.disconnect();
111
- scriptProc.kill();
112
- }
113
- };
114
-
115
- var _default = commands;
116
- exports.default = _default;require('source-map-support').install();
117
-
118
-
119
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwibmFtZXMiOlsiRkVBVF9GTEFHIiwiREVGQVVMVF9TQ1JJUFRfVElNRU9VVCIsIlNDUklQVF9UWVBFX1dESU8iLCJjb21tYW5kcyIsImV4ZWN1dGVEcml2ZXJTY3JpcHQiLCJzY3JpcHQiLCJzY3JpcHRUeXBlIiwidGltZW91dCIsImlzRmVhdHVyZUVuYWJsZWQiLCJFcnJvciIsIm9wdHMiLCJhZGRyZXNzIiwicG9ydCIsIl8iLCJpc051bWJlciIsImRyaXZlck9wdHMiLCJzZXNzaW9uSWQiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwicGF0aCIsImJhc2VQYXRoIiwiaXNXM0MiLCJpc1czQ1Byb3RvY29sIiwiaXNNb2JpbGUiLCJjYXBhYmlsaXRpZXMiLCJjYXBzIiwibG9nIiwiaW5mbyIsImNoaWxkU2NyaXB0Iiwiam9pbiIsIl9fZGlybmFtZSIsInNjcmlwdFByb2MiLCJjcCIsImZvcmsiLCJ0aW1lb3V0Q2FuY2VsZWQiLCJ0aW1lb3V0U3RhcnQiLCJEYXRlIiwibm93Iiwid2FpdEZvclJlc3VsdCIsInJlc1Byb21pc2UiLCJCIiwicmVzIiwib24iLCJlcnJvciIsIm1lc3NhZ2UiLCJzdWNjZXNzIiwid2FpdEZvclRpbWVvdXQiLCJkZWxheSIsInNlbmQiLCJyYWNlIiwiZXJyIiwiZGlzY29ubmVjdCIsImtpbGwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsU0FBUyxHQUFHLHVCQUFsQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLE9BQU8sRUFBUCxHQUFZLEVBQTNDO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsYUFBekI7QUFHQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7QUFjQUEsUUFBUSxDQUFDQyxtQkFBVCxHQUErQixnQkFBZ0JDLE1BQWhCLEVBQXdCQyxVQUFVLEdBQUcsYUFBckMsRUFDN0JDLE9BQU8sR0FBR04s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QUFBQSxNQUFiO0FBQXFCRSxNQUFBQTtBQUFyQixLQUFoQjtBQUdBLFdBQU8sTUFBTWlDLGtCQUFFUyxJQUFGLENBQU8sQ0FBQ1gsYUFBYSxFQUFkLEVBQWtCUSxjQUFjLEVBQWhDLENBQVAsQ0FBYjtBQUNELEdBMUNELENBMENFLE9BQU9JLEdBQVAsRUFBWTtBQUNaLFVBQU0sSUFBSXpDLEtBQUosQ0FBVyx3REFBdUR5QyxHQUFJLEVBQXRFLENBQU47QUFDRCxHQTVDRCxTQTRDVTtBQUdSaEIsSUFBQUEsZUFBZSxHQUFHLElBQWxCOztBQUVBUixvQkFBSUMsSUFBSixDQUFTLHlEQUFUOztBQUNBSSxJQUFBQSxVQUFVLENBQUNvQixVQUFYO0FBQ0FwQixJQUFBQSxVQUFVLENBQUNxQixJQUFYO0FBQ0Q7QUFDRixDQWpHRDs7ZUFvR2VqRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBGRUFUX0ZMQUcgPSAnZXhlY3V0ZV9kcml2ZXJfc2NyaXB0JztcbmNvbnN0IERFRkFVTFRfU0NSSVBUX1RJTUVPVVQgPSAxMDAwICogNjAgKiA2MDsgLy8gZGVmYXVsdCB0byAxIGhvdXIgdGltZW91dFxuY29uc3QgU0NSSVBUX1RZUEVfV0RJTyA9ICd3ZWJkcml2ZXJpbyc7XG4vLyBUT0RPIGFkZCB3ZCBzY3JpcHQgdHlwZSBhdCBzb21lIHBvaW50XG5cbmxldCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHRha2VzIGEgc3RyaW5nIHdoaWNoIGlzIGV4ZWN1dGVkIGFzIGphdmFzY3JpcHQgaW4gdGhlIGNvbnRleHQgb2ZcbiAqIGEgbmV3IG5vZGVqcyBWTSwgYW5kIHdoaWNoIGhhcyBhdmFpbGFibGUgYSB3ZWJkcml2ZXJpbyBkcml2ZXIgb2JqZWN0LCBoYXZpbmdcbiAqIGFscmVhZHkgYmVlbiBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc2Vzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IC0gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRyaXZlciBzY3JpcHQgdG8gcnVuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdFR5cGU9J3dlYmRyaXZlcmlvJ10gLSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHNjcmlwdFxuICogbGlicmFyeSAoY3VycmVudGx5IG9ubHkgd2ViZHJpdmVyaW8gaXMgc3VwcG9ydGVkKVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gYSBKU09OaWZpYWJsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXR1cm4gdmFsdWUgb2ZcbiAqIHRoZSBzY3JpcHRcbiAqL1xuY29tbWFuZHMuZXhlY3V0ZURyaXZlclNjcmlwdCA9IGFzeW5jIGZ1bmN0aW9uIChzY3JpcHQsIHNjcmlwdFR5cGUgPSAnd2ViZHJpdmVyaW8nLFxuICB0aW1lb3V0ID0gREVGQVVMVF9TQ1JJUFRfVElNRU9VVCkge1xuXG4gIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKEZFQVRfRkxBRykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4ZWN1dGUgZHJpdmVyIHNjcmlwdCBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUgYCArXG4gICAgICAgICAgICAgICAgICAgIGB1bmxlc3Mgc2VydmVyIGlzIHN0YXJ0ZWQgd2l0aCAtLWFsbG93LWluc2VjdXJlIGluY2x1ZGluZyBgICtcbiAgICAgICAgICAgICAgICAgICAgYHRoZSAnJHtGRUFUX0ZMQUd9JyBmbGFnLCBlLmcuLCAtLWFsbG93LWluc2VjdXJlPSR7RkVBVF9GTEFHfWApO1xuICB9XG5cbiAgaWYgKHNjcmlwdFR5cGUgIT09IFNDUklQVF9UWVBFX1dESU8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgdGhlICcke1NDUklQVF9UWVBFX1dESU99JyBzY3JpcHQgdHlwZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkYCk7XG4gIH1cblxuICBpZiAoIXRoaXMub3B0cy5hZGRyZXNzIHx8ICF0aGlzLm9wdHMucG9ydCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWRkcmVzcyBvciBwb3J0IG9mIHJ1bm5pbmcgc2VydmVyIHdlcmUgbm90IGRlZmluZWQ7IHRoaXMgJyArXG4gICAgICAgICAgICAgICAgICAgICdpcyByZXF1aXJlZC4gVGhpcyBpcyBwcm9iYWJseSBhIHByb2dyYW1taW5nIGVycm9yIGluIHRoZSBkcml2ZXInKTtcbiAgfVxuXG4gIGlmICghXy5pc051bWJlcih0aW1lb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGltZW91dCBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZHJpdmVyT3B0cyA9IHtcbiAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgIHByb3RvY29sOiAnaHR0cCcsIC8vIEFwcGl1bSB3b24ndCBldmVyIGJlIGJlaGluZCBzc2wgbG9jYWxseVxuICAgIGhvc3RuYW1lOiB0aGlzLm9wdHMuYWRkcmVzcyxcbiAgICBwb3J0OiB0aGlzLm9wdHMucG9ydCxcbiAgICBwYXRoOiB0aGlzLmJhc2VQYXRoLFxuICAgIGlzVzNDOiB0aGlzLmlzVzNDUHJvdG9jb2woKSxcbiAgICBpc01vYmlsZTogdHJ1ZSxcbiAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2Fwc1xuICB9O1xuICBsb2cuaW5mbyhgQ29uc3RydWN0ZWQgd2ViZHJpdmVyaW8gZHJpdmVyIG9wdGlvbnM7IFczQyBtb2RlIGlzICR7ZHJpdmVyT3B0cy5pc1czQyA/ICdvbicgOiAnb2ZmJ31gKTtcblxuXG4gIC8vIGZvcmsgdGhlIGV4ZWN1dGlvbiBzY3JpcHQgYXMgYSBjaGlsZCBwcm9jZXNzXG4gIGNvbnN0IGNoaWxkU2NyaXB0ID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2V4ZWN1dGUtY2hpbGQuanMnKTtcbiAgbG9nLmluZm8oYEZvcmtpbmcgcHJvY2VzcyB0byBydW4gd2ViZHJpdmVyIHNjcmlwdCBhcyBjaGlsZCB1c2luZyAke2NoaWxkU2NyaXB0fWApO1xuICBjb25zdCBzY3JpcHRQcm9jID0gY3AuZm9yayhjaGlsZFNjcmlwdCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlIGhhdmUgY2FuY2VsZWQgdGhlIHNjcmlwdCB0aW1lb3V0LCBzbyB3ZSBjYW4gc3RvcFxuICAvLyB3YWl0aW5nIGZvciBpdCBhbmQgYWxsb3cgdGhpcyBwcm9jZXNzIHRvIGZpbmlzaCBncmFjZWZ1bGx5XG4gIGxldCB0aW1lb3V0Q2FuY2VsZWQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRpbWVvdXRTdGFydCA9IERhdGUubm93KCk7XG5cbiAgICAvLyBwcm9taXNlIHRoYXQgZGVhbHMgd2l0aCB0aGUgcmVzdWx0IGZyb20gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICBjb25zdCB3YWl0Rm9yUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzUHJvbWlzZSA9IG5ldyBCKChyZXMpID0+IHtcbiAgICAgICAgc2NyaXB0UHJvYy5vbignbWVzc2FnZScsIHJlcyk7IC8vIHRoaXMgaXMgbm9kZSBJUENcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZXNQcm9taXNlO1xuICAgICAgbG9nLmluZm8oJ1JlY2VpdmVkIGV4ZWN1dGUgZHJpdmVyIHNjcmlwdCByZXN1bHQgZnJvbSBjaGlsZCBwcm9jZXNzLCBzaHV0dGluZyBpdCBkb3duJyk7XG5cbiAgICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5lcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcy5zdWNjZXNzO1xuICAgIH07XG5cbiAgICAvLyBwcm9taXNlIHRoYXQgd2FpdHMgdXAgdG8gdGhlIHRpbWVvdXQgYW5kIHRocm93cyBhbiBlcnJvciBpZiBzbywgb3IgZG9lc1xuICAgIC8vIG5vdGhpbmcgaWYgdGhlIHRpbWVvdXQgaXMgY2FuY2VsZWQgYmVjYXVzZSB3ZSBnb3QgYSByZXN1bHQgZnJvbSB0aGVcbiAgICAvLyBjaGlsZCBzY3JpcHRcbiAgICBjb25zdCB3YWl0Rm9yVGltZW91dCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICghdGltZW91dENhbmNlbGVkICYmIChEYXRlLm5vdygpIC0gdGltZW91dFN0YXJ0KSA8IHRpbWVvdXQpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSg1MDApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGltZW91dENhbmNlbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRlIGRyaXZlciBzY3JpcHQgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tcy4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYFlvdSBjYW4gYWRqdXN0IHRoaXMgd2l0aCB0aGUgJ3RpbWVvdXQnIHBhcmFtZXRlci5gKTtcbiAgICB9O1xuXG4gICAgLy8gbm93IHRoYXQgdGhlIGNoaWxkIHNjcmlwdCBpcyBhbGl2ZSwgc2VuZCBpdCB0aGUgZGF0YSBpdCBuZWVkcyB0byBzdGFydFxuICAgIC8vIHJ1bm5pbmcgdGhlIGRyaXZlciBzY3JpcHRcbiAgICBsb2cuaW5mbygnU2VuZGluZyBkcml2ZXIgYW5kIHNjcmlwdCBkYXRhIHRvIGNoaWxkJyk7XG4gICAgc2NyaXB0UHJvYy5zZW5kKHtkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXR9KTtcblxuICAgIC8vIGFuZCBzZXQgdXAgYSByYWNlIGJldHdlZW4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIGNoaWxkIGFuZCB0aGUgdGltZW91dFxuICAgIHJldHVybiBhd2FpdCBCLnJhY2UoW3dhaXRGb3JSZXN1bHQoKSwgd2FpdEZvclRpbWVvdXQoKV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBleGVjdXRlIGRyaXZlciBzY3JpcHQuIE9yaWdpbmFsIGVycm9yIHdhczogJHtlcnJ9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZW5zdXJlIHdlIGFsd2F5cyBjYW5jZWwgdGhlIHRpbWVvdXQgc28gdGhhdCB0aGUgdGltZW91dCBwcm9taXNlIHN0b3BzXG4gICAgLy8gc3Bpbm5pbmcgYW5kIGFsbG93cyB0aGlzIHByb2Nlc3MgdG8gZGllIGdyYWNlZnVsbHlcbiAgICB0aW1lb3V0Q2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgbG9nLmluZm8oJ0Rpc2Nvbm5lY3RpbmcgZnJvbSBhbmQga2lsbGluZyBkcml2ZXIgc2NyaXB0IGNoaWxkIHByb2MnKTtcbiAgICBzY3JpcHRQcm9jLmRpc2Nvbm5lY3QoKTtcbiAgICBzY3JpcHRQcm9jLmtpbGwoKTtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvY29tbWFuZHMvZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLiJ9
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- module.exports = {
6
- notFind: function () {
7
- return [];
8
- }
9
- };require('source-map-support').install();
10
-
11
-
12
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9maXh0dXJlcy9jdXN0b20tZWxlbWVudC1maW5kZXItYmFkLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJub3RGaW5kIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmQyxFQUFBQSxPQUFPLEVBQUUsWUFBWTtBQUNuQixXQUFPLEVBQVA7QUFDRDtBQUhjLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5vdEZpbmQ6IGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvZml4dHVyZXMvY3VzdG9tLWVsZW1lbnQtZmluZGVyLWJhZC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLiJ9
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- module.exports = {
6
- find: function (driver, logger, selector, multiple) {
7
- if (!driver || !driver.opts) {
8
- throw new Error('Expected driver object');
9
- }
10
-
11
- if (!logger || !logger.info) {
12
- throw new Error('Expected logger object');
13
- }
14
-
15
- if (selector === 'foo') {
16
- return ['bar'];
17
- }
18
-
19
- if (selector === 'foos') {
20
- if (multiple) {
21
- return ['baz1', 'baz2'];
22
- }
23
-
24
- return ['bar1', 'bar2'];
25
- }
26
-
27
- if (selector === 'error') {
28
- throw new Error('This is a plugin error');
29
- }
30
-
31
- return [];
32
- }
33
- };require('source-map-support').install();
34
-
35
-
36
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9maXh0dXJlcy9jdXN0b20tZWxlbWVudC1maW5kZXIuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImZpbmQiLCJkcml2ZXIiLCJsb2dnZXIiLCJzZWxlY3RvciIsIm11bHRpcGxlIiwib3B0cyIsIkVycm9yIiwiaW5mbyJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkMsRUFBQUEsSUFBSSxFQUFFLFVBQVVDLE1BQVYsRUFBa0JDLE1BQWxCLEVBQTBCQyxRQUExQixFQUFvQ0MsUUFBcEMsRUFBOEM7QUFDbEQsUUFBSSxDQUFDSCxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDSSxJQUF2QixFQUE2QjtBQUMzQixZQUFNLElBQUlDLEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDSixNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDSyxJQUF2QixFQUE2QjtBQUMzQixZQUFNLElBQUlELEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUgsUUFBUSxLQUFLLEtBQWpCLEVBQXdCO0FBQ3RCLGFBQU8sQ0FBQyxLQUFELENBQVA7QUFDRDs7QUFFRCxRQUFJQSxRQUFRLEtBQUssTUFBakIsRUFBeUI7QUFDdkIsVUFBSUMsUUFBSixFQUFjO0FBQ1osZUFBTyxDQUFDLE1BQUQsRUFBUyxNQUFULENBQVA7QUFDRDs7QUFFRCxhQUFPLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBUDtBQUNEOztBQUVELFFBQUlELFFBQVEsS0FBSyxPQUFqQixFQUEwQjtBQUN4QixZQUFNLElBQUlHLEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsV0FBTyxFQUFQO0FBQ0Q7QUEzQmMsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmluZDogZnVuY3Rpb24gKGRyaXZlciwgbG9nZ2VyLCBzZWxlY3RvciwgbXVsdGlwbGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgaWYgKCFkcml2ZXIgfHwgIWRyaXZlci5vcHRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGRyaXZlciBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAoIWxvZ2dlciB8fCAhbG9nZ2VyLmluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbG9nZ2VyIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2ZvbycpIHtcbiAgICAgIHJldHVybiBbJ2JhciddO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2Zvb3MnKSB7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIFsnYmF6MScsICdiYXoyJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbJ2JhcjEnLCAnYmFyMiddO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGlzIGEgcGx1Z2luIGVycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvZml4dHVyZXMvY3VzdG9tLWVsZW1lbnQtZmluZGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uIn0=
@@ -1,132 +0,0 @@
1
- import _ from 'lodash';
2
- import B from 'bluebird';
3
- import vm from 'vm';
4
- import log from '../logger';
5
- import { attach } from 'webdriverio';
6
-
7
- // duplicate defining these keys here so we don't need to re-load a huge appium
8
- // dependency tree into memory just to run a wdio script
9
- const W3C_ELEMENT_KEY = 'element-6066-11e4-a52e-4f735466cecf';
10
- const MJSONWP_ELEMENT_KEY = 'ELEMENT';
11
-
12
- async function runScript (driverOpts, script, timeout) {
13
- if (!_.isNumber(timeout)) {
14
- throw new Error('Timeout parameter must be a number');
15
- }
16
-
17
- // set up fake logger
18
- const logLevels = ['error', 'warn', 'log'];
19
- const logs = {};
20
- const consoleFns = {};
21
- for (const level of logLevels) {
22
- logs[level] = [];
23
- consoleFns[level] = (...logMsgs) => logs[level].push(...logMsgs);
24
- }
25
-
26
- const driver = attach(driverOpts);
27
-
28
- const fullScript = buildScript(script);
29
- // the timeout here will not matter really, but set it anyway to be on the
30
- // safe side
31
- const vmCtx = vm.runInNewContext(fullScript, {}, {timeout});
32
-
33
- // run the driver script, giving user access to the driver object, a fake
34
- // console logger, and a promise library
35
- log.info('Running driver script in Node vm');
36
- let result = await vmCtx(driver, consoleFns, B);
37
-
38
- log.info('Ensuring driver script result is appropriate type for return');
39
- result = coerceScriptResult(result);
40
- return {result, logs};
41
- }
42
-
43
- /**
44
- * Embed a user-generated script inside a method which takes only the
45
- * predetermined objects we specify
46
- *
47
- * @param {string} script - the javascript to execute
48
- *
49
- * @return {string} - the full script to execute
50
- */
51
- function buildScript (script) {
52
- return `(async function execute (driver, console, Promise) {
53
- ${script}
54
- })`;
55
- }
56
-
57
- /**
58
- * We can get any manner of crazy thing back from a vm executing untrusted
59
- * code. We might also get WebdriverIO objects that aren't suitable for JSON
60
- * response. So make sure we convert the things we know about to their
61
- * appropriate response format, and squash other weird things.
62
- *
63
- * @param {Object} obj - object to convert and sanitize
64
- *
65
- * @return {Object} - safely converted object
66
- */
67
- function coerceScriptResult (obj) {
68
- // first ensure obj is of a type that can be JSON encoded safely. This will
69
- // get rid of custom objects, functions, etc... and turn them into POJOs
70
- try {
71
- obj = JSON.parse(JSON.stringify(obj));
72
- } catch (e) {
73
- log.warn('Could not convert executeDriverScript to safe response!' +
74
- `Result was: ${obj}. Will make it null`);
75
- return null;
76
- }
77
-
78
- let res;
79
-
80
- // now we begin our recursive case options
81
- if (_.isPlainObject(obj)) {
82
- // if we have an object, it's either an element object or something else
83
- // webdriverio has no monadic object types other than element and driver,
84
- // and we don't want to allow special casing return of driver
85
- res = {};
86
-
87
- if (obj[MJSONWP_ELEMENT_KEY] || obj[W3C_ELEMENT_KEY]) {
88
- // if it's an element object, clear out anything that's not the key, and
89
- // then return the object
90
- if (obj[MJSONWP_ELEMENT_KEY]) {
91
- res[MJSONWP_ELEMENT_KEY] = obj[MJSONWP_ELEMENT_KEY];
92
- }
93
-
94
- if (obj[W3C_ELEMENT_KEY]) {
95
- res[W3C_ELEMENT_KEY] = obj[W3C_ELEMENT_KEY];
96
- }
97
- return res;
98
- }
99
-
100
- // otherwise, recurse into the object
101
- for (const key of Object.keys(obj)) {
102
- res[key] = coerceScriptResult(obj[key]);
103
- }
104
- return res;
105
- }
106
-
107
- // in the cae of an array, just recurse into the items
108
- if (_.isArray(obj)) {
109
- return obj.map(coerceScriptResult);
110
- }
111
-
112
- // base case, if it's not an object or array, return straightaway
113
- return obj;
114
- }
115
-
116
- async function main (driverOpts, script, timeout) {
117
- let res;
118
- try {
119
- res = {success: await runScript(driverOpts, script, timeout)};
120
- } catch (error) {
121
- res = {error: {message: error.message, stack: error.stack}};
122
- }
123
- await B.promisify(process.send, {context: process})(res);
124
- }
125
-
126
- if (require.main === module) {
127
- log.info('Running driver execution in child process');
128
- process.on('message', ({driverOpts, script, timeout}) => {
129
- log.info('Parameters received from parent process');
130
- main(driverOpts, script, timeout);
131
- });
132
- }