diff --git a/jest.config.native.js b/jest.config.native.js index d8e2a9e1d6..7515f6ffed 100644 --- a/jest.config.native.js +++ b/jest.config.native.js @@ -32,6 +32,7 @@ module.exports = { 'node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@sentry/react-native|native-base|react-native-svg|@shopify/react-native-skia|@noble|@scure|@evolu|nanoid|msgpackr|@gorhom)', ], setupFiles: [ + '/../../suite-native/test-utils/src/nitroModulesMock.js', '/../../node_modules/@shopify/react-native-skia/jestSetup.js', '/../../node_modules/@shopify/flash-list/jestSetup.js', '/../../node_modules/react-native-gesture-handler/jestSetup.js', diff --git a/patches/react-native-mmkv + 2.12.2.patch b/patches/react-native-mmkv + 2.12.2.patch deleted file mode 100644 index 51778f6d7b..0000000000 --- a/patches/react-native-mmkv + 2.12.2.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/react-native-mmkv/android/build.gradle b/node_modules/react-native-mmkv/android/build.gradle -index d912387..62e8aa2 100644 ---- a/node_modules/react-native-mmkv/android/build.gradle -+++ b/node_modules/react-native-mmkv/android/build.gradle -@@ -91,7 +91,7 @@ android { - externalNativeBuild { - cmake { - cppFlags "-O2 -frtti -fexceptions -Wall -Wno-unused-variable -fstack-protector-all" -- arguments "-DANDROID_STL=c++_shared" -+ arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" - abiFilters (*reactNativeArchitectures()) - } - } diff --git a/scripts/list-outdated-dependencies/foundation-dependencies.txt b/scripts/list-outdated-dependencies/foundation-dependencies.txt index 259aa64d1c..5a237e2e0f 100644 --- a/scripts/list-outdated-dependencies/foundation-dependencies.txt +++ b/scripts/list-outdated-dependencies/foundation-dependencies.txt @@ -65,6 +65,7 @@ prettier react-native-ble-plx react-native-mmkv react-freeze +react-native-nitro-modules simple-git sort-package-json typescript-eslint diff --git a/suite-native/app/.depcheckrc.json b/suite-native/app/.depcheckrc.json index e9d4f32e7d..0d9a5a7b79 100644 --- a/suite-native/app/.depcheckrc.json +++ b/suite-native/app/.depcheckrc.json @@ -29,6 +29,7 @@ "react-native-ble-plx", "react-native-edge-to-edge", "react-native-launch-arguments", + "react-native-nitro-modules", "react-native-permissions", "react-native-restart", "react-native-screens", diff --git a/suite-native/app/package.json b/suite-native/app/package.json index fd53998025..4f52c1579e 100644 --- a/suite-native/app/package.json +++ b/suite-native/app/package.json @@ -133,7 +133,8 @@ "react-native-gesture-handler": "2.29.0", "react-native-keyboard-controller": "1.19.2", "react-native-launch-arguments": "^4.1.1", - "react-native-mmkv": "2.12.2", + "react-native-mmkv": "~4.0.0", + "react-native-nitro-modules": "^0.31.2", "react-native-permissions": "5.4.2", "react-native-quick-crypto": "0.7.17", "react-native-reanimated": "~3.19.3", diff --git a/suite-native/storage/package.json b/suite-native/storage/package.json index 22dbac7928..49913be1dd 100644 --- a/suite-native/storage/package.json +++ b/suite-native/storage/package.json @@ -30,7 +30,7 @@ "jotai": "2.15.0", "react": "19.1.0", "react-native": "0.81.4", - "react-native-mmkv": "2.12.2", + "react-native-mmkv": "~4.0.0", "react-native-restart": "0.0.27", "redux-persist": "6.0.0" } diff --git a/suite-native/storage/src/atomWithUnecryptedStorage.ts b/suite-native/storage/src/atomWithUnecryptedStorage.ts index 8b6efe9bfb..8c9b4c2812 100644 --- a/suite-native/storage/src/atomWithUnecryptedStorage.ts +++ b/suite-native/storage/src/atomWithUnecryptedStorage.ts @@ -1,10 +1,10 @@ -import { MMKV } from 'react-native-mmkv'; +import { createMMKV } from 'react-native-mmkv'; import { atomWithStorage, createJSONStorage } from 'jotai/utils'; const UNECRYPTED_STORAGE_ID = 'trezorSuite-app-unecrypted-storage'; -export const unecryptedJotaiStorage = new MMKV({ +export const unecryptedJotaiStorage = createMMKV({ id: UNECRYPTED_STORAGE_ID, }); @@ -19,7 +19,7 @@ function setItem(key: string, value: T): void { } function removeItem(key: string): void { - unecryptedJotaiStorage.delete(key); + unecryptedJotaiStorage.remove(key); } function clearAll(): void { diff --git a/suite-native/storage/src/storage.ts b/suite-native/storage/src/storage.ts index 6b153376c2..17ac370509 100644 --- a/suite-native/storage/src/storage.ts +++ b/suite-native/storage/src/storage.ts @@ -1,5 +1,5 @@ import { Alert } from 'react-native'; -import { MMKV } from 'react-native-mmkv'; +import { MMKV, createMMKV } from 'react-native-mmkv'; import RNRestart from 'react-native-restart'; import { captureException, captureMessage } from '@sentry/react-native'; @@ -80,7 +80,7 @@ const alertUser = () => { const tryInitStorage = (encryptionKey: string) => { try { - return new MMKV({ + return createMMKV({ id: ENCRYPTED_STORAGE_ID, encryptionKey, }); @@ -116,7 +116,7 @@ export const initMmkvStorage = async (): Promise => { return Promise.resolve(value); }, removeItem: key => { - encryptedStorage.delete(key); + encryptedStorage.remove(key); return Promise.resolve(); }, diff --git a/suite-native/test-utils/src/nitroModulesMock.js b/suite-native/test-utils/src/nitroModulesMock.js new file mode 100644 index 0000000000..e1ab862960 --- /dev/null +++ b/suite-native/test-utils/src/nitroModulesMock.js @@ -0,0 +1 @@ +jest.mock('react-native-nitro-modules', () => ({})); diff --git a/yarn.lock b/yarn.lock index 013b575967..49822c6c79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11275,7 +11275,8 @@ __metadata: react-native-get-random-values: "npm:^1.11.0" react-native-keyboard-controller: "npm:1.19.2" react-native-launch-arguments: "npm:^4.1.1" - react-native-mmkv: "npm:2.12.2" + react-native-mmkv: "npm:~4.0.0" + react-native-nitro-modules: "npm:^0.31.2" react-native-performance: "npm:^5.1.4" react-native-permissions: "npm:5.4.2" react-native-quick-crypto: "npm:0.7.17" @@ -12854,7 +12855,7 @@ __metadata: jotai: "npm:2.15.0" react: "npm:19.1.0" react-native: "npm:0.81.4" - react-native-mmkv: "npm:2.12.2" + react-native-mmkv: "npm:~4.0.0" react-native-restart: "npm:0.0.27" redux-persist: "npm:6.0.0" languageName: unknown @@ -38553,13 +38554,24 @@ __metadata: languageName: node linkType: hard -"react-native-mmkv@npm:2.12.2": - version: 2.12.2 - resolution: "react-native-mmkv@npm:2.12.2" +"react-native-mmkv@npm:~4.0.0": + version: 4.0.0 + resolution: "react-native-mmkv@npm:4.0.0" peerDependencies: react: "*" - react-native: ">=0.71.0" - checksum: 10/c1ebb8e81905ee8ce17858ff6096525cbdd0e51892dca80a3cd6e26feb5e979a9c7d609c5a55886150efb0136c5899de174c71115f81607019ed7af68678797b + react-native: "*" + react-native-nitro-modules: "*" + checksum: 10/5247b3e19017c4059c997ac79c7e89d33a49c00e2255fb4c5ef8e993fea0ee3aed0b48be9576d154bd098c22099bfd93a70fb071a6c9d865955c97f0aa1a8759 + languageName: node + linkType: hard + +"react-native-nitro-modules@npm:^0.31.2": + version: 0.31.2 + resolution: "react-native-nitro-modules@npm:0.31.2" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/6c44eb074ee51b6b40bd62e657e4aab3c667af1c33dcfbe8a0b88c027db54c4148903a273fc5f008213d0add32b5508bce99362746d3eb6e5586d1a805296567 languageName: node linkType: hard