appium-espresso-driver 2.23.4 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.24.0](https://github.com/appium/appium-espresso-driver/compare/v2.23.5...v2.24.0) (2023-06-26)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add 'mobile: screenshots' extension ([#890](https://github.com/appium/appium-espresso-driver/issues/890)) ([1989c14](https://github.com/appium/appium-espresso-driver/commit/1989c14d675f6628a78b1c57dc715b7af7bec9b0))
7
+
8
+ ## [2.23.5](https://github.com/appium/appium-espresso-driver/compare/v2.23.4...v2.23.5) (2023-06-23)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * Fix the 'mobile: backgroundApp' functionality ([#889](https://github.com/appium/appium-espresso-driver/issues/889)) ([9025248](https://github.com/appium/appium-espresso-driver/commit/902524812efc3539e8cde5118dfce20ed90f416e))
14
+
1
15
  ## [2.23.4](https://github.com/appium/appium-espresso-driver/compare/v2.23.3...v2.23.4) (2023-06-21)
2
16
 
3
17
 
package/README.md CHANGED
@@ -1510,6 +1510,25 @@ Example output for different data types:
1510
1510
  ]
1511
1511
  ```
1512
1512
 
1513
+ ### mobile: screenshots
1514
+
1515
+ Retrieves a screenshot of each display available to Android.
1516
+ This functionality is only supported since Android 10.
1517
+
1518
+ #### Arguments
1519
+
1520
+ Name | Type | Required | Description | Example
1521
+ --- | --- | --- | --- | ---
1522
+ displayId | number or string | no | Display identifier to take a screenshot for. If not provided then all display screenshots are going to be returned. If no matches were found then an error is thrown. Actual display identifiers could be retrived from the `adb shell dumpsys SurfaceFlinger --display-id` command output. | 1
1523
+
1524
+ #### Returns
1525
+
1526
+ A dictionary where each key is the diplay identifier and the value has the following keys:
1527
+ - `id`: The same display identifier
1528
+ - `name`: Display name
1529
+ - `isDefault`: Whether this display is the default one
1530
+ - `payload`: The actual PNG screenshot data encoded to base64 string
1531
+
1513
1532
  ### mobile: statusBar
1514
1533
 
1515
1534
  Performs commands on the system status bar. A thin wrapper over `adb shell cmd statusbar` CLI. Works on Android 8 (Oreo) and newer. Available since driver version 2.23
@@ -87,7 +87,8 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
87
87
  sensorSet: 'sensorSet',
88
88
  getPerformanceData: 'mobileGetPerformanceData',
89
89
  getPerformanceDataTypes: 'getPerformanceDataTypes',
90
- statusBar: 'mobilePerformStatusBarCommand'
90
+ statusBar: 'mobilePerformStatusBarCommand',
91
+ screenshots: 'mobileScreenshots'
91
92
  };
92
93
  if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
93
94
  throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
@@ -96,4 +97,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
96
97
  };
97
98
  var _default = extensions;
98
99
  exports.default = _default;
99
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiZXh0ZW5zaW9ucyIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJzd2lwZSIsInNjcm9sbFRvUGFnZSIsIm5hdmlnYXRlVG8iLCJjbGlja0FjdGlvbiIsImRldmljZUluZm8iLCJpc1RvYXN0VmlzaWJsZSIsIm9wZW5EcmF3ZXIiLCJjbG9zZURyYXdlciIsInNldERhdGUiLCJzZXRUaW1lIiwiZ2V0RGV2aWNlVGltZSIsImJhY2tkb29yIiwiZmxhc2hFbGVtZW50IiwidWlhdXRvbWF0b3IiLCJ1aWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJ3ZWJBdG9tcyIsImdldENvbnRleHRzIiwiZGlzbWlzc0F1dG9maWxsIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJwdXNoRmlsZSIsInB1bGxGaWxlIiwicHVsbEZvbGRlciIsImRlbGV0ZUZpbGUiLCJpc0FwcEluc3RhbGxlZCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsInJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJjbGVhckFwcCIsImJhY2tncm91bmRBcHAiLCJnZXRDdXJyZW50QWN0aXZpdHkiLCJnZXRDdXJyZW50UGFja2FnZSIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsInJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwidW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcyIsImxpc3RJZGxpbmdSZXNvdXJjZXMiLCJ3YWl0Rm9yVUlUaHJlYWQiLCJsb2NrIiwidW5sb2NrIiwiaXNMb2NrZWQiLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJ0b2dnbGVHcHMiLCJpc0dwc0VuYWJsZXMiLCJwcmVzc0tleSIsImhpZGVLZXlib2FyZCIsImlzS2V5Ym9hcmRTaG93biIsImdldERpc3BsYXlEZW5zaXR5IiwiZ2V0U3lzdGVtQmFycyIsImZpbmdlcnByaW50Iiwic2VuZFNtcyIsImdzbUNhbGwiLCJnc21TaWduYWwiLCJnc21Wb2ljZSIsInBvd2VyQWMiLCJwb3dlckNhcGFjaXR5IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0IiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwiZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXMiLCJzdGF0dXNCYXIiLCJfIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgY2hhbmdlUGVybWlzc2lvbnM6ICdtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucycsXG4gICAgZ2V0UGVybWlzc2lvbnM6ICdtb2JpbGVHZXRQZXJtaXNzaW9ucycsXG5cbiAgICBzdGFydFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0YXJ0U2NyZWVuU3RyZWFtaW5nJyxcbiAgICBzdG9wU2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZycsXG5cbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICBzY3JvbGxUb1BhZ2U6ICdtb2JpbGVTY3JvbGxUb1BhZ2UnLFxuICAgIG5hdmlnYXRlVG86ICdtb2JpbGVOYXZpZ2F0ZVRvJyxcbiAgICBjbGlja0FjdGlvbjogJ21vYmlsZUNsaWNrQWN0aW9uJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGlzVG9hc3RWaXNpYmxlOiAnbW9iaWxlSXNUb2FzdFZpc2libGUnLFxuXG4gICAgb3BlbkRyYXdlcjogJ21vYmlsZU9wZW5EcmF3ZXInLFxuICAgIGNsb3NlRHJhd2VyOiAnbW9iaWxlQ2xvc2VEcmF3ZXInLFxuXG4gICAgc2V0RGF0ZTogJ21vYmlsZVNldERhdGUnLFxuICAgIHNldFRpbWU6ICdtb2JpbGVTZXRUaW1lJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGJhY2tkb29yOiAnbW9iaWxlQmFja2Rvb3InLFxuXG4gICAgZmxhc2hFbGVtZW50OiAnbW9iaWxlRmxhc2hFbGVtZW50JyxcblxuICAgIHVpYXV0b21hdG9yOiAnbW9iaWxlVWlhdXRvbWF0b3InLFxuICAgIHVpYXV0b21hdG9yUGFnZVNvdXJjZTogJ21vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZScsXG5cbiAgICB3ZWJBdG9tczogJ21vYmlsZVdlYkF0b21zJyxcbiAgICBnZXRDb250ZXh0czogJ21vYmlsZUdldENvbnRleHRzJyxcblxuICAgIGRpc21pc3NBdXRvZmlsbDogJ21vYmlsZURpc21pc3NBdXRvZmlsbCcsXG5cbiAgICBnZXROb3RpZmljYXRpb25zOiAnbW9iaWxlR2V0Tm90aWZpY2F0aW9ucycsXG5cbiAgICBsaXN0U21zOiAnbW9iaWxlTGlzdFNtcycsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG4gICAgYmFja2dyb3VuZEFwcDogJ21vYmlsZUJhY2tncm91bmRBcHAnLFxuICAgIGdldEN1cnJlbnRBY3Rpdml0eTogJ2dldEN1cnJlbnRBY3Rpdml0eScsXG4gICAgZ2V0Q3VycmVudFBhY2thZ2U6ICdnZXRDdXJyZW50UGFja2FnZScsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgcmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXM6ICdtb2JpbGVSZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgdW5yZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVVucmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMnLFxuICAgIGxpc3RJZGxpbmdSZXNvdXJjZXM6ICdtb2JpbGVMaXN0SWRsaW5nUmVzb3VyY2VzJyxcbiAgICB3YWl0Rm9yVUlUaHJlYWQ6ICdtb2JpbGVXYWl0Rm9yVUlUaHJlYWQnLFxuXG4gICAgbG9jazogJ21vYmlsZUxvY2snLFxuICAgIHVubG9jazogJ21vYmlsZVVubG9jaycsXG4gICAgaXNMb2NrZWQ6ICdpc0xvY2tlZCcsXG5cbiAgICByZWZyZXNoR3BzQ2FjaGU6ICdtb2JpbGVSZWZyZXNoR3BzQ2FjaGUnLFxuXG4gICAgc3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG4gICAgaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nOiAnbW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nJyxcbiAgICBzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG5cbiAgICBnZXRDb25uZWN0aXZpdHk6ICdtb2JpbGVHZXRDb25uZWN0aXZpdHknLFxuICAgIHNldENvbm5lY3Rpdml0eTogJ21vYmlsZVNldENvbm5lY3Rpdml0eScsXG4gICAgdG9nZ2xlR3BzOiAndG9nZ2xlTG9jYXRpb25TZXJ2aWNlcycsXG4gICAgaXNHcHNFbmFibGVzOiAnaXNMb2NhdGlvblNlcnZpY2VzRW5hYmxlZCcsXG5cbiAgICBwcmVzc0tleTogJ21vYmlsZVByZXNzS2V5JyxcbiAgICBoaWRlS2V5Ym9hcmQ6ICdoaWRlS2V5Ym9hcmQnLFxuICAgIGlzS2V5Ym9hcmRTaG93bjogJ2lzS2V5Ym9hcmRTaG93bicsXG5cbiAgICBnZXREaXNwbGF5RGVuc2l0eTogJ2dldERpc3BsYXlEZW5zaXR5JyxcbiAgICBnZXRTeXN0ZW1CYXJzOiAnZ2V0U3lzdGVtQmFycycsXG4gICAgZmluZ2VycHJpbnQ6ICdtb2JpbGVGaW5nZXJwcmludCcsXG5cbiAgICBzZW5kU21zOiAnbW9iaWxlU2VuZFNtcycsXG4gICAgZ3NtQ2FsbDogJ21vYmlsZUdzbUNhbGwnLFxuICAgIGdzbVNpZ25hbDogJ21vYmlsZUdzbVNpZ25hbCcsXG4gICAgZ3NtVm9pY2U6ICdtb2JpbGVHc21Wb2ljZScsXG4gICAgcG93ZXJBYzogJ21vYmlsZVBvd2VyQUMnLFxuICAgIHBvd2VyQ2FwYWNpdHk6ICdtb2JpbGVQb3dlckNhcGFjaXR5JyxcbiAgICBuZXR3b3JrU3BlZWQ6ICdtb2JpbGVOZXR3b3JrU3BlZWQnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBnZXRQZXJmb3JtYW5jZURhdGE6ICdtb2JpbGVHZXRQZXJmb3JtYW5jZURhdGEnLFxuICAgIGdldFBlcmZvcm1hbmNlRGF0YVR5cGVzOiAnZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXMnLFxuXG4gICAgc3RhdHVzQmFyOiAnbW9iaWxlUGVyZm9ybVN0YXR1c0JhckNvbW1hbmQnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNp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
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiZXh0ZW5zaW9ucyIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJzd2lwZSIsInNjcm9sbFRvUGFnZSIsIm5hdmlnYXRlVG8iLCJjbGlja0FjdGlvbiIsImRldmljZUluZm8iLCJpc1RvYXN0VmlzaWJsZSIsIm9wZW5EcmF3ZXIiLCJjbG9zZURyYXdlciIsInNldERhdGUiLCJzZXRUaW1lIiwiZ2V0RGV2aWNlVGltZSIsImJhY2tkb29yIiwiZmxhc2hFbGVtZW50IiwidWlhdXRvbWF0b3IiLCJ1aWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJ3ZWJBdG9tcyIsImdldENvbnRleHRzIiwiZGlzbWlzc0F1dG9maWxsIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJwdXNoRmlsZSIsInB1bGxGaWxlIiwicHVsbEZvbGRlciIsImRlbGV0ZUZpbGUiLCJpc0FwcEluc3RhbGxlZCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsInJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJjbGVhckFwcCIsImJhY2tncm91bmRBcHAiLCJnZXRDdXJyZW50QWN0aXZpdHkiLCJnZXRDdXJyZW50UGFja2FnZSIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsInJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwidW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcyIsImxpc3RJZGxpbmdSZXNvdXJjZXMiLCJ3YWl0Rm9yVUlUaHJlYWQiLCJsb2NrIiwidW5sb2NrIiwiaXNMb2NrZWQiLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJ0b2dnbGVHcHMiLCJpc0dwc0VuYWJsZXMiLCJwcmVzc0tleSIsImhpZGVLZXlib2FyZCIsImlzS2V5Ym9hcmRTaG93biIsImdldERpc3BsYXlEZW5zaXR5IiwiZ2V0U3lzdGVtQmFycyIsImZpbmdlcnByaW50Iiwic2VuZFNtcyIsImdzbUNhbGwiLCJnc21TaWduYWwiLCJnc21Wb2ljZSIsInBvd2VyQWMiLCJwb3dlckNhcGFjaXR5IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0IiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwiZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXMiLCJzdGF0dXNCYXIiLCJzY3JlZW5zaG90cyIsIl8iLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlTW9iaWxlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1vYmlsZSAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBwZXJmb3JtRWRpdG9yQWN0aW9uOiAnbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbicsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIHN3aXBlOiAnbW9iaWxlU3dpcGUnLFxuICAgIHNjcm9sbFRvUGFnZTogJ21vYmlsZVNjcm9sbFRvUGFnZScsXG4gICAgbmF2aWdhdGVUbzogJ21vYmlsZU5hdmlnYXRlVG8nLFxuICAgIGNsaWNrQWN0aW9uOiAnbW9iaWxlQ2xpY2tBY3Rpb24nLFxuXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuXG4gICAgaXNUb2FzdFZpc2libGU6ICdtb2JpbGVJc1RvYXN0VmlzaWJsZScsXG5cbiAgICBvcGVuRHJhd2VyOiAnbW9iaWxlT3BlbkRyYXdlcicsXG4gICAgY2xvc2VEcmF3ZXI6ICdtb2JpbGVDbG9zZURyYXdlcicsXG5cbiAgICBzZXREYXRlOiAnbW9iaWxlU2V0RGF0ZScsXG4gICAgc2V0VGltZTogJ21vYmlsZVNldFRpbWUnLFxuXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuXG4gICAgYmFja2Rvb3I6ICdtb2JpbGVCYWNrZG9vcicsXG5cbiAgICBmbGFzaEVsZW1lbnQ6ICdtb2JpbGVGbGFzaEVsZW1lbnQnLFxuXG4gICAgdWlhdXRvbWF0b3I6ICdtb2JpbGVVaWF1dG9tYXRvcicsXG4gICAgdWlhdXRvbWF0b3JQYWdlU291cmNlOiAnbW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlJyxcblxuICAgIHdlYkF0b21zOiAnbW9iaWxlV2ViQXRvbXMnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgZGlzbWlzc0F1dG9maWxsOiAnbW9iaWxlRGlzbWlzc0F1dG9maWxsJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG5cbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBjbGVhckFwcDogJ21vYmlsZUNsZWFyQXBwJyxcbiAgICBiYWNrZ3JvdW5kQXBwOiAnbW9iaWxlQmFja2dyb3VuZEFwcCcsXG4gICAgZ2V0Q3VycmVudEFjdGl2aXR5OiAnZ2V0Q3VycmVudEFjdGl2aXR5JyxcbiAgICBnZXRDdXJyZW50UGFja2FnZTogJ2dldEN1cnJlbnRQYWNrYWdlJyxcblxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIGJyb2FkY2FzdDogJ21vYmlsZUJyb2FkY2FzdCcsXG5cbiAgICByZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICB1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgbGlzdElkbGluZ1Jlc291cmNlczogJ21vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMnLFxuICAgIHdhaXRGb3JVSVRocmVhZDogJ21vYmlsZVdhaXRGb3JVSVRocmVhZCcsXG5cbiAgICBsb2NrOiAnbW9iaWxlTG9jaycsXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcbiAgICBpc0xvY2tlZDogJ2lzTG9ja2VkJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcblxuICAgIGdldENvbm5lY3Rpdml0eTogJ21vYmlsZUdldENvbm5lY3Rpdml0eScsXG4gICAgc2V0Q29ubmVjdGl2aXR5OiAnbW9iaWxlU2V0Q29ubmVjdGl2aXR5JyxcbiAgICB0b2dnbGVHcHM6ICd0b2dnbGVMb2NhdGlvblNlcnZpY2VzJyxcbiAgICBpc0dwc0VuYWJsZXM6ICdpc0xvY2F0aW9uU2VydmljZXNFbmFibGVkJyxcblxuICAgIHByZXNzS2V5OiAnbW9iaWxlUHJlc3NLZXknLFxuICAgIGhpZGVLZXlib2FyZDogJ2hpZGVLZXlib2FyZCcsXG4gICAgaXNLZXlib2FyZFNob3duOiAnaXNLZXlib2FyZFNob3duJyxcblxuICAgIGdldERpc3BsYXlEZW5zaXR5OiAnZ2V0RGlzcGxheURlbnNpdHknLFxuICAgIGdldFN5c3RlbUJhcnM6ICdnZXRTeXN0ZW1CYXJzJyxcbiAgICBmaW5nZXJwcmludDogJ21vYmlsZUZpbmdlcnByaW50JyxcblxuICAgIHNlbmRTbXM6ICdtb2JpbGVTZW5kU21zJyxcbiAgICBnc21DYWxsOiAnbW9iaWxlR3NtQ2FsbCcsXG4gICAgZ3NtU2lnbmFsOiAnbW9iaWxlR3NtU2lnbmFsJyxcbiAgICBnc21Wb2ljZTogJ21vYmlsZUdzbVZvaWNlJyxcbiAgICBwb3dlckFjOiAnbW9iaWxlUG93ZXJBQycsXG4gICAgcG93ZXJDYXBhY2l0eTogJ21vYmlsZVBvd2VyQ2FwYWNpdHknLFxuICAgIG5ldHdvcmtTcGVlZDogJ21vYmlsZU5ldHdvcmtTcGVlZCcsXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIGdldFBlcmZvcm1hbmNlRGF0YTogJ21vYmlsZUdldFBlcmZvcm1hbmNlRGF0YScsXG4gICAgZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXM6ICdnZXRQZXJmb3JtYW5jZURhdGFUeXBlcycsXG5cbiAgICBzdGF0dXNCYXI6ICdtb2JpbGVQZXJmb3JtU3RhdHVzQmFyQ29tbWFuZCcsXG5cbiAgICBzY3JlZW5zaG90czogJ21vYmlsZVNjcmVlbnNob3RzJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBp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
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","backgroundApp","getCurrentActivity","getCurrentPackage","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","waitForUIThread","lock","unlock","isLocked","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","toggleGps","isGpsEnables","pressKey","hideKeyboard","isKeyboardShown","getDisplayDensity","getSystemBars","fingerprint","sendSms","gsmCall","gsmSignal","gsmVoice","powerAc","powerCapacity","networkSpeed","sensorSet","getPerformanceData","getPerformanceDataTypes","statusBar","_","has","errors","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n backgroundApp: 'mobileBackgroundApp',\n getCurrentActivity: 'getCurrentActivity',\n getCurrentPackage: 'getCurrentPackage',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n waitForUIThread: 'mobileWaitForUIThread',\n\n lock: 'mobileLock',\n unlock: 'mobileUnlock',\n isLocked: 'isLocked',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n toggleGps: 'toggleLocationServices',\n isGpsEnables: 'isLocationServicesEnabled',\n\n pressKey: 'mobilePressKey',\n hideKeyboard: 'hideKeyboard',\n isKeyboardShown: 'isKeyboardShown',\n\n getDisplayDensity: 'getDisplayDensity',\n getSystemBars: 'getSystemBars',\n fingerprint: 'mobileFingerprint',\n\n sendSms: 'mobileSendSms',\n gsmCall: 'mobileGsmCall',\n gsmSignal: 'mobileGsmSignal',\n gsmVoice: 'mobileGsmVoice',\n powerAc: 'mobilePowerAC',\n powerCapacity: 'mobilePowerCapacity',\n networkSpeed: 'mobileNetworkSpeed',\n sensorSet: 'sensorSet',\n\n getPerformanceData: 'mobileGetPerformanceData',\n getPerformanceDataTypes: 'getPerformanceDataTypes',\n\n statusBar: 'mobilePerformStatusBarCommand',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","backgroundApp","getCurrentActivity","getCurrentPackage","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","waitForUIThread","lock","unlock","isLocked","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","toggleGps","isGpsEnables","pressKey","hideKeyboard","isKeyboardShown","getDisplayDensity","getSystemBars","fingerprint","sendSms","gsmCall","gsmSignal","gsmVoice","powerAc","powerCapacity","networkSpeed","sensorSet","getPerformanceData","getPerformanceDataTypes","statusBar","screenshots","_","has","errors","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n backgroundApp: 'mobileBackgroundApp',\n getCurrentActivity: 'getCurrentActivity',\n getCurrentPackage: 'getCurrentPackage',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n waitForUIThread: 'mobileWaitForUIThread',\n\n lock: 'mobileLock',\n unlock: 'mobileUnlock',\n isLocked: 'isLocked',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n toggleGps: 'toggleLocationServices',\n isGpsEnables: 'isLocationServicesEnabled',\n\n pressKey: 'mobilePressKey',\n hideKeyboard: 'hideKeyboard',\n isKeyboardShown: 'isKeyboardShown',\n\n getDisplayDensity: 'getDisplayDensity',\n getSystemBars: 'getSystemBars',\n fingerprint: 'mobileFingerprint',\n\n sendSms: 'mobileSendSms',\n gsmCall: 'mobileGsmCall',\n gsmSignal: 'mobileGsmSignal',\n gsmVoice: 'mobileGsmVoice',\n powerAc: 'mobilePowerAC',\n powerCapacity: 'mobilePowerCapacity',\n networkSpeed: 'mobileNetworkSpeed',\n sensorSet: 'sensorSet',\n\n getPerformanceData: 'mobileGetPerformanceData',\n getPerformanceDataTypes: 'getPerformanceDataTypes',\n\n statusBar: 'mobilePerformStatusBarCommand',\n\n screenshots: 'mobileScreenshots',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
@@ -78,6 +78,12 @@ commands.mobilePressKey = async function mobilePressKey(opts = {}) {
78
78
  flags
79
79
  });
80
80
  };
81
+ commands.mobileBackgroundApp = async function mobileBackgroundApp(opts = {}) {
82
+ const {
83
+ seconds = -1
84
+ } = opts;
85
+ return await this.background(seconds);
86
+ };
81
87
  commands.mobileGetDeviceInfo = async function mobileGetDeviceInfo() {
82
88
  return await this.espresso.jwproxy.command('/appium/device/info', 'GET');
83
89
  };
@@ -310,4 +316,4 @@ commands.mobileDismissAutofill = async function mobileDismissAutofill(opts = {})
310
316
  Object.assign(extensions, commands, helpers);
311
317
  var _default = extensions;
312
318
  exports.default = _default;
313
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl92YWxpZGF0ZSIsIl9kcml2ZXIiLCJfdXRpbHMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsInJlcXVpcmVPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZVByZXNzS2V5Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImZsYWdzIiwiaXNMb25nUHJlc3MiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlSXNUb2FzdFZpc2libGUiLCJ0ZXh0IiwiaXNSZWdleHAiLCJoYXNWYWx1ZSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlT3BlbkRyYXdlciIsImdyYXZpdHkiLCJtb2JpbGVDbG9zZURyYXdlciIsIm1vYmlsZVNldERhdGUiLCJ5ZWFyIiwibW9udGhPZlllYXIiLCJkYXlPZk1vbnRoIiwibW9iaWxlU2V0VGltZSIsImhvdXJzIiwibWludXRlcyIsIm1vYmlsZU5hdmlnYXRlVG8iLCJtZW51SXRlbUlkIiwibWVudUl0ZW1JZEFzTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsIm1vYmlsZVdlYkF0b21zIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJtb2JpbGVTY3JvbGxUb1BhZ2UiLCJzY3JvbGxUb1R5cGVzIiwicmVzIiwidmFsaWRhdGUiLCJwcmVzZW5jZSIsInNjcm9sbFRvIiwiaW5jbHVzaW9uIiwid2l0aGluIiwibWVzc2FnZSIsImpvaW4iLCJzY3JvbGxUb1BhZ2UiLCJudW1lcmljYWxpdHkiLCJvbmx5SW50ZWdlciIsImdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwic21vb3RoU2Nyb2xsIiwibG9nIiwid2FybiIsIm1vYmlsZUJhY2tkb29yIiwidGFyZ2V0IiwibWV0aG9kcyIsImVsZW1lbnRJZCIsInRhcmdldEVsZW1lbnQiLCJtb2JpbGVVaWF1dG9tYXRvciIsInN0cmF0ZWd5IiwibG9jYXRvciIsImluZGV4IiwibW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlIiwibW9iaWxlRmxhc2hFbGVtZW50IiwiZHVyYXRpb25NaWxsaXMiLCJyZXBlYXRDb3VudCIsIm1vYmlsZUNsaWNrQWN0aW9uIiwidGFwcGVyIiwiY29vcmRpbmF0ZXNQcm92aWRlciIsImlucHV0RGV2aWNlIiwiYnV0dG9uU3RhdGUiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZVN0YXJ0QWN0aXZpdHkiLCJhcHBQYWNrYWdlIiwiY2FwcyIsImFwcEFjdGl2aXR5IiwibG9jYWxlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIiwic3RhcnRBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImRlYnVnIiwid2FpdEZvckFjdGl2aXR5IiwibW9iaWxlRGlzbWlzc0F1dG9maWxsIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZU9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BlcmZvcm1fZWRpdG9yX2FjdGlvbicsICdQT1NUJywge2FjdGlvbn0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlcn0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc3dpcGVgLCAnUE9TVCcsIHtcbiAgICBkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlclxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NLZXlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0ga2V5Y29kZSBBIHZhbGlkIEFuZHJvaWQga2V5IGNvZGUuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50XG4gKiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtleSBjb2Rlc1xuICogQHByb3BlcnR5IHtudW1iZXI/fSBtZXRhc3RhdGUgQW4gaW50ZWdlciBpbiB3aGljaCBlYWNoIGJpdCBzZXQgdG8gMSByZXByZXNlbnRzIGEgcHJlc3NlZCBtZXRhIGtleS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50IGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcHJvcGVydHkge251bWJlcj99IGZsYWdzIEZsYWdzIGZvciB0aGUgcGFydGljdWxhciBrZXkgZXZlbnQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvdmlldy9LZXlFdmVudCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0xvbmdQcmVzcyBbZmFsc2VdIFdoZXRoZXIgdG8gZW11bGF0ZSBsb25nIGtleSBwcmVzc1xuICovXG5cbi8qKlxuICogRW11bGF0ZXMga2V5IHByZXNzIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7UHJlc3NLZXlPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVByZXNzS2V5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUHJlc3NLZXkgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7a2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFncywgaXNMb25nUHJlc3N9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydrZXljb2RlJ10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2UvJHtpc0xvbmdQcmVzcyA/ICdsb25nXycgOiAnJ31wcmVzc19rZXljb2RlYCwgJ1BPU1QnLCB7XG4gICAga2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFnc1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNUb2FzdFZpc2libGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc1RvYXN0VmlzaWJsZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt0ZXh0LCBpc1JlZ2V4cH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2lzX3RvYXN0X2Rpc3BsYXllZCcsICdQT1NUJywge1xuICAgIHRleHQsXG4gICAgaXNSZWdleHAsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlT3BlbkRyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZU9wZW5EcmF3ZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgZ3Jhdml0eX0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xvc2VfZHJhd2VyYCwgJ1BPU1QnLCB7XG4gICAgZ3Jhdml0eVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldERhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXREYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRofSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCcsICd5ZWFyJywgJ21vbnRoT2ZZZWFyJywgJ2RheU9mTW9udGgnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zZXRfZGF0ZWAsICdQT1NUJywge1xuICAgIHllYXIsXG4gICAgbW9udGhPZlllYXIsXG4gICAgZGF5T2ZNb250aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXRUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0VGltZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBob3VycywgbWludXRlc30gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ21lbnVJdGVtSWQnLCAnZWxlbWVudCddKTtcblxuICBsZXQgbWVudUl0ZW1JZEFzTnVtYmVyID0gcGFyc2VJbnQobWVudUl0ZW1JZCwgMTApO1xuICBpZiAoXy5pc05hTihtZW51SXRlbUlkQXNOdW1iZXIpIHx8IG1lbnVJdGVtSWRBc051bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnbWVudUl0ZW1JZCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIEZvdW5kICR7bWVudUl0ZW1JZH1gKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vbmF2aWdhdGVfdG9gLCAnUE9TVCcsIHtcbiAgICBtZW51SXRlbUlkXG4gIH0pO1xufTtcblxuLyoqXG4gKiBSdW5zIGEgY2hhaW4gb2YgRXNwcmVzc28gd2ViIGF0b21zIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvdGVzdGluZy9lc3ByZXNzby93ZWIgZm9yIHJlZmVyZW5jZSlcbiAqXG4gKiBUYWtlcyBKU09OIG9mIHRoZSBmb3JtXG4gKlxuICoge1xuICogICBcIndlYnZpZXdFbFwiOiBcIjxFTEVNRU5UX0lEPlwiLCAvLyBvcHRpb25hbCB3ZWJ2aWV3IGVsZW1lbnQgdG8gb3BlcmF0ZSBvblxuICogICBcImZvcmNlSmF2YXNjcmlwdEVuYWJsZWRcIjogdHJ1ZXxmYWxzZSwgLy8gaWYgd2VidmlldyBkaXNhYmxlcyBqYXZhc2NyaXB0LCB3ZWJhdG9tcyB3b24ndCB3b3JrLCB0aGlzIGZvcmNlcyBpdFxuICogICBcIm1ldGhvZENoYWluXCI6IFtcbiAqICAgICB7XCJuYW1lXCI6IFwibWV0aG9kTmFtZVwiLCBcImF0b21cIjoge1wibmFtZVwiOiBcImF0b21OYW1lXCIsIFwiYXJnc1wiOiBbXCJhcmcxXCIsIFwiYXJnMlwiLCAuLi5dfX0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVdlYkF0b21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViQXRvbXMgKG9wdHMgPSB7fSkge1xuICBvcHRzID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydtZXRob2RDaGFpbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3dlYl9hdG9tc2AsICdQT1NUJywgb3B0cyk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2Nyb2xsVG9QYWdlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsVG9QYWdlIChvcHRzID0ge30pIHtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBjb25zdCBzY3JvbGxUb1R5cGVzID0gWydmaXJzdCcsICdsYXN0JywgJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmVzID0gdmFsaWRhdGUob3B0cywge1xuICAgIGVsZW1lbnQ6IHtwcmVzZW5jZTogdHJ1ZX0sXG4gICAgc2Nyb2xsVG86IHtcbiAgICAgIGluY2x1c2lvbjoge1xuICAgICAgICB3aXRoaW46IHNjcm9sbFRvVHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IGBcInNjcm9sbFRvXCIgbXVzdCBiZSBvbmUgb2YgXCIke3Njcm9sbFRvVHlwZXMuam9pbignLCAnKX1cIiBmb3VuZCAnJXt2YWx1ZX0nYCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvUGFnZToge1xuICAgICAgbnVtZXJpY2FsaXR5OiB7XG4gICAgICAgIG9ubHlJbnRlZ2VyOiB0cnVlLFxuICAgICAgICBncmVhdGVyVGhhbk9yRXF1YWxUbzogMCxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9QYWdlXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBGb3VuZCAnJXt2YWx1ZX0nYFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUocmVzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgc2Nyb2xsVG8gcGFyYW1ldGVyczogJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xuICB9XG5cbiAgY29uc3Qge2VsZW1lbnQsIHNjcm9sbFRvLCBzY3JvbGxUb1BhZ2UsIHNtb290aFNjcm9sbH0gPSBvcHRzO1xuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvKSAmJiB1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvUGFnZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGAnc2Nyb2xsVG8nIGFuZCAnc2Nyb2xsVG9QYWdlJyB3aGVyZSBib3RoIHByb3ZpZGVkLiBEZWZhdWx0aW5nIHRvICdzY3JvbGxUbydgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2Nyb2xsX3RvX3BhZ2VgLCAnUE9TVCcsIHtcbiAgICBzY3JvbGxUbyxcbiAgICBzY3JvbGxUb1BhZ2UsXG4gICAgc21vb3RoU2Nyb2xsLFxuICB9KTtcbn07XG5cblxuLyoqXG4gKiAgQVBJIHRvIGludm9rZSBtZXRob2RzIGRlZmluZWQgaW4gQW5kcm9pZCBhcHAuXG4gKlxuICogIEV4YW1wbGUgZGF0YVxuICogIHtcbiAqICAgdGFyZ2V0OiAnYWN0aXZpdHknLFxuICogICBtZXRob2RzOlxuICogICAgICAgICBbXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcInNvbWVNZXRob2RcIixcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJhbm90aGVyTWV0aG9kXCIsXG4gKiAgICAgICAgICAgICAgIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiBcIkxvbFwiLCB0eXBlOiAnamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogMSwgdHlwZTogJ2ludCd9XG4gKiAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgfVxuICogICAgICAgICBdXG4gKiB9XG4gKlxuICogSW4gYWJvdmUgZXhhbXBsZSwgbWV0aG9kIFwic29tZU1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZCBvbiAnYWN0aXZpdHknLiBPbiB0aGUgcmVzdWx0LCBcImFub3RoZXJNZXRob2RcIiB3aWxsIGJlIGludm9rZWRcbiAqICBcInRhcmdldFwiIGNhbiBiZSBlaXRoZXIgJ2FjdGl2aXR5JywgJ2FwcGxpY2F0aW9uJyBvciAnZWxlbWVudCdcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhcHBsaWNhdGlvbicsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGFwcGxpY2F0aW9uIGNsYXNzXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYWN0aXZpdHknLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBjdXJyZW50IGFjdGl2aXR5XG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnZWxlbWVudCcsICdlbGVtZW50SWQnIG11c3QgYmUgc3BlY2lmaWVkXG4gKlxuICogLSBPbmx5ICdQdWJsaWMnIG1ldGhvZHMgY2FuIGJlIGludm9rZWQuICgnb3BlbicgbW9kaWZpcmUgaXMgbmVjZXNzYXJ5IGluIEtvdGxpbilcbiAqIC0gZm9sbG93aW5nIHByaW1pdGl2ZSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBcImludFwiLCBcImJvb2xlYW5cIiwgXCJieXRlXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiZmxvYXRcIiwgXCJjaGFyXCJcbiAqIC0gIE5vbi1wcmltaXRpdmUgdHlwZXMgd2l0aCBmdWxseSBxdWFsaWZpZWQgbmFtZSBcImphdmEubGFuZy4qXCIgaXMgYWxzbyBzdXBwb3J0ZWQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVnLiBcImphdmEubGFuZy5DaGFyU2VxdWVuY2VcIiwgXCJqYXZhLmxhbmcuU3RyaW5nXCIsIFwiamF2YS5sYW5nLkludGVnZXJcIiwgXCJqYXZhLmxhbmcuRmxvYXRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuRG91YmxlXCIsIFwiamF2YS5sYW5nLkJvb2xlYW5cIiwgXCJqYXZhLmxhbmcuTG9uZ1wiLCBcImphdmEubGFuZy5TaG9ydFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5DaGFyYWN0ZXJcIiBldGMuLi5cbiAqXG4gKlxuICogQHRocm93cyAge0Vycm9yfSBpZiB0YXJnZXQgaXMgbm90ICdhY3Rpdml0eScgb3IgJ2FwcGxpY2F0aW9uJ1xuICogQHRocm93cyAge0Vycm9yfSBpZiBhIG1ldGhvZCBpcyBub3QgZm91bmQgd2l0aCBnaXZlbiBhcmd1bWVudCB0eXBlc1xuICpcbiAqIEByZXR1cm4geyp9IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgbWV0aG9kIGluIHRoZSBpbnZvY2F0aW9uIGNoYWluLiBJZiBtZXRob2QgcmV0dXJuIHR5cGUgaXMgdm9pZCwgdGhlbiBcIjxWT0lEPlwiIHdpbGwgYmUgcmV0dXJuZWRcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tkb29yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2Rvb3IgKG9wdHMgPSB7fSkge1xuICByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudElkJ10pO1xuICB9XG4gIGNvbnN0IHtlbGVtZW50SWQ6IHRhcmdldEVsZW1lbnR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2JhY2tkb29yYCwgJ1BPU1QnLCB7dGFyZ2V0LCBtZXRob2RzLCB0YXJnZXRFbGVtZW50fSk7XG59O1xuXG4vKipcbiAqICBFeGVjdXRlIFVpQXV0b21hdG9yMiBjb21tYW5kcyB0byBkcml2ZSBvdXQgb2YgYXBwIGFyZWFzLlxuICogIHN0cmF0ZWd5IGNhbiBiZSBvbmUgb2Y6IFwiY2xhenpcIiwgXCJyZXNcIiwgXCJ0ZXh0XCIsIFwidGV4dENvbnRhaW5zXCIsIFwidGV4dEVuZHNXaXRoXCIsIFwidGV4dFN0YXJ0c1dpdGhcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlc2NcIiwgXCJkZXNjQ29udGFpbnNcIiwgXCJkZXNjRW5kc1dpdGhcIiwgXCJkZXNjU3RhcnRzV2l0aFwiLCBcInBrZ1wiXG4gKlxuICogIGFjdGlvbiBjYW4gYmUgb25lIG9mOiBcImNsaWNrXCIsIFwibG9uZ0NsaWNrXCIsIFwiZ2V0VGV4dFwiLCBcImdldENvbnRlbnREZXNjcmlwdGlvblwiLCBcImdldENsYXNzTmFtZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldFJlc291cmNlTmFtZVwiLCBcImdldFZpc2libGVCb3VuZHNcIiwgXCJnZXRWaXNpYmxlQ2VudGVyXCIsIFwiZ2V0QXBwbGljYXRpb25QYWNrYWdlXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0Q2hpbGRDb3VudFwiLCBcImNsZWFyXCIsIFwiaXNDaGVja2FibGVcIiwgXCJpc0NoZWNrZWRcIiwgXCJpc0NsaWNrYWJsZVwiLCBcImlzRW5hYmxlZFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImlzRm9jdXNhYmxlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNMb25nQ2xpY2thYmxlXCIsIFwiaXNTY3JvbGxhYmxlXCIsIFwiaXNTZWxlY3RlZFwiXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3IgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGFjdGlvbiwgaW5kZXh9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydzdHJhdGVneScsICdsb2NhdG9yJywgJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yYCwgJ1BPU1QnLCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGluZGV4LCBhY3Rpb259KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmQgdG8gcmV0dXJuIHRoZSBVSSBkdW1wIHdoZW4gQVVUIGlzIGluIGJhY2tncm91bmQuXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHVpYXV0b21hdG9yIHZpZXcgZHVtcCBpcyB1bnN1Y2Nlc3NmdWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVpYXV0b21hdG9yIERPTSB4bWwgYXMgc3RyaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcl9wYWdlX3NvdXJjZWAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogIEZsYXNoIHRoZSBlbGVtZW50IHdpdGggZ2l2ZW4gaWQuXG4gKiAgZHVyYXRpb25NaWxsaXMgYW5kIHJlcGVhdENvdW50IGFyZSBvcHRpb25hbFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlRmxhc2hFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxhc2hFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9jbGlja19hY3Rpb25gLCAnUE9TVCcsIHtcbiAgICB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlciwgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlXG4gIH0pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGVTZXR0aW5ncyAoc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ1BPU1QnLCB7IHNldHRpbmdzIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTZXR0aW5ncyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdHRVQnKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gRXNwcmVzc29cbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gc3VzcGVuZENocm9tZWRyaXZlclByb3h5ICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiAgU3RhcnRzIHRoZSBnaXZlbiBhY3Rpdml0eSB3aXRoIGludGVudCBvcHRpb25zLCBhY3Rpdml0eSBvcHRpb25zIGFuZCBsb2NhbGUuXG4gKiAgQWN0aXZpdHkgY291bGQgb25seSBiZSBleGVjdXRlZCBpbiBzY29wZSBvZiB0aGUgY3VycmVudCBhcHAgcGFja2FnZS5cbiAqXG4gKiAgYXBwQWN0aXZpdHkgaXMgbWFuZGF0b3J5XG4gKlxuICogIGxvY2FsZSwgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMgYXJlIG9wdGlvbmFsXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3QgYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICBjb25zdCB7XG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYXBwQWN0aXZpdHknXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHlgLCAnUE9TVCcsIHtcbiAgICBhcHBQYWNrYWdlLFxuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0pO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KSB7XG4gIC8vIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0XG4gIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRXNwcmVzc29cbiAgYXBwUGFja2FnZSA9IGFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGFwcFdhaXRQYWNrYWdlID0gYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZTtcbiAgYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEFjdGl2aXR5LCBhcHBQYWNrYWdlKTtcbiAgYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlKTtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFFQSxNQUFNSyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtBQUFBRSxPQUFBLENBQUFILFFBQUEsR0FBQUEsUUFBQTtBQUVuRCxTQUFTSSxjQUFjQSxDQUFFQyxPQUFPLEVBQUVDLG1CQUFtQixFQUFFO0VBQ3JELElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLG1CQUFtQixDQUFDLEVBQUU7SUFDbkNBLG1CQUFtQixHQUFHLENBQUNBLG1CQUFtQixDQUFDO0VBQzdDO0VBQ0EsTUFBTUcsa0JBQWtCLEdBQUdGLGVBQUMsQ0FBQ0csSUFBSSxDQUFDTCxPQUFPLENBQUM7RUFDMUMsTUFBTU0sa0JBQWtCLEdBQUdKLGVBQUMsQ0FBQ0ssVUFBVSxDQUFDTixtQkFBbUIsRUFBRUcsa0JBQWtCLENBQUM7RUFDaEYsSUFBSUYsZUFBQyxDQUFDTSxPQUFPLENBQUNGLGtCQUFrQixDQUFDLEVBQUU7SUFDakMsT0FBT04sT0FBTztFQUNoQjtFQUNBLE1BQU0sSUFBSVMsS0FBSyxDQUFFLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNMLGtCQUFrQixDQUFFLElBQUcs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
319
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl92YWxpZGF0ZSIsIl9kcml2ZXIiLCJfdXRpbHMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsInJlcXVpcmVPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZVByZXNzS2V5Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImZsYWdzIiwiaXNMb25nUHJlc3MiLCJtb2JpbGVCYWNrZ3JvdW5kQXBwIiwic2Vjb25kcyIsImJhY2tncm91bmQiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlSXNUb2FzdFZpc2libGUiLCJ0ZXh0IiwiaXNSZWdleHAiLCJoYXNWYWx1ZSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwibW9iaWxlT3BlbkRyYXdlciIsImdyYXZpdHkiLCJtb2JpbGVDbG9zZURyYXdlciIsIm1vYmlsZVNldERhdGUiLCJ5ZWFyIiwibW9udGhPZlllYXIiLCJkYXlPZk1vbnRoIiwibW9iaWxlU2V0VGltZSIsImhvdXJzIiwibWludXRlcyIsIm1vYmlsZU5hdmlnYXRlVG8iLCJtZW51SXRlbUlkIiwibWVudUl0ZW1JZEFzTnVtYmVyIiwicGFyc2VJbnQiLCJpc05hTiIsIm1vYmlsZVdlYkF0b21zIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJtb2JpbGVTY3JvbGxUb1BhZ2UiLCJzY3JvbGxUb1R5cGVzIiwicmVzIiwidmFsaWRhdGUiLCJwcmVzZW5jZSIsInNjcm9sbFRvIiwiaW5jbHVzaW9uIiwid2l0aGluIiwibWVzc2FnZSIsImpvaW4iLCJzY3JvbGxUb1BhZ2UiLCJudW1lcmljYWxpdHkiLCJvbmx5SW50ZWdlciIsImdyZWF0ZXJUaGFuT3JFcXVhbFRvIiwic21vb3RoU2Nyb2xsIiwibG9nIiwid2FybiIsIm1vYmlsZUJhY2tkb29yIiwidGFyZ2V0IiwibWV0aG9kcyIsImVsZW1lbnRJZCIsInRhcmdldEVsZW1lbnQiLCJtb2JpbGVVaWF1dG9tYXRvciIsInN0cmF0ZWd5IiwibG9jYXRvciIsImluZGV4IiwibW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlIiwibW9iaWxlRmxhc2hFbGVtZW50IiwiZHVyYXRpb25NaWxsaXMiLCJyZXBlYXRDb3VudCIsIm1vYmlsZUNsaWNrQWN0aW9uIiwidGFwcGVyIiwiY29vcmRpbmF0ZXNQcm92aWRlciIsImlucHV0RGV2aWNlIiwiYnV0dG9uU3RhdGUiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZVN0YXJ0QWN0aXZpdHkiLCJhcHBQYWNrYWdlIiwiY2FwcyIsImFwcEFjdGl2aXR5IiwibG9jYWxlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIiwic3RhcnRBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImRlYnVnIiwid2FpdEZvckFjdGl2aXR5IiwibW9iaWxlRGlzbWlzc0F1dG9maWxsIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBxdWFsaWZ5QWN0aXZpdHlOYW1lIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gcmVxdWlyZU9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL3BlcmZvcm1fZWRpdG9yX2FjdGlvbicsICdQT1NUJywge2FjdGlvbn0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlcn0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc3dpcGVgLCAnUE9TVCcsIHtcbiAgICBkaXJlY3Rpb24sIGVsZW1lbnQsIHN3aXBlciwgc3RhcnRDb29yZGluYXRlcywgZW5kQ29vcmRpbmF0ZXMsIHByZWNpc2lvbkRlc2NyaWJlclxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NLZXlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0ga2V5Y29kZSBBIHZhbGlkIEFuZHJvaWQga2V5IGNvZGUuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50XG4gKiBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGtleSBjb2Rlc1xuICogQHByb3BlcnR5IHtudW1iZXI/fSBtZXRhc3RhdGUgQW4gaW50ZWdlciBpbiB3aGljaCBlYWNoIGJpdCBzZXQgdG8gMSByZXByZXNlbnRzIGEgcHJlc3NlZCBtZXRhIGtleS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC92aWV3L0tleUV2ZW50IGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcHJvcGVydHkge251bWJlcj99IGZsYWdzIEZsYWdzIGZvciB0aGUgcGFydGljdWxhciBrZXkgZXZlbnQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvdmlldy9LZXlFdmVudCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBpc0xvbmdQcmVzcyBbZmFsc2VdIFdoZXRoZXIgdG8gZW11bGF0ZSBsb25nIGtleSBwcmVzc1xuICovXG5cbi8qKlxuICogRW11bGF0ZXMga2V5IHByZXNzIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7UHJlc3NLZXlPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVByZXNzS2V5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUHJlc3NLZXkgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7a2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFncywgaXNMb25nUHJlc3N9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydrZXljb2RlJ10pO1xuICBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2UvJHtpc0xvbmdQcmVzcyA/ICdsb25nXycgOiAnJ31wcmVzc19rZXljb2RlYCwgJ1BPU1QnLCB7XG4gICAga2V5Y29kZSwgbWV0YXN0YXRlLCBmbGFnc1xuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQmFja2dyb3VuZEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gc2Vjb25kcyBUaGUgYW1vdW50IG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHB1dHRpbmcgdGhlIGFwcCB0byBiYWNrZ3JvdW5kIGFuZCByZXN0b3JpbmcgaXQuXG4gKiBBbnkgbmVnYXRpdmUgdmFsdWUgbWVhbnMgdG8gbm90IHJlc3RvcmUgdGhlIGFwcCBhZnRlciBwdXR0aW5nIGl0IHRvIHRoZSBiYWNrZ3JvdW5kICh0aGUgZGVmYXVsdCBiZWhhdmlvcikuXG4gKi9cblxuLyoqXG4gKiBQdXRzIHRoZSBhcHAgdW5kZXIgdGVzdCB0byB0aGUgYmFja2dyb3VuZFxuICogYW5kIHRoZW4gcmVzdG9yZXMgaXQgKGlmIG5lZWRlZCkuIFRoZSBjYWxsIGlzIGJsb2NraW5nIGlzIHRoZVxuICogYXBwIG5lZWRzIHRvIGJlIHJlc3RvcmVkIGFmdGVyd2FyZHMuXG4gKlxuICogQHBhcmFtIHtCYWNrZ3JvdW5kQXBwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVCYWNrZ3JvdW5kQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2dyb3VuZEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtzZWNvbmRzID0gLTF9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYmFja2dyb3VuZChzZWNvbmRzKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VJbmZvICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuY29tbWFuZHMubW9iaWxlSXNUb2FzdFZpc2libGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJc1RvYXN0VmlzaWJsZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt0ZXh0LCBpc1JlZ2V4cH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGV4dCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2lzX3RvYXN0X2Rpc3BsYXllZCcsICdQT1NUJywge1xuICAgIHRleHQsXG4gICAgaXNSZWdleHAsXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlT3BlbkRyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZU9wZW5EcmF3ZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudCwgZ3Jhdml0eX0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xvc2VfZHJhd2VyYCwgJ1BPU1QnLCB7XG4gICAgZ3Jhdml0eVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldERhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXREYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRofSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCcsICd5ZWFyJywgJ21vbnRoT2ZZZWFyJywgJ2RheU9mTW9udGgnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zZXRfZGF0ZWAsICdQT1NUJywge1xuICAgIHllYXIsXG4gICAgbW9udGhPZlllYXIsXG4gICAgZGF5T2ZNb250aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXRUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0VGltZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBob3VycywgbWludXRlc30gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ21lbnVJdGVtSWQnLCAnZWxlbWVudCddKTtcblxuICBsZXQgbWVudUl0ZW1JZEFzTnVtYmVyID0gcGFyc2VJbnQobWVudUl0ZW1JZCwgMTApO1xuICBpZiAoXy5pc05hTihtZW51SXRlbUlkQXNOdW1iZXIpIHx8IG1lbnVJdGVtSWRBc051bWJlciA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAnbWVudUl0ZW1JZCcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIEZvdW5kICR7bWVudUl0ZW1JZH1gKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vbmF2aWdhdGVfdG9gLCAnUE9TVCcsIHtcbiAgICBtZW51SXRlbUlkXG4gIH0pO1xufTtcblxuLyoqXG4gKiBSdW5zIGEgY2hhaW4gb2YgRXNwcmVzc28gd2ViIGF0b21zIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvdGVzdGluZy9lc3ByZXNzby93ZWIgZm9yIHJlZmVyZW5jZSlcbiAqXG4gKiBUYWtlcyBKU09OIG9mIHRoZSBmb3JtXG4gKlxuICoge1xuICogICBcIndlYnZpZXdFbFwiOiBcIjxFTEVNRU5UX0lEPlwiLCAvLyBvcHRpb25hbCB3ZWJ2aWV3IGVsZW1lbnQgdG8gb3BlcmF0ZSBvblxuICogICBcImZvcmNlSmF2YXNjcmlwdEVuYWJsZWRcIjogdHJ1ZXxmYWxzZSwgLy8gaWYgd2VidmlldyBkaXNhYmxlcyBqYXZhc2NyaXB0LCB3ZWJhdG9tcyB3b24ndCB3b3JrLCB0aGlzIGZvcmNlcyBpdFxuICogICBcIm1ldGhvZENoYWluXCI6IFtcbiAqICAgICB7XCJuYW1lXCI6IFwibWV0aG9kTmFtZVwiLCBcImF0b21cIjoge1wibmFtZVwiOiBcImF0b21OYW1lXCIsIFwiYXJnc1wiOiBbXCJhcmcxXCIsIFwiYXJnMlwiLCAuLi5dfX0sXG4gKiAgICAgLi4uXG4gKiAgIF1cbiAqIH1cbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVdlYkF0b21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViQXRvbXMgKG9wdHMgPSB7fSkge1xuICBvcHRzID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydtZXRob2RDaGFpbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3dlYl9hdG9tc2AsICdQT1NUJywgb3B0cyk7XG59O1xuXG5jb21tYW5kcy5nZXREaXNwbGF5RGVuc2l0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldERpc3BsYXlEZW5zaXR5ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMubW9iaWxlU2Nyb2xsVG9QYWdlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2Nyb2xsVG9QYWdlIChvcHRzID0ge30pIHtcblxuICAvLyBWYWxpZGF0ZSB0aGUgcGFyYW1ldGVyc1xuICBjb25zdCBzY3JvbGxUb1R5cGVzID0gWydmaXJzdCcsICdsYXN0JywgJ2xlZnQnLCAncmlnaHQnXTtcbiAgY29uc3QgcmVzID0gdmFsaWRhdGUob3B0cywge1xuICAgIGVsZW1lbnQ6IHtwcmVzZW5jZTogdHJ1ZX0sXG4gICAgc2Nyb2xsVG86IHtcbiAgICAgIGluY2x1c2lvbjoge1xuICAgICAgICB3aXRoaW46IHNjcm9sbFRvVHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IGBcInNjcm9sbFRvXCIgbXVzdCBiZSBvbmUgb2YgXCIke3Njcm9sbFRvVHlwZXMuam9pbignLCAnKX1cIiBmb3VuZCAnJXt2YWx1ZX0nYCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvUGFnZToge1xuICAgICAgbnVtZXJpY2FsaXR5OiB7XG4gICAgICAgIG9ubHlJbnRlZ2VyOiB0cnVlLFxuICAgICAgICBncmVhdGVyVGhhbk9yRXF1YWxUbzogMCxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9QYWdlXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiBGb3VuZCAnJXt2YWx1ZX0nYFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgaWYgKHV0aWwuaGFzVmFsdWUocmVzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgc2Nyb2xsVG8gcGFyYW1ldGVyczogJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xuICB9XG5cbiAgY29uc3Qge2VsZW1lbnQsIHNjcm9sbFRvLCBzY3JvbGxUb1BhZ2UsIHNtb290aFNjcm9sbH0gPSBvcHRzO1xuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvKSAmJiB1dGlsLmhhc1ZhbHVlKHNjcm9sbFRvUGFnZSkpIHtcbiAgICB0aGlzLmxvZy53YXJuKGAnc2Nyb2xsVG8nIGFuZCAnc2Nyb2xsVG9QYWdlJyB3aGVyZSBib3RoIHByb3ZpZGVkLiBEZWZhdWx0aW5nIHRvICdzY3JvbGxUbydgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vc2Nyb2xsX3RvX3BhZ2VgLCAnUE9TVCcsIHtcbiAgICBzY3JvbGxUbyxcbiAgICBzY3JvbGxUb1BhZ2UsXG4gICAgc21vb3RoU2Nyb2xsLFxuICB9KTtcbn07XG5cblxuLyoqXG4gKiAgQVBJIHRvIGludm9rZSBtZXRob2RzIGRlZmluZWQgaW4gQW5kcm9pZCBhcHAuXG4gKlxuICogIEV4YW1wbGUgZGF0YVxuICogIHtcbiAqICAgdGFyZ2V0OiAnYWN0aXZpdHknLFxuICogICBtZXRob2RzOlxuICogICAgICAgICBbXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcInNvbWVNZXRob2RcIixcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgbmFtZTogXCJhbm90aGVyTWV0aG9kXCIsXG4gKiAgICAgICAgICAgICAgIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiBcIkxvbFwiLCB0eXBlOiAnamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSd9LFxuICogICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZTogMSwgdHlwZTogJ2ludCd9XG4gKiAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgfVxuICogICAgICAgICBdXG4gKiB9XG4gKlxuICogSW4gYWJvdmUgZXhhbXBsZSwgbWV0aG9kIFwic29tZU1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZCBvbiAnYWN0aXZpdHknLiBPbiB0aGUgcmVzdWx0LCBcImFub3RoZXJNZXRob2RcIiB3aWxsIGJlIGludm9rZWRcbiAqICBcInRhcmdldFwiIGNhbiBiZSBlaXRoZXIgJ2FjdGl2aXR5JywgJ2FwcGxpY2F0aW9uJyBvciAnZWxlbWVudCdcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhcHBsaWNhdGlvbicsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGFwcGxpY2F0aW9uIGNsYXNzXG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnYWN0aXZpdHknLCBtZXRob2RzIHdpbGwgYmUgaW52b2tlZCBvbiBjdXJyZW50IGFjdGl2aXR5XG4gKiAgSWYgdGFyZ2V0IGlzIHNldCB0byAnZWxlbWVudCcsICdlbGVtZW50SWQnIG11c3QgYmUgc3BlY2lmaWVkXG4gKlxuICogLSBPbmx5ICdQdWJsaWMnIG1ldGhvZHMgY2FuIGJlIGludm9rZWQuICgnb3BlbicgbW9kaWZpcmUgaXMgbmVjZXNzYXJ5IGluIEtvdGxpbilcbiAqIC0gZm9sbG93aW5nIHByaW1pdGl2ZSB0eXBlcyBhcmUgc3VwcG9ydGVkOiBcImludFwiLCBcImJvb2xlYW5cIiwgXCJieXRlXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiZmxvYXRcIiwgXCJjaGFyXCJcbiAqIC0gIE5vbi1wcmltaXRpdmUgdHlwZXMgd2l0aCBmdWxseSBxdWFsaWZpZWQgbmFtZSBcImphdmEubGFuZy4qXCIgaXMgYWxzbyBzdXBwb3J0ZWQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVnLiBcImphdmEubGFuZy5DaGFyU2VxdWVuY2VcIiwgXCJqYXZhLmxhbmcuU3RyaW5nXCIsIFwiamF2YS5sYW5nLkludGVnZXJcIiwgXCJqYXZhLmxhbmcuRmxvYXRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhLmxhbmcuRG91YmxlXCIsIFwiamF2YS5sYW5nLkJvb2xlYW5cIiwgXCJqYXZhLmxhbmcuTG9uZ1wiLCBcImphdmEubGFuZy5TaG9ydFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5DaGFyYWN0ZXJcIiBldGMuLi5cbiAqXG4gKlxuICogQHRocm93cyAge0Vycm9yfSBpZiB0YXJnZXQgaXMgbm90ICdhY3Rpdml0eScgb3IgJ2FwcGxpY2F0aW9uJ1xuICogQHRocm93cyAge0Vycm9yfSBpZiBhIG1ldGhvZCBpcyBub3QgZm91bmQgd2l0aCBnaXZlbiBhcmd1bWVudCB0eXBlc1xuICpcbiAqIEByZXR1cm4geyp9IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgbWV0aG9kIGluIHRoZSBpbnZvY2F0aW9uIGNoYWluLiBJZiBtZXRob2QgcmV0dXJuIHR5cGUgaXMgdm9pZCwgdGhlbiBcIjxWT0lEPlwiIHdpbGwgYmUgcmV0dXJuZWRcbiAqXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tkb29yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2Rvb3IgKG9wdHMgPSB7fSkge1xuICByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudElkJ10pO1xuICB9XG4gIGNvbnN0IHtlbGVtZW50SWQ6IHRhcmdldEVsZW1lbnR9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL2JhY2tkb29yYCwgJ1BPU1QnLCB7dGFyZ2V0LCBtZXRob2RzLCB0YXJnZXRFbGVtZW50fSk7XG59O1xuXG4vKipcbiAqICBFeGVjdXRlIFVpQXV0b21hdG9yMiBjb21tYW5kcyB0byBkcml2ZSBvdXQgb2YgYXBwIGFyZWFzLlxuICogIHN0cmF0ZWd5IGNhbiBiZSBvbmUgb2Y6IFwiY2xhenpcIiwgXCJyZXNcIiwgXCJ0ZXh0XCIsIFwidGV4dENvbnRhaW5zXCIsIFwidGV4dEVuZHNXaXRoXCIsIFwidGV4dFN0YXJ0c1dpdGhcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlc2NcIiwgXCJkZXNjQ29udGFpbnNcIiwgXCJkZXNjRW5kc1dpdGhcIiwgXCJkZXNjU3RhcnRzV2l0aFwiLCBcInBrZ1wiXG4gKlxuICogIGFjdGlvbiBjYW4gYmUgb25lIG9mOiBcImNsaWNrXCIsIFwibG9uZ0NsaWNrXCIsIFwiZ2V0VGV4dFwiLCBcImdldENvbnRlbnREZXNjcmlwdGlvblwiLCBcImdldENsYXNzTmFtZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldFJlc291cmNlTmFtZVwiLCBcImdldFZpc2libGVCb3VuZHNcIiwgXCJnZXRWaXNpYmxlQ2VudGVyXCIsIFwiZ2V0QXBwbGljYXRpb25QYWNrYWdlXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2V0Q2hpbGRDb3VudFwiLCBcImNsZWFyXCIsIFwiaXNDaGVja2FibGVcIiwgXCJpc0NoZWNrZWRcIiwgXCJpc0NsaWNrYWJsZVwiLCBcImlzRW5hYmxlZFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImlzRm9jdXNhYmxlXCIsIFwiaXNGb2N1c2VkXCIsIFwiaXNMb25nQ2xpY2thYmxlXCIsIFwiaXNTY3JvbGxhYmxlXCIsIFwiaXNTZWxlY3RlZFwiXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3IgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGFjdGlvbiwgaW5kZXh9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydzdHJhdGVneScsICdsb2NhdG9yJywgJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yYCwgJ1BPU1QnLCB7c3RyYXRlZ3ksIGxvY2F0b3IsIGluZGV4LCBhY3Rpb259KTtcbn07XG5cbi8qKlxuICogIEV4ZWN1dGUgVWlBdXRvbWF0b3IyIGNvbW1hbmQgdG8gcmV0dXJuIHRoZSBVSSBkdW1wIHdoZW4gQVVUIGlzIGluIGJhY2tncm91bmQuXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHVpYXV0b21hdG9yIHZpZXcgZHVtcCBpcyB1bnN1Y2Nlc3NmdWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHVpYXV0b21hdG9yIERPTSB4bWwgYXMgc3RyaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yUGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS91aWF1dG9tYXRvcl9wYWdlX3NvdXJjZWAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogIEZsYXNoIHRoZSBlbGVtZW50IHdpdGggZ2l2ZW4gaWQuXG4gKiAgZHVyYXRpb25NaWxsaXMgYW5kIHJlcGVhdENvdW50IGFyZSBvcHRpb25hbFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlRmxhc2hFbGVtZW50ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlRmxhc2hFbGVtZW50IChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnR9ID0gcmVxdWlyZU9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9jbGlja19hY3Rpb25gLCAnUE9TVCcsIHtcbiAgICB0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIHByZWNpc2lvbkRlc2NyaWJlciwgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlXG4gIH0pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiB1cGRhdGVTZXR0aW5ncyAoc2V0dGluZ3MpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3NldHRpbmdzYCwgJ1BPU1QnLCB7IHNldHRpbmdzIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTZXR0aW5ncyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdHRVQnKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gRXNwcmVzc29cbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gc3VzcGVuZENocm9tZWRyaXZlclByb3h5ICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiAgU3RhcnRzIHRoZSBnaXZlbiBhY3Rpdml0eSB3aXRoIGludGVudCBvcHRpb25zLCBhY3Rpdml0eSBvcHRpb25zIGFuZCBsb2NhbGUuXG4gKiAgQWN0aXZpdHkgY291bGQgb25seSBiZSBleGVjdXRlZCBpbiBzY29wZSBvZiB0aGUgY3VycmVudCBhcHAgcGFja2FnZS5cbiAqXG4gKiAgYXBwQWN0aXZpdHkgaXMgbWFuZGF0b3J5XG4gKlxuICogIGxvY2FsZSwgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMgYXJlIG9wdGlvbmFsXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydEFjdGl2aXR5IChvcHRzID0ge30pIHtcbiAgY29uc3QgYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICBjb25zdCB7XG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYXBwQWN0aXZpdHknXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHlgLCAnUE9TVCcsIHtcbiAgICBhcHBQYWNrYWdlLFxuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0pO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KSB7XG4gIC8vIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLCBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0XG4gIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRXNwcmVzc29cbiAgYXBwUGFja2FnZSA9IGFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcFBhY2thZ2U7XG4gIGFwcFdhaXRQYWNrYWdlID0gYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZTtcbiAgYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEFjdGl2aXR5LCBhcHBQYWNrYWdlKTtcbiAgYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlKTtcbiAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fScgZm9yIHBhY2thZ2UgJyR7YXBwUGFja2FnZX0nYCk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gIH0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkoYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVEaXNtaXNzQXV0b2ZpbGwgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEaXNtaXNzQXV0b2ZpbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFD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
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_support","_validate","_driver","_utils","commands","helpers","extensions","exports","requireOptions","options","requiredOptionNames","_","isArray","presentOptionNames","keys","missingOptionNames","difference","isEmpty","Error","JSON","stringify","launchApp","errors","UnsupportedOperationError","closeApp","reset","getClipboard","adb","getApiLevel","espresso","jwproxy","command","mobilePerformEditorAction","opts","action","mobileSwipe","direction","element","swiper","startCoordinates","endCoordinates","precisionDescriber","util","unwrapElement","mobilePressKey","keycode","metastate","flags","isLongPress","mobileGetDeviceInfo","mobileIsToastVisible","text","isRegexp","hasValue","InvalidArgumentError","mobileOpenDrawer","gravity","mobileCloseDrawer","mobileSetDate","year","monthOfYear","dayOfMonth","mobileSetTime","hours","minutes","mobileNavigateTo","menuItemId","menuItemIdAsNumber","parseInt","isNaN","mobileWebAtoms","getDisplayDensity","mobileScrollToPage","scrollToTypes","res","validate","presence","scrollTo","inclusion","within","message","join","scrollToPage","numericality","onlyInteger","greaterThanOrEqualTo","smoothScroll","log","warn","mobileBackdoor","target","methods","elementId","targetElement","mobileUiautomator","strategy","locator","index","mobileUiautomatorPageSource","mobileFlashElement","durationMillis","repeatCount","mobileClickAction","tapper","coordinatesProvider","inputDevice","buttonState","updateSettings","settings","getSettings","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileStartActivity","appPackage","caps","appActivity","locale","optionalIntentArguments","optionalActivityArguments","startActivity","appWaitPackage","appWaitActivity","qualifyActivityName","debug","waitForActivity","mobileDismissAutofill","Object","assign","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport validate from 'validate.js';\nimport { errors } from 'appium/driver';\nimport { qualifyActivityName } from '../utils';\n\nconst commands = {}, helpers = {}, extensions = {};\n\nfunction requireOptions (options, requiredOptionNames) {\n if (!_.isArray(requiredOptionNames)) {\n requiredOptionNames = [requiredOptionNames];\n }\n const presentOptionNames = _.keys(options);\n const missingOptionNames = _.difference(requiredOptionNames, presentOptionNames);\n if (_.isEmpty(missingOptionNames)) {\n return options;\n }\n throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` +\n `You have only provided: ${JSON.stringify(presentOptionNames)}`);\n}\n\n// eslint-disable-next-line require-await\ncommands.launchApp = async function launchApp () {\n throw new errors.UnsupportedOperationError('Please create a new session in order to launch the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.closeApp = async function closeApp () {\n throw new errors.UnsupportedOperationError('Please quit the session in order to close the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.reset = async function reset () {\n throw new errors.UnsupportedOperationError(\n 'Please quit the session and create a new one ' +\n 'in order to close and launch the application under test');\n};\n\ncommands.getClipboard = async function getClipboard () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = requireOptions(opts, ['action']);\n return await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', {action});\n};\n\ncommands.mobileSwipe = async function mobileSwipe (opts = {}) {\n const {direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/swipe`, 'POST', {\n direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber\n });\n};\n\n/**\n * @typedef {Object} PressKeyOptions\n * @property {number} keycode A valid Android key code. See https://developer.android.com/reference/android/view/KeyEvent\n * for the list of available key codes\n * @property {number?} metastate An integer in which each bit set to 1 represents a pressed meta key. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {number?} flags Flags for the particular key event. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {boolean} isLongPress [false] Whether to emulate long key press\n */\n\n/**\n * Emulates key press event.\n *\n * @param {PressKeyOptions} opts\n */\ncommands.mobilePressKey = async function mobilePressKey (opts = {}) {\n const {keycode, metastate, flags, isLongPress} = requireOptions(opts, ['keycode']);\n await this.espresso.jwproxy.command(`/appium/device/${isLongPress ? 'long_' : ''}press_keycode`, 'POST', {\n keycode, metastate, flags\n });\n};\n\ncommands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {\n return await this.espresso.jwproxy.command('/appium/device/info', 'GET');\n};\n\ncommands.mobileIsToastVisible = async function mobileIsToastVisible (opts = {}) {\n const {text, isRegexp} = opts;\n if (!util.hasValue(text)) {\n throw new errors.InvalidArgumentError(`'text' argument is mandatory`);\n }\n return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {\n text,\n isRegexp,\n });\n};\n\ncommands.mobileOpenDrawer = async function mobileOpenDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/open_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileCloseDrawer = async function mobileCloseDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/close_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileSetDate = async function mobileSetDate (opts = {}) {\n const {element, year, monthOfYear, dayOfMonth} = requireOptions(opts, ['element', 'year', 'monthOfYear', 'dayOfMonth']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_date`, 'POST', {\n year,\n monthOfYear,\n dayOfMonth,\n });\n};\n\ncommands.mobileSetTime = async function mobileSetTime (opts = {}) {\n const {element, hours, minutes} = requireOptions(opts, ['element', 'hours', 'minutes']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_time`, 'POST', {\n hours,\n minutes,\n });\n};\n\ncommands.mobileNavigateTo = async function mobileNavigateTo (opts = {}) {\n let {element, menuItemId} = requireOptions(opts, ['menuItemId', 'element']);\n\n let menuItemIdAsNumber = parseInt(menuItemId, 10);\n if (_.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {\n throw new errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/navigate_to`, 'POST', {\n menuItemId\n });\n};\n\n/**\n * Runs a chain of Espresso web atoms (see https://developer.android.com/training/testing/espresso/web for reference)\n *\n * Takes JSON of the form\n *\n * {\n * \"webviewEl\": \"<ELEMENT_ID>\", // optional webview element to operate on\n * \"forceJavascriptEnabled\": true|false, // if webview disables javascript, webatoms won't work, this forces it\n * \"methodChain\": [\n * {\"name\": \"methodName\", \"atom\": {\"name\": \"atomName\", \"args\": [\"arg1\", \"arg2\", ...]}},\n * ...\n * ]\n * }\n *\n */\ncommands.mobileWebAtoms = async function mobileWebAtoms (opts = {}) {\n opts = requireOptions(opts, ['methodChain']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\ncommands.mobileScrollToPage = async function mobileScrollToPage (opts = {}) {\n\n // Validate the parameters\n const scrollToTypes = ['first', 'last', 'left', 'right'];\n const res = validate(opts, {\n element: {presence: true},\n scrollTo: {\n inclusion: {\n within: scrollToTypes,\n message: `\"scrollTo\" must be one of \"${scrollToTypes.join(', ')}\" found '%{value}'`,\n }\n },\n scrollToPage: {\n numericality: {\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n message: `\"scrollToPage\" must be a non-negative integer. Found '%{value}'`\n },\n },\n });\n if (util.hasValue(res)) {\n throw new errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);\n }\n\n const {element, scrollTo, scrollToPage, smoothScroll} = opts;\n\n if (util.hasValue(scrollTo) && util.hasValue(scrollToPage)) {\n this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/scroll_to_page`, 'POST', {\n scrollTo,\n scrollToPage,\n smoothScroll,\n });\n};\n\n\n/**\n * API to invoke methods defined in Android app.\n *\n * Example data\n * {\n * target: 'activity',\n * methods:\n * [\n * {\n * name: \"someMethod\",\n * },\n * {\n * name: \"anotherMethod\",\n * args:\n * [\n * {value: \"Lol\", type: 'java.lang.CharSequence'},\n * {value: 1, type: 'int'}\n * ]\n * }\n * ]\n * }\n *\n * In above example, method \"someMethod\" will be invoked on 'activity'. On the result, \"anotherMethod\" will be invoked\n * \"target\" can be either 'activity', 'application' or 'element'\n * If target is set to 'application', methods will be invoked on application class\n * If target is set to 'activity', methods will be invoked on current activity\n * If target is set to 'element', 'elementId' must be specified\n *\n * - Only 'Public' methods can be invoked. ('open' modifire is necessary in Kotlin)\n * - following primitive types are supported: \"int\", \"boolean\", \"byte\", \"short\", \"long\", \"float\", \"char\"\n * - Non-primitive types with fully qualified name \"java.lang.*\" is also supported:\n * Eg. \"java.lang.CharSequence\", \"java.lang.String\", \"java.lang.Integer\", \"java.lang.Float\",\n * \"java.lang.Double\", \"java.lang.Boolean\", \"java.lang.Long\", \"java.lang.Short\",\n * \"java.lang.Character\" etc...\n *\n *\n * @throws {Error} if target is not 'activity' or 'application'\n * @throws {Error} if a method is not found with given argument types\n *\n * @return {*} the result of the last method in the invocation chain. If method return type is void, then \"<VOID>\" will be returned\n *\n */\ncommands.mobileBackdoor = async function mobileBackdoor (opts = {}) {\n requireOptions(opts, ['target', 'methods']);\n const {target, methods} = opts;\n if (target === 'element') {\n requireOptions(opts, ['elementId']);\n }\n const {elementId: targetElement} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/backdoor`, 'POST', {target, methods, targetElement});\n};\n\n/**\n * Execute UiAutomator2 commands to drive out of app areas.\n * strategy can be one of: \"clazz\", \"res\", \"text\", \"textContains\", \"textEndsWith\", \"textStartsWith\",\n * \"desc\", \"descContains\", \"descEndsWith\", \"descStartsWith\", \"pkg\"\n *\n * action can be one of: \"click\", \"longClick\", \"getText\", \"getContentDescription\", \"getClassName\",\n * \"getResourceName\", \"getVisibleBounds\", \"getVisibleCenter\", \"getApplicationPackage\",\n * \"getChildCount\", \"clear\", \"isCheckable\", \"isChecked\", \"isClickable\", \"isEnabled\",\n * \"isFocusable\", \"isFocused\", \"isLongClickable\", \"isScrollable\", \"isSelected\"\n */\ncommands.mobileUiautomator = async function mobileUiautomator (opts = {}) {\n const {strategy, locator, action, index} = requireOptions(opts, ['strategy', 'locator', 'action']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator`, 'POST', {strategy, locator, index, action});\n};\n\n/**\n * Execute UiAutomator2 command to return the UI dump when AUT is in background.\n * @throws {Error} if uiautomator view dump is unsuccessful\n * @returns {string} uiautomator DOM xml as string\n */\ncommands.mobileUiautomatorPageSource = async function mobileUiautomatorPageSource () {\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator_page_source`, 'GET');\n};\n\n/**\n * Flash the element with given id.\n * durationMillis and repeatCount are optional\n *\n */\ncommands.mobileFlashElement = async function mobileFlashElement (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n const {durationMillis, repeatCount} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/flash`, 'POST', {\n durationMillis,\n repeatCount\n });\n};\n\n/**\n * Perform a 'GeneralClickAction' (https://developer.android.com/reference/androidx/test/espresso/action/GeneralClickAction)\n */\ncommands.mobileClickAction = async function mobileClickAction (opts = {}) {\n const {element, tapper, coordinatesProvider, precisionDescriber,\n inputDevice, buttonState} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/click_action`, 'POST', {\n tapper, coordinatesProvider, precisionDescriber, inputDevice, buttonState\n });\n};\n\ncommands.updateSettings = async function updateSettings (settings) {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', { settings });\n};\n\ncommands.getSettings = async function getSettings () {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');\n};\n\n// Stop proxying to any Chromedriver and redirect to Espresso\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = this.espresso.proxyReqRes.bind(this.espresso);\n this.proxyCommand = this.espresso.proxyCommand.bind(this.espresso);\n this.jwpProxyActive = true;\n};\n\n/**\n * Starts the given activity with intent options, activity options and locale.\n * Activity could only be executed in scope of the current app package.\n *\n * appActivity is mandatory\n *\n * locale, optionalIntentArguments, optionalActivityArguments are optional\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const appPackage = this.caps.appPackage;\n const {\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n } = requireOptions(opts, ['appActivity']);\n return await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n });\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity) {\n // intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset\n // parameters are not supported by Espresso\n appPackage = appPackage || this.caps.appPackage;\n appWaitPackage = appWaitPackage || appPackage;\n appActivity = qualifyActivityName(appActivity, appPackage);\n appWaitActivity = qualifyActivityName(appWaitActivity || appActivity, appWaitPackage);\n this.log.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);\n await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n });\n await this.adb.waitForActivity(appWaitPackage, appWaitActivity);\n};\n\ncommands.mobileDismissAutofill = async function mobileDismissAutofill (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n await this.espresso.jwproxy.command(\n `/session/:sessionId/appium/execute_mobile/${util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_support","_validate","_driver","_utils","commands","helpers","extensions","exports","requireOptions","options","requiredOptionNames","_","isArray","presentOptionNames","keys","missingOptionNames","difference","isEmpty","Error","JSON","stringify","launchApp","errors","UnsupportedOperationError","closeApp","reset","getClipboard","adb","getApiLevel","espresso","jwproxy","command","mobilePerformEditorAction","opts","action","mobileSwipe","direction","element","swiper","startCoordinates","endCoordinates","precisionDescriber","util","unwrapElement","mobilePressKey","keycode","metastate","flags","isLongPress","mobileBackgroundApp","seconds","background","mobileGetDeviceInfo","mobileIsToastVisible","text","isRegexp","hasValue","InvalidArgumentError","mobileOpenDrawer","gravity","mobileCloseDrawer","mobileSetDate","year","monthOfYear","dayOfMonth","mobileSetTime","hours","minutes","mobileNavigateTo","menuItemId","menuItemIdAsNumber","parseInt","isNaN","mobileWebAtoms","getDisplayDensity","mobileScrollToPage","scrollToTypes","res","validate","presence","scrollTo","inclusion","within","message","join","scrollToPage","numericality","onlyInteger","greaterThanOrEqualTo","smoothScroll","log","warn","mobileBackdoor","target","methods","elementId","targetElement","mobileUiautomator","strategy","locator","index","mobileUiautomatorPageSource","mobileFlashElement","durationMillis","repeatCount","mobileClickAction","tapper","coordinatesProvider","inputDevice","buttonState","updateSettings","settings","getSettings","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileStartActivity","appPackage","caps","appActivity","locale","optionalIntentArguments","optionalActivityArguments","startActivity","appWaitPackage","appWaitActivity","qualifyActivityName","debug","waitForActivity","mobileDismissAutofill","Object","assign","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport validate from 'validate.js';\nimport { errors } from 'appium/driver';\nimport { qualifyActivityName } from '../utils';\n\nconst commands = {}, helpers = {}, extensions = {};\n\nfunction requireOptions (options, requiredOptionNames) {\n if (!_.isArray(requiredOptionNames)) {\n requiredOptionNames = [requiredOptionNames];\n }\n const presentOptionNames = _.keys(options);\n const missingOptionNames = _.difference(requiredOptionNames, presentOptionNames);\n if (_.isEmpty(missingOptionNames)) {\n return options;\n }\n throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` +\n `You have only provided: ${JSON.stringify(presentOptionNames)}`);\n}\n\n// eslint-disable-next-line require-await\ncommands.launchApp = async function launchApp () {\n throw new errors.UnsupportedOperationError('Please create a new session in order to launch the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.closeApp = async function closeApp () {\n throw new errors.UnsupportedOperationError('Please quit the session in order to close the application under test');\n};\n\n// eslint-disable-next-line require-await\ncommands.reset = async function reset () {\n throw new errors.UnsupportedOperationError(\n 'Please quit the session and create a new one ' +\n 'in order to close and launch the application under test');\n};\n\ncommands.getClipboard = async function getClipboard () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = requireOptions(opts, ['action']);\n return await this.espresso.jwproxy.command('/appium/device/perform_editor_action', 'POST', {action});\n};\n\ncommands.mobileSwipe = async function mobileSwipe (opts = {}) {\n const {direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/swipe`, 'POST', {\n direction, element, swiper, startCoordinates, endCoordinates, precisionDescriber\n });\n};\n\n/**\n * @typedef {Object} PressKeyOptions\n * @property {number} keycode A valid Android key code. See https://developer.android.com/reference/android/view/KeyEvent\n * for the list of available key codes\n * @property {number?} metastate An integer in which each bit set to 1 represents a pressed meta key. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {number?} flags Flags for the particular key event. See\n * https://developer.android.com/reference/android/view/KeyEvent for more details.\n * @property {boolean} isLongPress [false] Whether to emulate long key press\n */\n\n/**\n * Emulates key press event.\n *\n * @param {PressKeyOptions} opts\n */\ncommands.mobilePressKey = async function mobilePressKey (opts = {}) {\n const {keycode, metastate, flags, isLongPress} = requireOptions(opts, ['keycode']);\n await this.espresso.jwproxy.command(`/appium/device/${isLongPress ? 'long_' : ''}press_keycode`, 'POST', {\n keycode, metastate, flags\n });\n};\n\n/**\n * @typedef {Object} BackgroundAppOptions\n * @property {number?} seconds The amount of seconds to wait between putting the app to background and restoring it.\n * Any negative value means to not restore the app after putting it to the background (the default behavior).\n */\n\n/**\n * Puts the app under test to the background\n * and then restores it (if needed). The call is blocking is the\n * app needs to be restored afterwards.\n *\n * @param {BackgroundAppOptions} opts\n */\ncommands.mobileBackgroundApp = async function mobileBackgroundApp (opts = {}) {\n const {seconds = -1} = opts;\n return await this.background(seconds);\n};\n\ncommands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {\n return await this.espresso.jwproxy.command('/appium/device/info', 'GET');\n};\n\ncommands.mobileIsToastVisible = async function mobileIsToastVisible (opts = {}) {\n const {text, isRegexp} = opts;\n if (!util.hasValue(text)) {\n throw new errors.InvalidArgumentError(`'text' argument is mandatory`);\n }\n return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {\n text,\n isRegexp,\n });\n};\n\ncommands.mobileOpenDrawer = async function mobileOpenDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/open_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileCloseDrawer = async function mobileCloseDrawer (opts = {}) {\n const {element, gravity} = requireOptions(opts, ['element']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/close_drawer`, 'POST', {\n gravity\n });\n};\n\ncommands.mobileSetDate = async function mobileSetDate (opts = {}) {\n const {element, year, monthOfYear, dayOfMonth} = requireOptions(opts, ['element', 'year', 'monthOfYear', 'dayOfMonth']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_date`, 'POST', {\n year,\n monthOfYear,\n dayOfMonth,\n });\n};\n\ncommands.mobileSetTime = async function mobileSetTime (opts = {}) {\n const {element, hours, minutes} = requireOptions(opts, ['element', 'hours', 'minutes']);\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/set_time`, 'POST', {\n hours,\n minutes,\n });\n};\n\ncommands.mobileNavigateTo = async function mobileNavigateTo (opts = {}) {\n let {element, menuItemId} = requireOptions(opts, ['menuItemId', 'element']);\n\n let menuItemIdAsNumber = parseInt(menuItemId, 10);\n if (_.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {\n throw new errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/navigate_to`, 'POST', {\n menuItemId\n });\n};\n\n/**\n * Runs a chain of Espresso web atoms (see https://developer.android.com/training/testing/espresso/web for reference)\n *\n * Takes JSON of the form\n *\n * {\n * \"webviewEl\": \"<ELEMENT_ID>\", // optional webview element to operate on\n * \"forceJavascriptEnabled\": true|false, // if webview disables javascript, webatoms won't work, this forces it\n * \"methodChain\": [\n * {\"name\": \"methodName\", \"atom\": {\"name\": \"atomName\", \"args\": [\"arg1\", \"arg2\", ...]}},\n * ...\n * ]\n * }\n *\n */\ncommands.mobileWebAtoms = async function mobileWebAtoms (opts = {}) {\n opts = requireOptions(opts, ['methodChain']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\ncommands.mobileScrollToPage = async function mobileScrollToPage (opts = {}) {\n\n // Validate the parameters\n const scrollToTypes = ['first', 'last', 'left', 'right'];\n const res = validate(opts, {\n element: {presence: true},\n scrollTo: {\n inclusion: {\n within: scrollToTypes,\n message: `\"scrollTo\" must be one of \"${scrollToTypes.join(', ')}\" found '%{value}'`,\n }\n },\n scrollToPage: {\n numericality: {\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n message: `\"scrollToPage\" must be a non-negative integer. Found '%{value}'`\n },\n },\n });\n if (util.hasValue(res)) {\n throw new errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);\n }\n\n const {element, scrollTo, scrollToPage, smoothScroll} = opts;\n\n if (util.hasValue(scrollTo) && util.hasValue(scrollToPage)) {\n this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);\n }\n\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/scroll_to_page`, 'POST', {\n scrollTo,\n scrollToPage,\n smoothScroll,\n });\n};\n\n\n/**\n * API to invoke methods defined in Android app.\n *\n * Example data\n * {\n * target: 'activity',\n * methods:\n * [\n * {\n * name: \"someMethod\",\n * },\n * {\n * name: \"anotherMethod\",\n * args:\n * [\n * {value: \"Lol\", type: 'java.lang.CharSequence'},\n * {value: 1, type: 'int'}\n * ]\n * }\n * ]\n * }\n *\n * In above example, method \"someMethod\" will be invoked on 'activity'. On the result, \"anotherMethod\" will be invoked\n * \"target\" can be either 'activity', 'application' or 'element'\n * If target is set to 'application', methods will be invoked on application class\n * If target is set to 'activity', methods will be invoked on current activity\n * If target is set to 'element', 'elementId' must be specified\n *\n * - Only 'Public' methods can be invoked. ('open' modifire is necessary in Kotlin)\n * - following primitive types are supported: \"int\", \"boolean\", \"byte\", \"short\", \"long\", \"float\", \"char\"\n * - Non-primitive types with fully qualified name \"java.lang.*\" is also supported:\n * Eg. \"java.lang.CharSequence\", \"java.lang.String\", \"java.lang.Integer\", \"java.lang.Float\",\n * \"java.lang.Double\", \"java.lang.Boolean\", \"java.lang.Long\", \"java.lang.Short\",\n * \"java.lang.Character\" etc...\n *\n *\n * @throws {Error} if target is not 'activity' or 'application'\n * @throws {Error} if a method is not found with given argument types\n *\n * @return {*} the result of the last method in the invocation chain. If method return type is void, then \"<VOID>\" will be returned\n *\n */\ncommands.mobileBackdoor = async function mobileBackdoor (opts = {}) {\n requireOptions(opts, ['target', 'methods']);\n const {target, methods} = opts;\n if (target === 'element') {\n requireOptions(opts, ['elementId']);\n }\n const {elementId: targetElement} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/backdoor`, 'POST', {target, methods, targetElement});\n};\n\n/**\n * Execute UiAutomator2 commands to drive out of app areas.\n * strategy can be one of: \"clazz\", \"res\", \"text\", \"textContains\", \"textEndsWith\", \"textStartsWith\",\n * \"desc\", \"descContains\", \"descEndsWith\", \"descStartsWith\", \"pkg\"\n *\n * action can be one of: \"click\", \"longClick\", \"getText\", \"getContentDescription\", \"getClassName\",\n * \"getResourceName\", \"getVisibleBounds\", \"getVisibleCenter\", \"getApplicationPackage\",\n * \"getChildCount\", \"clear\", \"isCheckable\", \"isChecked\", \"isClickable\", \"isEnabled\",\n * \"isFocusable\", \"isFocused\", \"isLongClickable\", \"isScrollable\", \"isSelected\"\n */\ncommands.mobileUiautomator = async function mobileUiautomator (opts = {}) {\n const {strategy, locator, action, index} = requireOptions(opts, ['strategy', 'locator', 'action']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator`, 'POST', {strategy, locator, index, action});\n};\n\n/**\n * Execute UiAutomator2 command to return the UI dump when AUT is in background.\n * @throws {Error} if uiautomator view dump is unsuccessful\n * @returns {string} uiautomator DOM xml as string\n */\ncommands.mobileUiautomatorPageSource = async function mobileUiautomatorPageSource () {\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/uiautomator_page_source`, 'GET');\n};\n\n/**\n * Flash the element with given id.\n * durationMillis and repeatCount are optional\n *\n */\ncommands.mobileFlashElement = async function mobileFlashElement (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n const {durationMillis, repeatCount} = opts;\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/flash`, 'POST', {\n durationMillis,\n repeatCount\n });\n};\n\n/**\n * Perform a 'GeneralClickAction' (https://developer.android.com/reference/androidx/test/espresso/action/GeneralClickAction)\n */\ncommands.mobileClickAction = async function mobileClickAction (opts = {}) {\n const {element, tapper, coordinatesProvider, precisionDescriber,\n inputDevice, buttonState} = requireOptions(opts, ['element']);\n return await this.espresso.jwproxy.command(`/appium/execute_mobile/${util.unwrapElement(element)}/click_action`, 'POST', {\n tapper, coordinatesProvider, precisionDescriber, inputDevice, buttonState\n });\n};\n\ncommands.updateSettings = async function updateSettings (settings) {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', { settings });\n};\n\ncommands.getSettings = async function getSettings () {\n return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');\n};\n\n// Stop proxying to any Chromedriver and redirect to Espresso\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = this.espresso.proxyReqRes.bind(this.espresso);\n this.proxyCommand = this.espresso.proxyCommand.bind(this.espresso);\n this.jwpProxyActive = true;\n};\n\n/**\n * Starts the given activity with intent options, activity options and locale.\n * Activity could only be executed in scope of the current app package.\n *\n * appActivity is mandatory\n *\n * locale, optionalIntentArguments, optionalActivityArguments are optional\n */\ncommands.mobileStartActivity = async function mobileStartActivity (opts = {}) {\n const appPackage = this.caps.appPackage;\n const {\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n } = requireOptions(opts, ['appActivity']);\n return await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n locale,\n optionalIntentArguments,\n optionalActivityArguments\n });\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity) {\n // intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset\n // parameters are not supported by Espresso\n appPackage = appPackage || this.caps.appPackage;\n appWaitPackage = appWaitPackage || appPackage;\n appActivity = qualifyActivityName(appActivity, appPackage);\n appWaitActivity = qualifyActivityName(appWaitActivity || appActivity, appWaitPackage);\n this.log.debug(`Starting activity '${appActivity}' for package '${appPackage}'`);\n await this.espresso.jwproxy.command(`/appium/device/start_activity`, 'POST', {\n appPackage,\n appActivity,\n });\n await this.adb.waitForActivity(appWaitPackage, appWaitActivity);\n};\n\ncommands.mobileDismissAutofill = async function mobileDismissAutofill (opts = {}) {\n const {element} = requireOptions(opts, ['element']);\n await this.espresso.jwproxy.command(\n `/session/:sessionId/appium/execute_mobile/${util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
@@ -9,9 +9,10 @@ require("source-map-support/register");
9
9
  var _execute = _interopRequireDefault(require("./execute"));
10
10
  var _general = _interopRequireDefault(require("./general"));
11
11
  var _services = _interopRequireDefault(require("./services"));
12
+ var _screenshot = _interopRequireDefault(require("./screenshot"));
12
13
  var _idlingResources = _interopRequireDefault(require("./idling-resources"));
13
14
  const commands = {};
14
- Object.assign(commands, _general.default, _execute.default, _services.default, _idlingResources.default);
15
+ Object.assign(commands, _general.default, _execute.default, _services.default, _idlingResources.default, _screenshot.default);
15
16
  var _default = commands;
16
17
  exports.default = _default;
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhlY3V0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dlbmVyYWwiLCJfc2VydmljZXMiLCJfaWRsaW5nUmVzb3VyY2VzIiwiY29tbWFuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJnZW5lcmFsQ21kcyIsImV4ZWN1dGVDbWRzIiwic2VydmljZXNDbWRzIiwiaWRsaW5nUmVzb3VyY2VzQ21kcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4ZWN1dGVDbWRzIGZyb20gJy4vZXhlY3V0ZSc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCBzZXJ2aWNlc0NtZHMgZnJvbSAnLi9zZXJ2aWNlcyc7XG5pbXBvcnQgaWRsaW5nUmVzb3VyY2VzQ21kcyBmcm9tICcuL2lkbGluZy1yZXNvdXJjZXMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGdlbmVyYWxDbWRzLFxuICBleGVjdXRlQ21kcyxcbiAgc2VydmljZXNDbWRzLFxuICBpZGxpbmdSZXNvdXJjZXNDbWRzLFxuICAvLyBhZGQgb3RoZXIgY29tbWFuZCB0eXBlcyBoZXJlXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsTUFBTUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLFFBQVEsRUFDUkcsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsaUJBQVksRUFDWkMsd0JBRUYsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FFYVAsUUFBUTtBQUFBUSxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhlY3V0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dlbmVyYWwiLCJfc2VydmljZXMiLCJfc2NyZWVuc2hvdCIsIl9pZGxpbmdSZXNvdXJjZXMiLCJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImdlbmVyYWxDbWRzIiwiZXhlY3V0ZUNtZHMiLCJzZXJ2aWNlc0NtZHMiLCJpZGxpbmdSZXNvdXJjZXNDbWRzIiwic2NyZWVuc2hvdENtZHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleGVjdXRlQ21kcyBmcm9tICcuL2V4ZWN1dGUnO1xuaW1wb3J0IGdlbmVyYWxDbWRzIGZyb20gJy4vZ2VuZXJhbCc7XG5pbXBvcnQgc2VydmljZXNDbWRzIGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHNjcmVlbnNob3RDbWRzIGZyb20gJy4vc2NyZWVuc2hvdCc7XG5pbXBvcnQgaWRsaW5nUmVzb3VyY2VzQ21kcyBmcm9tICcuL2lkbGluZy1yZXNvdXJjZXMnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgY29tbWFuZHMsXG4gIGdlbmVyYWxDbWRzLFxuICBleGVjdXRlQ21kcyxcbiAgc2VydmljZXNDbWRzLFxuICBpZGxpbmdSZXNvdXJjZXNDbWRzLFxuICBzY3JlZW5zaG90Q21kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksZ0JBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLE1BQU1LLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkJDLE1BQU0sQ0FBQ0MsTUFBTSxDQUNYRixRQUFRLEVBQ1JHLGdCQUFXLEVBQ1hDLGdCQUFXLEVBQ1hDLGlCQUFZLEVBQ1pDLHdCQUFtQixFQUNuQkMsbUJBRUYsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FFYVIsUUFBUTtBQUFBUyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_execute","_interopRequireDefault","require","_general","_services","_idlingResources","commands","Object","assign","generalCmds","executeCmds","servicesCmds","idlingResourcesCmds","_default","exports","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import executeCmds from './execute';\nimport generalCmds from './general';\nimport servicesCmds from './services';\nimport idlingResourcesCmds from './idling-resources';\n\nconst commands = {};\nObject.assign(\n commands,\n generalCmds,\n executeCmds,\n servicesCmds,\n idlingResourcesCmds,\n // add other command types here\n);\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,gBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,MAAMI,QAAQ,GAAG,CAAC,CAAC;AACnBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,wBAEF,CAAC;AAAC,IAAAC,QAAA,GAEaP,QAAQ;AAAAQ,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"index.js","names":["_execute","_interopRequireDefault","require","_general","_services","_screenshot","_idlingResources","commands","Object","assign","generalCmds","executeCmds","servicesCmds","idlingResourcesCmds","screenshotCmds","_default","exports","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import executeCmds from './execute';\nimport generalCmds from './general';\nimport servicesCmds from './services';\nimport screenshotCmds from './screenshot';\nimport idlingResourcesCmds from './idling-resources';\n\nconst commands = {};\nObject.assign(\n commands,\n generalCmds,\n executeCmds,\n servicesCmds,\n idlingResourcesCmds,\n screenshotCmds,\n // add other command types here\n);\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,gBAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEA,MAAMK,QAAQ,GAAG,CAAC,CAAC;AACnBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,wBAAmB,EACnBC,mBAEF,CAAC;AAAC,IAAAC,QAAA,GAEaR,QAAQ;AAAAS,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ require("source-map-support/register");
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _bluebird = _interopRequireDefault(require("bluebird"));
11
+ const commands = {};
12
+ const DISPLAY_PATTERN = /^Display\s+(\d+)\s+\(.+display\s+(\d+)\).+displayName="([^"]*)/gm;
13
+ commands.mobileScreenshots = async function mobileScreenshots(opts = {}) {
14
+ const displaysInfo = await this.adb.shell(['dumpsys', 'SurfaceFlinger', '--display-id']);
15
+ const infos = {};
16
+ let match;
17
+ while (match = DISPLAY_PATTERN.exec(displaysInfo)) {
18
+ infos[match[1]] = {
19
+ id: match[1],
20
+ isDefault: match[2] === '0',
21
+ name: match[3]
22
+ };
23
+ }
24
+ if (_lodash.default.isEmpty(infos)) {
25
+ this.log.debug(displaysInfo);
26
+ throw new Error('Cannot determine the information about connected Android displays');
27
+ }
28
+ this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);
29
+ const toB64Screenshot = async dispId => (await this.adb.takeScreenshot(dispId)).toString('base64');
30
+ const {
31
+ displayId
32
+ } = opts;
33
+ const displayIdStr = isNaN(displayId) ? null : `${displayId}`;
34
+ if (displayIdStr) {
35
+ if (!infos[displayIdStr]) {
36
+ throw new Error(`The provided display identifier '${displayId}' is not known. ` + `Only the following displays have been detected: ${JSON.stringify(infos)}`);
37
+ }
38
+ return {
39
+ [displayIdStr]: {
40
+ ...infos[displayIdStr],
41
+ payload: await toB64Screenshot(displayIdStr)
42
+ }
43
+ };
44
+ }
45
+ const allInfos = _lodash.default.values(infos);
46
+ const screenshots = await _bluebird.default.all(allInfos.map(({
47
+ id
48
+ }) => toB64Screenshot(id)));
49
+ for (const [info, payload] of _lodash.default.zip(allInfos, screenshots)) {
50
+ info.payload = payload;
51
+ }
52
+ return infos;
53
+ };
54
+ var _default = commands;
55
+ exports.default = _default;
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJjb21tYW5kcyIsIkRJU1BMQVlfUEFUVEVSTiIsIm1vYmlsZVNjcmVlbnNob3RzIiwib3B0cyIsImRpc3BsYXlzSW5mbyIsImFkYiIsInNoZWxsIiwiaW5mb3MiLCJtYXRjaCIsImV4ZWMiLCJpZCIsImlzRGVmYXVsdCIsIm5hbWUiLCJfIiwiaXNFbXB0eSIsImxvZyIsImRlYnVnIiwiRXJyb3IiLCJpbmZvIiwiSlNPTiIsInN0cmluZ2lmeSIsInRvQjY0U2NyZWVuc2hvdCIsImRpc3BJZCIsInRha2VTY3JlZW5zaG90IiwidG9TdHJpbmciLCJkaXNwbGF5SWQiLCJkaXNwbGF5SWRTdHIiLCJpc05hTiIsInBheWxvYWQiLCJhbGxJbmZvcyIsInZhbHVlcyIsInNjcmVlbnNob3RzIiwiQiIsImFsbCIsIm1hcCIsInppcCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvc2NyZWVuc2hvdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vLyBEaXNwbGF5IDQ2MTk4MjcyNTk4MzU2NDQ2NzIgKEhXQyBkaXNwbGF5IDApOiBwb3J0PTAgcG5wSWQ9R0dMIGRpc3BsYXlOYW1lPVwiRU1VX2Rpc3BsYXlfMFwiXG5jb25zdCBESVNQTEFZX1BBVFRFUk4gPSAvXkRpc3BsYXlcXHMrKFxcZCspXFxzK1xcKC4rZGlzcGxheVxccysoXFxkKylcXCkuK2Rpc3BsYXlOYW1lPVwiKFteXCJdKikvZ207XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NyZWVuc2hvdHNJbmZvXG4gKlxuICogQSBkaWN0aW9uYXJ5IHdoZXJlIGVhY2gga2V5IGNvbnRhaW5zIGEgdW5pcXVlIGRpc3BsYXkgaWRlbnRpZmllclxuICogYW5kIHZhbHVlcyBhcmUgZGljdGlvbmFyaWVzIHdpdGggZm9sbG93aW5nIGl0ZW1zOlxuICogLSBpZDogRGlzcGxheSBpZGVudGlmaWVyXG4gKiAtIG5hbWU6IERpc3BsYXkgbmFtZSwgY291bGQgYmUgZW1wdHlcbiAqIC0gaXNEZWZhdWx0OiBXaGV0aGVyIHRoaXMgZGlzcGxheSBpcyB0aGUgZGVmYXVsdCBvbmVcbiAqIC0gcGF5bG9hZDogVGhlIGFjdHVhbCBQTkcgc2NyZWVuc2hvdCBkYXRhIGVuY29kZWQgdG8gYmFzZTY0IHN0cmluZ1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2NyZWVuc2hvdHNPcHRzXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmc/fSBkaXNwbGF5SWQgQW5kcm9pZCBkaXNwbGF5IGlkZW50aWZpZXIgdG8gdGFrZSBhIHNjcmVlbnNob3QgZm9yLlxuICogSWYgbm90IHByb3ZpZGVkIHRoZW4gc2NyZWVuc2hvdHMgb2YgYWxsIGRpc3BsYXlzIGFyZSBnb2luZyB0byBiZSByZXR1cm5lZC5cbiAqIElmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZCB0aGVuIGFuIGVycm9yIGlzIHRocm93bi5cbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyBzY3JlZW5zaG90cyBvZiBlYWNoIGRpc3BsYXkgYXZhaWxhYmxlIHRvIEFuZHJvaWQuXG4gKiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgQW5kcm9pZCAxMC5cbiAqXG4gKiBAcGFyYW0ge1NjcmVlbnNob3RzT3B0c30gb3B0c1xuICogQHJldHVybnMge1Byb21pc2U8U2NyZWVuc2hvdHNJbmZvPn1cbiAqL1xuY29tbWFuZHMubW9iaWxlU2NyZWVuc2hvdHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JlZW5zaG90cyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGRpc3BsYXlzSW5mbyA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZHVtcHN5cycsICdTdXJmYWNlRmxpbmdlcicsICctLWRpc3BsYXktaWQnXSk7XG4gIGNvbnN0IGluZm9zID0ge307XG4gIGxldCBtYXRjaDtcbiAgd2hpbGUgKChtYXRjaCA9IERJU1BMQVlfUEFUVEVSTi5leGVjKGRpc3BsYXlzSW5mbykpKSB7XG4gICAgaW5mb3NbbWF0Y2hbMV1dID0ge1xuICAgICAgaWQ6IG1hdGNoWzFdLFxuICAgICAgaXNEZWZhdWx0OiBtYXRjaFsyXSA9PT0gJzAnLFxuICAgICAgbmFtZTogbWF0Y2hbM10sXG4gICAgfTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGluZm9zKSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGRpc3BsYXlzSW5mbyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGV0ZXJtaW5lIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBjb25uZWN0ZWQgQW5kcm9pZCBkaXNwbGF5cycpO1xuICB9XG4gIHRoaXMubG9nLmluZm8oYFBhcnNlZCBBbmRyb2lkIGRpc3BsYXkgaW5mb3M6ICR7SlNPTi5zdHJpbmdpZnkoaW5mb3MpfWApO1xuXG4gIGNvbnN0IHRvQjY0U2NyZWVuc2hvdCA9IGFzeW5jIChkaXNwSWQpID0+IChhd2FpdCB0aGlzLmFkYi50YWtlU2NyZWVuc2hvdChkaXNwSWQpKVxuICAgIC50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgY29uc3Qge2Rpc3BsYXlJZH0gPSBvcHRzO1xuICBjb25zdCBkaXNwbGF5SWRTdHIgPSBpc05hTihkaXNwbGF5SWQpID8gbnVsbCA6IGAke2Rpc3BsYXlJZH1gO1xuICBpZiAoZGlzcGxheUlkU3RyKSB7XG4gICAgaWYgKCFpbmZvc1tkaXNwbGF5SWRTdHJdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgcHJvdmlkZWQgZGlzcGxheSBpZGVudGlmaWVyICcke2Rpc3BsYXlJZH0nIGlzIG5vdCBrbm93bi4gYCArXG4gICAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgZGlzcGxheXMgaGF2ZSBiZWVuIGRldGVjdGVkOiAke0pTT04uc3RyaW5naWZ5KGluZm9zKX1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW2Rpc3BsYXlJZFN0cl06IHtcbiAgICAgICAgLi4uaW5mb3NbZGlzcGxheUlkU3RyXSxcbiAgICAgICAgcGF5bG9hZDogYXdhaXQgdG9CNjRTY3JlZW5zaG90KGRpc3BsYXlJZFN0ciksXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGFsbEluZm9zID0gXy52YWx1ZXMoaW5mb3MpO1xuICBjb25zdCBzY3JlZW5zaG90cyA9IGF3YWl0IEIuYWxsKGFsbEluZm9zLm1hcCgoe2lkfSkgPT4gdG9CNjRTY3JlZW5zaG90KGlkKSkpO1xuICBmb3IgKGNvbnN0IFtpbmZvLCBwYXlsb2FkXSBvZiBfLnppcChhbGxJbmZvcywgc2NyZWVuc2hvdHMpKSB7XG4gICAgaW5mby5wYXlsb2FkID0gcGF5bG9hZDtcbiAgfVxuICByZXR1cm4gaW5mb3M7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxNQUFNRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBR25CLE1BQU1DLGVBQWUsR0FBRyxrRUFBa0U7QUEyQjFGRCxRQUFRLENBQUNFLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQkEsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hFLE1BQU1DLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7RUFDeEYsTUFBTUMsS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNoQixJQUFJQyxLQUFLO0VBQ1QsT0FBUUEsS0FBSyxHQUFHUCxlQUFlLENBQUNRLElBQUksQ0FBQ0wsWUFBWSxDQUFDLEVBQUc7SUFDbkRHLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7TUFDaEJFLEVBQUUsRUFBRUYsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNaRyxTQUFTLEVBQUVILEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO01BQzNCSSxJQUFJLEVBQUVKLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztFQUNIO0VBQ0EsSUFBSUssZUFBQyxDQUFDQyxPQUFPLENBQUNQLEtBQUssQ0FBQyxFQUFFO0lBQ3BCLElBQUksQ0FBQ1EsR0FBRyxDQUFDQyxLQUFLLENBQUNaLFlBQVksQ0FBQztJQUM1QixNQUFNLElBQUlhLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQztFQUN0RjtFQUNBLElBQUksQ0FBQ0YsR0FBRyxDQUFDRyxJQUFJLENBQUUsaUNBQWdDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2IsS0FBSyxDQUFFLEVBQUMsQ0FBQztFQUV2RSxNQUFNYyxlQUFlLEdBQUcsTUFBT0MsTUFBTSxJQUFLLENBQUMsTUFBTSxJQUFJLENBQUNqQixHQUFHLENBQUNrQixjQUFjLENBQUNELE1BQU0sQ0FBQyxFQUM3RUUsUUFBUSxDQUFDLFFBQVEsQ0FBQztFQUVyQixNQUFNO0lBQUNDO0VBQVMsQ0FBQyxHQUFHdEIsSUFBSTtFQUN4QixNQUFNdUIsWUFBWSxHQUFHQyxLQUFLLENBQUNGLFNBQVMsQ0FBQyxHQUFHLElBQUksR0FBSSxHQUFFQSxTQUFVLEVBQUM7RUFDN0QsSUFBSUMsWUFBWSxFQUFFO0lBQ2hCLElBQUksQ0FBQ25CLEtBQUssQ0FBQ21CLFlBQVksQ0FBQyxFQUFFO01BQ3hCLE1BQU0sSUFBSVQsS0FBSyxDQUNaLG9DQUFtQ1EsU0FBVSxrQkFBaUIsR0FDOUQsbURBQWtETixJQUFJLENBQUNDLFNBQVMsQ0FBQ2IsS0FBSyxDQUFFLEVBQzNFLENBQUM7SUFDSDtJQUNBLE9BQU87TUFDTCxDQUFDbUIsWUFBWSxHQUFHO1FBQ2QsR0FBR25CLEtBQUssQ0FBQ21CLFlBQVksQ0FBQztRQUN0QkUsT0FBTyxFQUFFLE1BQU1QLGVBQWUsQ0FBQ0ssWUFBWTtNQUM3QztJQUNGLENBQUM7RUFDSDtFQUVBLE1BQU1HLFFBQVEsR0FBR2hCLGVBQUMsQ0FBQ2lCLE1BQU0sQ0FBQ3ZCLEtBQUssQ0FBQztFQUNoQyxNQUFNd0IsV0FBVyxHQUFHLE1BQU1DLGlCQUFDLENBQUNDLEdBQUcsQ0FBQ0osUUFBUSxDQUFDSyxHQUFHLENBQUMsQ0FBQztJQUFDeEI7RUFBRSxDQUFDLEtBQUtXLGVBQWUsQ0FBQ1gsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM1RSxLQUFLLE1BQU0sQ0FBQ1EsSUFBSSxFQUFFVSxPQUFPLENBQUMsSUFBSWYsZUFBQyxDQUFDc0IsR0FBRyxDQUFDTixRQUFRLEVBQUVFLFdBQVcsQ0FBQyxFQUFFO0lBQzFEYixJQUFJLENBQUNVLE9BQU8sR0FBR0EsT0FBTztFQUN4QjtFQUNBLE9BQU9yQixLQUFLO0FBQ2QsQ0FBQztBQUFDLElBQUE2QixRQUFBLEdBRWFwQyxRQUFRO0FBQUFxQyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","names":["_lodash","_interopRequireDefault","require","_bluebird","commands","DISPLAY_PATTERN","mobileScreenshots","opts","displaysInfo","adb","shell","infos","match","exec","id","isDefault","name","_","isEmpty","log","debug","Error","info","JSON","stringify","toB64Screenshot","dispId","takeScreenshot","toString","displayId","displayIdStr","isNaN","payload","allInfos","values","screenshots","B","all","map","zip","_default","exports","default"],"sources":["../../../lib/commands/screenshot.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\n\nconst commands = {};\n\n// Display 4619827259835644672 (HWC display 0): port=0 pnpId=GGL displayName=\"EMU_display_0\"\nconst DISPLAY_PATTERN = /^Display\\s+(\\d+)\\s+\\(.+display\\s+(\\d+)\\).+displayName=\"([^\"]*)/gm;\n\n/**\n * @typedef {Object} ScreenshotsInfo\n *\n * A dictionary where each key contains a unique display identifier\n * and values are dictionaries with following items:\n * - id: Display identifier\n * - name: Display name, could be empty\n * - isDefault: Whether this display is the default one\n * - payload: The actual PNG screenshot data encoded to base64 string\n */\n\n/**\n * @typedef {Object} ScreenshotsOpts\n * @property {number|string?} displayId Android display identifier to take a screenshot for.\n * If not provided then screenshots of all displays are going to be returned.\n * If no matches were found then an error is thrown.\n */\n\n/**\n * Retrieves screenshots of each display available to Android.\n * This functionality is only supported since Android 10.\n *\n * @param {ScreenshotsOpts} opts\n * @returns {Promise<ScreenshotsInfo>}\n */\ncommands.mobileScreenshots = async function mobileScreenshots (opts = {}) {\n const displaysInfo = await this.adb.shell(['dumpsys', 'SurfaceFlinger', '--display-id']);\n const infos = {};\n let match;\n while ((match = DISPLAY_PATTERN.exec(displaysInfo))) {\n infos[match[1]] = {\n id: match[1],\n isDefault: match[2] === '0',\n name: match[3],\n };\n }\n if (_.isEmpty(infos)) {\n this.log.debug(displaysInfo);\n throw new Error('Cannot determine the information about connected Android displays');\n }\n this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);\n\n const toB64Screenshot = async (dispId) => (await this.adb.takeScreenshot(dispId))\n .toString('base64');\n\n const {displayId} = opts;\n const displayIdStr = isNaN(displayId) ? null : `${displayId}`;\n if (displayIdStr) {\n if (!infos[displayIdStr]) {\n throw new Error(\n `The provided display identifier '${displayId}' is not known. ` +\n `Only the following displays have been detected: ${JSON.stringify(infos)}`\n );\n }\n return {\n [displayIdStr]: {\n ...infos[displayIdStr],\n payload: await toB64Screenshot(displayIdStr),\n }\n };\n }\n\n const allInfos = _.values(infos);\n const screenshots = await B.all(allInfos.map(({id}) => toB64Screenshot(id)));\n for (const [info, payload] of _.zip(allInfos, screenshots)) {\n info.payload = payload;\n }\n return infos;\n};\n\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,MAAME,QAAQ,GAAG,CAAC,CAAC;AAGnB,MAAMC,eAAe,GAAG,kEAAkE;AA2B1FD,QAAQ,CAACE,iBAAiB,GAAG,eAAeA,iBAAiBA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,KAAK,CAAC,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;EACxF,MAAMC,KAAK,GAAG,CAAC,CAAC;EAChB,IAAIC,KAAK;EACT,OAAQA,KAAK,GAAGP,eAAe,CAACQ,IAAI,CAACL,YAAY,CAAC,EAAG;IACnDG,KAAK,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;MAChBE,EAAE,EAAEF,KAAK,CAAC,CAAC,CAAC;MACZG,SAAS,EAAEH,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;MAC3BI,IAAI,EAAEJ,KAAK,CAAC,CAAC;IACf,CAAC;EACH;EACA,IAAIK,eAAC,CAACC,OAAO,CAACP,KAAK,CAAC,EAAE;IACpB,IAAI,CAACQ,GAAG,CAACC,KAAK,CAACZ,YAAY,CAAC;IAC5B,MAAM,IAAIa,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,IAAI,CAACF,GAAG,CAACG,IAAI,CAAE,iCAAgCC,IAAI,CAACC,SAAS,CAACb,KAAK,CAAE,EAAC,CAAC;EAEvE,MAAMc,eAAe,GAAG,MAAOC,MAAM,IAAK,CAAC,MAAM,IAAI,CAACjB,GAAG,CAACkB,cAAc,CAACD,MAAM,CAAC,EAC7EE,QAAQ,CAAC,QAAQ,CAAC;EAErB,MAAM;IAACC;EAAS,CAAC,GAAGtB,IAAI;EACxB,MAAMuB,YAAY,GAAGC,KAAK,CAACF,SAAS,CAAC,GAAG,IAAI,GAAI,GAAEA,SAAU,EAAC;EAC7D,IAAIC,YAAY,EAAE;IAChB,IAAI,CAACnB,KAAK,CAACmB,YAAY,CAAC,EAAE;MACxB,MAAM,IAAIT,KAAK,CACZ,oCAAmCQ,SAAU,kBAAiB,GAC9D,mDAAkDN,IAAI,CAACC,SAAS,CAACb,KAAK,CAAE,EAC3E,CAAC;IACH;IACA,OAAO;MACL,CAACmB,YAAY,GAAG;QACd,GAAGnB,KAAK,CAACmB,YAAY,CAAC;QACtBE,OAAO,EAAE,MAAMP,eAAe,CAACK,YAAY;MAC7C;IACF,CAAC;EACH;EAEA,MAAMG,QAAQ,GAAGhB,eAAC,CAACiB,MAAM,CAACvB,KAAK,CAAC;EAChC,MAAMwB,WAAW,GAAG,MAAMC,iBAAC,CAACC,GAAG,CAACJ,QAAQ,CAACK,GAAG,CAAC,CAAC;IAACxB;EAAE,CAAC,KAAKW,eAAe,CAACX,EAAE,CAAC,CAAC,CAAC;EAC5E,KAAK,MAAM,CAACQ,IAAI,EAAEU,OAAO,CAAC,IAAIf,eAAC,CAACsB,GAAG,CAACN,QAAQ,EAAEE,WAAW,CAAC,EAAE;IAC1Db,IAAI,CAACU,OAAO,GAAGA,OAAO;EACxB;EACA,OAAOrB,KAAK;AACd,CAAC;AAAC,IAAA6B,QAAA,GAEapC,QAAQ;AAAAqC,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -112,6 +112,8 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
112
112
  getPerformanceDataTypes: 'getPerformanceDataTypes',
113
113
 
114
114
  statusBar: 'mobilePerformStatusBarCommand',
115
+
116
+ screenshots: 'mobileScreenshots',
115
117
  };
116
118
 
117
119
  if (!_.has(mobileCommandsMapping, mobileCommand)) {
@@ -77,6 +77,24 @@ commands.mobilePressKey = async function mobilePressKey (opts = {}) {
77
77
  });
78
78
  };
79
79
 
80
+ /**
81
+ * @typedef {Object} BackgroundAppOptions
82
+ * @property {number?} seconds The amount of seconds to wait between putting the app to background and restoring it.
83
+ * Any negative value means to not restore the app after putting it to the background (the default behavior).
84
+ */
85
+
86
+ /**
87
+ * Puts the app under test to the background
88
+ * and then restores it (if needed). The call is blocking is the
89
+ * app needs to be restored afterwards.
90
+ *
91
+ * @param {BackgroundAppOptions} opts
92
+ */
93
+ commands.mobileBackgroundApp = async function mobileBackgroundApp (opts = {}) {
94
+ const {seconds = -1} = opts;
95
+ return await this.background(seconds);
96
+ };
97
+
80
98
  commands.mobileGetDeviceInfo = async function mobileGetDeviceInfo () {
81
99
  return await this.espresso.jwproxy.command('/appium/device/info', 'GET');
82
100
  };
@@ -1,6 +1,7 @@
1
1
  import executeCmds from './execute';
2
2
  import generalCmds from './general';
3
3
  import servicesCmds from './services';
4
+ import screenshotCmds from './screenshot';
4
5
  import idlingResourcesCmds from './idling-resources';
5
6
 
6
7
  const commands = {};
@@ -10,6 +11,7 @@ Object.assign(
10
11
  executeCmds,
11
12
  servicesCmds,
12
13
  idlingResourcesCmds,
14
+ screenshotCmds,
13
15
  // add other command types here
14
16
  );
15
17
 
@@ -0,0 +1,79 @@
1
+ import _ from 'lodash';
2
+ import B from 'bluebird';
3
+
4
+ const commands = {};
5
+
6
+ // Display 4619827259835644672 (HWC display 0): port=0 pnpId=GGL displayName="EMU_display_0"
7
+ const DISPLAY_PATTERN = /^Display\s+(\d+)\s+\(.+display\s+(\d+)\).+displayName="([^"]*)/gm;
8
+
9
+ /**
10
+ * @typedef {Object} ScreenshotsInfo
11
+ *
12
+ * A dictionary where each key contains a unique display identifier
13
+ * and values are dictionaries with following items:
14
+ * - id: Display identifier
15
+ * - name: Display name, could be empty
16
+ * - isDefault: Whether this display is the default one
17
+ * - payload: The actual PNG screenshot data encoded to base64 string
18
+ */
19
+
20
+ /**
21
+ * @typedef {Object} ScreenshotsOpts
22
+ * @property {number|string?} displayId Android display identifier to take a screenshot for.
23
+ * If not provided then screenshots of all displays are going to be returned.
24
+ * If no matches were found then an error is thrown.
25
+ */
26
+
27
+ /**
28
+ * Retrieves screenshots of each display available to Android.
29
+ * This functionality is only supported since Android 10.
30
+ *
31
+ * @param {ScreenshotsOpts} opts
32
+ * @returns {Promise<ScreenshotsInfo>}
33
+ */
34
+ commands.mobileScreenshots = async function mobileScreenshots (opts = {}) {
35
+ const displaysInfo = await this.adb.shell(['dumpsys', 'SurfaceFlinger', '--display-id']);
36
+ const infos = {};
37
+ let match;
38
+ while ((match = DISPLAY_PATTERN.exec(displaysInfo))) {
39
+ infos[match[1]] = {
40
+ id: match[1],
41
+ isDefault: match[2] === '0',
42
+ name: match[3],
43
+ };
44
+ }
45
+ if (_.isEmpty(infos)) {
46
+ this.log.debug(displaysInfo);
47
+ throw new Error('Cannot determine the information about connected Android displays');
48
+ }
49
+ this.log.info(`Parsed Android display infos: ${JSON.stringify(infos)}`);
50
+
51
+ const toB64Screenshot = async (dispId) => (await this.adb.takeScreenshot(dispId))
52
+ .toString('base64');
53
+
54
+ const {displayId} = opts;
55
+ const displayIdStr = isNaN(displayId) ? null : `${displayId}`;
56
+ if (displayIdStr) {
57
+ if (!infos[displayIdStr]) {
58
+ throw new Error(
59
+ `The provided display identifier '${displayId}' is not known. ` +
60
+ `Only the following displays have been detected: ${JSON.stringify(infos)}`
61
+ );
62
+ }
63
+ return {
64
+ [displayIdStr]: {
65
+ ...infos[displayIdStr],
66
+ payload: await toB64Screenshot(displayIdStr),
67
+ }
68
+ };
69
+ }
70
+
71
+ const allInfos = _.values(infos);
72
+ const screenshots = await B.all(allInfos.map(({id}) => toB64Screenshot(id)));
73
+ for (const [info, payload] of _.zip(allInfos, screenshots)) {
74
+ info.payload = payload;
75
+ }
76
+ return infos;
77
+ };
78
+
79
+ export default commands;
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "appium-espresso-driver",
3
- "version": "2.23.4",
3
+ "version": "2.24.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-espresso-driver",
9
- "version": "2.23.4",
9
+ "version": "2.24.0",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.4.3",
13
- "appium-adb": "^9.10.2",
13
+ "appium-adb": "^9.13.2",
14
14
  "appium-android-driver": "^5.14.0",
15
15
  "asyncbox": "^2.3.1",
16
16
  "bluebird": "^3.5.0",
@@ -749,6 +749,10 @@
749
749
  "@types/node": "*"
750
750
  }
751
751
  },
752
+ "node_modules/@types/http-errors": {
753
+ "version": "2.0.1",
754
+ "license": "MIT"
755
+ },
752
756
  "node_modules/@types/jsftp": {
753
757
  "version": "2.1.2",
754
758
  "license": "MIT",
@@ -852,9 +856,10 @@
852
856
  }
853
857
  },
854
858
  "node_modules/@types/serve-static": {
855
- "version": "1.15.1",
859
+ "version": "1.15.2",
856
860
  "license": "MIT",
857
861
  "dependencies": {
862
+ "@types/http-errors": "*",
858
863
  "@types/mime": "*",
859
864
  "@types/node": "*"
860
865
  }
@@ -1000,7 +1005,7 @@
1000
1005
  }
1001
1006
  },
1002
1007
  "node_modules/appium-adb": {
1003
- "version": "9.12.1",
1008
+ "version": "9.13.2",
1004
1009
  "license": "Apache-2.0",
1005
1010
  "dependencies": {
1006
1011
  "@appium/support": "^4.0.0",
@@ -1029,7 +1034,7 @@
1029
1034
  }
1030
1035
  },
1031
1036
  "node_modules/appium-adb/node_modules/semver": {
1032
- "version": "7.5.2",
1037
+ "version": "7.5.3",
1033
1038
  "license": "ISC",
1034
1039
  "dependencies": {
1035
1040
  "lru-cache": "^6.0.0"
@@ -1093,7 +1098,7 @@
1093
1098
  }
1094
1099
  },
1095
1100
  "node_modules/appium-android-driver/node_modules/semver": {
1096
- "version": "7.5.2",
1101
+ "version": "7.5.3",
1097
1102
  "license": "ISC",
1098
1103
  "dependencies": {
1099
1104
  "lru-cache": "^6.0.0"
@@ -1155,7 +1160,7 @@
1155
1160
  }
1156
1161
  },
1157
1162
  "node_modules/appium-chromedriver/node_modules/semver": {
1158
- "version": "7.5.2",
1163
+ "version": "7.5.3",
1159
1164
  "license": "ISC",
1160
1165
  "dependencies": {
1161
1166
  "lru-cache": "^6.0.0"
@@ -2472,7 +2477,7 @@
2472
2477
  }
2473
2478
  },
2474
2479
  "node_modules/io.appium.settings": {
2475
- "version": "5.0.4",
2480
+ "version": "5.0.5",
2476
2481
  "license": "Apache-2.0",
2477
2482
  "engines": {
2478
2483
  "node": ">=14",
@@ -3058,7 +3063,7 @@
3058
3063
  }
3059
3064
  },
3060
3065
  "node_modules/node-abi/node_modules/semver": {
3061
- "version": "7.5.2",
3066
+ "version": "7.5.3",
3062
3067
  "license": "ISC",
3063
3068
  "optional": true,
3064
3069
  "dependencies": {
@@ -3848,7 +3853,7 @@
3848
3853
  }
3849
3854
  },
3850
3855
  "node_modules/sharp/node_modules/semver": {
3851
- "version": "7.5.2",
3856
+ "version": "7.5.3",
3852
3857
  "license": "ISC",
3853
3858
  "optional": true,
3854
3859
  "dependencies": {
@@ -3893,7 +3898,7 @@
3893
3898
  }
3894
3899
  },
3895
3900
  "node_modules/shiki": {
3896
- "version": "0.14.2",
3901
+ "version": "0.14.3",
3897
3902
  "extraneous": true,
3898
3903
  "license": "MIT",
3899
3904
  "dependencies": {
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "automated testing",
8
8
  "android"
9
9
  ],
10
- "version": "2.23.4",
10
+ "version": "2.24.0",
11
11
  "author": "Appium Contributors",
12
12
  "license": "Apache-2.0",
13
13
  "repository": {
@@ -67,7 +67,7 @@
67
67
  ],
68
68
  "dependencies": {
69
69
  "@babel/runtime": "^7.4.3",
70
- "appium-adb": "^9.10.2",
70
+ "appium-adb": "^9.13.2",
71
71
  "appium-android-driver": "^5.14.0",
72
72
  "asyncbox": "^2.3.1",
73
73
  "bluebird": "^3.5.0",