appium-remote-debugger 10.0.3 → 10.1.0

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 (86) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/index.js +18 -33
  3. package/build/lib/atoms.d.ts +17 -0
  4. package/build/lib/atoms.d.ts.map +1 -0
  5. package/build/lib/atoms.js +75 -50
  6. package/build/lib/atoms.js.map +1 -1
  7. package/build/lib/logger.d.ts +3 -0
  8. package/build/lib/logger.d.ts.map +1 -0
  9. package/build/lib/logger.js +5 -11
  10. package/build/lib/logger.js.map +1 -1
  11. package/build/lib/mixins/connect.d.ts +125 -0
  12. package/build/lib/mixins/connect.d.ts.map +1 -0
  13. package/build/lib/mixins/connect.js +299 -202
  14. package/build/lib/mixins/connect.js.map +1 -1
  15. package/build/lib/mixins/events.d.ts +7 -0
  16. package/build/lib/mixins/events.d.ts.map +1 -0
  17. package/build/lib/mixins/events.js +7 -12
  18. package/build/lib/mixins/events.js.map +1 -1
  19. package/build/lib/mixins/execute.d.ts +38 -0
  20. package/build/lib/mixins/execute.d.ts.map +1 -0
  21. package/build/lib/mixins/execute.js +162 -122
  22. package/build/lib/mixins/execute.js.map +1 -1
  23. package/build/lib/mixins/index.d.ts +5 -0
  24. package/build/lib/mixins/index.d.ts.map +1 -0
  25. package/build/lib/mixins/index.js +14 -23
  26. package/build/lib/mixins/index.js.map +1 -1
  27. package/build/lib/mixins/message-handlers.d.ts +92 -0
  28. package/build/lib/mixins/message-handlers.d.ts.map +1 -0
  29. package/build/lib/mixins/message-handlers.js +160 -97
  30. package/build/lib/mixins/message-handlers.js.map +1 -1
  31. package/build/lib/mixins/navigate.d.ts +92 -0
  32. package/build/lib/mixins/navigate.d.ts.map +1 -0
  33. package/build/lib/mixins/navigate.js +199 -141
  34. package/build/lib/mixins/navigate.js.map +1 -1
  35. package/build/lib/protocol/index.d.ts +14 -0
  36. package/build/lib/protocol/index.d.ts.map +1 -0
  37. package/build/lib/protocol/index.js +192 -118
  38. package/build/lib/protocol/index.js.map +1 -1
  39. package/build/lib/remote-debugger-real-device.d.ts +6 -0
  40. package/build/lib/remote-debugger-real-device.d.ts.map +1 -0
  41. package/build/lib/remote-debugger-real-device.js +29 -32
  42. package/build/lib/remote-debugger-real-device.js.map +1 -1
  43. package/build/lib/remote-debugger.d.ts +119 -0
  44. package/build/lib/remote-debugger.d.ts.map +1 -0
  45. package/build/lib/remote-debugger.js +256 -226
  46. package/build/lib/remote-debugger.js.map +1 -1
  47. package/build/lib/rpc/index.d.ts +4 -0
  48. package/build/lib/rpc/index.d.ts.map +1 -0
  49. package/build/lib/rpc/index.js +10 -21
  50. package/build/lib/rpc/index.js.map +1 -1
  51. package/build/lib/rpc/remote-messages.d.ts +51 -0
  52. package/build/lib/rpc/remote-messages.d.ts.map +1 -0
  53. package/build/lib/rpc/remote-messages.js +203 -224
  54. package/build/lib/rpc/remote-messages.js.map +1 -1
  55. package/build/lib/rpc/rpc-client-real-device.d.ts +6 -0
  56. package/build/lib/rpc/rpc-client-real-device.d.ts.map +1 -0
  57. package/build/lib/rpc/rpc-client-real-device.js +43 -49
  58. package/build/lib/rpc/rpc-client-real-device.js.map +1 -1
  59. package/build/lib/rpc/rpc-client-simulator.d.ts +15 -0
  60. package/build/lib/rpc/rpc-client-simulator.d.ts.map +1 -0
  61. package/build/lib/rpc/rpc-client-simulator.js +138 -125
  62. package/build/lib/rpc/rpc-client-simulator.js.map +1 -1
  63. package/build/lib/rpc/rpc-client.d.ts +142 -0
  64. package/build/lib/rpc/rpc-client.d.ts.map +1 -0
  65. package/build/lib/rpc/rpc-client.js +559 -418
  66. package/build/lib/rpc/rpc-client.js.map +1 -1
  67. package/build/lib/rpc/rpc-message-handler.d.ts +13 -0
  68. package/build/lib/rpc/rpc-message-handler.d.ts.map +1 -0
  69. package/build/lib/rpc/rpc-message-handler.js +181 -166
  70. package/build/lib/rpc/rpc-message-handler.js.map +1 -1
  71. package/build/lib/utils.d.ts +61 -0
  72. package/build/lib/utils.d.ts.map +1 -0
  73. package/build/lib/utils.js +241 -155
  74. package/build/lib/utils.js.map +1 -1
  75. package/lib/atoms.js +25 -4
  76. package/lib/mixins/connect.js +102 -7
  77. package/lib/mixins/execute.js +46 -13
  78. package/lib/mixins/message-handlers.js +44 -1
  79. package/lib/mixins/navigate.js +55 -3
  80. package/lib/remote-debugger.js +112 -0
  81. package/lib/rpc/rpc-client-real-device.js +1 -6
  82. package/lib/rpc/rpc-client-simulator.js +7 -1
  83. package/lib/rpc/rpc-client.js +106 -6
  84. package/lib/rpc/rpc-message-handler.js +1 -1
  85. package/lib/utils.js +31 -1
  86. package/package.json +25 -15
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-debugger.d.ts","sourceRoot":"","sources":["../../lib/remote-debugger.js"],"names":[],"mappings":"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"}
@@ -1,238 +1,268 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = exports.RemoteDebugger = exports.RPC_RESPONSE_TIMEOUT_MS = exports.REMOTE_DEBUGGER_PORT = void 0;
8
- require("source-map-support/register");
9
- var _events = require("events");
10
- var _logger = _interopRequireDefault(require("./logger"));
11
- var _rpc = require("./rpc");
12
- var _utils = require("./utils");
13
- var _mixins = require("./mixins");
14
- var _lodash = _interopRequireDefault(require("lodash"));
15
- var _bluebird = _interopRequireDefault(require("bluebird"));
16
- var _path = _interopRequireDefault(require("path"));
17
- var _asyncLock = _interopRequireDefault(require("async-lock"));
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RPC_RESPONSE_TIMEOUT_MS = exports.REMOTE_DEBUGGER_PORT = exports.RemoteDebugger = void 0;
7
+ const events_1 = require("events");
8
+ const logger_1 = __importDefault(require("./logger"));
9
+ const rpc_1 = require("./rpc");
10
+ const utils_1 = require("./utils");
11
+ const mixins_1 = require("./mixins");
12
+ const lodash_1 = __importDefault(require("lodash"));
13
+ const bluebird_1 = __importDefault(require("bluebird"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const async_lock_1 = __importDefault(require("async-lock"));
16
+ const rpc_client_1 = __importDefault(require("./rpc/rpc-client"));
18
17
  const REMOTE_DEBUGGER_PORT = 27753;
19
18
  exports.REMOTE_DEBUGGER_PORT = REMOTE_DEBUGGER_PORT;
20
19
  const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
20
+ /* How many milliseconds to wait for webkit to return a response before timing out */
21
21
  const RPC_RESPONSE_TIMEOUT_MS = 5000;
22
22
  exports.RPC_RESPONSE_TIMEOUT_MS = RPC_RESPONSE_TIMEOUT_MS;
23
23
  const PAGE_READY_TIMEOUT = 5000;
24
24
  const GARBAGE_COLLECT_TIMEOUT = 5000;
25
- class RemoteDebugger extends _events.EventEmitter {
26
- constructor(opts = {}) {
27
- super();
28
- _logger.default.info(`Remote Debugger version ${require(_path.default.resolve((0, _utils.getModuleRoot)(), 'package.json')).version}`);
29
- const {
30
- bundleId,
31
- additionalBundleIds = [],
32
- platformVersion,
33
- isSafari = true,
34
- includeSafari = false,
35
- useNewSafari = false,
36
- pageLoadMs,
37
- host,
38
- port = REMOTE_DEBUGGER_PORT,
39
- socketPath,
40
- pageReadyTimeout = PAGE_READY_TIMEOUT,
41
- remoteDebugProxy,
42
- garbageCollectOnExecute = false,
43
- logFullResponse = false,
44
- logAllCommunication = false,
45
- logAllCommunicationHexDump = false,
46
- webInspectorMaxFrameLength,
47
- socketChunkSize,
48
- fullPageInitialization
49
- } = opts;
50
- this.bundleId = bundleId;
51
- this.additionalBundleIds = additionalBundleIds;
52
- this.platformVersion = platformVersion;
53
- this.isSafari = isSafari;
54
- this.includeSafari = includeSafari;
55
- this.useNewSafari = useNewSafari;
56
- this.pageLoadMs = pageLoadMs;
57
- _logger.default.debug(`useNewSafari --> ${this.useNewSafari}`);
58
- this.garbageCollectOnExecute = garbageCollectOnExecute;
59
- this.host = host;
60
- this.port = port;
61
- this.socketPath = socketPath;
62
- this.remoteDebugProxy = remoteDebugProxy;
63
- this.pageReadyTimeout = pageReadyTimeout;
64
- this.logAllCommunication = _lodash.default.isNil(logAllCommunication) ? !!logFullResponse : !!logAllCommunication;
65
- this.logAllCommunicationHexDump = logAllCommunicationHexDump;
66
- this.socketChunkSize = socketChunkSize;
67
- if (_lodash.default.isInteger(webInspectorMaxFrameLength)) {
68
- this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;
69
- }
70
- this.fullPageInitialization = fullPageInitialization;
71
- this._lock = new _asyncLock.default();
72
- }
73
- setup() {
74
- this.appDict = {};
75
- this.appIdKey = null;
76
- this.pageIdKey = null;
77
- this.pageLoading = false;
78
- this._navigatingToPage = false;
79
- this.allowNavigationWithoutReload = false;
80
- this.rpcClient = null;
81
- this._clientEventListeners = {};
82
- }
83
- teardown() {
84
- _logger.default.debug('Cleaning up listeners');
85
- this.appDict = {};
86
- this.appIdKey = null;
87
- this.pageIdKey = null;
88
- this.pageLoading = false;
89
- this.rpcClient = null;
90
- this.removeAllListeners(RemoteDebugger.EVENT_PAGE_CHANGE);
91
- this.removeAllListeners(RemoteDebugger.EVENT_DISCONNECT);
92
- }
93
- initRpcClient() {
94
- this.rpcClient = new _rpc.RpcClientSimulator({
95
- bundleId: this.bundleId,
96
- platformVersion: this.platformVersion,
97
- isSafari: this.isSafari,
98
- host: this.host,
99
- port: this.port,
100
- socketPath: this.socketPath,
101
- messageProxy: this.remoteDebugProxy,
102
- logAllCommunication: this.logAllCommunication,
103
- logAllCommunicationHexDump: this.logAllCommunicationHexDump,
104
- fullPageInitialization: this.fullPageInitialization,
105
- webInspectorMaxFrameLength: this.webInspectorMaxFrameLength
106
- });
107
- }
108
- get isConnected() {
109
- var _this$rpcClient;
110
- return !!((_this$rpcClient = this.rpcClient) !== null && _this$rpcClient !== void 0 && _this$rpcClient.isConnected);
111
- }
112
- async launchSafari() {
113
- await this.rpcClient.send('launchApplication', {
114
- bundleId: SAFARI_BUNDLE_ID
115
- });
116
- }
117
- async startTimeline(fn) {
118
- _logger.default.debug('Starting to record the timeline');
119
- this.rpcClient.on('Timeline.eventRecorded', fn);
120
- return await this.rpcClient.send('Timeline.start', {
121
- appIdKey: this.appIdKey,
122
- pageIdKey: this.pageIdKey
123
- });
124
- }
125
- async stopTimeline() {
126
- _logger.default.debug('Stopping to record the timeline');
127
- await this.rpcClient.send('Timeline.stop', {
128
- appIdKey: this.appIdKey,
129
- pageIdKey: this.pageIdKey
130
- });
131
- }
132
- addClientEventListener(eventName, listener) {
133
- this._clientEventListeners[eventName] = this._clientEventListeners[eventName] || [];
134
- this._clientEventListeners[eventName].push(listener);
135
- this.rpcClient.on(eventName, listener);
136
- }
137
- removeClientEventListener(eventName) {
138
- for (const listener of this._clientEventListeners[eventName] || []) {
139
- this.rpcClient.off(eventName, listener);
140
- }
141
- }
142
- startConsole(listener) {
143
- _logger.default.debug('Starting to listen for JavaScript console');
144
- this.addClientEventListener('Console.messageAdded', listener);
145
- this.addClientEventListener('Console.messageRepeatCountUpdated', listener);
146
- }
147
- stopConsole() {
148
- _logger.default.debug('Stopping to listen for JavaScript console');
149
- this.removeClientEventListener('Console.messageAdded');
150
- this.removeClientEventListener('Console.messageRepeatCountUpdated');
151
- }
152
- startNetwork(listener) {
153
- _logger.default.debug('Starting to listen for network events');
154
- this.addClientEventListener('NetworkEvent', listener);
155
- }
156
- stopNetwork() {
157
- _logger.default.debug('Stopping to listen for network events');
158
- this.removeClientEventListener('NetworkEvent');
159
- }
160
- set allowNavigationWithoutReload(allow) {
161
- this._allowNavigationWithoutReload = allow;
162
- }
163
- get allowNavigationWithoutReload() {
164
- return this._allowNavigationWithoutReload;
165
- }
166
- async overrideUserAgent(value) {
167
- _logger.default.debug('Setting overrideUserAgent');
168
- return await this.rpcClient.send('Page.overrideUserAgent', {
169
- appIdKey: this.appIdKey,
170
- pageIdKey: this.pageIdKey,
171
- value
172
- });
173
- }
174
- async getCookies() {
175
- _logger.default.debug('Getting cookies');
176
- return await this.rpcClient.send('Page.getCookies', {
177
- appIdKey: this.appIdKey,
178
- pageIdKey: this.pageIdKey
179
- });
180
- }
181
- async setCookie(cookie) {
182
- _logger.default.debug('Setting cookie');
183
- return await this.rpcClient.send('Page.setCookie', {
184
- appIdKey: this.appIdKey,
185
- pageIdKey: this.pageIdKey,
186
- cookie
187
- });
188
- }
189
- async deleteCookie(cookieName, url) {
190
- _logger.default.debug(`Deleting cookie '${cookieName}' on '${url}'`);
191
- return await this.rpcClient.send('Page.deleteCookie', {
192
- appIdKey: this.appIdKey,
193
- pageIdKey: this.pageIdKey,
194
- cookieName,
195
- url
196
- });
197
- }
198
- async garbageCollect(timeoutMs = GARBAGE_COLLECT_TIMEOUT) {
199
- _logger.default.debug(`Garbage collecting with ${timeoutMs}ms timeout`);
200
- try {
201
- (0, _utils.checkParams)({
202
- appIdKey: this.appIdKey,
203
- pageIdKey: this.pageIdKey
204
- });
205
- } catch (err) {
206
- _logger.default.debug(`Unable to collect garbage at this time`);
207
- return;
208
- }
209
- await _bluebird.default.resolve(this.rpcClient.send('Heap.gc', {
210
- appIdKey: this.appIdKey,
211
- pageIdKey: this.pageIdKey
212
- })).timeout(timeoutMs).then(function gcSuccess() {
213
- _logger.default.debug(`Garbage collection successful`);
214
- }).catch(function gcError(err) {
215
- if (err instanceof _bluebird.default.TimeoutError) {
216
- _logger.default.debug(`Garbage collection timed out after ${timeoutMs}ms`);
217
- } else {
218
- _logger.default.debug(`Unable to collect garbage: ${err.message}`);
219
- }
220
- });
221
- }
222
- async useAppDictLock(fn) {
223
- return await this._lock.acquire('appDict', fn);
224
- }
225
- get skippedApps() {
226
- return this._skippedApps || [];
227
- }
25
+ class RemoteDebugger extends events_1.EventEmitter {
26
+ /*
27
+ * The constructor takes an opts hash with the following properties:
28
+ * - bundleId - id of the app being connected to
29
+ * - additionalBundleIds - array of possible bundle ids that the inspector
30
+ * could return
31
+ * - platformVersion - version of iOS
32
+ * - useNewSafari - for web inspector, whether this is a new Safari instance
33
+ * - pageLoadMs - the time, in ms, that should be waited for page loading
34
+ * - host - the remote debugger's host address
35
+ * - port - the remote debugger port through which to communicate
36
+ * - logAllCommunication - log plists sent and received from Web Inspector
37
+ * - logAllCommunicationHexDump - log communication from Web Inspector as hex dump
38
+ * - socketChunkSize - size, in bytes, of chunks of data sent to Web Inspector (real device only)
39
+ * - webInspectorMaxFrameLength - The maximum size in bytes of a single data frame
40
+ * in the device communication protocol
41
+ */
42
+ constructor(opts = {}) {
43
+ super();
44
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
45
+ logger_1.default.info(`Remote Debugger version ${require(path_1.default.resolve((0, utils_1.getModuleRoot)(), 'package.json')).version}`);
46
+ const { bundleId, additionalBundleIds = [], platformVersion, isSafari = true, includeSafari = false, useNewSafari = false, pageLoadMs, host, port = REMOTE_DEBUGGER_PORT, socketPath, pageReadyTimeout = PAGE_READY_TIMEOUT, remoteDebugProxy, garbageCollectOnExecute = false, logFullResponse = false, logAllCommunication = false, logAllCommunicationHexDump = false, webInspectorMaxFrameLength, socketChunkSize, fullPageInitialization, } = opts;
47
+ this.bundleId = bundleId;
48
+ this.additionalBundleIds = additionalBundleIds;
49
+ this.platformVersion = platformVersion;
50
+ this.isSafari = isSafari;
51
+ this.includeSafari = includeSafari;
52
+ this.useNewSafari = useNewSafari;
53
+ this.pageLoadMs = pageLoadMs;
54
+ logger_1.default.debug(`useNewSafari --> ${this.useNewSafari}`);
55
+ this.garbageCollectOnExecute = garbageCollectOnExecute;
56
+ this.host = host;
57
+ this.port = port;
58
+ this.socketPath = socketPath;
59
+ this.remoteDebugProxy = remoteDebugProxy;
60
+ this.pageReadyTimeout = pageReadyTimeout;
61
+ this.logAllCommunication = lodash_1.default.isNil(logAllCommunication) ? !!logFullResponse : !!logAllCommunication;
62
+ this.logAllCommunicationHexDump = logAllCommunicationHexDump;
63
+ this.socketChunkSize = socketChunkSize;
64
+ if (lodash_1.default.isInteger(webInspectorMaxFrameLength)) {
65
+ this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;
66
+ }
67
+ this.fullPageInitialization = fullPageInitialization;
68
+ this._lock = new async_lock_1.default();
69
+ }
70
+ setup() {
71
+ // app handling configuration
72
+ this.appDict = {};
73
+ this.appIdKey = null;
74
+ this.pageIdKey = null;
75
+ this.pageLoading = false;
76
+ this._navigatingToPage = false;
77
+ this.allowNavigationWithoutReload = false;
78
+ this.rpcClient = null;
79
+ this._clientEventListeners = {};
80
+ }
81
+ teardown() {
82
+ logger_1.default.debug('Cleaning up listeners');
83
+ this.appDict = {};
84
+ this.appIdKey = null;
85
+ this.pageIdKey = null;
86
+ this.pageLoading = false;
87
+ this.rpcClient = null;
88
+ this.removeAllListeners(RemoteDebugger.EVENT_PAGE_CHANGE);
89
+ this.removeAllListeners(RemoteDebugger.EVENT_DISCONNECT);
90
+ }
91
+ initRpcClient() {
92
+ this.rpcClient = new rpc_1.RpcClientSimulator({
93
+ bundleId: this.bundleId,
94
+ platformVersion: this.platformVersion,
95
+ isSafari: this.isSafari,
96
+ host: this.host,
97
+ port: this.port,
98
+ socketPath: this.socketPath,
99
+ messageProxy: this.remoteDebugProxy,
100
+ logAllCommunication: this.logAllCommunication,
101
+ logAllCommunicationHexDump: this.logAllCommunicationHexDump,
102
+ fullPageInitialization: this.fullPageInitialization,
103
+ webInspectorMaxFrameLength: this.webInspectorMaxFrameLength,
104
+ });
105
+ }
106
+ get isConnected() {
107
+ return !!this.rpcClient?.isConnected;
108
+ }
109
+ async launchSafari() {
110
+ if (!this.rpcClient) {
111
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
112
+ }
113
+ await this.rpcClient.send('launchApplication', {
114
+ bundleId: SAFARI_BUNDLE_ID
115
+ });
116
+ }
117
+ async startTimeline(fn) {
118
+ if (!this.rpcClient) {
119
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
120
+ }
121
+ logger_1.default.debug('Starting to record the timeline');
122
+ this.rpcClient.on('Timeline.eventRecorded', fn);
123
+ return await this.rpcClient.send('Timeline.start', {
124
+ appIdKey: this.appIdKey,
125
+ pageIdKey: this.pageIdKey,
126
+ });
127
+ }
128
+ async stopTimeline() {
129
+ if (!this.rpcClient) {
130
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
131
+ }
132
+ logger_1.default.debug('Stopping to record the timeline');
133
+ await this.rpcClient.send('Timeline.stop', {
134
+ appIdKey: this.appIdKey,
135
+ pageIdKey: this.pageIdKey,
136
+ });
137
+ }
138
+ /*
139
+ * Keep track of the client event listeners so they can be removed
140
+ */
141
+ addClientEventListener(eventName, listener) {
142
+ if (!this.rpcClient) {
143
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
144
+ }
145
+ this._clientEventListeners[eventName] = this._clientEventListeners[eventName] || [];
146
+ this._clientEventListeners[eventName].push(listener);
147
+ this.rpcClient.on(eventName, listener);
148
+ }
149
+ removeClientEventListener(eventName) {
150
+ if (!this.rpcClient) {
151
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
152
+ }
153
+ for (const listener of (this._clientEventListeners[eventName] || [])) {
154
+ this.rpcClient.off(eventName, listener);
155
+ }
156
+ }
157
+ startConsole(listener) {
158
+ logger_1.default.debug('Starting to listen for JavaScript console');
159
+ this.addClientEventListener('Console.messageAdded', listener);
160
+ this.addClientEventListener('Console.messageRepeatCountUpdated', listener);
161
+ }
162
+ stopConsole() {
163
+ logger_1.default.debug('Stopping to listen for JavaScript console');
164
+ this.removeClientEventListener('Console.messageAdded');
165
+ this.removeClientEventListener('Console.messageRepeatCountUpdated');
166
+ }
167
+ startNetwork(listener) {
168
+ logger_1.default.debug('Starting to listen for network events');
169
+ this.addClientEventListener('NetworkEvent', listener);
170
+ }
171
+ stopNetwork() {
172
+ logger_1.default.debug('Stopping to listen for network events');
173
+ this.removeClientEventListener('NetworkEvent');
174
+ }
175
+ set allowNavigationWithoutReload(allow) {
176
+ this._allowNavigationWithoutReload = allow;
177
+ }
178
+ get allowNavigationWithoutReload() {
179
+ return this._allowNavigationWithoutReload;
180
+ }
181
+ // Potentially this does not work for mobile safari
182
+ async overrideUserAgent(value) {
183
+ logger_1.default.debug('Setting overrideUserAgent');
184
+ if (!this.rpcClient) {
185
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
186
+ }
187
+ return await this.rpcClient.send('Page.overrideUserAgent', {
188
+ appIdKey: this.appIdKey,
189
+ pageIdKey: this.pageIdKey,
190
+ value
191
+ });
192
+ }
193
+ async getCookies() {
194
+ logger_1.default.debug('Getting cookies');
195
+ if (!this.rpcClient) {
196
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
197
+ }
198
+ return await this.rpcClient.send('Page.getCookies', {
199
+ appIdKey: this.appIdKey,
200
+ pageIdKey: this.pageIdKey
201
+ });
202
+ }
203
+ async setCookie(cookie) {
204
+ logger_1.default.debug('Setting cookie');
205
+ if (!this.rpcClient) {
206
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
207
+ }
208
+ return await this.rpcClient.send('Page.setCookie', {
209
+ appIdKey: this.appIdKey,
210
+ pageIdKey: this.pageIdKey,
211
+ cookie
212
+ });
213
+ }
214
+ async deleteCookie(cookieName, url) {
215
+ logger_1.default.debug(`Deleting cookie '${cookieName}' on '${url}'`);
216
+ if (!this.rpcClient) {
217
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
218
+ }
219
+ return await this.rpcClient.send('Page.deleteCookie', {
220
+ appIdKey: this.appIdKey,
221
+ pageIdKey: this.pageIdKey,
222
+ cookieName,
223
+ url,
224
+ });
225
+ }
226
+ async garbageCollect(timeoutMs = GARBAGE_COLLECT_TIMEOUT) {
227
+ logger_1.default.debug(`Garbage collecting with ${timeoutMs}ms timeout`);
228
+ if (!this.rpcClient) {
229
+ throw new Error(`rpcClient is undefined. Has 'initRpcClient' been called before?`);
230
+ }
231
+ try {
232
+ (0, utils_1.checkParams)({ appIdKey: this.appIdKey, pageIdKey: this.pageIdKey });
233
+ }
234
+ catch (err) {
235
+ logger_1.default.debug(`Unable to collect garbage at this time`);
236
+ return;
237
+ }
238
+ await bluebird_1.default.resolve(this.rpcClient.send('Heap.gc', {
239
+ appIdKey: this.appIdKey,
240
+ pageIdKey: this.pageIdKey,
241
+ })).timeout(timeoutMs)
242
+ .then(function gcSuccess() {
243
+ logger_1.default.debug(`Garbage collection successful`);
244
+ }).catch(function gcError(err) {
245
+ if (err instanceof bluebird_1.default.TimeoutError) {
246
+ logger_1.default.debug(`Garbage collection timed out after ${timeoutMs}ms`);
247
+ }
248
+ else {
249
+ logger_1.default.debug(`Unable to collect garbage: ${err.message}`);
250
+ }
251
+ });
252
+ }
253
+ async useAppDictLock(fn) {
254
+ return await this._lock.acquire('appDict', fn);
255
+ }
256
+ get skippedApps() {
257
+ return this._skippedApps || [];
258
+ }
228
259
  }
229
260
  exports.RemoteDebugger = RemoteDebugger;
230
- for (const [name, fn] of _lodash.default.toPairs(_mixins.mixins)) {
231
- RemoteDebugger.prototype[name] = fn;
261
+ for (const [name, fn] of lodash_1.default.toPairs(mixins_1.mixins)) {
262
+ RemoteDebugger.prototype[name] = fn;
232
263
  }
233
- for (const [name, event] of _lodash.default.toPairs(_mixins.events)) {
234
- RemoteDebugger[name] = event;
264
+ for (const [name, event] of lodash_1.default.toPairs(mixins_1.events)) {
265
+ RemoteDebugger[name] = event;
235
266
  }
236
- var _default = RemoteDebugger;
237
- exports.default = _default;
238
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JwYyIsIl91dGlscyIsIl9taXhpbnMiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3BhdGgiLCJfYXN5bmNMb2NrIiwiUkVNT1RFX0RFQlVHR0VSX1BPUlQiLCJleHBvcnRzIiwiU0FGQVJJX0JVTkRMRV9JRCIsIlJQQ19SRVNQT05TRV9USU1FT1VUX01TIiwiUEFHRV9SRUFEWV9USU1FT1VUIiwiR0FSQkFHRV9DT0xMRUNUX1RJTUVPVVQiLCJSZW1vdGVEZWJ1Z2dlciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsImxvZyIsImluZm8iLCJwYXRoIiwicmVzb2x2ZSIsImdldE1vZHVsZVJvb3QiLCJ2ZXJzaW9uIiwiYnVuZGxlSWQiLCJhZGRpdGlvbmFsQnVuZGxlSWRzIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTYWZhcmkiLCJpbmNsdWRlU2FmYXJpIiwidXNlTmV3U2FmYXJpIiwicGFnZUxvYWRNcyIsImhvc3QiLCJwb3J0Iiwic29ja2V0UGF0aCIsInBhZ2VSZWFkeVRpbWVvdXQiLCJyZW1vdGVEZWJ1Z1Byb3h5IiwiZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUiLCJsb2dGdWxsUmVzcG9uc2UiLCJsb2dBbGxDb21tdW5pY2F0aW9uIiwibG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJ3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsInNvY2tldENodW5rU2l6ZSIsImZ1bGxQYWdlSW5pdGlhbGl6YXRpb24iLCJkZWJ1ZyIsIl8iLCJpc05pbCIsImlzSW50ZWdlciIsIl9sb2NrIiwiQXN5bmNMb2NrIiwic2V0dXAiLCJhcHBEaWN0IiwiYXBwSWRLZXkiLCJwYWdlSWRLZXkiLCJwYWdlTG9hZGluZyIsIl9uYXZpZ2F0aW5nVG9QYWdlIiwiYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCIsInJwY0NsaWVudCIsIl9jbGllbnRFdmVudExpc3RlbmVycyIsInRlYXJkb3duIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiRVZFTlRfUEFHRV9DSEFOR0UiLCJFVkVOVF9ESVNDT05ORUNUIiwiaW5pdFJwY0NsaWVudCIsIlJwY0NsaWVudFNpbXVsYXRvciIsIm1lc3NhZ2VQcm94eSIsImlzQ29ubmVjdGVkIiwiX3RoaXMkcnBjQ2xpZW50IiwibGF1bmNoU2FmYXJpIiwic2VuZCIsInN0YXJ0VGltZWxpbmUiLCJmbiIsIm9uIiwic3RvcFRpbWVsaW5lIiwiYWRkQ2xpZW50RXZlbnRMaXN0ZW5lciIsImV2ZW50TmFtZSIsImxpc3RlbmVyIiwicHVzaCIsInJlbW92ZUNsaWVudEV2ZW50TGlzdGVuZXIiLCJvZmYiLCJzdGFydENvbnNvbGUiLCJzdG9wQ29uc29sZSIsInN0YXJ0TmV0d29yayIsInN0b3BOZXR3b3JrIiwiYWxsb3ciLCJfYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCIsIm92ZXJyaWRlVXNlckFnZW50IiwidmFsdWUiLCJnZXRDb29raWVzIiwic2V0Q29va2llIiwiY29va2llIiwiZGVsZXRlQ29va2llIiwiY29va2llTmFtZSIsInVybCIsImdhcmJhZ2VDb2xsZWN0IiwidGltZW91dE1zIiwiY2hlY2tQYXJhbXMiLCJlcnIiLCJCIiwidGltZW91dCIsInRoZW4iLCJnY1N1Y2Nlc3MiLCJjYXRjaCIsImdjRXJyb3IiLCJUaW1lb3V0RXJyb3IiLCJtZXNzYWdlIiwidXNlQXBwRGljdExvY2siLCJhY3F1aXJlIiwic2tpcHBlZEFwcHMiLCJfc2tpcHBlZEFwcHMiLCJuYW1lIiwidG9QYWlycyIsIm1peGlucyIsInByb3RvdHlwZSIsImV2ZW50IiwiZXZlbnRzIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3JlbW90ZS1kZWJ1Z2dlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBScGNDbGllbnRTaW11bGF0b3IgfSBmcm9tICcuL3JwYyc7XG5pbXBvcnQgeyBjaGVja1BhcmFtcywgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbWl4aW5zLCBldmVudHMgfSBmcm9tICcuL21peGlucyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuXG5jb25zdCBSRU1PVEVfREVCVUdHRVJfUE9SVCA9IDI3NzUzO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcblxuLyogSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHdlYmtpdCB0byByZXR1cm4gYSByZXNwb25zZSBiZWZvcmUgdGltaW5nIG91dCAqL1xuY29uc3QgUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVMgPSA1MDAwO1xuXG5jb25zdCBQQUdFX1JFQURZX1RJTUVPVVQgPSA1MDAwO1xuXG5jb25zdCBHQVJCQUdFX0NPTExFQ1RfVElNRU9VVCA9IDUwMDA7XG5cblxuY2xhc3MgUmVtb3RlRGVidWdnZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKlxuICAgKiBUaGUgY29uc3RydWN0b3IgdGFrZXMgYW4gb3B0cyBoYXNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gYnVuZGxlSWQgLSBpZCBvZiB0aGUgYXBwIGJlaW5nIGNvbm5lY3RlZCB0b1xuICAgKiAgIC0gYWRkaXRpb25hbEJ1bmRsZUlkcyAtIGFycmF5IG9mIHBvc3NpYmxlIGJ1bmRsZSBpZHMgdGhhdCB0aGUgaW5zcGVjdG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgcmV0dXJuXG4gICAqICAgLSBwbGF0Zm9ybVZlcnNpb24gLSB2ZXJzaW9uIG9mIGlPU1xuICAgKiAgIC0gdXNlTmV3U2FmYXJpIC0gZm9yIHdlYiBpbnNwZWN0b3IsIHdoZXRoZXIgdGhpcyBpcyBhIG5ldyBTYWZhcmkgaW5zdGFuY2VcbiAgICogICAtIHBhZ2VMb2FkTXMgLSB0aGUgdGltZSwgaW4gbXMsIHRoYXQgc2hvdWxkIGJlIHdhaXRlZCBmb3IgcGFnZSBsb2FkaW5nXG4gICAqICAgLSBob3N0IC0gdGhlIHJlbW90ZSBkZWJ1Z2dlcidzIGhvc3QgYWRkcmVzc1xuICAgKiAgIC0gcG9ydCAtIHRoZSByZW1vdGUgZGVidWdnZXIgcG9ydCB0aHJvdWdoIHdoaWNoIHRvIGNvbW11bmljYXRlXG4gICAqICAgLSBsb2dBbGxDb21tdW5pY2F0aW9uIC0gbG9nIHBsaXN0cyBzZW50IGFuZCByZWNlaXZlZCBmcm9tIFdlYiBJbnNwZWN0b3JcbiAgICogICAtIGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIC0gbG9nIGNvbW11bmljYXRpb24gZnJvbSBXZWIgSW5zcGVjdG9yIGFzIGhleCBkdW1wXG4gICAqICAgLSBzb2NrZXRDaHVua1NpemUgLSBzaXplLCBpbiBieXRlcywgb2YgY2h1bmtzIG9mIGRhdGEgc2VudCB0byBXZWIgSW5zcGVjdG9yIChyZWFsIGRldmljZSBvbmx5KVxuICAgKiAgIC0gd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggLSBUaGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIGEgc2luZ2xlIGRhdGEgZnJhbWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRldmljZSBjb21tdW5pY2F0aW9uIHByb3RvY29sXG4gICAqL1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGxvZy5pbmZvKGBSZW1vdGUgRGVidWdnZXIgdmVyc2lvbiAke3JlcXVpcmUocGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ3BhY2thZ2UuanNvbicpKS52ZXJzaW9ufWApO1xuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBhZGRpdGlvbmFsQnVuZGxlSWRzID0gW10sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBpc1NhZmFyaSA9IHRydWUsXG4gICAgICBpbmNsdWRlU2FmYXJpID0gZmFsc2UsXG4gICAgICB1c2VOZXdTYWZhcmkgPSBmYWxzZSxcbiAgICAgIHBhZ2VMb2FkTXMsXG4gICAgICBob3N0LFxuICAgICAgcG9ydCA9IFJFTU9URV9ERUJVR0dFUl9QT1JULFxuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIHBhZ2VSZWFkeVRpbWVvdXQgPSBQQUdFX1JFQURZX1RJTUVPVVQsXG4gICAgICByZW1vdGVEZWJ1Z1Byb3h5LFxuICAgICAgZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUgPSBmYWxzZSxcbiAgICAgIGxvZ0Z1bGxSZXNwb25zZSA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbixcbiAgICB9ID0gb3B0cztcblxuICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICB0aGlzLmFkZGl0aW9uYWxCdW5kbGVJZHMgPSBhZGRpdGlvbmFsQnVuZGxlSWRzO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcbiAgICB0aGlzLmluY2x1ZGVTYWZhcmkgPSBpbmNsdWRlU2FmYXJpO1xuICAgIHRoaXMudXNlTmV3U2FmYXJpID0gdXNlTmV3U2FmYXJpO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IHBhZ2VMb2FkTXM7XG4gICAgbG9nLmRlYnVnKGB1c2VOZXdTYWZhcmkgLS0+ICR7dGhpcy51c2VOZXdTYWZhcml9YCk7XG5cbiAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlID0gZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGU7XG5cbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgIHRoaXMucG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5zb2NrZXRQYXRoID0gc29ja2V0UGF0aDtcbiAgICB0aGlzLnJlbW90ZURlYnVnUHJveHkgPSByZW1vdGVEZWJ1Z1Byb3h5O1xuICAgIHRoaXMucGFnZVJlYWR5VGltZW91dCA9IHBhZ2VSZWFkeVRpbWVvdXQ7XG5cbiAgICB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24gPSBfLmlzTmlsKGxvZ0FsbENvbW11bmljYXRpb24pID8gISFsb2dGdWxsUmVzcG9uc2UgOiAhIWxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoKSkge1xuICAgICAgdGhpcy53ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCA9IHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLl9sb2NrID0gbmV3IEFzeW5jTG9jaygpO1xuICB9XG5cbiAgc2V0dXAgKCkge1xuICAgIC8vIGFwcCBoYW5kbGluZyBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5hcHBEaWN0ID0ge307XG4gICAgdGhpcy5hcHBJZEtleSA9IG51bGw7XG4gICAgdGhpcy5wYWdlSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9uYXZpZ2F0aW5nVG9QYWdlID0gZmFsc2U7XG4gICAgdGhpcy5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gZmFsc2U7XG5cbiAgICB0aGlzLnJwY0NsaWVudCA9IG51bGw7XG4gICAgdGhpcy5fY2xpZW50RXZlbnRMaXN0ZW5lcnMgPSB7fTtcbiAgfVxuXG4gIHRlYXJkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ0NsZWFuaW5nIHVwIGxpc3RlbmVycycpO1xuXG4gICAgdGhpcy5hcHBEaWN0ID0ge307XG4gICAgdGhpcy5hcHBJZEtleSA9IG51bGw7XG4gICAgdGhpcy5wYWdlSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMucnBjQ2xpZW50ID0gbnVsbDtcblxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFJlbW90ZURlYnVnZ2VyLkVWRU5UX1BBR0VfQ0hBTkdFKTtcbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhSZW1vdGVEZWJ1Z2dlci5FVkVOVF9ESVNDT05ORUNUKTtcbiAgfVxuXG4gIGluaXRScGNDbGllbnQgKCkge1xuICAgIHRoaXMucnBjQ2xpZW50ID0gbmV3IFJwY0NsaWVudFNpbXVsYXRvcih7XG4gICAgICBidW5kbGVJZDogdGhpcy5idW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICBpc1NhZmFyaTogdGhpcy5pc1NhZmFyaSxcbiAgICAgIGhvc3Q6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucG9ydCxcbiAgICAgIHNvY2tldFBhdGg6IHRoaXMuc29ja2V0UGF0aCxcbiAgICAgIG1lc3NhZ2VQcm94eTogdGhpcy5yZW1vdGVEZWJ1Z1Byb3h5LFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbjogdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXA6IHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAsXG4gICAgICBmdWxsUGFnZUluaXRpYWxpemF0aW9uOiB0aGlzLmZ1bGxQYWdlSW5pdGlhbGl6YXRpb24sXG4gICAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDogdGhpcy53ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0Nvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ycGNDbGllbnQ/LmlzQ29ubmVjdGVkO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2FmYXJpICgpIHtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdsYXVuY2hBcHBsaWNhdGlvbicsIHtcbiAgICAgIGJ1bmRsZUlkOiBTQUZBUklfQlVORExFX0lEXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydFRpbWVsaW5lIChmbikge1xuICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgdG8gcmVjb3JkIHRoZSB0aW1lbGluZScpO1xuICAgIHRoaXMucnBjQ2xpZW50Lm9uKCdUaW1lbGluZS5ldmVudFJlY29yZGVkJywgZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdUaW1lbGluZS5zdGFydCcsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3BUaW1lbGluZSAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byByZWNvcmQgdGhlIHRpbWVsaW5lJyk7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnVGltZWxpbmUuc3RvcCcsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIEtlZXAgdHJhY2sgb2YgdGhlIGNsaWVudCBldmVudCBsaXN0ZW5lcnMgc28gdGhleSBjYW4gYmUgcmVtb3ZlZFxuICAgKi9cbiAgYWRkQ2xpZW50RXZlbnRMaXN0ZW5lciAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2NsaWVudEV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSB0aGlzLl9jbGllbnRFdmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2NsaWVudEV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChsaXN0ZW5lcik7XG4gICAgdGhpcy5ycGNDbGllbnQub24oZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZW1vdmVDbGllbnRFdmVudExpc3RlbmVyIChldmVudE5hbWUpIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mICh0aGlzLl9jbGllbnRFdmVudExpc3RlbmVyc1tldmVudE5hbWVdIHx8IFtdKSkge1xuICAgICAgdGhpcy5ycGNDbGllbnQub2ZmKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0Q29uc29sZSAobGlzdGVuZXIpIHtcbiAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIHRvIGxpc3RlbiBmb3IgSmF2YVNjcmlwdCBjb25zb2xlJyk7XG4gICAgdGhpcy5hZGRDbGllbnRFdmVudExpc3RlbmVyKCdDb25zb2xlLm1lc3NhZ2VBZGRlZCcsIGxpc3RlbmVyKTtcbiAgICB0aGlzLmFkZENsaWVudEV2ZW50TGlzdGVuZXIoJ0NvbnNvbGUubWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCcsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHN0b3BDb25zb2xlICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIHRvIGxpc3RlbiBmb3IgSmF2YVNjcmlwdCBjb25zb2xlJyk7XG4gICAgdGhpcy5yZW1vdmVDbGllbnRFdmVudExpc3RlbmVyKCdDb25zb2xlLm1lc3NhZ2VBZGRlZCcpO1xuICAgIHRoaXMucmVtb3ZlQ2xpZW50RXZlbnRMaXN0ZW5lcignQ29uc29sZS5tZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkJyk7XG4gIH1cblxuICBzdGFydE5ldHdvcmsgKGxpc3RlbmVyKSB7XG4gICAgbG9nLmRlYnVnKCdTdGFydGluZyB0byBsaXN0ZW4gZm9yIG5ldHdvcmsgZXZlbnRzJyk7XG4gICAgdGhpcy5hZGRDbGllbnRFdmVudExpc3RlbmVyKCdOZXR3b3JrRXZlbnQnLCBsaXN0ZW5lcik7XG4gIH1cblxuICBzdG9wTmV0d29yayAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byBsaXN0ZW4gZm9yIG5ldHdvcmsgZXZlbnRzJyk7XG4gICAgdGhpcy5yZW1vdmVDbGllbnRFdmVudExpc3RlbmVyKCdOZXR3b3JrRXZlbnQnKTtcbiAgfVxuXG4gIHNldCBhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkIChhbGxvdykge1xuICAgIHRoaXMuX2FsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSBhbGxvdztcbiAgfVxuXG4gIGdldCBhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZDtcbiAgfVxuXG4gIC8vIFBvdGVudGlhbGx5IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgbW9iaWxlIHNhZmFyaVxuICBhc3luYyBvdmVycmlkZVVzZXJBZ2VudCAodmFsdWUpIHtcbiAgICBsb2cuZGVidWcoJ1NldHRpbmcgb3ZlcnJpZGVVc2VyQWdlbnQnKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnUGFnZS5vdmVycmlkZVVzZXJBZ2VudCcsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRDb29raWVzICgpIHtcbiAgICBsb2cuZGVidWcoJ0dldHRpbmcgY29va2llcycpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdQYWdlLmdldENvb2tpZXMnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNldENvb2tpZSAoY29va2llKSB7XG4gICAgbG9nLmRlYnVnKCdTZXR0aW5nIGNvb2tpZScpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdQYWdlLnNldENvb2tpZScsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIGNvb2tpZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQ29va2llIChjb29raWVOYW1lLCB1cmwpIHtcbiAgICBsb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfScgb24gJyR7dXJsfSdgKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnUGFnZS5kZWxldGVDb29raWUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgICBjb29raWVOYW1lLFxuICAgICAgdXJsLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2FyYmFnZUNvbGxlY3QgKHRpbWVvdXRNcyA9IEdBUkJBR0VfQ09MTEVDVF9USU1FT1VUKSB7XG4gICAgbG9nLmRlYnVnKGBHYXJiYWdlIGNvbGxlY3Rpbmcgd2l0aCAke3RpbWVvdXRNc31tcyB0aW1lb3V0YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNoZWNrUGFyYW1zKHthcHBJZEtleTogdGhpcy5hcHBJZEtleSwgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleX0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gY29sbGVjdCBnYXJiYWdlIGF0IHRoaXMgdGltZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IEIucmVzb2x2ZSh0aGlzLnJwY0NsaWVudC5zZW5kKCdIZWFwLmdjJywge1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pKS50aW1lb3V0KHRpbWVvdXRNcylcbiAgICAudGhlbihmdW5jdGlvbiBnY1N1Y2Nlc3MgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgIGxvZy5kZWJ1ZyhgR2FyYmFnZSBjb2xsZWN0aW9uIHN1Y2Nlc3NmdWxgKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiBnY0Vycm9yIChlcnIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICBsb2cuZGVidWcoYEdhcmJhZ2UgY29sbGVjdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIGNvbGxlY3QgZ2FyYmFnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVzZUFwcERpY3RMb2NrIChmbikge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9sb2NrLmFjcXVpcmUoJ2FwcERpY3QnLCBmbik7XG4gIH1cblxuICBnZXQgc2tpcHBlZEFwcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9za2lwcGVkQXBwcyB8fCBbXTtcbiAgfVxufVxuXG5mb3IgKGNvbnN0IFtuYW1lLCBmbl0gb2YgXy50b1BhaXJzKG1peGlucykpIHtcbiAgUmVtb3RlRGVidWdnZXIucHJvdG90eXBlW25hbWVdID0gZm47XG59XG5cbmZvciAoY29uc3QgW25hbWUsIGV2ZW50XSBvZiBfLnRvUGFpcnMoZXZlbnRzKSkge1xuICBSZW1vdGVEZWJ1Z2dlcltuYW1lXSA9IGV2ZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBSZW1vdGVEZWJ1Z2dlcjtcbmV4cG9ydCB7XG4gIFJlbW90ZURlYnVnZ2VyLCBSRU1PVEVfREVCVUdHRVJfUE9SVCwgUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVMsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLFVBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLE1BQU1VLG9CQUFvQixHQUFHLEtBQUs7QUFBQ0MsT0FBQSxDQUFBRCxvQkFBQSxHQUFBQSxvQkFBQTtBQUNuQyxNQUFNRSxnQkFBZ0IsR0FBRyx3QkFBd0I7QUFHakQsTUFBTUMsdUJBQXVCLEdBQUcsSUFBSTtBQUFDRixPQUFBLENBQUFFLHVCQUFBLEdBQUFBLHVCQUFBO0FBRXJDLE1BQU1DLGtCQUFrQixHQUFHLElBQUk7QUFFL0IsTUFBTUMsdUJBQXVCLEdBQUcsSUFBSTtBQUdwQyxNQUFNQyxjQUFjLFNBQVNDLG9CQUFZLENBQUM7RUFpQnhDQyxXQUFXQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsS0FBSyxDQUFDLENBQUM7SUFFUEMsZUFBRyxDQUFDQyxJQUFJLENBQUUsMkJBQTBCckIsT0FBTyxDQUFDc0IsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsRUFBQyxDQUFDLEVB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
267
+ exports.default = RemoteDebugger;
268
+ //# sourceMappingURL=remote-debugger.js.map