From ce5fcd5a58c19ed7f8867721f79b0efdb7cd7deb Mon Sep 17 00:00:00 2001 From: yanas Date: Thu, 6 Nov 2025 12:08:47 +0100 Subject: [PATCH] fix: patch react-native-ble-plx to prevent Android app crash --- ...-native-ble-plx-npm-3.5.0-c98fd0ae25.patch | 319 ++++++++++++++++++ .../transport-native-bluetooth/package.json | 2 +- suite-native/app/package.json | 2 +- yarn.lock | 14 +- 4 files changed, 333 insertions(+), 4 deletions(-) create mode 100644 .yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch diff --git a/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch b/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch new file mode 100644 index 000000000000..17b0b0135e20 --- /dev/null +++ b/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch @@ -0,0 +1,319 @@ +diff --git a/android/src/main/java/com/bleplx/BlePlxModule.java b/android/src/main/java/com/bleplx/BlePlxModule.java +index c73164058dd5eded7ecfc37aed6d7ef068695e74..6bdefe4f479cefc82bfc7f35f56a28ad4688891c 100644 +--- a/android/src/main/java/com/bleplx/BlePlxModule.java ++++ b/android/src/main/java/com/bleplx/BlePlxModule.java +@@ -168,7 +168,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -187,7 +187,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -273,7 +273,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -296,7 +296,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -318,7 +318,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -338,7 +338,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -358,7 +358,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -422,7 +422,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -442,7 +442,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -461,7 +461,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -483,7 +483,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -503,7 +503,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsArray); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + + } +@@ -524,7 +524,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsCharacteristics); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + +@@ -541,7 +541,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsCharacteristics); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + +@@ -561,7 +561,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsDescriptors); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + +@@ -580,7 +580,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsDescriptors); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + +@@ -598,7 +598,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + } + promise.resolve(jsDescriptors); + } catch (BleError error) { +- promise.reject(null, errorConverter.toJs(error)); ++ promise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + +@@ -627,7 +627,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -654,7 +654,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -680,7 +680,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + }); + } +@@ -706,7 +706,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -732,7 +732,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -757,7 +757,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -788,7 +788,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -818,7 +818,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -848,7 +848,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError error) { +- safePromise.reject(null, errorConverter.toJs(error)); ++ safePromise.reject(error.errorCode.name(), errorConverter.toJs(error)); + } + } + ); +@@ -878,7 +878,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + }, new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + }); + } +@@ -906,7 +906,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + }); + } +@@ -932,7 +932,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + }); + } +@@ -956,7 +956,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + }); + } +@@ -988,7 +988,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + } + ); +@@ -1019,7 +1019,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + } + ); +@@ -1048,7 +1048,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + } + ); +@@ -1075,7 +1075,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + new OnErrorCallback() { + @Override + public void onError(BleError bleError) { +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + } + } + ); +@@ -1101,7 +1101,7 @@ public class BlePlxModule extends ReactContextBaseJavaModule { + if(this.bleAdapter == null){ + BleError bleError = new BleError(BleErrorCode.BluetoothManagerDestroyed, String.format("BleManager cannot call the %s function because BleManager has been destroyed", functionName), null); + +- promise.reject(null, errorConverter.toJs(bleError)); ++ promise.reject(bleError.errorCode.name(), errorConverter.toJs(bleError)); + return false; + } + diff --git a/packages/transport-native-bluetooth/package.json b/packages/transport-native-bluetooth/package.json index bb04928d6af6..712c0299787b 100644 --- a/packages/transport-native-bluetooth/package.json +++ b/packages/transport-native-bluetooth/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@trezor/transport": "workspace:*", - "react-native-ble-plx": "3.5.0" + "react-native-ble-plx": "patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch" }, "devDependencies": { "@trezor/type-utils": "workspace:*" diff --git a/suite-native/app/package.json b/suite-native/app/package.json index 80692797a19c..b19211b90b21 100644 --- a/suite-native/app/package.json +++ b/suite-native/app/package.json @@ -127,7 +127,7 @@ "react": "19.1.0", "react-intl": "^7.1.11", "react-native": "0.81.4", - "react-native-ble-plx": "3.5.0", + "react-native-ble-plx": "patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch", "react-native-edge-to-edge": "1.7.0", "react-native-gesture-handler": "2.29.0", "react-native-keyboard-controller": "1.19.2", diff --git a/yarn.lock b/yarn.lock index 15f0be33f873..2da980e47ea0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11264,7 +11264,7 @@ __metadata: react: "npm:19.1.0" react-intl: "npm:^7.1.11" react-native: "npm:0.81.4" - react-native-ble-plx: "npm:3.5.0" + react-native-ble-plx: "patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch" react-native-edge-to-edge: "npm:1.7.0" react-native-gesture-handler: "npm:2.29.0" react-native-get-random-values: "npm:^1.11.0" @@ -14628,7 +14628,7 @@ __metadata: dependencies: "@trezor/transport": "workspace:*" "@trezor/type-utils": "workspace:*" - react-native-ble-plx: "npm:3.5.0" + react-native-ble-plx: "patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch" languageName: unknown linkType: soft @@ -38479,6 +38479,16 @@ __metadata: languageName: node linkType: hard +"react-native-ble-plx@patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch": + version: 3.5.0 + resolution: "react-native-ble-plx@patch:react-native-ble-plx@npm%3A3.5.0#~/.yarn/patches/react-native-ble-plx-npm-3.5.0-c98fd0ae25.patch::version=3.5.0&hash=196fdb" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/40e5ac41b1951ecdaafe052715ad46ef8a87cc746659362d2dd2254730c8a3a9fa41119fd346970a2f077873c3d0b16505dc42d16aa0af494c1f9494568fb077 + languageName: node + linkType: hard + "react-native-edge-to-edge@npm:1.6.0": version: 1.6.0 resolution: "react-native-edge-to-edge@npm:1.6.0"