appium-remote-debugger 9.1.6 → 9.1.7

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [9.1.7](https://github.com/appium/appium-remote-debugger/compare/v9.1.6...v9.1.7) (2022-11-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fix scripts for atoms ([#276](https://github.com/appium/appium-remote-debugger/issues/276)) ([72da4b3](https://github.com/appium/appium-remote-debugger/commit/72da4b3949c2d942ff50367c9540244494249a6b))
7
+
1
8
  ## [9.1.6](https://github.com/appium/appium-remote-debugger/compare/v9.1.5...v9.1.6) (2022-11-27)
2
9
 
3
10
  ## [9.1.5](https://github.com/appium/appium-remote-debugger/compare/v9.1.4...v9.1.5) (2022-11-22)
package/README.md CHANGED
@@ -25,7 +25,7 @@ The steps to using the `RemoteDebugger` involve instantiating an object, then ru
25
25
 
26
26
  The remote debugger uses the standard [Selenium Atoms](https://github.com/SeleniumHQ/selenium/tree/master/javascript/atoms)
27
27
  to interact with web pages. These need to be manually updated when necessary. To
28
- do so, simply update the branch in the `gulpfile`, by modifying the `SELENIUM_BRANCH`
28
+ do so, simply update the branch in the `scripts/common.js`, by modifying the `SELENIUM_BRANCH`
29
29
  constant at the top of the file. Then run `npm run build:atoms`, test and create
30
30
  a pull request with the resulting changed atoms directory.
31
31
 
@@ -42,7 +42,6 @@ async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
42
42
  _logger.default.debug(`Executing '${atom}' atom in default context`);
43
43
  script = `(${atomSrc})`;
44
44
  }
45
-
46
45
  args = args.map(JSON.stringify);
47
46
  if (asyncCallBack) {
48
47
  script += `(${args.join(',')}, ${asyncCallBack}, true)`;
@@ -53,4 +52,4 @@ async function getScriptForAtom(atom, args, frames = [], asyncCallBack = null) {
53
52
  }
54
53
  var _default = getAtom;
55
54
  exports.default = _default;
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBVE9NU19DQUNIRSIsImdldEF0b20iLCJhdG9tTmFtZSIsIl8iLCJoYXMiLCJhdG9tRmlsZU5hbWUiLCJwYXRoIiwicmVzb2x2ZSIsImdldE1vZHVsZVJvb3QiLCJmcyIsInJlYWRGaWxlIiwiZSIsIkVycm9yIiwid3JhcFNjcmlwdEZvckZyYW1lIiwic2NyaXB0IiwiZnJhbWUiLCJsb2ciLCJkZWJ1ZyIsImVsRnJvbUNhY2hlIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U2NyaXB0Rm9yQXRvbSIsImF0b20iLCJhcmdzIiwiZnJhbWVzIiwiYXN5bmNDYWxsQmFjayIsImF0b21TcmMiLCJsZW5ndGgiLCJtYXAiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2F0b21zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBBVE9NU19DQUNIRSA9IHt9O1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF0b20gKGF0b21OYW1lKSB7XG4gIC8vIGNoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgYW5kIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhBVE9NU19DQUNIRSwgYXRvbU5hbWUpKSB7XG4gICAgY29uc3QgYXRvbUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYCk7XG4gICAgdHJ5IHtcbiAgICAgIEFUT01TX0NBQ0hFW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFUT01TX0NBQ0hFW2F0b21OYW1lXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JhcFNjcmlwdEZvckZyYW1lIChzY3JpcHQsIGZyYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgV3JhcHBpbmcgc2NyaXB0IGZvciBmcmFtZSAnJHtmcmFtZX0nYCk7XG4gIGNvbnN0IGVsRnJvbUNhY2hlID0gYXdhaXQgZ2V0QXRvbSgnZ2V0X2VsZW1lbnRfZnJvbV9jYWNoZScpO1xuICByZXR1cm4gYChmdW5jdGlvbiAod2luZG93KSB7IHZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsgYCArXG4gICAgICAgICBgcmV0dXJuICgke3NjcmlwdH0pOyB9KSgoJHtlbEZyb21DYWNoZS50b1N0cmluZygndXRmOCcpfSkoJHtKU09OLnN0cmluZ2lmeShmcmFtZSl9KSlgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRGb3JBdG9tIChhdG9tLCBhcmdzLCBmcmFtZXMgPSBbXSwgYXN5bmNDYWxsQmFjayA9IG51bGwpIHtcbiAgY29uc3QgYXRvbVNyYyA9IGF3YWl0IGdldEF0b20oYXRvbSk7XG4gIGxldCBzY3JpcHQ7XG4gIGlmIChmcmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHNjcmlwdCA9IGF0b21TcmM7XG4gICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAgIHNjcmlwdCA9IGF3YWl0IHdyYXBTY3JpcHRGb3JGcmFtZShzY3JpcHQsIGZyYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgJyR7YXRvbX0nIGF0b20gaW4gZGVmYXVsdCBjb250ZXh0YCk7XG4gICAgc2NyaXB0ID0gYCgke2F0b21TcmN9KWA7XG4gIH1cblxuICAvLyBhZGQgdGhlIGFyZ3VtZW50cywgYXMgc3RyaW5nc1xuICBhcmdzID0gYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpO1xuICBpZiAoYXN5bmNDYWxsQmFjaykge1xuICAgIHNjcmlwdCArPSBgKCR7YXJncy5qb2luKCcsJyl9LCAke2FzeW5jQ2FsbEJhY2t9LCB0cnVlKWA7XG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0pYDtcbiAgfVxuXG4gIHJldHVybiBzY3JpcHQ7XG59XG5cbmV4cG9ydCB7IGdldEF0b20sIGdldFNjcmlwdEZvckF0b20gfTtcbmV4cG9ydCBkZWZhdWx0IGdldEF0b207XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUd0QixlQUFlQyxPQUFPLENBQUVDLFFBQVEsRUFBRTtFQUVoQyxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDSixXQUFXLEVBQUVFLFFBQVEsQ0FBQyxFQUFFO0lBQ2pDLE1BQU1HLFlBQVksR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsR0FBRSxFQUFFLE9BQU8sRUFBRyxHQUFFTixRQUFTLEtBQUksQ0FBQztJQUM3RSxJQUFJO01BQ0ZGLFdBQVcsQ0FBQ0UsUUFBUSxDQUFDLEdBQUcsTUFBTU8sV0FBRSxDQUFDQyxRQUFRLENBQUNMLFlBQVksQ0FBQztJQUN6RCxDQUFDLENBQUMsT0FBT00sQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJQyxLQUFLLENBQUUsd0JBQXVCVixRQUFTLGdCQUFlRyxZQUFhLEdBQUUsQ0FBQztJQUNsRjtFQUNGO0VBRUEsT0FBT0wsV0FBVyxDQUFDRSxRQUFRLENBQUM7QUFDOUI7QUFFQSxlQUFlVyxrQkFBa0IsQ0FBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDaERDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2QkYsS0FBTSxHQUFFLENBQUM7RUFDakQsTUFBTUcsV0FBVyxHQUFHLE1BQU1qQixPQUFPLENBQUMsd0JBQXdCLENBQUM7RUFDM0QsT0FBUSx1REFBc0QsR0FDdEQsV0FBVWEsTUFBTyxVQUFTSSxXQUFXLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUUsS0FBSUMsSUFBSSxDQUFDQyxTQUFTLENBQUNOLEtBQUssQ0FBRSxJQUFHO0FBQzlGO0FBRUEsZUFBZU8sZ0JBQWdCLENBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEdBQUcsRUFBRSxFQUFFQyxhQUFhLEdBQUcsSUFBSSxFQUFFO0VBQzlFLE1BQU1DLE9BQU8sR0FBRyxNQUFNMUIsT0FBTyxDQUFDc0IsSUFBSSxDQUFDO0VBQ25DLElBQUlULE1BQU07RUFDVixJQUFJVyxNQUFNLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckJkLE1BQU0sR0FBR2EsT0FBTztJQUNoQixLQUFLLE1BQU1aLEtBQUssSUFBSVUsTUFBTSxFQUFFO01BQzFCWCxNQUFNLEdBQUcsTUFBTUQsa0JBQWtCLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxDQUFDO0lBQ2xEO0VBQ0YsQ0FBQyxNQUFNO0lBQ0xDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGNBQWFNLElBQUssMkJBQTBCLENBQUM7SUFDeERULE1BQU0sR0FBSSxJQUFHYSxPQUFRLEdBQUU7RUFDekI7O0VBR0FILElBQUksR0FBR0EsSUFBSSxDQUFDSyxHQUFHLENBQUNULElBQUksQ0FBQ0MsU0FBUyxDQUFDO0VBQy9CLElBQUlLLGFBQWEsRUFBRTtJQUNqQlosTUFBTSxJQUFLLElBQUdVLElBQUksQ0FBQ00sSUFBSSxDQUFDLEdBQUcsQ0FBRSxLQUFJSixhQUFjLFNBQVE7RUFDekQsQ0FBQyxNQUFNO0lBQ0xaLE1BQU0sSUFBSyxJQUFHVSxJQUFJLENBQUNNLElBQUksQ0FBQyxHQUFHLENBQUUsR0FBRTtFQUNqQztFQUVBLE9BQU9oQixNQUFNO0FBQ2Y7QUFBQyxlQUdjYixPQUFPO0FBQUEifQ==
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBVE9NU19DQUNIRSIsImdldEF0b20iLCJhdG9tTmFtZSIsIl8iLCJoYXMiLCJhdG9tRmlsZU5hbWUiLCJwYXRoIiwicmVzb2x2ZSIsImdldE1vZHVsZVJvb3QiLCJmcyIsInJlYWRGaWxlIiwiZSIsIkVycm9yIiwid3JhcFNjcmlwdEZvckZyYW1lIiwic2NyaXB0IiwiZnJhbWUiLCJsb2ciLCJkZWJ1ZyIsImVsRnJvbUNhY2hlIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0U2NyaXB0Rm9yQXRvbSIsImF0b20iLCJhcmdzIiwiZnJhbWVzIiwiYXN5bmNDYWxsQmFjayIsImF0b21TcmMiLCJsZW5ndGgiLCJtYXAiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2F0b21zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0TW9kdWxlUm9vdCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBBVE9NU19DQUNIRSA9IHt9O1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF0b20gKGF0b21OYW1lKSB7XG4gIC8vIGNoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgYW5kIGNhY2hlZCB0aGlzIGF0b21cbiAgaWYgKCFfLmhhcyhBVE9NU19DQUNIRSwgYXRvbU5hbWUpKSB7XG4gICAgY29uc3QgYXRvbUZpbGVOYW1lID0gcGF0aC5yZXNvbHZlKGdldE1vZHVsZVJvb3QoKSwgJ2F0b21zJywgYCR7YXRvbU5hbWV9LmpzYCk7XG4gICAgdHJ5IHtcbiAgICAgIEFUT01TX0NBQ0hFW2F0b21OYW1lXSA9IGF3YWl0IGZzLnJlYWRGaWxlKGF0b21GaWxlTmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBBdG9tICcke2F0b21OYW1lfScgZnJvbSBmaWxlICcke2F0b21GaWxlTmFtZX0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFUT01TX0NBQ0hFW2F0b21OYW1lXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JhcFNjcmlwdEZvckZyYW1lIChzY3JpcHQsIGZyYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgV3JhcHBpbmcgc2NyaXB0IGZvciBmcmFtZSAnJHtmcmFtZX0nYCk7XG4gIGNvbnN0IGVsRnJvbUNhY2hlID0gYXdhaXQgZ2V0QXRvbSgnZ2V0X2VsZW1lbnRfZnJvbV9jYWNoZScpO1xuICByZXR1cm4gYChmdW5jdGlvbiAod2luZG93KSB7IHZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDsgYCArXG4gICAgICAgICBgcmV0dXJuICgke3NjcmlwdH0pOyB9KSgoJHtlbEZyb21DYWNoZS50b1N0cmluZygndXRmOCcpfSkoJHtKU09OLnN0cmluZ2lmeShmcmFtZSl9KSlgO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTY3JpcHRGb3JBdG9tIChhdG9tLCBhcmdzLCBmcmFtZXMgPSBbXSwgYXN5bmNDYWxsQmFjayA9IG51bGwpIHtcbiAgY29uc3QgYXRvbVNyYyA9IGF3YWl0IGdldEF0b20oYXRvbSk7XG4gIGxldCBzY3JpcHQ7XG4gIGlmIChmcmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHNjcmlwdCA9IGF0b21TcmM7XG4gICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAgIHNjcmlwdCA9IGF3YWl0IHdyYXBTY3JpcHRGb3JGcmFtZShzY3JpcHQsIGZyYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgJyR7YXRvbX0nIGF0b20gaW4gZGVmYXVsdCBjb250ZXh0YCk7XG4gICAgc2NyaXB0ID0gYCgke2F0b21TcmN9KWA7XG4gIH1cblxuICAvLyBhZGQgdGhlIGFyZ3VtZW50cywgYXMgc3RyaW5nc1xuICBhcmdzID0gYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpO1xuICBpZiAoYXN5bmNDYWxsQmFjaykge1xuICAgIHNjcmlwdCArPSBgKCR7YXJncy5qb2luKCcsJyl9LCAke2FzeW5jQ2FsbEJhY2t9LCB0cnVlKWA7XG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0ICs9IGAoJHthcmdzLmpvaW4oJywnKX0pYDtcbiAgfVxuXG4gIHJldHVybiBzY3JpcHQ7XG59XG5cbmV4cG9ydCB7IGdldEF0b20sIGdldFNjcmlwdEZvckF0b20gfTtcbmV4cG9ydCBkZWZhdWx0IGdldEF0b207XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUd0QixlQUFlQyxPQUFPLENBQUVDLFFBQVEsRUFBRTtFQUVoQyxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDSixXQUFXLEVBQUVFLFFBQVEsQ0FBQyxFQUFFO0lBQ2pDLE1BQU1HLFlBQVksR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUMsSUFBQUMsb0JBQWEsR0FBRSxFQUFFLE9BQU8sRUFBRyxHQUFFTixRQUFTLEtBQUksQ0FBQztJQUM3RSxJQUFJO01BQ0ZGLFdBQVcsQ0FBQ0UsUUFBUSxDQUFDLEdBQUcsTUFBTU8sV0FBRSxDQUFDQyxRQUFRLENBQUNMLFlBQVksQ0FBQztJQUN6RCxDQUFDLENBQUMsT0FBT00sQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJQyxLQUFLLENBQUUsd0JBQXVCVixRQUFTLGdCQUFlRyxZQUFhLEdBQUUsQ0FBQztJQUNsRjtFQUNGO0VBRUEsT0FBT0wsV0FBVyxDQUFDRSxRQUFRLENBQUM7QUFDOUI7QUFFQSxlQUFlVyxrQkFBa0IsQ0FBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDaERDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2QkYsS0FBTSxHQUFFLENBQUM7RUFDakQsTUFBTUcsV0FBVyxHQUFHLE1BQU1qQixPQUFPLENBQUMsd0JBQXdCLENBQUM7RUFDM0QsT0FBUSx1REFBc0QsR0FDdEQsV0FBVWEsTUFBTyxVQUFTSSxXQUFXLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUUsS0FBSUMsSUFBSSxDQUFDQyxTQUFTLENBQUNOLEtBQUssQ0FBRSxJQUFHO0FBQzlGO0FBRUEsZUFBZU8sZ0JBQWdCLENBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEdBQUcsRUFBRSxFQUFFQyxhQUFhLEdBQUcsSUFBSSxFQUFFO0VBQzlFLE1BQU1DLE9BQU8sR0FBRyxNQUFNMUIsT0FBTyxDQUFDc0IsSUFBSSxDQUFDO0VBQ25DLElBQUlULE1BQU07RUFDVixJQUFJVyxNQUFNLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDckJkLE1BQU0sR0FBR2EsT0FBTztJQUNoQixLQUFLLE1BQU1aLEtBQUssSUFBSVUsTUFBTSxFQUFFO01BQzFCWCxNQUFNLEdBQUcsTUFBTUQsa0JBQWtCLENBQUNDLE1BQU0sRUFBRUMsS0FBSyxDQUFDO0lBQ2xEO0VBQ0YsQ0FBQyxNQUFNO0lBQ0xDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGNBQWFNLElBQUssMkJBQTBCLENBQUM7SUFDeERULE1BQU0sR0FBSSxJQUFHYSxPQUFRLEdBQUU7RUFDekI7RUFHQUgsSUFBSSxHQUFHQSxJQUFJLENBQUNLLEdBQUcsQ0FBQ1QsSUFBSSxDQUFDQyxTQUFTLENBQUM7RUFDL0IsSUFBSUssYUFBYSxFQUFFO0lBQ2pCWixNQUFNLElBQUssSUFBR1UsSUFBSSxDQUFDTSxJQUFJLENBQUMsR0FBRyxDQUFFLEtBQUlKLGFBQWMsU0FBUTtFQUN6RCxDQUFDLE1BQU07SUFDTFosTUFBTSxJQUFLLElBQUdVLElBQUksQ0FBQ00sSUFBSSxDQUFDLEdBQUcsQ0FBRSxHQUFFO0VBQ2pDO0VBRUEsT0FBT2hCLE1BQU07QUFDZjtBQUFDLGVBR2NiLE9BQU87QUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"atoms.js","names":["ATOMS_CACHE","getAtom","atomName","_","has","atomFileName","path","resolve","getModuleRoot","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';\nimport { getModuleRoot } from './utils';\n\nconst ATOMS_CACHE = {};\n\n\nasync function getAtom (atomName) {\n // check if we have already loaded and cached this atom\n if (!_.has(ATOMS_CACHE, atomName)) {\n const atomFileName = path.resolve(getModuleRoot(), 'atoms', `${atomName}.js`);\n try {\n ATOMS_CACHE[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 ATOMS_CACHE[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;AACA;AAEA,MAAMA,WAAW,GAAG,CAAC,CAAC;AAGtB,eAAeC,OAAO,CAAEC,QAAQ,EAAE;EAEhC,IAAI,CAACC,eAAC,CAACC,GAAG,CAACJ,WAAW,EAAEE,QAAQ,CAAC,EAAE;IACjC,MAAMG,YAAY,GAAGC,aAAI,CAACC,OAAO,CAAC,IAAAC,oBAAa,GAAE,EAAE,OAAO,EAAG,GAAEN,QAAS,KAAI,CAAC;IAC7E,IAAI;MACFF,WAAW,CAACE,QAAQ,CAAC,GAAG,MAAMO,WAAE,CAACC,QAAQ,CAACL,YAAY,CAAC;IACzD,CAAC,CAAC,OAAOM,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBV,QAAS,gBAAeG,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOL,WAAW,CAACE,QAAQ,CAAC;AAC9B;AAEA,eAAeW,kBAAkB,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMjB,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUa,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,MAAM1B,OAAO,CAACsB,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,eAGcb,OAAO;AAAA"}
1
+ {"version":3,"file":"atoms.js","names":["ATOMS_CACHE","getAtom","atomName","_","has","atomFileName","path","resolve","getModuleRoot","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';\nimport { getModuleRoot } from './utils';\n\nconst ATOMS_CACHE = {};\n\n\nasync function getAtom (atomName) {\n // check if we have already loaded and cached this atom\n if (!_.has(ATOMS_CACHE, atomName)) {\n const atomFileName = path.resolve(getModuleRoot(), 'atoms', `${atomName}.js`);\n try {\n ATOMS_CACHE[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 ATOMS_CACHE[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;AACA;AAEA,MAAMA,WAAW,GAAG,CAAC,CAAC;AAGtB,eAAeC,OAAO,CAAEC,QAAQ,EAAE;EAEhC,IAAI,CAACC,eAAC,CAACC,GAAG,CAACJ,WAAW,EAAEE,QAAQ,CAAC,EAAE;IACjC,MAAMG,YAAY,GAAGC,aAAI,CAACC,OAAO,CAAC,IAAAC,oBAAa,GAAE,EAAE,OAAO,EAAG,GAAEN,QAAS,KAAI,CAAC;IAC7E,IAAI;MACFF,WAAW,CAACE,QAAQ,CAAC,GAAG,MAAMO,WAAE,CAACC,QAAQ,CAACL,YAAY,CAAC;IACzD,CAAC,CAAC,OAAOM,CAAC,EAAE;MACV,MAAM,IAAIC,KAAK,CAAE,wBAAuBV,QAAS,gBAAeG,YAAa,GAAE,CAAC;IAClF;EACF;EAEA,OAAOL,WAAW,CAACE,QAAQ,CAAC;AAC9B;AAEA,eAAeW,kBAAkB,CAAEC,MAAM,EAAEC,KAAK,EAAE;EAChDC,eAAG,CAACC,KAAK,CAAE,8BAA6BF,KAAM,GAAE,CAAC;EACjD,MAAMG,WAAW,GAAG,MAAMjB,OAAO,CAAC,wBAAwB,CAAC;EAC3D,OAAQ,uDAAsD,GACtD,WAAUa,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,MAAM1B,OAAO,CAACsB,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,eAGcb,OAAO;AAAA"}
@@ -24,9 +24,7 @@ async function setConnectionKey() {
24
24
  }
25
25
  async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
26
26
  this.setup();
27
-
28
27
  this.initRpcClient();
29
-
30
28
  this.rpcClient.on('_rpc_reportSetup:', _lodash.default.noop);
31
29
  this.rpcClient.on('_rpc_forwardGetListing:', this.onPageChange.bind(this));
32
30
  this.rpcClient.on('_rpc_reportConnectedApplicationList:', this.onConnectedApplicationList.bind(this));
@@ -37,7 +35,6 @@ async function connect(timeout = APP_CONNECT_TIMEOUT_MS) {
37
35
  this.rpcClient.on('_rpc_reportCurrentState:', this.onCurrentState.bind(this));
38
36
  this.rpcClient.on('Page.frameDetached', this.frameDetached.bind(this));
39
37
  await this.rpcClient.connect();
40
-
41
38
  try {
42
39
  await this.setConnectionKey();
43
40
  if (timeout) {
@@ -79,7 +76,6 @@ async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignor
79
76
  appIdKey,
80
77
  pageDict
81
78
  } = await this.searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl);
82
-
83
79
  if (!appIdKey || !pageDict) {
84
80
  _logger.default.errorAndThrow(`Could not connect to a valid app after ${maxTries} tries.`);
85
81
  }
@@ -88,7 +84,6 @@ async function selectApp(currentUrl = null, maxTries = SELECT_APP_RETRIES, ignor
88
84
  this.appIdKey = appIdKey;
89
85
  }
90
86
  logApplicationDictionary(this.appDict);
91
-
92
87
  const pageArray = _lodash.default.isEmpty(this.appDict[appIdKey].pageArray) ? (0, _utils.pageArrayFromDict)(pageDict) : this.appDict[appIdKey].pageArray;
93
88
  _logger.default.debug(`Finally selecting app ${this.appIdKey}: ${(0, _utils.simpleStringify)(pageArray)}`);
94
89
  let fullPageArray = [];
@@ -131,9 +126,7 @@ async function searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
131
126
  _logger.default.debug('Empty page dictionary received. Trying again.');
132
127
  continue;
133
128
  }
134
-
135
129
  this.appDict[appIdKey].pageArray = (0, _utils.pageArrayFromDict)(pageDict);
136
-
137
130
  const result = this.searchForPage(this.appDict, currentUrl, ignoreAboutBlankUrl);
138
131
  if (result) {
139
132
  return result;
@@ -176,7 +169,6 @@ async function selectPage(appIdKey, pageIdKey, skipReadyCheck = false) {
176
169
  _logger.default.debug(`Selecting page '${pageIdKey}' on app '${this.appIdKey}' and forwarding socket setup`);
177
170
  const timer = new _support.timing.Timer().start();
178
171
  await this.rpcClient.selectPage(this.appIdKey, pageIdKey);
179
-
180
172
  if (!skipReadyCheck && !(await this.checkPageIsReady())) {
181
173
  await this.pageUnload();
182
174
  }
@@ -219,11 +211,9 @@ function updateAppsWithDict(dict) {
219
211
  entry.pageArray = this.appDict[id].pageArray;
220
212
  }
221
213
  this.appDict[id] = entry;
222
-
223
214
  if (_lodash.default.isUndefined(entry.pageArray)) {
224
215
  entry.pageArray = (0, _utils.deferredPromise)();
225
216
  }
226
-
227
217
  if (!this.appIdKey) {
228
218
  this.appIdKey = (0, _utils.getDebuggerAppKey)(this.bundleId, this.appDict);
229
219
  }
@@ -239,4 +229,4 @@ var _default = {
239
229
  updateAppsWithDict
240
230
  };
241
231
  exports.default = _default;
242
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfQ09OTkVDVF9USU1FT1VUX01TIiwiQVBQX0NPTk5FQ1RfSU5URVJWQUxfTVMiLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiU0FGQVJJX0JVTkRMRV9JRCIsIkJMQU5LX1BBR0VfVVJMIiwic2V0Q29ubmVjdGlvbktleSIsImxvZyIsImRlYnVnIiwicnBjQ2xpZW50Iiwic2VuZCIsImNvbm5lY3QiLCJ0aW1lb3V0Iiwic2V0dXAiLCJpbml0UnBjQ2xpZW50Iiwib24iLCJfIiwibm9vcCIsIm9uUGFnZUNoYW5nZSIsImJpbmQiLCJvbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwib25Db25uZWN0ZWREcml2ZXJMaXN0Iiwib25DdXJyZW50U3RhdGUiLCJmcmFtZURldGFjaGVkIiwid2FpdEZvckNvbmRpdGlvbiIsImlzRW1wdHkiLCJhcHBEaWN0Iiwid2FpdE1zIiwiaW50ZXJ2YWwiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJkaXNjb25uZWN0IiwiZW1pdCIsImV2ZW50cyIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJ0ZWFyZG93biIsInNlbGVjdEFwcCIsImN1cnJlbnRVcmwiLCJtYXhUcmllcyIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsImFwcElkS2V5IiwicGFnZURpY3QiLCJzZWFyY2hGb3JBcHAiLCJlcnJvckFuZFRocm93IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwicGFnZUFycmF5IiwicGFnZUFycmF5RnJvbURpY3QiLCJzaW1wbGVTdHJpbmdpZnkiLCJmdWxsUGFnZUFycmF5IiwiYXBwIiwiaW5mbyIsInRvUGFpcnMiLCJpc0FycmF5IiwiaXNBY3RpdmUiLCJpZCIsInJlcGxhY2UiLCJwYWdlIiwidXJsIiwiY2xvbmUiLCJidW5kbGVJZCIsInB1c2giLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImJ1bmRsZUlkcyIsImluY2x1ZGVTYWZhcmkiLCJpc1NhZmFyaSIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJyZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJqb2luIiwiYXR0ZW1wdGVkQXBwSWRLZXkiLCJyZXN1bHQiLCJzZWFyY2hGb3JQYWdlIiwiRXJyb3IiLCJpZ24iLCJhcHBzRGljdCIsInZhbHVlcyIsInByb21pc2UiLCJkaWN0Iiwic2VsZWN0UGFnZSIsInBhZ2VJZEtleSIsInNraXBSZWFkeUNoZWNrIiwiY2hlY2tQYWdlSXNSZWFkeSIsInBhZ2VVbmxvYWQiLCJhcHBzIiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJsZW5ndGgiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwiZW50cnkiLCJhcHBJbmZvRnJvbURpY3QiLCJpc1VuZGVmaW5lZCIsImRlZmVycmVkUHJvbWlzZSIsImdldERlYnVnZ2VyQXBwS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21peGlucy9jb25uZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICAgICAgICAgZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyB0aW1pbmcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY29uc3QgQVBQX0NPTk5FQ1RfVElNRU9VVF9NUyA9IDA7XG5jb25zdCBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyA9IDEwMDtcbmNvbnN0IFNFTEVDVF9BUFBfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyA9IDUwMDtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBCTEFOS19QQUdFX1VSTCA9ICdhYm91dDpibGFuayc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2V0Q29ubmVjdGlvbktleSAoKSB7XG4gIGxvZy5kZWJ1ZygnU2VuZGluZyBjb25uZWN0aW9uIGtleSByZXF1ZXN0Jyk7XG4gIC8vIHNlbmQgYnV0IG9ubHkgd2FpdCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCB3b3JrZWRcbiAgLy8gYXMgcmVzcG9uc2UgZnJvbSBXZWIgSW5zcGVjdG9yIGNhbiB0YWtlIGEgbG9uZyB0aW1lXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3NldENvbm5lY3Rpb25LZXknLCB7fSwgZmFsc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0ICh0aW1lb3V0ID0gQVBQX0NPTk5FQ1RfVElNRU9VVF9NUykge1xuICB0aGlzLnNldHVwKCk7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgcnBjIGNsaWVudFxuICB0aGlzLmluaXRScGNDbGllbnQoKTtcblxuICAvLyBsaXN0ZW4gZm9yIGJhc2ljIGRlYnVnZ2VyLWxldmVsIGV2ZW50c1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRTZXR1cDonLCBfLm5vb3ApO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLCB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0OicsIHRoaXMub25Db25uZWN0ZWRBcHBsaWNhdGlvbkxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIHRoaXMub25BcHBDb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonLCB0aGlzLm9uQXBwRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIHRoaXMub25BcHBVcGRhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZERyaXZlckxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCB0aGlzLm9uQ3VycmVudFN0YXRlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignUGFnZS5mcmFtZURldGFjaGVkJywgdGhpcy5mcmFtZURldGFjaGVkLmJpbmQodGhpcykpO1xuXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LmNvbm5lY3QoKTtcblxuICAvLyBnZXQgdGhlIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFwcFxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oKCkgPT4gIV8uaXNFbXB0eSh0aGlzLmFwcERpY3QpLCB7XG4gICAgICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgICAgIGludGVydmFsOiBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwbGljYXRpb25zIHRvIGJlIHJlcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcERpY3QgfHwge307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihgRXJyb3Igc2V0dGluZyBjb25uZWN0aW9uIGtleTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdCAoKSB7XG4gIGlmICh0aGlzLnJwY0NsaWVudCkge1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgfVxuICB0aGlzLmVtaXQoZXZlbnRzLkVWRU5UX0RJU0NPTk5FQ1QsIHRydWUpO1xuICB0aGlzLnRlYXJkb3duKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdEFwcCAoY3VycmVudFVybCA9IG51bGwsIG1heFRyaWVzID0gU0VMRUNUX0FQUF9SRVRSSUVTLCBpZ25vcmVBYm91dEJsYW5rVXJsID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldDtcbiAgdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZygnU2VsZWN0aW5nIGFwcGxpY2F0aW9uJyk7XG4gICAgaWYgKCF0aGlzLmFwcERpY3QgfHwgXy5pc0VtcHR5KHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTm8gYXBwbGljYXRpb25zIGN1cnJlbnRseSBjb25uZWN0ZWQuJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qge2FwcElkS2V5LCBwYWdlRGljdH0gPSBhd2FpdCB0aGlzLnNlYXJjaEZvckFwcChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCk7XG5cbiAgICAvLyBpZiwgYWZ0ZXIgYWxsIHRoaXMsIHdlIGhhdmUgbm8gZGljdGlvbmFyeSwgd2UgaGF2ZSBmYWlsZWRcbiAgICBpZiAoIWFwcElkS2V5IHx8ICFwYWdlRGljdCkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhbHRlcmVkIGFwcCBpZCwgdXBkYXRpbmcgZnJvbSAnJHt0aGlzLmFwcElkS2V5fScgdG8gJyR7YXBwSWRLZXl9J2ApO1xuICAgICAgdGhpcy5hcHBJZEtleSA9IGFwcElkS2V5O1xuICAgIH1cblxuICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuXG4gICAgLy8gdHJhbnNsYXRlIHRoZSBkaWN0aW9uYXJ5IGludG8gYSB1c2VmdWwgZm9ybSwgYW5kIHJldHVybiB0byBzZW5kZXJcbiAgICBjb25zdCBwYWdlQXJyYXkgPSBfLmlzRW1wdHkodGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkpXG4gICAgICA/IHBhZ2VBcnJheUZyb21EaWN0KHBhZ2VEaWN0KVxuICAgICAgOiB0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheTtcbiAgICBsb2cuZGVidWcoYEZpbmFsbHkgc2VsZWN0aW5nIGFwcCAke3RoaXMuYXBwSWRLZXl9OiAke3NpbXBsZVN0cmluZ2lmeShwYWdlQXJyYXkpfWApO1xuXG4gICAgbGV0IGZ1bGxQYWdlQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyh0aGlzLmFwcERpY3QpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpbmZvLnBhZ2VBcnJheSkgfHwgIWluZm8uaXNBY3RpdmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGFwcC5yZXBsYWNlKCdQSUQ6JywgJycpO1xuICAgICAgZm9yIChjb25zdCBwYWdlIG9mIGluZm8ucGFnZUFycmF5KSB7XG4gICAgICAgIGlmICghKGlnbm9yZUFib3V0QmxhbmtVcmwgJiYgcGFnZS51cmwgPT09IEJMQU5LX1BBR0VfVVJMKSkge1xuICAgICAgICAgIGxldCBwYWdlRGljdCA9IF8uY2xvbmUocGFnZSk7XG4gICAgICAgICAgcGFnZURpY3QuaWQgPSBgJHtpZH0uJHtwYWdlRGljdC5pZH1gO1xuICAgICAgICAgIHBhZ2VEaWN0LmJ1bmRsZUlkID0gaW5mby5idW5kbGVJZDtcbiAgICAgICAgICBmdWxsUGFnZUFycmF5LnB1c2gocGFnZURpY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBhcHAgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICByZXR1cm4gZnVsbFBhZ2VBcnJheTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IHNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlYXJjaEZvckFwcCAoY3VycmVudFVybCwgbWF4VHJpZXMsIGlnbm9yZUFib3V0QmxhbmtVcmwpIHtcbiAgY29uc3QgYnVuZGxlSWRzID0gdGhpcy5pbmNsdWRlU2FmYXJpICYmICF0aGlzLmlzU2FmYXJpXG4gICAgPyBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzLCBTQUZBUklfQlVORExFX0lEXVxuICAgIDogW3RoaXMuYnVuZGxlSWQsIC4uLnRoaXMuYWRkaXRpb25hbEJ1bmRsZUlkc107XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwobWF4VHJpZXMsIFNFTEVDVF9BUFBfUkVUUllfU0xFRVBfTVMsIGFzeW5jIChyZXRyeUNvdW50KSA9PiB7XG4gICAgICBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkodGhpcy5hcHBEaWN0KTtcbiAgICAgIGNvbnN0IHBvc3NpYmxlQXBwSWRzID0gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMoYnVuZGxlSWRzLCB0aGlzLmFwcERpY3QpO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgb3V0IHRoZSBwb3NzaWJsZSBhcHAgaWRzOiAke3Bvc3NpYmxlQXBwSWRzLmpvaW4oJywgJyl9ICh0cnkgIyR7cmV0cnlDb3VudCArIDF9IG9mICR7bWF4VHJpZXN9KWApO1xuICAgICAgZm9yIChjb25zdCBhdHRlbXB0ZWRBcHBJZEtleSBvZiBwb3NzaWJsZUFwcElkcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5hcHBEaWN0W2F0dGVtcHRlZEFwcElkS2V5XS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBTa2lwcGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9JyBiZWNhdXNlIGl0IGlzIG5vdCBhY3RpdmVgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgYXBwICcke2F0dGVtcHRlZEFwcElkS2V5fSdgKTtcbiAgICAgICAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbGVjdEFwcChhdHRlbXB0ZWRBcHBJZEtleSwgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgLy8gaW4gaU9TIDguMiB0aGUgY29ubmVjdCBsb2dpYyBoYXBwZW5zLCBidXQgd2l0aCBhbiBlbXB0eSBkaWN0aW9uYXJ5XG4gICAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnRW1wdHkgcGFnZSBkaWN0aW9uYXJ5IHJlY2VpdmVkLiBUcnlpbmcgYWdhaW4uJyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzYXZlIHRoZSBwYWdlIGFycmF5IGZvciB0aGlzIGFwcFxuICAgICAgICAgIHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5ID0gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpO1xuXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciB1cmwsIG1ha2Ugc3VyZSB3ZVxuICAgICAgICAgIC8vIGhhdmUgdGhlIHJpZ2h0IHBhZ2UuIElnbm9yZSBlbXB0eSBvciB1bmRlZmluZWQgdXJscy5cbiAgICAgICAgICAvLyBJZ25vcmUgYWJvdXQ6YmxhbmsgaWYgcmVxdWVzdGVkLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoRm9yUGFnZSh0aGlzLmFwcERpY3QsIGN1cnJlbnRVcmwsIGlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXBwLCBidXQgZXhwZWN0ZWQgdXJsICgnJHtjdXJyZW50VXJsfScpIHdhcyBub3QgZm91bmQuIFRyeWluZyBhZ2Fpbi5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBhcHAsIGJ1dCBubyBtYXRjaCB3YXMgZm91bmQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgY2hlY2tpbmcgYXBwbGljYXRpb246ICcke2Vyci5tZXNzYWdlfScuIFJldHJ5aW5nIGNvbm5lY3Rpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmluZCBhbiBhcHAgdG8gc2VsZWN0Jyk7XG4gICAgfSwgMCk7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgY29ubmVjdCB0byBhIHZhbGlkIGFwcCBhZnRlciAke21heFRyaWVzfSB0cmllcy5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWFyY2hGb3JQYWdlIChhcHBzRGljdCwgY3VycmVudFVybCA9IG51bGwsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBmb3IgKGNvbnN0IGFwcERpY3Qgb2YgXy52YWx1ZXMoYXBwc0RpY3QpKSB7XG4gICAgaWYgKCFhcHBEaWN0IHx8ICFhcHBEaWN0LmlzQWN0aXZlIHx8ICFhcHBEaWN0LnBhZ2VBcnJheSB8fCBhcHBEaWN0LnBhZ2VBcnJheS5wcm9taXNlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgYXBwRGljdC5wYWdlQXJyYXkpIHtcbiAgICAgIGlmICgoIWlnbm9yZUFib3V0QmxhbmtVcmwgfHwgZGljdC51cmwgIT09IEJMQU5LX1BBR0VfVVJMKSAmJlxuICAgICAgICAgICghY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gYCR7Y3VycmVudFVybH0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHsgYXBwSWRLZXk6IGFwcERpY3QuaWQsIHBhZ2VEaWN0OiBkaWN0IH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5LCBza2lwUmVhZHlDaGVjayA9IGZhbHNlKSB7XG4gIHRoaXMuYXBwSWRLZXkgPSBgUElEOiR7YXBwSWRLZXl9YDtcbiAgdGhpcy5wYWdlSWRLZXkgPSBwYWdlSWRLZXk7XG5cbiAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgcGFnZSAnJHtwYWdlSWRLZXl9JyBvbiBhcHAgJyR7dGhpcy5hcHBJZEtleX0nIGFuZCBmb3J3YXJkaW5nIHNvY2tldCBzZXR1cGApO1xuXG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0UGFnZSh0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXkpO1xuXG4gIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIGdvXG4gIGlmICghc2tpcFJlYWR5Q2hlY2sgJiYgIWF3YWl0IHRoaXMuY2hlY2tQYWdlSXNSZWFkeSgpKSB7XG4gICAgYXdhaXQgdGhpcy5wYWdlVW5sb2FkKCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFNlbGVjdGVkIHBhZ2UgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbn1cblxuZnVuY3Rpb24gbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IChhcHBzKSB7XG4gIGZ1bmN0aW9uIGdldFZhbHVlU3RyaW5nIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnW0Z1bmN0aW9uXSc7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdwYWdlQXJyYXknICYmICFfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYFwiV2FpdGluZyBmb3IgZGF0YVwiYDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICBsb2cuZGVidWcoJ0N1cnJlbnQgYXBwbGljYXRpb25zIGF2YWlsYWJsZTonKTtcbiAgZm9yIChjb25zdCBbYXBwLCBpbmZvXSBvZiBfLnRvUGFpcnMoYXBwcykpIHtcbiAgICBsb2cuZGVidWcoYCAgICBBcHBsaWNhdGlvbjogXCIke2FwcH1cImApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhpbmZvKSkge1xuICAgICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06YCk7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB2YWx1ZSkge1xuICAgICAgICAgIGxldCBwcmVmaXggPSAnLSAnO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIF8udG9QYWlycyhwYWdlKSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICAgJHtwcmVmaXh9JHtrfTogJHtKU09OLnN0cmluZ2lmeSh2KX1gKTtcbiAgICAgICAgICAgIHByZWZpeCA9ICcgICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGdldFZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgJHtrZXl9OiAke3ZhbHVlU3RyaW5nfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBcHBzV2l0aERpY3QgKGRpY3QpIHtcbiAgLy8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJ5IGludG8gYSBuaWNlIGZvcm0sIGFuZCBhZGQgaXQgdG8gdGhlXG4gIC8vIGFwcGxpY2F0aW9uIGRpY3Rpb25hcnlcbiAgdGhpcy5hcHBEaWN0ID0gdGhpcy5hcHBEaWN0IHx8IHt9O1xuICBsZXQgW2lkLCBlbnRyeV0gPSBhcHBJbmZvRnJvbURpY3QoZGljdCk7XG4gIGlmICh0aGlzLmFwcERpY3RbaWRdKSB7XG4gICAgLy8gcHJlc2VydmUgdGhlIHBhZ2UgZGljdGlvbmFyeSBmb3IgdGhpcyBlbnRyeVxuICAgIGVudHJ5LnBhZ2VBcnJheSA9IHRoaXMuYXBwRGljdFtpZF0ucGFnZUFycmF5O1xuICB9XG4gIHRoaXMuYXBwRGljdFtpZF0gPSBlbnRyeTtcblxuICAvLyBhZGQgYSBwcm9taXNlIHRvIGdldCB0aGUgcGFnZSBkaWN0aW9uYXJ5XG4gIGlmIChfLmlzVW5kZWZpbmVkKGVudHJ5LnBhZ2VBcnJheSkpIHtcbiAgICBlbnRyeS5wYWdlQXJyYXkgPSBkZWZlcnJlZFByb21pc2UoKTtcbiAgfVxuXG4gIC8vIHRyeSB0byBnZXQgdGhlIGFwcCBpZCBmcm9tIG91ciBjb25uZWN0ZWQgYXBwc1xuICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICB0aGlzLmFwcElkS2V5ID0gZ2V0RGVidWdnZXJBcHBLZXkodGhpcy5idW5kbGVJZCwgdGhpcy5hcHBEaWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHNldENvbm5lY3Rpb25LZXksIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHNlbGVjdEFwcCwgc2VhcmNoRm9yQXBwLCBzZWFyY2hGb3JQYWdlLCBzZWxlY3RQYWdlLCB1cGRhdGVBcHBzV2l0aERpY3QgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxzQkFBc0IsR0FBRyxDQUFDO0FBQ2hDLE1BQU1DLHVCQUF1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
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfQ09OTkVDVF9USU1FT1VUX01TIiwiQVBQX0NPTk5FQ1RfSU5URVJWQUxfTVMiLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiU0FGQVJJX0JVTkRMRV9JRCIsIkJMQU5LX1BBR0VfVVJMIiwic2V0Q29ubmVjdGlvbktleSIsImxvZyIsImRlYnVnIiwicnBjQ2xpZW50Iiwic2VuZCIsImNvbm5lY3QiLCJ0aW1lb3V0Iiwic2V0dXAiLCJpbml0UnBjQ2xpZW50Iiwib24iLCJfIiwibm9vcCIsIm9uUGFnZUNoYW5nZSIsImJpbmQiLCJvbkNvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwib25Db25uZWN0ZWREcml2ZXJMaXN0Iiwib25DdXJyZW50U3RhdGUiLCJmcmFtZURldGFjaGVkIiwid2FpdEZvckNvbmRpdGlvbiIsImlzRW1wdHkiLCJhcHBEaWN0Iiwid2FpdE1zIiwiaW50ZXJ2YWwiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJkaXNjb25uZWN0IiwiZW1pdCIsImV2ZW50cyIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJ0ZWFyZG93biIsInNlbGVjdEFwcCIsImN1cnJlbnRVcmwiLCJtYXhUcmllcyIsImlnbm9yZUFib3V0QmxhbmtVcmwiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsImFwcElkS2V5IiwicGFnZURpY3QiLCJzZWFyY2hGb3JBcHAiLCJlcnJvckFuZFRocm93IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwicGFnZUFycmF5IiwicGFnZUFycmF5RnJvbURpY3QiLCJzaW1wbGVTdHJpbmdpZnkiLCJmdWxsUGFnZUFycmF5IiwiYXBwIiwiaW5mbyIsInRvUGFpcnMiLCJpc0FycmF5IiwiaXNBY3RpdmUiLCJpZCIsInJlcGxhY2UiLCJwYWdlIiwidXJsIiwiY2xvbmUiLCJidW5kbGVJZCIsInB1c2giLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImJ1bmRsZUlkcyIsImluY2x1ZGVTYWZhcmkiLCJpc1NhZmFyaSIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJyZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJqb2luIiwiYXR0ZW1wdGVkQXBwSWRLZXkiLCJyZXN1bHQiLCJzZWFyY2hGb3JQYWdlIiwiRXJyb3IiLCJpZ24iLCJhcHBzRGljdCIsInZhbHVlcyIsInByb21pc2UiLCJkaWN0Iiwic2VsZWN0UGFnZSIsInBhZ2VJZEtleSIsInNraXBSZWFkeUNoZWNrIiwiY2hlY2tQYWdlSXNSZWFkeSIsInBhZ2VVbmxvYWQiLCJhcHBzIiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJsZW5ndGgiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwiZW50cnkiLCJhcHBJbmZvRnJvbURpY3QiLCJpc1VuZGVmaW5lZCIsImRlZmVycmVkUHJvbWlzZSIsImdldERlYnVnZ2VyQXBwS2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21peGlucy9jb25uZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGFwcEluZm9Gcm9tRGljdCwgcGFnZUFycmF5RnJvbURpY3QsIGdldERlYnVnZ2VyQXBwS2V5LFxuICAgICAgICAgZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMsIHNpbXBsZVN0cmluZ2lmeSwgZGVmZXJyZWRQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyB0aW1pbmcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY29uc3QgQVBQX0NPTk5FQ1RfVElNRU9VVF9NUyA9IDA7XG5jb25zdCBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyA9IDEwMDtcbmNvbnN0IFNFTEVDVF9BUFBfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyA9IDUwMDtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBCTEFOS19QQUdFX1VSTCA9ICdhYm91dDpibGFuayc7XG5cblxuYXN5bmMgZnVuY3Rpb24gc2V0Q29ubmVjdGlvbktleSAoKSB7XG4gIGxvZy5kZWJ1ZygnU2VuZGluZyBjb25uZWN0aW9uIGtleSByZXF1ZXN0Jyk7XG4gIC8vIHNlbmQgYnV0IG9ubHkgd2FpdCB0byBtYWtlIHN1cmUgdGhlIHNvY2tldCB3b3JrZWRcbiAgLy8gYXMgcmVzcG9uc2UgZnJvbSBXZWIgSW5zcGVjdG9yIGNhbiB0YWtlIGEgbG9uZyB0aW1lXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3NldENvbm5lY3Rpb25LZXknLCB7fSwgZmFsc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0ICh0aW1lb3V0ID0gQVBQX0NPTk5FQ1RfVElNRU9VVF9NUykge1xuICB0aGlzLnNldHVwKCk7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgcnBjIGNsaWVudFxuICB0aGlzLmluaXRScGNDbGllbnQoKTtcblxuICAvLyBsaXN0ZW4gZm9yIGJhc2ljIGRlYnVnZ2VyLWxldmVsIGV2ZW50c1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19yZXBvcnRTZXR1cDonLCBfLm5vb3ApO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLCB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0OicsIHRoaXMub25Db25uZWN0ZWRBcHBsaWNhdGlvbkxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIHRoaXMub25BcHBDb25uZWN0LmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonLCB0aGlzLm9uQXBwRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgdGhpcy5ycGNDbGllbnQub24oJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOicsIHRoaXMub25BcHBVcGRhdGUuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JywgdGhpcy5vbkNvbm5lY3RlZERyaXZlckxpc3QuYmluZCh0aGlzKSk7XG4gIHRoaXMucnBjQ2xpZW50Lm9uKCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCB0aGlzLm9uQ3VycmVudFN0YXRlLmJpbmQodGhpcykpO1xuICB0aGlzLnJwY0NsaWVudC5vbignUGFnZS5mcmFtZURldGFjaGVkJywgdGhpcy5mcmFtZURldGFjaGVkLmJpbmQodGhpcykpO1xuXG4gIGF3YWl0IHRoaXMucnBjQ2xpZW50LmNvbm5lY3QoKTtcblxuICAvLyBnZXQgdGhlIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFwcFxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBhcHBsaWNhdGlvbnMgdG8gYmUgcmVwb3J0ZWRgKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oKCkgPT4gIV8uaXNFbXB0eSh0aGlzLmFwcERpY3QpLCB7XG4gICAgICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgICAgIGludGVydmFsOiBBUFBfQ09OTkVDVF9JTlRFUlZBTF9NUyxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgYXBwbGljYXRpb25zIHRvIGJlIHJlcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwcERpY3QgfHwge307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihgRXJyb3Igc2V0dGluZyBjb25uZWN0aW9uIGtleTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdCAoKSB7XG4gIGlmICh0aGlzLnJwY0NsaWVudCkge1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgfVxuICB0aGlzLmVtaXQoZXZlbnRzLkVWRU5UX0RJU0NPTk5FQ1QsIHRydWUpO1xuICB0aGlzLnRlYXJkb3duKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdEFwcCAoY3VycmVudFVybCA9IG51bGwsIG1heFRyaWVzID0gU0VMRUNUX0FQUF9SRVRSSUVTLCBpZ25vcmVBYm91dEJsYW5rVXJsID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldDtcbiAgdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZygnU2VsZWN0aW5nIGFwcGxpY2F0aW9uJyk7XG4gICAgaWYgKCF0aGlzLmFwcERpY3QgfHwgXy5pc0VtcHR5KHRoaXMuYXBwRGljdCkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTm8gYXBwbGljYXRpb25zIGN1cnJlbnRseSBjb25uZWN0ZWQuJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qge2FwcElkS2V5LCBwYWdlRGljdH0gPSBhd2FpdCB0aGlzLnNlYXJjaEZvckFwcChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCk7XG5cbiAgICAvLyBpZiwgYWZ0ZXIgYWxsIHRoaXMsIHdlIGhhdmUgbm8gZGljdGlvbmFyeSwgd2UgaGF2ZSBmYWlsZWRcbiAgICBpZiAoIWFwcElkS2V5IHx8ICFwYWdlRGljdCkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhbHRlcmVkIGFwcCBpZCwgdXBkYXRpbmcgZnJvbSAnJHt0aGlzLmFwcElkS2V5fScgdG8gJyR7YXBwSWRLZXl9J2ApO1xuICAgICAgdGhpcy5hcHBJZEtleSA9IGFwcElkS2V5O1xuICAgIH1cblxuICAgIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuXG4gICAgLy8gdHJhbnNsYXRlIHRoZSBkaWN0aW9uYXJ5IGludG8gYSB1c2VmdWwgZm9ybSwgYW5kIHJldHVybiB0byBzZW5kZXJcbiAgICBjb25zdCBwYWdlQXJyYXkgPSBfLmlzRW1wdHkodGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkpXG4gICAgICA/IHBhZ2VBcnJheUZyb21EaWN0KHBhZ2VEaWN0KVxuICAgICAgOiB0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheTtcbiAgICBsb2cuZGVidWcoYEZpbmFsbHkgc2VsZWN0aW5nIGFwcCAke3RoaXMuYXBwSWRLZXl9OiAke3NpbXBsZVN0cmluZ2lmeShwYWdlQXJyYXkpfWApO1xuXG4gICAgbGV0IGZ1bGxQYWdlQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyh0aGlzLmFwcERpY3QpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShpbmZvLnBhZ2VBcnJheSkgfHwgIWluZm8uaXNBY3RpdmUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGFwcC5yZXBsYWNlKCdQSUQ6JywgJycpO1xuICAgICAgZm9yIChjb25zdCBwYWdlIG9mIGluZm8ucGFnZUFycmF5KSB7XG4gICAgICAgIGlmICghKGlnbm9yZUFib3V0QmxhbmtVcmwgJiYgcGFnZS51cmwgPT09IEJMQU5LX1BBR0VfVVJMKSkge1xuICAgICAgICAgIGxldCBwYWdlRGljdCA9IF8uY2xvbmUocGFnZSk7XG4gICAgICAgICAgcGFnZURpY3QuaWQgPSBgJHtpZH0uJHtwYWdlRGljdC5pZH1gO1xuICAgICAgICAgIHBhZ2VEaWN0LmJ1bmRsZUlkID0gaW5mby5idW5kbGVJZDtcbiAgICAgICAgICBmdWxsUGFnZUFycmF5LnB1c2gocGFnZURpY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBhcHAgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICByZXR1cm4gZnVsbFBhZ2VBcnJheTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IHNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlYXJjaEZvckFwcCAoY3VycmVudFVybCwgbWF4VHJpZXMsIGlnbm9yZUFib3V0QmxhbmtVcmwpIHtcbiAgY29uc3QgYnVuZGxlSWRzID0gdGhpcy5pbmNsdWRlU2FmYXJpICYmICF0aGlzLmlzU2FmYXJpXG4gICAgPyBbdGhpcy5idW5kbGVJZCwgLi4udGhpcy5hZGRpdGlvbmFsQnVuZGxlSWRzLCBTQUZBUklfQlVORExFX0lEXVxuICAgIDogW3RoaXMuYnVuZGxlSWQsIC4uLnRoaXMuYWRkaXRpb25hbEJ1bmRsZUlkc107XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwobWF4VHJpZXMsIFNFTEVDVF9BUFBfUkVUUllfU0xFRVBfTVMsIGFzeW5jIChyZXRyeUNvdW50KSA9PiB7XG4gICAgICBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkodGhpcy5hcHBEaWN0KTtcbiAgICAgIGNvbnN0IHBvc3NpYmxlQXBwSWRzID0gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMoYnVuZGxlSWRzLCB0aGlzLmFwcERpY3QpO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgb3V0IHRoZSBwb3NzaWJsZSBhcHAgaWRzOiAke3Bvc3NpYmxlQXBwSWRzLmpvaW4oJywgJyl9ICh0cnkgIyR7cmV0cnlDb3VudCArIDF9IG9mICR7bWF4VHJpZXN9KWApO1xuICAgICAgZm9yIChjb25zdCBhdHRlbXB0ZWRBcHBJZEtleSBvZiBwb3NzaWJsZUFwcElkcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5hcHBEaWN0W2F0dGVtcHRlZEFwcElkS2V5XS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBTa2lwcGluZyBhcHAgJyR7YXR0ZW1wdGVkQXBwSWRLZXl9JyBiZWNhdXNlIGl0IGlzIG5vdCBhY3RpdmVgKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgYXBwICcke2F0dGVtcHRlZEFwcElkS2V5fSdgKTtcbiAgICAgICAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbGVjdEFwcChhdHRlbXB0ZWRBcHBJZEtleSwgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgLy8gaW4gaU9TIDguMiB0aGUgY29ubmVjdCBsb2dpYyBoYXBwZW5zLCBidXQgd2l0aCBhbiBlbXB0eSBkaWN0aW9uYXJ5XG4gICAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnRW1wdHkgcGFnZSBkaWN0aW9uYXJ5IHJlY2VpdmVkLiBUcnlpbmcgYWdhaW4uJyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzYXZlIHRoZSBwYWdlIGFycmF5IGZvciB0aGlzIGFwcFxuICAgICAgICAgIHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5ID0gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpO1xuXG4gICAgICAgICAgLy8gaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciB1cmwsIG1ha2Ugc3VyZSB3ZVxuICAgICAgICAgIC8vIGhhdmUgdGhlIHJpZ2h0IHBhZ2UuIElnbm9yZSBlbXB0eSBvciB1bmRlZmluZWQgdXJscy5cbiAgICAgICAgICAvLyBJZ25vcmUgYWJvdXQ6YmxhbmsgaWYgcmVxdWVzdGVkLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoRm9yUGFnZSh0aGlzLmFwcERpY3QsIGN1cnJlbnRVcmwsIGlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXBwLCBidXQgZXhwZWN0ZWQgdXJsICgnJHtjdXJyZW50VXJsfScpIHdhcyBub3QgZm91bmQuIFRyeWluZyBhZ2Fpbi5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBhcHAsIGJ1dCBubyBtYXRjaCB3YXMgZm91bmQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgY2hlY2tpbmcgYXBwbGljYXRpb246ICcke2Vyci5tZXNzYWdlfScuIFJldHJ5aW5nIGNvbm5lY3Rpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmluZCBhbiBhcHAgdG8gc2VsZWN0Jyk7XG4gICAgfSwgMCk7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgY29ubmVjdCB0byBhIHZhbGlkIGFwcCBhZnRlciAke21heFRyaWVzfSB0cmllcy5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWFyY2hGb3JQYWdlIChhcHBzRGljdCwgY3VycmVudFVybCA9IG51bGwsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICBmb3IgKGNvbnN0IGFwcERpY3Qgb2YgXy52YWx1ZXMoYXBwc0RpY3QpKSB7XG4gICAgaWYgKCFhcHBEaWN0IHx8ICFhcHBEaWN0LmlzQWN0aXZlIHx8ICFhcHBEaWN0LnBhZ2VBcnJheSB8fCBhcHBEaWN0LnBhZ2VBcnJheS5wcm9taXNlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgYXBwRGljdC5wYWdlQXJyYXkpIHtcbiAgICAgIGlmICgoIWlnbm9yZUFib3V0QmxhbmtVcmwgfHwgZGljdC51cmwgIT09IEJMQU5LX1BBR0VfVVJMKSAmJlxuICAgICAgICAgICghY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gYCR7Y3VycmVudFVybH0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHsgYXBwSWRLZXk6IGFwcERpY3QuaWQsIHBhZ2VEaWN0OiBkaWN0IH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5LCBza2lwUmVhZHlDaGVjayA9IGZhbHNlKSB7XG4gIHRoaXMuYXBwSWRLZXkgPSBgUElEOiR7YXBwSWRLZXl9YDtcbiAgdGhpcy5wYWdlSWRLZXkgPSBwYWdlSWRLZXk7XG5cbiAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgcGFnZSAnJHtwYWdlSWRLZXl9JyBvbiBhcHAgJyR7dGhpcy5hcHBJZEtleX0nIGFuZCBmb3J3YXJkaW5nIHNvY2tldCBzZXR1cGApO1xuXG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0UGFnZSh0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXkpO1xuXG4gIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIGdvXG4gIGlmICghc2tpcFJlYWR5Q2hlY2sgJiYgIWF3YWl0IHRoaXMuY2hlY2tQYWdlSXNSZWFkeSgpKSB7XG4gICAgYXdhaXQgdGhpcy5wYWdlVW5sb2FkKCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFNlbGVjdGVkIHBhZ2UgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbn1cblxuZnVuY3Rpb24gbG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IChhcHBzKSB7XG4gIGZ1bmN0aW9uIGdldFZhbHVlU3RyaW5nIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnW0Z1bmN0aW9uXSc7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdwYWdlQXJyYXknICYmICFfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYFwiV2FpdGluZyBmb3IgZGF0YVwiYDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxuICBsb2cuZGVidWcoJ0N1cnJlbnQgYXBwbGljYXRpb25zIGF2YWlsYWJsZTonKTtcbiAgZm9yIChjb25zdCBbYXBwLCBpbmZvXSBvZiBfLnRvUGFpcnMoYXBwcykpIHtcbiAgICBsb2cuZGVidWcoYCAgICBBcHBsaWNhdGlvbjogXCIke2FwcH1cImApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhpbmZvKSkge1xuICAgICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06YCk7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB2YWx1ZSkge1xuICAgICAgICAgIGxldCBwcmVmaXggPSAnLSAnO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIF8udG9QYWlycyhwYWdlKSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICAgJHtwcmVmaXh9JHtrfTogJHtKU09OLnN0cmluZ2lmeSh2KX1gKTtcbiAgICAgICAgICAgIHByZWZpeCA9ICcgICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGdldFZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgJHtrZXl9OiAke3ZhbHVlU3RyaW5nfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVBcHBzV2l0aERpY3QgKGRpY3QpIHtcbiAgLy8gZ2V0IHRoZSBkaWN0aW9uYXJ5IGVudHJ5IGludG8gYSBuaWNlIGZvcm0sIGFuZCBhZGQgaXQgdG8gdGhlXG4gIC8vIGFwcGxpY2F0aW9uIGRpY3Rpb25hcnlcbiAgdGhpcy5hcHBEaWN0ID0gdGhpcy5hcHBEaWN0IHx8IHt9O1xuICBsZXQgW2lkLCBlbnRyeV0gPSBhcHBJbmZvRnJvbURpY3QoZGljdCk7XG4gIGlmICh0aGlzLmFwcERpY3RbaWRdKSB7XG4gICAgLy8gcHJlc2VydmUgdGhlIHBhZ2UgZGljdGlvbmFyeSBmb3IgdGhpcyBlbnRyeVxuICAgIGVudHJ5LnBhZ2VBcnJheSA9IHRoaXMuYXBwRGljdFtpZF0ucGFnZUFycmF5O1xuICB9XG4gIHRoaXMuYXBwRGljdFtpZF0gPSBlbnRyeTtcblxuICAvLyBhZGQgYSBwcm9taXNlIHRvIGdldCB0aGUgcGFnZSBkaWN0aW9uYXJ5XG4gIGlmIChfLmlzVW5kZWZpbmVkKGVudHJ5LnBhZ2VBcnJheSkpIHtcbiAgICBlbnRyeS5wYWdlQXJyYXkgPSBkZWZlcnJlZFByb21pc2UoKTtcbiAgfVxuXG4gIC8vIHRyeSB0byBnZXQgdGhlIGFwcCBpZCBmcm9tIG91ciBjb25uZWN0ZWQgYXBwc1xuICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICB0aGlzLmFwcElkS2V5ID0gZ2V0RGVidWdnZXJBcHBLZXkodGhpcy5idW5kbGVJZCwgdGhpcy5hcHBEaWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7IHNldENvbm5lY3Rpb25LZXksIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHNlbGVjdEFwcCwgc2VhcmNoRm9yQXBwLCBzZWFyY2hGb3JQYWdlLCBzZWxlY3RQYWdlLCB1cGRhdGVBcHBzV2l0aERpY3QgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxzQkFBc0IsR0FBRyxDQUFDO0FBQ2hDLE1BQU1DLHVCQUF1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
@@ -1 +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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"}
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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"}
@@ -14,7 +14,6 @@ var _support = require("@appium/support");
14
14
  var _asyncbox = require("asyncbox");
15
15
  var _lodash = _interopRequireDefault(require("lodash"));
16
16
  const RPC_RESPONSE_TIMEOUT_MS = 5000;
17
-
18
17
  async function executeAtom(atom, args, frames) {
19
18
  if (!this.rpcClient.isConnected) {
20
19
  throw new Error('Remote debugger is not connected');
@@ -33,7 +32,6 @@ async function executeAtomAsync(atom, args, frames) {
33
32
  pageIdKey: this.pageIdKey,
34
33
  returnByValue: false
35
34
  }, opts));
36
-
37
35
  const promiseName = `appiumAsyncExecutePromise${_support.util.uuidV4().replace(/-/g, '')}`;
38
36
  const script = `var res, rej;
39
37
  window.${promiseName} = new Promise(function (resolve, reject) {
@@ -47,13 +45,11 @@ async function executeAtomAsync(atom, args, frames) {
47
45
  expression: script
48
46
  });
49
47
  const promiseObjectId = obj.result.objectId;
50
-
51
48
  const asyncCallBack = `function (res) {
52
49
  window.${promiseName}.resolve(res);
53
50
  window.${promiseName}Value = res;
54
51
  }`;
55
52
  await this.execute(await (0, _atoms.getScriptForAtom)(atom, args, frames, asyncCallBack));
56
-
57
53
  let res;
58
54
  const subcommandTimeout = 1000;
59
55
  try {
@@ -141,4 +137,4 @@ var _default = {
141
137
  callFunction
142
138
  };
143
139
  exports.default = _default;
144
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSUENfUkVTUE9OU0VfVElNRU9VVF9NUyIsImV4ZWN1dGVBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJycGNDbGllbnQiLCJpc0Nvbm5lY3RlZCIsIkVycm9yIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwic2NyaXB0IiwiZ2V0U2NyaXB0Rm9yQXRvbSIsInZhbHVlIiwiZXhlY3V0ZSIsIl8iLCJ0cnVuY2F0ZSIsInNpbXBsZVN0cmluZ2lmeSIsImxlbmd0aCIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJleGVjdXRlQXRvbUFzeW5jIiwiZXZhbHVhdGUiLCJtZXRob2QiLCJvcHRzIiwic2VuZCIsIk9iamVjdCIsImFzc2lnbiIsImFwcElkS2V5IiwicGFnZUlkS2V5IiwicmV0dXJuQnlWYWx1ZSIsInByb21pc2VOYW1lIiwidXRpbCIsInV1aWRWNCIsInJlcGxhY2UiLCJvYmoiLCJleHByZXNzaW9uIiwicHJvbWlzZU9iamVjdElkIiwicmVzdWx0Iiwib2JqZWN0SWQiLCJhc3luY0NhbGxCYWNrIiwicmVzIiwic3ViY29tbWFuZFRpbWVvdXQiLCJnZW5lcmF0ZVByZXZpZXciLCJzYXZlUmVzdWx0IiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwicmV0cnlXYWl0IiwidGltZW91dCIsInJldHJpZXMiLCJwYXJzZUludCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInJldHJ5SW50ZXJ2YWwiLCJoYXNWYWx1ZSIsImVycm9ycyIsIlRpbWVvdXRFcnJvciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaWduIiwiY29udmVydFJlc3VsdCIsImNvbW1hbmQiLCJvdmVycmlkZSIsInBhZ2VMb2FkaW5nIiwid2FpdEZvckRvbSIsImNoZWNrUGFyYW1zIiwiZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUiLCJnYXJiYWdlQ29sbGVjdCIsImNhbGxGdW5jdGlvbiIsImZuIiwiZnVuY3Rpb25EZWNsYXJhdGlvbiIsImFyZ3VtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9taXhpbnMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGNoZWNrUGFyYW1zLCBzaW1wbGVTdHJpbmdpZnksIGNvbnZlcnRSZXN1bHQsIFJFU1BPTlNFX0xPR19MRU5HVEggfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTY3JpcHRGb3JBdG9tIH0gZnJvbSAnLi4vYXRvbXMnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbi8qIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB3ZWJraXQgdG8gcmV0dXJuIGEgcmVzcG9uc2UgYmVmb3JlIHRpbWluZyBvdXQgKi9cbmNvbnN0IFJQQ19SRVNQT05TRV9USU1FT1VUX01TID0gNTAwMDtcblxuLyoqXG4gKiBFeGVjdXRlIGEgU2VsZW5pdW0gYXRvbSBpbiBTYWZhcmlcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdG9tIE5hbWUgb2YgU2VsZW5pdW0gYXRvbSAoc2VlIGF0b21zLyBkaXJlY3RvcnkpXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBhcmdzIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGF0b21cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZnJhbWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVzdWx0IHJlY2VpdmVkIGZyb20gdGhlIGF0b21cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcykge1xuICBpZiAoIXRoaXMucnBjQ2xpZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdGUgZGVidWdnZXIgaXMgbm90IGNvbm5lY3RlZCcpO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgYXRvbSAnJHthdG9tfScgd2l0aCAnYXJncz0ke0pTT04uc3RyaW5naWZ5KGFyZ3MpfTsgZnJhbWVzPSR7ZnJhbWVzfSdgKTtcbiAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZ2V0U2NyaXB0Rm9yQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQsIHRydWUpO1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHJlc3VsdCBmb3IgYXRvbSAnJHthdG9tfScgZXhlY3V0aW9uOiAke18udHJ1bmNhdGUoc2ltcGxlU3RyaW5naWZ5KHZhbHVlKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIGZyYW1lcykge1xuICAvLyBoZWxwZXIgdG8gc2VuZCBkaXJlY3RseSB0byB0aGUgd2ViIGluc3BlY3RvclxuICBjb25zdCBldmFsdWF0ZSA9IGFzeW5jIChtZXRob2QsIG9wdHMpID0+IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQobWV0aG9kLCBPYmplY3QuYXNzaWduKHtcbiAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIHJldHVybkJ5VmFsdWU6IGZhbHNlLFxuICB9LCBvcHRzKSk7XG5cbiAgLy8gZmlyc3QgY3JlYXRlIGEgUHJvbWlzZSBvbiB0aGUgcGFnZSwgc2F2aW5nIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnNcbiAgLy8gYXMgcHJvcGVydGllc1xuICBjb25zdCBwcm9taXNlTmFtZSA9IGBhcHBpdW1Bc3luY0V4ZWN1dGVQcm9taXNlJHt1dGlsLnV1aWRWNCgpLnJlcGxhY2UoLy0vZywgJycpfWA7XG4gIGNvbnN0IHNjcmlwdCA9XG4gICAgYHZhciByZXMsIHJlajtcbiAgICB3aW5kb3cuJHtwcm9taXNlTmFtZX0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZXMgPSByZXNvbHZlO1xuICAgICAgcmVqID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHdpbmRvdy4ke3Byb21pc2VOYW1lfS5yZXNvbHZlID0gcmVzO1xuICAgIHdpbmRvdy4ke3Byb21pc2VOYW1lfS5yZWplY3QgPSByZWo7XG4gICAgd2luZG93LiR7cHJvbWlzZU5hbWV9O2A7XG4gIGNvbnN0IG9iaiA9IGF3YWl0IGV2YWx1YXRlKCdSdW50aW1lLmV2YWx1YXRlJywge1xuICAgIGV4cHJlc3Npb246IHNjcmlwdCxcbiAgfSk7XG4gIGNvbnN0IHByb21pc2VPYmplY3RJZCA9IG9iai5yZXN1bHQub2JqZWN0SWQ7XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYXRvbSwgY2FsbGluZyBiYWNrIHRvIHRoZSByZXNvbHZlIGZ1bmN0aW9uXG4gIGNvbnN0IGFzeW5jQ2FsbEJhY2sgPVxuICAgIGBmdW5jdGlvbiAocmVzKSB7XG4gICAgICB3aW5kb3cuJHtwcm9taXNlTmFtZX0ucmVzb2x2ZShyZXMpO1xuICAgICAgd2luZG93LiR7cHJvbWlzZU5hbWV9VmFsdWUgPSByZXM7XG4gICAgfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZShhd2FpdCBnZXRTY3JpcHRGb3JBdG9tKGF0b20sIGFyZ3MsIGZyYW1lcywgYXN5bmNDYWxsQmFjaykpO1xuXG4gIC8vIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIGJlIHJlc29sdmVkXG4gIGxldCByZXM7XG4gIGNvbnN0IHN1YmNvbW1hbmRUaW1lb3V0ID0gMTAwMDsgLy8gdGltZW91dCBvbiBpbmRpdmlkdWFsIGNvbW1hbmRzXG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZXZhbHVhdGUoJ1J1bnRpbWUuYXdhaXRQcm9taXNlJywge1xuICAgICAgcHJvbWlzZU9iamVjdElkLFxuICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZSxcbiAgICAgIGdlbmVyYXRlUHJldmlldzogdHJ1ZSxcbiAgICAgIHNhdmVSZXN1bHQ6IHRydWUsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoYCdSdW50aW1lLmF3YWl0UHJvbWlzZScgd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIC8vIGF3YWl0UHJvbWlzZSBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSwgc28gc2ltdWxhdGUgaXQgd2l0aCBwb2xsXG4gICAgY29uc3QgcmV0cnlXYWl0ID0gMTAwO1xuICAgIGNvbnN0IHRpbWVvdXQgPSAoYXJncy5sZW5ndGggPj0gMykgPyBhcmdzWzJdIDogUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVM7XG4gICAgLy8gaWYgdGhlIHRpbWVvdXQgbWF0aCB0dXJucyB1cCAwIHJldHJpZXMsIG1ha2Ugc3VyZSBpdCBoYXBwZW5zIG9uY2VcbiAgICBjb25zdCByZXRyaWVzID0gcGFyc2VJbnQodGltZW91dCAvIHJldHJ5V2FpdCwgMTApIHx8IDE7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBhc3luYyBleGVjdXRlIHRvIGZpbmlzaGApO1xuICAgIHJlcyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgcmV0cnlXYWl0LCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyB0aGUgYXRvbSBfd2lsbF8gcmV0dXJuLCBlaXRoZXIgYmVjYXVzZSBpdCBmaW5pc2hlZCBvciBhbiBlcnJvclxuICAgICAgLy8gaW5jbHVkaW5nIGEgdGltZW91dCBlcnJvclxuICAgICAgY29uc3QgaGFzVmFsdWUgPSBhd2FpdCBldmFsdWF0ZSgnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgZXhwcmVzc2lvbjogYHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnJHtwcm9taXNlTmFtZX1WYWx1ZScpO2AsXG4gICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAvLyB3ZSBvbmx5IHB1dCB0aGUgcHJvcGVydHkgb24gYHdpbmRvd2Agd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLFxuICAgICAgICAvLyBzbyBpZiBpdCBpcyB0aGVyZSwgZXZlcnl0aGluZyBpcyBkb25lXG4gICAgICAgIHJldHVybiBhd2FpdCBldmFsdWF0ZSgnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgICBleHByZXNzaW9uOiBgd2luZG93LiR7cHJvbWlzZU5hbWV9VmFsdWU7YCxcbiAgICAgICAgICByZXR1cm5CeVZhbHVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIHRocm93IGEgVGltZW91dEVycm9yLCBvciBlbHNlIGl0IG5lZWRzIHRvIGJlIGNhdWdodCBhbmQgcmUtdGhyb3duXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlRpbWVvdXRFcnJvcihgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGFzeW5jaHJvbm91cyBzY3JpcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcmVzdWx0IGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zJykpO2ApO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICAvLyB0cnkgdG8gZ2V0IHJpZCBvZiB0aGUgcHJvbWlzZVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGRlbGV0ZSB3aW5kb3cuJHtwcm9taXNlTmFtZX07YCwgW251bGwsIG51bGxdLCBzdWJjb21tYW5kVGltZW91dF0sIGZyYW1lcyk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIHJldHVybiBjb252ZXJ0UmVzdWx0KHJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKGNvbW1hbmQsIG92ZXJyaWRlKSB7XG4gIC8vIGlmIHRoZSBwYWdlIGlzIG5vdCBsb2FkZWQgeWV0LCB3YWl0IGZvciBpdFxuICBpZiAodGhpcy5wYWdlTG9hZGluZyAmJiAhb3ZlcnJpZGUpIHtcbiAgICBsb2cuZGVidWcoJ1RyeWluZyB0byBleGVjdXRlIGJ1dCBwYWdlIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gIH1cblxuICBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXl9KTtcblxuICBpZiAodGhpcy5nYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSkge1xuICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgU2VuZGluZyBqYXZhc2NyaXB0IGNvbW1hbmQ6ICcke18udHJ1bmNhdGUoY29tbWFuZCwge2xlbmd0aDogNTB9KX0nYCk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgZXhwcmVzc2lvbjogY29tbWFuZCxcbiAgICByZXR1cm5CeVZhbHVlOiB0cnVlLFxuICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gIH0pO1xuXG4gIHJldHVybiBjb252ZXJ0UmVzdWx0KHJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbiAob2JqZWN0SWQsIGZuLCBhcmdzKSB7XG4gIGNoZWNrUGFyYW1zKHthcHBJZEtleTogdGhpcy5hcHBJZEtleSwgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleX0pO1xuXG4gIGlmICh0aGlzLmdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlKSB7XG4gICAgYXdhaXQgdGhpcy5nYXJiYWdlQ29sbGVjdCgpO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdDYWxsaW5nIGphdmFzY3JpcHQgZnVuY3Rpb24nKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnUnVudGltZS5jYWxsRnVuY3Rpb25PbicsIHtcbiAgICBvYmplY3RJZCxcbiAgICBmdW5jdGlvbkRlY2xhcmF0aW9uOiBmbixcbiAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZSxcbiAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICB9KTtcblxuICByZXR1cm4gY29udmVydFJlc3VsdChyZXMpO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IHsgZXhlY3V0ZUF0b20sIGV4ZWN1dGVBdG9tQXN5bmMsIGV4ZWN1dGUsIGNhbGxGdW5jdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUEsTUFBTUEsdUJBQXVCLEdBQUcsSUFBSTs7QUFTcEMsZUFBZUMsV0FBVyxDQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFO0VBQzlDLElBQUksQ0FBQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFO0lBQy9CLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDO0VBQ3JEO0VBRUFDLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLG1CQUFrQlAsSUFBSyxnQkFBZVEsSUFBSSxDQUFDQyxTQUFTLENBQUNSLElBQUksQ0FBRSxZQUFXQyxNQUFPLEdBQUUsQ0FBQztFQUMzRixNQUFNUSxNQUFNLEdBQUcsTUFBTSxJQUFBQyx1QkFBZ0IsRUFBQ1gsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLE1BQU0sQ0FBQztFQUN6RCxNQUFNVSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNDLE9BQU8sQ0FBQ0gsTUFB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
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSUENfUkVTUE9OU0VfVElNRU9VVF9NUyIsImV4ZWN1dGVBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJycGNDbGllbnQiLCJpc0Nvbm5lY3RlZCIsIkVycm9yIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwic2NyaXB0IiwiZ2V0U2NyaXB0Rm9yQXRvbSIsInZhbHVlIiwiZXhlY3V0ZSIsIl8iLCJ0cnVuY2F0ZSIsInNpbXBsZVN0cmluZ2lmeSIsImxlbmd0aCIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJleGVjdXRlQXRvbUFzeW5jIiwiZXZhbHVhdGUiLCJtZXRob2QiLCJvcHRzIiwic2VuZCIsIk9iamVjdCIsImFzc2lnbiIsImFwcElkS2V5IiwicGFnZUlkS2V5IiwicmV0dXJuQnlWYWx1ZSIsInByb21pc2VOYW1lIiwidXRpbCIsInV1aWRWNCIsInJlcGxhY2UiLCJvYmoiLCJleHByZXNzaW9uIiwicHJvbWlzZU9iamVjdElkIiwicmVzdWx0Iiwib2JqZWN0SWQiLCJhc3luY0NhbGxCYWNrIiwicmVzIiwic3ViY29tbWFuZFRpbWVvdXQiLCJnZW5lcmF0ZVByZXZpZXciLCJzYXZlUmVzdWx0IiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwicmV0cnlXYWl0IiwidGltZW91dCIsInJldHJpZXMiLCJwYXJzZUludCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInJldHJ5SW50ZXJ2YWwiLCJoYXNWYWx1ZSIsImVycm9ycyIsIlRpbWVvdXRFcnJvciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiaWduIiwiY29udmVydFJlc3VsdCIsImNvbW1hbmQiLCJvdmVycmlkZSIsInBhZ2VMb2FkaW5nIiwid2FpdEZvckRvbSIsImNoZWNrUGFyYW1zIiwiZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUiLCJnYXJiYWdlQ29sbGVjdCIsImNhbGxGdW5jdGlvbiIsImZuIiwiZnVuY3Rpb25EZWNsYXJhdGlvbiIsImFyZ3VtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9taXhpbnMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGNoZWNrUGFyYW1zLCBzaW1wbGVTdHJpbmdpZnksIGNvbnZlcnRSZXN1bHQsIFJFU1BPTlNFX0xPR19MRU5HVEggfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTY3JpcHRGb3JBdG9tIH0gZnJvbSAnLi4vYXRvbXMnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbi8qIEhvdyBtYW55IG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB3ZWJraXQgdG8gcmV0dXJuIGEgcmVzcG9uc2UgYmVmb3JlIHRpbWluZyBvdXQgKi9cbmNvbnN0IFJQQ19SRVNQT05TRV9USU1FT1VUX01TID0gNTAwMDtcblxuLyoqXG4gKiBFeGVjdXRlIGEgU2VsZW5pdW0gYXRvbSBpbiBTYWZhcmlcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdG9tIE5hbWUgb2YgU2VsZW5pdW0gYXRvbSAoc2VlIGF0b21zLyBkaXJlY3RvcnkpXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBhcmdzIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGF0b21cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZnJhbWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcmVzdWx0IHJlY2VpdmVkIGZyb20gdGhlIGF0b21cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcykge1xuICBpZiAoIXRoaXMucnBjQ2xpZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdGUgZGVidWdnZXIgaXMgbm90IGNvbm5lY3RlZCcpO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgYXRvbSAnJHthdG9tfScgd2l0aCAnYXJncz0ke0pTT04uc3RyaW5naWZ5KGFyZ3MpfTsgZnJhbWVzPSR7ZnJhbWVzfSdgKTtcbiAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZ2V0U2NyaXB0Rm9yQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQsIHRydWUpO1xuICBsb2cuZGVidWcoYFJlY2VpdmVkIHJlc3VsdCBmb3IgYXRvbSAnJHthdG9tfScgZXhlY3V0aW9uOiAke18udHJ1bmNhdGUoc2ltcGxlU3RyaW5naWZ5KHZhbHVlKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIGZyYW1lcykge1xuICAvLyBoZWxwZXIgdG8gc2VuZCBkaXJlY3RseSB0byB0aGUgd2ViIGluc3BlY3RvclxuICBjb25zdCBldmFsdWF0ZSA9IGFzeW5jIChtZXRob2QsIG9wdHMpID0+IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQobWV0aG9kLCBPYmplY3QuYXNzaWduKHtcbiAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIHJldHVybkJ5VmFsdWU6IGZhbHNlLFxuICB9LCBvcHRzKSk7XG5cbiAgLy8gZmlyc3QgY3JlYXRlIGEgUHJvbWlzZSBvbiB0aGUgcGFnZSwgc2F2aW5nIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnNcbiAgLy8gYXMgcHJvcGVydGllc1xuICBjb25zdCBwcm9taXNlTmFtZSA9IGBhcHBpdW1Bc3luY0V4ZWN1dGVQcm9taXNlJHt1dGlsLnV1aWRWNCgpLnJlcGxhY2UoLy0vZywgJycpfWA7XG4gIGNvbnN0IHNjcmlwdCA9XG4gICAgYHZhciByZXMsIHJlajtcbiAgICB3aW5kb3cuJHtwcm9taXNlTmFtZX0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZXMgPSByZXNvbHZlO1xuICAgICAgcmVqID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHdpbmRvdy4ke3Byb21pc2VOYW1lfS5yZXNvbHZlID0gcmVzO1xuICAgIHdpbmRvdy4ke3Byb21pc2VOYW1lfS5yZWplY3QgPSByZWo7XG4gICAgd2luZG93LiR7cHJvbWlzZU5hbWV9O2A7XG4gIGNvbnN0IG9iaiA9IGF3YWl0IGV2YWx1YXRlKCdSdW50aW1lLmV2YWx1YXRlJywge1xuICAgIGV4cHJlc3Npb246IHNjcmlwdCxcbiAgfSk7XG4gIGNvbnN0IHByb21pc2VPYmplY3RJZCA9IG9iai5yZXN1bHQub2JqZWN0SWQ7XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYXRvbSwgY2FsbGluZyBiYWNrIHRvIHRoZSByZXNvbHZlIGZ1bmN0aW9uXG4gIGNvbnN0IGFzeW5jQ2FsbEJhY2sgPVxuICAgIGBmdW5jdGlvbiAocmVzKSB7XG4gICAgICB3aW5kb3cuJHtwcm9taXNlTmFtZX0ucmVzb2x2ZShyZXMpO1xuICAgICAgd2luZG93LiR7cHJvbWlzZU5hbWV9VmFsdWUgPSByZXM7XG4gICAgfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZShhd2FpdCBnZXRTY3JpcHRGb3JBdG9tKGF0b20sIGFyZ3MsIGZyYW1lcywgYXN5bmNDYWxsQmFjaykpO1xuXG4gIC8vIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIGJlIHJlc29sdmVkXG4gIGxldCByZXM7XG4gIGNvbnN0IHN1YmNvbW1hbmRUaW1lb3V0ID0gMTAwMDsgLy8gdGltZW91dCBvbiBpbmRpdmlkdWFsIGNvbW1hbmRzXG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZXZhbHVhdGUoJ1J1bnRpbWUuYXdhaXRQcm9taXNlJywge1xuICAgICAgcHJvbWlzZU9iamVjdElkLFxuICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZSxcbiAgICAgIGdlbmVyYXRlUHJldmlldzogdHJ1ZSxcbiAgICAgIHNhdmVSZXN1bHQ6IHRydWUsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoYCdSdW50aW1lLmF3YWl0UHJvbWlzZScgd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIC8vIGF3YWl0UHJvbWlzZSBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZSwgc28gc2ltdWxhdGUgaXQgd2l0aCBwb2xsXG4gICAgY29uc3QgcmV0cnlXYWl0ID0gMTAwO1xuICAgIGNvbnN0IHRpbWVvdXQgPSAoYXJncy5sZW5ndGggPj0gMykgPyBhcmdzWzJdIDogUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVM7XG4gICAgLy8gaWYgdGhlIHRpbWVvdXQgbWF0aCB0dXJucyB1cCAwIHJldHJpZXMsIG1ha2Ugc3VyZSBpdCBoYXBwZW5zIG9uY2VcbiAgICBjb25zdCByZXRyaWVzID0gcGFyc2VJbnQodGltZW91dCAvIHJldHJ5V2FpdCwgMTApIHx8IDE7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBhc3luYyBleGVjdXRlIHRvIGZpbmlzaGApO1xuICAgIHJlcyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgcmV0cnlXYWl0LCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyB0aGUgYXRvbSBfd2lsbF8gcmV0dXJuLCBlaXRoZXIgYmVjYXVzZSBpdCBmaW5pc2hlZCBvciBhbiBlcnJvclxuICAgICAgLy8gaW5jbHVkaW5nIGEgdGltZW91dCBlcnJvclxuICAgICAgY29uc3QgaGFzVmFsdWUgPSBhd2FpdCBldmFsdWF0ZSgnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgZXhwcmVzc2lvbjogYHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnJHtwcm9taXNlTmFtZX1WYWx1ZScpO2AsXG4gICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAvLyB3ZSBvbmx5IHB1dCB0aGUgcHJvcGVydHkgb24gYHdpbmRvd2Agd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLFxuICAgICAgICAvLyBzbyBpZiBpdCBpcyB0aGVyZSwgZXZlcnl0aGluZyBpcyBkb25lXG4gICAgICAgIHJldHVybiBhd2FpdCBldmFsdWF0ZSgnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgICBleHByZXNzaW9uOiBgd2luZG93LiR7cHJvbWlzZU5hbWV9VmFsdWU7YCxcbiAgICAgICAgICByZXR1cm5CeVZhbHVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIHRocm93IGEgVGltZW91dEVycm9yLCBvciBlbHNlIGl0IG5lZWRzIHRvIGJlIGNhdWdodCBhbmQgcmUtdGhyb3duXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlRpbWVvdXRFcnJvcihgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGFzeW5jaHJvbm91cyBzY3JpcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcmVzdWx0IGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zJykpO2ApO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICAvLyB0cnkgdG8gZ2V0IHJpZCBvZiB0aGUgcHJvbWlzZVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGRlbGV0ZSB3aW5kb3cuJHtwcm9taXNlTmFtZX07YCwgW251bGwsIG51bGxdLCBzdWJjb21tYW5kVGltZW91dF0sIGZyYW1lcyk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIHJldHVybiBjb252ZXJ0UmVzdWx0KHJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKGNvbW1hbmQsIG92ZXJyaWRlKSB7XG4gIC8vIGlmIHRoZSBwYWdlIGlzIG5vdCBsb2FkZWQgeWV0LCB3YWl0IGZvciBpdFxuICBpZiAodGhpcy5wYWdlTG9hZGluZyAmJiAhb3ZlcnJpZGUpIHtcbiAgICBsb2cuZGVidWcoJ1RyeWluZyB0byBleGVjdXRlIGJ1dCBwYWdlIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gIH1cblxuICBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXl9KTtcblxuICBpZiAodGhpcy5nYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSkge1xuICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgU2VuZGluZyBqYXZhc2NyaXB0IGNvbW1hbmQ6ICcke18udHJ1bmNhdGUoY29tbWFuZCwge2xlbmd0aDogNTB9KX0nYCk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgZXhwcmVzc2lvbjogY29tbWFuZCxcbiAgICByZXR1cm5CeVZhbHVlOiB0cnVlLFxuICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gIH0pO1xuXG4gIHJldHVybiBjb252ZXJ0UmVzdWx0KHJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbiAob2JqZWN0SWQsIGZuLCBhcmdzKSB7XG4gIGNoZWNrUGFyYW1zKHthcHBJZEtleTogdGhpcy5hcHBJZEtleSwgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleX0pO1xuXG4gIGlmICh0aGlzLmdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlKSB7XG4gICAgYXdhaXQgdGhpcy5nYXJiYWdlQ29sbGVjdCgpO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdDYWxsaW5nIGphdmFzY3JpcHQgZnVuY3Rpb24nKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnUnVudGltZS5jYWxsRnVuY3Rpb25PbicsIHtcbiAgICBvYmplY3RJZCxcbiAgICBmdW5jdGlvbkRlY2xhcmF0aW9uOiBmbixcbiAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZSxcbiAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICB9KTtcblxuICByZXR1cm4gY29udmVydFJlc3VsdChyZXMpO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IHsgZXhlY3V0ZUF0b20sIGV4ZWN1dGVBdG9tQXN5bmMsIGV4ZWN1dGUsIGNhbGxGdW5jdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUEsTUFBTUEsdUJBQXVCLEdBQUcsSUFBSTtBQVNwQyxlQUFlQyxXQUFXLENBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUU7RUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxXQUFXLEVBQUU7SUFDL0IsTUFBTSxJQUFJQyxLQUFLLENBQUMsa0NBQWtDLENBQUM7RUFDckQ7RUFFQUMsZUFBRyxDQUFDQyxLQUFLLENBQUUsbUJBQWtCUCxJQUFLLGdCQUFlUSxJQUFJLENBQUNDLFNBQVMsQ0FBQ1IsSUFBSSxDQUFFLFlBQVdDLE1BQU8sR0FBRSxDQUFDO0VBQzNGLE1BQU1RLE1BQU0sR0FBRyxNQUFNLElBQUFDLHVCQUFnQixFQUFDWCxJQUFJLEVBQUVDLElBQUksRUFBRUMsTUFBTSxDQUFDO0VBQ3pELE1BQU1VLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxNQUFN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
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["RPC_RESPONSE_TIMEOUT_MS","executeAtom","atom","args","frames","rpcClient","isConnected","Error","log","debug","JSON","stringify","script","getScriptForAtom","value","execute","_","truncate","simpleStringify","length","RESPONSE_LOG_LENGTH","executeAtomAsync","evaluate","method","opts","send","Object","assign","appIdKey","pageIdKey","returnByValue","promiseName","util","uuidV4","replace","obj","expression","promiseObjectId","result","objectId","asyncCallBack","res","subcommandTimeout","generatePreview","saveResult","err","message","includes","retryWait","timeout","retries","parseInt","timer","timing","Timer","start","retryInterval","hasValue","errors","TimeoutError","getDuration","asMilliSeconds","toFixed","ign","convertResult","command","override","pageLoading","waitForDom","checkParams","garbageCollectOnExecute","garbageCollect","callFunction","fn","functionDeclaration","arguments"],"sources":["../../../lib/mixins/execute.js"],"sourcesContent":["import log from '../logger';\nimport { errors } from '@appium/base-driver';\nimport { checkParams, simpleStringify, convertResult, RESPONSE_LOG_LENGTH } from '../utils';\nimport { getScriptForAtom } from '../atoms';\nimport { util, timing } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport _ from 'lodash';\n\n\n/* How many milliseconds to wait for webkit to return a response before timing out */\nconst RPC_RESPONSE_TIMEOUT_MS = 5000;\n\n/**\n * Execute a Selenium atom in Safari\n * @param {string} atom Name of Selenium atom (see atoms/ directory)\n * @param {Array<*>} args Arguments passed to the atom\n * @param {Array<string>} frames\n * @returns {string} The result received from the atom\n */\nasync function executeAtom (atom, args, frames) {\n if (!this.rpcClient.isConnected) {\n throw new Error('Remote debugger is not connected');\n }\n\n log.debug(`Executing atom '${atom}' with 'args=${JSON.stringify(args)}; frames=${frames}'`);\n const script = await getScriptForAtom(atom, args, frames);\n const value = await this.execute(script, true);\n log.debug(`Received result for atom '${atom}' execution: ${_.truncate(simpleStringify(value), {length: RESPONSE_LOG_LENGTH})}`);\n return value;\n}\n\nasync function executeAtomAsync (atom, args, frames) {\n // helper to send directly to the web inspector\n const evaluate = async (method, opts) => await this.rpcClient.send(method, Object.assign({\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n returnByValue: false,\n }, opts));\n\n // first create a Promise on the page, saving the resolve/reject functions\n // as properties\n const promiseName = `appiumAsyncExecutePromise${util.uuidV4().replace(/-/g, '')}`;\n const script =\n `var res, rej;\n window.${promiseName} = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n window.${promiseName}.resolve = res;\n window.${promiseName}.reject = rej;\n window.${promiseName};`;\n const obj = await evaluate('Runtime.evaluate', {\n expression: script,\n });\n const promiseObjectId = obj.result.objectId;\n\n // execute the atom, calling back to the resolve function\n const asyncCallBack =\n `function (res) {\n window.${promiseName}.resolve(res);\n window.${promiseName}Value = res;\n }`;\n await this.execute(await getScriptForAtom(atom, args, frames, asyncCallBack));\n\n // wait for the promise to be resolved\n let res;\n const subcommandTimeout = 1000; // timeout on individual commands\n try {\n res = await evaluate('Runtime.awaitPromise', {\n promiseObjectId,\n returnByValue: true,\n generatePreview: true,\n saveResult: true,\n });\n } catch (err) {\n if (!err.message.includes(`'Runtime.awaitPromise' was not found`)) {\n throw err;\n }\n // awaitPromise is not always available, so simulate it with poll\n const retryWait = 100;\n const timeout = (args.length >= 3) ? args[2] : RPC_RESPONSE_TIMEOUT_MS;\n // if the timeout math turns up 0 retries, make sure it happens once\n const retries = parseInt(timeout / retryWait, 10) || 1;\n const timer = new timing.Timer().start();\n log.debug(`Waiting up to ${timeout}ms for async execute to finish`);\n res = await retryInterval(retries, retryWait, async () => {\n // the atom _will_ return, either because it finished or an error\n // including a timeout error\n const hasValue = await evaluate('Runtime.evaluate', {\n expression: `window.hasOwnProperty('${promiseName}Value');`,\n returnByValue: true,\n });\n if (hasValue) {\n // we only put the property on `window` when the callback is called,\n // so if it is there, everything is done\n return await evaluate('Runtime.evaluate', {\n expression: `window.${promiseName}Value;`,\n returnByValue: true,\n });\n }\n // throw a TimeoutError, or else it needs to be caught and re-thrown\n throw new errors.TimeoutError(`Timed out waiting for asynchronous script ` +\n `result after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms'));`);\n });\n } finally {\n try {\n // try to get rid of the promise\n await this.executeAtom('execute_script', [`delete window.${promiseName};`, [null, null], subcommandTimeout], frames);\n } catch (ign) {}\n }\n return convertResult(res);\n}\n\nasync function execute (command, override) {\n // if the page is not loaded yet, wait for it\n if (this.pageLoading && !override) {\n log.debug('Trying to execute but page is not loaded.');\n await this.waitForDom();\n }\n\n checkParams({appIdKey: this.appIdKey, pageIdKey: this.pageIdKey});\n\n if (this.garbageCollectOnExecute) {\n await this.garbageCollect();\n }\n\n log.debug(`Sending javascript command: '${_.truncate(command, {length: 50})}'`);\n const res = await this.rpcClient.send('Runtime.evaluate', {\n expression: command,\n returnByValue: true,\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n });\n\n return convertResult(res);\n}\n\nasync function callFunction (objectId, fn, args) {\n checkParams({appIdKey: this.appIdKey, pageIdKey: this.pageIdKey});\n\n if (this.garbageCollectOnExecute) {\n await this.garbageCollect();\n }\n\n log.debug('Calling javascript function');\n const res = await this.rpcClient.send('Runtime.callFunctionOn', {\n objectId,\n functionDeclaration: fn,\n arguments: args,\n returnByValue: true,\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n });\n\n return convertResult(res);\n}\n\n\nexport default { executeAtom, executeAtomAsync, execute, callFunction };\n"],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","names":["RPC_RESPONSE_TIMEOUT_MS","executeAtom","atom","args","frames","rpcClient","isConnected","Error","log","debug","JSON","stringify","script","getScriptForAtom","value","execute","_","truncate","simpleStringify","length","RESPONSE_LOG_LENGTH","executeAtomAsync","evaluate","method","opts","send","Object","assign","appIdKey","pageIdKey","returnByValue","promiseName","util","uuidV4","replace","obj","expression","promiseObjectId","result","objectId","asyncCallBack","res","subcommandTimeout","generatePreview","saveResult","err","message","includes","retryWait","timeout","retries","parseInt","timer","timing","Timer","start","retryInterval","hasValue","errors","TimeoutError","getDuration","asMilliSeconds","toFixed","ign","convertResult","command","override","pageLoading","waitForDom","checkParams","garbageCollectOnExecute","garbageCollect","callFunction","fn","functionDeclaration","arguments"],"sources":["../../../lib/mixins/execute.js"],"sourcesContent":["import log from '../logger';\nimport { errors } from '@appium/base-driver';\nimport { checkParams, simpleStringify, convertResult, RESPONSE_LOG_LENGTH } from '../utils';\nimport { getScriptForAtom } from '../atoms';\nimport { util, timing } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport _ from 'lodash';\n\n\n/* How many milliseconds to wait for webkit to return a response before timing out */\nconst RPC_RESPONSE_TIMEOUT_MS = 5000;\n\n/**\n * Execute a Selenium atom in Safari\n * @param {string} atom Name of Selenium atom (see atoms/ directory)\n * @param {Array<*>} args Arguments passed to the atom\n * @param {Array<string>} frames\n * @returns {string} The result received from the atom\n */\nasync function executeAtom (atom, args, frames) {\n if (!this.rpcClient.isConnected) {\n throw new Error('Remote debugger is not connected');\n }\n\n log.debug(`Executing atom '${atom}' with 'args=${JSON.stringify(args)}; frames=${frames}'`);\n const script = await getScriptForAtom(atom, args, frames);\n const value = await this.execute(script, true);\n log.debug(`Received result for atom '${atom}' execution: ${_.truncate(simpleStringify(value), {length: RESPONSE_LOG_LENGTH})}`);\n return value;\n}\n\nasync function executeAtomAsync (atom, args, frames) {\n // helper to send directly to the web inspector\n const evaluate = async (method, opts) => await this.rpcClient.send(method, Object.assign({\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n returnByValue: false,\n }, opts));\n\n // first create a Promise on the page, saving the resolve/reject functions\n // as properties\n const promiseName = `appiumAsyncExecutePromise${util.uuidV4().replace(/-/g, '')}`;\n const script =\n `var res, rej;\n window.${promiseName} = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n window.${promiseName}.resolve = res;\n window.${promiseName}.reject = rej;\n window.${promiseName};`;\n const obj = await evaluate('Runtime.evaluate', {\n expression: script,\n });\n const promiseObjectId = obj.result.objectId;\n\n // execute the atom, calling back to the resolve function\n const asyncCallBack =\n `function (res) {\n window.${promiseName}.resolve(res);\n window.${promiseName}Value = res;\n }`;\n await this.execute(await getScriptForAtom(atom, args, frames, asyncCallBack));\n\n // wait for the promise to be resolved\n let res;\n const subcommandTimeout = 1000; // timeout on individual commands\n try {\n res = await evaluate('Runtime.awaitPromise', {\n promiseObjectId,\n returnByValue: true,\n generatePreview: true,\n saveResult: true,\n });\n } catch (err) {\n if (!err.message.includes(`'Runtime.awaitPromise' was not found`)) {\n throw err;\n }\n // awaitPromise is not always available, so simulate it with poll\n const retryWait = 100;\n const timeout = (args.length >= 3) ? args[2] : RPC_RESPONSE_TIMEOUT_MS;\n // if the timeout math turns up 0 retries, make sure it happens once\n const retries = parseInt(timeout / retryWait, 10) || 1;\n const timer = new timing.Timer().start();\n log.debug(`Waiting up to ${timeout}ms for async execute to finish`);\n res = await retryInterval(retries, retryWait, async () => {\n // the atom _will_ return, either because it finished or an error\n // including a timeout error\n const hasValue = await evaluate('Runtime.evaluate', {\n expression: `window.hasOwnProperty('${promiseName}Value');`,\n returnByValue: true,\n });\n if (hasValue) {\n // we only put the property on `window` when the callback is called,\n // so if it is there, everything is done\n return await evaluate('Runtime.evaluate', {\n expression: `window.${promiseName}Value;`,\n returnByValue: true,\n });\n }\n // throw a TimeoutError, or else it needs to be caught and re-thrown\n throw new errors.TimeoutError(`Timed out waiting for asynchronous script ` +\n `result after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms'));`);\n });\n } finally {\n try {\n // try to get rid of the promise\n await this.executeAtom('execute_script', [`delete window.${promiseName};`, [null, null], subcommandTimeout], frames);\n } catch (ign) {}\n }\n return convertResult(res);\n}\n\nasync function execute (command, override) {\n // if the page is not loaded yet, wait for it\n if (this.pageLoading && !override) {\n log.debug('Trying to execute but page is not loaded.');\n await this.waitForDom();\n }\n\n checkParams({appIdKey: this.appIdKey, pageIdKey: this.pageIdKey});\n\n if (this.garbageCollectOnExecute) {\n await this.garbageCollect();\n }\n\n log.debug(`Sending javascript command: '${_.truncate(command, {length: 50})}'`);\n const res = await this.rpcClient.send('Runtime.evaluate', {\n expression: command,\n returnByValue: true,\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n });\n\n return convertResult(res);\n}\n\nasync function callFunction (objectId, fn, args) {\n checkParams({appIdKey: this.appIdKey, pageIdKey: this.pageIdKey});\n\n if (this.garbageCollectOnExecute) {\n await this.garbageCollect();\n }\n\n log.debug('Calling javascript function');\n const res = await this.rpcClient.send('Runtime.callFunctionOn', {\n objectId,\n functionDeclaration: fn,\n arguments: args,\n returnByValue: true,\n appIdKey: this.appIdKey,\n pageIdKey: this.pageIdKey,\n });\n\n return convertResult(res);\n}\n\n\nexport default { executeAtom, executeAtomAsync, execute, callFunction };\n"],"mappings":"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"}