From e418a56e0954e342a8ae8b9beb80f1b88b9f797b Mon Sep 17 00:00:00 2001 From: Wenty Li <105278450+wenty22@users.noreply.github.com> Date: Fri, 1 Dec 2023 11:52:31 +0800 Subject: [PATCH] Dev (#47) * chore: prettier & eslint ignore changeset's md files * fix: No need refresh when open WalletConnect Modal in QRCode page * chore: Add vconsole for dev demo * fix: fixed trustwallet losing status after refreshing * chore: update release info * style: Update log output styles * style: Add switchNetwork log * refactor: update the `installed` field that detect whether wallet is installed to a function * fix: fixed conflict issue between trustwallet and metaMask * docs: update release docs --- .changeset/happy-hounds-complain.md | 5 ++++ .changeset/late-birds-compare.md | 5 ++++ .changeset/modern-comics-smell.md | 5 ++++ .changeset/pre.json | 4 +-- CONTRIBUTING.md | 4 +-- examples/nextjs/pages/_document.tsx | 2 ++ packages/walletkit/dev/index.html | 27 +++++++++++++++++ .../src/components/EthereumScript/index.tsx | 30 +++++++++++++++++++ .../walletkit/src/hooks/useClickWallet.ts | 7 +++-- packages/walletkit/src/hooks/useConnector.ts | 6 ---- .../src/hooks/useWalletConnectModal.ts | 2 +- .../src/hooks/useWalletKitConnect.ts | 8 +++-- .../src/hooks/useWalletKitSwitchNetwork.ts | 10 +++---- packages/walletkit/src/index.ts | 1 + .../walletkit/src/pages/Connecting/index.tsx | 10 ++++--- .../src/pages/SwitchNetwork/index.tsx | 4 ++- .../src/wallets/binanceWeb3Wallet/index.tsx | 6 +--- .../src/wallets/coinbaseWallet/index.tsx | 2 +- .../walletkit/src/wallets/injected/index.tsx | 2 +- .../src/wallets/mathWallet/index.tsx | 2 +- .../walletkit/src/wallets/metaMask/index.tsx | 2 +- .../walletkit/src/wallets/okxWallet/index.tsx | 4 +-- packages/walletkit/src/wallets/safe/index.tsx | 2 +- .../src/wallets/tokenPocket/icon.tsx | 2 +- .../src/wallets/tokenPocket/index.tsx | 4 +-- .../src/wallets/trustWallet/index.tsx | 8 ++--- packages/walletkit/src/wallets/types.ts | 2 +- .../src/wallets/walletConnect/index.tsx | 2 +- 28 files changed, 118 insertions(+), 50 deletions(-) create mode 100644 .changeset/happy-hounds-complain.md create mode 100644 .changeset/late-birds-compare.md create mode 100644 .changeset/modern-comics-smell.md create mode 100644 packages/walletkit/src/components/EthereumScript/index.tsx delete mode 100644 packages/walletkit/src/hooks/useConnector.ts diff --git a/.changeset/happy-hounds-complain.md b/.changeset/happy-hounds-complain.md new file mode 100644 index 00000000..17ddadad --- /dev/null +++ b/.changeset/happy-hounds-complain.md @@ -0,0 +1,5 @@ +--- +'@totejs/walletkit': patch +--- + +refactor: update the `installed` field that detect whether wallet is installed to a function diff --git a/.changeset/late-birds-compare.md b/.changeset/late-birds-compare.md new file mode 100644 index 00000000..2471f4e7 --- /dev/null +++ b/.changeset/late-birds-compare.md @@ -0,0 +1,5 @@ +--- +'@totejs/walletkit': patch +--- + +Fixed `WalletConnect` automatic connection issue in the follow scenario: connect the WalletConnect -> close browser -> reopen browser -> disconnect -> select WalletConnect, will automatically connect. diff --git a/.changeset/modern-comics-smell.md b/.changeset/modern-comics-smell.md new file mode 100644 index 00000000..55dfc42c --- /dev/null +++ b/.changeset/modern-comics-smell.md @@ -0,0 +1,5 @@ +--- +'@totejs/walletkit': patch +--- + +Fixed conflict issue between trustwallet and metaMask. diff --git a/.changeset/pre.json b/.changeset/pre.json index 4c0a1627..823a7d56 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -7,7 +7,5 @@ "@totejs/walletkit": "1.0.7-alpha.2", "website": "0.0.1" }, - "changesets": [ - "lovely-months-argue" - ] + "changesets": ["lovely-months-argue"] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 632a16a3..7b2c647a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -117,7 +117,7 @@ export function trustWallet(props: TrustWalletProps = {}): WalletProps { default: 'https://trustwallet.com/', }, spinnerColor: '#1098FC', - installed: isTrustWallet(), + isInstalled: isTrustWallet, createConnector: (chains: Chain[]) => { return new TrustWalletConnector({ chains, @@ -163,7 +163,7 @@ export interface WalletProps { }; spinnerColor?: string; showQRCode?: boolean; - installed: boolean | undefined; + isInstalled: () => boolean | undefined; createConnector: (chains: Chain[]) => Connector; getDeepLink: () => string | undefined; getQRCodeUri?: (uri: string) => string; diff --git a/examples/nextjs/pages/_document.tsx b/examples/nextjs/pages/_document.tsx index 86b57f74..b4c55d0a 100644 --- a/examples/nextjs/pages/_document.tsx +++ b/examples/nextjs/pages/_document.tsx @@ -1,10 +1,12 @@ import { Html, Head, Main, NextScript } from 'next/document'; +import { EthereumScript } from '@totejs/walletkit'; export default function Document() { return ( <Html lang="en"> <Head> <title>WalletKit Next.js Example</title> + <EthereumScript /> </Head> <body> <Main /> diff --git a/packages/walletkit/dev/index.html b/packages/walletkit/dev/index.html index f5e32244..07e23793 100644 --- a/packages/walletkit/dev/index.html +++ b/packages/walletkit/dev/index.html @@ -5,6 +5,33 @@ <link rel="icon" type="image/svg+xml" href="/vite.svg" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>WalletKit Test Demo</title> + <script> + (function () { + try { + const isMobile = + /android|iPhone|iPad|iPod/i.test(navigator.userAgent) || + (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); + + if (!isMobile && window.ethereum && window.ethereum.isMetaMask && window.trustwallet) { + const originalEthereum = window.ethereum; + + Object.defineProperty(window, 'ethereum', { + enumerable: true, + configurable: true, + set(v) { + if (v.isTrust || v.isTrustWallet) return; + this.value = v; + }, + get() { + return this.value ?? originalEthereum; + }, + }); + } + } catch (err) { + console.error('[ethereum script]', err); + } + })(); + </script> </head> <body> diff --git a/packages/walletkit/src/components/EthereumScript/index.tsx b/packages/walletkit/src/components/EthereumScript/index.tsx new file mode 100644 index 00000000..1fb856d3 --- /dev/null +++ b/packages/walletkit/src/components/EthereumScript/index.tsx @@ -0,0 +1,30 @@ +export function EthereumScript() { + const scriptHtml = ` + (function() { + try { + const isMobile = + /android|iPhone|iPad|iPod/i.test(navigator.userAgent) || + (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); + + if (!isMobile && window.ethereum && window.ethereum.isMetaMask && window.trustwallet) { + const originalEthereum = window.ethereum; + + Object.defineProperty(window, 'ethereum', { + enumerable: true, + configurable: true, + set(v) { + if (v.isTrust || v.isTrustWallet) return; + this.value = v; + }, + get() { + return this.value ?? originalEthereum; + }, + }); + } + } catch (err) { + console.error('[ethereum script]', err); + } + })() + `; + return <script dangerouslySetInnerHTML={{ __html: scriptHtml }} />; +} diff --git a/packages/walletkit/src/hooks/useClickWallet.ts b/packages/walletkit/src/hooks/useClickWallet.ts index 7b655968..e70d2f74 100644 --- a/packages/walletkit/src/hooks/useClickWallet.ts +++ b/packages/walletkit/src/hooks/useClickWallet.ts @@ -21,8 +21,9 @@ export function useClickWallet() { const pass = options.onClickWallet?.(connector, e); if (pass === false) return; - log('[click wallet] connector', connector); - log('[click wallet] ethereum', window.ethereum); + log('[click wallet]', `connector:`, connector); + log('[click wallet]', `ethereum:`, window.ethereum); + log('[click wallet]', `installed:`, connector._wallet.isInstalled()); const gotoQRcodePage = () => { setSelectedConnector(connector); @@ -44,7 +45,7 @@ export function useClickWallet() { } else { onOpenWcModal(); } - } else if (!connector._wallet.installed) { + } else if (!connector._wallet.isInstalled()) { if (mobile) { const deepLink = connector._wallet.getDeepLink?.(); if (deepLink) { diff --git a/packages/walletkit/src/hooks/useConnector.ts b/packages/walletkit/src/hooks/useConnector.ts deleted file mode 100644 index d3a2c982..00000000 --- a/packages/walletkit/src/hooks/useConnector.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { useConnect, Connector } from 'wagmi'; - -export function useConnector(id: string) { - const { connectors } = useConnect(); - return connectors.find((c) => c.id === id) as Connector | undefined; -} diff --git a/packages/walletkit/src/hooks/useWalletConnectModal.ts b/packages/walletkit/src/hooks/useWalletConnectModal.ts index c343d5f8..1470acb6 100644 --- a/packages/walletkit/src/hooks/useWalletConnectModal.ts +++ b/packages/walletkit/src/hooks/useWalletConnectModal.ts @@ -42,7 +42,7 @@ export function useWalletConnectModal() { try { await connectAsync({ connector }); } catch (err) { - log('WalletConnect', err); + log('[open walletconnect modal]', err); } setIsOpen(false); diff --git a/packages/walletkit/src/hooks/useWalletKitConnect.ts b/packages/walletkit/src/hooks/useWalletKitConnect.ts index 5cc84509..d74583cd 100644 --- a/packages/walletkit/src/hooks/useWalletKitConnect.ts +++ b/packages/walletkit/src/hooks/useWalletKitConnect.ts @@ -2,7 +2,9 @@ import { commonErrorHandler } from '@/utils/common'; import { useConnect } from 'wagmi'; import { useWalletKitContext } from '..'; -export function useWalletKitConnect({ ...props }: any = {}): ReturnType<typeof useConnect> { +export type UseWalletKitConnectProps = Parameters<typeof useConnect>[0]; + +export function useWalletKitConnect(props?: UseWalletKitConnectProps) { const { log, options } = useWalletKitContext(); const connectProps = { @@ -11,13 +13,13 @@ export function useWalletKitConnect({ ...props }: any = {}): ReturnType<typeof u const { connect, connectAsync, connectors, ...rest } = useConnect({ ...props, - onError(error: any) { + onError(error: Error, ...params) { commonErrorHandler({ log, handler: options.onError, error, }); - props?.onError?.(error); + props?.onError?.(error, ...params); }, }); diff --git a/packages/walletkit/src/hooks/useWalletKitSwitchNetwork.ts b/packages/walletkit/src/hooks/useWalletKitSwitchNetwork.ts index 4aa3f4aa..c0922ca5 100644 --- a/packages/walletkit/src/hooks/useWalletKitSwitchNetwork.ts +++ b/packages/walletkit/src/hooks/useWalletKitSwitchNetwork.ts @@ -2,20 +2,20 @@ import { commonErrorHandler } from '@/utils/common'; import { useSwitchNetwork } from 'wagmi'; import { useWalletKitContext } from '..'; -export function useWalletKitSwitchNetwork({ ...props }: any = {}): ReturnType< - typeof useSwitchNetwork -> { +export type UseWalletKitSwitchNetworkProps = Parameters<typeof useSwitchNetwork>[0]; + +export function useWalletKitSwitchNetwork(props?: UseWalletKitSwitchNetworkProps) { const { log, options } = useWalletKitContext(); const result = useSwitchNetwork({ ...props, - onError(error: any) { + onError(error: Error, ...params) { commonErrorHandler({ log, handler: options.onError, error, }); - props?.onError?.(error); + props?.onError?.(error, ...params); }, }); diff --git a/packages/walletkit/src/index.ts b/packages/walletkit/src/index.ts index 0d830aa9..5b118be9 100644 --- a/packages/walletkit/src/index.ts +++ b/packages/walletkit/src/index.ts @@ -6,6 +6,7 @@ export * from './components/WalletKitButton'; export * from './components/WalletKitProvider'; export * from './components/WalletKitProvider/context'; export * from './components/SwitchNetworkModal'; +export * from './components/EthereumScript'; export { useModal } from './components/ModalProvider/context'; export { type ThemeMode, type ThemeVariant } from './components/ThemeProvider'; diff --git a/packages/walletkit/src/pages/Connecting/index.tsx b/packages/walletkit/src/pages/Connecting/index.tsx index f0057e24..148be0da 100644 --- a/packages/walletkit/src/pages/Connecting/index.tsx +++ b/packages/walletkit/src/pages/Connecting/index.tsx @@ -34,7 +34,9 @@ export function ConnectingPage() { const logos = useWalletLogos(wallet.logos); const downloadUrl = useWalletDownloadUrl(wallet.downloadUrls); - const [status, setStatus] = useState(!wallet.installed ? states.UNAVAILABLE : states.CONNECTING); + const [status, setStatus] = useState( + wallet.isInstalled() ? states.CONNECTING : states.UNAVAILABLE, + ); const { connect } = useWalletKitConnect({ onMutate: (connector?: any) => { @@ -85,14 +87,14 @@ export function ConnectingPage() { }); const runConnect = useCallback(() => { - if (!wallet.installed) return; + if (!wallet.isInstalled()) return; if (selectedConnector) { connect({ connector: selectedConnector }); } else { setStatus(states.UNAVAILABLE); } - }, [connect, selectedConnector, wallet.installed]); + }, [connect, selectedConnector, wallet]); useEffect(() => { if (status === states.UNAVAILABLE) return; @@ -104,7 +106,7 @@ export function ConnectingPage() { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - log('[Connect]', status, selectedConnector?.name); + log('[connecting page]', `name: ${selectedConnector?.name}, status: ${status}`); const isError = [states.FAILED, states.NOTCONNECTED, states.REJECTED].includes(status); const isLoading = status === states.CONNECTING; diff --git a/packages/walletkit/src/pages/SwitchNetwork/index.tsx b/packages/walletkit/src/pages/SwitchNetwork/index.tsx index 071c602f..3d0ad419 100644 --- a/packages/walletkit/src/pages/SwitchNetwork/index.tsx +++ b/packages/walletkit/src/pages/SwitchNetwork/index.tsx @@ -18,12 +18,14 @@ import { import { ModalFooter } from '@/base/components/Modal/ModalFooter'; export function SwitchNetworkPage() { - const { supportedChains } = useWalletKitContext(); + const { supportedChains, log } = useWalletKitContext(); const { isLoading, switchNetwork, pendingChainId } = useWalletKitSwitchNetwork(); const { chain } = useNetwork(); const { isClosable } = useModal(); const onSwitchNetwork = (chainId: number) => { + log('[switch network page]', 'switchNetwork:', switchNetwork, ', isLoading:', isLoading); + if (switchNetwork && !isLoading) { switchNetwork(chainId); } diff --git a/packages/walletkit/src/wallets/binanceWeb3Wallet/index.tsx b/packages/walletkit/src/wallets/binanceWeb3Wallet/index.tsx index 2dcaf977..35a65094 100644 --- a/packages/walletkit/src/wallets/binanceWeb3Wallet/index.tsx +++ b/packages/walletkit/src/wallets/binanceWeb3Wallet/index.tsx @@ -21,7 +21,7 @@ export function binanceWeb3Wallet(props: PartialCustomProps = {}): WalletProps { }, spinnerColor: undefined, showQRCode: true, - installed: isBinanceWeb3Wallet(), + isInstalled: isBinanceWeb3Wallet, createConnector: (chains: Chain[]) => { return new CustomConnector({ id: BINANCE_WEB3_WALLET_ID, @@ -53,9 +53,5 @@ export function binanceWeb3Wallet(props: PartialCustomProps = {}): WalletProps { export function isBinanceWeb3Wallet() { if (typeof window === 'undefined') return false; - if (isMobile()) { - return !!window.ethereum; - } - return false; } diff --git a/packages/walletkit/src/wallets/coinbaseWallet/index.tsx b/packages/walletkit/src/wallets/coinbaseWallet/index.tsx index 491f80d9..76ea185a 100644 --- a/packages/walletkit/src/wallets/coinbaseWallet/index.tsx +++ b/packages/walletkit/src/wallets/coinbaseWallet/index.tsx @@ -30,7 +30,7 @@ export function coinbaseWallet(props: CoinbaseWalletProps = {}): WalletProps { }, spinnerColor: undefined, showQRCode: false, - installed: isCoinbaseWallet(), + isInstalled: isCoinbaseWallet, createConnector: (chains: Chain[]) => { const { appName } = getGlobalData(); diff --git a/packages/walletkit/src/wallets/injected/index.tsx b/packages/walletkit/src/wallets/injected/index.tsx index 846c70e0..419f906e 100644 --- a/packages/walletkit/src/wallets/injected/index.tsx +++ b/packages/walletkit/src/wallets/injected/index.tsx @@ -26,7 +26,7 @@ export function injected(props: InjectedProps = {}): WalletProps { default: undefined, }, showQRCode: false, - installed: isInjected(), + isInstalled: isInjected, createConnector: (chains: Chain[]) => { return new InjectedConnector({ chains, diff --git a/packages/walletkit/src/wallets/mathWallet/index.tsx b/packages/walletkit/src/wallets/mathWallet/index.tsx index 3fbbdcf3..65d796d1 100644 --- a/packages/walletkit/src/wallets/mathWallet/index.tsx +++ b/packages/walletkit/src/wallets/mathWallet/index.tsx @@ -21,7 +21,7 @@ export function mathWallet(props: PartialCustomProps = {}): WalletProps { }, showQRCode: false, spinnerColor: undefined, - installed: isMathWallet(), + isInstalled: isMathWallet, createConnector: (chains: Chain[]) => { return new CustomConnector({ id: MATH_WALLET_ID, diff --git a/packages/walletkit/src/wallets/metaMask/index.tsx b/packages/walletkit/src/wallets/metaMask/index.tsx index d09cb6ff..e3bfb8c8 100644 --- a/packages/walletkit/src/wallets/metaMask/index.tsx +++ b/packages/walletkit/src/wallets/metaMask/index.tsx @@ -28,7 +28,7 @@ export function metaMask(props: MetaMaskProps = {}): WalletProps { }, spinnerColor: '#F0B90B', showQRCode: false, - installed: isMetaMask(), + isInstalled: isMetaMask, createConnector: (chains: Chain[]) => { return new MetaMaskConnector({ chains, diff --git a/packages/walletkit/src/wallets/okxWallet/index.tsx b/packages/walletkit/src/wallets/okxWallet/index.tsx index 2b2edb14..05cc6297 100644 --- a/packages/walletkit/src/wallets/okxWallet/index.tsx +++ b/packages/walletkit/src/wallets/okxWallet/index.tsx @@ -22,7 +22,7 @@ export function okxWallet(props: PartialCustomProps = {}): WalletProps { }, spinnerColor: undefined, showQRCode: false, - installed: isOkxWallet(), + isInstalled: isOkxWallet, createConnector: (chains: Chain[]) => { return new CustomConnector({ id: OKX_WALLET_ID, @@ -60,5 +60,5 @@ export function isOkxWallet() { return !!(window.ethereum || window.okexchain); } - return !!(hasInjectedProvider('isOkxWallet') || window.okexchain?.isOkxWallet); + return hasInjectedProvider('isOkxWallet') || window.okexchain?.isOkxWallet; } diff --git a/packages/walletkit/src/wallets/safe/index.tsx b/packages/walletkit/src/wallets/safe/index.tsx index 46ec2c27..a6b54379 100644 --- a/packages/walletkit/src/wallets/safe/index.tsx +++ b/packages/walletkit/src/wallets/safe/index.tsx @@ -28,7 +28,7 @@ export function safe(props: SafeProps = {}): WalletProps { default: undefined, }, showQRCode: false, - installed: isSafe(), + isInstalled: isSafe, createConnector: (chains: Chain[]) => { return new SafeConnector({ chains, diff --git a/packages/walletkit/src/wallets/tokenPocket/icon.tsx b/packages/walletkit/src/wallets/tokenPocket/icon.tsx index 6ec4a6b9..c2eb302c 100644 --- a/packages/walletkit/src/wallets/tokenPocket/icon.tsx +++ b/packages/walletkit/src/wallets/tokenPocket/icon.tsx @@ -74,7 +74,7 @@ export const TokenPocketIcon = (props: SVGIconProps) => { </linearGradient> </defs> <g id="p1" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd"> - <g id="tokenpocket" fillRule="nonzero"> + <g fillRule="nonzero"> <polygon id="path" fill="#2980FE" points="27.9874275 0 0 0 0 28 27.9874275 28"></polygon> <g id="group" transform="translate(5.107577, 7.574219)"> <path diff --git a/packages/walletkit/src/wallets/tokenPocket/index.tsx b/packages/walletkit/src/wallets/tokenPocket/index.tsx index ffda162f..b5db07d9 100644 --- a/packages/walletkit/src/wallets/tokenPocket/index.tsx +++ b/packages/walletkit/src/wallets/tokenPocket/index.tsx @@ -21,7 +21,7 @@ export function tokenPocket(props: PartialCustomProps = {}): WalletProps { }, spinnerColor: '#2980FE', showQRCode: false, - installed: isTokenPocket(), + isInstalled: isTokenPocket, createConnector: (chains: Chain[]) => { return new CustomConnector({ id: TOKEN_POCKET_ID, @@ -55,5 +55,5 @@ export function tokenPocket(props: PartialCustomProps = {}): WalletProps { export function isTokenPocket() { if (typeof window === 'undefined') return false; - return !!(hasInjectedProvider('isTokenPocket') || window.tokenpocket); + return hasInjectedProvider('isTokenPocket') || window.tokenpocket; } diff --git a/packages/walletkit/src/wallets/trustWallet/index.tsx b/packages/walletkit/src/wallets/trustWallet/index.tsx index 3d183ba9..ac23907c 100644 --- a/packages/walletkit/src/wallets/trustWallet/index.tsx +++ b/packages/walletkit/src/wallets/trustWallet/index.tsx @@ -40,7 +40,7 @@ export function trustWallet(props: TrustWalletProps = {}): WalletProps { }, spinnerColor: '#1098FC', showQRCode: false, - installed: isTrustWallet(), + isInstalled: isTrustWallet, createConnector: (chains: Chain[]) => { return new TrustWalletConnector({ chains, @@ -66,9 +66,7 @@ export function trustWallet(props: TrustWalletProps = {}): WalletProps { export function isTrustWallet() { if (typeof window === 'undefined') return false; - return !!( - hasInjectedProvider('isTrust') || - window?.trustwallet?.isTrust || - window?.trustWallet?.isTrust + return ( + hasInjectedProvider('isTrust') || window?.trustwallet?.isTrust || window?.trustWallet?.isTrust ); } diff --git a/packages/walletkit/src/wallets/types.ts b/packages/walletkit/src/wallets/types.ts index 139435aa..d41a6e9b 100644 --- a/packages/walletkit/src/wallets/types.ts +++ b/packages/walletkit/src/wallets/types.ts @@ -14,7 +14,7 @@ export interface WalletProps { }; spinnerColor?: string; showQRCode?: boolean; - installed: boolean | undefined; + isInstalled: () => boolean | undefined; createConnector: (chains: Chain[]) => Connector; getDeepLink: () => string | undefined; getQRCodeUri?: (uri: string) => string; diff --git a/packages/walletkit/src/wallets/walletConnect/index.tsx b/packages/walletkit/src/wallets/walletConnect/index.tsx index b0dbec53..881126ba 100644 --- a/packages/walletkit/src/wallets/walletConnect/index.tsx +++ b/packages/walletkit/src/wallets/walletConnect/index.tsx @@ -29,7 +29,7 @@ export function walletConnect(props: WalletConnectProps = {}): WalletProps { default: undefined, }, showQRCode: isMobile() ? false : !connectorOptions?.showQrModal, - installed: undefined, + isInstalled: () => false, createConnector: (chains: Chain[]) => { const { walletConnectProjectId, appName, appIcon, appDescription, appUrl } = getGlobalData();