@appium/base-driver 8.3.1 → 8.4.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 (120) hide show
  1. package/build/lib/basedriver/capabilities.d.ts +80 -0
  2. package/build/lib/basedriver/capabilities.d.ts.map +1 -0
  3. package/build/lib/basedriver/capabilities.js +11 -10
  4. package/build/lib/basedriver/commands/event.d.ts +9 -0
  5. package/build/lib/basedriver/commands/event.d.ts.map +1 -0
  6. package/build/lib/basedriver/commands/event.js +21 -21
  7. package/build/lib/basedriver/commands/find.d.ts +11 -0
  8. package/build/lib/basedriver/commands/find.d.ts.map +1 -0
  9. package/build/lib/basedriver/commands/find.js +44 -37
  10. package/build/lib/basedriver/commands/index.d.ts +8 -0
  11. package/build/lib/basedriver/commands/index.d.ts.map +1 -0
  12. package/build/lib/basedriver/commands/index.js +17 -14
  13. package/build/lib/basedriver/commands/log.d.ts +12 -0
  14. package/build/lib/basedriver/commands/log.d.ts.map +1 -0
  15. package/build/lib/basedriver/commands/log.js +24 -26
  16. package/build/lib/basedriver/commands/session.d.ts +11 -0
  17. package/build/lib/basedriver/commands/session.d.ts.map +1 -0
  18. package/build/lib/basedriver/commands/session.js +21 -147
  19. package/build/lib/basedriver/commands/settings.d.ts +10 -0
  20. package/build/lib/basedriver/commands/settings.d.ts.map +1 -0
  21. package/build/lib/basedriver/commands/settings.js +19 -17
  22. package/build/lib/basedriver/commands/timeout.d.ts +8 -0
  23. package/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
  24. package/build/lib/basedriver/commands/timeout.js +118 -137
  25. package/build/lib/basedriver/core.d.ts +235 -0
  26. package/build/lib/basedriver/core.d.ts.map +1 -0
  27. package/build/lib/basedriver/core.js +283 -0
  28. package/build/lib/basedriver/desired-caps.d.ts +5 -0
  29. package/build/lib/basedriver/desired-caps.d.ts.map +1 -0
  30. package/build/lib/basedriver/desired-caps.js +1 -1
  31. package/build/lib/basedriver/device-settings.d.ts +32 -0
  32. package/build/lib/basedriver/device-settings.d.ts.map +1 -0
  33. package/build/lib/basedriver/device-settings.js +19 -11
  34. package/build/lib/basedriver/driver.d.ts +83 -0
  35. package/build/lib/basedriver/driver.d.ts.map +1 -0
  36. package/build/lib/basedriver/driver.js +100 -266
  37. package/build/lib/basedriver/helpers.d.ts +132 -0
  38. package/build/lib/basedriver/helpers.d.ts.map +1 -0
  39. package/build/lib/basedriver/helpers.js +17 -1
  40. package/build/lib/basedriver/logger.d.ts +3 -0
  41. package/build/lib/basedriver/logger.d.ts.map +1 -0
  42. package/build/lib/constants.d.ts +9 -0
  43. package/build/lib/constants.d.ts.map +1 -0
  44. package/build/lib/express/crash.d.ts +3 -0
  45. package/build/lib/express/crash.d.ts.map +1 -0
  46. package/build/lib/express/express-logging.d.ts +3 -0
  47. package/build/lib/express/express-logging.d.ts.map +1 -0
  48. package/build/lib/express/idempotency.d.ts +2 -0
  49. package/build/lib/express/idempotency.d.ts.map +1 -0
  50. package/build/lib/express/logger.d.ts +3 -0
  51. package/build/lib/express/logger.d.ts.map +1 -0
  52. package/build/lib/express/middleware.d.ts +9 -0
  53. package/build/lib/express/middleware.d.ts.map +1 -0
  54. package/build/lib/express/server.d.ts +10 -0
  55. package/build/lib/express/server.d.ts.map +1 -0
  56. package/build/lib/express/static.d.ts +6 -0
  57. package/build/lib/express/static.d.ts.map +1 -0
  58. package/build/lib/express/websocket.d.ts +64 -0
  59. package/build/lib/express/websocket.d.ts.map +1 -0
  60. package/build/lib/express/websocket.js +39 -38
  61. package/build/lib/helpers/capabilities.d.ts +13 -0
  62. package/build/lib/helpers/capabilities.d.ts.map +1 -0
  63. package/build/lib/helpers/capabilities.js +41 -1
  64. package/build/lib/index.d.ts +183 -0
  65. package/build/lib/index.d.ts.map +1 -0
  66. package/build/lib/index.js +40 -20
  67. package/build/lib/jsonwp-proxy/protocol-converter.d.ts +48 -0
  68. package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
  69. package/build/lib/jsonwp-proxy/proxy.d.ts +41 -0
  70. package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
  71. package/build/lib/jsonwp-proxy/proxy.js +24 -6
  72. package/build/lib/jsonwp-status/status.d.ts +159 -0
  73. package/build/lib/jsonwp-status/status.d.ts.map +1 -0
  74. package/build/lib/protocol/errors.d.ts +310 -0
  75. package/build/lib/protocol/errors.d.ts.map +1 -0
  76. package/build/lib/protocol/errors.js +81 -2
  77. package/build/lib/protocol/helpers.d.ts +22 -0
  78. package/build/lib/protocol/helpers.d.ts.map +1 -0
  79. package/build/lib/protocol/index.d.ts +16 -0
  80. package/build/lib/protocol/index.d.ts.map +1 -0
  81. package/build/lib/protocol/index.js +7 -7
  82. package/build/lib/protocol/protocol.d.ts +11 -0
  83. package/build/lib/protocol/protocol.d.ts.map +1 -0
  84. package/build/lib/protocol/protocol.js +2 -6
  85. package/build/lib/protocol/routes.d.ts +6 -0
  86. package/build/lib/protocol/routes.d.ts.map +1 -0
  87. package/build/lib/protocol/routes.js +17 -1
  88. package/build/lib/protocol/validators.d.ts +8 -0
  89. package/build/lib/protocol/validators.d.ts.map +1 -0
  90. package/build/test/basedriver/driver-tests.js +30 -3
  91. package/build/test/e2e/basedriver/websockets.e2e.spec.js +12 -7
  92. package/build/test/unit/basedriver/commands/event.spec.js +7 -7
  93. package/build/test/unit/basedriver/commands/log.spec.js +31 -24
  94. package/build/test/unit/basedriver/timeout.spec.js +1 -1
  95. package/build/test/unit/protocol/routes.spec.js +2 -2
  96. package/build/tsconfig.tsbuildinfo +1 -0
  97. package/lib/basedriver/capabilities.js +49 -10
  98. package/lib/basedriver/commands/event.js +49 -31
  99. package/lib/basedriver/commands/find.js +108 -43
  100. package/lib/basedriver/commands/index.js +25 -19
  101. package/lib/basedriver/commands/log.js +60 -33
  102. package/lib/basedriver/commands/session.js +39 -141
  103. package/lib/basedriver/commands/settings.js +33 -13
  104. package/lib/basedriver/commands/timeout.js +153 -153
  105. package/lib/basedriver/core.js +497 -0
  106. package/lib/basedriver/desired-caps.js +1 -1
  107. package/lib/basedriver/device-settings.js +47 -12
  108. package/lib/basedriver/driver.js +273 -395
  109. package/lib/basedriver/helpers.js +18 -2
  110. package/lib/express/websocket.js +35 -32
  111. package/lib/helpers/capabilities.js +60 -1
  112. package/lib/index.js +16 -12
  113. package/lib/jsonwp-proxy/proxy.js +26 -6
  114. package/lib/protocol/errors.js +42 -42
  115. package/lib/protocol/index.js +4 -4
  116. package/lib/protocol/protocol.js +1 -3
  117. package/lib/protocol/routes.js +9 -0
  118. package/package.json +14 -11
  119. package/test/basedriver/driver-tests.js +31 -2
  120. package/index.d.ts +0 -386
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.helpers = exports.default = exports.commands = void 0;
8
+ exports.TimeoutMixin = TimeoutMixin;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -17,173 +17,154 @@ var _support = require("@appium/support");
17
17
 
18
18
  var _protocol = require("../../protocol");
19
19
 
20
- let commands = {},
21
- helpers = {},
22
- extensions = {};
23
- exports.helpers = helpers;
24
- exports.commands = commands;
25
20
  const MIN_TIMEOUT = 0;
26
21
 
27
- commands.timeouts = async function timeouts(type, ms, script, pageLoad, implicit) {
28
- if (_support.util.hasValue(type) && _support.util.hasValue(ms)) {
29
- this.log.debug(`MJSONWP timeout arguments: ${JSON.stringify({
30
- type,
31
- ms
32
- })}}`);
22
+ function TimeoutMixin(Base) {
23
+ class TimeoutCommands extends Base {
24
+ async timeouts(type, ms, script, pageLoad, implicit) {
25
+ if (_support.util.hasValue(type) && _support.util.hasValue(ms)) {
26
+ this.log.debug(`MJSONWP timeout arguments: ${JSON.stringify({
27
+ type,
28
+ ms
29
+ })}}`);
30
+
31
+ switch (type) {
32
+ case 'command':
33
+ await this.newCommandTimeout(ms);
34
+ return;
35
+
36
+ case 'implicit':
37
+ await this.implicitWaitMJSONWP(ms);
38
+ return;
39
+
40
+ case 'page load':
41
+ await this.pageLoadTimeoutMJSONWP(ms);
42
+ return;
43
+
44
+ case 'script':
45
+ await this.scriptTimeoutMJSONWP(ms);
46
+ return;
47
+
48
+ default:
49
+ throw new Error(`'${type}' type is not supported for MJSONWP timeout`);
50
+ }
51
+ }
33
52
 
34
- switch (type) {
35
- case 'command':
36
- await this.newCommandTimeout(ms);
37
- return;
53
+ this.log.debug(`W3C timeout argument: ${JSON.stringify({
54
+ script,
55
+ pageLoad,
56
+ implicit
57
+ })}}`);
38
58
 
39
- case 'implicit':
40
- await this.implicitWaitMJSONWP(ms);
41
- return;
59
+ if (_support.util.hasValue(script)) {
60
+ await this.scriptTimeoutW3C(script);
61
+ }
42
62
 
43
- case 'page load':
44
- await this.pageLoadTimeoutMJSONWP(ms);
45
- return;
63
+ if (_support.util.hasValue(pageLoad)) {
64
+ await this.pageLoadTimeoutW3C(pageLoad);
65
+ }
46
66
 
47
- case 'script':
48
- await this.scriptTimeoutMJSONWP(ms);
49
- return;
67
+ if (_support.util.hasValue(implicit)) {
68
+ await this.implicitWaitW3C(implicit);
69
+ }
70
+ }
50
71
 
51
- default:
52
- throw new Error(`'${type}' type is not supported for MJSONWP timeout`);
72
+ async getTimeouts() {
73
+ return {
74
+ command: this.newCommandTimeoutMs,
75
+ implicit: this.implicitWaitMs
76
+ };
53
77
  }
54
- }
55
78
 
56
- this.log.debug(`W3C timeout argument: ${JSON.stringify({
57
- script,
58
- pageLoad,
59
- implicit
60
- })}}`);
79
+ async implicitWaitW3C(ms) {
80
+ await this.implicitWait(ms);
81
+ }
61
82
 
62
- if (_support.util.hasValue(script)) {
63
- await this.scriptTimeoutW3C(script);
64
- }
83
+ async implicitWaitMJSONWP(ms) {
84
+ await this.implicitWait(ms);
85
+ }
65
86
 
66
- if (_support.util.hasValue(pageLoad)) {
67
- await this.pageLoadTimeoutW3C(pageLoad);
68
- }
87
+ async implicitWait(ms) {
88
+ await this.setImplicitWait(this.parseTimeoutArgument(ms));
89
+ }
69
90
 
70
- if (_support.util.hasValue(implicit)) {
71
- await this.implicitWaitW3C(implicit);
72
- }
73
- };
91
+ async pageLoadTimeoutW3C(ms) {
92
+ throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
93
+ }
74
94
 
75
- commands.getTimeouts = async function getTimeouts() {
76
- return {
77
- command: this.newCommandTimeoutMs,
78
- implicit: this.implicitWaitMs
79
- };
80
- };
95
+ async pageLoadTimeoutMJSONWP(ms) {
96
+ throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
97
+ }
81
98
 
82
- commands.implicitWaitW3C = async function implicitWaitW3C(ms) {
83
- await this.implicitWait(ms);
84
- };
99
+ async scriptTimeoutW3C(ms) {
100
+ throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
101
+ }
85
102
 
86
- commands.implicitWaitMJSONWP = async function implicitWaitMJSONWP(ms) {
87
- await this.implicitWait(ms);
88
- };
103
+ async scriptTimeoutMJSONWP(ms) {
104
+ throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
105
+ }
89
106
 
90
- commands.implicitWait = async function implicitWait(ms) {
91
- await this.setImplicitWait(this.parseTimeoutArgument(ms));
92
- };
107
+ async newCommandTimeout(ms) {
108
+ this.setNewCommandTimeout(this.parseTimeoutArgument(ms));
109
+ }
93
110
 
94
- helpers.setImplicitWait = function setImplicitWait(ms) {
95
- this.implicitWaitMs = ms;
96
- this.log.debug(`Set implicit wait to ${ms}ms`);
111
+ setImplicitWait(ms) {
112
+ this.implicitWaitMs = ms;
113
+ this.log.debug(`Set implicit wait to ${ms}ms`);
97
114
 
98
- if (this.managedDrivers && this.managedDrivers.length) {
99
- this.log.debug('Setting implicit wait on managed drivers');
115
+ if (this.managedDrivers && this.managedDrivers.length) {
116
+ this.log.debug('Setting implicit wait on managed drivers');
100
117
 
101
- for (let driver of this.managedDrivers) {
102
- if (_lodash.default.isFunction(driver.setImplicitWait)) {
103
- driver.setImplicitWait(ms);
118
+ for (let driver of this.managedDrivers) {
119
+ if (_lodash.default.isFunction(driver.setImplicitWait)) {
120
+ driver.setImplicitWait(ms);
121
+ }
122
+ }
104
123
  }
105
124
  }
106
- }
107
- };
108
125
 
109
- commands.pageLoadTimeoutW3C = async function pageLoadTimeoutW3C(ms) {
110
- throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
111
- };
126
+ setNewCommandTimeout(ms) {
127
+ this.newCommandTimeoutMs = ms;
128
+ this.log.debug(`Set new command timeout to ${ms}ms`);
112
129
 
113
- commands.pageLoadTimeoutMJSONWP = async function pageLoadTimeoutMJSONWP(ms) {
114
- throw new _protocol.errors.NotImplementedError('Not implemented yet for pageLoad.');
115
- };
130
+ if (this.managedDrivers && this.managedDrivers.length) {
131
+ this.log.debug('Setting new command timeout on managed drivers');
116
132
 
117
- commands.scriptTimeoutW3C = async function scriptTimeoutW3C(ms) {
118
- throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
119
- };
133
+ for (let driver of this.managedDrivers) {
134
+ if (_lodash.default.isFunction(driver.setNewCommandTimeout)) {
135
+ driver.setNewCommandTimeout(ms);
136
+ }
137
+ }
138
+ }
139
+ }
120
140
 
121
- commands.scriptTimeoutMJSONWP = async function scriptTimeoutMJSONWP(ms) {
122
- throw new _protocol.errors.NotImplementedError('Not implemented yet for script.');
123
- };
141
+ async implicitWaitForCondition(condFn) {
142
+ this.log.debug(`Waiting up to ${this.implicitWaitMs} ms for condition`);
124
143
 
125
- commands.newCommandTimeout = async function newCommandTimeout(ms) {
126
- this.setNewCommandTimeout(this.parseTimeoutArgument(ms));
127
- };
144
+ let wrappedCondFn = async (...args) => {
145
+ await this.clearNewCommandTimeout();
146
+ return await condFn(...args);
147
+ };
128
148
 
129
- helpers.setNewCommandTimeout = function setNewCommandTimeout(ms) {
130
- this.newCommandTimeoutMs = ms;
131
- this.log.debug(`Set new command timeout to ${ms}ms`);
149
+ return await (0, _asyncbox.waitForCondition)(wrappedCondFn, {
150
+ waitMs: this.implicitWaitMs,
151
+ intervalMs: 500,
152
+ logger: this.log
153
+ });
154
+ }
132
155
 
133
- if (this.managedDrivers && this.managedDrivers.length) {
134
- this.log.debug('Setting new command timeout on managed drivers');
156
+ parseTimeoutArgument(ms) {
157
+ let duration = parseInt(ms, 10);
135
158
 
136
- for (let driver of this.managedDrivers) {
137
- if (_lodash.default.isFunction(driver.setNewCommandTimeout)) {
138
- driver.setNewCommandTimeout(ms);
159
+ if (_lodash.default.isNaN(duration) || duration < MIN_TIMEOUT) {
160
+ throw new _protocol.errors.UnknownError(`Invalid timeout value '${ms}'`);
139
161
  }
162
+
163
+ return duration;
140
164
  }
141
- }
142
- };
143
165
 
144
- helpers.clearNewCommandTimeout = function clearNewCommandTimeout() {
145
- if (this.noCommandTimer) {
146
- clearTimeout(this.noCommandTimer);
147
- this.noCommandTimer = null;
148
- }
149
- };
150
-
151
- helpers.startNewCommandTimeout = function startNewCommandTimeout() {
152
- this.clearNewCommandTimeout();
153
- if (!this.newCommandTimeoutMs) return;
154
- this.noCommandTimer = setTimeout(async () => {
155
- this.log.warn(`Shutting down because we waited ` + `${this.newCommandTimeoutMs / 1000.0} seconds for a command`);
156
- const errorMessage = `New Command Timeout of ` + `${this.newCommandTimeoutMs / 1000.0} seconds ` + `expired. Try customizing the timeout using the ` + `'newCommandTimeout' desired capability`;
157
- await this.startUnexpectedShutdown(new Error(errorMessage));
158
- }, this.newCommandTimeoutMs);
159
- };
160
-
161
- helpers.implicitWaitForCondition = async function implicitWaitForCondition(condFn) {
162
- this.log.debug(`Waiting up to ${this.implicitWaitMs} ms for condition`);
163
-
164
- let wrappedCondFn = async (...args) => {
165
- this.clearNewCommandTimeout();
166
- return await condFn(...args);
167
- };
168
-
169
- return await (0, _asyncbox.waitForCondition)(wrappedCondFn, {
170
- waitMs: this.implicitWaitMs,
171
- intervalMs: 500,
172
- logger: this.log
173
- });
174
- };
175
-
176
- helpers.parseTimeoutArgument = function parseTimeoutArgument(ms) {
177
- let duration = parseInt(ms, 10);
178
-
179
- if (_lodash.default.isNaN(duration) || duration < MIN_TIMEOUT) {
180
- throw new _protocol.errors.UnknownError(`Invalid timeout value '${ms}'`);
181
166
  }
182
167
 
183
- return duration;
184
- };
185
-
186
- Object.assign(extensions, commands, helpers);
187
- var _default = extensions;
188
- exports.default = _default;
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIk1JTl9USU1FT1VUIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIm5vQ29tbWFuZFRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsInNldFRpbWVvdXQiLCJ3YXJuIiwiZXJyb3JNZXNzYWdlIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJjb25kRm4iLCJ3cmFwcGVkQ29uZEZuIiwiYXJncyIsIndhaXRNcyIsImludGVydmFsTXMiLCJsb2dnZXIiLCJkdXJhdGlvbiIsInBhcnNlSW50IiwiaXNOYU4iLCJVbmtub3duRXJyb3IiLCJPYmpl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QztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uLy4uL3Byb3RvY29sJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE1JTl9USU1FT1VUID0gMDtcblxuY29tbWFuZHMudGltZW91dHMgPSBhc3luYyBmdW5jdGlvbiB0aW1lb3V0cyAodHlwZSwgbXMsIHNjcmlwdCwgcGFnZUxvYWQsIGltcGxpY2l0KSB7XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHR5cGUpICYmIHV0aWwuaGFzVmFsdWUobXMpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYE1KU09OV1AgdGltZW91dCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoe3R5cGUsIG1zfSl9fWApO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21tYW5kJzpcbiAgICAgICAgYXdhaXQgdGhpcy5uZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2ltcGxpY2l0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAncGFnZSBsb2FkJzpcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0TUpTT05XUChtcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7dHlwZX0nIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBmb3IgTUpTT05XUCB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIGFzc3VtZSBpdCBpcyBXM0MgcHJvdG9jb2xcbiAgdGhpcy5sb2cuZGVidWcoYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtzY3JpcHQsIHBhZ2VMb2FkLCBpbXBsaWNpdH0pfX1gKTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2NyaXB0KSkge1xuICAgIGF3YWl0IHRoaXMuc2NyaXB0VGltZW91dFczQyhzY3JpcHQpO1xuICB9XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHBhZ2VMb2FkKSkge1xuICAgIGF3YWl0IHRoaXMucGFnZUxvYWRUaW1lb3V0VzNDKHBhZ2VMb2FkKTtcbiAgfVxuICBpZiAodXRpbC5oYXNWYWx1ZShpbXBsaWNpdCkpIHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdFczQyhpbXBsaWNpdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFRpbWVvdXRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGltZW91dHMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgaW1wbGljaXQ6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gIH07XG59O1xuXG4vLyBpbXBsaWNpdFxuY29tbWFuZHMuaW1wbGljaXRXYWl0VzNDID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0VzNDIChtcykge1xuICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdChtcyk7XG59O1xuXG5jb21tYW5kcy5pbXBsaWNpdFdhaXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0TUpTT05XUCAobXMpIHtcbiAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xufTtcblxuY29tbWFuZHMuaW1wbGljaXRXYWl0ID0gYXN5bmMgZnVuY3Rpb24gaW1wbGljaXRXYWl0IChtcykge1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG59O1xuXG5oZWxwZXJzLnNldEltcGxpY2l0V2FpdCA9IGZ1bmN0aW9uIHNldEltcGxpY2l0V2FpdCAobXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBtcztcbiAgdGhpcy5sb2cuZGVidWcoYFNldCBpbXBsaWNpdCB3YWl0IHRvICR7bXN9bXNgKTtcbiAgaWYgKHRoaXMubWFuYWdlZERyaXZlcnMgJiYgdGhpcy5tYW5hZ2VkRHJpdmVycy5sZW5ndGgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycpO1xuICAgIGZvciAobGV0IGRyaXZlciBvZiB0aGlzLm1hbmFnZWREcml2ZXJzKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5zZXRJbXBsaWNpdFdhaXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXRJbXBsaWNpdFdhaXQobXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gcGFnZUxvYWRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0VzNDID0gYXN5bmMgZnVuY3Rpb24gcGFnZUxvYWRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBwYWdlTG9hZC4nKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29tbWFuZHMucGFnZUxvYWRUaW1lb3V0TUpTT05XUCA9IGFzeW5jIGZ1bmN0aW9uIHBhZ2VMb2FkVGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHBhZ2VMb2FkLicpO1xufTtcblxuLy8gc2NyaXB0XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRXM0MgPSBhc3luYyBmdW5jdGlvbiBzY3JpcHRUaW1lb3V0VzNDIChtcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBzY3JpcHQuJyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbW1hbmRzLnNjcmlwdFRpbWVvdXRNSlNPTldQID0gYXN5bmMgZnVuY3Rpb24gc2NyaXB0VGltZW91dE1KU09OV1AgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQgZm9yIHNjcmlwdC4nKTtcbn07XG5cbi8vIGNvbW1hbmRcbmNvbW1hbmRzLm5ld0NvbW1hbmRUaW1lb3V0ID0gYXN5bmMgZnVuY3Rpb24gbmV3Q29tbWFuZFRpbWVvdXQgKG1zKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLnNldE5ld0NvbW1hbmRUaW1lb3V0KHRoaXMucGFyc2VUaW1lb3V0QXJndW1lbnQobXMpKTtcbn07XG5cbmhlbHBlcnMuc2V0TmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBzZXROZXdDb21tYW5kVGltZW91dCAobXMpIHtcbiAgdGhpcy5uZXdDb21tYW5kVGltZW91dE1zID0gbXM7XG4gIHRoaXMubG9nLmRlYnVnKGBTZXQgbmV3IGNvbW1hbmQgdGltZW91dCB0byAke21zfW1zYCk7XG4gIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NldHRpbmcgbmV3IGNvbW1hbmQgdGltZW91dCBvbiBtYW5hZ2VkIGRyaXZlcnMnKTtcbiAgICBmb3IgKGxldCBkcml2ZXIgb2YgdGhpcy5tYW5hZ2VkRHJpdmVycykge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICAgIGRyaXZlci5zZXROZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQgPSBmdW5jdGlvbiBjbGVhck5ld0NvbW1hbmRUaW1lb3V0ICgpIHtcbiAgaWYgKHRoaXMubm9Db21tYW5kVGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5ub0NvbW1hbmRUaW1lcik7XG4gICAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IG51bGw7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnROZXdDb21tYW5kVGltZW91dCA9IGZ1bmN0aW9uIHN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQgKCkge1xuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJvZ3VlIHRpbWVvdXRzXG4gIHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gIC8vIGlmIGNvbW1hbmQgdGltZW91dCBpcyAwLCBpdCBpcyBkaXNhYmxlZFxuICBpZiAoIXRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgdGhpcy5ub0NvbW1hbmRUaW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMubG9nLndhcm4oYFNodXR0aW5nIGRvd24gYmVjYXVzZSB3ZSB3YWl0ZWQgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBmb3IgYSBjb21tYW5kYCk7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYE5ldyBDb21tYW5kIFRpbWVvdXQgb2YgYCArXG4gICAgICAgICAgICAgIGAke3RoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyAvIDEwMDAuMH0gc2Vjb25kcyBgICtcbiAgICAgICAgICAgICAgYGV4cGlyZWQuIFRyeSBjdXN0b21pemluZyB0aGUgdGltZW91dCB1c2luZyB0aGUgYCArXG4gICAgICAgICAgICAgIGAnbmV3Q29tbWFuZFRpbWVvdXQnIGRlc2lyZWQgY2FwYWJpbGl0eWA7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH0sIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyk7XG59O1xuXG5oZWxwZXJzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiAoY29uZEZuKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5pbXBsaWNpdFdhaXRNc30gbXMgZm9yIGNvbmRpdGlvbmApO1xuICBsZXQgd3JhcHBlZENvbmRGbiA9IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgY29uZEZuKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gYXdhaXQgd2FpdEZvckNvbmRpdGlvbih3cmFwcGVkQ29uZEZuLCB7XG4gICAgd2FpdE1zOiB0aGlzLmltcGxpY2l0V2FpdE1zLCBpbnRlcnZhbE1zOiA1MDAsIGxvZ2dlcjogdGhpcy5sb2dcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnBhcnNlVGltZW91dEFyZ3VtZW50ID0gZnVuY3Rpb24gcGFyc2VUaW1lb3V0QXJndW1lbnQgKG1zKSB7XG4gIGxldCBkdXJhdGlvbiA9IHBhcnNlSW50KG1zLCAxMCk7XG4gIGlmIChfLmlzTmFOKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IE1JTl9USU1FT1VUKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEludmFsaWQgdGltZW91dCB2YWx1ZSAnJHttc30nYCk7XG4gIH1cbiAgcmV0dXJuIGR1cmF0aW9uO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdfQ==
168
+ return TimeoutCommands;
169
+ }
170
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL3RpbWVvdXQuanMiXSwibmFtZXMiOlsiTUlOX1RJTUVPVVQiLCJUaW1lb3V0TWl4aW4iLCJCYXNlIiwiVGltZW91dENvbW1hbmRzIiwidGltZW91dHMiLCJ0eXBlIiwibXMiLCJzY3JpcHQiLCJwYWdlTG9hZCIsImltcGxpY2l0IiwidXRpbCIsImhhc1ZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibmV3Q29tbWFuZFRpbWVvdXQiLCJpbXBsaWNpdFdhaXRNSlNPTldQIiwicGFnZUxvYWRUaW1lb3V0TUpTT05XUCIsInNjcmlwdFRpbWVvdXRNSlNPTldQIiwiRXJyb3IiLCJzY3JpcHRUaW1lb3V0VzNDIiwicGFnZUxvYWRUaW1lb3V0VzNDIiwiaW1wbGljaXRXYWl0VzNDIiwiZ2V0VGltZW91dHMiLCJjb21tYW5kIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwiaW1wbGljaXRXYWl0Iiwic2V0SW1wbGljaXRXYWl0IiwicGFyc2VUaW1lb3V0QXJndW1lbnQiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwic2V0TmV3Q29tbWFuZFRpbWVvdXQiLCJtYW5hZ2VkRHJpdmVycyIsImxlbmd0aCIsImRyaXZlciIsIl8iLCJpc0Z1bmN0aW9uIiwiaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uIiwiY29uZEZuIiwid3JhcHBlZENvbmRGbiIsImFyZ3MiLCJjbGVhck5ld0NvbW1hbmRUaW1lb3V0Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImxvZ2dlciIsImR1cmF0aW9uIiwicGFyc2VJbnQiLCJpc05hTiIsIlVua25vd25FcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBcEI7O0FBTU8sU0FBU0MsWUFBVCxDQUF1QkMsSUFBdkIsRUFBNkI7QUFLbEMs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QyxNQUFGLEVBQVU7QUFDdEMsV0FBSzVCLEdBQUwsQ0FBU0MsS0FBVCxDQUFnQixpQkFBZ0IsS0FBS2MsY0FBZSxtQkFBcEQ7O0FBQ0EsVUFBSWMsYUFBYSxHQUFHLE9BQU8sR0FBR0MsSUFBVixLQUFtQjtBQUVyQyxjQUFNLEtBQUtDLHNCQUFMLEVBQU47QUFFQSxlQUFPLE1BQU1ILE1BQU0sQ0FBQyxHQUFHRSxJQUFKLENBQW5CO0FBQ0QsT0FMRDs7QUFNQSxhQUFPLE1BQU0sZ0NBQWlCRCxhQUFqQixFQUFnQztBQUMzQ0csUUFBQUEsTUFBTSxFQUFFLEtBQUtqQixjQUQ4QjtBQUUzQ2tCLFFBQUFBLFVBQVUsRUFBRSxHQUYrQjtBQUczQ0MsUUFBQUEsTUFBTSxFQUFFLEtBQUtsQztBQUg4QixPQUFoQyxDQUFiO0FBS0Q7O0FBRURrQixJQUFBQSxvQkFBb0IsQ0FBRXhCLEVBQUYsRUFBTTtBQUN4QixVQUFJeUMsUUFBUSxHQUFHQyxRQUFRLENBQUMxQyxFQUFELEVBQUssRUFBTCxDQUF2Qjs7QUFDQSxVQUFJK0IsZ0JBQUVZLEtBQUYsQ0FBUUYsUUFBUixLQUFxQkEsUUFBUSxHQUFHL0MsV0FBcEMsRUFBaUQ7QUFDL0MsY0FBTSxJQUFJK0IsaUJBQU9tQixZQUFYLENBQXlCLDBCQUF5QjVDLEVBQUcsR0FBckQsQ0FBTjtBQUNEOztBQUNELGFBQU95QyxRQUFQO0FBQ0Q7O0FBeklnQzs7QUE0SW5DLFNBQU81QyxlQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbmltcG9ydCB7d2FpdEZvckNvbmRpdGlvbn0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi8uLi9wcm90b2NvbCc7XG5cbmNvbnN0IE1JTl9USU1FT1VUID0gMDtcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vZHJpdmVyJykuQmFzZURyaXZlckJhc2V9IEJhc2VcbiAqIEByZXR1cm5zIHtUaW1lb3V0QmFzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRpbWVvdXRNaXhpbiAoQmFzZSkge1xuXG4gIC8qKlxuICAgKiBAaW1wbGVtZW50cyB7SVRpbWVvdXRDb21tYW5kc31cbiAgICovXG4gIGNsYXNzIFRpbWVvdXRDb21tYW5kcyBleHRlbmRzIEJhc2Uge1xuICAgIGFzeW5jIHRpbWVvdXRzICh0eXBlLCBtcywgc2NyaXB0LCBwYWdlTG9hZCwgaW1wbGljaXQpIHtcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHR5cGUpICYmIHV0aWwuaGFzVmFsdWUobXMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKFxuICAgICAgICAgIGBNSlNPTldQIHRpbWVvdXQgYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KHt0eXBlLCBtc30pfX1gLFxuICAgICAgICApO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NvbW1hbmQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5uZXdDb21tYW5kVGltZW91dChtcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSAnaW1wbGljaXQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRNSlNPTldQKG1zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlICdwYWdlIGxvYWQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRNSlNPTldQKG1zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0TUpTT05XUChtcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYCcke3R5cGV9JyB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIE1KU09OV1AgdGltZW91dGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSBhc3N1bWUgaXQgaXMgVzNDIHByb3RvY29sXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgICAgYFczQyB0aW1lb3V0IGFyZ3VtZW50OiAke0pTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBzY3JpcHQsXG4gICAgICAgICAgcGFnZUxvYWQsXG4gICAgICAgICAgaW1wbGljaXQsXG4gICAgICAgIH0pfX1gLFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNjcmlwdCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zY3JpcHRUaW1lb3V0VzNDKHNjcmlwdCk7XG4gICAgICB9XG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShwYWdlTG9hZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYWdlTG9hZFRpbWVvdXRXM0MocGFnZUxvYWQpO1xuICAgICAgfVxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUoaW1wbGljaXQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0VzNDKGltcGxpY2l0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRUaW1lb3V0cyAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21tYW5kOiB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMsXG4gICAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0V2FpdE1zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBpbXBsaWNpdFxuICAgIGFzeW5jIGltcGxpY2l0V2FpdFczQyAobXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0KG1zKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbXBsaWNpdFdhaXRNSlNPTldQIChtcykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXQobXMpO1xuICAgIH1cblxuICAgIGFzeW5jIGltcGxpY2l0V2FpdCAobXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KHRoaXMucGFyc2VUaW1lb3V0QXJndW1lbnQobXMpKTtcbiAgICB9XG5cbiAgICAvLyBwYWdlTG9hZFxuICAgIGFzeW5jIHBhZ2VMb2FkVGltZW91dFczQyAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3IgcGFnZUxvYWQuJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcGFnZUxvYWRUaW1lb3V0TUpTT05XUCAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3IgcGFnZUxvYWQuJyk7XG4gICAgfVxuXG4gICAgLy8gc2NyaXB0XG4gICAgYXN5bmMgc2NyaXB0VGltZW91dFczQyAobXMpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignTm90IGltcGxlbWVudGVkIHlldCBmb3Igc2NyaXB0LicpO1xuICAgIH1cblxuICAgIGFzeW5jIHNjcmlwdFRpbWVvdXRNSlNPTldQIChtcykge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IGZvciBzY3JpcHQuJyk7XG4gICAgfVxuXG4gICAgLy8gY29tbWFuZFxuICAgIGFzeW5jIG5ld0NvbW1hbmRUaW1lb3V0IChtcykge1xuICAgICAgdGhpcy5zZXROZXdDb21tYW5kVGltZW91dCh0aGlzLnBhcnNlVGltZW91dEFyZ3VtZW50KG1zKSk7XG4gICAgfVxuXG4gICAgc2V0SW1wbGljaXRXYWl0IChtcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gbXM7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0IGltcGxpY2l0IHdhaXQgdG8gJHttc31tc2ApO1xuICAgICAgaWYgKHRoaXMubWFuYWdlZERyaXZlcnMgJiYgdGhpcy5tYW5hZ2VkRHJpdmVycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ1NldHRpbmcgaW1wbGljaXQgd2FpdCBvbiBtYW5hZ2VkIGRyaXZlcnMnKTtcbiAgICAgICAgZm9yIChsZXQgZHJpdmVyIG9mIHRoaXMubWFuYWdlZERyaXZlcnMpIHtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5zZXRJbXBsaWNpdFdhaXQpKSB7XG4gICAgICAgICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KG1zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXROZXdDb21tYW5kVGltZW91dCAobXMpIHtcbiAgICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IG1zO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldCBuZXcgY29tbWFuZCB0aW1lb3V0IHRvICR7bXN9bXNgKTtcbiAgICAgIGlmICh0aGlzLm1hbmFnZWREcml2ZXJzICYmIHRoaXMubWFuYWdlZERyaXZlcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdTZXR0aW5nIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJyk7XG4gICAgICAgIGZvciAobGV0IGRyaXZlciBvZiB0aGlzLm1hbmFnZWREcml2ZXJzKSB7XG4gICAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQpKSB7XG4gICAgICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQobXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGltcGxpY2l0V2FpdEZvckNvbmRpdGlvbiAoY29uZEZuKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RoaXMuaW1wbGljaXRXYWl0TXN9IG1zIGZvciBjb25kaXRpb25gKTtcbiAgICAgIGxldCB3cmFwcGVkQ29uZEZuID0gYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgLy8gcmVzZXQgY29tbWFuZCB0aW1lb3V0XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXJOZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBjb25kRm4oLi4uYXJncyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24od3JhcHBlZENvbmRGbiwge1xuICAgICAgICB3YWl0TXM6IHRoaXMuaW1wbGljaXRXYWl0TXMsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlVGltZW91dEFyZ3VtZW50IChtcykge1xuICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VJbnQobXMsIDEwKTtcbiAgICAgIGlmIChfLmlzTmFOKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IE1JTl9USU1FT1VUKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBJbnZhbGlkIHRpbWVvdXQgdmFsdWUgJyR7bXN9J2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBUaW1lb3V0Q29tbWFuZHM7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlRpbWVvdXRDb21tYW5kc30gSVRpbWVvdXRDb21tYW5kc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZHJpdmVyJykuQmFzZURyaXZlckJhc2U8SVRpbWVvdXRDb21tYW5kcz59IFRpbWVvdXRCYXNlXG4gKi9cbiJdfQ==
@@ -0,0 +1,235 @@
1
+ export type Capabilities = import('@appium/types').Capabilities;
2
+ export type W3CCapabilities = import('@appium/types').W3CCapabilities;
3
+ export type Driver = import('@appium/types').Driver;
4
+ export type Core = import('@appium/types').Core;
5
+ export type DriverOpts = import('@appium/types').DriverOpts;
6
+ export type EventHistory = import('@appium/types').EventHistory;
7
+ export type AppiumLogger = import('@appium/types').AppiumLogger;
8
+ /**
9
+ * @implements {Core}
10
+ */
11
+ export class DriverCore implements Core {
12
+ /**
13
+ * Make the basedriver version available so for any driver which inherits from this package, we
14
+ * know which version of basedriver it inherited from
15
+ */
16
+ static baseVersion: any;
17
+ constructor(opts?: import("@appium/types").DriverOpts, shouldValidateCaps?: boolean);
18
+ /**
19
+ * @type {string?}
20
+ */
21
+ sessionId: string | null;
22
+ /**
23
+ * @type {DriverOpts & Capabilities}
24
+ */
25
+ opts: import("@appium/types").DriverOpts & Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
26
+ [x: string]: any;
27
+ }>;
28
+ /**
29
+ * @type {DriverOpts}
30
+ */
31
+ initialOpts: DriverOpts;
32
+ /**
33
+ * @type {Capabilities}
34
+ */
35
+ caps: Capabilities;
36
+ /**
37
+ * @type {W3CCapabilities}
38
+ */
39
+ originalCaps: W3CCapabilities;
40
+ helpers: import("@appium/types").DriverHelpers;
41
+ /**
42
+ * basePath is used for several purposes, for example in setting up
43
+ * proxying to other drivers, since we need to know what the base path
44
+ * of any incoming request might look like. We set it to the default
45
+ * initially but it is automatically updated during any actual program
46
+ * execution by the routeConfiguringFunction, which is necessarily run as
47
+ * the entrypoint for any Appium server
48
+ */
49
+ basePath: string;
50
+ relaxedSecurityEnabled: boolean;
51
+ /** @type {string[]} */
52
+ allowInsecure: string[];
53
+ /** @type {string[]} */
54
+ denyInsecure: string[];
55
+ newCommandTimeoutMs: number;
56
+ implicitWaitMs: number;
57
+ /** @type {string[]} */
58
+ locatorStrategies: string[];
59
+ /** @type {string[]} */
60
+ webLocatorStrategies: string[];
61
+ /** @type {Driver[]} */
62
+ managedDrivers: Driver[];
63
+ /** @type {NodeJS.Timeout?} */
64
+ noCommandTimer: NodeJS.Timeout | null;
65
+ /** @type {EventHistory} */
66
+ _eventHistory: EventHistory;
67
+ _constraints: import("@appium/types").Constraints;
68
+ /** @type {NodeJS.EventEmitter} */
69
+ eventEmitter: NodeJS.EventEmitter;
70
+ /**
71
+ * @type {AppiumLogger}
72
+ */
73
+ _log: AppiumLogger;
74
+ /**
75
+ * @protected
76
+ */
77
+ protected shutdownUnexpectedly: boolean;
78
+ /**
79
+ * @type {boolean}
80
+ * @protected
81
+ */
82
+ protected shouldValidateCaps: boolean;
83
+ /**
84
+ * @protected
85
+ */
86
+ protected commandsQueueGuard: AsyncLock;
87
+ /**
88
+ * settings should be instantiated by drivers which extend BaseDriver, but
89
+ * we set it to an empty DeviceSettings instance here to make sure that the
90
+ * default settings are applied even if an extending driver doesn't utilize
91
+ * the settings functionality itself
92
+ */
93
+ settings: DeviceSettings<Record<string, unknown>>;
94
+ get log(): import("@appium/types").AppiumLogger;
95
+ /**
96
+ * Set a callback handler if needed to execute a custom piece of code
97
+ * when the driver is shut down unexpectedly. Multiple calls to this method
98
+ * will cause the handler to be executed mutiple times
99
+ *
100
+ * @param {(...args: any[]) => void} handler The code to be executed on unexpected shutdown.
101
+ * The function may accept one argument, which is the actual error instance, which
102
+ * caused the driver to shut down.
103
+ */
104
+ onUnexpectedShutdown(handler: (...args: any[]) => void): void;
105
+ /**
106
+ * This property is used by AppiumDriver to store the data of the
107
+ * specific driver sessions. This data can be later used to adjust
108
+ * properties for driver instances running in parallel.
109
+ * Override it in inherited driver classes if necessary.
110
+ *
111
+ * @return {Record<string,unknown>} Driver properties mapping
112
+ */
113
+ get driverData(): Record<string, unknown>;
114
+ /**
115
+ * This property controls the way {#executeCommand} method
116
+ * handles new driver commands received from the client.
117
+ * Override it for inherited classes only in special cases.
118
+ *
119
+ * @return {boolean} If the returned value is true (default) then all the commands
120
+ * received by the particular driver instance are going to be put into the queue,
121
+ * so each following command will not be executed until the previous command
122
+ * execution is completed. False value disables that queue, so each driver command
123
+ * is executed independently and does not wait for anything.
124
+ */
125
+ get isCommandsQueueEnabled(): boolean;
126
+ get eventHistory(): import("@appium/types").EventHistory;
127
+ /**
128
+ * API method for driver developers to log timings for important events
129
+ * @param {string} eventName
130
+ */
131
+ logEvent(eventName: string): void;
132
+ /**
133
+ * Overridden in appium driver, but here so that individual drivers can be
134
+ * tested with clients that poll
135
+ */
136
+ getStatus(): Promise<{}>;
137
+ set desiredCapConstraints(arg: import("@appium/types").Constraints);
138
+ get desiredCapConstraints(): import("@appium/types").Constraints;
139
+ /**
140
+ * method required by MJSONWP in order to determine whether it should
141
+ * respond with an invalid session response
142
+ * @param {string} [sessionId]
143
+ * @returns {boolean}
144
+ */
145
+ sessionExists(sessionId?: string | undefined): boolean;
146
+ /**
147
+ * method required by MJSONWP in order to determine if the command should
148
+ * be proxied directly to the driver
149
+ * @param {string} sessionId
150
+ * @returns {this | import('@appium/types').Driver}
151
+ */
152
+ driverForSession(sessionId: string): import("@appium/types").Driver | DriverCore;
153
+ /**
154
+ *
155
+ * @param {Capabilities} caps
156
+ */
157
+ logExtraCaps(caps: Partial<import("@wdio/types/build/Capabilities").Capabilities & import("@wdio/types/build/Capabilities").AppiumCapabilities & {
158
+ [x: string]: any;
159
+ }>): void;
160
+ /**
161
+ *
162
+ * @param {Capabilities} caps
163
+ * @returns {boolean}
164
+ */
165
+ validateDesiredCaps(caps: Capabilities): boolean;
166
+ isMjsonwpProtocol(): boolean;
167
+ isW3CProtocol(): boolean;
168
+ setProtocolMJSONWP(): void;
169
+ protocol: string | undefined;
170
+ setProtocolW3C(): void;
171
+ /**
172
+ * Check whether a given feature is enabled via its name
173
+ *
174
+ * @param {string} name - name of feature/command
175
+ *
176
+ * @returns {Boolean}
177
+ */
178
+ isFeatureEnabled(name: string): boolean;
179
+ /**
180
+ * Assert that a given feature is enabled and throw a helpful error if it's
181
+ * not
182
+ *
183
+ * @param {string} name - name of feature/command
184
+ */
185
+ ensureFeatureEnabled(name: string): void;
186
+ /**
187
+ *
188
+ * @param {string} strategy
189
+ * @param {boolean} [webContext]
190
+ */
191
+ validateLocatorStrategy(strategy: string, webContext?: boolean | undefined): void;
192
+ /**
193
+ *
194
+ * @param {string} [sessionId]
195
+ * @returns {boolean}
196
+ */
197
+ proxyActive(sessionId?: string | undefined): boolean;
198
+ /**
199
+ *
200
+ * @param {string} sessionId
201
+ * @returns {[string, RegExp][]}
202
+ */
203
+ getProxyAvoidList(sessionId: string): [string, RegExp][];
204
+ /**
205
+ *
206
+ * @param {string} [sessionId]
207
+ * @returns {boolean}
208
+ */
209
+ canProxy(sessionId?: string | undefined): boolean;
210
+ /**
211
+ * Whether a given command route (expressed as method and url) should not be
212
+ * proxied according to this driver
213
+ *
214
+ * @param {string} sessionId - the current sessionId (in case the driver runs
215
+ * multiple session ids and requires it). This is not used in this method but
216
+ * should be made available to overridden methods.
217
+ * @param {import('@appium/types').HTTPMethod} method - HTTP method of the route
218
+ * @param {string} url - url of the route
219
+ * @param {any} [body] - webdriver request body
220
+ *
221
+ * @returns {boolean} - whether the route should be avoided
222
+ */
223
+ proxyRouteIsAvoided(sessionId: string, method: import('@appium/types').HTTPMethod, url: string, body?: any): boolean;
224
+ /**
225
+ *
226
+ * @param {Driver} driver
227
+ */
228
+ addManagedDriver(driver: Driver): void;
229
+ getManagedDrivers(): import("@appium/types").Driver[];
230
+ clearNewCommandTimeout(): Promise<void>;
231
+ }
232
+ import { EventEmitter } from "events";
233
+ import AsyncLock from "async-lock";
234
+ import DeviceSettings from "./device-settings";
235
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"2BAyea,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;mBAC9B,OAAO,eAAe,EAAE,IAAI;yBAC5B,OAAO,eAAe,EAAE,UAAU;2BAClC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;AAzdjD;;GAEG;AACH;IAEE;;;OAGG;IACH,wBAAoC;IAqGpC,qFAqBC;IAxHD;;MAEE;IACF,WAFS,MAAM,QAEE;IAEjB;;MAEE;IACF;;OAAK;IAEL;;MAEE;IACF,aAFS,UAAU,CAEP;IAEZ;;MAEE;IACF,MAFS,YAAY,CAEhB;IAEL;;MAEE;IACF,cAFS,eAAe,CAEX;IAEb,+CAAkB;IAElB;;;;;;;MAOE;IACF,iBAA6B;IAE7B,gCAA+B;IAE/B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACA;IAEnB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACD;IAElB,4BAA6C;IAE7C,uBAAmB;IAEnB,uBAAuB;IACvB,mBADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,sBADW,MAAM,EAAE,CACO;IAE1B,uBAAuB;IACvB,gBADW,MAAM,EAAE,CACC;IAEpB,8BAA8B;IAC9B,gBADW,OAAO,OAAO,QACH;IAEtB,2BAA2B;IAC3B,eADW,YAAY,CACQ;IAE/B,kDAAyD;IAGzD,kCAAkC;IAClC,cADW,mBAAmB,CACI;IAElC;;MAEE;IACF,MAFS,YAAY,CAEhB;IAEL;;MAEE;IACF,wCAA6B;IAE7B;;;MAGE;IACF,8BAHS,OAAO,CAGG;IAEnB;;MAEE;IACF,wCAAqC;IAErC;;;;;MAKE;IACF,kDAAgC;IAyBhC,gDAEC;IAED;;;;;;;;MAQE;IACF,wCAJoB,GAAG,EAAE,KAAK,IAAI,QAMjC;IAED;;;;;;;MAOE;IACF,0CAEC;IAED;;;;;;;;;;MAUE;IACF,sCAEC;IAMD,yDAEC;IAED;;;MAGE;IACF,oBAFU,MAAM,QAgBf;IAED;;;MAGE;IACF,yBAEC;IAGD,oEAWC;IAED,iEAEC;IAED;;;;;MAKE;IACF,+CAFY,OAAO,CAKlB;IAED;;;;;MAKE;IACF,4BAHU,MAAM,+CAKf;IAED;;;MAGE;IACF;;cAWC;IAED;;;;MAIE;IACF,0BAHU,YAAY,GACV,OAAO,CAqBlB;IAED,6BAEC;IAED,yBAEC;IAED,2BAEC;IADC,6BAAiC;IAGnC,uBAEC;IAED;;;;;;MAME;IACF,uBAJU,MAAM,WAuBf;IAED;;;;;MAKE;IACF,2BAFU,MAAM,QAYf;IAED;;;;MAIE;IACF,kCAHU,MAAM,0CAoBf;IAED;;;;MAIE;IACF,6CAFY,OAAO,CAIlB;IAED;;;;MAIE;IACF,6BAHU,MAAM,GACJ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAI7B;IAED;;;;MAIE;IACF,0CAFY,OAAO,CAIlB;IAED;;;;;;;;;;;;MAYE;IACF,+BATU,MAAM,UAGN,OAAO,eAAe,EAAE,UAAU,OAClC,MAAM,SACN,GAAG,GAED,OAAO,CAuBlB;IAED;;;MAGE;IACF,yBAFU,MAAM,QAIf;IAED,sDAEC;IAED,wCAKC;CACF"}