appium-uiautomator2-driver 2.43.4 → 2.44.1

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.
@@ -83,7 +83,8 @@ export async function mobileScreenshots(opts = {}) {
83
83
  );
84
84
 
85
85
  const {displayId} = opts;
86
- const displayIdStr = _.isNaN(displayId) ? null : `${displayId}`;
86
+ // @ts-ignore isNaN works properly here
87
+ const displayIdStr = isNaN(displayId) ? null : `${displayId}`;
87
88
  if (displayIdStr) {
88
89
  if (!infos[displayIdStr]) {
89
90
  throw new Error(
package/lib/driver.ts CHANGED
@@ -520,129 +520,103 @@ class AndroidUiautomator2Driver
520
520
  }
521
521
  }
522
522
 
523
- async startUiAutomator2Session(
524
- caps: Uiautomator2StartSessionOpts
525
- ): Promise<Uiautomator2SessionCaps> {
526
- // get device udid for this session
527
- const {udid, emPort} = await this.getDeviceInfoFromCaps();
528
- this.opts.udid = udid;
529
- // @ts-expect-error do not put random stuff on opts
530
- this.opts.emPort = emPort;
531
-
532
- // now that we know our java version and device info, we can create our
533
- // ADB instance
534
- this.adb = await this.createADB();
535
-
523
+ async performSessionPreExecSetup(): Promise<StringRecord|undefined> {
536
524
  const apiLevel = await this.adb.getApiLevel();
537
-
538
525
  if (apiLevel < 21) {
539
- this.log.errorAndThrow(
526
+ throw this.log.errorAndThrow(
540
527
  'UIAutomator2 is only supported since Android 5.0 (Lollipop). ' +
541
528
  'You could still use other supported backends in order to automate older Android versions.'
542
529
  );
543
530
  }
544
531
 
532
+ const preflightPromises: Promise<any>[] = [];
545
533
  if (apiLevel >= 28) {
546
534
  // Android P
547
- this.log.info('Relaxing hidden api policy');
548
- try {
549
- await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);
550
- } catch (err) {
551
- this.log.errorAndThrow(
552
- 'Hidden API policy (https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces) cannot be enabled. ' +
553
- 'This might be happening because the device under test is not configured properly. ' +
554
- 'Please check https://github.com/appium/appium/issues/13802 for more details. ' +
555
- 'You could also set the "appium:ignoreHiddenApiPolicyError" capability to true in order to ' +
556
- 'ignore this error, which might later lead to unexpected crashes or behavior of ' +
557
- `the automation server. Original error: ${err.message}`
558
- );
559
- }
535
+ preflightPromises.push((async () => {
536
+ this.log.info('Relaxing hidden api policy');
537
+ try {
538
+ await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);
539
+ } catch (err) {
540
+ throw this.log.errorAndThrow(
541
+ 'Hidden API policy (https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces) cannot be enabled. ' +
542
+ 'This might be happening because the device under test is not configured properly. ' +
543
+ 'Please check https://github.com/appium/appium/issues/13802 for more details. ' +
544
+ 'You could also set the "appium:ignoreHiddenApiPolicyError" capability to true in order to ' +
545
+ 'ignore this error, which might later lead to unexpected crashes or behavior of ' +
546
+ `the automation server. Original error: ${err.message}`
547
+ );
548
+ }
549
+ })());
560
550
  }
561
-
562
- // check if we have to enable/disable gps before running the application
563
551
  if (util.hasValue(this.opts.gpsEnabled)) {
564
- if (this.isEmulator()) {
552
+ preflightPromises.push((async () => {
565
553
  this.log.info(
566
554
  `Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`
567
555
  );
568
- await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);
569
- } else {
570
- this.log.warn(`Sorry! 'gpsEnabled' capability is only available for emulators`);
571
- }
556
+ await this.adb.toggleGPSLocationProvider(Boolean(this.opts.gpsEnabled));
557
+ })());
572
558
  }
573
-
574
- // get appPackage et al from manifest if necessary
575
- const appInfo = await this.getLaunchInfo();
576
- // and get it onto our 'opts' object so we use it from now on
577
- this.opts = {...this.opts, ...(appInfo ?? {})};
578
-
579
- // set actual device name, udid, platform version, screen size, screen density, model and manufacturer details
580
- const sessionInfo: Uiautomator2SessionInfo = {
581
- deviceName: this.adb.curDeviceId!,
582
- deviceUDID: this.opts.udid!,
583
- };
584
-
585
- const capsWithSessionInfo = {
586
- ...caps,
587
- ...sessionInfo,
588
- };
589
-
590
- // start an avd, set the language/locale, pick an emulator, etc...
591
559
  if (this.opts.hideKeyboard) {
592
- this._originalIme = await this.adb.defaultIME();
593
- }
594
- await this.initDevice();
595
-
596
- // Prepare the device by forwarding the UiAutomator2 port
597
- // This call mutates this.systemPort if it is not set explicitly
598
- await this.allocateSystemPort();
599
-
600
- // Prepare the device by forwarding the UiAutomator2 MJPEG server port (if
601
- // applicable)
602
- await this.allocateMjpegServerPort();
603
-
604
- // set up the modified UiAutomator2 server etc
605
- const uiautomator2 = await this.initUiAutomator2Server();
606
-
607
- // Should be after installing io.appium.settings in helpers.initDevice
608
- if (this.opts.disableWindowAnimation && (await this.adb.getApiLevel()) < 26) {
609
- // API level 26 is Android 8.0.
610
- // Granting android.permission.SET_ANIMATION_SCALE is necessary to handle animations under API level 26
611
- // Read https://github.com/appium/appium/pull/11640#issuecomment-438260477
612
- // `--no-window-animation` works over Android 8 to disable all of animations
613
- if (await this.adb.isAnimationOn()) {
614
- this.log.info('Disabling animation via io.appium.settings');
615
- await this.settingsApp.setAnimationState(false);
616
- this._wasWindowAnimationDisabled = true;
617
- } else {
618
- this.log.info('Window animation is already disabled');
619
- }
560
+ preflightPromises.push((async () => {
561
+ this._originalIme = await this.adb.defaultIME();
562
+ })());
620
563
  }
564
+ let appInfo;
565
+ preflightPromises.push((async () => {
566
+ // get appPackage et al from manifest if necessary
567
+ appInfo = await this.getLaunchInfo();
568
+ })());
569
+ // start settings app, set the language/locale, start logcat etc...
570
+ preflightPromises.push(this.initDevice());
621
571
 
622
- // set up app under test
623
- // prepare our actual AUT, get it on the device, etc...
624
- await this.initAUT();
572
+ await B.all(preflightPromises);
625
573
 
626
- // Adding AUT package name in the capabilities if package name not exist in caps
627
- if (!capsWithSessionInfo.appPackage && appInfo) {
628
- capsWithSessionInfo.appPackage = appInfo.appPackage;
629
- }
574
+ this.opts = {...this.opts, ...(appInfo ?? {})};
575
+ return appInfo;
576
+ }
577
+
578
+ async performSessionExecution(capsWithSessionInfo: StringRecord): Promise<void> {
579
+ await B.all([
580
+ // Prepare the device by forwarding the UiAutomator2 port
581
+ // This call mutates this.systemPort if it is not set explicitly
582
+ this.allocateSystemPort(),
583
+ // Prepare the device by forwarding the UiAutomator2 MJPEG server port (if
584
+ // applicable)
585
+ this.allocateMjpegServerPort(),
586
+ ]);
587
+
588
+ const [uiautomator2,] = await B.all([
589
+ // set up the modified UiAutomator2 server etc
590
+ this.initUiAutomator2Server(),
591
+ (async () => {
592
+ // Should be after installing io.appium.settings
593
+ if (this.opts.disableWindowAnimation && await this.adb.getApiLevel() < 26) {
594
+ // API level 26 is Android 8.0.
595
+ // Granting android.permission.SET_ANIMATION_SCALE is necessary to handle animations under API level 26
596
+ // Read https://github.com/appium/appium/pull/11640#issuecomment-438260477
597
+ // `--no-window-animation` works over Android 8 to disable all of animations
598
+ if (await this.adb.isAnimationOn()) {
599
+ this.log.info('Disabling animation via io.appium.settings');
600
+ await this.settingsApp.setAnimationState(false);
601
+ this._wasWindowAnimationDisabled = true;
602
+ } else {
603
+ this.log.info('Window animation is already disabled');
604
+ }
605
+ }
606
+ })(),
607
+ // set up app under test
608
+ // prepare our actual AUT, get it on the device, etc...
609
+ this.initAUT(),
610
+ ]);
630
611
 
631
612
  // launch UiAutomator2 and wait till its online and we have a session
632
613
  await uiautomator2.startSession(capsWithSessionInfo);
633
614
  // now that everything has started successfully, turn on proxying so all
634
615
  // subsequent session requests go straight to/from uiautomator2
635
616
  this.jwpProxyActive = true;
617
+ }
636
618
 
637
- const deviceInfoPromise: Promise<Uiautomator2DeviceDetails|EmptyObject> = (async () => {
638
- try {
639
- return await this.getDeviceDetails();
640
- } catch (e) {
641
- this.log.warn(`Cannot fetch device details. Original error: ${e.message}`);
642
- return {};
643
- }
644
- })();
645
-
619
+ async performSessionPostExecSetup(): Promise<void> {
646
620
  // Unlock the device after the session is started.
647
621
  if (!this.opts.skipUnlock) {
648
622
  // unlock the device to prepare it for testing
@@ -672,6 +646,48 @@ class AndroidUiautomator2Driver
672
646
  this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);
673
647
  await retryInterval(timeout / 500, 500, this.setContext.bind(this), viewName);
674
648
  }
649
+ }
650
+
651
+ async startUiAutomator2Session(
652
+ caps: Uiautomator2StartSessionOpts
653
+ ): Promise<Uiautomator2SessionCaps> {
654
+ // get device udid for this session
655
+ const {udid, emPort} = await this.getDeviceInfoFromCaps();
656
+ this.opts.udid = udid;
657
+ // @ts-expect-error do not put random stuff on opts
658
+ this.opts.emPort = emPort;
659
+
660
+ // now that we know our java version and device info, we can create our
661
+ // ADB instance
662
+ this.adb = await this.createADB();
663
+
664
+ const appInfo = await this.performSessionPreExecSetup();
665
+ // set actual device name, udid, platform version, screen size, screen density, model and manufacturer details
666
+ const sessionInfo: Uiautomator2SessionInfo = {
667
+ deviceName: this.adb.curDeviceId!,
668
+ deviceUDID: this.opts.udid!,
669
+ };
670
+ const capsWithSessionInfo = {
671
+ ...caps,
672
+ ...sessionInfo,
673
+ };
674
+ // Adding AUT package name in the capabilities if package name not exist in caps
675
+ if (!capsWithSessionInfo.appPackage && appInfo) {
676
+ capsWithSessionInfo.appPackage = appInfo.appPackage;
677
+ }
678
+
679
+ await this.performSessionExecution(capsWithSessionInfo);
680
+
681
+ const deviceInfoPromise: Promise<Uiautomator2DeviceDetails|EmptyObject> = (async () => {
682
+ try {
683
+ return await this.getDeviceDetails();
684
+ } catch (e) {
685
+ this.log.warn(`Cannot fetch device details. Original error: ${e.message}`);
686
+ return {};
687
+ }
688
+ })();
689
+
690
+ await this.performSessionPostExecSetup();
675
691
 
676
692
  return {...capsWithSessionInfo, ...(await deviceInfoPromise)};
677
693
  }
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "appium-uiautomator2-driver",
3
- "version": "2.43.4",
3
+ "version": "2.44.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-uiautomator2-driver",
9
- "version": "2.43.4",
9
+ "version": "2.44.1",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "appium-adb": "^12.0.0",
13
- "appium-android-driver": "^8.1.8",
13
+ "appium-android-driver": "^8.2.0",
14
14
  "appium-chromedriver": "^5.6.28",
15
15
  "appium-uiautomator2-server": "^6.0.7",
16
16
  "asyncbox": "^3.0.0",
@@ -877,9 +877,9 @@
877
877
  }
878
878
  },
879
879
  "node_modules/@types/express-serve-static-core": {
880
- "version": "4.17.42",
881
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz",
882
- "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==",
880
+ "version": "4.17.43",
881
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz",
882
+ "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==",
883
883
  "dependencies": {
884
884
  "@types/node": "*",
885
885
  "@types/qs": "*",
@@ -960,9 +960,9 @@
960
960
  }
961
961
  },
962
962
  "node_modules/@types/node": {
963
- "version": "20.11.10",
964
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.10.tgz",
965
- "integrity": "sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==",
963
+ "version": "20.11.16",
964
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz",
965
+ "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==",
966
966
  "dependencies": {
967
967
  "undici-types": "~5.26.4"
968
968
  }
@@ -1227,9 +1227,9 @@
1227
1227
  }
1228
1228
  },
1229
1229
  "node_modules/appium-android-driver": {
1230
- "version": "8.1.8",
1231
- "resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-8.1.8.tgz",
1232
- "integrity": "sha512-0RT7H6IZ3bIO8gTMLU4XYTdXiyYvWnA6uO3qb4eVbOOfkdc/PJw0j1toXYSpgPlb2rOpWc8LbXo0zRNaBF8oow==",
1230
+ "version": "8.2.0",
1231
+ "resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-8.2.0.tgz",
1232
+ "integrity": "sha512-bHz7o+HT2jjJ/b398rRdM2QCu3dPyrkVALOU1SrUxQa18n3PIIRquQENINyhsKQChvi8uAFrDJtD8XOd618eLw==",
1233
1233
  "dependencies": {
1234
1234
  "@appium/support": "^4.2.0",
1235
1235
  "@colors/colors": "^1.6.0",
@@ -1443,9 +1443,9 @@
1443
1443
  }
1444
1444
  },
1445
1445
  "node_modules/b4a": {
1446
- "version": "1.6.4",
1447
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
1448
- "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
1446
+ "version": "1.6.6",
1447
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
1448
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
1449
1449
  },
1450
1450
  "node_modules/balanced-match": {
1451
1451
  "version": "1.0.2",
@@ -1623,13 +1623,17 @@
1623
1623
  }
1624
1624
  },
1625
1625
  "node_modules/call-bind": {
1626
- "version": "1.0.5",
1627
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
1628
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
1626
+ "version": "1.0.6",
1627
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz",
1628
+ "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==",
1629
1629
  "dependencies": {
1630
+ "es-errors": "^1.3.0",
1630
1631
  "function-bind": "^1.1.2",
1631
- "get-intrinsic": "^1.2.1",
1632
- "set-function-length": "^1.1.1"
1632
+ "get-intrinsic": "^1.2.3",
1633
+ "set-function-length": "^1.2.0"
1634
+ },
1635
+ "engines": {
1636
+ "node": ">= 0.4"
1633
1637
  },
1634
1638
  "funding": {
1635
1639
  "url": "https://github.com/sponsors/ljharb"
@@ -2009,13 +2013,14 @@
2009
2013
  }
2010
2014
  },
2011
2015
  "node_modules/define-data-property": {
2012
- "version": "1.1.1",
2013
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
2014
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
2016
+ "version": "1.1.2",
2017
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz",
2018
+ "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==",
2015
2019
  "dependencies": {
2016
- "get-intrinsic": "^1.2.1",
2020
+ "es-errors": "^1.3.0",
2021
+ "get-intrinsic": "^1.2.2",
2017
2022
  "gopd": "^1.0.1",
2018
- "has-property-descriptors": "^1.0.0"
2023
+ "has-property-descriptors": "^1.0.1"
2019
2024
  },
2020
2025
  "engines": {
2021
2026
  "node": ">= 0.4"
@@ -2110,15 +2115,23 @@
2110
2115
  "is-arrayish": "^0.2.1"
2111
2116
  }
2112
2117
  },
2118
+ "node_modules/es-errors": {
2119
+ "version": "1.3.0",
2120
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
2121
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
2122
+ "engines": {
2123
+ "node": ">= 0.4"
2124
+ }
2125
+ },
2113
2126
  "node_modules/es6-error": {
2114
2127
  "version": "4.1.1",
2115
2128
  "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
2116
2129
  "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
2117
2130
  },
2118
2131
  "node_modules/escalade": {
2119
- "version": "3.1.1",
2120
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2121
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2132
+ "version": "3.1.2",
2133
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
2134
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
2122
2135
  "engines": {
2123
2136
  "node": ">=6"
2124
2137
  }
@@ -2513,15 +2526,19 @@
2513
2526
  }
2514
2527
  },
2515
2528
  "node_modules/get-intrinsic": {
2516
- "version": "1.2.2",
2517
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
2518
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
2529
+ "version": "1.2.4",
2530
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
2531
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
2519
2532
  "dependencies": {
2533
+ "es-errors": "^1.3.0",
2520
2534
  "function-bind": "^1.1.2",
2521
2535
  "has-proto": "^1.0.1",
2522
2536
  "has-symbols": "^1.0.3",
2523
2537
  "hasown": "^2.0.0"
2524
2538
  },
2539
+ "engines": {
2540
+ "node": ">= 0.4"
2541
+ },
2525
2542
  "funding": {
2526
2543
  "url": "https://github.com/sponsors/ljharb"
2527
2544
  }
@@ -3217,9 +3234,9 @@
3217
3234
  }
3218
3235
  },
3219
3236
  "node_modules/moment-timezone": {
3220
- "version": "0.5.44",
3221
- "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz",
3222
- "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==",
3237
+ "version": "0.5.45",
3238
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz",
3239
+ "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==",
3223
3240
  "dependencies": {
3224
3241
  "moment": "^2.29.4"
3225
3242
  },
@@ -4187,9 +4204,9 @@
4187
4204
  }
4188
4205
  },
4189
4206
  "node_modules/streamx": {
4190
- "version": "2.15.6",
4191
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz",
4192
- "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==",
4207
+ "version": "2.15.7",
4208
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.7.tgz",
4209
+ "integrity": "sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==",
4193
4210
  "dependencies": {
4194
4211
  "fast-fifo": "^1.1.0",
4195
4212
  "queue-tick": "^1.0.1"
@@ -4376,9 +4393,9 @@
4376
4393
  "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
4377
4394
  },
4378
4395
  "node_modules/type-fest": {
4379
- "version": "4.10.1",
4380
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.1.tgz",
4381
- "integrity": "sha512-7ZnJYTp6uc04uYRISWtiX3DSKB/fxNQT0B5o1OUeCqiQiwF+JC9+rJiZIDrPrNCLLuTqyQmh4VdQqh/ZOkv9MQ==",
4396
+ "version": "4.10.2",
4397
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz",
4398
+ "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==",
4382
4399
  "engines": {
4383
4400
  "node": ">=16"
4384
4401
  },
@@ -4570,9 +4587,9 @@
4570
4587
  }
4571
4588
  },
4572
4589
  "node_modules/winston-transport": {
4573
- "version": "4.6.0",
4574
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz",
4575
- "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==",
4590
+ "version": "4.7.0",
4591
+ "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz",
4592
+ "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==",
4576
4593
  "dependencies": {
4577
4594
  "logform": "^2.3.2",
4578
4595
  "readable-stream": "^3.6.0",
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "automated testing",
8
8
  "android"
9
9
  ],
10
- "version": "2.43.4",
10
+ "version": "2.44.1",
11
11
  "bugs": {
12
12
  "url": "https://github.com/appium/appium-uiautomator2-driver/issues"
13
13
  },
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "appium-adb": "^12.0.0",
60
- "appium-android-driver": "^8.1.8",
60
+ "appium-android-driver": "^8.2.0",
61
61
  "appium-chromedriver": "^5.6.28",
62
62
  "appium-uiautomator2-server": "^6.0.7",
63
63
  "asyncbox": "^3.0.0",