appium-remote-debugger 9.1.3 → 9.1.4

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 (39) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/build/index.js +1 -6
  3. package/build/lib/atoms.js +1 -22
  4. package/build/lib/atoms.js.map +1 -0
  5. package/build/lib/logger.js +1 -5
  6. package/build/lib/logger.js.map +1 -0
  7. package/build/lib/mixins/connect.js +5 -69
  8. package/build/lib/mixins/connect.js.map +1 -0
  9. package/build/lib/mixins/events.js +1 -3
  10. package/build/lib/mixins/events.js.map +1 -0
  11. package/build/lib/mixins/execute.js +3 -34
  12. package/build/lib/mixins/execute.js.map +1 -0
  13. package/build/lib/mixins/index.js +1 -9
  14. package/build/lib/mixins/index.js.map +1 -0
  15. package/build/lib/mixins/message-handlers.js +1 -33
  16. package/build/lib/mixins/message-handlers.js.map +1 -0
  17. package/build/lib/mixins/navigate.js +4 -52
  18. package/build/lib/mixins/navigate.js.map +1 -0
  19. package/build/lib/protocol/index.js +20 -7
  20. package/build/lib/protocol/index.js.map +1 -0
  21. package/build/lib/remote-debugger-real-device.js +1 -9
  22. package/build/lib/remote-debugger-real-device.js.map +1 -0
  23. package/build/lib/remote-debugger.js +2 -61
  24. package/build/lib/remote-debugger.js.map +1 -0
  25. package/build/lib/rpc/index.js +1 -5
  26. package/build/lib/rpc/index.js.map +1 -0
  27. package/build/lib/rpc/remote-messages.js +5 -28
  28. package/build/lib/rpc/remote-messages.js.map +1 -0
  29. package/build/lib/rpc/rpc-client-real-device.js +1 -16
  30. package/build/lib/rpc/rpc-client-real-device.js.map +1 -0
  31. package/build/lib/rpc/rpc-client-simulator.js +4 -30
  32. package/build/lib/rpc/rpc-client-simulator.js.map +1 -0
  33. package/build/lib/rpc/rpc-client.js +13 -109
  34. package/build/lib/rpc/rpc-client.js.map +1 -0
  35. package/build/lib/rpc/rpc-message-handler.js +1 -52
  36. package/build/lib/rpc/rpc-message-handler.js.map +1 -0
  37. package/build/lib/utils.js +9 -44
  38. package/build/lib/utils.js.map +1 -0
  39. package/package.json +4 -3
package/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ ## [9.1.4](https://github.com/appium/appium-remote-debugger/compare/v9.1.3...v9.1.4) (2022-11-06)
package/build/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -24,13 +23,9 @@ Object.defineProperty(exports, "RemoteDebuggerRealDevice", {
24
23
  }
25
24
  });
26
25
  exports.createRemoteDebugger = createRemoteDebugger;
27
-
28
26
  require("source-map-support/register");
29
-
30
27
  var _remoteDebugger = require("./lib/remote-debugger");
31
-
32
28
  var _remoteDebuggerRealDevice = _interopRequireDefault(require("./lib/remote-debugger-real-device"));
33
-
34
29
  function createRemoteDebugger(opts, realDevice = false) {
35
30
  if (realDevice) {
36
31
  return new _remoteDebuggerRealDevice.default(opts);
@@ -38,4 +33,4 @@ function createRemoteDebugger(opts, realDevice = false) {
38
33
  return new _remoteDebugger.RemoteDebugger(opts);
39
34
  }
40
35
  }
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsIm9wdHMiLCJyZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXIiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdGVEZWJ1Z2dlciwgUkVNT1RFX0RFQlVHR0VSX1BPUlQgfSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXItcmVhbC1kZXZpY2UnO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZURlYnVnZ2VyIChvcHRzLCByZWFsRGV2aWNlID0gZmFsc2UpIHtcbiAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZShvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyKG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlLFxuICBSRU1PVEVfREVCVUdHRVJfUE9SVCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsU0FBU0Esb0JBQVQsQ0FBK0JDLElBQS9CLEVBQXFDQyxVQUFVLEdBQUcsS0FBbEQsRUFBeUQ7RUFDdkQsSUFBSUEsVUFBSixFQUFnQjtJQUNkLE9BQU8sSUFBSUMsaUNBQUosQ0FBNkJGLElBQTdCLENBQVA7RUFDRCxDQUZELE1BRU87SUFDTCxPQUFPLElBQUlHLDhCQUFKLENBQW1CSCxJQUFuQixDQUFQO0VBQ0Q7QUFDRiJ9
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVSZW1vdGVEZWJ1Z2dlciIsIm9wdHMiLCJyZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlIiwiUmVtb3RlRGVidWdnZXIiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdGVEZWJ1Z2dlciwgUkVNT1RFX0RFQlVHR0VSX1BPUlQgfSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZSBmcm9tICcuL2xpYi9yZW1vdGUtZGVidWdnZXItcmVhbC1kZXZpY2UnO1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbW90ZURlYnVnZ2VyIChvcHRzLCByZWFsRGV2aWNlID0gZmFsc2UpIHtcbiAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyUmVhbERldmljZShvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlbW90ZURlYnVnZ2VyKG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciwgUmVtb3RlRGVidWdnZXJSZWFsRGV2aWNlLFxuICBSRU1PVEVfREVCVUdHRVJfUE9SVCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLFNBQVNBLG9CQUFvQixDQUFFQyxJQUFJLEVBQUVDLFVBQVUsR0FBRyxLQUFLLEVBQUU7RUFDdkQsSUFBSUEsVUFBVSxFQUFFO0lBQ2QsT0FBTyxJQUFJQyxpQ0FBd0IsQ0FBQ0YsSUFBSSxDQUFDO0VBQzNDLENBQUMsTUFBTTtJQUNMLE9BQU8sSUFBSUcsOEJBQWMsQ0FBQ0gsSUFBSSxDQUFDO0VBQ2pDO0FBQ0YifQ==
@@ -1,80 +1,59 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
8
  exports.getAtom = getAtom;
10
9
  exports.getScriptForAtom = getScriptForAtom;
11
-
12
10
  require("source-map-support/register");
13
-
14
11
  var _support = require("appium/support");
15
-
16
12
  var _path = _interopRequireDefault(require("path"));
17
-
18
13
  var _lodash = _interopRequireDefault(require("lodash"));
19
-
20
14
  var _logger = _interopRequireDefault(require("./logger"));
21
-
22
15
  const atomsCache = {};
23
-
24
16
  const inBuildDir = __filename.includes('build/lib/atoms');
25
-
26
17
  function getAtomFileName(atomName) {
27
18
  return inBuildDir ? _path.default.resolve(__dirname, '..', '..', 'atoms', `${atomName}.js`) : _path.default.resolve(__dirname, '..', 'atoms', `${atomName}.js`);
28
19
  }
29
-
30
20
  async function getAtom(atomName) {
31
21
  if (!_lodash.default.has(atomsCache, atomName)) {
32
22
  const atomFileName = getAtomFileName(atomName);
33
-
34
23
  try {
35
24
  atomsCache[atomName] = await _support.fs.readFile(atomFileName);
36
25
  } catch (e) {
37
26
  throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);
38
27
  }
39
28
  }
40
-
41
29
  return atomsCache[atomName];
42
30
  }
43
-
44
31
  async function wrapScriptForFrame(script, frame) {
45
32
  _logger.default.debug(`Wrapping script for frame '${frame}'`);
46
-
47
33
  const elFromCache = await getAtom('get_element_from_cache');
48
34
  return `(function (window) { var document = window.document; ` + `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;
49
35
  }
50
-
51
36
  async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
52
37
  const atomSrc = await getAtom(atom);
53
38
  let script;
54
-
55
39
  if (frames.length > 0) {
56
40
  script = atomSrc;
57
-
58
41
  for (const frame of frames) {
59
42
  script = await wrapScriptForFrame(script, frame);
60
43
  }
61
44
  } else {
62
45
  _logger.default.debug(`Executing '${atom}' atom in default context`);
63
-
64
46
  script = `(${atomSrc})`;
65
47
  }
66
48
 
67
49
  args = args.map(JSON.stringify);
68
-
69
50
  if (asyncCallBack) {
70
51
  script += `(${args.join(',')}, ${asyncCallBack}, true)`;
71
52
  } else {
72
53
  script += `(${args.join(',')})`;
73
54
  }
74
-
75
55
  return script;
76
56
  }
77
-
78
57
  var _default = getAtom;
79
58
  exports.default = _default;
80
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhdG9tc0NhY2hlIiwiaW5CdWlsZERpciIsIl9fZmlsZW5hbWUiLCJpbmNsdWRlcyIsImdldEF0b21GaWxlTmFtZSIsImF0b21OYW1lIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJnZXRBdG9tIiwiXyIsImhhcyIsImF0b21GaWxlTmFtZSIsImZzIiwicmVhZEZpbGUiLCJlIiwiRXJyb3IiLCJ3cmFwU2NyaXB0Rm9yRnJhbWUiLCJzY3JpcHQiLCJmcmFtZSIsImxvZyIsImRlYnVnIiwiZWxGcm9tQ2FjaGUiLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRTY3JpcHRGb3JBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJhc3luY0NhbGxCYWNrIiwiYXRvbVNyYyIsImxlbmd0aCIsIm1hcCIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi9saWIvYXRvbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuXG5jb25zdCBhdG9tc0NhY2hlID0ge307XG5cbmNvbnN0IGluQnVpbGREaXIgPSBfX2ZpbGVuYW1lLmluY2x1ZGVzKCdidWlsZC9saWIvYXRvbXMnKTtcblxuZnVuY3Rpb24gZ2V0QXRvbUZpbGVOYW1lIChhdG9tTmFtZSkge1xuICByZXR1cm4gaW5CdWlsZERpclxuICAgID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYClcbiAgICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdhdG9tcycsIGAke2F0b21OYW1lfS5qc2ApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdG9tIChhdG9tTmFtZSkge1xuICAvLyBjaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIGFuIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhhdG9tc0NhY2hlLCBhdG9tTmFtZSkpIHtcbiAgICBjb25zdCBhdG9tRmlsZU5hbWUgPSBnZXRBdG9tRmlsZU5hbWUoYXRvbU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhdG9tc0NhY2hlW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0b21zQ2FjaGVbYXRvbU5hbWVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwU2NyaXB0Rm9yRnJhbWUgKHNjcmlwdCwgZnJhbWUpIHtcbiAgbG9nLmRlYnVnKGBXcmFwcGluZyBzY3JpcHQgZm9yIGZyYW1lICcke2ZyYW1lfSdgKTtcbiAgY29uc3QgZWxGcm9tQ2FjaGUgPSBhd2FpdCBnZXRBdG9tKCdnZXRfZWxlbWVudF9mcm9tX2NhY2hlJyk7XG4gIHJldHVybiBgKGZ1bmN0aW9uICh3aW5kb3cpIHsgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OyBgICtcbiAgICAgICAgIGByZXR1cm4gKCR7c2NyaXB0fSk7IH0pKCgke2VsRnJvbUNhY2hlLnRvU3RyaW5nKCd1dGY4Jyl9KSgke0pTT04uc3RyaW5naWZ5KGZyYW1lKX0pKWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdEZvckF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcyA9IFtdLCBhc3luY0NhbGxCYWNrID0gbnVsbCkge1xuICBjb25zdCBhdG9tU3JjID0gYXdhaXQgZ2V0QXRvbShhdG9tKTtcbiAgbGV0IHNjcmlwdDtcbiAgaWYgKGZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgc2NyaXB0ID0gYXRvbVNyYztcbiAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGZyYW1lcykge1xuICAgICAgc2NyaXB0ID0gYXdhaXQgd3JhcFNjcmlwdEZvckZyYW1lKHNjcmlwdCwgZnJhbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAnJHthdG9tfScgYXRvbSBpbiBkZWZhdWx0IGNvbnRleHRgKTtcbiAgICBzY3JpcHQgPSBgKCR7YXRvbVNyY30pYDtcbiAgfVxuXG4gIC8vIGFkZCB0aGUgYXJndW1lbnRzLCBhcyBzdHJpbmdzXG4gIGFyZ3MgPSBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSk7XG4gIGlmIChhc3luY0NhbGxCYWNrKSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0sICR7YXN5bmNDYWxsQmFja30sIHRydWUpYDtcbiAgfSBlbHNlIHtcbiAgICBzY3JpcHQgKz0gYCgke2FyZ3Muam9pbignLCcpfSlgO1xuICB9XG5cbiAgcmV0dXJuIHNjcmlwdDtcbn1cblxuZXhwb3J0IHsgZ2V0QXRvbSwgZ2V0U2NyaXB0Rm9yQXRvbSB9O1xuZXhwb3J0IGRlZmF1bHQgZ2V0QXRvbTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBRyxFQUFuQjs7QUFFQSxNQUFNQyxVQUFVLEdBQUdDLFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQixpQkFBcEIsQ0FBbkI7O0FBRUEsU0FBU0MsZUFBVCxDQUEwQkMsUUFBMUIsRUFBb0M7RUFDbEMsT0FBT0osVUFBVSxHQUNiSyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxPQUFwQyxFQUE4QyxHQUFFSCxRQUFTLEtBQXpELENBRGEsR0FFYkMsYUFBQSxDQUFLQyxPQUFMLENBQWFDLFNBQWIsRUFBd0IsSUFBeEIsRUFBOEIsT0FBOUIsRUFBd0MsR0FBRUgsUUFBUyxLQUFuRCxDQUZKO0FBR0Q7O0FBRUQsZUFBZUksT0FBZixDQUF3QkosUUFBeEIsRUFBa0M7RUFFaEMsSUFBSSxDQUFDSyxlQUFBLENBQUVDLEdBQUYsQ0FBTVgsVUFBTixFQUFrQkssUUFBbEIsQ0FBTCxFQUFrQztJQUNoQyxNQUFNTyxZQUFZLEdBQUdSLGVBQWUsQ0FBQ0MsUUFBRCxDQUFwQzs7SUFDQSxJQUFJO01BQ0ZMLFVBQVUsQ0FBQ0ssUUFBRCxDQUFWLEdBQXVCLE1BQU1RLFdBQUEsQ0FBR0MsUUFBSCxDQUFZRixZQUFaLENBQTdCO0lBQ0QsQ0FGRCxDQUVFLE9BQU9HLENBQVAsRUFBVTtNQUNWLE1BQU0sSUFBSUMsS0FBSixDQUFXLHdCQUF1QlgsUUFBUyxnQkFBZU8sWUFBYSxHQUF2RSxDQUFOO0lBQ0Q7RUFDRjs7RUFFRCxPQUFPWixVQUFVLENBQUNLLFFBQUQsQ0FBakI7QUFDRDs7QUFFRCxlQUFlWSxrQkFBZixDQUFtQ0MsTUFBbkMsRUFBMkNDLEtBQTNDLEVBQWtEO0VBQ2hEQyxlQUFBLENBQUlDLEtBQUosQ0FBVyw4QkFBNkJGLEtBQU0sR0FBOUM7O0VBQ0EsTUFBTUcsV0FBVyxHQUFHLE1BQU1iLE9BQU8sQ0FBQyx3QkFBRCxDQUFqQztFQUNBLE9BQVEsdURBQUQsR0FDQyxXQUFVUyxNQUFPLFVBQVNJLFdBQVcsQ0FBQ0MsUUFBWixDQUFxQixNQUFyQixDQUE2QixLQUFJQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sS0FBZixDQUFzQixJQUR6RjtBQUVEOztBQUVELGVBQWVPLGdCQUFmLENBQWlDQyxJQUFqQyxFQUF1Q0MsSUFBdkMsRUFBNkNDLE1BQU0sR0FBRyxFQUF0RCxFQUEwREMsYUFBYSxHQUFHLElBQTFFLEVBQWdGO0VBQzlFLE1BQU1DLE9BQU8sR0FBRyxNQUFNdEIsT0FBTyxDQUFDa0IsSUFBRCxDQUE3QjtFQUNBLElBQUlULE1BQUo7O0VBQ0EsSUFBSVcsTUFBTSxDQUFDRyxNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0lBQ3JCZCxNQUFNLEdBQUdhLE9BQVQ7O0lBQ0EsS0FBSyxNQUFNWixLQUFYLElBQW9CVSxNQUFwQixFQUE0QjtNQUMxQlgsTUFBTSxHQUFHLE1BQU1ELGtCQUFrQixDQUFDQyxNQUFELEVBQVNDLEtBQVQsQ0FBakM7SUFDRDtFQUNGLENBTEQsTUFLTztJQUNMQyxlQUFBLENBQUlDLEtBQUosQ0FBVyxjQUFhTSxJQUFLLDJCQUE3Qjs7SUFDQVQsTUFBTSxHQUFJLElBQUdhLE9BQVEsR0FBckI7RUFDRDs7RUFHREgsSUFBSSxHQUFHQSxJQUFJLENBQUNLLEdBQUwsQ0FBU1QsSUFBSSxDQUFDQyxTQUFkLENBQVA7O0VBQ0EsSUFBSUssYUFBSixFQUFtQjtJQUNqQlosTUFBTSxJQUFLLElBQUdVLElBQUksQ0FBQ00sSUFBTCxDQUFVLEdBQVYsQ0FBZSxLQUFJSixhQUFjLFNBQS9DO0VBQ0QsQ0FGRCxNQUVPO0lBQ0xaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUwsQ0FBVSxHQUFWLENBQWUsR0FBN0I7RUFDRDs7RUFFRCxPQUFPaEIsTUFBUDtBQUNEOztlQUdjVCxPIn0=
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhdG9tc0NhY2hlIiwiaW5CdWlsZERpciIsIl9fZmlsZW5hbWUiLCJpbmNsdWRlcyIsImdldEF0b21GaWxlTmFtZSIsImF0b21OYW1lIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJnZXRBdG9tIiwiXyIsImhhcyIsImF0b21GaWxlTmFtZSIsImZzIiwicmVhZEZpbGUiLCJlIiwiRXJyb3IiLCJ3cmFwU2NyaXB0Rm9yRnJhbWUiLCJzY3JpcHQiLCJmcmFtZSIsImxvZyIsImRlYnVnIiwiZWxGcm9tQ2FjaGUiLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRTY3JpcHRGb3JBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJhc3luY0NhbGxCYWNrIiwiYXRvbVNyYyIsImxlbmd0aCIsIm1hcCIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi9saWIvYXRvbXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuXG5jb25zdCBhdG9tc0NhY2hlID0ge307XG5cbmNvbnN0IGluQnVpbGREaXIgPSBfX2ZpbGVuYW1lLmluY2x1ZGVzKCdidWlsZC9saWIvYXRvbXMnKTtcblxuZnVuY3Rpb24gZ2V0QXRvbUZpbGVOYW1lIChhdG9tTmFtZSkge1xuICByZXR1cm4gaW5CdWlsZERpclxuICAgID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYClcbiAgICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdhdG9tcycsIGAke2F0b21OYW1lfS5qc2ApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdG9tIChhdG9tTmFtZSkge1xuICAvLyBjaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIGFuIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhhdG9tc0NhY2hlLCBhdG9tTmFtZSkpIHtcbiAgICBjb25zdCBhdG9tRmlsZU5hbWUgPSBnZXRBdG9tRmlsZU5hbWUoYXRvbU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhdG9tc0NhY2hlW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0b21zQ2FjaGVbYXRvbU5hbWVdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cmFwU2NyaXB0Rm9yRnJhbWUgKHNjcmlwdCwgZnJhbWUpIHtcbiAgbG9nLmRlYnVnKGBXcmFwcGluZyBzY3JpcHQgZm9yIGZyYW1lICcke2ZyYW1lfSdgKTtcbiAgY29uc3QgZWxGcm9tQ2FjaGUgPSBhd2FpdCBnZXRBdG9tKCdnZXRfZWxlbWVudF9mcm9tX2NhY2hlJyk7XG4gIHJldHVybiBgKGZ1bmN0aW9uICh3aW5kb3cpIHsgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OyBgICtcbiAgICAgICAgIGByZXR1cm4gKCR7c2NyaXB0fSk7IH0pKCgke2VsRnJvbUNhY2hlLnRvU3RyaW5nKCd1dGY4Jyl9KSgke0pTT04uc3RyaW5naWZ5KGZyYW1lKX0pKWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNjcmlwdEZvckF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcyA9IFtdLCBhc3luY0NhbGxCYWNrID0gbnVsbCkge1xuICBjb25zdCBhdG9tU3JjID0gYXdhaXQgZ2V0QXRvbShhdG9tKTtcbiAgbGV0IHNjcmlwdDtcbiAgaWYgKGZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgc2NyaXB0ID0gYXRvbVNyYztcbiAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGZyYW1lcykge1xuICAgICAgc2NyaXB0ID0gYXdhaXQgd3JhcFNjcmlwdEZvckZyYW1lKHNjcmlwdCwgZnJhbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAnJHthdG9tfScgYXRvbSBpbiBkZWZhdWx0IGNvbnRleHRgKTtcbiAgICBzY3JpcHQgPSBgKCR7YXRvbVNyY30pYDtcbiAgfVxuXG4gIC8vIGFkZCB0aGUgYXJndW1lbnRzLCBhcyBzdHJpbmdzXG4gIGFyZ3MgPSBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSk7XG4gIGlmIChhc3luY0NhbGxCYWNrKSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0sICR7YXN5bmNDYWxsQmFja30sIHRydWUpYDtcbiAgfSBlbHNlIHtcbiAgICBzY3JpcHQgKz0gYCgke2FyZ3Muam9pbignLCcpfSlgO1xuICB9XG5cbiAgcmV0dXJuIHNjcmlwdDtcbn1cblxuZXhwb3J0IHsgZ2V0QXRvbSwgZ2V0U2NyaXB0Rm9yQXRvbSB9O1xuZXhwb3J0IGRlZmF1bHQgZ2V0QXRvbTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQixNQUFNQyxVQUFVLEdBQUdDLFVBQVUsQ0FBQ0MsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0FBRXpELFNBQVNDLGVBQWUsQ0FBRUMsUUFBUSxFQUFFO0VBQ2xDLE9BQU9KLFVBQVUsR0FDYkssYUFBSSxDQUFDQyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRyxHQUFFSCxRQUFTLEtBQUksQ0FBQyxHQUM5REMsYUFBSSxDQUFDQyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFHLEdBQUVILFFBQVMsS0FBSSxDQUFDO0FBQzlEO0FBRUEsZUFBZUksT0FBTyxDQUFFSixRQUFRLEVBQUU7RUFFaEMsSUFBSSxDQUFDSyxlQUFDLENBQUNDLEdBQUcsQ0FBQ1gsVUFBVSxFQUFFSyxRQUFRLENBQUMsRUFBRTtJQUNoQyxNQUFNTyxZQUFZLEdBQUdSLGVBQWUsQ0FBQ0MsUUFBUSxDQUFDO0lBQzlDLElBQUk7TUFDRkwsVUFBVSxDQUFDSyxRQUFRLENBQUMsR0FBRyxNQUFNUSxXQUFFLENBQUNDLFFBQVEsQ0FBQ0YsWUFBWSxDQUFDO0lBQ3hELENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7TUFDVixNQUFNLElBQUlDLEtBQUssQ0FBRSx3QkFBdUJYLFFBQVMsZ0JBQWVPLFlBQWEsR0FBRSxDQUFDO0lBQ2xGO0VBQ0Y7RUFFQSxPQUFPWixVQUFVLENBQUNLLFFBQVEsQ0FBQztBQUM3QjtBQUVBLGVBQWVZLGtCQUFrQixDQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtFQUNoREMsZUFBRyxDQUFDQyxLQUFLLENBQUUsOEJBQTZCRixLQUFNLEdBQUUsQ0FBQztFQUNqRCxNQUFNRyxXQUFXLEdBQUcsTUFBTWIsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0VBQzNELE9BQVEsdURBQXNELEdBQ3RELFdBQVVTLE1BQU8sVUFBU0ksV0FBVyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFFLEtBQUlDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTixLQUFLLENBQUUsSUFBRztBQUM5RjtBQUVBLGVBQWVPLGdCQUFnQixDQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsTUFBTSxHQUFHLEVBQUUsRUFBRUMsYUFBYSxHQUFHLElBQUksRUFBRTtFQUM5RSxNQUFNQyxPQUFPLEdBQUcsTUFBTXRCLE9BQU8sQ0FBQ2tCLElBQUksQ0FBQztFQUNuQyxJQUFJVCxNQUFNO0VBQ1YsSUFBSVcsTUFBTSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3JCZCxNQUFNLEdBQUdhLE9BQU87SUFDaEIsS0FBSyxNQUFNWixLQUFLLElBQUlVLE1BQU0sRUFBRTtNQUMxQlgsTUFBTSxHQUFHLE1BQU1ELGtCQUFrQixDQUFDQyxNQUFNLEVBQUVDLEtBQUssQ0FBQztJQUNsRDtFQUNGLENBQUMsTUFBTTtJQUNMQyxlQUFHLENBQUNDLEtBQUssQ0FBRSxjQUFhTSxJQUFLLDJCQUEwQixDQUFDO0lBQ3hEVCxNQUFNLEdBQUksSUFBR2EsT0FBUSxHQUFFO0VBQ3pCOztFQUdBSCxJQUFJLEdBQUdBLElBQUksQ0FBQ0ssR0FBRyxDQUFDVCxJQUFJLENBQUNDLFNBQVMsQ0FBQztFQUMvQixJQUFJSyxhQUFhLEVBQUU7SUFDakJaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUksQ0FBQyxHQUFHLENBQUUsS0FBSUosYUFBYyxTQUFRO0VBQ3pELENBQUMsTUFBTTtJQUNMWixNQUFNLElBQUssSUFBR1UsSUFBSSxDQUFDTSxJQUFJLENBQUMsR0FBRyxDQUFFLEdBQUU7RUFDakM7RUFFQSxPQUFPaEIsTUFBTTtBQUNmO0FBQUMsZUFHY1QsT0FBTztBQUFBIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atoms.js","names":["atomsCache","inBuildDir","__filename","includes","getAtomFileName","atomName","path","resolve","__dirname","getAtom","_","has","atomFileName","fs","readFile","e","Error","wrapScriptForFrame","script","frame","log","debug","elFromCache","toString","JSON","stringify","getScriptForAtom","atom","args","frames","asyncCallBack","atomSrc","length","map","join"],"sources":["../../lib/atoms.js"],"sourcesContent":["import { fs } from 'appium/support';\nimport path from 'path';\nimport _ from 'lodash';\nimport log from './logger';\n\n\nconst atomsCache = {};\n\nconst inBuildDir = __filename.includes('build/lib/atoms');\n\nfunction getAtomFileName (atomName) {\n return inBuildDir\n ? path.resolve(__dirname, '..', '..', 'atoms', `${atomName}.js`)\n : path.resolve(__dirname, '..', 'atoms', `${atomName}.js`);\n}\n\nasync function getAtom (atomName) {\n // check if we have already loaded an cached this atom\n if (!_.has(atomsCache, atomName)) {\n const atomFileName = getAtomFileName(atomName);\n try {\n atomsCache[atomName] = await fs.readFile(atomFileName);\n } catch (e) {\n throw new Error(`Unable to load Atom '${atomName}' from file '${atomFileName}'`);\n }\n }\n\n return atomsCache[atomName];\n}\n\nasync function wrapScriptForFrame (script, frame) {\n log.debug(`Wrapping script for frame '${frame}'`);\n const elFromCache = await getAtom('get_element_from_cache');\n return `(function (window) { var document = window.document; ` +\n `return (${script}); })((${elFromCache.toString('utf8')})(${JSON.stringify(frame)}))`;\n}\n\nasync function getScriptForAtom (atom, args, frames = [], asyncCallBack = null) {\n const atomSrc = await getAtom(atom);\n let script;\n if (frames.length > 0) {\n script = atomSrc;\n for (const frame of frames) {\n script = await wrapScriptForFrame(script, frame);\n }\n } else {\n log.debug(`Executing '${atom}' atom in default context`);\n script = `(${atomSrc})`;\n }\n\n // add the arguments, as strings\n args = args.map(JSON.stringify);\n if (asyncCallBack) {\n script += `(${args.join(',')}, ${asyncCallBack}, true)`;\n } else {\n script += `(${args.join(',')})`;\n }\n\n return script;\n}\n\nexport { getAtom, getScriptForAtom };\nexport default getAtom;\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AAGA,MAAMA,UAAU,GAAG,CAAC,CAAC;AAErB,MAAMC,UAAU,GAAGC,UAAU,CAACC,QAAQ,CAAC,iBAAiB,CAAC;AAEzD,SAASC,eAAe,CAAEC,QAAQ,EAAE;EAClC,OAAOJ,UAAU,GACbK,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAG,GAAEH,QAAS,KAAI,CAAC,GAC9DC,aAAI,CAACC,OAAO,CAACC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAG,GAAEH,QAAS,KAAI,CAAC;AAC9D;AAEA,eAAeI,OAAO,CAAEJ,QAAQ,EAAE;EAEhC,IAAI,CAACK,eAAC,CAACC,GAAG,CAACX,UAAU,EAAEK,QAAQ,CAAC,EAAE;IAChC,MAAMO,YAAY,GAAGR,eAAe,CAACC,QAAQ,CAAC;IAC9C,IAAI;MACFL,UAAU,CAACK,QAAQ,CAAC,GAAG,MAAMQ,WAAE,CAACC,QAAQ,CAACF,YAAY,CAAC;IACxD,CAAC,CAAC,OAAOG,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBX,QAAS,gBAAeO,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOZ,UAAU,CAACK,QAAQ,CAAC;AAC7B;AAEA,eAAeY,kBAAkB,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMb,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUS,MAAO,UAASI,WAAW,CAACC,QAAQ,CAAC,MAAM,CAAE,KAAIC,IAAI,CAACC,SAAS,CAACN,KAAK,CAAE,IAAG;AAC9F;AAEA,eAAeO,gBAAgB,CAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,GAAG,EAAE,EAAEC,aAAa,GAAG,IAAI,EAAE;EAC9E,MAAMC,OAAO,GAAG,MAAMtB,OAAO,CAACkB,IAAI,CAAC;EACnC,IAAIT,MAAM;EACV,IAAIW,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;IACrBd,MAAM,GAAGa,OAAO;IAChB,KAAK,MAAMZ,KAAK,IAAIU,MAAM,EAAE;MAC1BX,MAAM,GAAG,MAAMD,kBAAkB,CAACC,MAAM,EAAEC,KAAK,CAAC;IAClD;EACF,CAAC,MAAM;IACLC,eAAG,CAACC,KAAK,CAAE,cAAaM,IAAK,2BAA0B,CAAC;IACxDT,MAAM,GAAI,IAAGa,OAAQ,GAAE;EACzB;;EAGAH,IAAI,GAAGA,IAAI,CAACK,GAAG,CAACT,IAAI,CAACC,SAAS,CAAC;EAC/B,IAAIK,aAAa,EAAE;IACjBZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,KAAIJ,aAAc,SAAQ;EACzD,CAAC,MAAM;IACLZ,MAAM,IAAK,IAAGU,IAAI,CAACM,IAAI,CAAC,GAAG,CAAE,GAAE;EACjC;EAEA,OAAOhB,MAAM;AACf;AAAC,eAGcT,OAAO;AAAA"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var _support = require("appium/support");
11
-
12
9
  const log = _support.logger.getLogger('RemoteDebugger');
13
-
14
10
  var _default = log;
15
11
  exports.default = _default;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdSZW1vdGVEZWJ1Z2dlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGdCQUFqQixDQUFaOztlQUVlRixHIn0=
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdSZW1vdGVEZWJ1Z2dlcicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7QUFBQyxlQUVoQ0YsR0FBRztBQUFBIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\n\n\nconst log = logger.getLogger('RemoteDebugger');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AAGA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,gBAAgB,CAAC;AAAC,eAEhCF,GAAG;AAAA"}
@@ -1,42 +1,32 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _logger = _interopRequireDefault(require("../logger"));
13
-
14
10
  var _utils = require("../utils");
15
-
16
11
  var _events = _interopRequireDefault(require("./events"));
17
-
18
12
  var _support = require("appium/support");
19
-
20
13
  var _asyncbox = require("asyncbox");
21
-
22
14
  var _lodash = _interopRequireDefault(require("lodash"));
23
-
24
15
  const APP_CONNECT_TIMEOUT_MS = 0;
25
16
  const APP_CONNECT_INTERVAL_MS = 100;
26
17
  const SELECT_APP_RETRIES = 20;
27
18
  const SELECT_APP_RETRY_SLEEP_MS = 500;
28
19
  const SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';
29
20
  const BLANK_PAGE_URL = 'about:blank';
30
-
31
21
  async function setConnectionKey() {
32
22
  _logger.default.debug('Sending connection key request');
33
-
34
23
  await this.rpcClient.send('setConnectionKey', {}, false);
35
24
  }
36
-
37
25
  async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
38
26
  this.setup();
27
+
39
28
  this.initRpcClient();
29
+
40
30
  this.rpcClient.on('_rpc_reportSetup:', _lodash.default.noop);
41
31
  this.rpcClient.on('_rpc_forwardGetListing:', this.onPageChange.bind(this));
42
32
  this.rpcClient.on('_rpc_reportConnectedApplicationList:', this.onConnectedApplicationList.bind(this));
@@ -50,10 +40,8 @@ async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
50
40
 
51
41
  try {
52
42
  await this.setConnectionKey();
53
-
54
43
  if (timeout) {
55
44
  _logger.default.debug(`Waiting up to ${timeout}ms for applications to be reported`);
56
-
57
45
  try {
58
46
  await (0, _asyncbox.waitForCondition)(() => !_lodash.default.isEmpty(this.appDict), {
59
47
  waitMs: timeout,
@@ -63,40 +51,30 @@ async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
63
51
  _logger.default.debug(`Timed out waiting for applications to be reported`);
64
52
  }
65
53
  }
66
-
67
54
  return this.appDict || {};
68
55
  } catch (err) {
69
56
  _logger.default.error(`Error setting connection key: ${err.message}`);
70
-
71
57
  await this.disconnect();
72
58
  throw err;
73
59
  }
74
60
  }
75
-
76
61
  async function disconnect() {
77
62
  if (this.rpcClient) {
78
63
  await this.rpcClient.disconnect();
79
64
  }
80
-
81
65
  this.emit(_events.default.EVENT_DISCONNECT, true);
82
66
  this.teardown();
83
67
  }
84
-
85
68
  async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignoreAboutBlankUrl = false) {
86
69
  const shouldCheckForTarget = this.rpcClient.shouldCheckForTarget;
87
70
  this.rpcClient.shouldCheckForTarget = false;
88
-
89
71
  try {
90
72
  const timer = new _support.timing.Timer().start();
91
-
92
73
  _logger.default.debug('Selecting application');
93
-
94
74
  if (!this.appDict || _lodash.default.isEmpty(this.appDict)) {
95
75
  _logger.default.debug('No applications currently connected.');
96
-
97
76
  return [];
98
77
  }
99
-
100
78
  const {
101
79
  appIdKey,
102
80
  pageDict
@@ -105,81 +83,61 @@ async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignor
105
83
  if (!appIdKey || !pageDict) {
106
84
  _logger.default.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);
107
85
  }
108
-
109
86
  if (this.appIdKey !== appIdKey) {
110
87
  _logger.default.debug(`Received altered app id, updating from '${this.appIdKey}' to '${appIdKey}'`);
111
-
112
88
  this.appIdKey = appIdKey;
113
89
  }
114
-
115
90
  logApplicationDictionary(this.appDict);
116
- const pageArray = _lodash.default.isEmpty(this.appDict[appIdKey].pageArray) ? (0, _utils.pageArrayFromDict)(pageDict) : this.appDict[appIdKey].pageArray;
117
91
 
92
+ const pageArray = _lodash.default.isEmpty(this.appDict[appIdKey].pageArray) ? (0, _utils.pageArrayFromDict)(pageDict) : this.appDict[appIdKey].pageArray;
118
93
  _logger.default.debug(`Finally selecting app ${this.appIdKey}: ${(0, _utils.simpleStringify)(pageArray)}`);
119
-
120
94
  let fullPageArray = [];
121
-
122
95
  for (const [app, info] of _lodash.default.toPairs(this.appDict)) {
123
96
  if (!_lodash.default.isArray(info.pageArray) || !info.isActive) {
124
97
  continue;
125
98
  }
126
-
127
99
  const id = app.replace('PID:', '');
128
-
129
100
  for (const page of info.pageArray) {
130
101
  if (!(ignoreAboutBlankUrl && page.url === BLANK_PAGE_URL)) {
131
102
  let pageDict = _lodash.default.clone(page);
132
-
133
103
  pageDict.id = `${id}.${pageDict.id}`;
134
104
  pageDict.bundleId = info.bundleId;
135
105
  fullPageArray.push(pageDict);
136
106
  }
137
107
  }
138
108
  }
139
-
140
109
  _logger.default.debug(`Selected app after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
141
-
142
110
  return fullPageArray;
143
111
  } finally {
144
112
  this.rpcClient.shouldCheckForTarget = shouldCheckForTarget;
145
113
  }
146
114
  }
147
-
148
115
  async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
149
116
  const bundleIds = this.includeSafari && !this.isSafari ? [this.bundleId, ...this.additionalBundleIds, SAFARI_BUNDLE_ID] : [this.bundleId, ...this.additionalBundleIds];
150
-
151
117
  try {
152
118
  return await (0, _asyncbox.retryInterval)(maxTries, SELECT_APP_RETRY_SLEEP_MS, async retryCount => {
153
119
  logApplicationDictionary(this.appDict);
154
120
  const possibleAppIds = (0, _utils.getPossibleDebuggerAppKeys)(bundleIds, this.appDict);
155
-
156
121
  _logger.default.debug(`Trying out the possible app ids: ${possibleAppIds.join(', ')} (try #${retryCount + 1} of ${maxTries})`);
157
-
158
122
  for (const attemptedAppIdKey of possibleAppIds) {
159
123
  try {
160
124
  if (!this.appDict[attemptedAppIdKey].isActive) {
161
125
  _logger.default.debug(`Skipping app '${attemptedAppIdKey}' because it is not active`);
162
-
163
126
  continue;
164
127
  }
165
-
166
128
  _logger.default.debug(`Attempting app '${attemptedAppIdKey}'`);
167
-
168
129
  const [appIdKey, pageDict] = await this.rpcClient.selectApp(attemptedAppIdKey, this.onAppConnect.bind(this));
169
-
170
130
  if (_lodash.default.isEmpty(pageDict)) {
171
131
  _logger.default.debug('Empty page dictionary received. Trying again.');
172
-
173
132
  continue;
174
133
  }
175
134
 
176
135
  this.appDict[appIdKey].pageArray = (0, _utils.pageArrayFromDict)(pageDict);
177
- const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);
178
136
 
137
+ const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);
179
138
  if (result) {
180
139
  return result;
181
140
  }
182
-
183
141
  if (currentUrl) {
184
142
  _logger.default.debug(`Received app, but expected url ('${currentUrl}') was not found. Trying again.`);
185
143
  } else {
@@ -189,7 +147,6 @@ async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
189
147
  _logger.default.debug(`Error checking application: '${err.message}'. Retrying connection`);
190
148
  }
191
149
  }
192
-
193
150
  retryCount++;
194
151
  throw new Error('Failed to find an app to select');
195
152
  }, 0);
@@ -197,13 +154,11 @@ async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
197
154
  _logger.default.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);
198
155
  }
199
156
  }
200
-
201
157
  function searchForPage(appsDict, currentUrl = null, ignoreAboutBlankUrl = false) {
202
158
  for (const appDict of _lodash.default.values(appsDict)) {
203
159
  if (!appDict || !appDict.isActive || !appDict.pageArray || appDict.pageArray.promise) {
204
160
  continue;
205
161
  }
206
-
207
162
  for (const dict of appDict.pageArray) {
208
163
  if ((!ignoreAboutBlankUrl || dict.url !== BLANK_PAGE_URL) && (!currentUrl || dict.url === currentUrl || dict.url === `${currentUrl}/`)) {
209
164
  return {
@@ -213,74 +168,56 @@ function searchForPage(appsDict, currentUrl = null, ignoreAboutBlankUrl = false)
213
168
  }
214
169
  }
215
170
  }
216
-
217
171
  return null;
218
172
  }
219
-
220
173
  async function selectPage(appIdKey, pageIdKey, skipReadyCheck = false) {
221
174
  this.appIdKey = `PID:${appIdKey}`;
222
175
  this.pageIdKey = pageIdKey;
223
-
224
176
  _logger.default.debug(`Selecting page '${pageIdKey}' on app '${this.appIdKey}' and forwarding socket setup`);
225
-
226
177
  const timer = new _support.timing.Timer().start();
227
178
  await this.rpcClient.selectPage(this.appIdKey, pageIdKey);
228
179
 
229
180
  if (!skipReadyCheck && !(await this.checkPageIsReady())) {
230
181
  await this.pageUnload();
231
182
  }
232
-
233
183
  _logger.default.debug(`Selected page after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
234
184
  }
235
-
236
185
  function logApplicationDictionary(apps) {
237
186
  function getValueString(key, value) {
238
187
  if (_lodash.default.isFunction(value)) {
239
188
  return '[Function]';
240
189
  }
241
-
242
190
  if (key === 'pageArray' && !_lodash.default.isArray(value)) {
243
191
  return `"Waiting for data"`;
244
192
  }
245
-
246
193
  return JSON.stringify(value);
247
194
  }
248
-
249
195
  _logger.default.debug('Current applications available:');
250
-
251
196
  for (const [app, info] of _lodash.default.toPairs(apps)) {
252
197
  _logger.default.debug(` Application: "${app}"`);
253
-
254
198
  for (const [key, value] of _lodash.default.toPairs(info)) {
255
199
  if (key === 'pageArray' && Array.isArray(value) && value.length) {
256
200
  _logger.default.debug(` ${key}:`);
257
-
258
201
  for (const page of value) {
259
202
  let prefix = '- ';
260
-
261
203
  for (const [k, v] of _lodash.default.toPairs(page)) {
262
204
  _logger.default.debug(` ${prefix}${k}: ${JSON.stringify(v)}`);
263
-
264
205
  prefix = ' ';
265
206
  }
266
207
  }
267
208
  } else {
268
209
  const valueString = getValueString(key, value);
269
-
270
210
  _logger.default.debug(` ${key}: ${valueString}`);
271
211
  }
272
212
  }
273
213
  }
274
214
  }
275
-
276
215
  function updateAppsWithDict(dict) {
277
216
  this.appDict = this.appDict || {};
278
217
  let [id, entry] = (0, _utils.appInfoFromDict)(dict);
279
-
280
218
  if (this.appDict[id]) {
281
219
  entry.pageArray = this.appDict[id].pageArray;
282
220
  }
283
-
284
221
  this.appDict[id] = entry;
285
222
 
286
223
  if (_lodash.default.isUndefined(entry.pageArray)) {
@@ -291,7 +228,6 @@ function updateAppsWithDict(dict) {
291
228
  this.appIdKey = (0, _utils.getDebuggerAppKey)(this.bundleId, this.appDict);
292
229
  }
293
230
  }
294
-
295
231
  var _default = {
296
232
  setConnectionKey,
297
233
  connect,
@@ -303,4 +239,4 @@ var _default = {
303
239
  updateAppsWithDict
304
240
  };
305
241
  exports.default = _default;
306
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfQ09OTkVDVF9USU1FT1VUX01TIiwiQVBQX0NPTk5FQ1RfSU5URVJWQUxfTVMiLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiU0FGQVJJX0JVTkRMRV9JRCIsIkJMQU5LX1BBR0VfVVJMIiwic2V0Q29ubmVjdGlvbktleSIsImxvZyIsImRlYnVnIiwicnBjQ2xpZW50Iiwic2VuZCIsImNvbm5lY3QiLCJ0aW1lb3V0Iiwic2V0dXAiLCJpbml0UnBjQ2xpZW50Iiwib24iLCJfIiwibm9vcCIsIm9uUGFnZUNoYW5nZSIsImJpbmQiLCJvbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwib25Db25uZWN0ZWREcml2ZXJMaXN0Iiwib25DdXJyZW50U3RhdGUiLCJmcmFtZURldGFjaGVkIiwid2FpdEZvckNvbmRpdGlvbiIsImlzRW1wdHkiLCJhcHBEaWN0Iiwid2FpdE1zIiwiaW50ZXJ2YWwiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJkaXNjb25uZWN0IiwiZW1pdCIsImV2ZW50cyIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJ0ZWFyZG93biIsInNlbGVjdEFwcCIsImN1cnJlbnRVcmwiLCJtYXhUcmllcyIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsImFwcElkS2V5IiwicGFnZURpY3QiLCJzZWFyY2hGb3JBcHAiLCJlcnJvckFuZFRocm93IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwicGFnZUFycmF5IiwicGFnZUFycmF5RnJvbURpY3QiLCJzaW1wbGVTdHJpbmdpZnkiLCJmdWxsUGFnZUFycmF5IiwiYXBwIiwiaW5mbyIsInRvUGFpcnMiLCJpc0FycmF5IiwiaXNBY3RpdmUiLCJpZCIsInJlcGxhY2UiLCJwYWdlIiwidXJsIiwiY2xvbmUiLCJidW5kbGVJZCIsInB1c2giLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImJ1bmRsZUlkcyIsImluY2x1ZGVTYWZhcmkiLCJpc1NhZmFyaSIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJyZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJqb2luIiwiYXR0ZW1wdGVkQXBwSWRLZXkiLCJyZXN1bHQiLCJzZWFyY2hGb3JQYWdlIiwiRXJyb3IiLCJpZ24iLCJhcHBzRGljdCIsInZhbHVlcyIsInByb21pc2UiLCJkaWN0Iiwic2VsZWN0UGFnZSIsInBhZ2VJZEtleSIsInNraXBSZWFkeUNoZWNrIiwiY2hlY2tQYWdlSXNSZWFkeSIsInBhZ2VVbmxvYWQiLCJhcHBzIiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJsZW5ndGgiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwiZW50cnkiLCJhcHBJbmZvRnJvbURpY3QiLCJpc1VuZGVmaW5lZCIsImRlZmVycmVkUHJvbWlzZSIsImdldERlYnVnZ2VyQXBwS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21peGlucy9jb25uZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICAgICAgICAgZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBBUFBfQ09OTkVDVF9USU1FT1VUX01TID0gMDtcbmNvbnN0IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TID0gMTAwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSSUVTID0gMjA7XG5jb25zdCBTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TID0gNTAwO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEJMQU5LX1BBR0VfVVJMID0gJ2Fib3V0OmJsYW5rJztcblxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb25uZWN0aW9uS2V5ICgpIHtcbiAgbG9nLmRlYnVnKCdTZW5kaW5nIGNvbm5lY3Rpb24ga2V5IHJlcXVlc3QnKTtcbiAgLy8gc2VuZCBidXQgb25seSB3YWl0IHRvIG1ha2Ugc3VyZSB0aGUgc29ja2V0IHdvcmtlZFxuICAvLyBhcyByZXNwb25zZSBmcm9tIFdlYiBJbnNwZWN0b3IgY2FuIHRha2UgYSBsb25nIHRpbWVcbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc2V0Q29ubmVjdGlvbktleScsIHt9LCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKHRpbWVvdXQgPSBBUFBfQ09OTkVDVF9USU1FT1VUX01TKSB7XG4gIHRoaXMuc2V0dXAoKTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBycGMgY2xpZW50XG4gIHRoaXMuaW5pdFJwY0NsaWVudCgpO1xuXG4gIC8vIGxpc3RlbiBmb3IgYmFzaWMgZGVidWdnZXItbGV2ZWwgZXZlbnRzXG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydFNldHVwOicsIF8ubm9vcCk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOicsIHRoaXMub25QYWdlQ2hhbmdlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIHRoaXMub25BcHBEaXNjb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgdGhpcy5vbkFwcFVwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCB0aGlzLm9uQ29ubmVjdGVkRHJpdmVyTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOicsIHRoaXMub25DdXJyZW50U3RhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdQYWdlLmZyYW1lRGV0YWNoZWQnLCB0aGlzLmZyYW1lRGV0YWNoZWQuYmluZCh0aGlzKSk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuY29ubmVjdCgpO1xuXG4gIC8vIGdldCB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb25uZWN0aW9uS2V5KCk7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgZm9yIGFwcGxpY2F0aW9ucyB0byBiZSByZXBvcnRlZGApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuYXBwRGljdCksIHtcbiAgICAgICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgaW50ZXJ2YWw6IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2cuZGVidWcoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwRGljdCB8fCB7fTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGBFcnJvciBzZXR0aW5nIGNvbm5lY3Rpb24ga2V5OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb25uZWN0ICgpIHtcbiAgaWYgKHRoaXMucnBjQ2xpZW50KSB7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuZGlzY29ubmVjdCgpO1xuICB9XG4gIHRoaXMuZW1pdChldmVudHMuRVZFTlRfRElTQ09OTkVDVCwgdHJ1ZSk7XG4gIHRoaXMudGVhcmRvd24oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0QXBwIChjdXJyZW50VXJsID0gbnVsbCwgbWF4VHJpZXMgPSBTRUxFQ1RfQVBQX1JFVFJJRVMsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBjb25zdCBzaG91bGRDaGVja0ZvclRhcmdldCA9IHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKCdTZWxlY3RpbmcgYXBwbGljYXRpb24nKTtcbiAgICBpZiAoIXRoaXMuYXBwRGljdCB8fCBfLmlzRW1wdHkodGhpcy5hcHBEaWN0KSkge1xuICAgICAgbG9nLmRlYnVnKCdObyBhcHBsaWNhdGlvbnMgY3VycmVudGx5IGNvbm5lY3RlZC4nKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7YXBwSWRLZXksIHBhZ2VEaWN0fSA9IGF3YWl0IHRoaXMuc2VhcmNoRm9yQXBwKGN1cnJlbnRVcmwsIG1heFRyaWVzLCBpZ25vcmVBYm91dEJsYW5rVXJsKTtcblxuICAgIC8vIGlmLCBhZnRlciBhbGwgdGhpcywgd2UgaGF2ZSBubyBkaWN0aW9uYXJ5LCB3ZSBoYXZlIGZhaWxlZFxuICAgIGlmICghYXBwSWRLZXkgfHwgIXBhZ2VEaWN0KSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXIgJHttYXhUcmllc30gdHJpZXMuYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwSWRLZXkgIT09IGFwcElkS2V5KSB7XG4gICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGFsdGVyZWQgYXBwIGlkLCB1cGRhdGluZyBmcm9tICcke3RoaXMuYXBwSWRLZXl9JyB0byAnJHthcHBJZEtleX0nYCk7XG4gICAgICB0aGlzLmFwcElkS2V5ID0gYXBwSWRLZXk7XG4gICAgfVxuXG4gICAgbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5KHRoaXMuYXBwRGljdCk7XG5cbiAgICAvLyB0cmFuc2xhdGUgdGhlIGRpY3Rpb25hcnkgaW50byBhIHVzZWZ1bCBmb3JtLCBhbmQgcmV0dXJuIHRvIHNlbmRlclxuICAgIGNvbnN0IHBhZ2VBcnJheSA9IF8uaXNFbXB0eSh0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheSlcbiAgICAgID8gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpXG4gICAgICA6IHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5O1xuICAgIGxvZy5kZWJ1ZyhgRmluYWxseSBzZWxlY3RpbmcgYXBwICR7dGhpcy5hcHBJZEtleX06ICR7c2ltcGxlU3RyaW5naWZ5KHBhZ2VBcnJheSl9YCk7XG5cbiAgICBsZXQgZnVsbFBhZ2VBcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2FwcCwgaW5mb10gb2YgXy50b1BhaXJzKHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGluZm8ucGFnZUFycmF5KSB8fCAhaW5mby5pc0FjdGl2ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkID0gYXBwLnJlcGxhY2UoJ1BJRDonLCAnJyk7XG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgaW5mby5wYWdlQXJyYXkpIHtcbiAgICAgICAgaWYgKCEoaWdub3JlQWJvdXRCbGFua1VybCAmJiBwYWdlLnVybCA9PT0gQkxBTktfUEFHRV9VUkwpKSB7XG4gICAgICAgICAgbGV0IHBhZ2VEaWN0ID0gXy5jbG9uZShwYWdlKTtcbiAgICAgICAgICBwYWdlRGljdC5pZCA9IGAke2lkfS4ke3BhZ2VEaWN0LmlkfWA7XG4gICAgICAgICAgcGFnZURpY3QuYnVuZGxlSWQgPSBpbmZvLmJ1bmRsZUlkO1xuICAgICAgICAgIGZ1bGxQYWdlQXJyYXkucHVzaChwYWdlRGljdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGFwcCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHJldHVybiBmdWxsUGFnZUFycmF5O1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VhcmNoRm9yQXBwIChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCkge1xuICBjb25zdCBidW5kbGVJZHMgPSB0aGlzLmluY2x1ZGVTYWZhcmkgJiYgIXRoaXMuaXNTYWZhcmlcbiAgICA/IFt0aGlzLmJ1bmRsZUlkLCAuLi50aGlzLmFkZGl0aW9uYWxCdW5kbGVJZHMsIFNBRkFSSV9CVU5ETEVfSURdXG4gICAgOiBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzXTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChtYXhUcmllcywgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUywgYXN5bmMgKHJldHJ5Q291bnQpID0+IHtcbiAgICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuICAgICAgY29uc3QgcG9zc2libGVBcHBJZHMgPSBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cyhidW5kbGVJZHMsIHRoaXMuYXBwRGljdCk7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyBvdXQgdGhlIHBvc3NpYmxlIGFwcCBpZHM6ICR7cG9zc2libGVBcHBJZHMuam9pbignLCAnKX0gKHRyeSAjJHtyZXRyeUNvdW50ICsgMX0gb2YgJHttYXhUcmllc30pYCk7XG4gICAgICBmb3IgKGNvbnN0IGF0dGVtcHRlZEFwcElkS2V5IG9mIHBvc3NpYmxlQXBwSWRzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcERpY3RbYXR0ZW1wdGVkQXBwSWRLZXldLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFNraXBwaW5nIGFwcCAnJHthdHRlbXB0ZWRBcHBJZEtleX0nIGJlY2F1c2UgaXQgaXMgbm90IGFjdGl2ZWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9J2ApO1xuICAgICAgICAgIGNvbnN0IFthcHBJZEtleSwgcGFnZURpY3RdID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0QXBwKGF0dGVtcHRlZEFwcElkS2V5LCB0aGlzLm9uQXBwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAvLyBpbiBpT1MgOC4yIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgICBpZiAoXy5pc0VtcHR5KHBhZ2VEaWN0KSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNhdmUgdGhlIHBhZ2UgYXJyYXkgZm9yIHRoaXMgYXBwXG4gICAgICAgICAgdGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkgPSBwYWdlQXJyYXlGcm9tRGljdChwYWdlRGljdCk7XG5cbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHVybCwgbWFrZSBzdXJlIHdlXG4gICAgICAgICAgLy8gaGF2ZSB0aGUgcmlnaHQgcGFnZS4gSWdub3JlIGVtcHR5IG9yIHVuZGVmaW5lZCB1cmxzLlxuICAgICAgICAgIC8vIElnbm9yZSBhYm91dDpibGFuayBpZiByZXF1ZXN0ZWQuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2hGb3JQYWdlKHRoaXMuYXBwRGljdCwgY3VycmVudFVybCwgaWdub3JlQWJvdXRCbGFua1VybCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFVybCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhcHAsIGJ1dCBleHBlY3RlZCB1cmwgKCcke2N1cnJlbnRVcmx9Jykgd2FzIG5vdCBmb3VuZC4gVHJ5aW5nIGFnYWluLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGFwcCwgYnV0IG5vIG1hdGNoIHdhcyBmb3VuZC4gVHJ5aW5nIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBFcnJvciBjaGVja2luZyBhcHBsaWNhdGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy4gUmV0cnlpbmcgY29ubmVjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRyeUNvdW50Kys7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIGFuIGFwcCB0byBzZWxlY3QnKTtcbiAgICB9LCAwKTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEZvclBhZ2UgKGFwcHNEaWN0LCBjdXJyZW50VXJsID0gbnVsbCwgaWdub3JlQWJvdXRCbGFua1VybCA9IGZhbHNlKSB7XG4gIGZvciAoY29uc3QgYXBwRGljdCBvZiBfLnZhbHVlcyhhcHBzRGljdCkpIHtcbiAgICBpZiAoIWFwcERpY3QgfHwgIWFwcERpY3QuaXNBY3RpdmUgfHwgIWFwcERpY3QucGFnZUFycmF5IHx8IGFwcERpY3QucGFnZUFycmF5LnByb21pc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGljdCBvZiBhcHBEaWN0LnBhZ2VBcnJheSkge1xuICAgICAgaWYgKCghaWdub3JlQWJvdXRCbGFua1VybCB8fCBkaWN0LnVybCAhPT0gQkxBTktfUEFHRV9VUkwpICYmXG4gICAgICAgICAgKCFjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBgJHtjdXJyZW50VXJsfS9gKSkge1xuICAgICAgICByZXR1cm4geyBhcHBJZEtleTogYXBwRGljdC5pZCwgcGFnZURpY3Q6IGRpY3QgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrID0gZmFsc2UpIHtcbiAgdGhpcy5hcHBJZEtleSA9IGBQSUQ6JHthcHBJZEtleX1gO1xuICB0aGlzLnBhZ2VJZEtleSA9IHBhZ2VJZEtleTtcblxuICBsb2cuZGVidWcoYFNlbGVjdGluZyBwYWdlICcke3BhZ2VJZEtleX0nIG9uIGFwcCAnJHt0aGlzLmFwcElkS2V5fScgYW5kIGZvcndhcmRpbmcgc29ja2V0IHNldHVwYCk7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcblxuICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZWxlY3RQYWdlKHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgLy8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gZ29cbiAgaWYgKCFza2lwUmVhZHlDaGVjayAmJiAhYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCkpIHtcbiAgICBhd2FpdCB0aGlzLnBhZ2VVbmxvYWQoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgcGFnZSBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xufVxuXG5mdW5jdGlvbiBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkgKGFwcHMpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVTdHJpbmcgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgIV8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgXCJXYWl0aW5nIGZvciBkYXRhXCJgO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnQ3VycmVudCBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlOicpO1xuICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyhhcHBzKSkge1xuICAgIGxvZy5kZWJ1ZyhgICAgIEFwcGxpY2F0aW9uOiBcIiR7YXBwfVwiYCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGluZm8pKSB7XG4gICAgICBpZiAoa2V5ID09PSAncGFnZUFycmF5JyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICR7a2V5fTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgbGV0IHByZWZpeCA9ICctICc7XG4gICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgXy50b1BhaXJzKHBhZ2UpKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgICAke3ByZWZpeH0ke2t9OiAke0pTT04uc3RyaW5naWZ5KHYpfWApO1xuICAgICAgICAgICAgcHJlZml4ID0gJyAgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gZ2V0VmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06ICR7dmFsdWVTdHJpbmd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFwcHNXaXRoRGljdCAoZGljdCkge1xuICAvLyBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cnkgaW50byBhIG5pY2UgZm9ybSwgYW5kIGFkZCBpdCB0byB0aGVcbiAgLy8gYXBwbGljYXRpb24gZGljdGlvbmFyeVxuICB0aGlzLmFwcERpY3QgPSB0aGlzLmFwcERpY3QgfHwge307XG4gIGxldCBbaWQsIGVudHJ5XSA9IGFwcEluZm9Gcm9tRGljdChkaWN0KTtcbiAgaWYgKHRoaXMuYXBwRGljdFtpZF0pIHtcbiAgICAvLyBwcmVzZXJ2ZSB0aGUgcGFnZSBkaWN0aW9uYXJ5IGZvciB0aGlzIGVudHJ5XG4gICAgZW50cnkucGFnZUFycmF5ID0gdGhpcy5hcHBEaWN0W2lkXS5wYWdlQXJyYXk7XG4gIH1cbiAgdGhpcy5hcHBEaWN0W2lkXSA9IGVudHJ5O1xuXG4gIC8vIGFkZCBhIHByb21pc2UgdG8gZ2V0IHRoZSBwYWdlIGRpY3Rpb25hcnlcbiAgaWYgKF8uaXNVbmRlZmluZWQoZW50cnkucGFnZUFycmF5KSkge1xuICAgIGVudHJ5LnBhZ2VBcnJheSA9IGRlZmVycmVkUHJvbWlzZSgpO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGdldCB0aGUgYXBwIGlkIGZyb20gb3VyIGNvbm5lY3RlZCBhcHBzXG4gIGlmICghdGhpcy5hcHBJZEtleSkge1xuICAgIHRoaXMuYXBwSWRLZXkgPSBnZXREZWJ1Z2dlckFwcEtleSh0aGlzLmJ1bmRsZUlkLCB0aGlzLmFwcERpY3QpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgc2V0Q29ubmVjdGlvbktleSwgY29ubmVjdCwgZGlzY29ubmVjdCwgc2VsZWN0QXBwLCBzZWFyY2hGb3JBcHAsIHNlYXJjaEZvclBhZ2UsIHNlbGVjdFBhZ2UsIHVwZGF0ZUFwcHNXaXRoRGljdCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHNCQUFzQixHQUFHLENBQS9CO0FBQ0EsTUFB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
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfQ09OTkVDVF9USU1FT1VUX01TIiwiQVBQX0NPTk5FQ1RfSU5URVJWQUxfTVMiLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiU0FGQVJJX0JVTkRMRV9JRCIsIkJMQU5LX1BBR0VfVVJMIiwic2V0Q29ubmVjdGlvbktleSIsImxvZyIsImRlYnVnIiwicnBjQ2xpZW50Iiwic2VuZCIsImNvbm5lY3QiLCJ0aW1lb3V0Iiwic2V0dXAiLCJpbml0UnBjQ2xpZW50Iiwib24iLCJfIiwibm9vcCIsIm9uUGFnZUNoYW5nZSIsImJpbmQiLCJvbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwib25Db25uZWN0ZWREcml2ZXJMaXN0Iiwib25DdXJyZW50U3RhdGUiLCJmcmFtZURldGFjaGVkIiwid2FpdEZvckNvbmRpdGlvbiIsImlzRW1wdHkiLCJhcHBEaWN0Iiwid2FpdE1zIiwiaW50ZXJ2YWwiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJkaXNjb25uZWN0IiwiZW1pdCIsImV2ZW50cyIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJ0ZWFyZG93biIsInNlbGVjdEFwcCIsImN1cnJlbnRVcmwiLCJtYXhUcmllcyIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsImFwcElkS2V5IiwicGFnZURpY3QiLCJzZWFyY2hGb3JBcHAiLCJlcnJvckFuZFRocm93IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwicGFnZUFycmF5IiwicGFnZUFycmF5RnJvbURpY3QiLCJzaW1wbGVTdHJpbmdpZnkiLCJmdWxsUGFnZUFycmF5IiwiYXBwIiwiaW5mbyIsInRvUGFpcnMiLCJpc0FycmF5IiwiaXNBY3RpdmUiLCJpZCIsInJlcGxhY2UiLCJwYWdlIiwidXJsIiwiY2xvbmUiLCJidW5kbGVJZCIsInB1c2giLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImJ1bmRsZUlkcyIsImluY2x1ZGVTYWZhcmkiLCJpc1NhZmFyaSIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJyZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJqb2luIiwiYXR0ZW1wdGVkQXBwSWRLZXkiLCJyZXN1bHQiLCJzZWFyY2hGb3JQYWdlIiwiRXJyb3IiLCJpZ24iLCJhcHBzRGljdCIsInZhbHVlcyIsInByb21pc2UiLCJkaWN0Iiwic2VsZWN0UGFnZSIsInBhZ2VJZEtleSIsInNraXBSZWFkeUNoZWNrIiwiY2hlY2tQYWdlSXNSZWFkeSIsInBhZ2VVbmxvYWQiLCJhcHBzIiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJsZW5ndGgiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwiZW50cnkiLCJhcHBJbmZvRnJvbURpY3QiLCJpc1VuZGVmaW5lZCIsImRlZmVycmVkUHJvbWlzZSIsImdldERlYnVnZ2VyQXBwS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21peGlucy9jb25uZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICAgICAgICAgZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBBUFBfQ09OTkVDVF9USU1FT1VUX01TID0gMDtcbmNvbnN0IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TID0gMTAwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSSUVTID0gMjA7XG5jb25zdCBTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TID0gNTAwO1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IEJMQU5LX1BBR0VfVVJMID0gJ2Fib3V0OmJsYW5rJztcblxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb25uZWN0aW9uS2V5ICgpIHtcbiAgbG9nLmRlYnVnKCdTZW5kaW5nIGNvbm5lY3Rpb24ga2V5IHJlcXVlc3QnKTtcbiAgLy8gc2VuZCBidXQgb25seSB3YWl0IHRvIG1ha2Ugc3VyZSB0aGUgc29ja2V0IHdvcmtlZFxuICAvLyBhcyByZXNwb25zZSBmcm9tIFdlYiBJbnNwZWN0b3IgY2FuIHRha2UgYSBsb25nIHRpbWVcbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc2V0Q29ubmVjdGlvbktleScsIHt9LCBmYWxzZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKHRpbWVvdXQgPSBBUFBfQ09OTkVDVF9USU1FT1VUX01TKSB7XG4gIHRoaXMuc2V0dXAoKTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBycGMgY2xpZW50XG4gIHRoaXMuaW5pdFJwY0NsaWVudCgpO1xuXG4gIC8vIGxpc3RlbiBmb3IgYmFzaWMgZGVidWdnZXItbGV2ZWwgZXZlbnRzXG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydFNldHVwOicsIF8ubm9vcCk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOicsIHRoaXMub25QYWdlQ2hhbmdlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25Db25uZWN0ZWQ6JywgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uRGlzY29ubmVjdGVkOicsIHRoaXMub25BcHBEaXNjb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgdGhpcy5vbkFwcFVwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCB0aGlzLm9uQ29ubmVjdGVkRHJpdmVyTGlzdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q3VycmVudFN0YXRlOicsIHRoaXMub25DdXJyZW50U3RhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdQYWdlLmZyYW1lRGV0YWNoZWQnLCB0aGlzLmZyYW1lRGV0YWNoZWQuYmluZCh0aGlzKSk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuY29ubmVjdCgpO1xuXG4gIC8vIGdldCB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb25uZWN0aW9uS2V5KCk7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgZm9yIGFwcGxpY2F0aW9ucyB0byBiZSByZXBvcnRlZGApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbigoKSA9PiAhXy5pc0VtcHR5KHRoaXMuYXBwRGljdCksIHtcbiAgICAgICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgaW50ZXJ2YWw6IEFQUF9DT05ORUNUX0lOVEVSVkFMX01TLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2cuZGVidWcoYFRpbWVkIG91dCB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwRGljdCB8fCB7fTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGBFcnJvciBzZXR0aW5nIGNvbm5lY3Rpb24ga2V5OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb25uZWN0ICgpIHtcbiAgaWYgKHRoaXMucnBjQ2xpZW50KSB7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuZGlzY29ubmVjdCgpO1xuICB9XG4gIHRoaXMuZW1pdChldmVudHMuRVZFTlRfRElTQ09OTkVDVCwgdHJ1ZSk7XG4gIHRoaXMudGVhcmRvd24oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0QXBwIChjdXJyZW50VXJsID0gbnVsbCwgbWF4VHJpZXMgPSBTRUxFQ1RfQVBQX1JFVFJJRVMsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBjb25zdCBzaG91bGRDaGVja0ZvclRhcmdldCA9IHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKCdTZWxlY3RpbmcgYXBwbGljYXRpb24nKTtcbiAgICBpZiAoIXRoaXMuYXBwRGljdCB8fCBfLmlzRW1wdHkodGhpcy5hcHBEaWN0KSkge1xuICAgICAgbG9nLmRlYnVnKCdObyBhcHBsaWNhdGlvbnMgY3VycmVudGx5IGNvbm5lY3RlZC4nKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB7YXBwSWRLZXksIHBhZ2VEaWN0fSA9IGF3YWl0IHRoaXMuc2VhcmNoRm9yQXBwKGN1cnJlbnRVcmwsIG1heFRyaWVzLCBpZ25vcmVBYm91dEJsYW5rVXJsKTtcblxuICAgIC8vIGlmLCBhZnRlciBhbGwgdGhpcywgd2UgaGF2ZSBubyBkaWN0aW9uYXJ5LCB3ZSBoYXZlIGZhaWxlZFxuICAgIGlmICghYXBwSWRLZXkgfHwgIXBhZ2VEaWN0KSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXIgJHttYXhUcmllc30gdHJpZXMuYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwSWRLZXkgIT09IGFwcElkS2V5KSB7XG4gICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGFsdGVyZWQgYXBwIGlkLCB1cGRhdGluZyBmcm9tICcke3RoaXMuYXBwSWRLZXl9JyB0byAnJHthcHBJZEtleX0nYCk7XG4gICAgICB0aGlzLmFwcElkS2V5ID0gYXBwSWRLZXk7XG4gICAgfVxuXG4gICAgbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5KHRoaXMuYXBwRGljdCk7XG5cbiAgICAvLyB0cmFuc2xhdGUgdGhlIGRpY3Rpb25hcnkgaW50byBhIHVzZWZ1bCBmb3JtLCBhbmQgcmV0dXJuIHRvIHNlbmRlclxuICAgIGNvbnN0IHBhZ2VBcnJheSA9IF8uaXNFbXB0eSh0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheSlcbiAgICAgID8gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpXG4gICAgICA6IHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5O1xuICAgIGxvZy5kZWJ1ZyhgRmluYWxseSBzZWxlY3RpbmcgYXBwICR7dGhpcy5hcHBJZEtleX06ICR7c2ltcGxlU3RyaW5naWZ5KHBhZ2VBcnJheSl9YCk7XG5cbiAgICBsZXQgZnVsbFBhZ2VBcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2FwcCwgaW5mb10gb2YgXy50b1BhaXJzKHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KGluZm8ucGFnZUFycmF5KSB8fCAhaW5mby5pc0FjdGl2ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkID0gYXBwLnJlcGxhY2UoJ1BJRDonLCAnJyk7XG4gICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgaW5mby5wYWdlQXJyYXkpIHtcbiAgICAgICAgaWYgKCEoaWdub3JlQWJvdXRCbGFua1VybCAmJiBwYWdlLnVybCA9PT0gQkxBTktfUEFHRV9VUkwpKSB7XG4gICAgICAgICAgbGV0IHBhZ2VEaWN0ID0gXy5jbG9uZShwYWdlKTtcbiAgICAgICAgICBwYWdlRGljdC5pZCA9IGAke2lkfS4ke3BhZ2VEaWN0LmlkfWA7XG4gICAgICAgICAgcGFnZURpY3QuYnVuZGxlSWQgPSBpbmZvLmJ1bmRsZUlkO1xuICAgICAgICAgIGZ1bGxQYWdlQXJyYXkucHVzaChwYWdlRGljdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGFwcCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIHJldHVybiBmdWxsUGFnZUFycmF5O1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VhcmNoRm9yQXBwIChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCkge1xuICBjb25zdCBidW5kbGVJZHMgPSB0aGlzLmluY2x1ZGVTYWZhcmkgJiYgIXRoaXMuaXNTYWZhcmlcbiAgICA/IFt0aGlzLmJ1bmRsZUlkLCAuLi50aGlzLmFkZGl0aW9uYWxCdW5kbGVJZHMsIFNBRkFSSV9CVU5ETEVfSURdXG4gICAgOiBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzXTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChtYXhUcmllcywgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUywgYXN5bmMgKHJldHJ5Q291bnQpID0+IHtcbiAgICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuICAgICAgY29uc3QgcG9zc2libGVBcHBJZHMgPSBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cyhidW5kbGVJZHMsIHRoaXMuYXBwRGljdCk7XG4gICAgICBsb2cuZGVidWcoYFRyeWluZyBvdXQgdGhlIHBvc3NpYmxlIGFwcCBpZHM6ICR7cG9zc2libGVBcHBJZHMuam9pbignLCAnKX0gKHRyeSAjJHtyZXRyeUNvdW50ICsgMX0gb2YgJHttYXhUcmllc30pYCk7XG4gICAgICBmb3IgKGNvbnN0IGF0dGVtcHRlZEFwcElkS2V5IG9mIHBvc3NpYmxlQXBwSWRzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwcERpY3RbYXR0ZW1wdGVkQXBwSWRLZXldLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFNraXBwaW5nIGFwcCAnJHthdHRlbXB0ZWRBcHBJZEtleX0nIGJlY2F1c2UgaXQgaXMgbm90IGFjdGl2ZWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9J2ApO1xuICAgICAgICAgIGNvbnN0IFthcHBJZEtleSwgcGFnZURpY3RdID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0QXBwKGF0dGVtcHRlZEFwcElkS2V5LCB0aGlzLm9uQXBwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAvLyBpbiBpT1MgOC4yIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgICBpZiAoXy5pc0VtcHR5KHBhZ2VEaWN0KSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHNhdmUgdGhlIHBhZ2UgYXJyYXkgZm9yIHRoaXMgYXBwXG4gICAgICAgICAgdGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkgPSBwYWdlQXJyYXlGcm9tRGljdChwYWdlRGljdCk7XG5cbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHVybCwgbWFrZSBzdXJlIHdlXG4gICAgICAgICAgLy8gaGF2ZSB0aGUgcmlnaHQgcGFnZS4gSWdub3JlIGVtcHR5IG9yIHVuZGVmaW5lZCB1cmxzLlxuICAgICAgICAgIC8vIElnbm9yZSBhYm91dDpibGFuayBpZiByZXF1ZXN0ZWQuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZWFyY2hGb3JQYWdlKHRoaXMuYXBwRGljdCwgY3VycmVudFVybCwgaWdub3JlQWJvdXRCbGFua1VybCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFVybCkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhcHAsIGJ1dCBleHBlY3RlZCB1cmwgKCcke2N1cnJlbnRVcmx9Jykgd2FzIG5vdCBmb3VuZC4gVHJ5aW5nIGFnYWluLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGFwcCwgYnV0IG5vIG1hdGNoIHdhcyBmb3VuZC4gVHJ5aW5nIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBFcnJvciBjaGVja2luZyBhcHBsaWNhdGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy4gUmV0cnlpbmcgY29ubmVjdGlvbmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXRyeUNvdW50Kys7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIGFuIGFwcCB0byBzZWxlY3QnKTtcbiAgICB9LCAwKTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEZvclBhZ2UgKGFwcHNEaWN0LCBjdXJyZW50VXJsID0gbnVsbCwgaWdub3JlQWJvdXRCbGFua1VybCA9IGZhbHNlKSB7XG4gIGZvciAoY29uc3QgYXBwRGljdCBvZiBfLnZhbHVlcyhhcHBzRGljdCkpIHtcbiAgICBpZiAoIWFwcERpY3QgfHwgIWFwcERpY3QuaXNBY3RpdmUgfHwgIWFwcERpY3QucGFnZUFycmF5IHx8IGFwcERpY3QucGFnZUFycmF5LnByb21pc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGljdCBvZiBhcHBEaWN0LnBhZ2VBcnJheSkge1xuICAgICAgaWYgKCghaWdub3JlQWJvdXRCbGFua1VybCB8fCBkaWN0LnVybCAhPT0gQkxBTktfUEFHRV9VUkwpICYmXG4gICAgICAgICAgKCFjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBjdXJyZW50VXJsIHx8IGRpY3QudXJsID09PSBgJHtjdXJyZW50VXJsfS9gKSkge1xuICAgICAgICByZXR1cm4geyBhcHBJZEtleTogYXBwRGljdC5pZCwgcGFnZURpY3Q6IGRpY3QgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrID0gZmFsc2UpIHtcbiAgdGhpcy5hcHBJZEtleSA9IGBQSUQ6JHthcHBJZEtleX1gO1xuICB0aGlzLnBhZ2VJZEtleSA9IHBhZ2VJZEtleTtcblxuICBsb2cuZGVidWcoYFNlbGVjdGluZyBwYWdlICcke3BhZ2VJZEtleX0nIG9uIGFwcCAnJHt0aGlzLmFwcElkS2V5fScgYW5kIGZvcndhcmRpbmcgc29ja2V0IHNldHVwYCk7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcblxuICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZWxlY3RQYWdlKHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleSk7XG5cbiAgLy8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gZ29cbiAgaWYgKCFza2lwUmVhZHlDaGVjayAmJiAhYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCkpIHtcbiAgICBhd2FpdCB0aGlzLnBhZ2VVbmxvYWQoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgcGFnZSBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xufVxuXG5mdW5jdGlvbiBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkgKGFwcHMpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVTdHJpbmcgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgIV8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgXCJXYWl0aW5nIGZvciBkYXRhXCJgO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnQ3VycmVudCBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlOicpO1xuICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyhhcHBzKSkge1xuICAgIGxvZy5kZWJ1ZyhgICAgIEFwcGxpY2F0aW9uOiBcIiR7YXBwfVwiYCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGluZm8pKSB7XG4gICAgICBpZiAoa2V5ID09PSAncGFnZUFycmF5JyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICR7a2V5fTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgbGV0IHByZWZpeCA9ICctICc7XG4gICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgXy50b1BhaXJzKHBhZ2UpKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgICAke3ByZWZpeH0ke2t9OiAke0pTT04uc3RyaW5naWZ5KHYpfWApO1xuICAgICAgICAgICAgcHJlZml4ID0gJyAgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gZ2V0VmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06ICR7dmFsdWVTdHJpbmd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFwcHNXaXRoRGljdCAoZGljdCkge1xuICAvLyBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cnkgaW50byBhIG5pY2UgZm9ybSwgYW5kIGFkZCBpdCB0byB0aGVcbiAgLy8gYXBwbGljYXRpb24gZGljdGlvbmFyeVxuICB0aGlzLmFwcERpY3QgPSB0aGlzLmFwcERpY3QgfHwge307XG4gIGxldCBbaWQsIGVudHJ5XSA9IGFwcEluZm9Gcm9tRGljdChkaWN0KTtcbiAgaWYgKHRoaXMuYXBwRGljdFtpZF0pIHtcbiAgICAvLyBwcmVzZXJ2ZSB0aGUgcGFnZSBkaWN0aW9uYXJ5IGZvciB0aGlzIGVudHJ5XG4gICAgZW50cnkucGFnZUFycmF5ID0gdGhpcy5hcHBEaWN0W2lkXS5wYWdlQXJyYXk7XG4gIH1cbiAgdGhpcy5hcHBEaWN0W2lkXSA9IGVudHJ5O1xuXG4gIC8vIGFkZCBhIHByb21pc2UgdG8gZ2V0IHRoZSBwYWdlIGRpY3Rpb25hcnlcbiAgaWYgKF8uaXNVbmRlZmluZWQoZW50cnkucGFnZUFycmF5KSkge1xuICAgIGVudHJ5LnBhZ2VBcnJheSA9IGRlZmVycmVkUHJvbWlzZSgpO1xuICB9XG5cbiAgLy8gdHJ5IHRvIGdldCB0aGUgYXBwIGlkIGZyb20gb3VyIGNvbm5lY3RlZCBhcHBzXG4gIGlmICghdGhpcy5hcHBJZEtleSkge1xuICAgIHRoaXMuYXBwSWRLZXkgPSBnZXREZWJ1Z2dlckFwcEtleSh0aGlzLmJ1bmRsZUlkLCB0aGlzLmFwcERpY3QpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgc2V0Q29ubmVjdGlvbktleSwgY29ubmVjdCwgZGlzY29ubmVjdCwgc2VsZWN0QXBwLCBzZWFyY2hGb3JBcHAsIHNlYXJjaEZvclBhZ2UsIHNlbGVjdFBhZ2UsIHVwZGF0ZUFwcHNXaXRoRGljdCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLHNCQUFzQixHQUFHLENBQUM7QUFDaEMsTUFBTUMsdUJBQXVC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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","names":["APP_CONNECT_TIMEOUT_MS","APP_CONNECT_INTERVAL_MS","SELECT_APP_RETRIES","SELECT_APP_RETRY_SLEEP_MS","SAFARI_BUNDLE_ID","BLANK_PAGE_URL","setConnectionKey","log","debug","rpcClient","send","connect","timeout","setup","initRpcClient","on","_","noop","onPageChange","bind","onConnectedApplicationList","onAppConnect","onAppDisconnect","onAppUpdate","onConnectedDriverList","onCurrentState","frameDetached","waitForCondition","isEmpty","appDict","waitMs","interval","err","error","message","disconnect","emit","events","EVENT_DISCONNECT","teardown","selectApp","currentUrl","maxTries","ignoreAboutBlankUrl","shouldCheckForTarget","timer","timing","Timer","start","appIdKey","pageDict","searchForApp","errorAndThrow","logApplicationDictionary","pageArray","pageArrayFromDict","simpleStringify","fullPageArray","app","info","toPairs","isArray","isActive","id","replace","page","url","clone","bundleId","push","getDuration","asMilliSeconds","toFixed","bundleIds","includeSafari","isSafari","additionalBundleIds","retryInterval","retryCount","possibleAppIds","getPossibleDebuggerAppKeys","join","attemptedAppIdKey","result","searchForPage","Error","ign","appsDict","values","promise","dict","selectPage","pageIdKey","skipReadyCheck","checkPageIsReady","pageUnload","apps","getValueString","key","value","isFunction","JSON","stringify","Array","length","prefix","k","v","valueString","updateAppsWithDict","entry","appInfoFromDict","isUndefined","deferredPromise","getDebuggerAppKey"],"sources":["../../../lib/mixins/connect.js"],"sourcesContent":["import log from '../logger';\nimport { appInfoFromDict, pageArrayFromDict, getDebuggerAppKey,\n getPossibleDebuggerAppKeys, simpleStringify, deferredPromise } from '../utils';\nimport events from './events';\nimport { timing } from 'appium/support';\nimport { retryInterval, waitForCondition } from 'asyncbox';\nimport _ from 'lodash';\n\n\nconst APP_CONNECT_TIMEOUT_MS = 0;\nconst APP_CONNECT_INTERVAL_MS = 100;\nconst SELECT_APP_RETRIES = 20;\nconst SELECT_APP_RETRY_SLEEP_MS = 500;\nconst SAFARI_BUNDLE_ID = 'com.apple.mobilesafari';\nconst BLANK_PAGE_URL = 'about:blank';\n\n\nasync function setConnectionKey () {\n log.debug('Sending connection key request');\n // send but only wait to make sure the socket worked\n // as response from Web Inspector can take a long time\n await this.rpcClient.send('setConnectionKey', {}, false);\n}\n\nasync function connect (timeout = APP_CONNECT_TIMEOUT_MS) {\n this.setup();\n\n // initialize the rpc client\n this.initRpcClient();\n\n // listen for basic debugger-level events\n this.rpcClient.on('_rpc_reportSetup:', _.noop);\n this.rpcClient.on('_rpc_forwardGetListing:', this.onPageChange.bind(this));\n this.rpcClient.on('_rpc_reportConnectedApplicationList:', this.onConnectedApplicationList.bind(this));\n this.rpcClient.on('_rpc_applicationConnected:', this.onAppConnect.bind(this));\n this.rpcClient.on('_rpc_applicationDisconnected:', this.onAppDisconnect.bind(this));\n this.rpcClient.on('_rpc_applicationUpdated:', this.onAppUpdate.bind(this));\n this.rpcClient.on('_rpc_reportConnectedDriverList:', this.onConnectedDriverList.bind(this));\n this.rpcClient.on('_rpc_reportCurrentState:', this.onCurrentState.bind(this));\n this.rpcClient.on('Page.frameDetached', this.frameDetached.bind(this));\n\n await this.rpcClient.connect();\n\n // get the connection information about the app\n try {\n await this.setConnectionKey();\n if (timeout) {\n log.debug(`Waiting up to ${timeout}ms for applications to be reported`);\n try {\n await waitForCondition(() => !_.isEmpty(this.appDict), {\n waitMs: timeout,\n interval: APP_CONNECT_INTERVAL_MS,\n });\n } catch (err) {\n log.debug(`Timed out waiting for applications to be reported`);\n }\n }\n return this.appDict || {};\n } catch (err) {\n log.error(`Error setting connection key: ${err.message}`);\n await this.disconnect();\n throw err;\n }\n}\n\nasync function disconnect () {\n if (this.rpcClient) {\n await this.rpcClient.disconnect();\n }\n this.emit(events.EVENT_DISCONNECT, true);\n this.teardown();\n}\n\nasync function selectApp (currentUrl = null, maxTries = SELECT_APP_RETRIES, ignoreAboutBlankUrl = false) {\n const shouldCheckForTarget = this.rpcClient.shouldCheckForTarget;\n this.rpcClient.shouldCheckForTarget = false;\n try {\n const timer = new timing.Timer().start();\n log.debug('Selecting application');\n if (!this.appDict || _.isEmpty(this.appDict)) {\n log.debug('No applications currently connected.');\n return [];\n }\n\n const {appIdKey, pageDict} = await this.searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl);\n\n // if, after all this, we have no dictionary, we have failed\n if (!appIdKey || !pageDict) {\n log.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);\n }\n\n if (this.appIdKey !== appIdKey) {\n log.debug(`Received altered app id, updating from '${this.appIdKey}' to '${appIdKey}'`);\n this.appIdKey = appIdKey;\n }\n\n logApplicationDictionary(this.appDict);\n\n // translate the dictionary into a useful form, and return to sender\n const pageArray = _.isEmpty(this.appDict[appIdKey].pageArray)\n ? pageArrayFromDict(pageDict)\n : this.appDict[appIdKey].pageArray;\n log.debug(`Finally selecting app ${this.appIdKey}: ${simpleStringify(pageArray)}`);\n\n let fullPageArray = [];\n for (const [app, info] of _.toPairs(this.appDict)) {\n if (!_.isArray(info.pageArray) || !info.isActive) {\n continue;\n }\n const id = app.replace('PID:', '');\n for (const page of info.pageArray) {\n if (!(ignoreAboutBlankUrl && page.url === BLANK_PAGE_URL)) {\n let pageDict = _.clone(page);\n pageDict.id = `${id}.${pageDict.id}`;\n pageDict.bundleId = info.bundleId;\n fullPageArray.push(pageDict);\n }\n }\n }\n\n log.debug(`Selected app after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n return fullPageArray;\n } finally {\n this.rpcClient.shouldCheckForTarget = shouldCheckForTarget;\n }\n}\n\nasync function searchForApp (currentUrl, maxTries, ignoreAboutBlankUrl) {\n const bundleIds = this.includeSafari && !this.isSafari\n ? [this.bundleId, ...this.additionalBundleIds, SAFARI_BUNDLE_ID]\n : [this.bundleId, ...this.additionalBundleIds];\n try {\n return await retryInterval(maxTries, SELECT_APP_RETRY_SLEEP_MS, async (retryCount) => {\n logApplicationDictionary(this.appDict);\n const possibleAppIds = getPossibleDebuggerAppKeys(bundleIds, this.appDict);\n log.debug(`Trying out the possible app ids: ${possibleAppIds.join(', ')} (try #${retryCount + 1} of ${maxTries})`);\n for (const attemptedAppIdKey of possibleAppIds) {\n try {\n if (!this.appDict[attemptedAppIdKey].isActive) {\n log.debug(`Skipping app '${attemptedAppIdKey}' because it is not active`);\n continue;\n }\n log.debug(`Attempting app '${attemptedAppIdKey}'`);\n const [appIdKey, pageDict] = await this.rpcClient.selectApp(attemptedAppIdKey, this.onAppConnect.bind(this));\n // in iOS 8.2 the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n log.debug('Empty page dictionary received. Trying again.');\n continue;\n }\n\n // save the page array for this app\n this.appDict[appIdKey].pageArray = pageArrayFromDict(pageDict);\n\n // if we are looking for a particular url, make sure we\n // have the right page. Ignore empty or undefined urls.\n // Ignore about:blank if requested.\n const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);\n if (result) {\n return result;\n }\n\n if (currentUrl) {\n log.debug(`Received app, but expected url ('${currentUrl}') was not found. Trying again.`);\n } else {\n log.debug('Received app, but no match was found. Trying again.');\n }\n } catch (err) {\n log.debug(`Error checking application: '${err.message}'. Retrying connection`);\n }\n }\n retryCount++;\n throw new Error('Failed to find an app to select');\n }, 0);\n } catch (ign) {\n log.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);\n }\n}\n\nfunction searchForPage (appsDict, currentUrl = null, ignoreAboutBlankUrl = false) {\n for (const appDict of _.values(appsDict)) {\n if (!appDict || !appDict.isActive || !appDict.pageArray || appDict.pageArray.promise) {\n continue;\n }\n\n for (const dict of appDict.pageArray) {\n if ((!ignoreAboutBlankUrl || dict.url !== BLANK_PAGE_URL) &&\n (!currentUrl || dict.url === currentUrl || dict.url === `${currentUrl}/`)) {\n return { appIdKey: appDict.id, pageDict: dict };\n }\n }\n }\n return null;\n}\n\nasync function selectPage (appIdKey, pageIdKey, skipReadyCheck = false) {\n this.appIdKey = `PID:${appIdKey}`;\n this.pageIdKey = pageIdKey;\n\n log.debug(`Selecting page '${pageIdKey}' on app '${this.appIdKey}' and forwarding socket setup`);\n\n const timer = new timing.Timer().start();\n\n await this.rpcClient.selectPage(this.appIdKey, pageIdKey);\n\n // make sure everything is ready to go\n if (!skipReadyCheck && !await this.checkPageIsReady()) {\n await this.pageUnload();\n }\n\n log.debug(`Selected page after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n}\n\nfunction logApplicationDictionary (apps) {\n function getValueString (key, value) {\n if (_.isFunction(value)) {\n return '[Function]';\n }\n if (key === 'pageArray' && !_.isArray(value)) {\n return `\"Waiting for data\"`;\n }\n return JSON.stringify(value);\n }\n log.debug('Current applications available:');\n for (const [app, info] of _.toPairs(apps)) {\n log.debug(` Application: \"${app}\"`);\n for (const [key, value] of _.toPairs(info)) {\n if (key === 'pageArray' && Array.isArray(value) && value.length) {\n log.debug(` ${key}:`);\n for (const page of value) {\n let prefix = '- ';\n for (const [k, v] of _.toPairs(page)) {\n log.debug(` ${prefix}${k}: ${JSON.stringify(v)}`);\n prefix = ' ';\n }\n }\n } else {\n const valueString = getValueString(key, value);\n log.debug(` ${key}: ${valueString}`);\n }\n }\n }\n}\n\nfunction updateAppsWithDict (dict) {\n // get the dictionary entry into a nice form, and add it to the\n // application dictionary\n this.appDict = this.appDict || {};\n let [id, entry] = appInfoFromDict(dict);\n if (this.appDict[id]) {\n // preserve the page dictionary for this entry\n entry.pageArray = this.appDict[id].pageArray;\n }\n this.appDict[id] = entry;\n\n // add a promise to get the page dictionary\n if (_.isUndefined(entry.pageArray)) {\n entry.pageArray = deferredPromise();\n }\n\n // try to get the app id from our connected apps\n if (!this.appIdKey) {\n this.appIdKey = getDebuggerAppKey(this.bundleId, this.appDict);\n }\n}\n\nexport default { setConnectionKey, connect, disconnect, selectApp, searchForApp, searchForPage, selectPage, updateAppsWithDict };\n"],"mappings":"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"}