From e46d299663acd9d1a1a53c15c7211c5928c6703e Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Fri, 8 Aug 2025 12:53:46 -0300
Subject: [PATCH 01/11] fix: show network images correctly
---
.../composites/wui-network-image/index.tsx | 78 +++++++++++--------
1 file changed, 47 insertions(+), 31 deletions(-)
diff --git a/packages/ui/src/composites/wui-network-image/index.tsx b/packages/ui/src/composites/wui-network-image/index.tsx
index ee3ee9ac8..0403e3f9b 100644
--- a/packages/ui/src/composites/wui-network-image/index.tsx
+++ b/packages/ui/src/composites/wui-network-image/index.tsx
@@ -1,9 +1,8 @@
-import { Path, Svg, Image, Defs, Pattern } from 'react-native-svg';
+import { Path, Svg, Image, Defs, Pattern, G } from 'react-native-svg';
import type { StyleProp, ViewStyle } from 'react-native';
import { useTheme } from '../../hooks/useTheme';
import type { SizeType } from '../../utils/TypesUtil';
-import { Icon } from '../../components/wui-icon';
-import { FlexView } from '../../layout/wui-flex';
+import NetworkPlaceholderSvg from '../../assets/svg/NetworkPlaceholder';
import { PathLg, PathNormal, PathSmall, PathXS } from './styles';
export interface NetworkImageProps {
@@ -31,6 +30,13 @@ const sizeToHeight = {
xs: 20
};
+const sizeToIconSize = {
+ lg: 24,
+ md: 16,
+ sm: 14,
+ xs: 12
+};
+
export function NetworkImage({
imageSrc,
imageHeaders,
@@ -44,42 +50,52 @@ export function NetworkImage({
const Theme = useTheme();
const svgStroke = selected ? Theme['accent-100'] : Theme['gray-glass-010'];
const opacity = disabled ? 0.5 : 1;
+ const containerSize = sizeToHeight[size];
+ const iconSize = sizeToIconSize[size];
return (
);
}
From 30847f7af9fc9758248c848cc97078fe67f61ee5 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Fri, 8 Aug 2025 12:54:38 -0300
Subject: [PATCH 02/11] fix: show network images correctly
---
.changeset/six-dots-punch.md | 18 ++++++++++++++++++
packages/core/src/utils/AssetUtil.ts | 12 ++++++------
.../src/modal/w3m-account-button/index.tsx | 6 ++++--
.../src/modal/w3m-network-button/index.tsx | 4 +++-
.../partials/w3m-account-activity/index.tsx | 4 +++-
.../src/partials/w3m-account-tokens/index.tsx | 4 +++-
.../src/partials/w3m-selector-modal/index.tsx | 5 +++--
.../views/w3m-account-default-view/index.tsx | 6 ++++--
.../src/views/w3m-account-view/index.tsx | 4 +++-
.../views/w3m-network-switch-view/index.tsx | 8 ++++++--
.../src/views/w3m-networks-view/index.tsx | 7 +++++--
.../src/views/w3m-onramp-view/index.tsx | 6 ++++--
.../views/w3m-swap-select-token-view/index.tsx | 4 +++-
.../views/w3m-unsupported-chain-view/index.tsx | 6 ++++--
.../index.tsx | 4 +++-
.../views/w3m-wallet-receive-view/index.tsx | 6 ++++--
.../components/preview-send-details.tsx | 6 ++++--
.../index.tsx | 4 +++-
18 files changed, 83 insertions(+), 31 deletions(-)
create mode 100644 .changeset/six-dots-punch.md
diff --git a/.changeset/six-dots-punch.md b/.changeset/six-dots-punch.md
new file mode 100644
index 000000000..60d46ebd7
--- /dev/null
+++ b/.changeset/six-dots-punch.md
@@ -0,0 +1,18 @@
+---
+'@reown/appkit-scaffold-react-native': patch
+'@reown/appkit-core-react-native': patch
+'@reown/appkit-ui-react-native': patch
+'@reown/appkit-auth-ethers-react-native': patch
+'@reown/appkit-auth-wagmi-react-native': patch
+'@reown/appkit-coinbase-ethers-react-native': patch
+'@reown/appkit-coinbase-wagmi-react-native': patch
+'@reown/appkit-common-react-native': patch
+'@reown/appkit-ethers-react-native': patch
+'@reown/appkit-ethers5-react-native': patch
+'@reown/appkit-scaffold-utils-react-native': patch
+'@reown/appkit-siwe-react-native': patch
+'@reown/appkit-wagmi-react-native': patch
+'@reown/appkit-wallet-react-native': patch
+---
+
+fix: show network images correctly
diff --git a/packages/core/src/utils/AssetUtil.ts b/packages/core/src/utils/AssetUtil.ts
index 30efc3eb4..3de12a5b8 100644
--- a/packages/core/src/utils/AssetUtil.ts
+++ b/packages/core/src/utils/AssetUtil.ts
@@ -14,16 +14,16 @@ export const AssetUtil = {
return undefined;
},
- getNetworkImage(network?: CaipNetwork) {
- if (network?.imageUrl) {
- return network?.imageUrl;
+ getNetworkImage(network?: CaipNetwork, networkImages?: Record) {
+ if (!network || !network?.imageId) {
+ return undefined;
}
- if (network?.imageId) {
- return AssetController.state.networkImages[network.imageId];
+ if (network?.imageUrl) {
+ return network.imageUrl;
}
- return undefined;
+ return networkImages?.[network?.imageId];
},
getConnectorImage(connector?: Connector) {
diff --git a/packages/scaffold/src/modal/w3m-account-button/index.tsx b/packages/scaffold/src/modal/w3m-account-button/index.tsx
index b11995fd7..5599924f8 100644
--- a/packages/scaffold/src/modal/w3m-account-button/index.tsx
+++ b/packages/scaffold/src/modal/w3m-account-button/index.tsx
@@ -7,7 +7,8 @@ import {
ModalController,
AssetUtil,
ThemeController,
- ApiController
+ ApiController,
+ AssetController
} from '@reown/appkit-core-react-native';
import { AccountButton as AccountButtonUI, ThemeProvider } from '@reown/appkit-ui-react-native';
@@ -27,9 +28,10 @@ export function AccountButton({ balance, disabled, style, testID }: AccountButto
profileName
} = useSnapshot(AccountController.state);
const { caipNetwork } = useSnapshot(NetworkController.state);
+ const { networkImages } = useSnapshot(AssetController.state);
const { themeMode, themeVariables } = useSnapshot(ThemeController.state);
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const showBalance = balance === 'show';
return (
diff --git a/packages/scaffold/src/modal/w3m-network-button/index.tsx b/packages/scaffold/src/modal/w3m-network-button/index.tsx
index 353a18047..5aa25bb7e 100644
--- a/packages/scaffold/src/modal/w3m-network-button/index.tsx
+++ b/packages/scaffold/src/modal/w3m-network-button/index.tsx
@@ -3,6 +3,7 @@ import type { StyleProp, ViewStyle } from 'react-native';
import {
AccountController,
ApiController,
+ AssetController,
AssetUtil,
EventsController,
ModalController,
@@ -18,6 +19,7 @@ export interface NetworkButtonProps {
export function NetworkButton({ disabled, style }: NetworkButtonProps) {
const { isConnected } = useSnapshot(AccountController.state);
+ const { networkImages } = useSnapshot(AssetController.state);
const { caipNetwork } = useSnapshot(NetworkController.state);
const { loading } = useSnapshot(ModalController.state);
const { themeMode, themeVariables } = useSnapshot(ThemeController.state);
@@ -33,7 +35,7 @@ export function NetworkButton({ disabled, style }: NetworkButtonProps) {
return (
{
TransactionsController.fetchTransactions(AccountController.state.address);
diff --git a/packages/scaffold/src/partials/w3m-account-tokens/index.tsx b/packages/scaffold/src/partials/w3m-account-tokens/index.tsx
index 26db07f9f..9ac266fec 100644
--- a/packages/scaffold/src/partials/w3m-account-tokens/index.tsx
+++ b/packages/scaffold/src/partials/w3m-account-tokens/index.tsx
@@ -9,6 +9,7 @@ import {
import { useSnapshot } from 'valtio';
import {
AccountController,
+ AssetController,
AssetUtil,
NetworkController,
RouterController
@@ -31,7 +32,8 @@ export function AccountTokens({ style }: Props) {
const [refreshing, setRefreshing] = useState(false);
const { tokenBalance } = useSnapshot(AccountController.state);
const { caipNetwork } = useSnapshot(NetworkController.state);
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const { networkImages } = useSnapshot(AssetController.state);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const onRefresh = useCallback(async () => {
setRefreshing(true);
diff --git a/packages/scaffold/src/partials/w3m-selector-modal/index.tsx b/packages/scaffold/src/partials/w3m-selector-modal/index.tsx
index 37c8c94e9..52c6e85a4 100644
--- a/packages/scaffold/src/partials/w3m-selector-modal/index.tsx
+++ b/packages/scaffold/src/partials/w3m-selector-modal/index.tsx
@@ -13,7 +13,7 @@ import {
useTheme
} from '@reown/appkit-ui-react-native';
import styles from './styles';
-import { AssetUtil, NetworkController } from '@reown/appkit-core-react-native';
+import { AssetController, AssetUtil, NetworkController } from '@reown/appkit-core-react-native';
interface SelectorModalProps {
title?: string;
@@ -46,7 +46,8 @@ export function SelectorModal({
}: SelectorModalProps) {
const Theme = useTheme();
const { caipNetwork } = useSnapshot(NetworkController.state);
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const { networkImages } = useSnapshot(AssetController.state);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const renderSeparator = () => {
return ;
diff --git a/packages/scaffold/src/views/w3m-account-default-view/index.tsx b/packages/scaffold/src/views/w3m-account-default-view/index.tsx
index cb5ca3a7f..4503284bb 100644
--- a/packages/scaffold/src/views/w3m-account-default-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-account-default-view/index.tsx
@@ -18,7 +18,8 @@ import {
type AppKitFrameProvider,
ConstantsUtil,
SwapController,
- OnRampController
+ OnRampController,
+ AssetController
} from '@reown/appkit-core-react-native';
import {
Avatar,
@@ -52,7 +53,8 @@ export function AccountDefaultView() {
const { connectedSocialProvider } = useSnapshot(ConnectionController.state);
const { features, isOnRampEnabled } = useSnapshot(OptionsController.state);
const { history } = useSnapshot(RouterController.state);
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const { networkImages } = useSnapshot(AssetController.state);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const showCopy = OptionsController.isClipboardAvailable();
const isAuth = connectedConnector === 'AUTH';
const showBalance = balance && !isAuth;
diff --git a/packages/scaffold/src/views/w3m-account-view/index.tsx b/packages/scaffold/src/views/w3m-account-view/index.tsx
index 14e19d858..8ecbb7387 100644
--- a/packages/scaffold/src/views/w3m-account-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-account-view/index.tsx
@@ -13,6 +13,7 @@ import {
import {
AccountController,
ApiController,
+ AssetController,
AssetUtil,
ModalController,
NetworkController,
@@ -28,6 +29,7 @@ export function AccountView() {
const Theme = useTheme();
const { padding } = useCustomDimensions();
const { caipNetwork } = useSnapshot(NetworkController.state);
+ const { networkImages } = useSnapshot(AssetController.state);
const { address, profileName, profileImage, preferredAccountType } = useSnapshot(
AccountController.state
);
@@ -74,7 +76,7 @@ export function AccountView() {
]}
>
(false);
const [showRetry, setShowRetry] = useState(false);
@@ -115,8 +119,8 @@ export function NetworkSwitchView() {
{error && (
diff --git a/packages/scaffold/src/views/w3m-networks-view/index.tsx b/packages/scaffold/src/views/w3m-networks-view/index.tsx
index 30bdd0299..dc6b12217 100644
--- a/packages/scaffold/src/views/w3m-networks-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-networks-view/index.tsx
@@ -1,3 +1,4 @@
+import { useSnapshot } from 'valtio';
import { ScrollView, View } from 'react-native';
import {
CardSelect,
@@ -16,7 +17,8 @@ import {
type CaipNetwork,
EventsController,
CoreHelperUtil,
- NetworkUtil
+ NetworkUtil,
+ AssetController
} from '@reown/appkit-core-react-native';
import { useCustomDimensions } from '../../hooks/useCustomDimensions';
import styles from './styles';
@@ -24,6 +26,7 @@ import styles from './styles';
export function NetworksView() {
const { caipNetwork, requestedCaipNetworks, approvedCaipNetworkIds, supportsAllNetworks } =
NetworkController.state;
+ const { networkImages } = useSnapshot(AssetController.state);
const imageHeaders = ApiController._getApiHeaders();
const { maxWidth: width, padding } = useCustomDimensions();
const numColumns = 4;
@@ -69,7 +72,7 @@ export function NetworksView() {
testID={`w3m-network-switch-${network.name ?? network.id}`}
name={network.name ?? 'Unknown'}
type="network"
- imageSrc={AssetUtil.getNetworkImage(network)}
+ imageSrc={AssetUtil.getNetworkImage(network, networkImages)}
imageHeaders={imageHeaders}
disabled={!supportsAllNetworks && !approvedCaipNetworkIds?.includes(network.id)}
selected={caipNetwork?.id === network.id}
diff --git a/packages/scaffold/src/views/w3m-onramp-view/index.tsx b/packages/scaffold/src/views/w3m-onramp-view/index.tsx
index 2de305fe2..3eae31b87 100644
--- a/packages/scaffold/src/views/w3m-onramp-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-onramp-view/index.tsx
@@ -10,7 +10,8 @@ import {
NetworkController,
AssetUtil,
SnackController,
- ConstantsUtil
+ ConstantsUtil,
+ AssetController
} from '@reown/appkit-core-react-native';
import {
Button,
@@ -50,12 +51,13 @@ export function OnRampView() {
initialLoading
} = useSnapshot(OnRampController.state) as OnRampControllerState;
const { caipNetwork } = useSnapshot(NetworkController.state);
+ const { networkImages } = useSnapshot(AssetController.state);
const [searchValue, setSearchValue] = useState('');
const [isCurrencyModalVisible, setIsCurrencyModalVisible] = useState(false);
const [isPaymentMethodModalVisible, setIsPaymentMethodModalVisible] = useState(false);
const purchaseCurrencyCode =
purchaseCurrency?.currencyCode?.split('_')[0] ?? purchaseCurrency?.currencyCode;
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const getQuotes = useCallback(() => {
if (OnRampController.canGenerateQuote()) {
diff --git a/packages/scaffold/src/views/w3m-swap-select-token-view/index.tsx b/packages/scaffold/src/views/w3m-swap-select-token-view/index.tsx
index 0a7168004..00da436c0 100644
--- a/packages/scaffold/src/views/w3m-swap-select-token-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-swap-select-token-view/index.tsx
@@ -13,6 +13,7 @@ import {
} from '@reown/appkit-ui-react-native';
import {
+ AssetController,
AssetUtil,
NetworkController,
RouterController,
@@ -30,7 +31,8 @@ export function SwapSelectTokenView() {
const Theme = useTheme();
const { caipNetwork } = useSnapshot(NetworkController.state);
const { sourceToken, suggestedTokens } = useSnapshot(SwapController.state);
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const { networkImages } = useSnapshot(AssetController.state);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
const [tokenSearch, setTokenSearch] = useState('');
const isSourceToken = RouterController.state.data?.swapTarget === 'sourceToken';
diff --git a/packages/scaffold/src/views/w3m-unsupported-chain-view/index.tsx b/packages/scaffold/src/views/w3m-unsupported-chain-view/index.tsx
index f2074e505..13e4309da 100644
--- a/packages/scaffold/src/views/w3m-unsupported-chain-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-unsupported-chain-view/index.tsx
@@ -11,13 +11,15 @@ import {
NetworkController,
NetworkUtil,
type CaipNetwork,
- type NetworkControllerState
+ type NetworkControllerState,
+ AssetController
} from '@reown/appkit-core-react-native';
import styles from './styles';
export function UnsupportedChainView() {
const { caipNetwork, supportsAllNetworks, approvedCaipNetworkIds, requestedCaipNetworks } =
useSnapshot(NetworkController.state) as NetworkControllerState;
+ const { networkImages } = useSnapshot(AssetController.state);
const [disconnecting, setDisconnecting] = useState(false);
const networks = CoreHelperUtil.sortNetworks(approvedCaipNetworkIds, requestedCaipNetworks);
@@ -59,7 +61,7 @@ export function UnsupportedChainView() {
key={item.id}
icon="networkPlaceholder"
iconBackgroundColor="gray-glass-010"
- imageSrc={AssetUtil.getNetworkImage(item)}
+ imageSrc={AssetUtil.getNetworkImage(item, networkImages)}
imageHeaders={imageHeaders}
onPress={() => onNetworkPress(item)}
testID="button-network"
diff --git a/packages/scaffold/src/views/w3m-wallet-compatible-networks-view/index.tsx b/packages/scaffold/src/views/w3m-wallet-compatible-networks-view/index.tsx
index 3695bc470..2028557d8 100644
--- a/packages/scaffold/src/views/w3m-wallet-compatible-networks-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-wallet-compatible-networks-view/index.tsx
@@ -4,6 +4,7 @@ import { FlexView, Text, Banner, NetworkImage } from '@reown/appkit-ui-react-nat
import {
AccountController,
ApiController,
+ AssetController,
AssetUtil,
NetworkController
} from '@reown/appkit-core-react-native';
@@ -13,6 +14,7 @@ import styles from './styles';
export function WalletCompatibleNetworks() {
const { padding } = useCustomDimensions();
const { preferredAccountType } = useSnapshot(AccountController.state);
+ const { networkImages } = useSnapshot(AssetController.state);
const isSmartAccount =
preferredAccountType === 'smartAccount' && NetworkController.checkIfSmartAccountEnabled();
const approvedNetworks = isSmartAccount
@@ -32,7 +34,7 @@ export function WalletCompatibleNetworks() {
padding={['s', 's', 's', 's']}
>
network?.imageId)
.slice(0, 5)
- .map(AssetUtil.getNetworkImage)
+ .map(network => AssetUtil.getNetworkImage(network, networkImages))
.filter(Boolean) as string[];
const label = UiUtil.getTruncateString({
diff --git a/packages/scaffold/src/views/w3m-wallet-send-preview-view/components/preview-send-details.tsx b/packages/scaffold/src/views/w3m-wallet-send-preview-view/components/preview-send-details.tsx
index d71df1740..c0cdd4179 100644
--- a/packages/scaffold/src/views/w3m-wallet-send-preview-view/components/preview-send-details.tsx
+++ b/packages/scaffold/src/views/w3m-wallet-send-preview-view/components/preview-send-details.tsx
@@ -1,4 +1,5 @@
-import { AssetUtil, type CaipNetwork } from '@reown/appkit-core-react-native';
+import { useSnapshot } from 'valtio';
+import { AssetController, AssetUtil, type CaipNetwork } from '@reown/appkit-core-react-native';
import {
BorderRadius,
FlexView,
@@ -26,6 +27,7 @@ export function PreviewSendDetails({
style
}: PreviewSendDetailsProps) {
const Theme = useTheme();
+ const { networkImages } = useSnapshot(AssetController.state);
const formattedName = UiUtil.getTruncateString({
string: name ?? '',
@@ -41,7 +43,7 @@ export function PreviewSendDetails({
truncate: 'middle'
});
- const networkImage = AssetUtil.getNetworkImage(caipNetwork);
+ const networkImage = AssetUtil.getNetworkImage(caipNetwork, networkImages);
return (
('');
const [filteredTokens, setFilteredTokens] = useState(tokenBalance ?? []);
From 3f8f11e233bca69958da131bd694e6a9351e001c Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Fri, 8 Aug 2025 12:57:46 -0300
Subject: [PATCH 03/11] chore: lint fix
---
packages/scaffold/src/views/w3m-wallet-receive-view/index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/scaffold/src/views/w3m-wallet-receive-view/index.tsx b/packages/scaffold/src/views/w3m-wallet-receive-view/index.tsx
index b2746c468..12a80e661 100644
--- a/packages/scaffold/src/views/w3m-wallet-receive-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-wallet-receive-view/index.tsx
@@ -37,7 +37,7 @@ export function WalletReceiveView() {
const imagesArray = networks
.filter(network => network?.imageId)
.slice(0, 5)
- .map(network => AssetUtil.getNetworkImage(network, networkImages))
+ .map(network => AssetUtil.getNetworkImage(network, AssetController.state.networkImages))
.filter(Boolean) as string[];
const label = UiUtil.getTruncateString({
From 0a4663455d077efd4de0b3539c25d004f2d1e221 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Wed, 13 Aug 2025 14:43:07 -0300
Subject: [PATCH 04/11] fix: check imageSrc from props in memo config of
network button
---
packages/ui/src/composites/wui-card-select/index.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/ui/src/composites/wui-card-select/index.tsx b/packages/ui/src/composites/wui-card-select/index.tsx
index fd4f50458..3e9a5b3a6 100644
--- a/packages/ui/src/composites/wui-card-select/index.tsx
+++ b/packages/ui/src/composites/wui-card-select/index.tsx
@@ -100,5 +100,5 @@ function _CardSelect({
}
export const CardSelect = memo(_CardSelect, (prevProps, nextProps) => {
- return prevProps.name === nextProps.name;
+ return prevProps.name === nextProps.name && prevProps.imageSrc === nextProps.imageSrc;
});
From aa66d089efe990362957bea22afa5de4f9a1dd5b Mon Sep 17 00:00:00 2001
From: Ignacio Santise <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 17:21:31 -0300
Subject: [PATCH 05/11] feat: added cli for appkit (#413)
---
.changeset/sad-crabs-wink.md | 5 ++++
package.json | 1 +
packages/cli/.npmignore | 10 +++++++
packages/cli/bob.config.js | 14 +++++++++
packages/cli/package.json | 52 +++++++++++++++++++++++++++++++++
packages/cli/src/index.ts | 56 ++++++++++++++++++++++++++++++++++++
packages/cli/src/utils.ts | 17 +++++++++++
packages/cli/tsconfig.json | 5 ++++
yarn.lock | 17 +++++++++++
9 files changed, 177 insertions(+)
create mode 100644 .changeset/sad-crabs-wink.md
create mode 100644 packages/cli/.npmignore
create mode 100644 packages/cli/bob.config.js
create mode 100644 packages/cli/package.json
create mode 100644 packages/cli/src/index.ts
create mode 100644 packages/cli/src/utils.ts
create mode 100644 packages/cli/tsconfig.json
diff --git a/.changeset/sad-crabs-wink.md b/.changeset/sad-crabs-wink.md
new file mode 100644
index 000000000..430c56fca
--- /dev/null
+++ b/.changeset/sad-crabs-wink.md
@@ -0,0 +1,5 @@
+---
+'@reown/appkit-react-native-cli': minor
+---
+
+feat: added appkit cli for react native
diff --git a/package.json b/package.json
index 0afbf1b6e..fc5a5c418 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"packages/coinbase-ethers",
"packages/ethers5",
"packages/ethers",
+ "packages/cli",
"apps/*"
],
"scripts": {
diff --git a/packages/cli/.npmignore b/packages/cli/.npmignore
new file mode 100644
index 000000000..e203f76ad
--- /dev/null
+++ b/packages/cli/.npmignore
@@ -0,0 +1,10 @@
+*.log
+*.env
+npm-debug.log*
+node_modules
+package-lock.json
+src
+tests
+index.ts
+.eslintrc.json
+.turbo
diff --git a/packages/cli/bob.config.js b/packages/cli/bob.config.js
new file mode 100644
index 000000000..b7ca0ad66
--- /dev/null
+++ b/packages/cli/bob.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+ source: 'src',
+ output: 'lib',
+ targets: [
+ 'commonjs',
+ 'module',
+ [
+ 'typescript',
+ {
+ tsc: '../../node_modules/.bin/tsc'
+ }
+ ]
+ ]
+};
diff --git a/packages/cli/package.json b/packages/cli/package.json
new file mode 100644
index 000000000..c5dc77a2f
--- /dev/null
+++ b/packages/cli/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@reown/appkit-react-native-cli",
+ "version": "1.2.0",
+ "sideEffects": false,
+ "description": "Reown AppKit CLI for React Native",
+ "main": "lib/commonjs/index.js",
+ "types": "lib/typescript/index.d.ts",
+ "module": "lib/module/index.js",
+ "bin": {
+ "appkit-react-native": "lib/commonjs/index.js"
+ },
+ "repository": "https://github.com/reown-com/appkit-react-native",
+ "author": "Reown (https://discord.gg/reown)",
+ "homepage": "https://reown.com/appkit",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/reown-com/appkit-react-native/issues"
+ },
+ "scripts": {
+ "build": "bob build",
+ "clean": "rm -rf lib",
+ "lint": "eslint . --ext .js,.jsx,.ts,.tsx"
+ },
+ "files": [
+ "src",
+ "lib",
+ "!**/__tests__",
+ "!**/__fixtures__",
+ "!**/__mocks__"
+ ],
+ "dependencies": {
+ "chalk": "5.4.1"
+ },
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/",
+ "access": "public"
+ },
+ "eslintIgnore": [
+ "node_modules/",
+ "lib/"
+ ],
+ "keywords": [
+ "appkit",
+ "wallet",
+ "onboarding",
+ "reown",
+ "dapps",
+ "web3",
+ "wagmi",
+ "ethereum"
+ ]
+}
diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts
new file mode 100644
index 000000000..53c786e22
--- /dev/null
+++ b/packages/cli/src/index.ts
@@ -0,0 +1,56 @@
+#!/usr/bin/env node
+import chalk from 'chalk';
+import { spawn } from 'child_process';
+
+import { banner } from './utils';
+
+// Define styles
+const redTip = chalk.hex('#C70039'); // Red for tips
+
+// Display CLI Banner
+// eslint-disable-next-line no-console
+console.log(banner);
+
+const TEMPLATE_URL =
+ 'https://github.com/reown-com/react-native-examples/tree/main/dapps/appkit-expo-wagmi';
+
+function runExpoCreate() {
+ return new Promise((resolve, reject) => {
+ const child = spawn('npx', ['create-expo', '--template', TEMPLATE_URL], {
+ stdio: 'inherit',
+ shell: process.platform === 'win32'
+ });
+
+ child.on('error', reject);
+ child.on('close', code => {
+ if (code === 0) {
+ resolve();
+ } else {
+ reject(new Error(`create-expo exited with code ${code}`));
+ }
+ });
+ });
+}
+
+export async function main() {
+ try {
+ await runExpoCreate();
+ } catch (error: any) {
+ // eslint-disable-next-line no-console
+ console.error('Failed to run Expo initializer:', error?.message || error);
+ process.exitCode = 1;
+
+ return;
+ }
+
+ const url = 'https://dashboard.reown.com';
+ // eslint-disable-next-line no-console
+ console.log(`Your ${redTip('Project Id')} will work only on the Expo Go environment`);
+ // eslint-disable-next-line no-console
+ console.log(`
+Go to: ${url}
+To create a personal ProjectId
+`);
+}
+
+main();
diff --git a/packages/cli/src/utils.ts b/packages/cli/src/utils.ts
new file mode 100644
index 000000000..6c9cfc74e
--- /dev/null
+++ b/packages/cli/src/utils.ts
@@ -0,0 +1,17 @@
+export const banner = `
+ @@@@@@@ @@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@@@@@@@@@@ Reown AppKit React Native CLI
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@ The easiest way to build dApps!
+ @@@@@@ @@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@
+ @@@@@@ @@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@ @@@@@@@@@@@@@@@@@@
+`;
diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json
new file mode 100644
index 000000000..02d8b10ac
--- /dev/null
+++ b/packages/cli/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "extends": "../../tsconfig.json",
+ "include": ["src"],
+ "exclude": ["lib", "node_modules"]
+}
diff --git a/yarn.lock b/yarn.lock
index 4d00fd732..b7cb41ac2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7326,6 +7326,16 @@ __metadata:
languageName: node
linkType: hard
+"@reown/appkit-react-native-cli@workspace:packages/cli":
+ version: 0.0.0-use.local
+ resolution: "@reown/appkit-react-native-cli@workspace:packages/cli"
+ dependencies:
+ chalk: "npm:5.4.1"
+ bin:
+ appkit-react-native: lib/commonjs/index.js
+ languageName: unknown
+ linkType: soft
+
"@reown/appkit-scaffold-react-native@npm:1.3.0, @reown/appkit-scaffold-react-native@workspace:packages/scaffold":
version: 0.0.0-use.local
resolution: "@reown/appkit-scaffold-react-native@workspace:packages/scaffold"
@@ -11549,6 +11559,13 @@ __metadata:
languageName: node
linkType: hard
+"chalk@npm:5.4.1":
+ version: 5.4.1
+ resolution: "chalk@npm:5.4.1"
+ checksum: b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef
+ languageName: node
+ linkType: hard
+
"chalk@npm:^2.0.1, chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
From 60499340daafd7162c57eadf08e5cbcda9586271 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 17:47:35 -0600
Subject: [PATCH 06/11] fix: get the connector id before setting the approved
networks
---
packages/core/src/controllers/ConnectorController.ts | 6 +++---
packages/core/src/controllers/NetworkController.ts | 8 ++++----
packages/ethers/src/client.ts | 3 ++-
packages/ethers5/src/client.ts | 3 ++-
packages/scaffold/src/client.ts | 3 ++-
.../scaffold/src/views/w3m-connecting-view/index.tsx | 2 +-
packages/wagmi/src/client.ts | 10 +++++-----
7 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/packages/core/src/controllers/ConnectorController.ts b/packages/core/src/controllers/ConnectorController.ts
index 7ff77664c..798aadd51 100644
--- a/packages/core/src/controllers/ConnectorController.ts
+++ b/packages/core/src/controllers/ConnectorController.ts
@@ -42,7 +42,7 @@ export const ConnectorController = {
return state.connectors.find(c => c.type === 'AUTH');
},
- setConnectedConnector(
+ async setConnectedConnector(
connectorType: ConnectorControllerState['connectedConnector'],
saveStorage = true
) {
@@ -50,9 +50,9 @@ export const ConnectorController = {
if (saveStorage) {
if (connectorType) {
- StorageUtil.setConnectedConnector(connectorType);
+ await StorageUtil.setConnectedConnector(connectorType);
} else {
- StorageUtil.removeConnectedConnector();
+ await StorageUtil.removeConnectedConnector();
}
}
},
diff --git a/packages/core/src/controllers/NetworkController.ts b/packages/core/src/controllers/NetworkController.ts
index f1023c952..25649d16e 100644
--- a/packages/core/src/controllers/NetworkController.ts
+++ b/packages/core/src/controllers/NetworkController.ts
@@ -1,13 +1,13 @@
import { proxy, ref } from 'valtio';
import type { CaipNetwork, CaipNetworkId } from '../utils/TypeUtil';
import { PublicStateController } from './PublicStateController';
-import { NetworkUtil } from '@reown/appkit-common-react-native';
+import { NetworkUtil, type ConnectorType } from '@reown/appkit-common-react-native';
import { ConstantsUtil } from '../utils/ConstantsUtil';
// -- Types --------------------------------------------- //
export interface NetworkControllerClient {
switchCaipNetwork: (network: NetworkControllerState['caipNetwork']) => Promise;
- getApprovedCaipNetworksData: () => Promise<{
+ getApprovedCaipNetworksData: (connectorType?: ConnectorType) => Promise<{
approvedCaipNetworkIds: NetworkControllerState['approvedCaipNetworkIds'];
supportsAllNetworks: NetworkControllerState['supportsAllNetworks'];
}>;
@@ -77,8 +77,8 @@ export const NetworkController = {
return Boolean(state.smartAccountEnabledNetworks?.includes(Number(networkId)));
},
- async getApprovedCaipNetworksData() {
- const data = await this._getClient().getApprovedCaipNetworksData();
+ async getApprovedCaipNetworksData(connectorType?: ConnectorType) {
+ const data = await this._getClient().getApprovedCaipNetworksData(connectorType);
state.supportsAllNetworks = data.supportsAllNetworks;
state.approvedCaipNetworkIds = data.approvedCaipNetworkIds;
},
diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts
index c60c214d3..dc134eb32 100644
--- a/packages/ethers/src/client.ts
+++ b/packages/ethers/src/client.ts
@@ -139,7 +139,8 @@ export class AppKit extends AppKitScaffold {
getApprovedCaipNetworksData: async () =>
new Promise(async resolve => {
- const walletChoice = await StorageUtil.getConnectedConnector();
+ const walletId = (await StorageUtil.getItem(EthersConstantsUtil.WALLET_ID)) as string;
+ const walletChoice = PresetsUtil.ConnectorTypesMap[walletId ?? ''];
const walletConnectType =
PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]!;
diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts
index 5fb0625c1..201c1814a 100644
--- a/packages/ethers5/src/client.ts
+++ b/packages/ethers5/src/client.ts
@@ -126,7 +126,8 @@ export class AppKit extends AppKitScaffold {
getApprovedCaipNetworksData: async () =>
new Promise(async resolve => {
- const walletChoice = await StorageUtil.getConnectedConnector();
+ const walletId = (await StorageUtil.getItem(EthersConstantsUtil.WALLET_ID)) as string;
+ const walletChoice = PresetsUtil.ConnectorTypesMap[walletId ?? ''];
const walletConnectType =
PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]!;
diff --git a/packages/scaffold/src/client.ts b/packages/scaffold/src/client.ts
index c8133f4cc..46f6e3356 100644
--- a/packages/scaffold/src/client.ts
+++ b/packages/scaffold/src/client.ts
@@ -33,6 +33,7 @@ import { SIWEController, type SIWEControllerClient } from '@reown/appkit-siwe-re
import {
ConstantsUtil,
ErrorUtil,
+ type ConnectorType,
type ThemeMode,
type ThemeVariables
} from '@reown/appkit-common-react-native';
@@ -197,7 +198,7 @@ export class AppKitScaffold {
};
protected getApprovedCaipNetworksData: (typeof NetworkController)['getApprovedCaipNetworksData'] =
- () => NetworkController.getApprovedCaipNetworksData();
+ (connectorType?: ConnectorType) => NetworkController.getApprovedCaipNetworksData(connectorType);
protected resetNetwork: (typeof NetworkController)['resetNetwork'] = () => {
NetworkController.resetNetwork();
diff --git a/packages/scaffold/src/views/w3m-connecting-view/index.tsx b/packages/scaffold/src/views/w3m-connecting-view/index.tsx
index 44ee537c9..d43de6e2e 100644
--- a/packages/scaffold/src/views/w3m-connecting-view/index.tsx
+++ b/packages/scaffold/src/views/w3m-connecting-view/index.tsx
@@ -50,7 +50,7 @@ export function ConnectingView() {
ConnectionController.setWcError(false);
ConnectionController.connectWalletConnect(routeData?.wallet?.link_mode ?? undefined);
await ConnectionController.state.wcPromise;
- ConnectorController.setConnectedConnector('WALLET_CONNECT');
+ await ConnectorController.setConnectedConnector('WALLET_CONNECT');
AccountController.setIsConnected(true);
if (OptionsController.state.isSiweEnabled) {
diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts
index 5c4a4aace..d9897d4ca 100644
--- a/packages/wagmi/src/client.ts
+++ b/packages/wagmi/src/client.ts
@@ -111,20 +111,19 @@ export class AppKit extends AppKitScaffold {
}
},
- async getApprovedCaipNetworksData() {
- const walletChoice = await StorageUtil.getConnectedConnector();
+ async getApprovedCaipNetworksData(connectorType?: ConnectorType) {
const walletConnectType =
PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]!;
const authType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.AUTH_CONNECTOR_ID]!;
- if (walletChoice?.includes(walletConnectType)) {
+ if (connectorType?.includes(walletConnectType)) {
const connector = wagmiConfig.connectors.find(
c => c.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID
);
return getWalletConnectCaipNetworks(connector);
- } else if (authType) {
+ } else if (connectorType?.includes(authType)) {
return getAuthCaipNetworks();
}
@@ -443,11 +442,12 @@ export class AppKit extends AppKitScaffold {
const caipAddress: CaipAddress = `${ConstantsUtil.EIP155}:${chainId}:${address}`;
this.setIsConnected(isConnected);
this.setCaipAddress(caipAddress);
+ const connectorType = PresetsUtil.ConnectorTypesMap[connector?.id ?? ''];
await Promise.all([
this.syncProfile(address, chainId),
this.syncBalance(address, chainId),
this.syncConnectedWalletInfo(connector),
- this.getApprovedCaipNetworksData()
+ this.getApprovedCaipNetworksData(connectorType)
]);
this.hasSyncedConnectedAccount = true;
} else if (!isConnected && !isConnecting && !isReconnecting && this.hasSyncedConnectedAccount) {
From 0d087efc6971c0ad9445b565ca51f709f78ac4cf Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 17:51:46 -0600
Subject: [PATCH 07/11] chore: changeset file
---
.changeset/ready-books-march.md | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 .changeset/ready-books-march.md
diff --git a/.changeset/ready-books-march.md b/.changeset/ready-books-march.md
new file mode 100644
index 000000000..137297830
--- /dev/null
+++ b/.changeset/ready-books-march.md
@@ -0,0 +1,19 @@
+---
+'@reown/appkit-scaffold-react-native': patch
+'@reown/appkit-ethers5-react-native': patch
+'@reown/appkit-ethers-react-native': patch
+'@reown/appkit-wagmi-react-native': patch
+'@reown/appkit-core-react-native': patch
+'@reown/appkit-auth-ethers-react-native': patch
+'@reown/appkit-auth-wagmi-react-native': patch
+'@reown/appkit-react-native-cli': patch
+'@reown/appkit-coinbase-ethers-react-native': patch
+'@reown/appkit-coinbase-wagmi-react-native': patch
+'@reown/appkit-common-react-native': patch
+'@reown/appkit-scaffold-utils-react-native': patch
+'@reown/appkit-siwe-react-native': patch
+'@reown/appkit-ui-react-native': patch
+'@reown/appkit-wallet-react-native': patch
+---
+
+fix: correctly set approved networks and support all networks flag
From c09906af7ffb933468cbce361a3cc28f72fc39c0 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 18:36:14 -0600
Subject: [PATCH 08/11] chore: removed old changeset file
---
.changeset/sad-crabs-wink.md | 5 -----
1 file changed, 5 deletions(-)
delete mode 100644 .changeset/sad-crabs-wink.md
diff --git a/.changeset/sad-crabs-wink.md b/.changeset/sad-crabs-wink.md
deleted file mode 100644
index 430c56fca..000000000
--- a/.changeset/sad-crabs-wink.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@reown/appkit-react-native-cli': minor
----
-
-feat: added appkit cli for react native
From 7f78bbd60dc5238fecfedda465f2845bb1cf7e87 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 22:16:34 -0600
Subject: [PATCH 09/11] chore: changed connector type comparison
---
packages/ethers/src/client.ts | 4 ++--
packages/ethers5/src/client.ts | 4 ++--
packages/wagmi/src/client.ts | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts
index dc134eb32..ec4dc2f0f 100644
--- a/packages/ethers/src/client.ts
+++ b/packages/ethers/src/client.ts
@@ -145,12 +145,12 @@ export class AppKit extends AppKitScaffold {
PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]!;
const authType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.AUTH_CONNECTOR_ID]!;
- if (walletChoice?.includes(walletConnectType)) {
+ if (walletChoice === walletConnectType) {
const provider = await this.getWalletConnectProvider();
const result = getWalletConnectCaipNetworks(provider);
resolve(result);
- } else if (walletChoice?.includes(authType)) {
+ } else if (walletChoice === authType) {
const result = getAuthCaipNetworks();
resolve(result);
} else {
diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts
index 201c1814a..b6693dab7 100644
--- a/packages/ethers5/src/client.ts
+++ b/packages/ethers5/src/client.ts
@@ -132,12 +132,12 @@ export class AppKit extends AppKitScaffold {
PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]!;
const authType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.AUTH_CONNECTOR_ID]!;
- if (walletChoice?.includes(walletConnectType)) {
+ if (walletChoice === walletConnectType) {
const provider = await this.getWalletConnectProvider();
const result = getWalletConnectCaipNetworks(provider);
resolve(result);
- } else if (walletChoice?.includes(authType)) {
+ } else if (walletChoice === authType) {
const result = getAuthCaipNetworks();
resolve(result);
} else {
diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts
index d9897d4ca..88b30d1c6 100644
--- a/packages/wagmi/src/client.ts
+++ b/packages/wagmi/src/client.ts
@@ -117,13 +117,13 @@ export class AppKit extends AppKitScaffold {
const authType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.AUTH_CONNECTOR_ID]!;
- if (connectorType?.includes(walletConnectType)) {
+ if (connectorType === walletConnectType) {
const connector = wagmiConfig.connectors.find(
c => c.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID
);
return getWalletConnectCaipNetworks(connector);
- } else if (connectorType?.includes(authType)) {
+ } else if (connectorType === authType) {
return getAuthCaipNetworks();
}
From 98fc8b67dd705dc0bd20bda21ecc410c38a3869e Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 22:19:25 -0600
Subject: [PATCH 10/11] chore: bump internal dependencies to solve security
warnings
---
package.json | 4 +-
yarn.lock | 237 +++++++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 223 insertions(+), 18 deletions(-)
diff --git a/package.json b/package.json
index fc5a5c418..106bc985d 100644
--- a/package.json
+++ b/package.json
@@ -92,6 +92,8 @@
"esbuild": "0.25.0",
"postcss": "8.4.31",
"cookie": "0.7.0",
- "ip": "^2.0.1"
+ "ip": "^2.0.1",
+ "form-data": "3.0.4",
+ "sha.js": "2.4.12"
}
}
diff --git a/yarn.lock b/yarn.lock
index b7cb41ac2..82078e817 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10617,6 +10617,15 @@ __metadata:
languageName: node
linkType: hard
+"available-typed-arrays@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "available-typed-arrays@npm:1.0.7"
+ dependencies:
+ possible-typed-array-names: "npm:^1.0.0"
+ checksum: d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2
+ languageName: node
+ linkType: hard
+
"babel-core@npm:^7.0.0-bridge.0":
version: 7.0.0-bridge.0
resolution: "babel-core@npm:7.0.0-bridge.0"
@@ -11415,6 +11424,16 @@ __metadata:
languageName: node
linkType: hard
+"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "call-bind-apply-helpers@npm:1.0.2"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ function-bind: "npm:^1.1.2"
+ checksum: 47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938
+ languageName: node
+ linkType: hard
+
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
version: 1.0.2
resolution: "call-bind@npm:1.0.2"
@@ -11438,6 +11457,28 @@ __metadata:
languageName: node
linkType: hard
+"call-bind@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "call-bind@npm:1.0.8"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.0"
+ es-define-property: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.2.4"
+ set-function-length: "npm:^1.2.2"
+ checksum: a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4
+ languageName: node
+ linkType: hard
+
+"call-bound@npm:^1.0.3, call-bound@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "call-bound@npm:1.0.4"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.2"
+ get-intrinsic: "npm:^1.3.0"
+ checksum: f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644
+ languageName: node
+ linkType: hard
+
"caller-callsite@npm:^2.0.0":
version: 2.0.0
resolution: "caller-callsite@npm:2.0.0"
@@ -12891,6 +12932,17 @@ __metadata:
languageName: node
linkType: hard
+"dunder-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "dunder-proto@npm:1.0.1"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ gopd: "npm:^1.2.0"
+ checksum: 199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031
+ languageName: node
+ linkType: hard
+
"duplexify@npm:^4.1.2":
version: 4.1.2
resolution: "duplexify@npm:4.1.2"
@@ -13239,6 +13291,13 @@ __metadata:
languageName: node
linkType: hard
+"es-define-property@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "es-define-property@npm:1.0.1"
+ checksum: 3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c
+ languageName: node
+ linkType: hard
+
"es-errors@npm:^1.3.0":
version: 1.3.0
resolution: "es-errors@npm:1.3.0"
@@ -13260,6 +13319,15 @@ __metadata:
languageName: node
linkType: hard
+"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "es-object-atoms@npm:1.1.1"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ checksum: 65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c
+ languageName: node
+ linkType: hard
+
"es-set-tostringtag@npm:^2.0.1":
version: 2.0.1
resolution: "es-set-tostringtag@npm:2.0.1"
@@ -13271,6 +13339,18 @@ __metadata:
languageName: node
linkType: hard
+"es-set-tostringtag@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "es-set-tostringtag@npm:2.1.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.6"
+ has-tostringtag: "npm:^1.0.2"
+ hasown: "npm:^2.0.2"
+ checksum: ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af
+ languageName: node
+ linkType: hard
+
"es-shim-unscopables@npm:^1.0.0":
version: 1.0.0
resolution: "es-shim-unscopables@npm:1.0.0"
@@ -14721,6 +14801,15 @@ __metadata:
languageName: node
linkType: hard
+"for-each@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "for-each@npm:0.3.5"
+ dependencies:
+ is-callable: "npm:^1.2.7"
+ checksum: 0e0b50f6a843a282637d43674d1fb278dda1dd85f4f99b640024cfb10b85058aac0cc781bf689d5fe50b4b7f638e91e548560723a4e76e04fe96ae35ef039cee
+ languageName: node
+ linkType: hard
+
"foreground-child@npm:^3.1.0":
version: 3.1.1
resolution: "foreground-child@npm:3.1.1"
@@ -14754,14 +14843,16 @@ __metadata:
languageName: node
linkType: hard
-"form-data@npm:^3.0.1":
- version: 3.0.1
- resolution: "form-data@npm:3.0.1"
+"form-data@npm:3.0.4":
+ version: 3.0.4
+ resolution: "form-data@npm:3.0.4"
dependencies:
asynckit: "npm:^0.4.0"
combined-stream: "npm:^1.0.8"
- mime-types: "npm:^2.1.12"
- checksum: 1ccc3ae064a080a799923f754d49fcebdd90515a8924f0f54de557540b50e7f1fe48ba5f2bd0435a5664aa2d49729107e6aaf2155a9abf52339474c5638b4485
+ es-set-tostringtag: "npm:^2.1.0"
+ hasown: "npm:^2.0.2"
+ mime-types: "npm:^2.1.35"
+ checksum: 2451043b3e931653ce9690ba051b0bf1b5855a63029279bd7bdf8d02e4b5b42f4582b23ed3637df27a0d21bac2013c37d165ec9486e1af2470c13114aee83acc
languageName: node
linkType: hard
@@ -14995,6 +15086,24 @@ __metadata:
languageName: node
linkType: hard
+"get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "get-intrinsic@npm:1.3.0"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.2"
+ es-define-property: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.1.1"
+ function-bind: "npm:^1.1.2"
+ get-proto: "npm:^1.0.1"
+ gopd: "npm:^1.2.0"
+ has-symbols: "npm:^1.1.0"
+ hasown: "npm:^2.0.2"
+ math-intrinsics: "npm:^1.1.0"
+ checksum: 52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a
+ languageName: node
+ linkType: hard
+
"get-package-type@npm:^0.1.0":
version: 0.1.0
resolution: "get-package-type@npm:0.1.0"
@@ -15016,6 +15125,16 @@ __metadata:
languageName: node
linkType: hard
+"get-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "get-proto@npm:1.0.1"
+ dependencies:
+ dunder-proto: "npm:^1.0.1"
+ es-object-atoms: "npm:^1.0.0"
+ checksum: 9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c
+ languageName: node
+ linkType: hard
+
"get-stream@npm:^4.0.0":
version: 4.1.0
resolution: "get-stream@npm:4.1.0"
@@ -15234,6 +15353,13 @@ __metadata:
languageName: node
linkType: hard
+"gopd@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "gopd@npm:1.2.0"
+ checksum: 50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead
+ languageName: node
+ linkType: hard
+
"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
@@ -15317,6 +15443,13 @@ __metadata:
languageName: node
linkType: hard
+"has-symbols@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "has-symbols@npm:1.1.0"
+ checksum: dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e
+ languageName: node
+ linkType: hard
+
"has-tostringtag@npm:^1.0.0":
version: 1.0.0
resolution: "has-tostringtag@npm:1.0.0"
@@ -15326,6 +15459,15 @@ __metadata:
languageName: node
linkType: hard
+"has-tostringtag@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-tostringtag@npm:1.0.2"
+ dependencies:
+ has-symbols: "npm:^1.0.3"
+ checksum: a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c
+ languageName: node
+ linkType: hard
+
"has@npm:^1.0.3":
version: 1.0.3
resolution: "has@npm:1.0.3"
@@ -15345,7 +15487,7 @@ __metadata:
languageName: node
linkType: hard
-"hasown@npm:^2.0.0":
+"hasown@npm:^2.0.0, hasown@npm:^2.0.2":
version: 2.0.2
resolution: "hasown@npm:2.0.2"
dependencies:
@@ -15768,7 +15910,7 @@ __metadata:
languageName: node
linkType: hard
-"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3":
+"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
@@ -16233,6 +16375,15 @@ __metadata:
languageName: node
linkType: hard
+"is-typed-array@npm:^1.1.14":
+ version: 1.1.15
+ resolution: "is-typed-array@npm:1.1.15"
+ dependencies:
+ which-typed-array: "npm:^1.1.16"
+ checksum: 415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4
+ languageName: node
+ linkType: hard
+
"is-unc-path@npm:^1.0.0":
version: 1.0.0
resolution: "is-unc-path@npm:1.0.0"
@@ -17808,6 +17959,13 @@ __metadata:
languageName: node
linkType: hard
+"math-intrinsics@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "math-intrinsics@npm:1.1.0"
+ checksum: 7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f
+ languageName: node
+ linkType: hard
+
"md5-file@npm:^3.2.3":
version: 3.2.3
resolution: "md5-file@npm:3.2.3"
@@ -18428,7 +18586,7 @@ __metadata:
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -19954,6 +20112,13 @@ __metadata:
languageName: node
linkType: hard
+"possible-typed-array-names@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "possible-typed-array-names@npm:1.1.0"
+ checksum: c810983414142071da1d644662ce4caebce890203eb2bc7bf119f37f3fe5796226e117e6cca146b521921fa6531072674174a3325066ac66fce089a53e1e5196
+ languageName: node
+ linkType: hard
+
"postcss-modules-extract-imports@npm:^3.0.0":
version: 3.0.0
resolution: "postcss-modules-extract-imports@npm:3.0.0"
@@ -21491,7 +21656,7 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3
@@ -21728,7 +21893,7 @@ __metadata:
languageName: node
linkType: hard
-"set-function-length@npm:^1.2.1":
+"set-function-length@npm:^1.2.1, set-function-length@npm:^1.2.2":
version: 1.2.2
resolution: "set-function-length@npm:1.2.2"
dependencies:
@@ -21756,15 +21921,16 @@ __metadata:
languageName: node
linkType: hard
-"sha.js@npm:^2.4.11":
- version: 2.4.11
- resolution: "sha.js@npm:2.4.11"
+"sha.js@npm:2.4.12":
+ version: 2.4.12
+ resolution: "sha.js@npm:2.4.12"
dependencies:
- inherits: "npm:^2.0.1"
- safe-buffer: "npm:^5.0.1"
+ inherits: "npm:^2.0.4"
+ safe-buffer: "npm:^5.2.1"
+ to-buffer: "npm:^1.2.0"
bin:
- sha.js: ./bin.js
- checksum: b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5
+ sha.js: bin.js
+ checksum: 9d36bdd76202c8116abbe152a00055ccd8a0099cb28fc17c01fa7bb2c8cffb9ca60e2ab0fe5f274ed6c45dc2633d8c39cf7ab050306c231904512ba9da4d8ab1
languageName: node
linkType: hard
@@ -22744,6 +22910,17 @@ __metadata:
languageName: node
linkType: hard
+"to-buffer@npm:^1.2.0":
+ version: 1.2.1
+ resolution: "to-buffer@npm:1.2.1"
+ dependencies:
+ isarray: "npm:^2.0.5"
+ safe-buffer: "npm:^5.2.1"
+ typed-array-buffer: "npm:^1.0.3"
+ checksum: bbf07a2a7d6ff9e3ffe503c689176c7149cf3ec25887ce7c4aa5c4841a8845cc71121cd7b4a4769957f823b3f31dbf6b1be6e0a5955798ad864bf2245ee8b5e4
+ languageName: node
+ linkType: hard
+
"to-fast-properties@npm:^2.0.0":
version: 2.0.0
resolution: "to-fast-properties@npm:2.0.0"
@@ -23089,6 +23266,17 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-buffer@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "typed-array-buffer@npm:1.0.3"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ es-errors: "npm:^1.3.0"
+ is-typed-array: "npm:^1.1.14"
+ checksum: 1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079
+ languageName: node
+ linkType: hard
+
"typed-array-byte-length@npm:^1.0.0":
version: 1.0.0
resolution: "typed-array-byte-length@npm:1.0.0"
@@ -24079,6 +24267,21 @@ __metadata:
languageName: node
linkType: hard
+"which-typed-array@npm:^1.1.16":
+ version: 1.1.19
+ resolution: "which-typed-array@npm:1.1.19"
+ dependencies:
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.4"
+ for-each: "npm:^0.3.5"
+ get-proto: "npm:^1.0.1"
+ gopd: "npm:^1.2.0"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 702b5dc878addafe6c6300c3d0af5983b175c75fcb4f2a72dfc3dd38d93cf9e89581e4b29c854b16ea37e50a7d7fca5ae42ece5c273d8060dcd603b2404bbb3f
+ languageName: node
+ linkType: hard
+
"which@npm:^2.0.1, which@npm:^2.0.2":
version: 2.0.2
resolution: "which@npm:2.0.2"
From 4b1c610fadfd874660fbca93e48b326a7679c4e0 Mon Sep 17 00:00:00 2001
From: nacho <25931366+ignaciosantise@users.noreply.github.com>
Date: Thu, 21 Aug 2025 22:41:10 -0600
Subject: [PATCH 11/11] chore: fixed image url and id checks
---
packages/core/src/utils/AssetUtil.ts | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/packages/core/src/utils/AssetUtil.ts b/packages/core/src/utils/AssetUtil.ts
index 3de12a5b8..c16115d58 100644
--- a/packages/core/src/utils/AssetUtil.ts
+++ b/packages/core/src/utils/AssetUtil.ts
@@ -15,15 +15,19 @@ export const AssetUtil = {
},
getNetworkImage(network?: CaipNetwork, networkImages?: Record) {
- if (!network || !network?.imageId) {
+ if (!network) {
return undefined;
}
- if (network?.imageUrl) {
+ if (network.imageUrl) {
return network.imageUrl;
}
- return networkImages?.[network?.imageId];
+ if (network.imageId) {
+ return networkImages?.[network.imageId];
+ }
+
+ return undefined;
},
getConnectorImage(connector?: Connector) {