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 ( - - - {imageSrc ? ( - - ) : ( - + + - - - )} - - - {!imageSrc && } - + + + + + + ) : ( + <> + + + + + + )} ); } 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) {