appium-espresso-driver 1.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +201 -0
  3. package/README.md +864 -0
  4. package/build/index.js +48 -0
  5. package/build/lib/commands/execute.js +67 -0
  6. package/build/lib/commands/general.js +337 -0
  7. package/build/lib/commands/idling-resources.js +31 -0
  8. package/build/lib/commands/index.js +26 -0
  9. package/build/lib/commands/services.js +27 -0
  10. package/build/lib/desired-caps.js +65 -0
  11. package/build/lib/driver.js +475 -0
  12. package/build/lib/espresso-runner.js +381 -0
  13. package/build/lib/logger.js +18 -0
  14. package/build/lib/server-builder.js +213 -0
  15. package/build/lib/server.js +39 -0
  16. package/build/lib/utils.js +85 -0
  17. package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
  18. package/espresso-server/app/build/outputs/apk/androidTest/debug/output-metadata.json +18 -0
  19. package/espresso-server/app/build.gradle.kts +153 -0
  20. package/espresso-server/app/proguard-rules.pro +25 -0
  21. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/EspressoServerRunnerTest.kt +93 -0
  22. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/AppDriver.kt +29 -0
  23. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/ComposeDriver.kt +73 -0
  24. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/DriverContext.kt +35 -0
  25. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/EspressoDriver.kt +70 -0
  26. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/AcceptAlert.kt +32 -0
  27. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Back.kt +31 -0
  28. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +40 -0
  29. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Click.kt +27 -0
  30. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/CreateSession.kt +58 -0
  31. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt +33 -0
  32. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DismissAlert.kt +32 -0
  33. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DrawerActionHandler.kt +45 -0
  34. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +19 -0
  35. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +31 -0
  36. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +85 -0
  37. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +32 -0
  38. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +29 -0
  39. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +43 -0
  40. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAlertText.kt +31 -0
  41. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +101 -0
  42. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetClipboard.kt +65 -0
  43. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDeviceInfo.kt +44 -0
  44. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +28 -0
  45. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +30 -0
  46. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +32 -0
  47. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +33 -0
  48. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +31 -0
  49. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetOrientation.kt +44 -0
  50. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +38 -0
  51. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRotation.kt +33 -0
  52. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +30 -0
  53. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSession.kt +34 -0
  54. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSessions.kt +41 -0
  55. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSettings.kt +25 -0
  56. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +32 -0
  57. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetToastVisibility.kt +34 -0
  58. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowRect.kt +43 -0
  59. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowSize.kt +42 -0
  60. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/HideKeyboard.kt +29 -0
  61. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +82 -0
  62. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ListIdlingResources.kt +30 -0
  63. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +42 -0
  64. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +49 -0
  65. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +71 -0
  66. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +50 -0
  67. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MoveTo.kt +50 -0
  68. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MultiTouchAction.kt +50 -0
  69. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NavigateTo.kt +42 -0
  70. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NoSessionCommandHandler.kt +4 -0
  71. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NotYetImplemented.kt +28 -0
  72. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/OpenNotifications.kt +28 -0
  73. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAction.kt +42 -0
  74. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAutofillDismissal.kt +31 -0
  75. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformEditorAction.kt +30 -0
  76. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +281 -0
  77. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PressKeyCode.kt +90 -0
  78. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RegisterIdlingResources.kt +33 -0
  79. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ReleaseActions.kt +41 -0
  80. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RequestHandler.kt +43 -0
  81. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScreenshotHandler.kt +29 -0
  82. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScrollToPage.kt +60 -0
  83. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt +64 -0
  84. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetDate.kt +41 -0
  85. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetOrientation.kt +61 -0
  86. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetRotation.kt +46 -0
  87. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetTime.kt +41 -0
  88. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Source.kt +29 -0
  89. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartActivity.kt +30 -0
  90. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartService.kt +40 -0
  91. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Status.kt +26 -0
  92. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StopService.kt +37 -0
  93. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Text.kt +28 -0
  94. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/TouchAction.kt +49 -0
  95. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Uiautomator.kt +68 -0
  96. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UiautomatorPageSource.kt +35 -0
  97. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UnregisterIdlingResources.kt +33 -0
  98. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UpdateSettings.kt +35 -0
  99. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +69 -0
  100. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/AppiumException.kt +40 -0
  101. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/DuplicateRouteException.kt +22 -0
  102. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ElementNotVisibleException.kt +30 -0
  103. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidArgumentException.kt +35 -0
  104. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidElementStateException.kt +41 -0
  105. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidSelectorException.kt +35 -0
  106. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/MoveTargetOutOfBoundsException.kt +39 -0
  107. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoAlertOpenException.kt +33 -0
  108. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchDriverException.kt +31 -0
  109. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchElementException.kt +34 -0
  110. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NotYetImplementedException.kt +33 -0
  111. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ScreenCaptureException.kt +30 -0
  112. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/SessionNotCreatedException.kt +34 -0
  113. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/StaleElementException.kt +30 -0
  114. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/XPathLookupException.kt +31 -0
  115. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AccessibilityServiceState.kt +15 -0
  116. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityHelpers.kt +125 -0
  117. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityOptionsHelpers.kt +60 -0
  118. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AlertHelpers.kt +170 -0
  119. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AndroidLogger.kt +45 -0
  120. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AssertHelpers.kt +17 -0
  121. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AutofillHelpers.kt +44 -0
  122. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/BackdoorUtils.java +49 -0
  123. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ClipboardHelper.kt +51 -0
  124. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ComposeNodeFinder.kt +59 -0
  125. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/DeviceInfoHelper.kt +148 -0
  126. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +57 -0
  127. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/GsonParserHelpers.kt +72 -0
  128. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IMEHelpers.kt +88 -0
  129. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IntentHelpers.kt +336 -0
  130. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InteractionHelper.kt +40 -0
  131. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InvocationOperation.java +80 -0
  132. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/LocaleHelpers.kt +46 -0
  133. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Logger.kt +25 -0
  134. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/NotificationListener.kt +87 -0
  135. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Rect.kt +22 -0
  136. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ReflectionUtils.kt +64 -0
  137. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ScreenshotsHelper.kt +59 -0
  138. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/StringHelpers.kt +42 -0
  139. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ThreadHelpers.kt +15 -0
  140. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/UiAutomationWrapper.kt +48 -0
  141. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +316 -0
  142. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/XMLHelpers.kt +56 -0
  143. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/extensions/Semaphore.kt +22 -0
  144. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ArrayUtils.java +110 -0
  145. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ClassUtils.java +180 -0
  146. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/MethodUtils.java +155 -0
  147. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/Validate.java +34 -0
  148. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/BaseW3CActionAdapter.kt +71 -0
  149. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/DummyW3CActionAdapter.kt +133 -0
  150. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/W3CActionAdapter.kt +71 -0
  151. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidKeyEvent.kt +271 -0
  152. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidMotionEvent.kt +90 -0
  153. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +147 -0
  154. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/Helpers.kt +71 -0
  155. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MotionEventBuilder.kt +153 -0
  156. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MultiTouchState.kt +132 -0
  157. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/TouchState.kt +7 -0
  158. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/caps/CapsUtils.kt +96 -0
  159. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/BaseDispatchResult.kt +14 -0
  160. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/DispatchPointerMoveResult.kt +22 -0
  161. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/KeyDispatch.kt +151 -0
  162. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/PointerDispatch.kt +286 -0
  163. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/W3CKeyEvent.kt +21 -0
  164. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyCodeMapper.kt +169 -0
  165. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyLocationMapper.kt +50 -0
  166. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyNormalizer.kt +84 -0
  167. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/NormalizedKeys.kt +60 -0
  168. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionObject.kt +138 -0
  169. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionSequence.kt +112 -0
  170. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Actions.kt +89 -0
  171. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/InputSource.kt +173 -0
  172. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Origin.kt +24 -0
  173. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/OriginDeserializer.kt +25 -0
  174. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Tick.kt +62 -0
  175. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ActionsProcessor.kt +93 -0
  176. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/KeyProcessor.kt +57 -0
  177. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PauseProcessor.kt +59 -0
  178. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PointerProcessor.kt +115 -0
  179. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ProcessorHelpers.kt +35 -0
  180. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/ActiveInputSources.kt +62 -0
  181. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputState.kt +6 -0
  182. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputStateTable.kt +95 -0
  183. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/KeyInputState.kt +82 -0
  184. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/PointerInputState.kt +45 -0
  185. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteDefinition.kt +67 -0
  186. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteMap.kt +51 -0
  187. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt +250 -0
  188. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Server.kt +109 -0
  189. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/AppiumResponse.kt +61 -0
  190. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/BaseResponse.kt +25 -0
  191. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AlertParams.kt +21 -0
  192. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AppiumParams.kt +55 -0
  193. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/BackdoorMethodArg.kt +3 -0
  194. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt +18 -0
  195. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/DrawerActionParams.kt +21 -0
  196. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/EditorActionParams.kt +21 -0
  197. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +169 -0
  198. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt +27 -0
  199. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GlobalSession.kt +64 -0
  200. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/HamcrestMatcher.kt +144 -0
  201. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/IdlingResourcesParams.kt +66 -0
  202. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/KeyEventParams.kt +23 -0
  203. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/LocaleParams.kt +34 -0
  204. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Location.kt +19 -0
  205. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Locator.kt +22 -0
  206. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MatcherJson.kt +37 -0
  207. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorMethod.kt +22 -0
  208. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorParams.kt +20 -0
  209. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileClickActionParams.kt +81 -0
  210. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileSwipeParams.kt +106 -0
  211. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MotionEventParams.kt +37 -0
  212. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MoveToParams.kt +26 -0
  213. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MultiTouchActionsParams.kt +5 -0
  214. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/NavigateToParams.kt +21 -0
  215. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationParams.kt +21 -0
  216. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationType.kt +6 -0
  217. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Rect.kt +24 -0
  218. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/RotationParams.kt +38 -0
  219. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ScrollToPageParams.kt +36 -0
  220. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SessionParams.kt +23 -0
  221. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt +29 -0
  222. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetDateParams.kt +23 -0
  223. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetTimeParams.kt +22 -0
  224. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SettingsParams.kt +19 -0
  225. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Size.kt +22 -0
  226. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SourceDocument.kt +286 -0
  227. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartActivityParams.kt +9 -0
  228. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartServiceParams.kt +22 -0
  229. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StopServiceParams.kt +21 -0
  230. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Strategy.kt +49 -0
  231. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TextValueParams.kt +6 -0
  232. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ToastLookupParams.kt +22 -0
  233. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchAction.kt +178 -0
  234. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchActionsParams.kt +5 -0
  235. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/UiautomatorParams.kt +123 -0
  236. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewAttributesEnum.kt +51 -0
  237. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewElement.kt +204 -0
  238. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewFlashParams.kt +9 -0
  239. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewText.kt +12 -0
  240. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowRect.kt +24 -0
  241. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowSize.kt +22 -0
  242. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/AbstractSetting.kt +23 -0
  243. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/DriverSetting.kt +40 -0
  244. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/SettingType.kt +21 -0
  245. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtom.kt +26 -0
  246. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomDeserializer.kt +99 -0
  247. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsMethods.kt +4 -0
  248. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsParams.kt +9 -0
  249. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/OrientationChange.kt +47 -0
  250. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ScrollTo.kt +48 -0
  251. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerPerformer.kt +67 -0
  252. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerRunnable.kt +25 -0
  253. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewGetter.kt +79 -0
  254. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewTextGetter.kt +31 -0
  255. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/RegexpTextMatcher.kt +38 -0
  256. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithView.kt +33 -0
  257. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithXPath.kt +55 -0
  258. package/espresso-server/app/src/main/AndroidManifest.xml +7 -0
  259. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/Helpers.kt +20 -0
  260. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/backdoor-methods.json +51 -0
  261. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/key-actions.json +15 -0
  262. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/multi-touch-actions.json +28 -0
  263. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/GsonParserHelpersTest.kt +41 -0
  264. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/IntentCreationTests.kt +115 -0
  265. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/InvocationOperationTest.java +97 -0
  266. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/KReflectionUtilsTest.kt +108 -0
  267. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/XpathQueryParserTests.kt +42 -0
  268. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionSequenceTest.kt +220 -0
  269. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionsTest.kt +76 -0
  270. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/CapsUtilsTest.kt +76 -0
  271. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/Helpers.kt +7 -0
  272. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputSourceTest.kt +153 -0
  273. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputStateTableTest.kt +72 -0
  274. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyDispatchTest.kt +133 -0
  275. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyInputStateTest.kt +74 -0
  276. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/PointerDispatchTest.kt +370 -0
  277. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ProcessorTest.kt +320 -0
  278. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/TickTest.kt +265 -0
  279. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/AndroidKeyEventTest.kt +114 -0
  280. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/HelpersTest.kt +31 -0
  281. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/http/RouteDefinitionTest.kt +74 -0
  282. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt +112 -0
  283. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MatcherJsonTest.kt +20 -0
  284. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileBackdoorMethodTest.java +110 -0
  285. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileClickTest.kt +46 -0
  286. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileSwipeTest.kt +68 -0
  287. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/TouchActionTest.kt +56 -0
  288. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomTest.kt +68 -0
  289. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomsTest.kt +96 -0
  290. package/espresso-server/build.gradle.kts +33 -0
  291. package/espresso-server/gradle/wrapper/gradle-wrapper.jar +0 -0
  292. package/espresso-server/gradle/wrapper/gradle-wrapper.properties +5 -0
  293. package/espresso-server/gradle.properties +26 -0
  294. package/espresso-server/gradlew +185 -0
  295. package/espresso-server/gradlew.bat +89 -0
  296. package/espresso-server/lint.xml +4 -0
  297. package/espresso-server/settings.gradle.kts +1 -0
  298. package/index.js +29 -0
  299. package/lib/commands/execute.js +72 -0
  300. package/lib/commands/general.js +321 -0
  301. package/lib/commands/idling-resources.js +52 -0
  302. package/lib/commands/index.js +16 -0
  303. package/lib/commands/services.js +50 -0
  304. package/lib/desired-caps.js +55 -0
  305. package/lib/driver.js +566 -0
  306. package/lib/espresso-runner.js +340 -0
  307. package/lib/logger.js +6 -0
  308. package/lib/server-builder.js +194 -0
  309. package/lib/server.js +18 -0
  310. package/lib/utils.js +74 -0
  311. package/package.json +105 -0
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.TEST_APK_PKG = exports.REQUIRED_PARAMS = exports.EspressoRunner = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _appiumBaseDriver = require("appium-base-driver");
13
+
14
+ var _asyncbox = require("asyncbox");
15
+
16
+ var _logger = _interopRequireDefault(require("./logger"));
17
+
18
+ var _serverBuilder = require("./server-builder");
19
+
20
+ var _path = _interopRequireDefault(require("path"));
21
+
22
+ var _appiumSupport = require("appium-support");
23
+
24
+ var _package = require("../../package.json");
25
+
26
+ var _bluebird = _interopRequireDefault(require("bluebird"));
27
+
28
+ var _lodash = _interopRequireDefault(require("lodash"));
29
+
30
+ var _utils = require("./utils");
31
+
32
+ var _axios = _interopRequireDefault(require("axios"));
33
+
34
+ const TEST_SERVER_ROOT = _path.default.resolve(__dirname, '..', '..', 'espresso-server');
35
+
36
+ const TEST_APK_PKG = 'io.appium.espressoserver.test';
37
+ exports.TEST_APK_PKG = TEST_APK_PKG;
38
+ const REQUIRED_PARAMS = ['adb', 'tmpDir', 'host', 'systemPort', 'devicePort', 'appPackage', 'forceEspressoRebuild'];
39
+ exports.REQUIRED_PARAMS = REQUIRED_PARAMS;
40
+ const ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS = 45000;
41
+ const TARGET_PACKAGE_CONTAINER = '/data/local/tmp/espresso.apppackage';
42
+
43
+ class EspressoProxy extends _appiumBaseDriver.JWProxy {
44
+ async proxyCommand(url, method, body = null) {
45
+ const {
46
+ crashed,
47
+ exited
48
+ } = this.instrumentationState;
49
+
50
+ if (exited) {
51
+ throw new _appiumBaseDriver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Espresso server because ` + `the instrumentation process has ${crashed ? 'crashed' : 'been unexpectedly terminated'}. ` + `Check the Appium server log and the logcat output for more details`);
52
+ }
53
+
54
+ return await super.proxyCommand(url, method, body);
55
+ }
56
+
57
+ }
58
+
59
+ class EspressoRunner {
60
+ constructor(opts = {}) {
61
+ for (let req of REQUIRED_PARAMS) {
62
+ if (!opts || !_appiumSupport.util.hasValue(opts[req])) {
63
+ throw new Error(`Option '${req}' is required!`);
64
+ }
65
+
66
+ this[req] = opts[req];
67
+ }
68
+
69
+ this.jwproxy = new EspressoProxy({
70
+ server: this.host,
71
+ port: this.systemPort,
72
+ base: '',
73
+ keepAlive: true
74
+ });
75
+ this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
76
+ this.jwproxy.instrumentationState = {
77
+ exited: false,
78
+ crashed: false
79
+ };
80
+
81
+ const modServerName = _appiumSupport.fs.sanitizeName(`${TEST_APK_PKG}_${_package.version}_${this.appPackage}_${this.adb.curDeviceId}.apk`, {
82
+ replacement: '-'
83
+ });
84
+
85
+ this.modServerPath = _path.default.resolve(this.tmpDir, modServerName);
86
+ this.showGradleLog = opts.showGradleLog;
87
+ this.espressoBuildConfig = opts.espressoBuildConfig;
88
+ this.serverLaunchTimeout = opts.serverLaunchTimeout || ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS;
89
+ this.androidInstallTimeout = opts.androidInstallTimeout;
90
+ this.disableSuppressAccessibilityService = opts.disableSuppressAccessibilityService;
91
+
92
+ if (opts.useKeystore && opts.keystorePath && opts.keystorePassword && opts.keyAlias && opts.keyPassword) {
93
+ this.signingConfig = (0, _serverBuilder.buildServerSigningConfig)({
94
+ keystoreFile: opts.keystorePath,
95
+ keystorePassword: opts.keystorePassword,
96
+ keyAlias: opts.keyAlias,
97
+ keyPassword: opts.keyPassword
98
+ });
99
+ } else {
100
+ this.signingConfig = null;
101
+ }
102
+ }
103
+
104
+ async isAppPackageChanged() {
105
+ if (!(await this.adb.fileExists(TARGET_PACKAGE_CONTAINER))) {
106
+ _logger.default.debug('The previous target application package is unknown');
107
+
108
+ return true;
109
+ }
110
+
111
+ const previousAppPackage = (await this.adb.shell(['cat', TARGET_PACKAGE_CONTAINER])).trim();
112
+
113
+ _logger.default.debug(`The previous target application package was '${previousAppPackage}'. ` + `The current package is '${this.appPackage}'`);
114
+
115
+ return previousAppPackage !== this.appPackage;
116
+ }
117
+
118
+ async installServer() {
119
+ const appState = await this.adb.getApplicationInstallState(this.modServerPath, TEST_APK_PKG);
120
+ const shouldUninstallApp = [this.adb.APP_INSTALL_STATE.OLDER_VERSION_INSTALLED, this.adb.APP_INSTALL_STATE.NEWER_VERSION_INSTALLED].includes(appState);
121
+ const shouldInstallApp = shouldUninstallApp || [this.adb.APP_INSTALL_STATE.NOT_INSTALLED].includes(appState);
122
+
123
+ if (shouldUninstallApp) {
124
+ _logger.default.info(`Uninstalling Espresso Test Server apk from the target device (pkg: '${TEST_APK_PKG}')`);
125
+
126
+ try {
127
+ await this.adb.uninstallApk(TEST_APK_PKG);
128
+ } catch (err) {
129
+ _logger.default.warn(`Error uninstalling '${TEST_APK_PKG}': ${err.message}`);
130
+ }
131
+ }
132
+
133
+ if (shouldInstallApp) {
134
+ _logger.default.info(`Installing Espresso Test Server apk from the target device (path: '${this.modServerPath}')`);
135
+
136
+ try {
137
+ await this.adb.install(this.modServerPath, {
138
+ replace: false,
139
+ timeout: this.androidInstallTimeout
140
+ });
141
+
142
+ _logger.default.info(`Installed Espresso Test Server apk '${this.modServerPath}' (pkg: '${TEST_APK_PKG}')`);
143
+ } catch (err) {
144
+ _logger.default.errorAndThrow(`Cannot install '${this.modServerPath}' because of '${err.message}'`);
145
+ }
146
+ }
147
+ }
148
+
149
+ async installTestApk() {
150
+ let rebuild = this.forceEspressoRebuild;
151
+
152
+ if (rebuild) {
153
+ _logger.default.debug(`'forceEspressoRebuild' capability is enabled`);
154
+ } else if (await this.isAppPackageChanged()) {
155
+ _logger.default.info(`Forcing Espresso server rebuild because of changed application package`);
156
+
157
+ rebuild = true;
158
+ }
159
+
160
+ if (rebuild && (await _appiumSupport.fs.exists(this.modServerPath))) {
161
+ _logger.default.debug(`Deleting the obsolete Espresso server package '${this.modServerPath}'`);
162
+
163
+ await _appiumSupport.fs.unlink(this.modServerPath);
164
+ }
165
+
166
+ if (!(await _appiumSupport.fs.exists(this.modServerPath))) {
167
+ await this.buildNewModServer();
168
+ }
169
+
170
+ const isSigned = await this.adb.checkApkCert(this.modServerPath, TEST_APK_PKG);
171
+
172
+ if (!isSigned) {
173
+ await this.adb.sign(this.modServerPath);
174
+ }
175
+
176
+ if ((rebuild || !isSigned) && (await this.adb.uninstallApk(TEST_APK_PKG))) {
177
+ _logger.default.info('Uninstalled the obsolete Espresso server package from the device under test');
178
+ }
179
+
180
+ await this.installServer();
181
+ }
182
+
183
+ async buildNewModServer() {
184
+ let buildConfiguration = {};
185
+
186
+ if (this.espressoBuildConfig) {
187
+ let buildConfigurationStr;
188
+
189
+ if (await _appiumSupport.fs.exists(this.espressoBuildConfig)) {
190
+ _logger.default.info(`Loading the build configuration from '${this.espressoBuildConfig}'`);
191
+
192
+ buildConfigurationStr = await _appiumSupport.fs.readFile(this.espressoBuildConfig, 'utf8');
193
+ } else {
194
+ _logger.default.info(`Loading the build configuration from 'espressoBuildConfig' capability`);
195
+
196
+ buildConfigurationStr = this.espressoBuildConfig;
197
+ }
198
+
199
+ try {
200
+ buildConfiguration = JSON.parse(buildConfigurationStr);
201
+ } catch (e) {
202
+ _logger.default.error('Cannot parse the build configuration JSON', e);
203
+
204
+ throw e;
205
+ }
206
+ }
207
+
208
+ const dirName = _appiumSupport.fs.sanitizeName(`espresso-server-${this.adb.curDeviceId}`, {
209
+ replacement: '-'
210
+ });
211
+
212
+ const serverPath = _path.default.resolve(this.tmpDir, dirName);
213
+
214
+ _logger.default.info(`Building espresso server in '${serverPath}'`);
215
+
216
+ _logger.default.debug(`The build folder root could be customized by changing the 'tmpDir' capability`);
217
+
218
+ await _appiumSupport.fs.rimraf(serverPath);
219
+ await (0, _appiumSupport.mkdirp)(serverPath);
220
+
221
+ _logger.default.debug(`Copying espresso server template from ('${TEST_SERVER_ROOT}' to '${serverPath}')`);
222
+
223
+ await (0, _utils.copyGradleProjectRecursively)(TEST_SERVER_ROOT, serverPath);
224
+
225
+ _logger.default.debug('Bulding espresso server');
226
+
227
+ await new _serverBuilder.ServerBuilder({
228
+ serverPath,
229
+ buildConfiguration,
230
+ showGradleLog: this.showGradleLog,
231
+ testAppPackage: this.appPackage,
232
+ signingConfig: this.signingConfig
233
+ }).build();
234
+
235
+ const apkPath = _path.default.resolve(serverPath, 'app', 'build', 'outputs', 'apk', 'androidTest', 'debug', 'app-debug-androidTest.apk');
236
+
237
+ _logger.default.debug(`Copying built apk from '${apkPath}' to '${this.modServerPath}'`);
238
+
239
+ await _appiumSupport.fs.copyFile(apkPath, this.modServerPath);
240
+ }
241
+
242
+ async cleanupSessionLeftovers() {
243
+ _logger.default.debug('Performing cleanup of automation leftovers');
244
+
245
+ try {
246
+ const {
247
+ value
248
+ } = (await (0, _axios.default)({
249
+ url: `http://${this.host}:${this.systemPort}/sessions`,
250
+ timeout: 500
251
+ })).data;
252
+ const activeSessionIds = value.map(sess => sess.id);
253
+
254
+ if (activeSessionIds.length) {
255
+ _logger.default.debug(`The following obsolete sessions are still running: ${JSON.stringify(activeSessionIds)}`);
256
+
257
+ _logger.default.debug('Cleaning up the obsolete sessions');
258
+
259
+ await _bluebird.default.all(activeSessionIds.map(id => (0, _axios.default)({
260
+ url: `http://${this.host}:${this.systemPort}/session/${id}`,
261
+ method: 'DELETE'
262
+ })));
263
+ await _bluebird.default.delay(1000);
264
+ } else {
265
+ _logger.default.debug('No obsolete sessions have been detected');
266
+ }
267
+ } catch (e) {
268
+ _logger.default.debug(`No obsolete sessions have been detected (${e.message})`);
269
+ }
270
+ }
271
+
272
+ async startSession(caps) {
273
+ await this.cleanupSessionLeftovers();
274
+ const cmd = ['shell', 'am', 'instrument', '-w', '-e', 'debug', process.env.ESPRESSO_JAVA_DEBUG === 'true', '-e', 'disableAnalytics', true];
275
+
276
+ if (_lodash.default.isBoolean(this.disableSuppressAccessibilityService)) {
277
+ cmd.push('-e', 'DISABLE_SUPPRESS_ACCESSIBILITY_SERVICES', this.disableSuppressAccessibilityService);
278
+ }
279
+
280
+ cmd.push(`${TEST_APK_PKG}/androidx.test.runner.AndroidJUnitRunner`);
281
+
282
+ _logger.default.info(`Starting Espresso Server v${_package.version} with cmd: adb ${cmd.join(' ')}`);
283
+
284
+ let hasSocketError = false;
285
+ this.jwproxy.instrumentationState = {
286
+ exited: false,
287
+ crashed: false
288
+ };
289
+ this.instProcess = this.adb.createSubProcess(cmd);
290
+ this.instProcess.on('exit', (code, signal) => {
291
+ _logger.default.info(`Instrumentation process exited with code ${code} from signal ${signal}`);
292
+
293
+ this.jwproxy.instrumentationState.exited = true;
294
+ });
295
+ this.instProcess.on('output', (stdout, stderr) => {
296
+ const line = stdout || stderr;
297
+
298
+ if (_lodash.default.isEmpty(line.trim())) {
299
+ return;
300
+ }
301
+
302
+ _logger.default.debug(`[Instrumentation] ${line.trim()}`);
303
+
304
+ if (line.toLowerCase().includes('java.net.socketexception')) {
305
+ hasSocketError = true;
306
+ } else if (line.includes('Process crashed')) {
307
+ this.jwproxy.instrumentationState.crashed = true;
308
+ }
309
+ });
310
+ const timer = new _appiumSupport.timing.Timer().start();
311
+ await this.instProcess.start(0);
312
+
313
+ _logger.default.info(`Waiting up to ${this.serverLaunchTimeout}ms for Espresso server to be online`);
314
+
315
+ try {
316
+ await (0, _asyncbox.waitForCondition)(async () => {
317
+ if (hasSocketError) {
318
+ _logger.default.errorAndThrow(`Espresso server has failed to start due to an unexpected exception. ` + `Make sure the 'INTERNET' permission is requested in the Android manifest of your ` + `application under test (<uses-permission android:name="android.permission.INTERNET" />)`);
319
+ } else if (this.jwproxy.instrumentationState.exited) {
320
+ _logger.default.errorAndThrow(`Espresso server process has been unexpectedly terminated. ` + `Check the Appium server log and the logcat output for more details`);
321
+ }
322
+
323
+ try {
324
+ await this.jwproxy.command('/status', 'GET');
325
+ return true;
326
+ } catch (e) {
327
+ return false;
328
+ }
329
+ }, {
330
+ waitMs: this.serverLaunchTimeout,
331
+ intervalMs: 500
332
+ });
333
+ } catch (e) {
334
+ if (/Condition unmet/.test(e.message)) {
335
+ _logger.default.errorAndThrow(`Timed out waiting for Espresso server to be ` + `online within ${this.serverLaunchTimeout}ms. The timeout value could be ` + `customized using 'espressoServerLaunchTimeout' capability`);
336
+ }
337
+
338
+ throw e;
339
+ }
340
+
341
+ _logger.default.info(`Espresso server is online. ` + `The initialization process took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
342
+
343
+ _logger.default.info('Starting the session');
344
+
345
+ await this.jwproxy.command('/session', 'POST', {
346
+ capabilities: {
347
+ firstMatch: [caps],
348
+ alwaysMatch: {}
349
+ }
350
+ });
351
+ await this.recordTargetAppPackage();
352
+ }
353
+
354
+ async recordTargetAppPackage() {
355
+ await this.adb.shell([`echo "${this.appPackage}" > "${TARGET_PACKAGE_CONTAINER}"`]);
356
+
357
+ _logger.default.info(`Recorded the target application package '${this.appPackage}' to ${TARGET_PACKAGE_CONTAINER}`);
358
+ }
359
+
360
+ async deleteSession() {
361
+ _logger.default.debug('Deleting Espresso server session');
362
+
363
+ try {
364
+ await this.jwproxy.command('/', 'DELETE');
365
+ } catch (err) {
366
+ _logger.default.warn(`Did not get confirmation Espresso deleteSession worked; ` + `Error was: ${err}`);
367
+ }
368
+
369
+ if (this.instProcess && this.instProcess.isRunning) {
370
+ await this.instProcess.stop();
371
+ }
372
+ }
373
+
374
+ }
375
+
376
+ exports.EspressoRunner = EspressoRunner;
377
+ var _default = EspressoRunner;
378
+ exports.default = _default;require('source-map-support').install();
379
+
380
+
381
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwibmFtZXMiOlsiVEVTVF9TRVJWRVJfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiVEVTVF9BUEtfUEtHIiwiUkVRVUlSRURfUEFSQU1TIiwiRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TIiwiVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSIiwiRXNwcmVzc29Qcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiY3Jhc2hlZCIsImV4aXRlZCIsImluc3RydW1lbnRhdGlvblN0YXRlIiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIkVzcHJlc3NvUnVubmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwicmVxIiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJqd3Byb3h5Iiwic2VydmVyIiwiaG9zdCIsInBvcnQiLCJzeXN0ZW1Qb3J0IiwiYmFzZSIsImtlZXBBbGl2ZSIsInByb3h5UmVxUmVzIiwiYmluZCIsIm1vZFNlcnZlck5hbWUiLCJmcyIsInNhbml0aXplTmFtZSIsInZlcnNpb24iLCJhcHBQYWNrYWdlIiwiYWRiIiwiY3VyRGV2aWNlSWQiLCJyZXBsYWNlbWVudCIsIm1vZFNlcnZlclBhdGgiLCJ0bXBEaXIiLCJzaG93R3JhZGxlTG9nIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJzaWduaW5nQ29uZmlnIiwia2V5c3RvcmVGaWxlIiwiaXNBcHBQYWNrYWdlQ2hhbmdlZCIsImZpbGVFeGlzdHMiLCJsb2dnZXIiLCJkZWJ1ZyIsInByZXZpb3VzQXBwUGFja2FnZSIsInNoZWxsIiwidHJpbSIsImluc3RhbGxTZXJ2ZXIiLCJhcHBTdGF0ZSIsImdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIiwic2hvdWxkVW5pbnN0YWxsQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJPTERFUl9WRVJTSU9OX0lOU1RBTExFRCIsIk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEIiwiaW5jbHVkZXMiLCJzaG91bGRJbnN0YWxsQXBwIiwiTk9UX0lOU1RBTExFRCIsImluZm8iLCJ1bmluc3RhbGxBcGsiLCJlcnIiLCJ3YXJuIiwibWVzc2FnZSIsImluc3RhbGwiLCJyZXBsYWNlIiwidGltZW91dCIsImVycm9yQW5kVGhyb3ciLCJpbnN0YWxsVGVzdEFwayIsInJlYnVpbGQiLCJmb3JjZUVzcHJlc3NvUmVidWlsZCIsImV4aXN0cyIsInVubGluayIsImJ1aWxkTmV3TW9kU2VydmVyIiwiaXNTaWduZWQiLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiYnVpbGRDb25maWd1cmF0aW9uIiwiYnVpbGRDb25maWd1cmF0aW9uU3RyIiwicmVhZEZpbGUiLCJKU09OIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJkaXJOYW1lIiwic2VydmVyUGF0aCIsInJpbXJhZiIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwibWFwIiwic2VzcyIsImlkIiwibGVuZ3RoIiwic3RyaW5naWZ5IiwiQiIsImFsbCIsImRlbGF5Iiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsImNtZCIsInByb2Nlc3MiLCJlbnYiLCJFU1BSRVNTT19KQVZBX0RFQlVHIiwiXyIsImlzQm9vbGVhbiIsInB1c2giLCJqb2luIiwiaGFzU29ja2V0RXJyb3IiLCJpbnN0UHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwiaXNFbXB0eSIsInRvTG93ZXJDYXNlIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwiY29tbWFuZCIsIndhaXRNcyIsImludGVydmFsTXMiLCJ0ZXN0IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJyZWNvcmRUYXJnZXRBcHBQYWNrYWdlIiwiZGVsZXRlU2Vzc2lvbiIsImlzUnVubmluZyIsInN0b3AiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLHlCQUE1QixDQUFvQztBQUNoQixRQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFBT0MsTUFBUCxFQUFlQyxJQUFJLEdBQUcsSUFBdEIsRUFBNEI7QUFDNUMsVUFBTTtBQUFDQyxNQUFBQSxPQUFEO0FBQVVDLE1BQUFBO0FBQVYsUUFBb0IsS0FBS0Msb0JBQS9COztBQUNBLFFBQUlELE1BQUosRUFBWTtBQUNWLFlBQU0sSUFBSUUseUJBQU9DLG1CQUFYLENBQWdDLElBQUdOLE1BQU8sSUFBR0QsR0FBSSxpREFBbEIsR0FDbEMs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RUFBeEc7QUFDRDs7QUFFa0IsUUFBYm9KLGFBQWEsR0FBSTtBQUNyQmhHLG9CQUFPQyxLQUFQLENBQWEsa0NBQWI7O0FBR0EsUUFBSTtBQUNGLFlBQU0sS0FBS2xDLE9BQUwsQ0FBYXNILE9BQWIsQ0FBcUIsR0FBckIsRUFBMEIsUUFBMUIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPcEUsR0FBUCxFQUFZO0FBQ1pqQixzQkFBT2tCLElBQVAsQ0FBYSwwREFBRCxHQUNQLGNBQWFELEdBQUksRUFEdEI7QUFFRDs7QUFFRCxRQUFJLEtBQUtzRCxXQUFMLElBQW9CLEtBQUtBLFdBQUwsQ0FBaUIwQixTQUF6QyxFQUFvRDtBQUNsRCxZQUFNLEtBQUsxQixXQUFMLENBQWlCMkIsSUFBakIsRUFBTjtBQUNEO0FBQ0Y7O0FBeFNrQjs7O2VBNFNOMUksYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBTZXJ2ZXJCdWlsZGVyLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfSBmcm9tICcuL3NlcnZlci1idWlsZGVyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1rZGlycCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5cbmNvbnN0IFRFU1RfU0VSVkVSX1JPT1QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnZXNwcmVzc28tc2VydmVyJyk7XG5jb25zdCBURVNUX0FQS19QS0cgPSAnaW8uYXBwaXVtLmVzcHJlc3Nvc2VydmVyLnRlc3QnO1xuY29uc3QgUkVRVUlSRURfUEFSQU1TID0gW1xuICAnYWRiJyxcbiAgJ3RtcERpcicsXG4gICdob3N0JyxcbiAgJ3N5c3RlbVBvcnQnLFxuICAnZGV2aWNlUG9ydCcsXG4gICdhcHBQYWNrYWdlJyxcbiAgJ2ZvcmNlRXNwcmVzc29SZWJ1aWxkJyxcbl07XG5jb25zdCBFU1BSRVNTT19TRVJWRVJfTEFVTkNIX1RJTUVPVVRfTVMgPSA0NTAwMDtcbmNvbnN0IFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiA9ICcvZGF0YS9sb2NhbC90bXAvZXNwcmVzc28uYXBwcGFja2FnZSc7XG5cbmNsYXNzIEVzcHJlc3NvUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBjb25zdCB7Y3Jhc2hlZCwgZXhpdGVkfSA9IHRoaXMuaW5zdHJ1bWVudGF0aW9uU3RhdGU7XG4gICAgaWYgKGV4aXRlZCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gRXNwcmVzc28gc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgIGB0aGUgaW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgaGFzICR7Y3Jhc2hlZCA/ICdjcmFzaGVkJyA6ICdiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkJ30uIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIEFwcGl1bSBzZXJ2ZXIgbG9nIGFuZCB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIEVzcHJlc3NvUnVubmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFVSVJFRF9QQVJBTVMpIHtcbiAgICAgIGlmICghb3B0cyB8fCAhdXRpbC5oYXNWYWx1ZShvcHRzW3JlcV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uICcke3JlcX0nIGlzIHJlcXVpcmVkIWApO1xuICAgICAgfVxuICAgICAgdGhpc1tyZXFdID0gb3B0c1tyZXFdO1xuICAgIH1cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgRXNwcmVzc29Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMuc3lzdGVtUG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kU2VydmVyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgJHtURVNUX0FQS19QS0d9XyR7dmVyc2lvbn1fJHt0aGlzLmFwcFBhY2thZ2V9XyR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9LmFwa2AsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RTZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBtb2RTZXJ2ZXJOYW1lKTtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBvcHRzLnNob3dHcmFkbGVMb2c7XG4gICAgdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnID0gb3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuXG4gICAgdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0ID0gb3B0cy5zZXJ2ZXJMYXVuY2hUaW1lb3V0IHx8IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUztcbiAgICB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCA9IG9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0O1xuXG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG5cbiAgICAvLyBFc3ByZXNzbyBTZXJ2ZXIgYXBwIG5lZWRzIHRvIGJlIHNpZ25lZCB3aXRoIHNhbWUga2V5U3RvcmUgYXMgYXBwUGFja2FnZVxuICAgIGlmIChvcHRzLnVzZUtleXN0b3JlICYmIG9wdHMua2V5c3RvcmVQYXRoICYmIG9wdHMua2V5c3RvcmVQYXNzd29yZCAmJiBvcHRzLmtleUFsaWFzICYmIG9wdHMua2V5UGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyh7XG4gICAgICAgIGtleXN0b3JlRmlsZTogb3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IG9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXM6IG9wdHMua2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkOiBvcHRzLmtleVBhc3N3b3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWduaW5nQ29uZmlnID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0FwcFBhY2thZ2VDaGFuZ2VkICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmZpbGVFeGlzdHMoVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgdW5rbm93bicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQXBwUGFja2FnZSA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2NhdCcsIFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUl0pKS50cmltKCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2Ugd2FzICcke3ByZXZpb3VzQXBwUGFja2FnZX0nLiBgICtcbiAgICAgIGBUaGUgY3VycmVudCBwYWNrYWdlIGlzICcke3RoaXMuYXBwUGFja2FnZX0nYCk7XG4gICAgcmV0dXJuIHByZXZpb3VzQXBwUGFja2FnZSAhPT0gdGhpcy5hcHBQYWNrYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIEVzcHJlc3NvIHNlcnZlciBhcGsgb24gdG8gdGhlIGRldmljZSBvciBlbXVsYXRvci5cbiAgICogRWFjaCBhZGIgY29tbWFuZCB1c2VzIGRlZmF1bHQgdGltZW91dCBieSB0aGVtLlxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFNlcnZlciAoKSB7XG4gICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZSh0aGlzLm1vZFNlcnZlclBhdGgsIFRFU1RfQVBLX1BLRyk7XG5cbiAgICBjb25zdCBzaG91bGRVbmluc3RhbGxBcHAgPSBbXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5PTERFUl9WRVJTSU9OX0lOU1RBTExFRCxcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEXG4gICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgY29uc3Qgc2hvdWxkSW5zdGFsbEFwcCA9IHNob3VsZFVuaW5zdGFsbEFwcCB8fCBbXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEXG4gICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG5cbiAgICBpZiAoc2hvdWxkVW5pbnN0YWxsQXBwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVW5pbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwa2c6ICcke1RFU1RfQVBLX1BLR30nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHtURVNUX0FQS19QS0d9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5zdGFsbEFwcCkge1xuICAgICAgbG9nZ2VyLmluZm8oYEluc3RhbGxpbmcgRXNwcmVzc28gVGVzdCBTZXJ2ZXIgYXBrIGZyb20gdGhlIHRhcmdldCBkZXZpY2UgKHBhdGg6ICcke3RoaXMubW9kU2VydmVyUGF0aH0nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbCh0aGlzLm1vZFNlcnZlclBhdGgsIHsgcmVwbGFjZTogZmFsc2UsIHRpbWVvdXQ6IHRoaXMuYW5kcm9pZEluc3RhbGxUaW1lb3V0IH0pO1xuICAgICAgICBsb2dnZXIuaW5mbyhgSW5zdGFsbGVkIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGluc3RhbGwgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFRlc3RBcGsgKCkge1xuICAgIGxldCByZWJ1aWxkID0gdGhpcy5mb3JjZUVzcHJlc3NvUmVidWlsZDtcbiAgICBpZiAocmVidWlsZCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAnZm9yY2VFc3ByZXNzb1JlYnVpbGQnIGNhcGFiaWxpdHkgaXMgZW5hYmxlZGApO1xuICAgIH0gZWxzZSBpZiAoYXdhaXQgdGhpcy5pc0FwcFBhY2thZ2VDaGFuZ2VkKCkpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3JjaW5nIEVzcHJlc3NvIHNlcnZlciByZWJ1aWxkIGJlY2F1c2Ugb2YgY2hhbmdlZCBhcHBsaWNhdGlvbiBwYWNrYWdlYCk7XG4gICAgICByZWJ1aWxkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVidWlsZCAmJiBhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBEZWxldGluZyB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGROZXdNb2RTZXJ2ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgaXNTaWduZWQgPSBhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuICAgIGlmICghaXNTaWduZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24odGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgICB9XG4gICAgaWYgKChyZWJ1aWxkIHx8ICFpc1NpZ25lZCkgJiYgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRykpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdVbmluc3RhbGxlZCB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QnKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluc3RhbGxTZXJ2ZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkTmV3TW9kU2VydmVyICgpIHtcbiAgICBsZXQgYnVpbGRDb25maWd1cmF0aW9uID0ge307XG4gICAgaWYgKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZykge1xuICAgICAgbGV0IGJ1aWxkQ29uZmlndXJhdGlvblN0cjtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnKSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgTG9hZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmcm9tICcke3RoaXMuZXNwcmVzc29CdWlsZENvbmZpZ30nYCk7XG4gICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvblN0ciA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZyb20gJ2VzcHJlc3NvQnVpbGRDb25maWcnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uU3RyID0gdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gSlNPTi5wYXJzZShidWlsZENvbmZpZ3VyYXRpb25TdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBKU09OJywgZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpck5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUoYGVzcHJlc3NvLXNlcnZlci0ke3RoaXMuYWRiLmN1ckRldmljZUlkfWAsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VydmVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnRtcERpciwgZGlyTmFtZSk7XG4gICAgbG9nZ2VyLmluZm8oYEJ1aWxkaW5nIGVzcHJlc3NvIHNlcnZlciBpbiAnJHtzZXJ2ZXJQYXRofSdgKTtcbiAgICBsb2dnZXIuZGVidWcoYFRoZSBidWlsZCBmb2xkZXIgcm9vdCBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHRoZSAndG1wRGlyJyBjYXBhYmlsaXR5YCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHNlcnZlclBhdGgpO1xuICAgIGF3YWl0IG1rZGlycChzZXJ2ZXJQYXRoKTtcbiAgICBsb2dnZXIuZGVidWcoYENvcHlpbmcgZXNwcmVzc28gc2VydmVyIHRlbXBsYXRlIGZyb20gKCcke1RFU1RfU0VSVkVSX1JPT1R9JyB0byAnJHtzZXJ2ZXJQYXRofScpYCk7XG4gICAgYXdhaXQgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseShURVNUX1NFUlZFUl9ST09ULCBzZXJ2ZXJQYXRoKTtcbiAgICBsb2dnZXIuZGVidWcoJ0J1bGRpbmcgZXNwcmVzc28gc2VydmVyJyk7XG4gICAgYXdhaXQgbmV3IFNlcnZlckJ1aWxkZXIoe1xuICAgICAgc2VydmVyUGF0aCwgYnVpbGRDb25maWd1cmF0aW9uLFxuICAgICAgc2hvd0dyYWRsZUxvZzogdGhpcy5zaG93R3JhZGxlTG9nLFxuICAgICAgdGVzdEFwcFBhY2thZ2U6IHRoaXMuYXBwUGFja2FnZSxcbiAgICAgIHNpZ25pbmdDb25maWc6IHRoaXMuc2lnbmluZ0NvbmZpZ1xuICAgIH0pLmJ1aWxkKCk7XG4gICAgY29uc3QgYXBrUGF0aCA9IHBhdGgucmVzb2x2ZShzZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkJywgJ291dHB1dHMnLCAnYXBrJywgJ2FuZHJvaWRUZXN0JywgJ2RlYnVnJywgJ2FwcC1kZWJ1Zy1hbmRyb2lkVGVzdC5hcGsnKTtcbiAgICBsb2dnZXIuZGVidWcoYENvcHlpbmcgYnVpbHQgYXBrIGZyb20gJyR7YXBrUGF0aH0nIHRvICcke3RoaXMubW9kU2VydmVyUGF0aH0nYCk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoYXBrUGF0aCwgdGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBTZXNzaW9uTGVmdG92ZXJzICgpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1BlcmZvcm1pbmcgY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVycycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoc2VzcykgPT4gc2Vzcy5pZCk7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgZm9sbG93aW5nIG9ic29sZXRlIHNlc3Npb25zIGFyZSBzdGlsbCBydW5uaW5nOiAke0pTT04uc3RyaW5naWZ5KGFjdGl2ZVNlc3Npb25JZHMpfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NsZWFuaW5nIHVwIHRoZSBvYnNvbGV0ZSBzZXNzaW9ucycpO1xuICAgICAgICBhd2FpdCBCLmFsbChhY3RpdmVTZXNzaW9uSWRzLm1hcCgoaWQpID0+XG4gICAgICAgICAgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMuc3lzdGVtUG9ydH0vc2Vzc2lvbi8ke2lkfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICBhd2FpdCB0aGlzLmNsZWFudXBTZXNzaW9uTGVmdG92ZXJzKCk7XG5cbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAnc2hlbGwnLFxuICAgICAgJ2FtJywgJ2luc3RydW1lbnQnLFxuICAgICAgJy13JyxcbiAgICAgICctZScsICdkZWJ1ZycsIHByb2Nlc3MuZW52LkVTUFJFU1NPX0pBVkFfREVCVUcgPT09ICd0cnVlJyxcbiAgICAgICctZScsICdkaXNhYmxlQW5hbHl0aWNzJywgdHJ1ZSwgLy8gVG8gYXZvaWQgdW5leHBlY3RlZCBlcnJvciBieSBnb29nbGUgYW5hbHl0aWNzXG4gICAgXTtcblxuICAgIGlmIChfLmlzQm9vbGVhbih0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKSkge1xuICAgICAgY21kLnB1c2goJy1lJywgJ0RJU0FCTEVfU1VQUFJFU1NfQUNDRVNTSUJJTElUWV9TRVJWSUNFUycsIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpO1xuICAgIH1cblxuICAgIGNtZC5wdXNoKGAke1RFU1RfQVBLX1BLR30vYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyYCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgU3RhcnRpbmcgRXNwcmVzc28gU2VydmVyIHYke3ZlcnNpb259IHdpdGggY21kOiBhZGIgJHtjbWQuam9pbignICcpfWApO1xuXG4gICAgbGV0IGhhc1NvY2tldEVycm9yID0gZmFsc2U7XG4gICAgLy8gc3RhcnQgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlID0ge1xuICAgICAgZXhpdGVkOiBmYWxzZSxcbiAgICAgIGNyYXNoZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5pbnN0UHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoY21kKTtcbiAgICB0aGlzLmluc3RQcm9jZXNzLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYEluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSBmcm9tIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuaW5zdFByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICBpZiAoXy5pc0VtcHR5KGxpbmUudHJpbSgpKSkge1xuICAgICAgICAvLyBEbyBub3QgcHJpbnQgZW1wdHkgbGluZXMgaW50byB0aGUgc3lzdGVtIGxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0luc3RydW1lbnRhdGlvbl0gJHtsaW5lLnRyaW0oKX1gKTtcbiAgICAgIC8vIEEgJ1NvY2tldEV4Y2VwdGlvbicgaW5kaWNhdGVzIHRoYXQgd2UgY291bGRuJ3QgY29ubmVjdCB0byB0aGUgRXNwcmVzc28gc2VydmVyLFxuICAgICAgLy8gYmVjYXVzZSB0aGUgSU5URVJORVQgcGVybWlzc2lvbiBpcyBub3Qgc2V0XG4gICAgICBpZiAobGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdqYXZhLm5ldC5zb2NrZXRleGNlcHRpb24nKSkge1xuICAgICAgICBoYXNTb2NrZXRFcnJvciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGxpbmUuaW5jbHVkZXMoJ1Byb2Nlc3MgY3Jhc2hlZCcpKSB7XG4gICAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5jcmFzaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5pbnN0UHJvY2Vzcy5zdGFydCgwKTtcbiAgICBsb2dnZXIuaW5mbyhgV2FpdGluZyB1cCB0byAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIG9ubGluZWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1NvY2tldEVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBoYXMgZmFpbGVkIHRvIHN0YXJ0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gYCArXG4gICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSAnSU5URVJORVQnIHBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHRoZSBBbmRyb2lkIG1hbmlmZXN0IG9mIHlvdXIgYCArXG4gICAgICAgICAgICBgYXBwbGljYXRpb24gdW5kZXIgdGVzdCAoPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9XCJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVRcIiAvPilgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuZXhpdGVkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBwcm9jZXNzIGhhcyBiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkLiBgICtcbiAgICAgICAgICAgIGBDaGVjayB0aGUgQXBwaXVtIHNlcnZlciBsb2cgYW5kIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0LFxuICAgICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIGAgK1xuICAgICAgICAgIGBvbmxpbmUgd2l0aGluICR7dGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0fW1zLiBUaGUgdGltZW91dCB2YWx1ZSBjb3VsZCBiZSBgICtcbiAgICAgICAgICBgY3VzdG9taXplZCB1c2luZyAnZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBsb2dnZXIuaW5mbyhgRXNwcmVzc28gc2VydmVyIGlzIG9ubGluZS4gYCArXG4gICAgICBgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIGxvZ2dlci5pbmZvKCdTdGFydGluZyB0aGUgc2Vzc2lvbicpO1xuXG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW2NhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge31cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLnJlY29yZFRhcmdldEFwcFBhY2thZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZFRhcmdldEFwcFBhY2thZ2UgKCkge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtgZWNobyBcIiR7dGhpcy5hcHBQYWNrYWdlfVwiID4gXCIke1RBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUn1cImBdKTtcbiAgICBsb2dnZXIuaW5mbyhgUmVjb3JkZWQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlICcke3RoaXMuYXBwUGFja2FnZX0nIHRvICR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfWApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdEZWxldGluZyBFc3ByZXNzbyBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBEaWQgbm90IGdldCBjb25maXJtYXRpb24gRXNwcmVzc28gZGVsZXRlU2Vzc2lvbiB3b3JrZWQ7IGAgK1xuICAgICAgICAgIGBFcnJvciB3YXM6ICR7ZXJyfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluc3RQcm9jZXNzICYmIHRoaXMuaW5zdFByb2Nlc3MuaXNSdW5uaW5nKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RQcm9jZXNzLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgRXNwcmVzc29SdW5uZXIsIFJFUVVJUkVEX1BBUkFNUywgVEVTVF9BUEtfUEtHIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb1J1bm5lcjtcbiJdLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ require("source-map-support/register");
9
+
10
+ var _appiumSupport = require("appium-support");
11
+
12
+ const log = _appiumSupport.logger.getLogger('Espresso');
13
+
14
+ var _default = log;
15
+ exports.default = _default;require('source-map-support').install();
16
+
17
+
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFVBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignRXNwcmVzc28nKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sImZpbGUiOiJsaWIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=