diff --git a/app.json b/app.json
index 1ae8a1af..31b239c2 100644
--- a/app.json
+++ b/app.json
@@ -1,7 +1,7 @@
{
- "name": "HeliumWallet",
- "displayName": "Helium Wallet",
+ "displayName": "Helium",
"expo": {
"scheme": "heliumwallet"
- }
+ },
+ "name": "HeliumWallet"
}
diff --git a/ios/HeliumWallet.xcodeproj/project.pbxproj b/ios/HeliumWallet.xcodeproj/project.pbxproj
index af603e37..bebc6c8a 100644
--- a/ios/HeliumWallet.xcodeproj/project.pbxproj
+++ b/ios/HeliumWallet.xcodeproj/project.pbxproj
@@ -1080,6 +1080,7 @@
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
INFOPLIST_FILE = HeliumWallet/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = Helium;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -1118,6 +1119,7 @@
DEVELOPMENT_TEAM = PVM9KJZ2AD;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
INFOPLIST_FILE = HeliumWallet/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = Helium;
IPHONEOS_DEPLOYMENT_TARGET = 13.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
diff --git a/ios/HeliumWallet/Info.plist b/ios/HeliumWallet/Info.plist
index 7d8cce33..d07b6061 100644
--- a/ios/HeliumWallet/Info.plist
+++ b/ios/HeliumWallet/Info.plist
@@ -5,7 +5,7 @@
CFBundleDevelopmentRegion
en
CFBundleDisplayName
- Helium Wallet
+ Helium
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 36205d10..4fb46583 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1107,27 +1107,8 @@ PODS:
- react-native-onesignal (5.2.2):
- OneSignalXCFramework (= 5.2.2)
- React (< 1.0.0, >= 0.13.0)
- - react-native-pager-view (6.3.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.01.01.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Codegen
+ - react-native-pager-view (6.1.2):
- React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- react-native-randombytes (3.6.1):
- React-Core
- react-native-safe-area-context (4.10.8):
@@ -1440,7 +1421,7 @@ PODS:
- React-utils (= 0.74.5)
- RNBootSplash (6.3.2):
- React-Core
- - RNCAsyncStorage (1.23.1):
+ - RNCAsyncStorage (1.18.1):
- React-Core
- RNCCheckbox (0.5.17):
- BEMCheckBox (~> 1.4)
@@ -1495,20 +1476,20 @@ PODS:
- React
- RNLocalize (2.2.3):
- React-Core
- - rnmapbox-maps (10.1.33):
+ - rnmapbox-maps (10.1.31):
- MapboxMaps (= 11.8.0)
- React
- React-Core
- - rnmapbox-maps/DynamicLibrary (= 10.1.33)
+ - rnmapbox-maps/DynamicLibrary (= 10.1.31)
- Turf
- - rnmapbox-maps/DynamicLibrary (10.1.33):
+ - rnmapbox-maps/DynamicLibrary (10.1.31):
- MapboxMaps (= 11.8.0)
- React
- React-Core
- Turf
- RNOS (1.2.6):
- React
- - RNPermissions (3.9.2):
+ - RNPermissions (3.9.0):
- React-Core
- RNReactNativeSharedGroupPreferences (1.1.24):
- React
@@ -1568,6 +1549,12 @@ PODS:
- React
- Toast (4.0.0)
- Turf (3.0.0)
+ - VisionCamera (4.5.3):
+ - VisionCamera/Core (= 4.5.3)
+ - VisionCamera/React (= 4.5.3)
+ - VisionCamera/Core (4.5.3)
+ - VisionCamera/React (4.5.3):
+ - React-Core
- Yoga (0.0.0)
- ZXingObjC/Core (3.6.9)
- ZXingObjC/OneD (3.6.9):
@@ -1691,6 +1678,7 @@ DEPENDENCIES:
- RNSVG (from `../node_modules/react-native-svg`)
- RNTestFlight (from `../node_modules/react-native-test-flight`)
- TcpSockets (from `../node_modules/react-native-tcp`)
+ - VisionCamera (from `../node_modules/react-native-vision-camera`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
@@ -1934,6 +1922,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-test-flight"
TcpSockets:
:path: "../node_modules/react-native-tcp"
+ VisionCamera:
+ :path: "../node_modules/react-native-vision-camera"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
@@ -2005,7 +1995,7 @@ SPEC CHECKSUMS:
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
react-native-network-info: d1290ffc0bd0709e11436f5b8d7f605dcc5c4530
react-native-onesignal: 592184d34780d04ebbea2b9844d5b6088606cb30
- react-native-pager-view: c1e29e1a6105a02807392ba822ad322447a72f55
+ react-native-pager-view: 54bed894cecebe28cede54c01038d9d1e122de43
react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846
react-native-safe-area-context: b7daa1a8df36095a032dff095a1ea8963cb48371
react-native-simple-toast: 8ee5d23f0b92b935ab7434cdb65159ce12dfb4b7
@@ -2039,7 +2029,7 @@ SPEC CHECKSUMS:
React-utils: f242eb7e7889419d979ca0e1c02ccc0ea6e43b29
ReactCommon: f7da14a8827b72704169a48c929bcde802698361
RNBootSplash: 3a44c2c3ebfce98254de887ceed22c4941c8c6c5
- RNCAsyncStorage: 826b603ae9c0f88b5ac4e956801f755109fa4d5c
+ RNCAsyncStorage: b90b71f45b8b97be43bc4284e71a6af48ac9f547
RNCCheckbox: a3ca9978cb0846b981d28da4e9914bd437403d77
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: da52ec927af4b4c3f3f6b5b5e816a69be62fe642
@@ -2047,9 +2037,9 @@ SPEC CHECKSUMS:
RNGestureHandler: efed690b8493a00b99654043daeb1335276ac4a2
RNICloudStore: bc6e225811637c09bd1eb055d6cd7448e61cd451
RNLocalize: a64514b46a01375fdfae9349036b4dc7130333b5
- rnmapbox-maps: e215d3fe420ef53090d65ecdda5cf8bf4af19c66
+ rnmapbox-maps: bf7989fd36420aabdd12960095a3f84ec298071f
RNOS: 6f2f9a70895bbbfbdad7196abd952e7b01d45027
- RNPermissions: 2af759cf053542b2b4b3c4cf9f43874796106f2c
+ RNPermissions: 1d1a8318f659ffd609dd7f81de8a7ecabfb52f10
RNReactNativeSharedGroupPreferences: 29092869fc2e40d5baca5e15d82fa5c24a668977
RNReanimated: f4ff116e33e0afc3d127f70efe928847c7c66355
RNScreens: aa943ad421c3ced3ef5a47ede02b0cbfc43a012e
@@ -2062,9 +2052,10 @@ SPEC CHECKSUMS:
TcpSockets: 14306fb79f9750ea7d2ddd02d8bed182abb01797
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
Turf: a1604e74adce15c58462c9ae2acdbf049d5be35e
- Yoga: 2246eea72aaf1b816a68a35e6e4b74563653ae09
+ VisionCamera: cb84d0d8485b3e67c91b62931d3aa88f49747c92
+ Yoga: 950bbfd7e6f04790fdb51149ed51df41f329fcc8
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
PODFILE CHECKSUM: 51a354c5ff94b58e8c8bd1903d2326a93a17b4d0
-COCOAPODS: 1.16.2
+COCOAPODS: 1.16.1
diff --git a/package.json b/package.json
index 9a97c86a..cb5e2cdd 100644
--- a/package.json
+++ b/package.json
@@ -29,62 +29,62 @@
"packageManager": "yarn@3.6.4",
"dependencies": {
"@babel/preset-typescript": "7.21.0",
- "@bonfida/spl-name-service": "^1.1.1",
- "@coral-xyz/anchor": "^0.28.0",
+ "@bonfida/spl-name-service": "1.1.1",
+ "@coral-xyz/anchor": "0.28.0",
"@gorhom/bottom-sheet": "5.0.4",
"@gorhom/portal": "1.0.14",
- "@graphql-codegen/cli": "^5.0.0",
- "@graphql-codegen/typescript": "^4.0.1",
- "@graphql-codegen/typescript-operations": "^4.0.1",
- "@graphql-codegen/typescript-rtk-query": "^3.1.1",
- "@helium/account-fetch-cache": "0.9.18",
- "@helium/account-fetch-cache-hooks": "0.9.18",
+ "@graphql-codegen/cli": "5.0.0",
+ "@graphql-codegen/typescript": "4.0.1",
+ "@graphql-codegen/typescript-operations": "4.0.1",
+ "@graphql-codegen/typescript-rtk-query": "3.1.1",
+ "@helium/account-fetch-cache": "0.9.14",
+ "@helium/account-fetch-cache-hooks": "0.9.14",
"@helium/address": "4.10.2",
- "@helium/circuit-breaker-sdk": "^0.9.18",
+ "@helium/circuit-breaker-sdk": "0.9.14",
"@helium/crypto-react-native": "4.8.0",
- "@helium/currency-utils": "^0.9.18",
- "@helium/data-credits-sdk": "^0.9.18",
- "@helium/distributor-oracle": "0.9.18",
- "@helium/fanout-sdk": "^0.9.18",
- "@helium/helium-entity-manager-sdk": "^0.9.18",
- "@helium/helium-react-hooks": "0.9.18",
- "@helium/helium-sub-daos-sdk": "^0.9.18",
+ "@helium/currency-utils": "0.9.14",
+ "@helium/data-credits-sdk": "0.9.14",
+ "@helium/distributor-oracle": "0.9.14",
+ "@helium/fanout-sdk": "0.9.14",
+ "@helium/helium-entity-manager-sdk": "0.9.14",
+ "@helium/helium-react-hooks": "0.9.14",
+ "@helium/helium-sub-daos-sdk": "0.9.14",
"@helium/http": "4.7.5",
- "@helium/idls": "0.9.18",
- "@helium/lazy-distributor-sdk": "^0.9.18",
- "@helium/modular-governance-hooks": "^0.0.13",
+ "@helium/idls": "0.9.14",
+ "@helium/lazy-distributor-sdk": "0.9.14",
+ "@helium/modular-governance-hooks": "0.0.13",
"@helium/modular-governance-idls": "0.0.13",
"@helium/onboarding": "4.11.0",
- "@helium/organization-sdk": "^0.0.13",
+ "@helium/organization-sdk": "0.0.13",
"@helium/proto-ble": "4.0.0",
"@helium/react-native-sdk": "3.0.5",
- "@helium/spl-utils": "0.9.18",
- "@helium/state-controller-sdk": "^0.0.13",
- "@helium/sus": "0.9.18",
+ "@helium/spl-utils": "0.9.14",
+ "@helium/state-controller-sdk": "0.0.13",
+ "@helium/sus": "0.9.14",
"@helium/transactions": "4.8.1",
- "@helium/treasury-management-sdk": "^0.9.18",
- "@helium/voter-stake-registry-hooks": "0.9.18",
- "@helium/voter-stake-registry-sdk": "0.9.18",
+ "@helium/treasury-management-sdk": "0.9.14",
+ "@helium/voter-stake-registry-hooks": "0.9.14",
+ "@helium/voter-stake-registry-sdk": "0.9.14",
"@helium/wallet-link": "4.11.0",
- "@jup-ag/api": "^6.0.6",
- "@keystonehq/keystone-sdk": "^0.8.0",
+ "@jup-ag/api": "6.0.6",
+ "@keystonehq/keystone-sdk": "0.8.0",
"@ledgerhq/hw-app-solana": "7.2.4",
"@ledgerhq/react-native-hid": "6.32.4",
"@ledgerhq/react-native-hw-transport-ble": "6.29.4",
- "@ledgerhq/types-devices": "^6.25.3",
- "@metaplex-foundation/js": "^0.19.5",
+ "@ledgerhq/types-devices": "6.25.3",
+ "@metaplex-foundation/js": "0.19.5",
"@metaplex-foundation/mpl-bubblegum": "0.6.0",
"@metaplex-foundation/mpl-token-metadata": "2.10.0",
- "@ngraveio/bc-ur": "^1.1.13",
+ "@ngraveio/bc-ur": "1.1.13",
"@novalabsxyz/mobile-theme": "2.0.0-y.26",
- "@onsol/tldparser": "^0.5.3",
- "@react-native-async-storage/async-storage": "1.23.1",
+ "@onsol/tldparser": "0.5.3",
+ "@react-native-async-storage/async-storage": "1.18.1",
"@react-native-community/blur": "4.3.0",
"@react-native-community/checkbox": "0.5.17",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/hooks": "2.8.1",
"@react-native-community/netinfo": "9.3.7",
- "@react-native-community/slider": "^4.5.2",
+ "@react-native-community/slider": "4.5.2",
"@react-native-masked-view/masked-view": "0.3.2",
"@react-navigation/bottom-tabs": "6.4.0",
"@react-navigation/material-top-tabs": "6.5.1",
@@ -92,39 +92,40 @@
"@react-navigation/native-stack": "6.7.0",
"@react-navigation/stack": "6.2.2",
"@reduxjs/toolkit": "1.9.1",
- "@rnmapbox/maps": "10.1.33",
+ "@rnmapbox/maps": "10.1.31",
"@shopify/react-native-skia": "1.5.10",
"@shopify/restyle": "2.4.2",
"@solana/spl-account-compression": "0.1.4",
"@solana/spl-memo": "0.2.3",
"@solana/spl-token": "0.3.6",
- "@solana/spl-token-metadata": "^0.1.4",
+ "@solana/spl-token-metadata": "0.1.4",
"@solana/wallet-adapter-react": "0.15.33",
"@solana/wallet-standard-features": "1.0.0",
- "@solana/web3.js": "^1.87.6",
- "@tanstack/react-query": "^5.45.1",
+ "@solana/web3.js": "1.87.6",
+ "@tanstack/react-query": "5.45.1",
"@tradle/react-native-http": "2.0.1",
"@turf/bbox": "6.5.0",
"@turf/center": "6.5.0",
"@turf/helpers": "6.5.0",
- "@types/base-64": "^1.0.2",
+ "@types/base-64": "1.0.2",
"@walletconnect/react-native-compat": "2.2.1",
"@walletconnect/sign-client": "2.2.1",
"@walletconnect/types": "2.2.1",
+ "aes-js": "3.1.2",
"angry-purple-tiger": "1.0.5",
"assert": "1.5.0",
"axios": "1.3.2",
- "axios-mock-adapter": "^1.22.0",
+ "axios-mock-adapter": "1.22.0",
"base-64": "1.0.0",
"bcrypt-react-native": "1.1.1",
"bignumber.js": "9.1.1",
- "bip39": "^3.1.0",
+ "bip39": "3.1.0",
"bn.js": "5.2.1",
"browserify-zlib": "0.1.4",
"bs58": "5.0.0",
"buffer": "6.0.3",
"camelcase-keys": "7.0.2",
- "compare-versions": "^6.1.0",
+ "compare-versions": "6.1.0",
"console-browserify": "1.2.0",
"constants-browserify": "1.0.0",
"crypto": "1.0.1",
@@ -132,7 +133,7 @@
"deprecated-react-native-prop-types": "2.3.0",
"dns.js": "1.0.1",
"domain-browser": "1.2.0",
- "ed25519-hd-key": "^1.3.0",
+ "ed25519-hd-key": "1.3.0",
"events": "3.3.0",
"expo": "51.0.39",
"expo-asset": "10.0.10",
@@ -142,43 +143,44 @@
"expo-haptics": "13.0.1",
"expo-linking": "6.3.1",
"expo-local-authentication": "14.0.1",
- "expo-location": "^17.0.1",
+ "expo-location": "17.0.1",
"expo-secure-store": "13.0.2",
"fuse.js": "6.6.2",
- "geolib": "^3.3.4",
+ "geolib": "3.3.4",
"h3-js": "4.1.0",
"https-browserify": "0.0.1",
"i18next": "21.9.1",
"lodash": "4.17.21",
"long": "5.2.0",
- "lottie-ios": "^4.4.1",
- "lottie-react-native": "^6.7.0",
- "markdown-it": "^13.0.2",
- "metro-react-native-babel-transformer": "^0.77.0",
+ "lottie-ios": "4.4.1",
+ "lottie-react-native": "6.7.0",
+ "markdown-it": "13.0.2",
+ "metro-react-native-babel-transformer": "0.77.0",
"parse5": "6.0.1",
- "patch-package": "^8.0.0",
+ "patch-package": "8.0.0",
"path-browserify": "0.0.0",
"punycode": "1.4.1",
"qs": "6.11.0",
"query-string": "7.1.1",
"querystring-es3": "0.2.1",
"react": "18.2.0",
- "react-async-hook": "^4.0.0",
- "react-error-boundary": "^4.0.13",
+ "react-async-hook": "4.0.0",
+ "react-error-boundary": "4.0.13",
"react-i18next": "11.18.4",
"react-native": "0.74.5",
- "react-native-animated-numbers": "^0.6.2",
+ "react-native-animated-numbers": "0.6.2",
"react-native-appstate-hook": "1.0.6",
"react-native-ble-plx": "2.0.3",
- "react-native-bootsplash": "^6.3.2",
+ "react-native-bootsplash": "6.3.2",
"react-native-charts-wrapper": "0.5.10",
- "react-native-compass-heading": "^1.5.0",
- "react-native-confetti-cannon": "^1.5.2",
+ "react-native-cheerio": "1.0.0-rc.4",
+ "react-native-compass-heading": "1.5.0",
+ "react-native-confetti-cannon": "1.5.2",
"react-native-config": "1.4.6",
"react-native-crypto": "2.2.0",
"react-native-device-info": "8.7.1",
"react-native-flash-message": "0.2.1",
- "react-native-geocoding": "^0.5.0",
+ "react-native-geocoding": "0.5.0",
"react-native-gesture-handler": "2.18.1",
"react-native-get-random-values": "1.11.0",
"react-native-icloudstore": "0.9.0",
@@ -188,14 +190,14 @@
"react-native-linear-gradient": "2.6.2",
"react-native-localize": "2.2.3",
"react-native-mail": "6.1.1",
- "react-native-markdown-display": "^7.0.0-alpha.2",
- "react-native-navigation-bar-color": "^2.0.2",
+ "react-native-markdown-display": "7.0.0-alpha.2",
+ "react-native-navigation-bar-color": "2.0.2",
"react-native-network-info": "5.2.1",
"react-native-onesignal": "5.2.2",
- "react-native-os": "^1.2.6",
- "react-native-pager-view": "6.3.0",
- "react-native-permissions": "^3.9.0",
- "react-native-qrcode-svg": "^6.3.2",
+ "react-native-os": "1.2.6",
+ "react-native-pager-view": "6.1.2",
+ "react-native-permissions": "3.9.0",
+ "react-native-qrcode-svg": "6.3.2",
"react-native-randombytes": "3.6.1",
"react-native-reanimated": "3.14.0",
"react-native-safe-area-context": "4.10.8",
@@ -203,17 +205,18 @@
"react-native-share": "7.9.0",
"react-native-shared-group-preferences": "1.1.24",
"react-native-simple-toast": "1.1.4",
- "react-native-skeleton-placeholder": "^5.2.4",
+ "react-native-skeleton-placeholder": "5.2.4",
"react-native-snap-carousel": "4.0.0-beta.6",
- "react-native-sodium": "^0.4.0",
+ "react-native-sodium": "0.4.0",
"react-native-svg": "13.4.0",
"react-native-tab-view": "3.3.4",
"react-native-tcp": "3.3.2",
"react-native-test-flight": "1.1.0",
"react-native-text-ticker": "1.14.0",
"react-native-udp": "2.7.0",
- "react-native-url-polyfill": "^2.0.0",
+ "react-native-url-polyfill": "2.0.0",
"react-native-video": "5.2.1",
+ "react-native-vision-camera": "4.5.3",
"react-native-webview": "13.10.5",
"react-redux": "8.0.4",
"readable-stream": "3.6.0",
@@ -225,7 +228,7 @@
"stream": "0.0.2",
"stream-browserify": "1.0.0",
"string_decoder": "0.10.31",
- "text-encoding-polyfill": "^0.6.7",
+ "text-encoding-polyfill": "0.6.7",
"timers-browserify": "1.4.2",
"tinycolor2": "1.4.2",
"tty-browserify": "0.0.0",
@@ -244,14 +247,14 @@
"@react-native/metro-config": "0.74.87",
"@react-native/typescript-config": "0.74.87",
"@types/bn.js": "5.1.1",
- "@types/debounce": "^1.2.4",
+ "@types/debounce": "1.2.4",
"@types/i18n-js": "3.8.2",
"@types/lodash": "4.14.183",
- "@types/mapbox__geo-viewport": "^0.5.3",
- "@types/markdown-it": "^13.0.5",
+ "@types/mapbox__geo-viewport": "0.5.3",
+ "@types/markdown-it": "13.0.5",
"@types/parse5": "5.0.3",
"@types/qs": "6.9.7",
- "@types/react": "18.2.79",
+ "@types/react": "18.2.6",
"@types/react-native": "0.70.6",
"@types/react-native-charts-wrapper": "0.5.2",
"@types/react-native-shared-group-preferences": "1.1.1",
@@ -262,7 +265,7 @@
"@types/tinycolor2": "1.4.3",
"@typescript-eslint/eslint-plugin": "5.59.2",
"@typescript-eslint/parser": "5.59.2",
- "babel-jest": "^29.6.3",
+ "babel-jest": "29.6.3",
"babel-plugin-module-resolver": "4.1.0",
"babel-plugin-transform-remove-console": "6.9.4",
"eslint": "7.32.0",
@@ -276,10 +279,10 @@
"eslint-plugin-react": "7.30.1",
"eslint-plugin-react-hooks": "4.6.0",
"husky": "7.0.4",
- "jest": "^29.6.3",
+ "jest": "29.6.3",
"jetifier": "1.6.8",
"prettier": "2.8.8",
- "react-native-clean-project": "^4.0.3",
+ "react-native-clean-project": "4.0.3",
"react-native-cli-bump-version": "1.5.0",
"react-native-codegen": "0.0.7",
"react-native-svg-transformer": "0.14.3",
@@ -293,12 +296,12 @@
"@types/react": "18",
"react": "18.2.0",
"@solana/wallet-adapter-react": "0.15.33",
- "@helium/account-fetch-cache": "^0.9.18",
- "@helium/account-fetch-cache-hooks": "^0.9.18",
- "@helium/helium-react-hooks": "^0.9.18",
- "@helium/voter-stake-registry-hooks": "^0.9.18",
- "@helium/voter-stake-registry-sdk": "^0.9.18",
- "@helium/modular-governance-hooks": "^0.0.13",
+ "@helium/account-fetch-cache": "0.9.14",
+ "@helium/account-fetch-cache-hooks": "0.9.14",
+ "@helium/helium-react-hooks": "0.9.14",
+ "@helium/voter-stake-registry-hooks": "0.9.14",
+ "@helium/voter-stake-registry-sdk": "0.9.14",
+ "@helium/modular-governance-hooks": "0.0.13",
"@helium/onboarding": "4.11.0"
},
"react-native": {
diff --git a/src/app/RootNavigator.tsx b/src/app/RootNavigator.tsx
index ebc05978..0b3e977b 100644
--- a/src/app/RootNavigator.tsx
+++ b/src/app/RootNavigator.tsx
@@ -16,6 +16,12 @@ import PaymentScreen from '@features/payment/PaymentScreen'
import LinkWallet from '@features/txnDelegation/LinkWallet'
import SignHotspot from '@features/txnDelegation/SignHotspot'
import { useNavigation } from '@react-navigation/native'
+import SignTransaction from '@features/provider-methods/SignTransaction'
+import SignMessage from '@features/provider-methods/SignMessage'
+import Connect from '@features/provider-methods/Connect'
+import Disconnect from '@features/provider-methods/Disconnect'
+import SignAndSendTransaction from '@features/provider-methods/SignAndSendTransaction'
+import SignAllTransactions from '@features/provider-methods/SignAllTransactions'
import { RootNavigationProp, RootStackParamList } from './rootTypes'
const screenOptions = { headerShown: false } as StackNavigationOptions
@@ -103,6 +109,36 @@ const RootNavigator = () => {
component={ScanQrCodeScreen}
options={screenOptions}
/>
+
+
+
+
+
+
)
}
diff --git a/src/app/rootTypes.ts b/src/app/rootTypes.ts
index 95b14544..7e18896e 100644
--- a/src/app/rootTypes.ts
+++ b/src/app/rootTypes.ts
@@ -2,6 +2,14 @@ import { LinkWalletRequest, SignHotspotRequest } from '@helium/wallet-link'
import { StackNavigationProp } from '@react-navigation/stack'
import { KeystoneAccountType } from 'src/features/keystone/SelectKeystoneAccountsScreen'
import { PaymentRouteParam } from 'src/app/services/WalletService'
+import {
+ SignAllTransactionsMethod,
+ ConnectMethod,
+ DisconnectMethod,
+ SignMessageMethod,
+ SignTransactionMethod,
+ SignAndSendTransactionMethod,
+} from '@features/provider-methods/utils'
export type RootStackParamList = {
OnboardingNavigator: undefined
@@ -14,6 +22,12 @@ export type RootStackParamList = {
ImportPrivateKey: { key?: string }
SelectKeystoneAccounts: { derivationAccounts: KeystoneAccountType[] }
ScanQrCode: undefined
+ Connect: ConnectMethod
+ Disconnect: DisconnectMethod
+ SignTransaction: SignTransactionMethod
+ SignMessage: SignMessageMethod
+ SignAndSendTransaction: SignAndSendTransactionMethod
+ SignAllTransactions: SignAllTransactionsMethod
}
export type TabBarStackParamList = {
diff --git a/src/app/services/AccountsService/pages/AddExistingWalletPage.tsx b/src/app/services/AccountsService/pages/AddExistingWalletPage.tsx
index 40d146e2..57ec2b64 100644
--- a/src/app/services/AccountsService/pages/AddExistingWalletPage.tsx
+++ b/src/app/services/AccountsService/pages/AddExistingWalletPage.tsx
@@ -1,11 +1,9 @@
import Box from '@components/Box'
import ScrollBox from '@components/ScrollBox'
-import { NavBarHeight } from '@components/ServiceNavBar'
import { useSpacing, useColors } from '@config/theme/themeHooks'
import Text from '@components/Text'
import React, { useCallback, useMemo, useRef } from 'react'
import { useTranslation } from 'react-i18next'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { StyleProp, ViewStyle } from 'react-native'
import SecretPhrase from '@assets/svgs/secretPhrase.svg'
import PrivateKey from '@assets/svgs/privateKey.svg'
@@ -24,13 +22,14 @@ import {
FlowType,
OnboardingSheetWrapper,
} from '@features/onboarding/OnboardingSheet'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
const AddExistingWalletPage = () => {
const { t } = useTranslation()
const spacing = useSpacing()
const colors = useColors()
- const { bottom } = useSafeAreaInsets()
const onboardingSheetRef = useRef(null)
+ const bottomSpacing = useBottomSpacing()
const onAddExistingWallet = useCallback(
(flowType: FlowType) => () => {
@@ -41,20 +40,25 @@ const AddExistingWalletPage = () => {
const contentContainerStyle = useMemo(
() => ({
- paddingHorizontal: spacing['2xl'],
- flex: 1,
+ padding: spacing['2xl'],
justifyContent: 'center',
gap: spacing.xl,
- paddingBottom: bottom + spacing['2xl'] + NavBarHeight,
+ paddingBottom: bottomSpacing,
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
return (
}
>
-
+
{t('AddExistingWalletPage.title')}
{
const { t } = useTranslation()
const spacing = useSpacing()
const colors = useColors()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const onboardingSheetRef = useRef(null)
const contentContainerStyle = useMemo(
() => ({
- paddingHorizontal: spacing['2xl'],
- flex: 1,
+ padding: spacing['2xl'],
justifyContent: 'center',
alignItems: 'center',
- paddingBottom: bottom + spacing['2xl'] + NavBarHeight,
+ paddingBottom: bottomSpacing,
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
const openOnboarding = useCallback(() => {
@@ -40,6 +38,7 @@ const ConnectKeystonePage = () => {
contentContainerStyle={contentContainerStyle as StyleProp}
>
diff --git a/src/app/services/AccountsService/pages/CreateSeedPhrasePage.tsx b/src/app/services/AccountsService/pages/CreateSeedPhrasePage.tsx
index 4b625110..135d4a7c 100644
--- a/src/app/services/AccountsService/pages/CreateSeedPhrasePage.tsx
+++ b/src/app/services/AccountsService/pages/CreateSeedPhrasePage.tsx
@@ -8,30 +8,29 @@ import React, { useCallback, useMemo, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { StyleProp, ViewStyle } from 'react-native'
import Add from '@assets/svgs/add.svg'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
-import { NavBarHeight } from '@components/ServiceNavBar'
import {
OnboardingSheetRef,
OnboardingSheetWrapper,
} from '@features/onboarding/OnboardingSheet'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
const CreateSeedPhrasePage = () => {
const { t } = useTranslation()
const spacing = useSpacing()
const colors = useColors()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
+
const onboardingSheetRef = useRef(null)
const contentContainerStyle = useMemo(
() => ({
- paddingHorizontal: spacing['2xl'],
- flex: 1,
+ padding: spacing['2xl'],
justifyContent: 'center',
alignItems: 'center',
gap: spacing.xl,
- paddingBottom: bottom + spacing['2xl'] + NavBarHeight,
+ paddingBottom: bottomSpacing,
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
const showBottomSheet = useCallback(() => {
@@ -40,10 +39,11 @@ const CreateSeedPhrasePage = () => {
return (
}
>
-
-
+
+
{t('CreateSeedPhrasePage.title')}
{
const { t } = useTranslation()
const spacing = useSpacing()
const colors = useColors()
const onboardingSheetRef = useRef(null)
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const contentContainerStyle = useMemo(
() => ({
- paddingHorizontal: spacing['2xl'],
- flex: 1,
+ padding: spacing['2xl'],
justifyContent: 'center',
alignItems: 'center',
- paddingBottom: bottom + spacing['2xl'] + NavBarHeight,
+ paddingBottom: bottomSpacing,
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
const openOnboardingSheet = useCallback(() => {
diff --git a/src/app/services/HotspotService/pages/AddHotspotPage.tsx b/src/app/services/HotspotService/pages/AddHotspotPage.tsx
index 3a3237a4..94e5cad7 100644
--- a/src/app/services/HotspotService/pages/AddHotspotPage.tsx
+++ b/src/app/services/HotspotService/pages/AddHotspotPage.tsx
@@ -8,19 +8,18 @@ import Add from '@assets/svgs/add.svg'
import { useColors, useSpacing } from '@config/theme/themeHooks'
import RightArrow from '@assets/svgs/rightArrow.svg'
import ScrollBox from '@components/ScrollBox'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import {
OnboardingSheetWrapper,
OnboardingSheetRef,
} from '@features/hotspot-onboarding/OnboardingSheet'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
const AddHotspotPage = () => {
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
const colors = useColors()
const spacing = useSpacing()
const onboardingSheetRef = useRef(null)
+ const bottomSpacing = useBottomSpacing()
const showOnboardingSheet = useCallback(() => {
onboardingSheetRef.current?.show()
@@ -88,7 +87,7 @@ const AddHotspotPage = () => {
gap="sm"
justifyContent="center"
style={{
- marginBottom: NavBarHeight + bottom + spacing['2xl'],
+ marginBottom: bottomSpacing,
}}
>
diff --git a/src/app/services/HotspotService/pages/ExplorerPage.tsx b/src/app/services/HotspotService/pages/ExplorerPage.tsx
index 712b544e..44f2571c 100644
--- a/src/app/services/HotspotService/pages/ExplorerPage.tsx
+++ b/src/app/services/HotspotService/pages/ExplorerPage.tsx
@@ -15,6 +15,12 @@ import { useSpacing } from '@config/theme/themeHooks'
import Text from '@components/Text'
import { ReAnimatedBox } from '@components/AnimatedBox'
import { FadeIn, FadeOut } from 'react-native-reanimated'
+import { useAsync } from 'react-async-hook'
+import { useEntityKey } from '@hooks/useEntityKey'
+import { useIotInfo } from '@hooks/useIotInfo'
+import { useMobileInfo } from '@hooks/useMobileInfo'
+import { parseH3BNLocation } from '@utils/h3'
+import { HotspotWithPendingRewards } from '../../../../types/solana'
const ExplorerPage = () => {
const { hotspotsWithMeta } = useHotspots()
@@ -90,31 +96,41 @@ const ExplorerPage = () => {
- {hotspotsWithMeta.map((hotspot) => {
- const subDao = hotspot?.content?.metadata?.hotspot_infos?.iot
- ?.device_type
- ? 'iot'
- : 'mobile'
- const { long, lat } = hotspot.content.metadata.hotspot_infos[subDao]
-
- if (!long || !lat) return null
-
- return (
-
-
-
- )
- })}
+ {hotspotsWithMeta.map((hotspot) => (
+
+ ))}
)
}
+const HotspotMarker = ({ hotspot }: { hotspot: HotspotWithPendingRewards }) => {
+ const entityKey = useEntityKey(hotspot)
+ const iotInfoAcc = useIotInfo(entityKey)
+ const mobileInfoAcc = useMobileInfo(entityKey)
+
+ const { result } = useAsync(async () => {
+ if (iotInfoAcc) {
+ return parseH3BNLocation(iotInfoAcc.info.location).reverse()
+ }
+
+ if (mobileInfoAcc) {
+ return parseH3BNLocation(mobileInfoAcc.info.location).reverse()
+ }
+ }, [hotspot])
+
+ if (!result) return null
+
+ return (
+
+
+
+ )
+}
+
export default ExplorerPage
diff --git a/src/assets/images/connectLogo.png b/src/assets/images/connectLogo.png
new file mode 100644
index 00000000..1566488b
Binary files /dev/null and b/src/assets/images/connectLogo.png differ
diff --git a/src/assets/images/connectLogo@2x.png b/src/assets/images/connectLogo@2x.png
new file mode 100644
index 00000000..1bc400b1
Binary files /dev/null and b/src/assets/images/connectLogo@2x.png differ
diff --git a/src/assets/images/connectLogo@3x.png b/src/assets/images/connectLogo@3x.png
new file mode 100644
index 00000000..cb3015f0
Binary files /dev/null and b/src/assets/images/connectLogo@3x.png differ
diff --git a/src/assets/images/disconnectLogo.png b/src/assets/images/disconnectLogo.png
new file mode 100644
index 00000000..8039fd12
Binary files /dev/null and b/src/assets/images/disconnectLogo.png differ
diff --git a/src/assets/images/disconnectLogo@2x.png b/src/assets/images/disconnectLogo@2x.png
new file mode 100644
index 00000000..1c54d95d
Binary files /dev/null and b/src/assets/images/disconnectLogo@2x.png differ
diff --git a/src/assets/images/disconnectLogo@3x.png b/src/assets/images/disconnectLogo@3x.png
new file mode 100644
index 00000000..ab4a534e
Binary files /dev/null and b/src/assets/images/disconnectLogo@3x.png differ
diff --git a/src/assets/images/signAndSendLogo.png b/src/assets/images/signAndSendLogo.png
new file mode 100644
index 00000000..7779cdc4
Binary files /dev/null and b/src/assets/images/signAndSendLogo.png differ
diff --git a/src/assets/images/signAndSendLogo@2x.png b/src/assets/images/signAndSendLogo@2x.png
new file mode 100644
index 00000000..ab588bee
Binary files /dev/null and b/src/assets/images/signAndSendLogo@2x.png differ
diff --git a/src/assets/images/signAndSendLogo@3x.png b/src/assets/images/signAndSendLogo@3x.png
new file mode 100644
index 00000000..28f11abf
Binary files /dev/null and b/src/assets/images/signAndSendLogo@3x.png differ
diff --git a/src/assets/images/signMessageLogo.png b/src/assets/images/signMessageLogo.png
new file mode 100644
index 00000000..796b5c97
Binary files /dev/null and b/src/assets/images/signMessageLogo.png differ
diff --git a/src/assets/images/signMessageLogo@2x.png b/src/assets/images/signMessageLogo@2x.png
new file mode 100644
index 00000000..852517ef
Binary files /dev/null and b/src/assets/images/signMessageLogo@2x.png differ
diff --git a/src/assets/images/signMessageLogo@3x.png b/src/assets/images/signMessageLogo@3x.png
new file mode 100644
index 00000000..2e315ee5
Binary files /dev/null and b/src/assets/images/signMessageLogo@3x.png differ
diff --git a/src/assets/images/signTransactionLogo.png b/src/assets/images/signTransactionLogo.png
new file mode 100644
index 00000000..796b5c97
Binary files /dev/null and b/src/assets/images/signTransactionLogo.png differ
diff --git a/src/assets/images/signTransactionLogo@2x.png b/src/assets/images/signTransactionLogo@2x.png
new file mode 100644
index 00000000..852517ef
Binary files /dev/null and b/src/assets/images/signTransactionLogo@2x.png differ
diff --git a/src/assets/images/signTransactionLogo@3x.png b/src/assets/images/signTransactionLogo@3x.png
new file mode 100644
index 00000000..2e315ee5
Binary files /dev/null and b/src/assets/images/signTransactionLogo@3x.png differ
diff --git a/src/assets/images/signTransactionsLogo.png b/src/assets/images/signTransactionsLogo.png
new file mode 100644
index 00000000..032294fe
Binary files /dev/null and b/src/assets/images/signTransactionsLogo.png differ
diff --git a/src/assets/images/signTransactionsLogo@2x.png b/src/assets/images/signTransactionsLogo@2x.png
new file mode 100644
index 00000000..8489ff98
Binary files /dev/null and b/src/assets/images/signTransactionsLogo@2x.png differ
diff --git a/src/assets/images/signTransactionsLogo@3x.png b/src/assets/images/signTransactionsLogo@3x.png
new file mode 100644
index 00000000..146c10a6
Binary files /dev/null and b/src/assets/images/signTransactionsLogo@3x.png differ
diff --git a/src/components/AccountButton.tsx b/src/components/AccountButton.tsx
index 2ae04d9a..86fb1e16 100644
--- a/src/components/AccountButton.tsx
+++ b/src/components/AccountButton.tsx
@@ -6,18 +6,17 @@ import { BoxProps } from '@shopify/restyle'
import { useColors, useHitSlop } from '@config/theme/themeHooks'
import { Color, Theme } from '@config/theme/theme'
import useHaptic from '@hooks/useHaptic'
+import { ellipsizeAddress } from '@utils/accountUtils'
import AccountIcon from './AccountIcon'
import Box from './Box'
import Text from './Text'
-import TouchableOpacityBox from './TouchableOpacityBox'
+import TouchableContainer from './TouchableContainer'
type Props = {
onPress?: (address?: string) => void
address?: string
title?: string
- subtitle?: string
showBubbleArrow?: boolean
- innerBoxProps?: BoxProps
showChevron?: boolean
accountIconSize?: number
} & BoxProps
@@ -26,9 +25,7 @@ const AccountButton = ({
onPress,
address,
title,
- subtitle,
showBubbleArrow,
- innerBoxProps,
showChevron = true,
accountIconSize = 28,
backgroundColor: backgroundColorProps,
@@ -45,40 +42,39 @@ const AccountButton = ({
}, [address, onPress, triggerImpact])
const textColor = useMemo((): Color => {
- return 'secondaryText'
+ return 'text.quaternary-500'
}, [])
return (
-
- {!!subtitle && (
-
- {subtitle}
-
- )}
+
+ {title}
+
- {title}
+ {ellipsizeAddress(address || '', {
+ numChars: 4,
+ })}
{showChevron && }
@@ -92,7 +88,7 @@ const AccountButton = ({
/>
)}
-
+
)
}
diff --git a/src/components/AccountListItem.tsx b/src/components/AccountListItem.tsx
index cc7584e0..1944380b 100644
--- a/src/components/AccountListItem.tsx
+++ b/src/components/AccountListItem.tsx
@@ -23,7 +23,7 @@ const AccountListItem = ({
disabled,
...rest
}: Props & BoxProps) => {
- const { primaryText } = useColors()
+ const { primaryBackground } = useColors()
const handlePress = useCallback(() => onPress?.(account), [account, onPress])
@@ -55,14 +55,14 @@ const AccountListItem = ({
{selected && (
-
+
)}
diff --git a/src/components/AccountSelector.tsx b/src/components/AccountSelector.tsx
index 9ae2b3d1..6ca9fc08 100644
--- a/src/components/AccountSelector.tsx
+++ b/src/components/AccountSelector.tsx
@@ -1,7 +1,6 @@
import React, {
forwardRef,
memo,
- ReactNode,
Ref,
useCallback,
useImperativeHandle,
@@ -9,19 +8,19 @@ import React, {
useRef,
useState,
} from 'react'
-import {
+import BottomSheet, {
BottomSheetBackdrop,
BottomSheetFlatList,
- BottomSheetModal,
- BottomSheetModalProvider,
} from '@gorhom/bottom-sheet'
import { GestureResponderEvent } from 'react-native'
-import { useColors, useOpacity, useSpacing } from '@config/theme/themeHooks'
-import useBackHandler from '@hooks/useBackHandler'
+import { useSpacing } from '@config/theme/themeHooks'
import { useAccountStorage } from '@config/storage/AccountStorageProvider'
import { CSAccount } from '@config/storage/cloudStorage'
+import { ThemeProvider } from '@shopify/restyle'
+import { lightTheme } from '@config/theme/theme'
import { AccountNetTypeOpt } from '../utils/accountUtils'
import AccountListItem from './AccountListItem'
+import HeliumBottomSheet from './HeliumBottomSheet'
export type AccountSelectorRef = {
show: (_type?: AccountNetTypeOpt | GestureResponderEvent) => void
@@ -33,124 +32,113 @@ const isGesture = (
): x is GestureResponderEvent =>
!!x && typeof x === 'object' && 'bubbles' in (x as GestureResponderEvent)
-const AccountSelector = forwardRef(
- ({ children }: { children: ReactNode }, ref: Ref) => {
- useImperativeHandle(ref, () => ({ show, showAccountTypes }))
-
- const bottomSheetModalRef = useRef(null)
- const { backgroundStyle } = useOpacity('bg.tertiary', 1)
- const spacing = useSpacing()
- const [accountsType, setAccountsTypes] = useState('all')
- const snapPoints = useMemo(() => ['60%', '80%'], [])
- const colors = useColors()
-
- const sheetHandleStyle = useMemo(() => ({ padding: spacing[4] }), [spacing])
- const flatListContainerStyle = useMemo(
- () => ({ paddingBottom: spacing[8] }),
- [spacing],
- )
-
- const { handleDismiss, setIsShowing } = useBackHandler(bottomSheetModalRef)
-
- const show = useCallback(
- (x?: AccountNetTypeOpt | GestureResponderEvent) => {
- let type: AccountNetTypeOpt = 'all'
- if (x !== undefined && !isGesture(x)) {
- type = x
- }
- setAccountsTypes(type)
- bottomSheetModalRef.current?.present()
- setIsShowing(true)
- },
- [setIsShowing],
- )
-
- const showAccountTypes = useCallback(
- (type: AccountNetTypeOpt) => () => {
- show(type)
- },
- [show],
- )
-
- const hide = useCallback(() => {
- bottomSheetModalRef.current?.dismiss()
- }, [])
-
- const { sortedAccountsForNetType, currentAccount, setCurrentAccount } =
- useAccountStorage()
-
- const data = useMemo(
- () => sortedAccountsForNetType(accountsType),
-
- [accountsType, sortedAccountsForNetType],
- )
-
- const handleAccountPress = useCallback(
- (account: CSAccount) => {
- setCurrentAccount(account)
- hide()
- },
- [hide, setCurrentAccount],
- )
-
- const keyExtractor = useCallback((item: CSAccount) => {
- return item.address
- }, [])
-
- const handleIndicatorStyle = useMemo(() => {
- return {
- backgroundColor: colors.secondaryText,
- }
- }, [colors.secondaryText])
-
- const renderFlatlistItem = useCallback(
- // eslint-disable-next-line react/no-unused-prop-types
- ({ item: account }: { item: CSAccount; index: number }) => {
- return (
-
- )
- },
- [currentAccount?.address, handleAccountPress],
- )
- const renderBackdrop = useCallback(
- (props) => (
- ) => {
+ useImperativeHandle(ref, () => ({ show, showAccountTypes }))
+
+ const bottomSheetModalRef = useRef(null)
+ const spacing = useSpacing()
+ const [accountsType, setAccountsTypes] = useState('all')
+
+ const flatListContainerStyle = useMemo(
+ () => ({ padding: spacing['2xl'] }),
+ [spacing],
+ )
+
+ const show = useCallback((x?: AccountNetTypeOpt | GestureResponderEvent) => {
+ let type: AccountNetTypeOpt = 'all'
+ if (x !== undefined && !isGesture(x)) {
+ type = x
+ }
+ setAccountsTypes(type)
+ bottomSheetModalRef.current?.expand()
+ }, [])
+
+ const showAccountTypes = useCallback(
+ (type: AccountNetTypeOpt) => () => {
+ show(type)
+ },
+ [show],
+ )
+
+ const hide = useCallback(() => {
+ bottomSheetModalRef.current?.close()
+ }, [])
+
+ const { sortedAccountsForNetType, currentAccount, setCurrentAccount } =
+ useAccountStorage()
+
+ const data = useMemo(
+ () => sortedAccountsForNetType(accountsType),
+
+ [accountsType, sortedAccountsForNetType],
+ )
+
+ const handleAccountPress = useCallback(
+ (account: CSAccount) => {
+ setCurrentAccount(account)
+ hide()
+ },
+ [hide, setCurrentAccount],
+ )
+
+ const keyExtractor = useCallback((item: CSAccount) => {
+ return item.address
+ }, [])
+
+ const renderFlatlistItem = useCallback(
+ // eslint-disable-next-line react/no-unused-prop-types
+ ({ item: account }: { item: CSAccount; index: number }) => {
+ const isFirst = account.address === data[0].address
+ const isLast = account.address === data[data.length - 1].address
+ const borderTopStartRadius = isFirst ? '2xl' : 'none'
+ const borderTopEndRadius = isFirst ? '2xl' : 'none'
+ const borderBottomStartRadius = isLast ? '2xl' : 'none'
+ const borderBottomEndRadius = isLast ? '2xl' : 'none'
+
+ return (
+
- ),
- [],
- )
- return (
-
-
-
-
- {children}
-
- )
- },
-)
+ )
+ },
+ [currentAccount?.address, handleAccountPress, data],
+ )
+ const renderBackdrop = useCallback(
+ (props) => (
+
+ ),
+ [],
+ )
+ return (
+
+
+
+
+
+ )
+})
export default memo(AccountSelector)
diff --git a/src/components/ServiceNavBar.tsx b/src/components/ServiceNavBar.tsx
index 7f109ace..57d05041 100644
--- a/src/components/ServiceNavBar.tsx
+++ b/src/components/ServiceNavBar.tsx
@@ -180,7 +180,7 @@ const NavServiceNavBar = ({
return (
{
+ const encryptionKey = crypto.randomBytes(256 / 8)
+
+ // eslint-disable-next-line new-cap
+ const cipher = new aesjs.ModeOfOperation.ctr(
+ encryptionKey,
+ new aesjs.Counter(1),
+ )
+ const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value))
+
+ await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey))
+
+ return aesjs.utils.hex.fromBytes(encryptedBytes)
+}
+
+const decrypt = async (key: string, value: string) => {
+ const encryptionKeyHex = await SecureStore.getItemAsync(key)
+ if (!encryptionKeyHex) {
+ return encryptionKeyHex
+ }
+
+ // eslint-disable-next-line new-cap
+ const cipher = new aesjs.ModeOfOperation.ctr(
+ aesjs.utils.hex.toBytes(encryptionKeyHex),
+ new aesjs.Counter(1),
+ )
+ const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value))
+
+ return aesjs.utils.utf8.fromBytes(decryptedBytes)
+}
+
+export const getItem = async (key: string) => {
+ const encrypted = await AsyncStorage.getItem(key)
+ if (!encrypted) {
+ return encrypted
+ }
+
+ return decrypt(key, encrypted)
+}
+
+export const removeItem = async (key: string) => {
+ await AsyncStorage.removeItem(key)
+ await SecureStore.deleteItemAsync(key)
+}
+
+export const setItem = async (key: string, value: string) => {
+ const encrypted = await encrypt(key, value)
+
+ await AsyncStorage.setItem(key, encrypted)
+}
diff --git a/src/features/accounts/WalletList.tsx b/src/features/accounts/WalletList.tsx
index cf9b69e6..56885b41 100644
--- a/src/features/accounts/WalletList.tsx
+++ b/src/features/accounts/WalletList.tsx
@@ -23,7 +23,6 @@ import { getSecureAccount } from '@config/storage/secureStorage'
import * as bip39 from 'bip39'
import { useOnboarding } from '@features/onboarding/OnboardingProvider'
import Toast from 'react-native-simple-toast'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { ServiceSheetNavigationProp } from 'src/app/services/serviceSheetTypes'
import CircleLoader from '@components/CircleLoader'
import ScrollBox from '@components/ScrollBox'
@@ -31,7 +30,7 @@ import {
OnboardingSheetRef,
OnboardingSheetWrapper,
} from '@features/onboarding/OnboardingSheet'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { AccountsServiceNavigationProp } from './accountServiceTypes'
const ACCOUNT_LIMIT = 100
@@ -49,7 +48,7 @@ const WalletList = () => {
>()
const { sortedAccounts, currentAccount, setCurrentAccount, accounts } =
useAccountStorage()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const onboardingSheetRef = useRef(null)
const handleAddSub = useCallback(
@@ -322,7 +321,7 @@ const WalletList = () => {
{
}
const ActivityDetailsScreen = () => {
- const { bottom } = useSafeAreaInsets()
const route = useRoute()
const colors = useColors()
const { t, i18n } = useTranslation()
const createExplorerUrl = useCreateExplorerUrl()
const copyText = useCopyText()
const { triggerImpact } = useHaptic()
+ const bottomSpacing = useBottomSpacing()
const { transaction } = route.params
@@ -398,7 +397,7 @@ const ActivityDetailsScreen = () => {
titleColor="base.black"
onPress={handleOpenExplorer}
style={{
- marginBottom: NavBarHeight + bottom,
+ marginBottom: bottomSpacing,
}}
/>
diff --git a/src/features/activity/ActivityScreen.tsx b/src/features/activity/ActivityScreen.tsx
index fabd8a02..ddc2172a 100644
--- a/src/features/activity/ActivityScreen.tsx
+++ b/src/features/activity/ActivityScreen.tsx
@@ -4,7 +4,6 @@ import { EnrichedTransaction } from 'src/types/solana'
import { ConfirmedSignatureInfo } from '@solana/web3.js'
import { useNavigation } from '@react-navigation/native'
import { useTranslation } from 'react-i18next'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import Box from '@components/Box'
import Text from '@components/Text'
import useEnrichedTransactions from '@hooks/useEnrichedTransactions'
@@ -12,8 +11,8 @@ import CircleLoader from '@components/CircleLoader'
import FadeInOut from '@components/FadeInOut'
import useHaptic from '@hooks/useHaptic'
import { useColors, useSpacing } from '@config/theme/themeHooks'
-import { NavBarHeight } from '@components/ServiceNavBar'
import ScrollBox from '@components/ScrollBox'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { ActivityNavigationProp } from './activityTypes'
import ActivityListItem from './ActivityListItem'
@@ -22,17 +21,17 @@ const ActivityScreen = () => {
useEnrichedTransactions()
const { t } = useTranslation()
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
const colors = useColors()
const navigation = useNavigation()
const { triggerImpact } = useHaptic()
+ const bottomSpacing = useBottomSpacing()
const contentContainer = useMemo(
() => ({
paddingTop: spacing['6xl'],
- paddingBottom: NavBarHeight + bottom + spacing['6xl'],
+ paddingBottom: bottomSpacing,
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
const SectionData = useMemo((): {
diff --git a/src/features/addressBook/ContactDetails.tsx b/src/features/addressBook/ContactDetails.tsx
index f1ab9981..375dfdf2 100644
--- a/src/features/addressBook/ContactDetails.tsx
+++ b/src/features/addressBook/ContactDetails.tsx
@@ -28,13 +28,12 @@ import { heliumAddressFromSolAddress } from '@helium/spl-utils'
import { useDebounce } from 'use-debounce'
import { fetchDomainOwner } from '@utils/getDomainOwner'
import BackScreen from '@components/BackScreen'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import ScrollBox from '@components/ScrollBox'
import { useAccountStorage } from '@config/storage/AccountStorageProvider'
import { useAppStorage } from '@config/storage/AppStorageProvider'
import { CSAccount } from '@config/storage/cloudStorage'
import { useSolana } from '@features/solana/SolanaProvider'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import AddressExtra from './AddressExtra'
import {
AddressBookNavigationProp,
@@ -55,7 +54,6 @@ const ContactDetails = ({ action, contact }: Props) => {
const { t } = useTranslation()
const addressBookNav = useNavigation()
const route = useRoute()
- const { bottom } = useSafeAreaInsets()
const { addContact, editContact, deleteContact } = useAccountStorage()
const [nickname, setNickname] = useState(contact?.alias || '')
const [address, setAddress] = useState('')
@@ -67,6 +65,7 @@ const ContactDetails = ({ action, contact }: Props) => {
const { connection } = useSolana()
// debounce is needed to avoid unneccessary rpc calls
const [debouncedAddress] = useDebounce(address, 800)
+ const bottomSpacing = useBottomSpacing()
useEffect(() => {
if (route.params?.address) {
@@ -185,7 +184,7 @@ const ContactDetails = ({ action, contact }: Props) => {
paddingHorizontal="0"
padding="4"
style={{
- paddingBottom: NavBarHeight + bottom + spacing.xl,
+ paddingBottom: bottomSpacing,
}}
>
diff --git a/src/features/addressBook/ContactsList.tsx b/src/features/addressBook/ContactsList.tsx
index 3b24231a..70ced5c1 100644
--- a/src/features/addressBook/ContactsList.tsx
+++ b/src/features/addressBook/ContactsList.tsx
@@ -13,8 +13,7 @@ import FabButton from '@components/FabButton'
import SearchInput from '@components/SearchInput'
import AccountListItem from '@components/AccountListItem'
import { useSpacing } from '@config/theme/themeHooks'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { CSAccount } from '@config/storage/cloudStorage'
type Props = {
@@ -38,7 +37,7 @@ const ContactsList = ({
const { t } = useTranslation()
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const [searchTerm, setSearchTerm] = useState('')
const handleContactPressed = useCallback(
(item: CSAccount) => {
@@ -161,9 +160,9 @@ const ContactsList = ({
const contentContainerStyle = useMemo(() => {
return {
padding: spacing['5'],
- paddingBottom: NavBarHeight + bottom,
+ paddingBottom: bottomSpacing,
}
- }, [spacing, bottom])
+ }, [spacing, bottomSpacing])
if (insideBottomSheet) {
return (
diff --git a/src/features/burn/BurnScreen.tsx b/src/features/burn/BurnScreen.tsx
index c168e761..ed4a70f5 100644
--- a/src/features/burn/BurnScreen.tsx
+++ b/src/features/burn/BurnScreen.tsx
@@ -23,7 +23,7 @@ import { useCurrentWallet } from '@hooks/useCurrentWallet'
import { useMetaplexMetadata } from '@hooks/useMetaplexMetadata'
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
import { PublicKey } from '@solana/web3.js'
-import { useColors, useHitSlop, useSpacing } from '@config/theme/themeHooks'
+import { useColors, useHitSlop } from '@config/theme/themeHooks'
import { BN } from 'bn.js'
import React, {
memo as reactMemo,
@@ -44,7 +44,7 @@ import {
} from '@services/WalletService/pages/WalletPage'
import { useAccountStorage } from '@config/storage/AccountStorageProvider'
import { CSAccount } from '@config/storage/cloudStorage'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import ScrollBox from '@components/ScrollBox'
import AddressBookSelector, {
AddressBookRef,
@@ -72,8 +72,8 @@ const BurnScreen = () => {
setCurrentAccount,
defaultAccountAddress,
} = useAccountStorage()
- const spacing = useSpacing()
- const { top, bottom } = useSafeAreaInsets()
+ const { top } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
const { t } = useTranslation()
const { primaryText } = useColors()
@@ -105,10 +105,10 @@ const BurnScreen = () => {
const containerStyle = useMemo(
() => ({
marginTop: Platform.OS === 'android' ? top : undefined,
- paddingBottom: NavBarHeight + spacing['2xl'] + bottom,
+ paddingBottom: bottomSpacing,
flex: 1,
}),
- [top, spacing, bottom],
+ [top, bottomSpacing],
)
const networkType = useMemo(
diff --git a/src/features/collectables/ManageCollectables.tsx b/src/features/collectables/ManageCollectables.tsx
index 798a5d55..3eaea6a4 100644
--- a/src/features/collectables/ManageCollectables.tsx
+++ b/src/features/collectables/ManageCollectables.tsx
@@ -1,6 +1,6 @@
import BackScreen from '@components/BackScreen'
import ScrollBox from '@components/ScrollBox'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import useCollectables from '@hooks/useCollectables'
import { RootState } from '@store/rootReducer'
import { useColors } from '@config/theme/themeHooks'
@@ -9,13 +9,12 @@ import React, { useCallback } from 'react'
import { useAsync } from 'react-async-hook'
import { FlatList, RefreshControl } from 'react-native'
import { useSelector } from 'react-redux'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { useTranslation } from 'react-i18next'
import CollectionItem, { Collection } from './CollectionItem'
const ManageCollectables = () => {
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const colors = useColors()
const { fetchAllCollectablesByGroup } = useCollectables()
const approvedCollections = useSelector(
@@ -118,7 +117,7 @@ const ManageCollectables = () => {
renderItem={renderItem}
keyExtractor={keyExtractor}
contentContainerStyle={{
- paddingBottom: NavBarHeight + bottom,
+ paddingBottom: bottomSpacing,
}}
/>
diff --git a/src/features/collectables/NftDetailsScreen.tsx b/src/features/collectables/NftDetailsScreen.tsx
index ba24b102..c691ccff 100644
--- a/src/features/collectables/NftDetailsScreen.tsx
+++ b/src/features/collectables/NftDetailsScreen.tsx
@@ -1,6 +1,5 @@
import React, { useCallback, useMemo, memo } from 'react'
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import 'text-encoding-polyfill'
import { useTranslation } from 'react-i18next'
import Face from '@assets/svgs/face.svg'
@@ -18,7 +17,7 @@ import {
WalletNavigationProp,
WalletStackParamList,
} from '@services/WalletService/pages/WalletPage'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import ButtonPressable from '@components/ButtonPressable'
import { useAccountStorage } from '@config/storage/AccountStorageProvider'
import NftMetadata from './NftMetadata'
@@ -31,7 +30,7 @@ const NftDetailsScreen = () => {
const route = useRoute()
const navigation = useNavigation()
const COLLECTABLE_HEIGHT = ww
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const { editAvatar } = useAccountStorage()
const { t } = useTranslation()
@@ -182,7 +181,7 @@ const NftDetailsScreen = () => {
diff --git a/src/features/collectables/NftList.tsx b/src/features/collectables/NftList.tsx
index e4ed8c85..16b104f3 100644
--- a/src/features/collectables/NftList.tsx
+++ b/src/features/collectables/NftList.tsx
@@ -6,8 +6,7 @@ import Box from '@components/Box'
import useCollectables from '@hooks/useCollectables'
import { useColors, useSpacing } from '@config/theme/themeHooks'
import { useNavigation } from '@react-navigation/native'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import TouchableOpacityBox from '@components/TouchableOpacityBox'
import Config from '@assets/svgs/config.svg'
import Text from '@components/Text'
@@ -19,7 +18,7 @@ import NFTListItem, { NFTSkeleton } from './NftListItem'
const NftList = () => {
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
const approvedCollections = useSelector(
(state: RootState) => state.collectables.approvedCollections,
@@ -110,11 +109,11 @@ const NftList = () => {
const contentContainerStyle = useMemo(
() => ({
marginTop: spacing[4],
- paddingBottom: NavBarHeight + bottom + spacing['6xl'],
+ paddingBottom: bottomSpacing,
paddingHorizontal: spacing[5],
gap: spacing[4],
}),
- [spacing, bottom],
+ [spacing, bottomSpacing],
)
return (
diff --git a/src/features/collectables/TransferCollectableScreen.tsx b/src/features/collectables/TransferCollectableScreen.tsx
index 30953b08..561d638d 100644
--- a/src/features/collectables/TransferCollectableScreen.tsx
+++ b/src/features/collectables/TransferCollectableScreen.tsx
@@ -21,11 +21,10 @@ import {
NativeSyntheticEvent,
TextInputEndEditingEventData,
} from 'react-native'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import 'text-encoding-polyfill'
import ScrollBox from '@components/ScrollBox'
import { Asset } from '@helium/spl-utils'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import TouchableOpacityBox from '@components/TouchableOpacityBox'
import AddressIcon from '@assets/svgs/addressIcon.svg'
import { WalletNavigationProp } from '@services/WalletService/pages/WalletPage'
@@ -46,7 +45,7 @@ const TransferCollectableScreen = () => {
const route = useRoute()
const navigation = useNavigation()
const COLLECTABLE_HEIGHT = ww
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const { t } = useTranslation()
const { collectable } = route.params
@@ -222,7 +221,7 @@ const TransferCollectableScreen = () => {
flexDirection="row"
marginTop="4"
style={{
- marginBottom: NavBarHeight + bottom,
+ marginBottom: bottomSpacing,
}}
>
{
const route = useRoute()
const colors = useColors()
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
const COLLECTABLE_HEIGHT = ww
const solBalance = useBN(useSolOwnedAmount(useCurrentWallet()).amount)
@@ -193,7 +192,7 @@ const TransferCollectableScreen = () => {
width="100%"
justifyContent="flex-end"
style={{
- paddingBottom: NavBarHeight + bottom + spacing.xl,
+ paddingBottom: bottomSpacing,
}}
>
{
}, [currentAccount, setCurrentAccount, sortedMainnetAccounts])
return (
-
+ <>
{
-
+
+ >
)
}
diff --git a/src/features/hotspot-onboarding/screens/SelectNetworkScreen.tsx b/src/features/hotspot-onboarding/screens/SelectNetworkScreen.tsx
index 15bea522..97cbd8bf 100644
--- a/src/features/hotspot-onboarding/screens/SelectNetworkScreen.tsx
+++ b/src/features/hotspot-onboarding/screens/SelectNetworkScreen.tsx
@@ -48,14 +48,12 @@ const SelectNetworkScreen = () => {
marginTop="2xl"
backgroundColor="bg.brand-secondary"
backgroundColorPressed="blue.light-200"
- opacity={0.3}
padding="xl"
paddingEnd="4xl"
borderTopStartRadius="4xl"
borderTopEndRadius="4xl"
flexDirection="row"
alignItems="center"
- disabled
onPress={onMobileSelected}
>
diff --git a/src/features/hotspots/AssertLocationScreen.tsx b/src/features/hotspots/AssertLocationScreen.tsx
index 9097c808..98af2281 100644
--- a/src/features/hotspots/AssertLocationScreen.tsx
+++ b/src/features/hotspots/AssertLocationScreen.tsx
@@ -50,7 +50,6 @@ import {
import 'text-encoding-polyfill'
import { useDebounce } from 'use-debounce'
import { useColors, useCreateOpacity } from '@config/theme/themeHooks'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import Map from '@components/Map'
import {
Camera,
@@ -64,7 +63,7 @@ import {
INITIAL_MAP_VIEW_STATE,
MAX_MAP_ZOOM,
} from '@utils/mapUtils'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { Search } from '@components/Search'
import {
CollectableNavigationProp,
@@ -75,7 +74,7 @@ type Route = RouteProp
const AssertLocationScreen = () => {
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const route = useRoute()
const { backgroundStyle } = useCreateOpacity()
const { collectable } = route.params
@@ -737,7 +736,7 @@ const AssertLocationScreen = () => {
justifyContent="center"
onPress={handleAssertLocationPress}
style={{
- marginBottom: bottom + NavBarHeight,
+ marginBottom: bottomSpacing,
}}
>
{debouncedDisabled || asserting ? (
@@ -847,7 +846,7 @@ const AssertLocationScreen = () => {
{
const navigation = useNavigation()
const copyText = useCopyText()
const { triggerImpact } = useHaptic()
-
+ const bottomSpacing = useBottomSpacing()
const data = useMemo(() => {
return [
{
@@ -170,12 +171,6 @@ export const HotspotConfig = () => {
[data, colors],
)
- const contentContainerStyle = useMemo(() => {
- return {
- // paddingBottom: spacing['2xl'],
- }
- }, [])
-
const renderHeader = useCallback(() => {
return (
@@ -191,9 +186,13 @@ export const HotspotConfig = () => {
}, [onBack])
return (
-
+
{
hotspot: HotspotWithPendingRewards
}
const spacing = useSpacing()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
-
+ const entityKey = useEntityKey(hotspot)
+ const iotInfoAcc = useIotInfo(entityKey)
+ const mobileInfoAcc = useMobileInfo(entityKey)
const colors = useColors()
const borderRadii = useBorderRadii()
@@ -60,12 +68,27 @@ const HotspotDetails = () => {
}, [hotspot])
const { result: hotspotAddress } = useAsync(async () => {
- const subDaoInfo = hotspot?.content?.metadata?.hotspot_infos[subDao]
+ let address:
+ | {
+ city: string | undefined
+ postalCode: string | undefined
+ country: string | undefined
+ street: string | undefined
+ state: string | undefined
+ }
+ | undefined
- const lat = subDaoInfo?.lat
- const long = subDaoInfo?.long
+ if (iotInfoAcc) {
+ const loc = await parseH3BNLocation(iotInfoAcc.info.location).reverse()
+ address = await getAddressFromLatLng(loc[1], loc[0])
+ }
+
+ if (mobileInfoAcc) {
+ const loc = await parseH3BNLocation(mobileInfoAcc.info.location).reverse()
+ address = await getAddressFromLatLng(loc[1], loc[0])
+ }
- const address = await getAddressFromLatLng(lat, long)
+ if (!address) return undefined
return `${address.street}, ${address.city}, ${address.state}`
}, [hotspot, subDao])
@@ -201,7 +224,12 @@ const HotspotDetails = () => {
)
return (
-
+
{
const {
@@ -35,11 +34,16 @@ const HotspotPage = () => {
onEndReached,
} = useHotspots()
+ // Refresh the hotspots when the page is loaded
+ useEffect(() => {
+ refresh()
+ }, [refresh])
+
const isFocused = useIsFocused()
const colors = useColors()
const { t } = useTranslation()
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
const [filterText, setFilterText] = useState('')
const [userLocation, setUserLocation] = useState()
@@ -310,9 +314,9 @@ const HotspotPage = () => {
const contentContainerStyle = useMemo(() => {
return {
paddingHorizontal: spacing['2xl'],
- paddingBottom: bottom + NavBarHeight + spacing.xl,
+ paddingBottom: bottomSpacing,
}
- }, [spacing, bottom])
+ }, [spacing, bottomSpacing])
return (
<>
diff --git a/src/features/hotspots/EmptyState.tsx b/src/features/hotspots/components/EmptyState.tsx
similarity index 86%
rename from src/features/hotspots/EmptyState.tsx
rename to src/features/hotspots/components/EmptyState.tsx
index 9544f3ce..c0fb11df 100644
--- a/src/features/hotspots/EmptyState.tsx
+++ b/src/features/hotspots/components/EmptyState.tsx
@@ -1,9 +1,8 @@
import Box from '@components/Box'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useColors, useSpacing } from '@config/theme/themeHooks'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
+import { useColors } from '@config/theme/themeHooks'
import React, { useCallback } from 'react'
import { useTranslation } from 'react-i18next'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import Text from '@components/Text'
import ButtonPressable from '@components/ButtonPressable'
import AddIcon from '@assets/svgs/add.svg'
@@ -12,10 +11,9 @@ import { useNavigation } from '@react-navigation/native'
import { HotspotServiceNavigationProp } from 'src/app/services/HotspotService'
const EmptyState = () => {
- const spacing = useSpacing()
const colors = useColors()
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const navigation = useNavigation()
const onLearnMore = useCallback(() => {
@@ -30,7 +28,7 @@ const EmptyState = () => {
{
backgroundColor="primaryText"
borderRadius="6xl"
alignItems="center"
- paddingTop="8xl"
+ paddingTop={{ xs: '2xl', lg: '8xl' }}
>
{
variant="textXlMedium"
color="text.quaternary-500"
marginTop="2.5"
- marginBottom="8xl"
+ marginBottom={{ xs: '2xl', lg: '8xl' }}
textAlign="center"
paddingHorizontal="2"
>
diff --git a/src/features/keystone/SelectKeystoneAccountsScreen.tsx b/src/features/keystone/SelectKeystoneAccountsScreen.tsx
index b45abcab..420d303e 100644
--- a/src/features/keystone/SelectKeystoneAccountsScreen.tsx
+++ b/src/features/keystone/SelectKeystoneAccountsScreen.tsx
@@ -18,8 +18,7 @@ import { useSolana } from '@features/solana/SolanaProvider'
import { useOnboardingSheet } from '@features/onboarding/OnboardingSheet'
import ForwardButton from '@components/ForwardButton'
import ScrollBox from '@components/ScrollBox'
-import { NavBarHeight } from '@components/ServiceNavBar'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { useKeystoneOnboarding } from './KeystoneOnboardingProvider'
export type KeystoneAccountType = {
@@ -31,7 +30,7 @@ export type KeystoneAccountType = {
}
const SelectKeystoneAccountsScreen = () => {
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const colors = useColors()
const spacing = useSpacing()
const {
@@ -214,9 +213,9 @@ const SelectKeystoneAccountsScreen = () => {
return {
padding: spacing['2xl'],
flex: 1,
- paddingBottom: bottom + NavBarHeight + spacing.xl,
+ paddingBottom: bottomSpacing,
}
- }, [spacing, bottom])
+ }, [spacing, bottomSpacing])
return (
<>
diff --git a/src/features/onboarding/CreateImportAccountScreen.tsx b/src/features/onboarding/CreateImportAccountScreen.tsx
index aa817feb..32f724f7 100644
--- a/src/features/onboarding/CreateImportAccountScreen.tsx
+++ b/src/features/onboarding/CreateImportAccountScreen.tsx
@@ -3,7 +3,7 @@ import React, { memo, useCallback, useRef } from 'react'
import { useTranslation } from 'react-i18next'
import Box from '@components/Box'
import Text from '@components/Text'
-import { useColors } from '@config/theme/themeHooks'
+import { useColors, useSpacing } from '@config/theme/themeHooks'
import FinePrint from '@components/FinePrint'
import TouchableContainer from '@components/TouchableContainer'
import SecretPhrase from '@assets/svgs/secretPhrase.svg'
@@ -28,6 +28,7 @@ const CreateImportAccountScreen = () => {
const navigation = useNavigation()
const colors = useColors()
const onboardingSheetRef = useRef(null)
+ const spacing = useSpacing()
const goBack = useCallback(() => {
navigation.goBack()
@@ -43,8 +44,10 @@ const CreateImportAccountScreen = () => {
return (
{
return (
-
+
@@ -38,7 +53,10 @@ const WelcomeToHeliumScreen = () => {
{t('WelcomeToHeliumScreen.title')}
{
{t('WelcomeToHeliumScreen.subtitle')}
-
+
{
options={options}
onItemSelected={onWordAmountClicked}
paddingTop="4xl"
- paddingBottom="8xl"
+ paddingBottom={{ xs: '4xl', lg: '8xl' }}
/>
diff --git a/src/features/payment/PaymentScreen.tsx b/src/features/payment/PaymentScreen.tsx
index fadc09ed..0373ceb0 100644
--- a/src/features/payment/PaymentScreen.tsx
+++ b/src/features/payment/PaymentScreen.tsx
@@ -42,7 +42,7 @@ import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import Toast from 'react-native-simple-toast'
import { useSelector } from 'react-redux'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { WalletNavigationProp } from '@services/WalletService/pages/WalletPage'
import { PaymentRouteParam } from 'src/app/services/WalletService'
import ScrollBox from '@components/ScrollBox'
@@ -100,7 +100,7 @@ const parseLinkedPayments = (opts: PaymentRouteParam): LinkedPayment[] => {
type Route = RouteProp
const PaymentScreen = () => {
const route = useRoute()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const addressBookRef = useRef(null)
const tokenSelectorRef = useRef(null)
const hntKeyboardRef = useRef(null)
@@ -675,7 +675,7 @@ const PaymentScreen = () => {
backgroundColor="primaryBackground"
style={{
...containerStyle,
- paddingBottom: NavBarHeight + bottom,
+ paddingBottom: bottomSpacing,
}}
>
{/* {
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
return (
@@ -45,7 +44,7 @@ const PaymentSuccess = ({
padding="6"
overflow="hidden"
style={{
- paddingBottom: NavBarHeight + bottom,
+ paddingBottom: bottomSpacing,
}}
backgroundColor="cardBackground"
>
diff --git a/src/features/provider-methods/Connect.tsx b/src/features/provider-methods/Connect.tsx
new file mode 100644
index 00000000..0605a089
--- /dev/null
+++ b/src/features/provider-methods/Connect.tsx
@@ -0,0 +1,180 @@
+import React, { useCallback, useMemo, useRef } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import AccountButton from '@components/AccountButton'
+import { formatAccountAlias } from '@utils/accountUtils'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import AccountSelector, {
+ AccountSelectorRef,
+} from '@components/AccountSelector'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import useSession, { Session } from './hooks/useSession'
+import ErrorDetected from './components/ErrorDetected'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const Connect = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const { t } = useTranslation('')
+ const navigation = useNavigation()
+ const { currentAccount } = useAccountStorage()
+ const accountSelectorRef = useRef(null)
+ const { connect } = useSession()
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.app_url)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const { title, icon } = await extractWebMetadata(params.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const { execute: onConnect, loading: connecting } = useAsyncCallback(
+ async () => {
+ if (!currentAccount?.solanaAddress) return
+
+ const session: Session = {
+ app_url: params.app_url,
+ chain: 'solana',
+ cluster: undefined,
+ timestamp: new Date().toISOString(),
+ }
+
+ const connectResponse = await connect(
+ currentAccount?.solanaAddress,
+ params.dapp_encryption_public_key,
+ session,
+ )
+
+ if (!connectResponse) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { helium_encryption_public_key, nonce, data } = connectResponse
+
+ const searchParams = new URLSearchParams({
+ helium_encryption_public_key,
+ nonce,
+ data,
+ })
+
+ Linking.openURL(`${params.redirect_link}?${searchParams.toString()}`)
+ },
+ )
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+
+ const handleAccountButtonPress = useCallback(() => {
+ accountSelectorRef.current?.show()
+ }, [accountSelectorRef])
+
+ if (
+ !params.app_url ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link
+ ) {
+ return
+ }
+
+ return (
+ <>
+
+
+
+ {t('Connect.title')}
+
+
+ {t('Connect.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default Connect
diff --git a/src/features/provider-methods/Disconnect.tsx b/src/features/provider-methods/Disconnect.tsx
new file mode 100644
index 00000000..762b1bf7
--- /dev/null
+++ b/src/features/provider-methods/Disconnect.tsx
@@ -0,0 +1,154 @@
+import React, { useCallback, useMemo } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import useSession, { DisconnectPayload, Session } from './hooks/useSession'
+import ErrorDetected from './components/ErrorDetected'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const Disconnect = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const { t } = useTranslation('')
+ const navigation = useNavigation()
+ const { currentAccount } = useAccountStorage()
+ const { disconnect, getSharedSecret, decryptPayload } = useSession()
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.nonce || !params.dapp_encryption_public_key || !params.payload)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const decryptedPayload = await decryptPayload(
+ params.payload,
+ params.nonce,
+ sharedSecret,
+ )
+
+ const parsedPayload: DisconnectPayload = JSON.parse(decryptedPayload)
+
+ const { session } = parsedPayload
+
+ const parsedSession: Session = JSON.parse(session)
+
+ const { title, icon } = await extractWebMetadata(parsedSession.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+ const { execute: onDisconnect, loading: disconnecting } = useAsyncCallback(
+ async () => {
+ if (!currentAccount?.solanaAddress) return
+
+ try {
+ await disconnect(
+ params.dapp_encryption_public_key,
+ params.payload,
+ params.nonce,
+ )
+
+ Linking.openURL(`${params.redirect_link}`)
+ } catch (e) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ }
+ },
+ )
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+ if (
+ !params.nonce ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link ||
+ !params.payload
+ ) {
+ return
+ }
+
+ return (
+
+
+
+ {t('Disconnect.title')}
+
+
+ {t('Disconnect.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Disconnect
diff --git a/src/features/provider-methods/SignAllTransactions.tsx b/src/features/provider-methods/SignAllTransactions.tsx
new file mode 100644
index 00000000..639da925
--- /dev/null
+++ b/src/features/provider-methods/SignAllTransactions.tsx
@@ -0,0 +1,232 @@
+import React, { useCallback, useMemo } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import { useSolana } from '@features/solana/SolanaProvider'
+import { Transaction } from '@solana/web3.js'
+import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes'
+import { WalletStandardMessageTypes } from '@features/solana/walletSignBottomSheetTypes'
+import { useWalletSign } from '@features/solana/WalletSignProvider'
+import ErrorDetected from './components/ErrorDetected'
+import useSession, {
+ Session,
+ SignTransactionsPayload,
+} from './hooks/useSession'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const SignAllTransactions = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const { t } = useTranslation('')
+ const navigation = useNavigation()
+ const { currentAccount } = useAccountStorage()
+ const {
+ signAllTransactions,
+ getSharedSecret,
+ encryptPayload,
+ decryptPayload,
+ } = useSession()
+ const { walletSignBottomSheetRef } = useWalletSign()
+ const { anchorProvider } = useSolana()
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.nonce || !params.dapp_encryption_public_key || !params.payload)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const decryptedPayload = await decryptPayload(
+ params.payload,
+ params.nonce,
+ sharedSecret,
+ )
+
+ const parsedPayload: SignTransactionsPayload = JSON.parse(decryptedPayload)
+
+ const { session } = parsedPayload
+
+ const parsedSession: Session = JSON.parse(session)
+
+ const { title, icon } = await extractWebMetadata(parsedSession.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const { execute: onSignAllTransactions, loading: signing } = useAsyncCallback(
+ async () => {
+ if (!currentAccount?.solanaAddress) return
+
+ try {
+ const signAllTransactionsResponse = await signAllTransactions(
+ params.dapp_encryption_public_key,
+ params.payload,
+ params.nonce,
+ )
+
+ if (!signAllTransactionsResponse) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { transactions } = signAllTransactionsResponse
+
+ const parsedSession: Session = JSON.parse(params.payload)
+
+ // TODO: Support Versioned Transactions
+ const txns = transactions.map((tx: string) =>
+ Transaction.from(bs58.decode(tx)),
+ )
+
+ const decision = await walletSignBottomSheetRef?.show({
+ type: WalletStandardMessageTypes.signTransaction,
+ url: parsedSession.app_url,
+ serializedTxs: txns.map((tx) =>
+ tx.serialize({
+ requireAllSignatures: false,
+ }),
+ ),
+ })
+
+ if (!decision) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32000',
+ errorMessage: 'User rejected the request',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const signedTransactions =
+ await anchorProvider?.wallet.signAllTransactions(txns)
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const [nonce, encryptedPayload] = encryptPayload(
+ JSON.stringify({
+ transactions: signedTransactions?.map((tx) =>
+ bs58.encode(tx.serialize()),
+ ),
+ }),
+ sharedSecret,
+ )
+
+ const searchParams = new URLSearchParams({
+ nonce: bs58.encode(nonce),
+ data: bs58.encode(encryptedPayload),
+ })
+
+ Linking.openURL(`${params.redirect_link}?${searchParams.toString()}`)
+ } catch {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ }
+ },
+ )
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+
+ if (
+ !params.nonce ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link ||
+ !params.payload
+ ) {
+ return
+ }
+
+ return (
+
+
+
+ {t('SignAllTransactions.title')}
+
+
+ {t('SignAllTransactions.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default SignAllTransactions
diff --git a/src/features/provider-methods/SignAndSendTransaction.tsx b/src/features/provider-methods/SignAndSendTransaction.tsx
new file mode 100644
index 00000000..dfff0591
--- /dev/null
+++ b/src/features/provider-methods/SignAndSendTransaction.tsx
@@ -0,0 +1,244 @@
+import React, { useCallback, useMemo } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import { useSolana } from '@features/solana/SolanaProvider'
+import { Transaction } from '@solana/web3.js'
+import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes'
+import { WalletStandardMessageTypes } from '@features/solana/walletSignBottomSheetTypes'
+import { useWalletSign } from '@features/solana/WalletSignProvider'
+import useSession, {
+ Session,
+ SignAndSendTransactionPayload,
+} from './hooks/useSession'
+import ErrorDetected from './components/ErrorDetected'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const SignAndSendTransaction = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const { t } = useTranslation('')
+ const navigation = useNavigation()
+ const { currentAccount } = useAccountStorage()
+ const {
+ signAndSendTransaction,
+ getSharedSecret,
+ encryptPayload,
+ decryptPayload,
+ } = useSession()
+ const { anchorProvider } = useSolana()
+ const { walletSignBottomSheetRef } = useWalletSign()
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.nonce || !params.dapp_encryption_public_key || !params.payload)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const decryptedPayload = await decryptPayload(
+ params.payload,
+ params.nonce,
+ sharedSecret,
+ )
+
+ const parsedPayload: SignAndSendTransactionPayload =
+ JSON.parse(decryptedPayload)
+
+ const { session } = parsedPayload
+
+ const parsedSession: Session = JSON.parse(session)
+
+ const { title, icon } = await extractWebMetadata(parsedSession.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const { execute: onSignAndSendTransaction, loading: signing } =
+ useAsyncCallback(async () => {
+ if (!currentAccount?.solanaAddress || !anchorProvider?.connection) return
+
+ try {
+ const signAndSendTransactionResponse = await signAndSendTransaction(
+ params.dapp_encryption_public_key,
+ params.payload,
+ params.nonce,
+ )
+
+ if (!signAndSendTransactionResponse) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { transaction, sendOptions, session } =
+ signAndSendTransactionResponse
+
+ const parsedSession: Session = JSON.parse(session)
+
+ // TODO: Support Versioned Transactions
+ const txn = Transaction.from(bs58.decode(transaction))
+
+ const decision = await walletSignBottomSheetRef?.show({
+ type: WalletStandardMessageTypes.signTransaction,
+ url: parsedSession.app_url,
+ serializedTxs: [
+ txn.serialize({
+ requireAllSignatures: false,
+ }),
+ ],
+ })
+
+ if (!decision) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32000',
+ errorMessage: 'User rejected the request',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const signedTransaction = await anchorProvider?.wallet.signTransaction(
+ txn,
+ )
+
+ if (!signedTransaction) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const signature = await anchorProvider?.sendAndConfirm(
+ signedTransaction,
+ undefined,
+ sendOptions,
+ )
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const [nonce, encryptedPayload] = encryptPayload(
+ JSON.stringify({ signature }),
+ sharedSecret,
+ )
+
+ const searchParams = new URLSearchParams({
+ nonce: bs58.encode(nonce),
+ data: bs58.encode(encryptedPayload),
+ })
+
+ Linking.openURL(`${params.redirect_link}?${searchParams.toString()}`)
+ } catch {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ }
+ })
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+
+ if (
+ !params.nonce ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link ||
+ !params.payload
+ ) {
+ return
+ }
+
+ return (
+
+
+
+ {t('SignAndSendTransaction.title')}
+
+
+ {t('SignAndSendTransaction.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default SignAndSendTransaction
diff --git a/src/features/provider-methods/SignMessage.tsx b/src/features/provider-methods/SignMessage.tsx
new file mode 100644
index 00000000..4f2a4619
--- /dev/null
+++ b/src/features/provider-methods/SignMessage.tsx
@@ -0,0 +1,199 @@
+import React, { useCallback, useMemo } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import { useSolana } from '@features/solana/SolanaProvider'
+import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes'
+import ErrorDetected from './components/ErrorDetected'
+import useSession, { Session, SignMessagePayload } from './hooks/useSession'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const SignMessage = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const { t } = useTranslation('')
+ const navigation = useNavigation()
+ const { currentAccount } = useAccountStorage()
+ const { anchorProvider, signMsg } = useSolana()
+ const { signMessage, getSharedSecret, encryptPayload, decryptPayload } =
+ useSession()
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.nonce || !params.dapp_encryption_public_key || !params.payload)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const decryptedPayload = await decryptPayload(
+ params.payload,
+ params.nonce,
+ sharedSecret,
+ )
+
+ const parsedPayload: SignMessagePayload = JSON.parse(decryptedPayload)
+
+ const { session } = parsedPayload
+
+ const parsedSession: Session = JSON.parse(session)
+
+ const { title, icon } = await extractWebMetadata(parsedSession.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ const { execute: onSignMessage, loading: signing } = useAsyncCallback(
+ async () => {
+ if (!currentAccount?.solanaAddress || !anchorProvider?.connection) return
+
+ try {
+ const signMessageResponse = await signMessage(
+ params.dapp_encryption_public_key,
+ params.payload,
+ params.nonce,
+ )
+
+ if (!signMessageResponse) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { message } = signMessageResponse
+
+ const signature = await signMsg(bs58.decode(message))
+
+ if (!signature) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const [nonce, encryptedPayload] = encryptPayload(
+ JSON.stringify({ signature: bs58.encode(signature) }),
+ sharedSecret,
+ )
+
+ const searchParams = new URLSearchParams({
+ nonce: bs58.encode(nonce),
+ data: bs58.encode(encryptedPayload),
+ })
+
+ Linking.openURL(`${params.redirect_link}?${searchParams.toString()}`)
+ } catch {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ }
+ },
+ )
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+
+ if (
+ !params.nonce ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link ||
+ !params.payload
+ ) {
+ return
+ }
+
+ return (
+
+
+
+ {t('SignMessage.title')}
+
+
+ {t('SignMessage.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default SignMessage
diff --git a/src/features/provider-methods/SignTransaction.tsx b/src/features/provider-methods/SignTransaction.tsx
new file mode 100644
index 00000000..c21b40c8
--- /dev/null
+++ b/src/features/provider-methods/SignTransaction.tsx
@@ -0,0 +1,233 @@
+import React, { useCallback, useMemo } from 'react'
+import Box from '@components/Box'
+import Text from '@components/Text'
+import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'
+import { RootNavigationProp, RootStackParamList } from '@app/rootTypes'
+import ScrollBox from '@components/ScrollBox'
+import { useSpacing } from '@config/theme/themeHooks'
+import { Linking, ViewStyle } from 'react-native'
+import { useTranslation } from 'react-i18next'
+import ImageBox from '@components/ImageBox'
+import ButtonPressable from '@components/ButtonPressable'
+import { Transaction } from '@solana/web3.js'
+import { useWalletSign } from '@features/solana/WalletSignProvider'
+import { WalletStandardMessageTypes } from '@features/solana/walletSignBottomSheetTypes'
+import { useSolana } from '@features/solana/SolanaProvider'
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import { useAsync, useAsyncCallback } from 'react-async-hook'
+import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes'
+import useSession, { Session, SignTransactionPayload } from './hooks/useSession'
+import ErrorDetected from './components/ErrorDetected'
+import extractWebMetadata from './utils'
+
+type Route = RouteProp
+export const SignTransaction = () => {
+ const { params } = useRoute()
+ const spacing = useSpacing()
+ const navigation = useNavigation()
+ const { t } = useTranslation('')
+ const { walletSignBottomSheetRef } = useWalletSign()
+ const { anchorProvider } = useSolana()
+ const { currentAccount } = useAccountStorage()
+ const { signTransaction, getSharedSecret, encryptPayload, decryptPayload } =
+ useSession()
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ const { result: appMetadata } = useAsync(async () => {
+ if (!params.nonce || !params.dapp_encryption_public_key || !params.payload)
+ return {
+ title: t('generic.anApp'),
+ icon: null,
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const decryptedPayload = await decryptPayload(
+ params.payload,
+ params.nonce,
+ sharedSecret,
+ )
+
+ const parsedPayload: SignTransactionPayload = JSON.parse(decryptedPayload)
+
+ const { session } = parsedPayload
+
+ const parsedSession: Session = JSON.parse(session)
+
+ const { title, icon } = await extractWebMetadata(parsedSession.app_url)
+
+ return { title: title || t('generic.anApp'), icon: icon || null }
+ }, [params])
+
+ const { execute: onSignTransaction, loading: signing } = useAsyncCallback(
+ async () => {
+ if (!currentAccount?.solanaAddress || !anchorProvider?.connection) return
+
+ try {
+ const signAndSendTransactionResponse = await signTransaction(
+ params.dapp_encryption_public_key,
+ params.payload,
+ params.nonce,
+ )
+
+ if (!signAndSendTransactionResponse) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const { transaction, session } = signAndSendTransactionResponse
+
+ const parsedSession: Session = JSON.parse(session)
+
+ // TODO: Support Versioned Transactions
+ const txn = Transaction.from(bs58.decode(transaction))
+
+ const decision = await walletSignBottomSheetRef?.show({
+ type: WalletStandardMessageTypes.signTransaction,
+ url: parsedSession.app_url,
+ serializedTxs: [
+ txn.serialize({
+ requireAllSignatures: false,
+ }),
+ ],
+ theme: 'light',
+ })
+
+ if (!decision) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32000',
+ errorMessage: 'User rejected the request',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const signedTransaction = await anchorProvider?.wallet.signTransaction(
+ txn,
+ )
+
+ if (!signedTransaction) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ return
+ }
+
+ const sharedSecret = await getSharedSecret(
+ params.dapp_encryption_public_key,
+ )
+
+ const [nonce, encryptedPayload] = encryptPayload(
+ JSON.stringify({
+ transaction: bs58.encode(signedTransaction.serialize()),
+ }),
+ sharedSecret,
+ )
+
+ const searchParams = new URLSearchParams({
+ nonce: bs58.encode(nonce),
+ data: bs58.encode(encryptedPayload),
+ })
+
+ Linking.openURL(`${params.redirect_link}?${searchParams.toString()}`)
+ } catch (e) {
+ const errorParams = new URLSearchParams({
+ errorCode: '-32603',
+ errorMessage: 'Failed to connect to the provider',
+ })
+
+ Linking.openURL(`${params.redirect_link}?${errorParams.toString()}`)
+ }
+ },
+ )
+
+ const onCancel = useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.popToTop()
+ } else {
+ navigation.reset({
+ index: 0,
+ routes: [
+ {
+ name: currentAccount
+ ? 'ServiceSheetNavigator'
+ : 'OnboardingNavigator',
+ },
+ ],
+ })
+ }
+ }, [navigation, currentAccount])
+
+ if (
+ !params.nonce ||
+ !params.dapp_encryption_public_key ||
+ !params.redirect_link ||
+ !params.payload
+ ) {
+ return
+ }
+
+ return (
+
+
+
+ {t('SignTransaction.title')}
+
+
+ {t('SignTransaction.subtitle', {
+ appName: appMetadata?.title || t('generic.anApp'),
+ })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default SignTransaction
diff --git a/src/features/provider-methods/components/ErrorDetected.tsx b/src/features/provider-methods/components/ErrorDetected.tsx
new file mode 100644
index 00000000..0f2e0a07
--- /dev/null
+++ b/src/features/provider-methods/components/ErrorDetected.tsx
@@ -0,0 +1,63 @@
+import Box from '@components/Box'
+import ButtonPressable from '@components/ButtonPressable'
+import ImageBox from '@components/ImageBox'
+import ScrollBox from '@components/ScrollBox'
+import Text from '@components/Text'
+import { useSpacing } from '@config/theme/themeHooks'
+import { useNavigation } from '@react-navigation/native'
+import React, { memo, useCallback, useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
+import { ViewStyle } from 'react-native'
+
+const ErrorDetected = () => {
+ const spacing = useSpacing()
+ const navigation = useNavigation()
+ const { t } = useTranslation()
+
+ const onBack = useCallback(() => {
+ navigation.goBack()
+ }, [navigation])
+
+ const contentContainerStyle = useMemo(() => {
+ return {
+ flexGrow: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: spacing['2xl'],
+ gap: spacing.xl,
+ }
+ }, [spacing])
+
+ return (
+
+
+
+ {t('ErrorDetected.title')}
+
+
+ {t('ErrorDetected.subtitle', { appName: 'Builder App' })}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default memo(ErrorDetected)
diff --git a/src/features/provider-methods/hooks/useSession.ts b/src/features/provider-methods/hooks/useSession.ts
new file mode 100644
index 00000000..2768ecd8
--- /dev/null
+++ b/src/features/provider-methods/hooks/useSession.ts
@@ -0,0 +1,376 @@
+import { useAccountStorage } from '@config/storage/AccountStorageProvider'
+import { bs58 } from '@coral-xyz/anchor/dist/cjs/utils/bytes'
+import { SendOptions } from '@solana/web3.js'
+import { solAddressToHelium } from '@utils/accountUtils'
+import { isEqual } from 'lodash'
+import { useCallback } from 'react'
+import tweetnacl from 'tweetnacl'
+import * as LargeSecureStorage from '@config/storage/largeSecureStorage'
+
+const APP_SESSIONS_KEY = 'appSessions'
+
+// eslint-disable-next-line @typescript-eslint/naming-convention
+type APP_SESSIONS = Record
+
+// eslint-disable-next-line @typescript-eslint/naming-convention
+type APP_SESSION = {
+ // shared secret key for the session
+ secretKey: string
+ session: string
+ // public key that is connected to the session
+ publicKey: string
+}
+
+export type Session = {
+ app_url: string
+ timestamp: string
+ chain?: string
+ cluster?: string
+}
+
+export type DisconnectPayload = {
+ session: string
+}
+
+export type SignTransactionPayload = {
+ transaction: string
+ session: string // token received from connect-method
+}
+
+export type SignMessagePayload = {
+ message: string
+ session: string // token received from connect-method
+ display?: 'utf8' | 'hex'
+}
+
+export type SignTransactionsPayload = {
+ transactions: string[] // serialized transactions, bs58-encoded
+ session: string // token received from connect-method
+}
+
+export type SignAndSendTransactionPayload = {
+ transaction: string // serialized transaction, base58-encoded
+ session: string // token received from connect-method
+ sendOptions?: SendOptions // an optional Solana web3.js sendOptions object
+}
+
+const useSession = () => {
+ const { accounts, setCurrentAccount } = useAccountStorage()
+
+ const getSharedSecret = useCallback(
+ async (dapp_encryption_public_key: string) => {
+ const existingStorage = await LargeSecureStorage.getItem(APP_SESSIONS_KEY)
+ let existingStorageParsed: APP_SESSIONS = {}
+
+ if (existingStorage) {
+ existingStorageParsed = JSON.parse(existingStorage)
+ }
+
+ if (!existingStorageParsed[dapp_encryption_public_key]) {
+ throw new Error('Session not found')
+ }
+
+ const appSession: APP_SESSION = JSON.parse(
+ existingStorageParsed[dapp_encryption_public_key],
+ ) as APP_SESSION
+
+ const sharedSecret = tweetnacl.box.before(
+ bs58.decode(dapp_encryption_public_key),
+ bs58.decode(appSession.secretKey),
+ )
+
+ return sharedSecret
+ },
+ [],
+ )
+
+ const encryptPayload = useCallback(
+ (payload: string, sharedSecret?: Uint8Array) => {
+ if (!sharedSecret) throw new Error('missing shared secret')
+
+ const nonce = tweetnacl.randomBytes(24)
+
+ const encryptedPayload = tweetnacl.box.after(
+ Buffer.from(payload),
+ nonce,
+ sharedSecret,
+ )
+
+ return [nonce, encryptedPayload]
+ },
+ [],
+ )
+
+ const decryptPayload = useCallback(
+ (data: string, nonce: string, sharedSecret?: Uint8Array) => {
+ if (!sharedSecret) throw new Error('missing shared secret')
+
+ const decryptedData = tweetnacl.box.open.after(
+ bs58.decode(data),
+ bs58.decode(nonce),
+ sharedSecret,
+ )
+ if (!decryptedData) {
+ throw new Error('Unable to decrypt data')
+ }
+ return JSON.parse(Buffer.from(decryptedData).toString('utf8'))
+ },
+ [],
+ )
+
+ const connect = useCallback(
+ async (
+ userPublicKey: string,
+ dapp_encryption_public_key: string,
+ session: Session,
+ ) => {
+ if (!dapp_encryption_public_key) return
+ if (!session?.app_url || !session?.timestamp) return
+
+ const { publicKey: heliumEncryptionPublicKey, secretKey } =
+ tweetnacl.box.keyPair()
+
+ const sharedSecret = tweetnacl.box.before(
+ bs58.decode(dapp_encryption_public_key),
+ secretKey,
+ )
+
+ const existingStorage = await LargeSecureStorage.getItem(APP_SESSIONS_KEY)
+ let existingStorageParsed: APP_SESSIONS = {}
+
+ if (existingStorage) {
+ existingStorageParsed = JSON.parse(existingStorage)
+ }
+
+ existingStorageParsed[dapp_encryption_public_key] = JSON.stringify({
+ secretKey: bs58.encode(secretKey),
+ session: JSON.stringify(session),
+ publicKey: userPublicKey,
+ })
+
+ await LargeSecureStorage.setItem(
+ APP_SESSIONS_KEY,
+ JSON.stringify(existingStorageParsed),
+ )
+
+ const [nonce, encryptedPayload] = encryptPayload(
+ JSON.stringify({
+ session: JSON.stringify(session),
+ public_key: userPublicKey,
+ }),
+ sharedSecret,
+ )
+
+ return {
+ helium_encryption_public_key: bs58.encode(heliumEncryptionPublicKey),
+ nonce: bs58.encode(nonce),
+ data: bs58.encode(encryptedPayload),
+ }
+ },
+ [encryptPayload],
+ )
+
+ const disconnect = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ if (!dapp_encryption_public_key) return
+
+ const existingStorage = await LargeSecureStorage.getItem(APP_SESSIONS_KEY)
+ let existingStorageParsed: APP_SESSIONS = {}
+
+ if (existingStorage) {
+ existingStorageParsed = JSON.parse(existingStorage)
+ }
+
+ if (!existingStorageParsed[dapp_encryption_public_key]) return
+
+ const appSession: APP_SESSION = JSON.parse(
+ existingStorageParsed[dapp_encryption_public_key],
+ ) as APP_SESSION
+
+ const { secretKey, session: storedSession } = appSession
+
+ const sharedSecret = tweetnacl.box.before(
+ bs58.decode(dapp_encryption_public_key),
+ bs58.decode(secretKey),
+ )
+
+ const { session } = decryptPayload(payload, nonce, sharedSecret)
+
+ // check if session and storedSession objects are equal
+ if (!isEqual(session, storedSession)) {
+ throw new Error('Session is not valid')
+ }
+
+ delete existingStorageParsed[dapp_encryption_public_key]
+
+ await LargeSecureStorage.setItem(
+ APP_SESSIONS_KEY,
+ JSON.stringify(existingStorageParsed),
+ )
+ },
+ [decryptPayload],
+ )
+
+ const getSignPayload = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ if (!dapp_encryption_public_key || !accounts) return
+
+ const existingStorage = await LargeSecureStorage.getItem(APP_SESSIONS_KEY)
+ if (!existingStorage) {
+ throw new Error('No sessions found')
+ }
+
+ const existingStorageParsed: APP_SESSIONS = JSON.parse(existingStorage)
+
+ if (!existingStorageParsed[dapp_encryption_public_key]) {
+ throw new Error('Session not found')
+ }
+
+ const {
+ secretKey,
+ session: storedSession,
+ publicKey,
+ } = JSON.parse(
+ existingStorageParsed[dapp_encryption_public_key],
+ ) as APP_SESSION
+
+ const sharedSecret = tweetnacl.box.before(
+ bs58.decode(dapp_encryption_public_key),
+ bs58.decode(secretKey),
+ )
+
+ const payloadData = decryptPayload(payload, nonce, sharedSecret)
+
+ const { session } = payloadData
+
+ if (!isEqual(session, storedSession)) {
+ throw new Error('Session is not valid')
+ }
+
+ const account = accounts[solAddressToHelium(publicKey)]
+
+ if (!account) {
+ throw new Error('Account not found please reconnect')
+ }
+
+ setCurrentAccount(account)
+
+ return payloadData
+ },
+ [accounts, setCurrentAccount, decryptPayload],
+ )
+
+ const signTransaction = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ const signTxnPayload: SignTransactionPayload = await getSignPayload(
+ dapp_encryption_public_key,
+ payload,
+ nonce,
+ )
+
+ if (!signTxnPayload) {
+ throw new Error('Sign transaction payload not found')
+ }
+
+ return signTxnPayload
+ },
+ [getSignPayload],
+ )
+
+ const signMessage = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ const signMessagePayload: string | undefined = await getSignPayload(
+ dapp_encryption_public_key,
+ payload,
+ nonce,
+ )
+
+ if (!signMessagePayload) {
+ throw new Error('Sign message payload not found')
+ }
+
+ const parsedPayload: SignMessagePayload = JSON.parse(signMessagePayload)
+
+ return parsedPayload
+ },
+ [getSignPayload],
+ )
+
+ const signAllTransactions = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ const signTransactionsPayload: string | undefined = await getSignPayload(
+ dapp_encryption_public_key,
+ payload,
+ nonce,
+ )
+
+ if (!signTransactionsPayload) {
+ throw new Error('Sign transactions payload not found')
+ }
+
+ const parsedPayload: SignTransactionsPayload = JSON.parse(
+ signTransactionsPayload,
+ )
+
+ return parsedPayload
+ },
+ [getSignPayload],
+ )
+
+ const signAndSendTransaction = useCallback(
+ async (
+ dapp_encryption_public_key: string,
+ payload: string,
+ nonce: string,
+ ) => {
+ const signAndSendTransactionPayload: string | undefined =
+ await getSignPayload(dapp_encryption_public_key, payload, nonce)
+
+ if (!signAndSendTransactionPayload) {
+ throw new Error('Sign and send transaction payload not found')
+ }
+
+ const parsedPayload: SignAndSendTransactionPayload = JSON.parse(
+ signAndSendTransactionPayload,
+ )
+
+ return parsedPayload
+ },
+ [getSignPayload],
+ )
+
+ return {
+ connect,
+ disconnect,
+ getSignPayload,
+ signTransaction,
+ signMessage,
+ signAllTransactions,
+ signAndSendTransaction,
+ getSharedSecret,
+ encryptPayload,
+ decryptPayload,
+ }
+}
+
+export default useSession
diff --git a/src/features/provider-methods/utils/index.ts b/src/features/provider-methods/utils/index.ts
new file mode 100644
index 00000000..cdb8df2e
--- /dev/null
+++ b/src/features/provider-methods/utils/index.ts
@@ -0,0 +1,146 @@
+import axios from 'axios'
+import cheerio from 'react-native-cheerio'
+
+export type ConnectMethod = {
+ app_url: string
+ dapp_encryption_public_key: string
+ redirect_link: string
+ cluster?: string
+}
+
+export type DisconnectMethod = {
+ dapp_encryption_public_key: string
+ nonce: string
+ redirect_link: string
+ payload: string
+ /** Encrypted JSON string with the following structure:
+ * {
+ * "session": "...", // token received from connect-method
+ * }
+ */
+}
+
+export type SignAndSendTransactionMethod = {
+ dapp_encryption_public_key: string
+ nonce: string
+ redirect_link: string
+ payload: string
+ /** Encrypted JSON string with the following structure:
+ * {
+ * "transaction": "...", // serialized transaction, base58-encoded
+ * "sendOptions": "..." // an optional Solana web3.js sendOptions object
+ * "session": "...", // token received from the connect method
+ * }
+ *
+ * transaction (required): The transaction that Helium will sign and submit, serialized and encoded in base58.
+ * sendOptions (optional): An optional object that specifies options for how Helium should submit the transaction. This object is defined in Solana web3.js.
+ * session (required): The session token received from the Connect method.
+ */
+}
+
+export type SignAllTransactionsMethod = {
+ dapp_encryption_public_key: string
+ nonce: string
+ redirect_link: string
+ payload: string
+ /** Encrypted JSON string with the following structure:
+ * {
+ * "transactions": "...", // serialized transactions, base58 encoded
+ * "session": "...", // token received from connect-method
+ * }
+ * transactions (required): An array of serialized transactions, encoded in base58.
+ * session (required): The session token received from the Connect method.
+ */
+}
+
+export type SignTransactionMethod = {
+ dapp_encryption_public_key: string
+ nonce: string
+ redirect_link: string
+ payload: string
+ /** Encrypted JSON string with the following structure:
+ * {
+ * "transaction": "...", // serialized transaction, base58 encoded
+ * "session": "...", // token received from connect-method
+ * }
+ */
+}
+
+export type SignMessageMethod = {
+ dapp_encryption_public_key: string
+ nonce: string
+ redirect_link: string
+ payload: string
+ /** Encrypted JSON string with the following structure:
+ * {
+ * "message": "...", // the message, base58 encoded
+ * "session": "...", // token received from connect-method
+ * "display": "utf8" | "hex", // the encoding to use when displaying the message
+ * }
+ * message (required): The message that should be signed by the user, encoded in base58. Helium will display this message to the user when they are prompted to sign.
+ * session (required): The session token received from the Connect method. Please see Handling Sessions for more details.
+ * display (optional): How you want us to display the string to the user. Defaults to utf8
+ */
+}
+
+/**
+ * Extracts metadata (title and icon) from a given URL
+ * @param {string} url - The URL to scrape
+ * @returns {Promise
diff --git a/src/features/solana/WalletSignBottomSheetTransaction.tsx b/src/features/solana/WalletSignBottomSheetTransaction.tsx
index df97a24d..8876d1b5 100644
--- a/src/features/solana/WalletSignBottomSheetTransaction.tsx
+++ b/src/features/solana/WalletSignBottomSheetTransaction.tsx
@@ -123,7 +123,7 @@ const WalletSignBottomSheetTransaction = ({
{uncollapsedAccounts.map((writableAccount) => (
-
+
{body}
diff --git a/src/features/solana/WritableAccountPreview.tsx b/src/features/solana/WritableAccountPreview.tsx
index 469409d6..68a0255f 100644
--- a/src/features/solana/WritableAccountPreview.tsx
+++ b/src/features/solana/WritableAccountPreview.tsx
@@ -118,7 +118,7 @@ export const WritableAccountPreview = ({
flexDirection="row"
justifyContent="space-between"
alignItems="stretch"
- backgroundColor="gray.900"
+ backgroundColor="cardBackground"
borderTopLeftRadius="2xl"
borderTopRightRadius="2xl"
padding="2"
@@ -127,7 +127,7 @@ export const WritableAccountPreview = ({
{t('browserScreen.estimatedAccountChanges')}
-
+
{writableAccount.pre.account && !writableAccount.post.account && (
@@ -188,7 +188,7 @@ export const WritableAccountPreview = ({
flexDirection="row"
justifyContent="space-between"
alignItems="stretch"
- backgroundColor="gray.900"
+ backgroundColor="cardBackground"
borderTopLeftRadius="2xl"
borderTopRightRadius="2xl"
padding="2"
@@ -197,14 +197,14 @@ export const WritableAccountPreview = ({
{t('browserScreen.instructionsAndPrograms')}
-
+
{instructions.map(({ parsed, raw }, index) => (
ReactNode
+ theme?: 'light' | 'dark'
}
export type WalletSignBottomSheetRef = {
diff --git a/src/features/swaps/SwapScreen.tsx b/src/features/swaps/SwapScreen.tsx
index 083b36d0..ae9ff9d2 100644
--- a/src/features/swaps/SwapScreen.tsx
+++ b/src/features/swaps/SwapScreen.tsx
@@ -67,13 +67,13 @@ import {
Keyboard,
Image,
} from 'react-native'
-import { Edge, useSafeAreaInsets } from 'react-native-safe-area-context'
-import { NavBarHeight } from '@components/ServiceNavBar'
+import { Edge } from 'react-native-safe-area-context'
import SegmentedControl from '@components/SegmentedControl'
import { Portal } from '@gorhom/portal'
import ScrollBox from '@components/ScrollBox'
import changeNavigationBarColor from 'react-native-navigation-bar-color'
import { useSolana } from '@features/solana/SolanaProvider'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { solAddressIsValid } from '../../utils/accountUtils'
import SwapItem from './SwapItem'
import { SwapNavigationProp } from './swapTypes'
@@ -88,7 +88,7 @@ enum SelectorMode {
const SwapScreen = () => {
const { t } = useTranslation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const spacing = useSpacing()
const { currentAccount } = useAccountStorage()
const { isDevnet, anchorProvider, connection } = useSolana()
@@ -704,9 +704,7 @@ const SwapScreen = () => {
flex={1}
paddingHorizontal="5"
style={{
- marginBottom: slippageInfoVisible
- ? 0
- : NavBarHeight + bottom + spacing['2xl'],
+ marginBottom: slippageInfoVisible ? 0 : bottomSpacing,
}}
>
diff --git a/src/features/txnDelegation/LinkWallet.tsx b/src/features/txnDelegation/LinkWallet.tsx
index 2f86b663..7d9ee0ee 100644
--- a/src/features/txnDelegation/LinkWallet.tsx
+++ b/src/features/txnDelegation/LinkWallet.tsx
@@ -133,17 +133,29 @@ const LinkWallet = () => {
}, [])
return (
-
+ <>
-
+
{t('linkWallet.title', { appName })}
-
+
{t('linkWallet.body', { appName })}
@@ -158,12 +170,16 @@ const LinkWallet = () => {
-
+
{t('linkWallet.yes')}
@@ -181,7 +197,8 @@ const LinkWallet = () => {
-
+
+ >
)
}
diff --git a/src/features/wallet/AccountManageTokenListScreen.tsx b/src/features/wallet/AccountManageTokenListScreen.tsx
index 2fc9f217..49fa5b60 100644
--- a/src/features/wallet/AccountManageTokenListScreen.tsx
+++ b/src/features/wallet/AccountManageTokenListScreen.tsx
@@ -23,8 +23,8 @@ import BackScreen from '@components/BackScreen'
import ScrollBox from '@components/ScrollBox'
import { BoxProps } from '@shopify/restyle'
import { Theme } from '@config/theme/theme'
-import { NavBarHeight } from '@components/ServiceNavBar'
import { useSolana } from '@features/solana/SolanaProvider'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
import { syncTokenAccounts } from '../../store/slices/balancesSlice'
import { useAppDispatch } from '../../store/store'
import AccountTokenCurrencyBalance from './AccountTokenCurrencyBalance'
@@ -114,6 +114,8 @@ const CheckableTokenListItem = ({
const AccountManageTokenListScreen: React.FC = () => {
const { visibleTokens, setVisibleTokens } = useVisibleTokens()
const { tokenAccounts } = useBalance()
+ const bottomSpacing = useBottomSpacing()
+
const mints = useMemo(() => {
return tokenAccounts
?.filter(
@@ -185,7 +187,7 @@ const AccountManageTokenListScreen: React.FC = () => {
renderItem={renderItem}
keyExtractor={keyExtractor}
contentContainerStyle={{
- paddingBottom: NavBarHeight,
+ paddingBottom: bottomSpacing,
}}
/>
diff --git a/src/features/wallet/AirdropScreen.tsx b/src/features/wallet/AirdropScreen.tsx
index bc011d2e..1351b3ea 100644
--- a/src/features/wallet/AirdropScreen.tsx
+++ b/src/features/wallet/AirdropScreen.tsx
@@ -23,16 +23,15 @@ import {
withRepeat,
withTiming,
} from 'react-native-reanimated'
-import { useSafeAreaInsets } from 'react-native-safe-area-context'
import ScrollBox from '@components/ScrollBox'
import HNT from '@assets/svgs/hnt.svg'
import { useMetaplexMetadata } from '@hooks/useMetaplexMetadata'
-import { NavBarHeight } from '@components/ServiceNavBar'
import {
WalletNavigationProp,
WalletStackParamList,
} from 'src/app/services/WalletService/pages/WalletPage'
import { useSolana } from '@features/solana/SolanaProvider'
+import { useBottomSpacing } from '@hooks/useBottomSpacing'
const DROP_HEIGHT = 79
@@ -40,7 +39,7 @@ type Route = RouteProp
const AirdropScreen = () => {
const navigation = useNavigation()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const { currentAccount } = useAccountStorage()
const { anchorProvider } = useSolana()
const { t } = useTranslation()
@@ -192,7 +191,7 @@ const AirdropScreen = () => {
{
const widgetGroup = 'group.com.helium.mobile.wallet.widget'
@@ -50,7 +49,7 @@ const TokensScreen = () => {
const { visibleTokens } = useVisibleTokens()
const colors = useColors()
const spacing = useSpacing()
- const { bottom } = useSafeAreaInsets()
+ const bottomSpacing = useBottomSpacing()
const { currentAccount, sortedAccounts, defaultAccountAddress } =
useAccountStorage()
const dispatch = useAppDispatch()
@@ -212,9 +211,9 @@ const TokensScreen = () => {
() => ({
backgroundColor: colors['base.white'],
paddingTop: spacing['4'],
- paddingBottom: NavBarHeight + bottom,
+ paddingBottom: bottomSpacing,
}),
- [colors, spacing, bottom],
+ [colors, spacing, bottomSpacing],
)
useEffect(() => {
diff --git a/src/hooks/useBottomSpacing.ts b/src/hooks/useBottomSpacing.ts
new file mode 100644
index 00000000..490b56c8
--- /dev/null
+++ b/src/hooks/useBottomSpacing.ts
@@ -0,0 +1,10 @@
+import { NavBarHeight } from '@components/ServiceNavBar'
+import { useSpacing } from '@config/theme/themeHooks'
+import { useSafeAreaInsets } from 'react-native-safe-area-context'
+
+export const useBottomSpacing = () => {
+ const { bottom } = useSafeAreaInsets()
+ const spacing = useSpacing()
+
+ return (bottom || spacing['2xl']) + NavBarHeight + spacing.xs
+}
diff --git a/src/utils/linking.ts b/src/utils/linking.ts
index 5b658600..7fd08ef5 100644
--- a/src/utils/linking.ts
+++ b/src/utils/linking.ts
@@ -30,6 +30,12 @@ export const authenticatedLinking: LinkingOptions = {
PaymentScreen: 'payment',
DappLoginScreen: 'dapp_login',
ImportPrivateKey: 'import_key/:key',
+ Connect: 'ul/v1/connect',
+ Disconnect: 'ul/v1/disconnect',
+ SignTransaction: 'ul/v1/signTransaction',
+ SignMessage: 'ul/v1/signMessage',
+ SignAllTransactions: 'ul/v1/signAllTransactions',
+ SignAndSendTransaction: 'ul/v1/signAndSendTransaction',
ServiceSheetNavigator: {
screens: {
Governance: {
diff --git a/yarn.lock b/yarn.lock
index e8a32693..5d923850 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1904,6 +1904,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/runtime@npm:^7.23.2":
+ version: 7.26.0
+ resolution: "@babel/runtime@npm:7.26.0"
+ dependencies:
+ regenerator-runtime: ^0.14.0
+ checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a
+ languageName: node
+ linkType: hard
+
"@babel/runtime@npm:^7.25.0":
version: 7.25.7
resolution: "@babel/runtime@npm:7.25.7"
@@ -1913,7 +1922,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/template@npm:^7.0.0, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3":
+"@babel/template@npm:^7.0.0, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.25.0, @babel/template@npm:^7.3.3":
version: 7.25.0
resolution: "@babel/template@npm:7.25.0"
dependencies:
@@ -2018,7 +2027,7 @@ __metadata:
languageName: node
linkType: hard
-"@bonfida/spl-name-service@npm:^1.1.1":
+"@bonfida/spl-name-service@npm:1.1.1":
version: 1.1.1
resolution: "@bonfida/spl-name-service@npm:1.1.1"
dependencies:
@@ -2075,7 +2084,7 @@ __metadata:
languageName: node
linkType: hard
-"@coral-xyz/anchor@npm:^0.28.0":
+"@coral-xyz/anchor@npm:0.28.0, @coral-xyz/anchor@npm:^0.28.0":
version: 0.28.0
resolution: "@coral-xyz/anchor@npm:0.28.0"
dependencies:
@@ -3163,28 +3172,15 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/add@npm:^5.0.3":
- version: 5.0.3
- resolution: "@graphql-codegen/add@npm:5.0.3"
- dependencies:
- "@graphql-codegen/plugin-helpers": ^5.0.3
- tslib: ~2.6.0
- peerDependencies:
- graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- checksum: 5196b6c64907f03dc1adc0ac4f98ed5fe69abe0eb87027a55dfc14b178cc1fee2bc47f68c8f5a68ce7aa4bc5a4f970f983d1d85b6d7a20489e50657baccd2ad0
- languageName: node
- linkType: hard
-
-"@graphql-codegen/cli@npm:^5.0.0":
- version: 5.0.3
- resolution: "@graphql-codegen/cli@npm:5.0.3"
+"@graphql-codegen/cli@npm:5.0.0":
+ version: 5.0.0
+ resolution: "@graphql-codegen/cli@npm:5.0.0"
dependencies:
"@babel/generator": ^7.18.13
"@babel/template": ^7.18.10
"@babel/types": ^7.18.13
- "@graphql-codegen/client-preset": ^4.4.0
- "@graphql-codegen/core": ^4.0.2
- "@graphql-codegen/plugin-helpers": ^5.0.3
+ "@graphql-codegen/core": ^4.0.0
+ "@graphql-codegen/plugin-helpers": ^5.0.1
"@graphql-tools/apollo-engine-loader": ^8.0.0
"@graphql-tools/code-file-loader": ^8.0.0
"@graphql-tools/git-loader": ^8.0.0
@@ -3195,12 +3191,12 @@ __metadata:
"@graphql-tools/prisma-loader": ^8.0.0
"@graphql-tools/url-loader": ^8.0.0
"@graphql-tools/utils": ^10.0.0
- "@whatwg-node/fetch": ^0.9.20
+ "@whatwg-node/fetch": ^0.8.0
chalk: ^4.1.0
cosmiconfig: ^8.1.3
debounce: ^1.2.0
detect-indent: ^6.0.0
- graphql-config: ^5.1.1
+ graphql-config: ^5.0.2
inquirer: ^8.0.0
is-glob: ^4.0.1
jiti: ^1.17.1
@@ -3225,34 +3221,11 @@ __metadata:
graphql-code-generator: cjs/bin.js
graphql-codegen: cjs/bin.js
graphql-codegen-esm: esm/bin.js
- checksum: 8a28419b25e73b4edf5006a93243a24ecdcc030b80d19dbf9153326c45382b2654b9275fa5b29035864652e3698196883e93ba593339cba43221c46cc20da697
- languageName: node
- linkType: hard
-
-"@graphql-codegen/client-preset@npm:^4.4.0":
- version: 4.5.0
- resolution: "@graphql-codegen/client-preset@npm:4.5.0"
- dependencies:
- "@babel/helper-plugin-utils": ^7.20.2
- "@babel/template": ^7.20.7
- "@graphql-codegen/add": ^5.0.3
- "@graphql-codegen/gql-tag-operations": 4.0.11
- "@graphql-codegen/plugin-helpers": ^5.1.0
- "@graphql-codegen/typed-document-node": ^5.0.11
- "@graphql-codegen/typescript": ^4.1.1
- "@graphql-codegen/typescript-operations": ^4.3.1
- "@graphql-codegen/visitor-plugin-common": ^5.5.0
- "@graphql-tools/documents": ^1.0.0
- "@graphql-tools/utils": ^10.0.0
- "@graphql-typed-document-node/core": 3.2.0
- tslib: ~2.6.0
- peerDependencies:
- graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- checksum: 8247074bdb5210c2822e1f3d9c6a37c21d642a4d2241424f1afefdd3a7a29a984da8b9efd250876d6b8f89e056661c70ed70cb96060e71d0f36d5339405f5ed9
+ checksum: 55c3cafb08ee33667a896aa1c56e27ff2b6eae123d6116ff299be308038a543fb7d58c4179f34a3dff64079065d549dc05bfd95208c8c3024cecdd6307c0353b
languageName: node
linkType: hard
-"@graphql-codegen/core@npm:^4.0.2":
+"@graphql-codegen/core@npm:^4.0.0":
version: 4.0.2
resolution: "@graphql-codegen/core@npm:4.0.2"
dependencies:
@@ -3266,21 +3239,6 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/gql-tag-operations@npm:4.0.11":
- version: 4.0.11
- resolution: "@graphql-codegen/gql-tag-operations@npm:4.0.11"
- dependencies:
- "@graphql-codegen/plugin-helpers": ^5.1.0
- "@graphql-codegen/visitor-plugin-common": 5.5.0
- "@graphql-tools/utils": ^10.0.0
- auto-bind: ~4.0.0
- tslib: ~2.6.0
- peerDependencies:
- graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- checksum: 68d5eac31547b7012551a72a41caa2be532b85e08efe3efaf7744f27ea4b355a59f032a99f3394b1c2d0eea045d30e2216bf5d86379cbc0e926bf51cb12b4de2
- languageName: node
- linkType: hard
-
"@graphql-codegen/plugin-helpers@npm:^2.7.2":
version: 2.7.2
resolution: "@graphql-codegen/plugin-helpers@npm:2.7.2"
@@ -3313,7 +3271,7 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.1.0":
+"@graphql-codegen/plugin-helpers@npm:^5.0.0, @graphql-codegen/plugin-helpers@npm:^5.0.1, @graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.1.0":
version: 5.1.0
resolution: "@graphql-codegen/plugin-helpers@npm:5.1.0"
dependencies:
@@ -3329,7 +3287,7 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/schema-ast@npm:^4.0.2":
+"@graphql-codegen/schema-ast@npm:^4.0.0, @graphql-codegen/schema-ast@npm:^4.0.2":
version: 4.1.0
resolution: "@graphql-codegen/schema-ast@npm:4.1.0"
dependencies:
@@ -3342,37 +3300,22 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/typed-document-node@npm:^5.0.11":
- version: 5.0.11
- resolution: "@graphql-codegen/typed-document-node@npm:5.0.11"
- dependencies:
- "@graphql-codegen/plugin-helpers": ^5.1.0
- "@graphql-codegen/visitor-plugin-common": 5.5.0
- auto-bind: ~4.0.0
- change-case-all: 1.0.15
- tslib: ~2.6.0
- peerDependencies:
- graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- checksum: c14b16c06910181355c4b3b0d01e023ca394889cf18c1262841280c84c2c00a27692359d8703d4545832183749f185ebf0d519b1ca6970043fce6fb8687aaa9c
- languageName: node
- linkType: hard
-
-"@graphql-codegen/typescript-operations@npm:^4.0.1, @graphql-codegen/typescript-operations@npm:^4.3.1":
- version: 4.3.1
- resolution: "@graphql-codegen/typescript-operations@npm:4.3.1"
+"@graphql-codegen/typescript-operations@npm:4.0.1":
+ version: 4.0.1
+ resolution: "@graphql-codegen/typescript-operations@npm:4.0.1"
dependencies:
- "@graphql-codegen/plugin-helpers": ^5.1.0
- "@graphql-codegen/typescript": ^4.1.1
- "@graphql-codegen/visitor-plugin-common": 5.5.0
+ "@graphql-codegen/plugin-helpers": ^5.0.0
+ "@graphql-codegen/typescript": ^4.0.1
+ "@graphql-codegen/visitor-plugin-common": 4.0.1
auto-bind: ~4.0.0
- tslib: ~2.6.0
+ tslib: ~2.5.0
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
- checksum: 9618fb8287d6f5d94942da67e48826ae85d9ed2df376a4da686f37438492a4870f209f0473356abd3140762d34021f4c8166a7c8cab63ace8be5f423a8e2f0d3
+ checksum: 82cd58ceb7406a3ff7aa5b36a58c9303fd819259679c2de10411f9e22c4fd142068d711714f68259c64eab86ea0a2b3d761959fa59fa5140ca3f1382a5ab5169
languageName: node
linkType: hard
-"@graphql-codegen/typescript-rtk-query@npm:^3.1.1":
+"@graphql-codegen/typescript-rtk-query@npm:3.1.1":
version: 3.1.1
resolution: "@graphql-codegen/typescript-rtk-query@npm:3.1.1"
dependencies:
@@ -3393,7 +3336,22 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/typescript@npm:^4.0.1, @graphql-codegen/typescript@npm:^4.1.1":
+"@graphql-codegen/typescript@npm:4.0.1":
+ version: 4.0.1
+ resolution: "@graphql-codegen/typescript@npm:4.0.1"
+ dependencies:
+ "@graphql-codegen/plugin-helpers": ^5.0.0
+ "@graphql-codegen/schema-ast": ^4.0.0
+ "@graphql-codegen/visitor-plugin-common": 4.0.1
+ auto-bind: ~4.0.0
+ tslib: ~2.5.0
+ peerDependencies:
+ graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ checksum: f360b7204dc33b918d1ece88b65a46a4eac89e7c3f729886e954ebdc405d1279de6fc5a688580a4aba50826ca663dae03bcda2ac72189f5afbfc1a1727d188a6
+ languageName: node
+ linkType: hard
+
+"@graphql-codegen/typescript@npm:^4.0.1":
version: 4.1.1
resolution: "@graphql-codegen/typescript@npm:4.1.1"
dependencies:
@@ -3428,7 +3386,27 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-codegen/visitor-plugin-common@npm:5.5.0, @graphql-codegen/visitor-plugin-common@npm:^5.5.0":
+"@graphql-codegen/visitor-plugin-common@npm:4.0.1":
+ version: 4.0.1
+ resolution: "@graphql-codegen/visitor-plugin-common@npm:4.0.1"
+ dependencies:
+ "@graphql-codegen/plugin-helpers": ^5.0.0
+ "@graphql-tools/optimize": ^2.0.0
+ "@graphql-tools/relay-operation-optimizer": ^7.0.0
+ "@graphql-tools/utils": ^10.0.0
+ auto-bind: ~4.0.0
+ change-case-all: 1.0.15
+ dependency-graph: ^0.11.0
+ graphql-tag: ^2.11.0
+ parse-filepath: ^1.0.2
+ tslib: ~2.5.0
+ peerDependencies:
+ graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ checksum: 72fe72850bcf9907c46ee85cf80ca5f7313418953fc6bc09b761145260ceb9e79199e92c7b3467e9b6371342e70234af5e1be7ee664457a4fdec92ea3bed878a
+ languageName: node
+ linkType: hard
+
+"@graphql-codegen/visitor-plugin-common@npm:5.5.0":
version: 5.5.0
resolution: "@graphql-codegen/visitor-plugin-common@npm:5.5.0"
dependencies:
@@ -3509,18 +3487,6 @@ __metadata:
languageName: node
linkType: hard
-"@graphql-tools/documents@npm:^1.0.0":
- version: 1.0.1
- resolution: "@graphql-tools/documents@npm:1.0.1"
- dependencies:
- lodash.sortby: ^4.7.0
- tslib: ^2.4.0
- peerDependencies:
- graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
- checksum: c6ff859d2673dbf884f19d6319735afacc6bff2df6f8ea3dbf56839d01568f61210f256f0905156f123428cc24962ada26b37903263699fc8cd7efb8849a6508
- languageName: node
- linkType: hard
-
"@graphql-tools/executor-graphql-ws@npm:^1.3.1":
version: 1.3.1
resolution: "@graphql-tools/executor-graphql-ws@npm:1.3.1"
@@ -3889,26 +3855,26 @@ __metadata:
languageName: node
linkType: hard
-"@helium/account-fetch-cache-hooks@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/account-fetch-cache-hooks@npm:0.9.18"
+"@helium/account-fetch-cache-hooks@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/account-fetch-cache-hooks@npm:0.9.14"
dependencies:
- "@helium/account-fetch-cache": ^0.9.18
+ "@helium/account-fetch-cache": ^0.9.14
"@solana/web3.js": ^1.78.8
react-async-hook: ^4.0.0
peerDependencies:
react: ^16.8 || ^17 || ^18
react-dom: ^16.8 || ^17 || ^18
- checksum: cb83f66cb17f1ea1d000e5dfc0085612ae8d9e16cfc572f34e7275018bd0068e7ed581786894c02a978b0b7236ea39f58f34a4480fb4409dc2581cc0de903045
+ checksum: a72612d800ffe5f8127050f8a5c033ac740cd22ba77d9e1091e3f2b77cfcbf02838da7e76042e6a4c0c2405d32ada1372a6bdbf275f8c55e589e58e36b0451af
languageName: node
linkType: hard
-"@helium/account-fetch-cache@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/account-fetch-cache@npm:0.9.18"
+"@helium/account-fetch-cache@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/account-fetch-cache@npm:0.9.14"
dependencies:
"@solana/web3.js": ^1.78.8
- checksum: 07ba1f9f3357e3185a8d730a4b590695ac6dbd864ae415a4daef4652fa638650a533eb5d1a14499645760e8039b0dbf1a0cb7227057971d07b41848b36ed152b
+ checksum: 519ed605322ed4ea519068d43666df640f899882e258453c11fe1cb83bcb82b8b5be02b38467ddf5b96cd531051dc9d62c22fccb8265c110e2a5653b3032b3d8
languageName: node
linkType: hard
@@ -3982,7 +3948,7 @@ __metadata:
languageName: node
linkType: hard
-"@helium/anchor-resolvers@npm:^0.9.18":
+"@helium/anchor-resolvers@npm:^0.9.14, @helium/anchor-resolvers@npm:^0.9.15, @helium/anchor-resolvers@npm:^0.9.18":
version: 0.9.18
resolution: "@helium/anchor-resolvers@npm:0.9.18"
dependencies:
@@ -3994,6 +3960,19 @@ __metadata:
languageName: node
linkType: hard
+"@helium/circuit-breaker-sdk@npm:0.9.14, @helium/circuit-breaker-sdk@npm:^0.9.14":
+ version: 0.9.14
+ resolution: "@helium/circuit-breaker-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/idls": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ checksum: 1ccbf2ca4de833066b63592756ce4cfc0b5135a97d8f3f3a006d948d226e094ab992a80643ee0ef5436540aa38e69a7bbc97070fef983be89e6ea21eff72b498
+ languageName: node
+ linkType: hard
+
"@helium/circuit-breaker-sdk@npm:^0.6.6":
version: 0.6.6
resolution: "@helium/circuit-breaker-sdk@npm:0.6.6"
@@ -4046,6 +4025,16 @@ __metadata:
languageName: node
linkType: hard
+"@helium/currency-utils@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/currency-utils@npm:0.9.14"
+ dependencies:
+ "@solana/spl-token": ^0.3.8
+ "@solana/web3.js": ^1.78.8
+ checksum: 77854dcc5149621ad9b97c54c1419e2f5f0bb7eee6cdacea2c2d56452087627fe4d1323b15eb84ab5f7cf1b58f1fdb051ce94e23edadd6b536f502b08a863480
+ languageName: node
+ linkType: hard
+
"@helium/currency-utils@npm:^0.6.6":
version: 0.6.6
resolution: "@helium/currency-utils@npm:0.6.6"
@@ -4067,16 +4056,6 @@ __metadata:
languageName: node
linkType: hard
-"@helium/currency-utils@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/currency-utils@npm:0.9.18"
- dependencies:
- "@solana/spl-token": ^0.3.8
- "@solana/web3.js": ^1.78.8
- checksum: c43f8f0c21123b506a3b04cc085adfeb77924c735e0ab66348d71d6dbc98ff36285abef9e18309651991dd66a352ae80555f21a47b5924d6fa7ecabecb1e5721
- languageName: node
- linkType: hard
-
"@helium/currency@npm:^4.7.3":
version: 4.10.2
resolution: "@helium/currency@npm:4.10.2"
@@ -4086,6 +4065,22 @@ __metadata:
languageName: node
linkType: hard
+"@helium/data-credits-sdk@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/data-credits-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/circuit-breaker-sdk": ^0.9.14
+ "@helium/helium-sub-daos-sdk": ^0.9.14
+ "@helium/idls": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ crypto-js: ^4.1.1
+ checksum: f6f7204a0de8cb40ee75f58407bb34e17d744af08ae649ecf232abfef104564ddc29f31d978f7b6fa2da644d56f4a9f114aa3dfd453019dfbacf81bb94481f37
+ languageName: node
+ linkType: hard
+
"@helium/data-credits-sdk@npm:^0.6.6":
version: 0.6.6
resolution: "@helium/data-credits-sdk@npm:0.6.6"
@@ -4118,37 +4113,20 @@ __metadata:
languageName: node
linkType: hard
-"@helium/data-credits-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/data-credits-sdk@npm:0.9.18"
- dependencies:
- "@coral-xyz/anchor": ^0.28.0
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/circuit-breaker-sdk": ^0.9.18
- "@helium/helium-sub-daos-sdk": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/spl-utils": ^0.9.18
- bn.js: ^5.2.0
- bs58: ^4.0.1
- crypto-js: ^4.1.1
- checksum: 994260148624e2a1289c88e933309aac400ea421d5a6be558817ed1492ef570d5c23a52c009f811cab7c9946b6bbff815c3f885239a40472996744f928c72c92
- languageName: node
- linkType: hard
-
-"@helium/distributor-oracle@npm:0.9.18":
- version: 0.9.18
- resolution: "@helium/distributor-oracle@npm:0.9.18"
+"@helium/distributor-oracle@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/distributor-oracle@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
"@fastify/cors": ^8.1.1
- "@helium/account-fetch-cache": ^0.9.18
+ "@helium/account-fetch-cache": ^0.9.14
"@helium/address": ^4.10.2
- "@helium/helium-entity-manager-sdk": ^0.9.18
- "@helium/helium-sub-daos-sdk": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/lazy-distributor-sdk": ^0.9.18
- "@helium/rewards-oracle-sdk": ^0.9.18
- "@helium/spl-utils": ^0.9.18
+ "@helium/helium-entity-manager-sdk": ^0.9.14
+ "@helium/helium-sub-daos-sdk": ^0.9.14
+ "@helium/idls": ^0.9.14
+ "@helium/lazy-distributor-sdk": ^0.9.14
+ "@helium/rewards-oracle-sdk": ^0.9.14
+ "@helium/spl-utils": ^0.9.14
"@metaplex-foundation/mpl-bubblegum": ^0.7.0
"@solana/spl-token": ^0.3.8
"@types/sequelize": ^4.28.14
@@ -4164,21 +4142,39 @@ __metadata:
prom-client: ^15.0.0
sequelize: ^6.28.0
typescript-collections: ^1.3.3
- checksum: d283938488e48a9c9860e7c8abe9093bd41240b83afa4cf548e4a2a5ebd6c538cfbdd3beafd61bd7a0912afe871f6f1212d6a1671455dffc3f97dbed6e155f83
+ checksum: 4cb6a95b24d02f02e5b0620646c1265ef464a551775c302d686f1f620eb1b3baef99eadd4707e6692fa8458784648a57cb27a717699bdf4650bf394ecfa92ab9
languageName: node
linkType: hard
-"@helium/fanout-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/fanout-sdk@npm:0.9.18"
+"@helium/fanout-sdk@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/fanout-sdk@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/spl-utils": ^0.9.18
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/idls": ^0.9.14
bn.js: ^5.2.0
bs58: ^4.0.1
- checksum: 5f6accd8638b72202353dbdcd9aadeb5f157ea1cd6cb8c6c5fa4ba1ec7020412d45ad8a883590ddfead7f82387e35c2b93debec7cd1508d336b31d77de5ae589
+ checksum: 9f84f1e5b141d5cacde952b805ee2a8f18ace52c89bda8dc09a8aba6d675afa5458f7f7d7acf21b69720b159790e6306fe7cf62af992ae6c04a72e64bdf524b5
+ languageName: node
+ linkType: hard
+
+"@helium/helium-entity-manager-sdk@npm:0.9.14, @helium/helium-entity-manager-sdk@npm:^0.9.14":
+ version: 0.9.14
+ resolution: "@helium/helium-entity-manager-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/address": ^4.10.2
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/helium-sub-daos-sdk": ^0.9.14
+ "@helium/idls": ^0.9.14
+ "@helium/no-emit-sdk": ^0.9.14
+ "@helium/spl-utils": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ crypto-js: ^4.1.1
+ js-sha256: ^0.9.0
+ checksum: 24c6825b2226ba40ad433d1c7ec132effef96f535b5fb34d2abbf94c7dfed218b21cc53fc2ecb151c7152703e3b2c8359e383446fc15d89f6022f1918f6ab9de
languageName: node
linkType: hard
@@ -4220,32 +4216,13 @@ __metadata:
languageName: node
linkType: hard
-"@helium/helium-entity-manager-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/helium-entity-manager-sdk@npm:0.9.18"
+"@helium/helium-react-hooks@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/helium-react-hooks@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
- "@helium/address": ^4.10.2
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/helium-sub-daos-sdk": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/no-emit-sdk": ^0.9.18
- "@helium/spl-utils": ^0.9.18
- bn.js: ^5.2.0
- bs58: ^4.0.1
- crypto-js: ^4.1.1
- js-sha256: ^0.9.0
- checksum: 4c03cae6d77af4acbcdec891b669b40898255805011e536f818e31fef08b9611c7df72fc0754c64f7ffcaa44d923f5ea8c47d1f40c0d47b12b4bb922e31a06c4
- languageName: node
- linkType: hard
-
-"@helium/helium-react-hooks@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/helium-react-hooks@npm:0.9.18"
- dependencies:
- "@coral-xyz/anchor": ^0.28.0
- "@helium/account-fetch-cache": ^0.9.18
- "@helium/account-fetch-cache-hooks": ^0.9.18
+ "@helium/account-fetch-cache": ^0.9.14
+ "@helium/account-fetch-cache-hooks": ^0.9.14
"@solana/spl-token": ^0.3.8
"@solana/web3.js": ^1.78.8
bs58: ^4.0.1
@@ -4255,7 +4232,22 @@ __metadata:
"@solana/wallet-adapter-react": ^0.15.32
react: ^16.8 || ^17 || ^18
react-dom: ^16.8 || ^17 || ^18
- checksum: 77088e3184a25327373db663af4e549687f3ad9bf465ee29a365ca70d35041dd523a6fd244f92e1ac00a1b2f8aadbea2926bdd4bd41a15fcd4b3db4c868d070b
+ checksum: cd5106ab16e0003758220609852274415cee1ed10210d291ba66cdefaa904ec73c61a5158b1bb2d859fc73310f7a6de41a348f4c6e1246bae7df56702ea783c3
+ languageName: node
+ linkType: hard
+
+"@helium/helium-sub-daos-sdk@npm:0.9.14, @helium/helium-sub-daos-sdk@npm:^0.9.14":
+ version: 0.9.14
+ resolution: "@helium/helium-sub-daos-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/circuit-breaker-sdk": ^0.9.14
+ "@helium/treasury-management-sdk": ^0.9.14
+ "@helium/voter-stake-registry-sdk": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ checksum: 91eef5ad462687c7eeda5cd4692d0450c99f4b8ad6cf1158956c0d8d788883996f82673b93cb3011688ee611d957062a87c965cb73900304587e1a95d20d0f6b
languageName: node
linkType: hard
@@ -4289,22 +4281,6 @@ __metadata:
languageName: node
linkType: hard
-"@helium/helium-sub-daos-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/helium-sub-daos-sdk@npm:0.9.18"
- dependencies:
- "@coral-xyz/anchor": ^0.28.0
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/circuit-breaker-sdk": ^0.9.18
- "@helium/spl-utils": ^0.9.18
- "@helium/treasury-management-sdk": ^0.9.18
- "@helium/voter-stake-registry-sdk": ^0.9.18
- bn.js: ^5.2.0
- bs58: ^4.0.1
- checksum: af0ec342d98671ece5b211bec7eda68a95b7f6c07b3ec5db830a6d192d5364d412e44df97bfc838ece7ad0c1a7278edbdadaaa851c9b934661b12076da9a3ecc
- languageName: node
- linkType: hard
-
"@helium/hotspot-utils@npm:^0.6.6":
version: 0.6.6
resolution: "@helium/hotspot-utils@npm:0.6.6"
@@ -4350,16 +4326,16 @@ __metadata:
languageName: node
linkType: hard
-"@helium/idls@npm:0.9.18, @helium/idls@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/idls@npm:0.9.18"
+"@helium/idls@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/idls@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
"@solana/web3.js": ^1.78.8
bn.js: ^5.2.0
borsh: ^0.7.0
bs58: ^4.0.1
- checksum: 06959b002ce88faca3e8fa20efce068a2ee0019d91617ca0b5e4fa07d99b3f911141840fd4258f02c42dc457062eb3fe50377832657c8603dd4f9dd7a7704acd
+ checksum: a3ea8d58c1885d2ec392b6a256c0cd7e89e3b89824810dcbd0c8979f832c8683449895aed1654af08ff3d6ebddc52e34181c89a5a113e62a7b64f377a7574819
languageName: node
linkType: hard
@@ -4402,7 +4378,33 @@ __metadata:
languageName: node
linkType: hard
-"@helium/lazy-distributor-sdk@npm:^0.9.18":
+"@helium/idls@npm:^0.9.14, @helium/idls@npm:^0.9.15, @helium/idls@npm:^0.9.18":
+ version: 0.9.18
+ resolution: "@helium/idls@npm:0.9.18"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@solana/web3.js": ^1.78.8
+ bn.js: ^5.2.0
+ borsh: ^0.7.0
+ bs58: ^4.0.1
+ checksum: 06959b002ce88faca3e8fa20efce068a2ee0019d91617ca0b5e4fa07d99b3f911141840fd4258f02c42dc457062eb3fe50377832657c8603dd4f9dd7a7704acd
+ languageName: node
+ linkType: hard
+
+"@helium/lazy-distributor-sdk@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/lazy-distributor-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/circuit-breaker-sdk": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ checksum: af6a6ba42e0450c821fe5b971be4c98c27c4ea2b02d8cefcf80bad00b17e42db4b2cd2127d396c5b8bb238be1c5436bdf2f3ee63a9057976ee6ce76293a130a4
+ languageName: node
+ linkType: hard
+
+"@helium/lazy-distributor-sdk@npm:^0.9.14":
version: 0.9.18
resolution: "@helium/lazy-distributor-sdk@npm:0.9.18"
dependencies:
@@ -4416,7 +4418,7 @@ __metadata:
languageName: node
linkType: hard
-"@helium/modular-governance-hooks@npm:^0.0.13":
+"@helium/modular-governance-hooks@npm:0.0.13":
version: 0.0.13
resolution: "@helium/modular-governance-hooks@npm:0.0.13"
dependencies:
@@ -4454,25 +4456,25 @@ __metadata:
languageName: node
linkType: hard
-"@helium/modular-governance-idls@npm:^0.0.15":
- version: 0.0.15
- resolution: "@helium/modular-governance-idls@npm:0.0.15"
+"@helium/modular-governance-idls@npm:^0.0.12":
+ version: 0.0.12
+ resolution: "@helium/modular-governance-idls@npm:0.0.12"
dependencies:
"@coral-xyz/anchor": ^0.28.0
"@solana/web3.js": ^1.78.4
- checksum: cbfaa2a83b074fb24d138de1901acaa7a0cf0de715bdabb3fdad9ab04b59a34e5f6c02216fdb6b6d78d4fa48bf80fe76d2c657107458f9d9b53d64aa532bc547
+ checksum: 606c888d1f1af24aeae2b3f011ee2db19f17ce78b3bf37fe6bebaccc3e8e040b4e365d3fa32d4a4e42d181efdc35dc53dc0bf701b5b85065cab167e307c7f035
languageName: node
linkType: hard
-"@helium/nft-proxy-sdk@npm:^0.0.15":
- version: 0.0.15
- resolution: "@helium/nft-proxy-sdk@npm:0.0.15"
+"@helium/nft-proxy-sdk@npm:^0.0.12":
+ version: 0.0.12
+ resolution: "@helium/nft-proxy-sdk@npm:0.0.12"
dependencies:
"@coral-xyz/anchor": ^0.28.0
"@helium/anchor-resolvers": ^0.2.17
"@helium/modular-governance-idls": ^0.0.10
"@solana/spl-token": ^0.3.8
- checksum: ce22c3b786b00bb1a64baa33b040b0530d87420b49ab5b0b8a5704fbc184c71d93c01120d4fc8cf9fdc347b2a4a38c422011d86cc3e5e090243ee630f29e9456
+ checksum: e70478c9ed007a1044ff7c76d0e0fdaf1163b489772893b8f4b52dd9d69d194aee71bc63a181a81c766dc459474cdbf3403035cc1f43e2741e89c139e3881b8b
languageName: node
linkType: hard
@@ -4489,7 +4491,7 @@ __metadata:
languageName: node
linkType: hard
-"@helium/no-emit-sdk@npm:^0.9.18":
+"@helium/no-emit-sdk@npm:^0.9.14":
version: 0.9.18
resolution: "@helium/no-emit-sdk@npm:0.9.18"
dependencies:
@@ -4534,7 +4536,7 @@ __metadata:
languageName: node
linkType: hard
-"@helium/organization-sdk@npm:^0.0.13":
+"@helium/organization-sdk@npm:0.0.13, @helium/organization-sdk@npm:^0.0.13":
version: 0.0.13
resolution: "@helium/organization-sdk@npm:0.0.13"
dependencies:
@@ -4546,6 +4548,21 @@ __metadata:
languageName: node
linkType: hard
+"@helium/position-voting-rewards-sdk@npm:^0.9.14":
+ version: 0.9.15
+ resolution: "@helium/position-voting-rewards-sdk@npm:0.9.15"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.15
+ "@helium/idls": ^0.9.15
+ "@helium/spl-utils": ^0.9.15
+ "@solana/spl-token": ^0.3.8
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ checksum: e0cac754a5d44ca491127922320d23a6e424cc3a6ad29820f5671906eb52c60d1a08262e091cd523e3e19ae646d4e60641b0a1314dfce612bb72a8d6f4b95924
+ languageName: node
+ linkType: hard
+
"@helium/proposal-sdk@npm:^0.0.13":
version: 0.0.13
resolution: "@helium/proposal-sdk@npm:0.0.13"
@@ -4650,7 +4667,7 @@ __metadata:
languageName: node
linkType: hard
-"@helium/rewards-oracle-sdk@npm:^0.9.18":
+"@helium/rewards-oracle-sdk@npm:^0.9.14":
version: 0.9.18
resolution: "@helium/rewards-oracle-sdk@npm:0.9.18"
dependencies:
@@ -4664,14 +4681,14 @@ __metadata:
languageName: node
linkType: hard
-"@helium/spl-utils@npm:0.9.18, @helium/spl-utils@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/spl-utils@npm:0.9.18"
+"@helium/spl-utils@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/spl-utils@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
- "@helium/account-fetch-cache": ^0.9.18
+ "@helium/account-fetch-cache": ^0.9.14
"@helium/address": ^4.10.2
- "@helium/anchor-resolvers": ^0.9.18
+ "@helium/anchor-resolvers": ^0.9.14
"@metaplex-foundation/mpl-token-metadata": ^2.10.0
"@solana/spl-account-compression": ^0.1.7
"@solana/spl-token": ^0.3.8
@@ -4680,7 +4697,7 @@ __metadata:
bn.js: ^5.2.0
borsh: ^0.7.0
bs58: ^4.0.1
- checksum: 4ee452a9f424fc0fce51d4a3753af1537dae05884affb8a024b103d483fe323552f87419644b23aef89a44b16d101633f875f0d672c10993ce133a43f4274cee
+ checksum: f604647b63e0432eec4384427d1cd823485d4236a980e2a7f347f286aea3fd21cc3700fd7f58e853e166e17d879967b8776964528f169fb1442529ef839c0521
languageName: node
linkType: hard
@@ -4724,7 +4741,27 @@ __metadata:
languageName: node
linkType: hard
-"@helium/state-controller-sdk@npm:^0.0.13":
+"@helium/spl-utils@npm:^0.9.14, @helium/spl-utils@npm:^0.9.15, @helium/spl-utils@npm:^0.9.18":
+ version: 0.9.18
+ resolution: "@helium/spl-utils@npm:0.9.18"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/account-fetch-cache": ^0.9.18
+ "@helium/address": ^4.10.2
+ "@helium/anchor-resolvers": ^0.9.18
+ "@metaplex-foundation/mpl-token-metadata": ^2.10.0
+ "@solana/spl-account-compression": ^0.1.7
+ "@solana/spl-token": ^0.3.8
+ "@solana/web3.js": ^1.78.8
+ axios: ^1.5.0
+ bn.js: ^5.2.0
+ borsh: ^0.7.0
+ bs58: ^4.0.1
+ checksum: 4ee452a9f424fc0fce51d4a3753af1537dae05884affb8a024b103d483fe323552f87419644b23aef89a44b16d101633f875f0d672c10993ce133a43f4274cee
+ languageName: node
+ linkType: hard
+
+"@helium/state-controller-sdk@npm:0.0.13":
version: 0.0.13
resolution: "@helium/state-controller-sdk@npm:0.0.13"
dependencies:
@@ -4735,9 +4772,9 @@ __metadata:
languageName: node
linkType: hard
-"@helium/sus@npm:0.9.18":
- version: 0.9.18
- resolution: "@helium/sus@npm:0.9.18"
+"@helium/sus@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/sus@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
"@metaplex-foundation/mpl-token-metadata": ^2.10.0
@@ -4746,7 +4783,7 @@ __metadata:
axios: ^1.6.5
bn.js: ^5.2.0
bs58: ^4.0.1
- checksum: bb4f5fd1e6e22b8f1a9185414da9387cb9a68a6310ce1680ebb77279a57966c4c2a65bca99dba32966e4847d75ff455305edcf7a014751c2fab0362a3d5fa7d5
+ checksum: ff4be446ea060511924f32ddaac4236bd3db0a0ae59065f4565dec4505e2b31f709ae53322cdb240a85dd9a6daa0c2600f826eeda3a4b306de259660d578581a
languageName: node
linkType: hard
@@ -4776,6 +4813,20 @@ __metadata:
languageName: node
linkType: hard
+"@helium/treasury-management-sdk@npm:0.9.14, @helium/treasury-management-sdk@npm:^0.9.14":
+ version: 0.9.14
+ resolution: "@helium/treasury-management-sdk@npm:0.9.14"
+ dependencies:
+ "@coral-xyz/anchor": ^0.28.0
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/circuit-breaker-sdk": ^0.9.14
+ "@helium/idls": ^0.9.14
+ bn.js: ^5.2.0
+ bs58: ^4.0.1
+ checksum: a46291b78876591fac3900ac3784e6fe7427fae56982a2b7830c2a5194c919307ef520e98a1f66b84cec1896c59905f3a917497fa0557f67ff7ae07dff3dfa0f
+ languageName: node
+ linkType: hard
+
"@helium/treasury-management-sdk@npm:^0.6.6":
version: 0.6.6
resolution: "@helium/treasury-management-sdk@npm:0.6.6"
@@ -4804,35 +4855,21 @@ __metadata:
languageName: node
linkType: hard
-"@helium/treasury-management-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/treasury-management-sdk@npm:0.9.18"
- dependencies:
- "@coral-xyz/anchor": ^0.28.0
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/circuit-breaker-sdk": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/spl-utils": ^0.9.18
- bn.js: ^5.2.0
- bs58: ^4.0.1
- checksum: 143f4f13ee9461dcd6eb8dd789a65a5468fce6ed1d9c93f0f040eed837fafea3d11df3682d9fa9df3fe5baaf35bae82591fcefa18d16c2cc5eab0d9129311e91
- languageName: node
- linkType: hard
-
-"@helium/voter-stake-registry-hooks@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/voter-stake-registry-hooks@npm:0.9.18"
+"@helium/voter-stake-registry-hooks@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/voter-stake-registry-hooks@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
- "@helium/account-fetch-cache": ^0.9.18
- "@helium/account-fetch-cache-hooks": ^0.9.18
- "@helium/circuit-breaker-sdk": ^0.9.18
- "@helium/helium-react-hooks": ^0.9.18
- "@helium/helium-sub-daos-sdk": ^0.9.18
- "@helium/modular-governance-hooks": ^0.0.15
- "@helium/modular-governance-idls": ^0.0.15
- "@helium/spl-utils": ^0.9.18
- "@helium/voter-stake-registry-sdk": ^0.9.18
+ "@helium/account-fetch-cache": ^0.9.14
+ "@helium/account-fetch-cache-hooks": ^0.9.14
+ "@helium/circuit-breaker-sdk": ^0.9.14
+ "@helium/helium-react-hooks": ^0.9.14
+ "@helium/helium-sub-daos-sdk": ^0.9.14
+ "@helium/modular-governance-hooks": ^0.0.12
+ "@helium/modular-governance-idls": ^0.0.12
+ "@helium/position-voting-rewards-sdk": ^0.9.14
+ "@helium/spl-utils": ^0.9.14
+ "@helium/voter-stake-registry-sdk": ^0.9.14
"@solana/wallet-adapter-base": ^0.9.22
"@solana/wallet-adapter-react": ^0.15.32
"@solana/web3.js": ^1.78.8
@@ -4843,24 +4880,24 @@ __metadata:
peerDependencies:
react: ^16.8 || ^17 || ^18
react-dom: ^16.8 || ^17 || ^18
- checksum: 1e498a70b5ff6d62e0d5d3909c0c4e096dcbadad40fe2f974cd68b9e12441224fbc256d7e98f19fae42929e7cc4484222468cd9e0f5783b3c69adc7098156955
+ checksum: 1e8d393afc5db230afc1e42802a136a0bb1c06f5e2b48e6b048ea91122a70df0f0b25c6cd83228b4cf91791a0bd0abcaa926223308a67acc84d6fc8171ac001b
languageName: node
linkType: hard
-"@helium/voter-stake-registry-sdk@npm:^0.9.18":
- version: 0.9.18
- resolution: "@helium/voter-stake-registry-sdk@npm:0.9.18"
+"@helium/voter-stake-registry-sdk@npm:0.9.14":
+ version: 0.9.14
+ resolution: "@helium/voter-stake-registry-sdk@npm:0.9.14"
dependencies:
"@coral-xyz/anchor": ^0.28.0
- "@helium/anchor-resolvers": ^0.9.18
- "@helium/idls": ^0.9.18
- "@helium/nft-proxy-sdk": ^0.0.15
- "@helium/spl-utils": ^0.9.18
+ "@helium/anchor-resolvers": ^0.9.14
+ "@helium/idls": ^0.9.14
+ "@helium/nft-proxy-sdk": ^0.0.12
+ "@helium/spl-utils": ^0.9.14
"@metaplex-foundation/mpl-token-metadata": ^2.10.0
"@solana/spl-token": ^0.3.8
bn.js: ^5.2.0
bs58: ^4.0.1
- checksum: 9de2b67c64afd0adcdc5c7372ee80d63b60bac57f73325841e20c8bf30e2b3b046960d860dab92f8793be69ee1d7d542ca298bb3db7faeb9d6c9b9ee6ddd2850
+ checksum: 855b2dc578adc80e03b799c7fa0a5ca4b7202b63adcd3d96a7a738833a0a102dde2b01825882dbce9c405380066f1a99db58d43e48269307c9b1015eedae8db6
languageName: node
linkType: hard
@@ -4951,7 +4988,7 @@ __metadata:
languageName: node
linkType: hard
-"@jest/core@npm:^29.7.0":
+"@jest/core@npm:^29.6.3, @jest/core@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/core@npm:29.7.0"
dependencies:
@@ -5139,7 +5176,7 @@ __metadata:
languageName: node
linkType: hard
-"@jest/transform@npm:^29.7.0":
+"@jest/transform@npm:^29.6.3, @jest/transform@npm:^29.7.0":
version: 29.7.0
resolution: "@jest/transform@npm:29.7.0"
dependencies:
@@ -5252,7 +5289,7 @@ __metadata:
languageName: node
linkType: hard
-"@jup-ag/api@npm:^6.0.6":
+"@jup-ag/api@npm:6.0.6":
version: 6.0.6
resolution: "@jup-ag/api@npm:6.0.6"
checksum: 3438ac34675b3f5250755d4d61460b811a64a401bd52b51090c369077f9880f9f02dcbf732a13c5114765daed3711c60461019f66737c46adfda95a766de3f6f
@@ -5432,7 +5469,7 @@ __metadata:
languageName: node
linkType: hard
-"@keystonehq/keystone-sdk@npm:^0.8.0":
+"@keystonehq/keystone-sdk@npm:0.8.0":
version: 0.8.0
resolution: "@keystonehq/keystone-sdk@npm:0.8.0"
dependencies:
@@ -5587,7 +5624,7 @@ __metadata:
languageName: node
linkType: hard
-"@ledgerhq/types-devices@npm:^6.25.3":
+"@ledgerhq/types-devices@npm:6.25.3":
version: 6.25.3
resolution: "@ledgerhq/types-devices@npm:6.25.3"
checksum: 1bfe60ed14752f0f8daabd7af8c0b4daa26182b29aac7329f5510c1cd5f0dcb3592133a3e331277cf48440a5236373c50e473597a715f9ab54bb0b3c540ac260
@@ -5658,7 +5695,7 @@ __metadata:
languageName: node
linkType: hard
-"@metaplex-foundation/js@npm:^0.19.5":
+"@metaplex-foundation/js@npm:0.19.5":
version: 0.19.5
resolution: "@metaplex-foundation/js@npm:0.19.5"
dependencies:
@@ -5823,7 +5860,7 @@ __metadata:
languageName: node
linkType: hard
-"@ngraveio/bc-ur@npm:^1.1.13, @ngraveio/bc-ur@npm:^1.1.5, @ngraveio/bc-ur@npm:^1.1.6":
+"@ngraveio/bc-ur@npm:1.1.13, @ngraveio/bc-ur@npm:^1.1.5, @ngraveio/bc-ur@npm:^1.1.6":
version: 1.1.13
resolution: "@ngraveio/bc-ur@npm:1.1.13"
dependencies:
@@ -5958,7 +5995,7 @@ __metadata:
languageName: node
linkType: hard
-"@onsol/tldparser@npm:^0.5.3":
+"@onsol/tldparser@npm:0.5.3":
version: 0.5.3
resolution: "@onsol/tldparser@npm:0.5.3"
dependencies:
@@ -5980,6 +6017,39 @@ __metadata:
languageName: node
linkType: hard
+"@peculiar/asn1-schema@npm:^2.3.13, @peculiar/asn1-schema@npm:^2.3.8":
+ version: 2.3.13
+ resolution: "@peculiar/asn1-schema@npm:2.3.13"
+ dependencies:
+ asn1js: ^3.0.5
+ pvtsutils: ^1.3.5
+ tslib: ^2.6.2
+ checksum: 245cf398992788fc61c48a4e1263a47803bccd91807e7a419e3fe9ad44ede5e396a5f8d13215b0765774855b634fe10d730b08944e5dc085fc5ee121a7e0139e
+ languageName: node
+ linkType: hard
+
+"@peculiar/json-schema@npm:^1.1.12":
+ version: 1.1.12
+ resolution: "@peculiar/json-schema@npm:1.1.12"
+ dependencies:
+ tslib: ^2.0.0
+ checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060
+ languageName: node
+ linkType: hard
+
+"@peculiar/webcrypto@npm:^1.4.0":
+ version: 1.5.0
+ resolution: "@peculiar/webcrypto@npm:1.5.0"
+ dependencies:
+ "@peculiar/asn1-schema": ^2.3.8
+ "@peculiar/json-schema": ^1.1.12
+ pvtsutils: ^1.3.5
+ tslib: ^2.6.2
+ webcrypto-core: ^1.8.0
+ checksum: 9022d7452d564a5a26fbacf477842be34736f2d9139f2f5026adc47fdeda7033193d727491503f2a829d35ab819bbfa61c82a785c49c999eac535ecd69a3a459
+ languageName: node
+ linkType: hard
+
"@pkgjs/parseargs@npm:^0.11.0":
version: 0.11.0
resolution: "@pkgjs/parseargs@npm:0.11.0"
@@ -6089,14 +6159,14 @@ __metadata:
languageName: node
linkType: hard
-"@react-native-async-storage/async-storage@npm:1.23.1":
- version: 1.23.1
- resolution: "@react-native-async-storage/async-storage@npm:1.23.1"
+"@react-native-async-storage/async-storage@npm:1.18.1":
+ version: 1.18.1
+ resolution: "@react-native-async-storage/async-storage@npm:1.18.1"
dependencies:
merge-options: ^3.0.4
peerDependencies:
- react-native: ^0.0.0-0 || >=0.60 <1.0
- checksum: 7096546ed4a5faf1f6e0425e2e15713575f1a7493a04524da386ff35c3844b57b8fd20544fad4157b4a61e048b10235f2f06124f262da5b327edc74fbc31e02b
+ react-native: ^0.0.0-0 || 0.60 - 0.72 || 1000.0.0
+ checksum: 58c8497fafdd4d112c4a70b0976783abdc6fa487f0cffca196901efd146fc838dee0cf498fdc4ef67a4634ba4ca97d60fec5a24720aea1d46f1999b0ba8b249b
languageName: node
linkType: hard
@@ -6388,7 +6458,7 @@ __metadata:
languageName: node
linkType: hard
-"@react-native-community/slider@npm:^4.5.2":
+"@react-native-community/slider@npm:4.5.2":
version: 4.5.2
resolution: "@react-native-community/slider@npm:4.5.2"
checksum: 99023660756a1a876fc3d9c1a7cec13f7e414abee3452e1e03d2794bc7f46a9d689740bed5c3889914adf6ed85a55c6017e2f0d73b5de353025ba52bba6e79e1
@@ -6841,9 +6911,9 @@ __metadata:
languageName: node
linkType: hard
-"@rnmapbox/maps@npm:10.1.33":
- version: 10.1.33
- resolution: "@rnmapbox/maps@npm:10.1.33"
+"@rnmapbox/maps@npm:10.1.31":
+ version: 10.1.31
+ resolution: "@rnmapbox/maps@npm:10.1.31"
dependencies:
"@turf/along": 6.5.0
"@turf/distance": 6.5.0
@@ -6865,7 +6935,7 @@ __metadata:
optional: true
react-dom:
optional: true
- checksum: 847b34994f121d057840d73d20c713bdd54eafda95b576344022cda32362ecd131429a9f55a219068ee6a4ff03ad1e271ade521bffd7d1c5b266746207b3a850
+ checksum: f4ac56f9dbc3128b2bfeedd3980668f2c05e92b965297a0be1556b0059fcf15e7c84d9127b32383d6608d65b6986e5e3ed6ef08499091f0a31a6fbb72c0819fb
languageName: node
linkType: hard
@@ -7270,27 +7340,27 @@ __metadata:
languageName: node
linkType: hard
-"@solana/spl-token-metadata@npm:^0.1.2":
- version: 0.1.5
- resolution: "@solana/spl-token-metadata@npm:0.1.5"
+"@solana/spl-token-metadata@npm:0.1.4":
+ version: 0.1.4
+ resolution: "@solana/spl-token-metadata@npm:0.1.4"
dependencies:
- "@solana/codecs": 2.0.0-rc.1
+ "@solana/codecs": 2.0.0-preview.2
"@solana/spl-type-length-value": 0.1.0
peerDependencies:
- "@solana/web3.js": ^1.95.3
- checksum: dffe1bf05c5c60cb3a725044c2013c5d3dfeed2e0ae99dd083916cf92cc433f5d87b631f38fc8ae0aac5ed8c1d266be1c8dc7c868da5253be076fe7ce49a31b8
+ "@solana/web3.js": ^1.91.6
+ checksum: 974969ce59a184f17e8d2f6aa98a118154ec042e9efa41a7b8ad33aecff8234d0a1161573807a59ab9e9d3557d8438b0b78f785cfc481f038900337f73523b02
languageName: node
linkType: hard
-"@solana/spl-token-metadata@npm:^0.1.4":
- version: 0.1.4
- resolution: "@solana/spl-token-metadata@npm:0.1.4"
+"@solana/spl-token-metadata@npm:^0.1.2":
+ version: 0.1.5
+ resolution: "@solana/spl-token-metadata@npm:0.1.5"
dependencies:
- "@solana/codecs": 2.0.0-preview.2
+ "@solana/codecs": 2.0.0-rc.1
"@solana/spl-type-length-value": 0.1.0
peerDependencies:
- "@solana/web3.js": ^1.91.6
- checksum: 974969ce59a184f17e8d2f6aa98a118154ec042e9efa41a7b8ad33aecff8234d0a1161573807a59ab9e9d3557d8438b0b78f785cfc481f038900337f73523b02
+ "@solana/web3.js": ^1.95.3
+ checksum: dffe1bf05c5c60cb3a725044c2013c5d3dfeed2e0ae99dd083916cf92cc433f5d87b631f38fc8ae0aac5ed8c1d266be1c8dc7c868da5253be076fe7ce49a31b8
languageName: node
linkType: hard
@@ -7471,7 +7541,30 @@ __metadata:
languageName: node
linkType: hard
-"@solana/web3.js@npm:^1.21.0, @solana/web3.js@npm:^1.32.0, @solana/web3.js@npm:^1.43.4, @solana/web3.js@npm:^1.50.1, @solana/web3.js@npm:^1.56.2, @solana/web3.js@npm:^1.66.2, @solana/web3.js@npm:^1.68.0, @solana/web3.js@npm:^1.69.0, @solana/web3.js@npm:^1.78.4, @solana/web3.js@npm:^1.78.8, @solana/web3.js@npm:^1.87.6":
+"@solana/web3.js@npm:1.87.6":
+ version: 1.87.6
+ resolution: "@solana/web3.js@npm:1.87.6"
+ dependencies:
+ "@babel/runtime": ^7.23.2
+ "@noble/curves": ^1.2.0
+ "@noble/hashes": ^1.3.1
+ "@solana/buffer-layout": ^4.0.0
+ agentkeepalive: ^4.3.0
+ bigint-buffer: ^1.1.5
+ bn.js: ^5.2.1
+ borsh: ^0.7.0
+ bs58: ^4.0.1
+ buffer: 6.0.3
+ fast-stable-stringify: ^1.0.0
+ jayson: ^4.1.0
+ node-fetch: ^2.6.12
+ rpc-websockets: ^7.5.1
+ superstruct: ^0.14.2
+ checksum: 182eb2a953f6ebebdfbc7dfda031d1985fb1591a2aa38b388d5dfb9fd3df0fb53a3962373384dbd91df343e148ec3d42a579324effab9ca86f0560c4f6f08481
+ languageName: node
+ linkType: hard
+
+"@solana/web3.js@npm:^1.21.0, @solana/web3.js@npm:^1.32.0, @solana/web3.js@npm:^1.43.4, @solana/web3.js@npm:^1.50.1, @solana/web3.js@npm:^1.56.2, @solana/web3.js@npm:^1.66.2, @solana/web3.js@npm:^1.68.0, @solana/web3.js@npm:^1.69.0, @solana/web3.js@npm:^1.78.4, @solana/web3.js@npm:^1.78.8":
version: 1.91.4
resolution: "@solana/web3.js@npm:1.91.4"
dependencies:
@@ -7825,7 +7918,7 @@ __metadata:
languageName: node
linkType: hard
-"@tanstack/react-query@npm:^5.45.0, @tanstack/react-query@npm:^5.45.1":
+"@tanstack/react-query@npm:5.45.1, @tanstack/react-query@npm:^5.45.0":
version: 5.45.1
resolution: "@tanstack/react-query@npm:5.45.1"
dependencies:
@@ -8025,7 +8118,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/base-64@npm:^1.0.2":
+"@types/base-64@npm:1.0.2":
version: 1.0.2
resolution: "@types/base-64@npm:1.0.2"
checksum: bb7593c6de16c88a1bfed73a37c3be2e940921261bb7a160ab6d671f66d976b5426334ae9ce59553a10086db11e52af348813271a8b636e4f88e4cab8f27a3e4
@@ -8066,7 +8159,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/debounce@npm:^1.2.4":
+"@types/debounce@npm:1.2.4":
version: 1.2.4
resolution: "@types/debounce@npm:1.2.4"
checksum: decef3eee65d681556d50f7fac346f1b33134f6b21f806d41326f9dfb362fa66b0282ff0640ae6791b690694c9dc3dad4e146e909e707e6f96650f3aa325b9da
@@ -8220,14 +8313,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/mapbox__geo-viewport@npm:^0.5.3":
+"@types/mapbox__geo-viewport@npm:0.5.3":
version: 0.5.3
resolution: "@types/mapbox__geo-viewport@npm:0.5.3"
checksum: 82240cc936a4bd70293d05576614f0932804c3b58cc841fd72e688f1bd41bcaac406d8249a6342ae669923496b5e6913fe90a3738ffcadf818493ca678afaf08
languageName: node
linkType: hard
-"@types/markdown-it@npm:^13.0.5":
+"@types/markdown-it@npm:13.0.5":
version: 13.0.5
resolution: "@types/markdown-it@npm:13.0.5"
dependencies:
@@ -9219,6 +9312,13 @@ __metadata:
languageName: node
linkType: hard
+"@whatwg-node/events@npm:^0.0.3":
+ version: 0.0.3
+ resolution: "@whatwg-node/events@npm:0.0.3"
+ checksum: af26f40d4d0a0f5f0ee45fc6124afb8d6b33988dae96ab0fb87aa5e66d1ff08a749491b9da533ea524bbaebd4a770736f254d574a91ab4455386aa098cee8c77
+ languageName: node
+ linkType: hard
+
"@whatwg-node/fetch@npm:^0.10.0":
version: 0.10.1
resolution: "@whatwg-node/fetch@npm:0.10.1"
@@ -9229,25 +9329,29 @@ __metadata:
languageName: node
linkType: hard
-"@whatwg-node/fetch@npm:^0.9.20":
- version: 0.9.23
- resolution: "@whatwg-node/fetch@npm:0.9.23"
+"@whatwg-node/fetch@npm:^0.8.0":
+ version: 0.8.8
+ resolution: "@whatwg-node/fetch@npm:0.8.8"
dependencies:
- "@whatwg-node/node-fetch": ^0.6.0
- urlpattern-polyfill: ^10.0.0
- checksum: 16c99adecce7eac17220b24c9385f34a30b9c546a790ab8f03f602747746c34ebbd24cf22faa7c921b92463f2e1f6b1ce754da636b4eda1b920720b31f9c41b8
+ "@peculiar/webcrypto": ^1.4.0
+ "@whatwg-node/node-fetch": ^0.3.6
+ busboy: ^1.6.0
+ urlpattern-polyfill: ^8.0.0
+ web-streams-polyfill: ^3.2.1
+ checksum: 891407ba57e32e5af70a3b0a86980c4466dcf2ba8581b6927475c85400280b163085519e98821dd94776da9aa1b0b1e221e718009e2abed9c8a0d4721025b2ab
languageName: node
linkType: hard
-"@whatwg-node/node-fetch@npm:^0.6.0":
- version: 0.6.0
- resolution: "@whatwg-node/node-fetch@npm:0.6.0"
+"@whatwg-node/node-fetch@npm:^0.3.6":
+ version: 0.3.6
+ resolution: "@whatwg-node/node-fetch@npm:0.3.6"
dependencies:
- "@kamilkisiela/fast-url-parser": ^1.1.4
+ "@whatwg-node/events": ^0.0.3
busboy: ^1.6.0
fast-querystring: ^1.1.1
- tslib: ^2.6.3
- checksum: 78a80a3c0ada94ba5256a7d94be5d27a5527b4cdc071ed2c328ff0f434d8446ee1e0464019af79be06c2d032520065f47abb7e492b774a084ac4b13bd4a86c41
+ fast-url-parser: ^1.1.3
+ tslib: ^2.3.1
+ checksum: d3d7b0a0242c0511c7b666de66d9096fb24ea251426ce76e3a26a8ca17408de5d4d4f81b5aaec840cc7025f0321fb97e06067c53f377c844a5a9473dd76491ae
languageName: node
linkType: hard
@@ -9379,6 +9483,13 @@ __metadata:
languageName: node
linkType: hard
+"aes-js@npm:3.1.2":
+ version: 3.1.2
+ resolution: "aes-js@npm:3.1.2"
+ checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712
+ languageName: node
+ linkType: hard
+
"agent-base@npm:6":
version: 6.0.2
resolution: "agent-base@npm:6.0.2"
@@ -9397,7 +9508,7 @@ __metadata:
languageName: node
linkType: hard
-"agentkeepalive@npm:^4.5.0":
+"agentkeepalive@npm:^4.3.0, agentkeepalive@npm:^4.5.0":
version: 4.5.0
resolution: "agentkeepalive@npm:4.5.0"
dependencies:
@@ -9867,6 +9978,17 @@ __metadata:
languageName: node
linkType: hard
+"asn1js@npm:^3.0.5":
+ version: 3.0.5
+ resolution: "asn1js@npm:3.0.5"
+ dependencies:
+ pvtsutils: ^1.3.2
+ pvutils: ^1.1.3
+ tslib: ^2.4.0
+ checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb
+ languageName: node
+ linkType: hard
+
"assert@npm:1.5.0":
version: 1.5.0
resolution: "assert@npm:1.5.0"
@@ -10041,7 +10163,7 @@ __metadata:
languageName: node
linkType: hard
-"axios-mock-adapter@npm:^1.21.5, axios-mock-adapter@npm:^1.22.0":
+"axios-mock-adapter@npm:1.22.0, axios-mock-adapter@npm:^1.21.5":
version: 1.22.0
resolution: "axios-mock-adapter@npm:1.22.0"
dependencies:
@@ -10126,7 +10248,24 @@ __metadata:
languageName: node
linkType: hard
-"babel-jest@npm:^29.6.3, babel-jest@npm:^29.7.0":
+"babel-jest@npm:29.6.3":
+ version: 29.6.3
+ resolution: "babel-jest@npm:29.6.3"
+ dependencies:
+ "@jest/transform": ^29.6.3
+ "@types/babel__core": ^7.1.14
+ babel-plugin-istanbul: ^6.1.1
+ babel-preset-jest: ^29.6.3
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.9
+ slash: ^3.0.0
+ peerDependencies:
+ "@babel/core": ^7.8.0
+ checksum: 8b4b85d829d8ee010f0c8381cb9d67842da905c32183c1fc6e1e8833447a79b969f8279759d44197bb77001239dc41a49fff0e8222d8e8577f47a8d0428d178e
+ languageName: node
+ linkType: hard
+
+"babel-jest@npm:^29.7.0":
version: 29.7.0
resolution: "babel-jest@npm:29.7.0"
dependencies:
@@ -10476,7 +10615,7 @@ __metadata:
languageName: node
linkType: hard
-"base64-js@npm:^1.0.2, base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1":
+"base64-js@npm:^1.0.2, base64-js@npm:^1.2.0, base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1":
version: 1.5.1
resolution: "base64-js@npm:1.5.1"
checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005
@@ -10621,7 +10760,7 @@ __metadata:
languageName: node
linkType: hard
-"bip39@npm:^3.1.0":
+"bip39@npm:3.1.0":
version: 3.1.0
resolution: "bip39@npm:3.1.0"
dependencies:
@@ -11034,7 +11173,7 @@ __metadata:
languageName: node
linkType: hard
-"buffer@npm:^5.0.0, buffer@npm:^5.1.0, buffer@npm:^5.4.3, buffer@npm:^5.5.0":
+"buffer@npm:^5.0.0, buffer@npm:^5.0.7, buffer@npm:^5.1.0, buffer@npm:^5.4.3, buffer@npm:^5.5.0":
version: 5.7.1
resolution: "buffer@npm:5.7.1"
dependencies:
@@ -11750,7 +11889,7 @@ __metadata:
languageName: node
linkType: hard
-"compare-versions@npm:^6.1.0":
+"compare-versions@npm:6.1.0, compare-versions@npm:^6.1.0":
version: 6.1.0
resolution: "compare-versions@npm:6.1.0"
checksum: d4e2a45706a023d8d0b6680338b66b79e20bd02d1947f0ac6531dab634cbed89fa373b3f03d503c5e489761194258d6e1bae67a07f88b1efc61648454f2d47e7
@@ -12148,6 +12287,18 @@ __metadata:
languageName: node
linkType: hard
+"css-select@npm:~1.2.0":
+ version: 1.2.0
+ resolution: "css-select@npm:1.2.0"
+ dependencies:
+ boolbase: ~1.0.0
+ css-what: 2.1
+ domutils: 1.5.1
+ nth-check: ~1.0.1
+ checksum: 607cca60d2f5c56701fe5f800bbe668b114395c503d4e4808edbbbe70b8be3c96a6407428dc0227fcbdf335b20468e6a9e7fd689185edfb57d402e1e4837c9b7
+ languageName: node
+ linkType: hard
+
"css-to-react-native@npm:^3.0.0":
version: 3.2.0
resolution: "css-to-react-native@npm:3.2.0"
@@ -12179,6 +12330,13 @@ __metadata:
languageName: node
linkType: hard
+"css-what@npm:2.1":
+ version: 2.1.3
+ resolution: "css-what@npm:2.1.3"
+ checksum: a52d56c591a7e1c37506d0d8c4fdef72537fb8eb4cb68711485997a88d76b5a3342b73a7c79176268f95b428596c447ad7fa3488224a6b8b532e2f1f2ee8545c
+ languageName: node
+ linkType: hard
+
"css-what@npm:^3.2.1":
version: 3.4.2
resolution: "css-what@npm:3.4.2"
@@ -12733,6 +12891,16 @@ __metadata:
languageName: node
linkType: hard
+"dom-serializer@npm:~0.1.0":
+ version: 0.1.1
+ resolution: "dom-serializer@npm:0.1.1"
+ dependencies:
+ domelementtype: ^1.3.0
+ entities: ^1.1.1
+ checksum: 4f6a3eff802273741931cfd3c800fab4e683236eed10628d6605f52538a6bc0ce4770f3ca2ad68a27412c103ae9b6cdaed3c0a8e20d2704192bde497bc875215
+ languageName: node
+ linkType: hard
+
"domain-browser@npm:1.2.0":
version: 1.2.0
resolution: "domain-browser@npm:1.2.0"
@@ -12740,7 +12908,7 @@ __metadata:
languageName: node
linkType: hard
-"domelementtype@npm:1":
+"domelementtype@npm:1, domelementtype@npm:^1.3.0":
version: 1.3.1
resolution: "domelementtype@npm:1.3.1"
checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6
@@ -12754,6 +12922,15 @@ __metadata:
languageName: node
linkType: hard
+"domhandler@npm:^2.3.0":
+ version: 2.4.2
+ resolution: "domhandler@npm:2.4.2"
+ dependencies:
+ domelementtype: 1
+ checksum: 49bd70c9c784f845cd047e1dfb3611bd10891c05719acfc93f01fc726a419ed09fbe0b69f9064392d556a63fffc5a02010856cedae9368f4817146d95a97011f
+ languageName: node
+ linkType: hard
+
"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3":
version: 5.0.3
resolution: "domhandler@npm:5.0.3"
@@ -12763,7 +12940,17 @@ __metadata:
languageName: node
linkType: hard
-"domutils@npm:^1.7.0":
+"domutils@npm:1.5.1":
+ version: 1.5.1
+ resolution: "domutils@npm:1.5.1"
+ dependencies:
+ dom-serializer: 0
+ domelementtype: 1
+ checksum: 800d1f9d1c2e637267dae078ff6e24461e6be1baeb52fa70f2e7e7520816c032a925997cd15d822de53ef9896abb1f35e5c439d301500a9cd6b46a395f6f6ca0
+ languageName: node
+ linkType: hard
+
+"domutils@npm:^1.5.1, domutils@npm:^1.7.0":
version: 1.7.0
resolution: "domutils@npm:1.7.0"
dependencies:
@@ -12859,7 +13046,7 @@ __metadata:
languageName: node
linkType: hard
-"ed25519-hd-key@npm:^1.3.0":
+"ed25519-hd-key@npm:1.3.0":
version: 1.3.0
resolution: "ed25519-hd-key@npm:1.3.0"
dependencies:
@@ -12990,6 +13177,13 @@ __metadata:
languageName: node
linkType: hard
+"entities@npm:^1.1.1, entities@npm:~1.1.1":
+ version: 1.1.2
+ resolution: "entities@npm:1.1.2"
+ checksum: d537b02799bdd4784ffd714d000597ed168727bddf4885da887c5a491d735739029a00794f1998abbf35f3f6aeda32ef5c15010dca1817d401903a501b6d3e05
+ languageName: node
+ linkType: hard
+
"entities@npm:^2.0.0":
version: 2.2.0
resolution: "entities@npm:2.2.0"
@@ -13841,6 +14035,13 @@ __metadata:
languageName: node
linkType: hard
+"eventemitter2@npm:^1.0.0":
+ version: 1.0.5
+ resolution: "eventemitter2@npm:1.0.5"
+ checksum: f501d8ad439aad85b4d5494d96a83abbb156ed4acf5897fed53a99f4fa427c5a968959276461d8640b613ed16a34995fcd63a13404262e725131a29df9177c96
+ languageName: node
+ linkType: hard
+
"eventemitter3@npm:^4.0.7":
version: 4.0.7
resolution: "eventemitter3@npm:4.0.7"
@@ -14076,7 +14277,7 @@ __metadata:
languageName: node
linkType: hard
-"expo-location@npm:^17.0.1":
+"expo-location@npm:17.0.1":
version: 17.0.1
resolution: "expo-location@npm:17.0.1"
peerDependencies:
@@ -14332,6 +14533,15 @@ __metadata:
languageName: node
linkType: hard
+"fast-url-parser@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "fast-url-parser@npm:1.1.3"
+ dependencies:
+ punycode: ^1.3.2
+ checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c
+ languageName: node
+ linkType: hard
+
"fast-xml-parser@npm:^4.0.12, fast-xml-parser@npm:^4.2.4":
version: 4.4.1
resolution: "fast-xml-parser@npm:4.4.1"
@@ -14954,7 +15164,7 @@ __metadata:
languageName: node
linkType: hard
-"geolib@npm:^3.3.4":
+"geolib@npm:3.3.4":
version: 3.3.4
resolution: "geolib@npm:3.3.4"
checksum: b5ca8090effd384fec168a957d89416577a92dcb63aedf361a60794e07051e6f2a98a3c2db64de2dd9114ac22c63fbf9ec67b2f61dbc300292040cbd4387942b
@@ -15185,7 +15395,7 @@ __metadata:
languageName: node
linkType: hard
-"graphql-config@npm:^5.1.1":
+"graphql-config@npm:^5.0.2":
version: 5.1.3
resolution: "graphql-config@npm:5.1.3"
dependencies:
@@ -15426,63 +15636,63 @@ __metadata:
"@babel/preset-env": 7.20.2
"@babel/preset-typescript": 7.21.0
"@babel/runtime": 7.20.13
- "@bonfida/spl-name-service": ^1.1.1
- "@coral-xyz/anchor": ^0.28.0
+ "@bonfida/spl-name-service": 1.1.1
+ "@coral-xyz/anchor": 0.28.0
"@gorhom/bottom-sheet": 5.0.4
"@gorhom/portal": 1.0.14
- "@graphql-codegen/cli": ^5.0.0
- "@graphql-codegen/typescript": ^4.0.1
- "@graphql-codegen/typescript-operations": ^4.0.1
- "@graphql-codegen/typescript-rtk-query": ^3.1.1
- "@helium/account-fetch-cache": 0.9.18
- "@helium/account-fetch-cache-hooks": 0.9.18
+ "@graphql-codegen/cli": 5.0.0
+ "@graphql-codegen/typescript": 4.0.1
+ "@graphql-codegen/typescript-operations": 4.0.1
+ "@graphql-codegen/typescript-rtk-query": 3.1.1
+ "@helium/account-fetch-cache": 0.9.14
+ "@helium/account-fetch-cache-hooks": 0.9.14
"@helium/address": 4.10.2
- "@helium/circuit-breaker-sdk": ^0.9.18
+ "@helium/circuit-breaker-sdk": 0.9.14
"@helium/crypto-react-native": 4.8.0
- "@helium/currency-utils": ^0.9.18
- "@helium/data-credits-sdk": ^0.9.18
- "@helium/distributor-oracle": 0.9.18
- "@helium/fanout-sdk": ^0.9.18
- "@helium/helium-entity-manager-sdk": ^0.9.18
- "@helium/helium-react-hooks": 0.9.18
- "@helium/helium-sub-daos-sdk": ^0.9.18
+ "@helium/currency-utils": 0.9.14
+ "@helium/data-credits-sdk": 0.9.14
+ "@helium/distributor-oracle": 0.9.14
+ "@helium/fanout-sdk": 0.9.14
+ "@helium/helium-entity-manager-sdk": 0.9.14
+ "@helium/helium-react-hooks": 0.9.14
+ "@helium/helium-sub-daos-sdk": 0.9.14
"@helium/http": 4.7.5
- "@helium/idls": 0.9.18
- "@helium/lazy-distributor-sdk": ^0.9.18
- "@helium/modular-governance-hooks": ^0.0.13
+ "@helium/idls": 0.9.14
+ "@helium/lazy-distributor-sdk": 0.9.14
+ "@helium/modular-governance-hooks": 0.0.13
"@helium/modular-governance-idls": 0.0.13
"@helium/onboarding": 4.11.0
- "@helium/organization-sdk": ^0.0.13
+ "@helium/organization-sdk": 0.0.13
"@helium/proto-ble": 4.0.0
"@helium/react-native-sdk": 3.0.5
- "@helium/spl-utils": 0.9.18
- "@helium/state-controller-sdk": ^0.0.13
- "@helium/sus": 0.9.18
+ "@helium/spl-utils": 0.9.14
+ "@helium/state-controller-sdk": 0.0.13
+ "@helium/sus": 0.9.14
"@helium/transactions": 4.8.1
- "@helium/treasury-management-sdk": ^0.9.18
- "@helium/voter-stake-registry-hooks": 0.9.18
- "@helium/voter-stake-registry-sdk": 0.9.18
+ "@helium/treasury-management-sdk": 0.9.14
+ "@helium/voter-stake-registry-hooks": 0.9.14
+ "@helium/voter-stake-registry-sdk": 0.9.14
"@helium/wallet-link": 4.11.0
- "@jup-ag/api": ^6.0.6
- "@keystonehq/keystone-sdk": ^0.8.0
+ "@jup-ag/api": 6.0.6
+ "@keystonehq/keystone-sdk": 0.8.0
"@ledgerhq/hw-app-solana": 7.2.4
"@ledgerhq/hw-transport-mocker": 6.27.2
"@ledgerhq/react-native-hid": 6.32.4
"@ledgerhq/react-native-hw-transport-ble": 6.29.4
- "@ledgerhq/types-devices": ^6.25.3
- "@metaplex-foundation/js": ^0.19.5
+ "@ledgerhq/types-devices": 6.25.3
+ "@metaplex-foundation/js": 0.19.5
"@metaplex-foundation/mpl-bubblegum": 0.6.0
"@metaplex-foundation/mpl-token-metadata": 2.10.0
- "@ngraveio/bc-ur": ^1.1.13
+ "@ngraveio/bc-ur": 1.1.13
"@novalabsxyz/mobile-theme": 2.0.0-y.26
- "@onsol/tldparser": ^0.5.3
- "@react-native-async-storage/async-storage": 1.23.1
+ "@onsol/tldparser": 0.5.3
+ "@react-native-async-storage/async-storage": 1.18.1
"@react-native-community/blur": 4.3.0
"@react-native-community/checkbox": 0.5.17
"@react-native-community/clipboard": 1.5.1
"@react-native-community/hooks": 2.8.1
"@react-native-community/netinfo": 9.3.7
- "@react-native-community/slider": ^4.5.2
+ "@react-native-community/slider": 4.5.2
"@react-native-masked-view/masked-view": 0.3.2
"@react-native/babel-preset": 0.74.87
"@react-native/eslint-config": 0.74.87
@@ -15494,31 +15704,31 @@ __metadata:
"@react-navigation/native-stack": 6.7.0
"@react-navigation/stack": 6.2.2
"@reduxjs/toolkit": 1.9.1
- "@rnmapbox/maps": 10.1.33
+ "@rnmapbox/maps": 10.1.31
"@shopify/react-native-skia": 1.5.10
"@shopify/restyle": 2.4.2
"@solana/spl-account-compression": 0.1.4
"@solana/spl-memo": 0.2.3
"@solana/spl-token": 0.3.6
- "@solana/spl-token-metadata": ^0.1.4
+ "@solana/spl-token-metadata": 0.1.4
"@solana/wallet-adapter-react": 0.15.33
"@solana/wallet-standard-features": 1.0.0
- "@solana/web3.js": ^1.87.6
- "@tanstack/react-query": ^5.45.1
+ "@solana/web3.js": 1.87.6
+ "@tanstack/react-query": 5.45.1
"@tradle/react-native-http": 2.0.1
"@turf/bbox": 6.5.0
"@turf/center": 6.5.0
"@turf/helpers": 6.5.0
- "@types/base-64": ^1.0.2
+ "@types/base-64": 1.0.2
"@types/bn.js": 5.1.1
- "@types/debounce": ^1.2.4
+ "@types/debounce": 1.2.4
"@types/i18n-js": 3.8.2
"@types/lodash": 4.14.183
- "@types/mapbox__geo-viewport": ^0.5.3
- "@types/markdown-it": ^13.0.5
+ "@types/mapbox__geo-viewport": 0.5.3
+ "@types/markdown-it": 13.0.5
"@types/parse5": 5.0.3
"@types/qs": 6.9.7
- "@types/react": 18.2.79
+ "@types/react": 18.2.6
"@types/react-native": 0.70.6
"@types/react-native-charts-wrapper": 0.5.2
"@types/react-native-shared-group-preferences": 1.1.1
@@ -15532,23 +15742,24 @@ __metadata:
"@walletconnect/react-native-compat": 2.2.1
"@walletconnect/sign-client": 2.2.1
"@walletconnect/types": 2.2.1
+ aes-js: 3.1.2
angry-purple-tiger: 1.0.5
assert: 1.5.0
axios: 1.3.2
- axios-mock-adapter: ^1.22.0
- babel-jest: ^29.6.3
+ axios-mock-adapter: 1.22.0
+ babel-jest: 29.6.3
babel-plugin-module-resolver: 4.1.0
babel-plugin-transform-remove-console: 6.9.4
base-64: 1.0.0
bcrypt-react-native: 1.1.1
bignumber.js: 9.1.1
- bip39: ^3.1.0
+ bip39: 3.1.0
bn.js: 5.2.1
browserify-zlib: 0.1.4
bs58: 5.0.0
buffer: 6.0.3
camelcase-keys: 7.0.2
- compare-versions: ^6.1.0
+ compare-versions: 6.1.0
console-browserify: 1.2.0
constants-browserify: 1.0.0
crypto: 1.0.1
@@ -15556,7 +15767,7 @@ __metadata:
deprecated-react-native-prop-types: 2.3.0
dns.js: 1.0.1
domain-browser: 1.2.0
- ed25519-hd-key: ^1.3.0
+ ed25519-hd-key: 1.3.0
eslint: 7.32.0
eslint-config-airbnb: 18.2.1
eslint-config-airbnb-typescript: 14.0.2
@@ -15576,24 +15787,24 @@ __metadata:
expo-haptics: 13.0.1
expo-linking: 6.3.1
expo-local-authentication: 14.0.1
- expo-location: ^17.0.1
+ expo-location: 17.0.1
expo-secure-store: 13.0.2
fuse.js: 6.6.2
- geolib: ^3.3.4
+ geolib: 3.3.4
h3-js: 4.1.0
https-browserify: 0.0.1
husky: 7.0.4
i18next: 21.9.1
- jest: ^29.6.3
+ jest: 29.6.3
jetifier: 1.6.8
lodash: 4.17.21
long: 5.2.0
- lottie-ios: ^4.4.1
- lottie-react-native: ^6.7.0
- markdown-it: ^13.0.2
- metro-react-native-babel-transformer: ^0.77.0
+ lottie-ios: 4.4.1
+ lottie-react-native: 6.7.0
+ markdown-it: 13.0.2
+ metro-react-native-babel-transformer: 0.77.0
parse5: 6.0.1
- patch-package: ^8.0.0
+ patch-package: 8.0.0
path-browserify: 0.0.0
prettier: 2.8.8
punycode: 1.4.1
@@ -15601,25 +15812,26 @@ __metadata:
query-string: 7.1.1
querystring-es3: 0.2.1
react: 18.2.0
- react-async-hook: ^4.0.0
- react-error-boundary: ^4.0.13
+ react-async-hook: 4.0.0
+ react-error-boundary: 4.0.13
react-i18next: 11.18.4
react-native: 0.74.5
- react-native-animated-numbers: ^0.6.2
+ react-native-animated-numbers: 0.6.2
react-native-appstate-hook: 1.0.6
react-native-ble-plx: 2.0.3
- react-native-bootsplash: ^6.3.2
+ react-native-bootsplash: 6.3.2
react-native-charts-wrapper: 0.5.10
- react-native-clean-project: ^4.0.3
+ react-native-cheerio: 1.0.0-rc.4
+ react-native-clean-project: 4.0.3
react-native-cli-bump-version: 1.5.0
react-native-codegen: 0.0.7
- react-native-compass-heading: ^1.5.0
- react-native-confetti-cannon: ^1.5.2
+ react-native-compass-heading: 1.5.0
+ react-native-confetti-cannon: 1.5.2
react-native-config: 1.4.6
react-native-crypto: 2.2.0
react-native-device-info: 8.7.1
react-native-flash-message: 0.2.1
- react-native-geocoding: ^0.5.0
+ react-native-geocoding: 0.5.0
react-native-gesture-handler: 2.18.1
react-native-get-random-values: 1.11.0
react-native-icloudstore: 0.9.0
@@ -15629,14 +15841,14 @@ __metadata:
react-native-linear-gradient: 2.6.2
react-native-localize: 2.2.3
react-native-mail: 6.1.1
- react-native-markdown-display: ^7.0.0-alpha.2
- react-native-navigation-bar-color: ^2.0.2
+ react-native-markdown-display: 7.0.0-alpha.2
+ react-native-navigation-bar-color: 2.0.2
react-native-network-info: 5.2.1
react-native-onesignal: 5.2.2
- react-native-os: ^1.2.6
- react-native-pager-view: 6.3.0
- react-native-permissions: ^3.9.0
- react-native-qrcode-svg: ^6.3.2
+ react-native-os: 1.2.6
+ react-native-pager-view: 6.1.2
+ react-native-permissions: 3.9.0
+ react-native-qrcode-svg: 6.3.2
react-native-randombytes: 3.6.1
react-native-reanimated: 3.14.0
react-native-safe-area-context: 4.10.8
@@ -15644,9 +15856,9 @@ __metadata:
react-native-share: 7.9.0
react-native-shared-group-preferences: 1.1.24
react-native-simple-toast: 1.1.4
- react-native-skeleton-placeholder: ^5.2.4
+ react-native-skeleton-placeholder: 5.2.4
react-native-snap-carousel: 4.0.0-beta.6
- react-native-sodium: ^0.4.0
+ react-native-sodium: 0.4.0
react-native-svg: 13.4.0
react-native-svg-transformer: 0.14.3
react-native-tab-view: 3.3.4
@@ -15654,8 +15866,9 @@ __metadata:
react-native-test-flight: 1.1.0
react-native-text-ticker: 1.14.0
react-native-udp: 2.7.0
- react-native-url-polyfill: ^2.0.0
+ react-native-url-polyfill: 2.0.0
react-native-video: 5.2.1
+ react-native-vision-camera: 4.5.3
react-native-webview: 13.10.5
react-redux: 8.0.4
react-test-renderer: 17.0.2
@@ -15671,7 +15884,7 @@ __metadata:
stream: 0.0.2
stream-browserify: 1.0.0
string_decoder: 0.10.31
- text-encoding-polyfill: ^0.6.7
+ text-encoding-polyfill: 0.6.7
timers-browserify: 1.4.2
tinycolor2: 1.4.2
tty-browserify: 0.0.0
@@ -15792,6 +16005,21 @@ __metadata:
languageName: node
linkType: hard
+"htmlparser2-without-node-native@npm:^3.9.0":
+ version: 3.9.2
+ resolution: "htmlparser2-without-node-native@npm:3.9.2"
+ dependencies:
+ domelementtype: ^1.3.0
+ domhandler: ^2.3.0
+ domutils: ^1.5.1
+ entities: ^1.1.1
+ eventemitter2: ^1.0.0
+ inherits: ^2.0.1
+ readable-stream: ^2.0.2
+ checksum: 95754dc0f9ab057b5c072eaf2daed6db7595ec7a51290fde0cde6df803cbe528927764da4acb7bc9e633ff6396b07046eff7edb6f1f619fe665df4eaa8c735ad
+ languageName: node
+ linkType: hard
+
"http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
@@ -15921,7 +16149,7 @@ __metadata:
languageName: node
linkType: hard
-"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1":
+"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.1.8, ieee754@npm:^1.2.1":
version: 1.2.1
resolution: "ieee754@npm:1.2.1"
checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e
@@ -16995,7 +17223,7 @@ __metadata:
languageName: node
linkType: hard
-"jest-cli@npm:^29.7.0":
+"jest-cli@npm:^29.6.3":
version: 29.7.0
resolution: "jest-cli@npm:29.7.0"
dependencies:
@@ -17376,14 +17604,14 @@ __metadata:
languageName: node
linkType: hard
-"jest@npm:^29.6.3":
- version: 29.7.0
- resolution: "jest@npm:29.7.0"
+"jest@npm:29.6.3":
+ version: 29.6.3
+ resolution: "jest@npm:29.6.3"
dependencies:
- "@jest/core": ^29.7.0
+ "@jest/core": ^29.6.3
"@jest/types": ^29.6.3
import-local: ^3.0.2
- jest-cli: ^29.7.0
+ jest-cli: ^29.6.3
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -17391,7 +17619,7 @@ __metadata:
optional: true
bin:
jest: bin/jest.js
- checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b
+ checksum: dd4f53fb84f28b665b47c628222e5d3b624e9e0afa79b22afceef4f2a53dc0d8f0edd7ca254917ace5c94c3a7bf58c108563234c4fe34e86c679ce99633cfbe6
languageName: node
linkType: hard
@@ -18276,13 +18504,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.sortby@npm:^4.7.0":
- version: 4.7.0
- resolution: "lodash.sortby@npm:4.7.0"
- checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c
- languageName: node
- linkType: hard
-
"lodash.throttle@npm:^4.1.1":
version: 4.1.1
resolution: "lodash.throttle@npm:4.1.1"
@@ -18297,7 +18518,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.13, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.0":
+"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.13, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.0":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
@@ -18380,14 +18601,14 @@ __metadata:
languageName: node
linkType: hard
-"lottie-ios@npm:^4.4.1":
+"lottie-ios@npm:4.4.1":
version: 4.4.1
resolution: "lottie-ios@npm:4.4.1"
checksum: a3a1b60693a55abb2cb1496a1bf2596d51905a05367535e666bdb2a64e58e1aab2965a2badd3155d849ce9d287fe71df4314c0babd187d01ed07213044147766
languageName: node
linkType: hard
-"lottie-react-native@npm:^6.7.0":
+"lottie-react-native@npm:6.7.0":
version: 6.7.0
resolution: "lottie-react-native@npm:6.7.0"
peerDependencies:
@@ -18521,33 +18742,33 @@ __metadata:
languageName: node
linkType: hard
-"markdown-it@npm:^10.0.0":
- version: 10.0.0
- resolution: "markdown-it@npm:10.0.0"
+"markdown-it@npm:13.0.2":
+ version: 13.0.2
+ resolution: "markdown-it@npm:13.0.2"
dependencies:
- argparse: ^1.0.7
- entities: ~2.0.0
- linkify-it: ^2.0.0
+ argparse: ^2.0.1
+ entities: ~3.0.1
+ linkify-it: ^4.0.1
mdurl: ^1.0.1
uc.micro: ^1.0.5
bin:
markdown-it: bin/markdown-it.js
- checksum: 69f5ee640cbebb451b80d3cce308fff7230767e05c0f8c206a1e413775b7a6e5a08e91e9f3ec59f9b5c5a45493f9ce7ac089379cffb60c9d3e6677ed9d535086
+ checksum: bb4bf2cb3e5d77a7f3dc9cf48e17d050fbcd26d37992204eaa5812220752858fe9debe439b2ae1de06e749a3bba537c0baf6ce7510307cf7163a70f04fafe672
languageName: node
linkType: hard
-"markdown-it@npm:^13.0.2":
- version: 13.0.2
- resolution: "markdown-it@npm:13.0.2"
+"markdown-it@npm:^10.0.0":
+ version: 10.0.0
+ resolution: "markdown-it@npm:10.0.0"
dependencies:
- argparse: ^2.0.1
- entities: ~3.0.1
- linkify-it: ^4.0.1
+ argparse: ^1.0.7
+ entities: ~2.0.0
+ linkify-it: ^2.0.0
mdurl: ^1.0.1
uc.micro: ^1.0.5
bin:
markdown-it: bin/markdown-it.js
- checksum: bb4bf2cb3e5d77a7f3dc9cf48e17d050fbcd26d37992204eaa5812220752858fe9debe439b2ae1de06e749a3bba537c0baf6ce7510307cf7163a70f04fafe672
+ checksum: 69f5ee640cbebb451b80d3cce308fff7230767e05c0f8c206a1e413775b7a6e5a08e91e9f3ec59f9b5c5a45493f9ce7ac089379cffb60c9d3e6677ed9d535086
languageName: node
linkType: hard
@@ -18843,7 +19064,7 @@ __metadata:
languageName: node
linkType: hard
-"metro-react-native-babel-transformer@npm:^0.77.0":
+"metro-react-native-babel-transformer@npm:0.77.0":
version: 0.77.0
resolution: "metro-react-native-babel-transformer@npm:0.77.0"
dependencies:
@@ -19743,7 +19964,7 @@ __metadata:
languageName: node
linkType: hard
-"nth-check@npm:^1.0.2":
+"nth-check@npm:^1.0.2, nth-check@npm:~1.0.1":
version: 1.0.2
resolution: "nth-check@npm:1.0.2"
dependencies:
@@ -20324,7 +20545,7 @@ __metadata:
languageName: node
linkType: hard
-"patch-package@npm:^8.0.0":
+"patch-package@npm:8.0.0":
version: 8.0.0
resolution: "patch-package@npm:8.0.0"
dependencies:
@@ -21100,7 +21321,7 @@ __metadata:
languageName: node
linkType: hard
-"punycode@npm:1.4.1":
+"punycode@npm:1.4.1, punycode@npm:^1.3.2":
version: 1.4.1
resolution: "punycode@npm:1.4.1"
checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518
@@ -21121,6 +21342,22 @@ __metadata:
languageName: node
linkType: hard
+"pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5":
+ version: 1.3.6
+ resolution: "pvtsutils@npm:1.3.6"
+ dependencies:
+ tslib: ^2.8.1
+ checksum: 97b023b46d7b95bff004f8340efc465c1d995f35d7e97a2ef2e28d5e160f5ca47b48f42463b6be92b4341452a6b8c555feb2b1eb59ee90b97bd5d6fc86ffb186
+ languageName: node
+ linkType: hard
+
+"pvutils@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "pvutils@npm:1.1.3"
+ checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9
+ languageName: node
+ linkType: hard
+
"q@npm:^1.1.2":
version: 1.5.1
resolution: "q@npm:1.5.1"
@@ -21334,7 +21571,7 @@ __metadata:
languageName: node
linkType: hard
-"react-async-hook@npm:^4.0.0":
+"react-async-hook@npm:4.0.0, react-async-hook@npm:^4.0.0":
version: 4.0.0
resolution: "react-async-hook@npm:4.0.0"
peerDependencies:
@@ -21353,7 +21590,7 @@ __metadata:
languageName: node
linkType: hard
-"react-error-boundary@npm:^4.0.13":
+"react-error-boundary@npm:4.0.13":
version: 4.0.13
resolution: "react-error-boundary@npm:4.0.13"
dependencies:
@@ -21412,7 +21649,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-animated-numbers@npm:^0.6.2":
+"react-native-animated-numbers@npm:0.6.2":
version: 0.6.2
resolution: "react-native-animated-numbers@npm:0.6.2"
peerDependencies:
@@ -21439,7 +21676,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-bootsplash@npm:^6.3.2":
+"react-native-bootsplash@npm:6.3.2":
version: 6.3.2
resolution: "react-native-bootsplash@npm:6.3.2"
dependencies:
@@ -21477,7 +21714,22 @@ __metadata:
languageName: node
linkType: hard
-"react-native-clean-project@npm:^4.0.3":
+"react-native-cheerio@npm:1.0.0-rc.4":
+ version: 1.0.0-rc.4
+ resolution: "react-native-cheerio@npm:1.0.0-rc.4"
+ dependencies:
+ buffer: ^5.0.7
+ css-select: ~1.2.0
+ dom-serializer: ~0.1.0
+ entities: ~1.1.1
+ htmlparser2-without-node-native: ^3.9.0
+ lodash: ^4.15.0
+ react-native-parse-html: ^2.2.6
+ checksum: 9b384f6c588cdb430c579263fc2fd9ed18750cb3146cc79bb47ec5b64f31e23c203b97590afc87b6c6ffddd978f9a6cbd593b21cb7a3c6f331346dbc45abcd79
+ languageName: node
+ linkType: hard
+
+"react-native-clean-project@npm:4.0.3":
version: 4.0.3
resolution: "react-native-clean-project@npm:4.0.3"
bin:
@@ -21504,7 +21756,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-compass-heading@npm:^1.5.0":
+"react-native-compass-heading@npm:1.5.0":
version: 1.5.0
resolution: "react-native-compass-heading@npm:1.5.0"
peerDependencies:
@@ -21514,7 +21766,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-confetti-cannon@npm:^1.5.2":
+"react-native-confetti-cannon@npm:1.5.2":
version: 1.5.2
resolution: "react-native-confetti-cannon@npm:1.5.2"
checksum: 09026fd93304c0f3c3acfcf8dfc9b25003b30826031dffd81df6eea3b66dcee84f6ac4237719a84d3d71cb430f4fbf53d4c22b64ef17d439d5a3e5986c2ada83
@@ -21595,7 +21847,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-geocoding@npm:^0.5.0":
+"react-native-geocoding@npm:0.5.0":
version: 0.5.0
resolution: "react-native-geocoding@npm:0.5.0"
checksum: a33e9dc87d104abe19206660e9fa0782090909ca8b58c70eae4690faa92194817724833086b29c57387500cdd9ecd0febd6ccbbd0f4eac0e11a93696429cf9d2
@@ -21726,7 +21978,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-markdown-display@npm:^7.0.0-alpha.2":
+"react-native-markdown-display@npm:7.0.0-alpha.2":
version: 7.0.0-alpha.2
resolution: "react-native-markdown-display@npm:7.0.0-alpha.2"
dependencies:
@@ -21741,7 +21993,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-navigation-bar-color@npm:^2.0.2":
+"react-native-navigation-bar-color@npm:2.0.2":
version: 2.0.2
resolution: "react-native-navigation-bar-color@npm:2.0.2"
checksum: 47b74fc343c63b90819a67889b7af6e9b6524a663586dc8a7927d81e8517fbf8b395545d651ddf44e978167e4d8994a4b6d6e3dc086a35903c48087fa40155cd
@@ -21766,26 +22018,35 @@ __metadata:
languageName: node
linkType: hard
-"react-native-os@npm:^1.2.6":
+"react-native-os@npm:1.2.6":
version: 1.2.6
resolution: "react-native-os@npm:1.2.6"
checksum: a0259a5b1d25dddf4b88eb501a55799403b71cef04d54f7750ea24f881fc0c31a49e809021e9ba1e9a9fa8cbcc8a2e097afcf2904045b21895ce995621d44d4f
languageName: node
linkType: hard
-"react-native-pager-view@npm:6.3.0":
- version: 6.3.0
- resolution: "react-native-pager-view@npm:6.3.0"
+"react-native-pager-view@npm:6.1.2":
+ version: 6.1.2
+ resolution: "react-native-pager-view@npm:6.1.2"
peerDependencies:
react: "*"
react-native: "*"
- checksum: 6a7224c191bf64a2a476627221cc7fcbcb9bbc735ec5f2215d5b888fb8d31c0fc2c769b298b9a21d68636bcef626ae8d1b266f0b414d469a9a8fb21b4357c45c
+ checksum: 813da82c7816748b7a66c87d281c11cc3d787342b0896ffad686ee15e968911f4ed7b1164cdf196068eb2abcb28513bd85cdd0023280af73ff66e2b42bd2efa1
languageName: node
linkType: hard
-"react-native-permissions@npm:^3.9.0":
- version: 3.9.2
- resolution: "react-native-permissions@npm:3.9.2"
+"react-native-parse-html@npm:^2.2.6":
+ version: 2.2.6
+ resolution: "react-native-parse-html@npm:2.2.6"
+ dependencies:
+ react-native-stream: ^0.1.0
+ checksum: 21c8a8b95a9ff579639514ab16b17a2fe748eb308dd2b78840a7982e457e03ae7e076577f49993041ab55e64859399d5039502efd2ebd2a677353cd21fb084e5
+ languageName: node
+ linkType: hard
+
+"react-native-permissions@npm:3.9.0":
+ version: 3.9.0
+ resolution: "react-native-permissions@npm:3.9.0"
peerDependencies:
react: ">=16.13.1"
react-native: ">=0.63.3"
@@ -21793,11 +22054,11 @@ __metadata:
peerDependenciesMeta:
react-native-windows:
optional: true
- checksum: 047540958d415e62ea2359f8f5da392a345cec11d7bbe14b065459375b1185431bc98ac144595b9db27376ebb059811f79d9f3c80d61508aeecc3cb5e7c49996
+ checksum: 4c08edb5fbddb8a927e32cf3cb7d3db255400978336e684ed44b1b263ba6fcdac508eebe27942e374e2c7418af3e4181ad59e4b7d7c159056ec5ba777214ef7a
languageName: node
linkType: hard
-"react-native-qrcode-svg@npm:^6.3.2":
+"react-native-qrcode-svg@npm:6.3.2":
version: 6.3.2
resolution: "react-native-qrcode-svg@npm:6.3.2"
dependencies:
@@ -21888,7 +22149,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-skeleton-placeholder@npm:^5.2.4":
+"react-native-skeleton-placeholder@npm:5.2.4":
version: 5.2.4
resolution: "react-native-skeleton-placeholder@npm:5.2.4"
peerDependencies:
@@ -21913,13 +22174,23 @@ __metadata:
languageName: node
linkType: hard
-"react-native-sodium@npm:^0.4.0":
+"react-native-sodium@npm:0.4.0, react-native-sodium@npm:^0.4.0":
version: 0.4.0
resolution: "react-native-sodium@npm:0.4.0"
checksum: fd8bcfcb48ef029ddf57b362e02699de9cefe7a260947c454083201a67fd1e40cb6516f7a5bbcbaf4fb57dad29872b35a4649cdea5fb898cf036b578268d5c7b
languageName: node
linkType: hard
+"react-native-stream@npm:^0.1.0":
+ version: 0.1.9
+ resolution: "react-native-stream@npm:0.1.9"
+ dependencies:
+ base64-js: ^1.2.0
+ ieee754: ^1.1.8
+ checksum: 9f04c24fa3d1032ee0bfc09a61a63a62bc13fab2fc45d4f11643860025fd7908c03c0c105daa70708e5470cc8ddb5f2c7f012a36b10bb82625d3d1b7d54a5955
+ languageName: node
+ linkType: hard
+
"react-native-svg-transformer@npm:0.14.3":
version: 0.14.3
resolution: "react-native-svg-transformer@npm:0.14.3"
@@ -22006,7 +22277,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-url-polyfill@npm:^2.0.0":
+"react-native-url-polyfill@npm:2.0.0":
version: 2.0.0
resolution: "react-native-url-polyfill@npm:2.0.0"
dependencies:
@@ -22029,6 +22300,26 @@ __metadata:
languageName: node
linkType: hard
+"react-native-vision-camera@npm:4.5.3":
+ version: 4.5.3
+ resolution: "react-native-vision-camera@npm:4.5.3"
+ peerDependencies:
+ "@shopify/react-native-skia": "*"
+ react: "*"
+ react-native: "*"
+ react-native-reanimated: "*"
+ react-native-worklets-core: "*"
+ peerDependenciesMeta:
+ "@shopify/react-native-skia":
+ optional: true
+ react-native-reanimated:
+ optional: true
+ react-native-worklets-core:
+ optional: true
+ checksum: 99d57a70f93134903ae25ef798947f79804ea00e3b58cbb21131115552e6f2950d2a3be9a6a237232ca6bab7b5031aa12d9ca2df659be39dc607d75997317abc
+ languageName: node
+ linkType: hard
+
"react-native-webview@npm:13.10.5":
version: 13.10.5
resolution: "react-native-webview@npm:13.10.5"
@@ -22246,7 +22537,7 @@ __metadata:
languageName: node
linkType: hard
-"readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6":
+"readable-stream@npm:^2.0.2, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6":
version: 2.3.8
resolution: "readable-stream@npm:2.3.8"
dependencies:
@@ -24506,7 +24797,7 @@ __metadata:
languageName: node
linkType: hard
-"text-encoding-polyfill@npm:^0.6.7":
+"text-encoding-polyfill@npm:0.6.7, text-encoding-polyfill@npm:^0.6.7":
version: 0.6.7
resolution: "text-encoding-polyfill@npm:0.6.7"
checksum: 8e5b45154f3394cd29af01760ec2f728caba7cfc57fbcab60c073dc9c6db479d923efda3e074ae467379c4a0710c45e6427c6917a70da3059876924c190e03ed
@@ -24847,6 +25138,13 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:^2.0.0, tslib@npm:^2.3.1, tslib@npm:^2.5.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3, tslib@npm:^2.7.0, tslib@npm:^2.8.1":
+ version: 2.8.1
+ resolution: "tslib@npm:2.8.1"
+ checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
+ languageName: node
+ linkType: hard
+
"tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0":
version: 2.6.2
resolution: "tslib@npm:2.6.2"
@@ -24861,13 +25159,6 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.5.0, tslib@npm:^2.6.3":
- version: 2.8.1
- resolution: "tslib@npm:2.8.1"
- checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
- languageName: node
- linkType: hard
-
"tslib@npm:~2.4.0":
version: 2.4.1
resolution: "tslib@npm:2.4.1"
@@ -24875,6 +25166,13 @@ __metadata:
languageName: node
linkType: hard
+"tslib@npm:~2.5.0":
+ version: 2.5.3
+ resolution: "tslib@npm:2.5.3"
+ checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c
+ languageName: node
+ linkType: hard
+
"tslib@npm:~2.6.0":
version: 2.6.3
resolution: "tslib@npm:2.6.3"
@@ -25358,6 +25656,13 @@ __metadata:
languageName: node
linkType: hard
+"urlpattern-polyfill@npm:^8.0.0":
+ version: 8.0.2
+ resolution: "urlpattern-polyfill@npm:8.0.2"
+ checksum: d2cc0905a613c77e330c426e8697ee522dd9640eda79ac51160a0f6350e103f09b8c327623880989f8ba7325e8d95267b745aa280fdcc2aead80b023e16bd09d
+ languageName: node
+ linkType: hard
+
"use-debounce@npm:7.0.1":
version: 7.0.1
resolution: "use-debounce@npm:7.0.1"
@@ -25621,6 +25926,13 @@ __metadata:
languageName: node
linkType: hard
+"web-streams-polyfill@npm:^3.2.1":
+ version: 3.3.3
+ resolution: "web-streams-polyfill@npm:3.3.3"
+ checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb
+ languageName: node
+ linkType: hard
+
"web3-utils@npm:^1.3.4":
version: 1.10.4
resolution: "web3-utils@npm:1.10.4"
@@ -25637,6 +25949,19 @@ __metadata:
languageName: node
linkType: hard
+"webcrypto-core@npm:^1.8.0":
+ version: 1.8.1
+ resolution: "webcrypto-core@npm:1.8.1"
+ dependencies:
+ "@peculiar/asn1-schema": ^2.3.13
+ "@peculiar/json-schema": ^1.1.12
+ asn1js: ^3.0.5
+ pvtsutils: ^1.3.5
+ tslib: ^2.7.0
+ checksum: 5f8d862991bf9b36bfec53a317ceec7de95010c6d16092d2ba62b988acdfca9adfd254ef388036e610c66d0aad506d3f344574f62e06501a8c72ef961c8996b2
+ languageName: node
+ linkType: hard
+
"webidl-conversions@npm:^3.0.0":
version: 3.0.1
resolution: "webidl-conversions@npm:3.0.1"