From aa76d9bcc247859ffac5d870964bfba924f42001 Mon Sep 17 00:00:00 2001 From: Ignacio Santise Date: Wed, 5 Jun 2024 12:01:48 -0300 Subject: [PATCH 01/18] feat/wagmi2 (#167) --- .changeset/pre.json | 26 + .changeset/real-timers-wash.md | 16 + .changeset/sixty-actors-impress.md | 16 + .changeset/witty-owls-sin.md | 16 + .gitignore | 5 +- apps/gallery/CHANGELOG.md | 18 +- apps/gallery/package.json | 4 +- apps/native-cli/CHANGELOG.md | 18 +- apps/native-cli/package.json | 11 +- apps/native/App.tsx | 61 +- apps/native/CHANGELOG.md | 22 +- apps/native/package.json | 15 +- apps/native/src/views/ActionsView.tsx | 27 +- package.json | 6 +- packages/coinbase-ethers/CHANGELOG.md | 16 +- packages/coinbase-ethers/package.json | 2 +- packages/coinbase-wagmi/CHANGELOG.md | 16 +- packages/coinbase-wagmi/package.json | 4 +- packages/coinbase-wagmi/src/index.ts | 353 ++-- packages/core/CHANGELOG.md | 16 +- packages/core/package.json | 4 +- .../core/src/controllers/AccountController.ts | 14 +- .../controllers/BlockchainApiController.ts | 3 +- .../src/controllers/ConnectionController.ts | 2 +- packages/core/src/utils/TypeUtil.ts | 9 +- packages/email-ethers/CHANGELOG.md | 25 +- packages/email-ethers/package.json | 4 +- packages/email-wagmi/CHANGELOG.md | 25 +- packages/email-wagmi/package.json | 6 +- packages/email-wagmi/src/index.ts | 229 +-- packages/email/CHANGELOG.md | 29 +- packages/email/package.json | 6 +- packages/email/src/W3mEmailWebview.tsx | 2 +- packages/ethers/CHANGELOG.md | 29 +- packages/ethers/package.json | 9 +- packages/ethers5/CHANGELOG.md | 29 +- packages/ethers5/package.json | 9 +- packages/scaffold-utils/CHANGELOG.md | 25 +- packages/scaffold-utils/package.json | 4 +- .../scaffold-utils/src/utils/ConstantsUtil.ts | 2 +- packages/scaffold/CHANGELOG.md | 29 +- packages/scaffold/package.json | 6 +- packages/scaffold/src/client.ts | 18 +- .../scaffold/src/modal/w3m-button/index.tsx | 5 +- packages/ui/CHANGELOG.md | 16 +- packages/ui/package.json | 2 +- packages/wagmi/CHANGELOG.md | 29 +- packages/wagmi/package.json | 11 +- packages/wagmi/src/client.ts | 229 ++- .../src/connectors/WalletConnectConnector.ts | 822 ++++---- packages/wagmi/src/index.tsx | 16 +- .../wagmi/src/utils/defaultWagmiConfig.ts | 45 +- packages/wagmi/src/utils/helpers.ts | 17 +- packages/wagmi/src/utils/provider.ts | 35 - yarn.lock | 1828 ++++++++--------- 55 files changed, 2252 insertions(+), 1989 deletions(-) create mode 100644 .changeset/pre.json create mode 100644 .changeset/real-timers-wash.md create mode 100644 .changeset/sixty-actors-impress.md create mode 100644 .changeset/witty-owls-sin.md delete mode 100644 packages/wagmi/src/utils/provider.ts diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 00000000..fd24411f --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,26 @@ +{ + "mode": "pre", + "tag": "alpha", + "initialVersions": { + "@apps/gallery": "1.0.6", + "@apps/native": "1.0.6", + "@apps/native-cli": "1.0.6", + "@web3modal/coinbase-ethers-react-native": "1.4.0", + "@web3modal/coinbase-wagmi-react-native": "1.4.0", + "@web3modal/core-react-native": "1.4.0", + "@web3modal/email-react-native": "1.4.0", + "@web3modal/email-ethers-react-native": "1.4.0", + "@web3modal/email-wagmi-react-native": "1.4.0", + "@web3modal/ethers-react-native": "1.4.0", + "@web3modal/ethers5-react-native": "1.4.0", + "@web3modal/scaffold-react-native": "1.4.0", + "@web3modal/scaffold-utils-react-native": "1.4.0", + "@web3modal/ui-react-native": "1.4.0", + "@web3modal/wagmi-react-native": "1.4.0" + }, + "changesets": [ + "real-timers-wash", + "sixty-actors-impress", + "witty-owls-sin" + ] +} diff --git a/.changeset/real-timers-wash.md b/.changeset/real-timers-wash.md new file mode 100644 index 00000000..a4bf5e49 --- /dev/null +++ b/.changeset/real-timers-wash.md @@ -0,0 +1,16 @@ +--- +'@web3modal/coinbase-ethers-react-native': patch +'@web3modal/coinbase-wagmi-react-native': patch +'@web3modal/scaffold-utils-react-native': patch +'@web3modal/email-ethers-react-native': patch +'@web3modal/email-wagmi-react-native': patch +'@web3modal/scaffold-react-native': patch +'@web3modal/ethers5-react-native': patch +'@web3modal/ethers-react-native': patch +'@web3modal/email-react-native': patch +'@web3modal/wagmi-react-native': patch +'@web3modal/core-react-native': patch +'@web3modal/ui-react-native': patch +--- + +alpha.2 diff --git a/.changeset/sixty-actors-impress.md b/.changeset/sixty-actors-impress.md new file mode 100644 index 00000000..71943a72 --- /dev/null +++ b/.changeset/sixty-actors-impress.md @@ -0,0 +1,16 @@ +--- +'@web3modal/coinbase-wagmi-react-native': major +'@web3modal/email-wagmi-react-native': major +'@web3modal/scaffold-react-native': major +'@web3modal/ethers5-react-native': major +'@web3modal/ethers-react-native': major +'@web3modal/wagmi-react-native': major +'@web3modal/core-react-native': major +'@web3modal/coinbase-ethers-react-native': major +'@web3modal/email-react-native': major +'@web3modal/email-ethers-react-native': major +'@web3modal/scaffold-utils-react-native': major +'@web3modal/ui-react-native': major +--- + +2.0.0 diff --git a/.changeset/witty-owls-sin.md b/.changeset/witty-owls-sin.md new file mode 100644 index 00000000..422b85b5 --- /dev/null +++ b/.changeset/witty-owls-sin.md @@ -0,0 +1,16 @@ +--- +'@web3modal/coinbase-ethers-react-native': patch +'@web3modal/coinbase-wagmi-react-native': patch +'@web3modal/scaffold-utils-react-native': patch +'@web3modal/email-ethers-react-native': patch +'@web3modal/email-wagmi-react-native': patch +'@web3modal/scaffold-react-native': patch +'@web3modal/ethers5-react-native': patch +'@web3modal/ethers-react-native': patch +'@web3modal/email-react-native': patch +'@web3modal/wagmi-react-native': patch +'@web3modal/core-react-native': patch +'@web3modal/ui-react-native': patch +--- + +fixes diff --git a/.gitignore b/.gitignore index b17dd562..87598bcb 100644 --- a/.gitignore +++ b/.gitignore @@ -56,4 +56,7 @@ android.iml !.yarn/plugins !.yarn/releases !.yarn/sdks -!.yarn/versions \ No newline at end of file +!.yarn/versions + +# vscode +.vscode/launch.json \ No newline at end of file diff --git a/apps/gallery/CHANGELOG.md b/apps/gallery/CHANGELOG.md index c87249b9..59910b18 100644 --- a/apps/gallery/CHANGELOG.md +++ b/apps/gallery/CHANGELOG.md @@ -1,11 +1,25 @@ # @apps/gallery -## 1.0.7 +## 1.0.7-alpha.2 ### Patch Changes - Updated dependencies - - @web3modal/ui-react-native@1.4.1 + - @web3modal/ui-react-native@2.0.0-alpha.2 + +## 1.0.7-alpha.1 + +### Patch Changes + +- Updated dependencies + - @web3modal/ui-react-native@2.0.0-alpha.1 + +## 1.0.7-alpha.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/ui-react-native@2.0.0-alpha.0 ## 1.0.6 diff --git a/apps/gallery/package.json b/apps/gallery/package.json index cd5b83ec..fb0014e1 100644 --- a/apps/gallery/package.json +++ b/apps/gallery/package.json @@ -1,6 +1,6 @@ { "name": "@apps/gallery", - "version": "1.0.7", + "version": "1.0.7-alpha.2", "main": "index.js", "private": true, "devDependencies": { @@ -33,6 +33,6 @@ }, "dependencies": { "@storybook/theming": "^7.4.6", - "@web3modal/ui-react-native": "1.4.1" + "@web3modal/ui-react-native": "2.0.0-alpha.2" } } diff --git a/apps/native-cli/CHANGELOG.md b/apps/native-cli/CHANGELOG.md index 1fc09e91..15a59dd7 100644 --- a/apps/native-cli/CHANGELOG.md +++ b/apps/native-cli/CHANGELOG.md @@ -1,11 +1,25 @@ # @apps/native-cli -## 1.0.7 +## 1.0.7-alpha.2 ### Patch Changes - Updated dependencies - - @web3modal/wagmi-react-native@1.4.1 + - @web3modal/wagmi-react-native@2.0.0-alpha.2 + +## 1.0.7-alpha.1 + +### Patch Changes + +- Updated dependencies + - @web3modal/wagmi-react-native@2.0.0-alpha.1 + +## 1.0.7-alpha.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/wagmi-react-native@2.0.0-alpha.0 ## 1.0.6 diff --git a/apps/native-cli/package.json b/apps/native-cli/package.json index 391560e0..f9ec630d 100644 --- a/apps/native-cli/package.json +++ b/apps/native-cli/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native-cli", - "version": "1.0.7", + "version": "1.0.7-alpha.2", "private": true, "scripts": { "android": "react-native run-android", @@ -14,15 +14,16 @@ "@react-native-async-storage/async-storage": "1.18.2", "@react-native-clipboard/clipboard": "1.13.0", "@react-native-community/netinfo": "9.3.10", - "@walletconnect/react-native-compat": "2.10.5", - "@web3modal/wagmi-react-native": "1.4.1", + "@tanstack/react-query": "5.37.1", + "@walletconnect/react-native-compat": "2.13.1", + "@web3modal/wagmi-react-native": "2.0.0-alpha.2", "react": "18.2.0", "react-native": "0.72.6", "react-native-get-random-values": "~1.9.0", "react-native-modal": "13.0.1", "react-native-svg": "13.9.0", - "viem": "1.19.3", - "wagmi": "1.4.7" + "viem": "2.13.1", + "wagmi": "2.9.7" }, "devDependencies": { "@babel/core": "^7.20.0", diff --git a/apps/native/App.tsx b/apps/native/App.tsx index 4b233a53..1f1e2f3d 100644 --- a/apps/native/App.tsx +++ b/apps/native/App.tsx @@ -2,7 +2,8 @@ import { StyleSheet, View, useColorScheme } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import * as Clipboard from 'expo-clipboard'; import '@walletconnect/react-native-compat'; -import { WagmiConfig } from 'wagmi'; +import { CreateConfigParameters, WagmiProvider } from 'wagmi'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { Web3Modal, @@ -11,7 +12,8 @@ import { createWeb3Modal, defaultWagmiConfig } from '@web3modal/wagmi-react-native'; -import { EmailConnector } from '@web3modal/email-wagmi-react-native'; + +import { emailConnector } from '@web3modal/email-wagmi-react-native'; import { arbitrum, @@ -25,15 +27,16 @@ import { zora, base, celo, - aurora -} from 'wagmi/chains'; + aurora, + sepolia +} from '@wagmi/core/chains'; import { AccountView } from './src/views/AccountView'; import { ActionsView } from './src/views/ActionsView'; import { getCustomWallets } from './src/utils/misc'; const projectId = process.env.EXPO_PUBLIC_PROJECT_ID ?? ''; -const chains = [ +const chains: CreateConfigParameters['chains'] = [ mainnet, polygon, arbitrum, @@ -45,12 +48,13 @@ const chains = [ zora, base, celo, - aurora + aurora, + sepolia ]; const metadata = { - name: 'Web3Modal v3', - description: 'Web3Modal v3 by WalletConnect', + name: 'Web3Modal RN', + description: 'Web3Modal RN by WalletConnect', url: 'https://walletconnect.com/', icons: ['https://avatars.githubusercontent.com/u/37784886'], redirect: { @@ -64,20 +68,21 @@ const clipboardClient = { } }; -const emailConnector = new EmailConnector({ chains, options: { projectId, metadata } }); +const emailConn = emailConnector({ projectId, metadata }); const wagmiConfig = defaultWagmiConfig({ chains, projectId, metadata, - extraConnectors: [emailConnector] + extraConnectors: [emailConn] }); +const queryClient = new QueryClient(); + const customWallets = getCustomWallets(); createWeb3Modal({ projectId, - chains, wagmiConfig, clipboardClient, customWallets, @@ -89,22 +94,24 @@ export default function Native() { const isDarkMode = useColorScheme() === 'dark'; return ( - - - - - - - - - - + + + + + + + + + + + + ); } diff --git a/apps/native/CHANGELOG.md b/apps/native/CHANGELOG.md index a9a1201c..3c71c56c 100644 --- a/apps/native/CHANGELOG.md +++ b/apps/native/CHANGELOG.md @@ -1,12 +1,28 @@ # @apps/native -## 1.0.7 +## 1.0.7-alpha.2 ### Patch Changes - Updated dependencies - - @web3modal/email-wagmi-react-native@1.4.1 - - @web3modal/wagmi-react-native@1.4.1 + - @web3modal/email-wagmi-react-native@2.0.0-alpha.2 + - @web3modal/wagmi-react-native@2.0.0-alpha.2 + +## 1.0.7-alpha.1 + +### Patch Changes + +- Updated dependencies + - @web3modal/email-wagmi-react-native@2.0.0-alpha.1 + - @web3modal/wagmi-react-native@2.0.0-alpha.1 + +## 1.0.7-alpha.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/email-wagmi-react-native@2.0.0-alpha.0 + - @web3modal/wagmi-react-native@2.0.0-alpha.0 ## 1.0.6 diff --git a/apps/native/package.json b/apps/native/package.json index 9ded31ad..bda5dfe4 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native", - "version": "1.0.7", + "version": "1.0.7-alpha.2", "main": "index.js", "private": true, "scripts": { @@ -17,9 +17,12 @@ "dependencies": { "@react-native-async-storage/async-storage": "1.21.0", "@react-native-community/netinfo": "11.1.0", - "@walletconnect/react-native-compat": "2.10.5", - "@web3modal/email-wagmi-react-native": "1.4.1", - "@web3modal/wagmi-react-native": "1.4.1", + "@tanstack/query-async-storage-persister": "^5.40.0", + "@tanstack/react-query": "5.37.1", + "@tanstack/react-query-persist-client": "^5.40.0", + "@walletconnect/react-native-compat": "2.13.1", + "@web3modal/email-wagmi-react-native": "2.0.0-alpha.2", + "@web3modal/wagmi-react-native": "2.0.0-alpha.2", "expo": "^50.0.14", "expo-application": "~5.8.3", "expo-clipboard": "~5.0.1", @@ -34,8 +37,8 @@ "react-native-web": "~0.19.6", "react-native-webview": "13.6.4", "uuid": "3.4.0", - "viem": "1.19.3", - "wagmi": "1.4.7" + "viem": "2.13.1", + "wagmi": "2.9.7" }, "devDependencies": { "@babel/core": "^7.20.0", diff --git a/apps/native/src/views/ActionsView.tsx b/apps/native/src/views/ActionsView.tsx index 03806d33..f1f54927 100644 --- a/apps/native/src/views/ActionsView.tsx +++ b/apps/native/src/views/ActionsView.tsx @@ -1,34 +1,35 @@ import { Button, Text } from '@web3modal/ui-react-native'; import { View } from 'react-native'; -import { useSignMessage, useAccount, useSendTransaction } from 'wagmi'; -import { parseEther } from 'viem'; +import { useSignMessage, useAccount, useSendTransaction, useEstimateGas } from 'wagmi'; +import { Hex, parseEther } from 'viem'; export function ActionsView() { const { isConnected } = useAccount(); - const { data, isError, isLoading, isSuccess, signMessage } = useSignMessage({ - message: 'Hello Web3Modal!' - }); + const { data, isError, isPending, isSuccess, signMessage } = useSignMessage(); + const TX = { + to: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' as Hex, // vitalik.eth + value: parseEther('0.001'), + data: '0x' as Hex + }; + const { data: gas, isError: isGasError } = useEstimateGas(TX); const { data: sendData, - isLoading: isSending, + isPending: isSending, isSuccess: isSendSuccess, sendTransaction - } = useSendTransaction({ - to: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045', //vitalik.etch - value: parseEther('0.01'), - data: '0x' - }); + } = useSendTransaction(); return isConnected ? ( Wagmi Actions - {isSuccess && Signature: {data}} + {isGasError && Error estimating gas} {isError && Error signing message} - {isSending && Check Wallet} diff --git a/package.json b/package.json index 599a7e79..65c28a0e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@types/qrcode": "1.5.1", "@types/react": "18.2.34", "@types/react-native": "0.72.2", - "@walletconnect/react-native-compat": "2.10.5", + "@walletconnect/react-native-compat": "2.13.1", "babel-jest": "^29.7.0", "eslint": "^8.46.0", "eslint-plugin-ft-flow": "2.0.3", @@ -59,8 +59,8 @@ "tsconfig": "*", "turbo": "1.10.15", "typescript": "5.2.2", - "viem": "1.19.3", - "wagmi": "1.4.7" + "viem": "2.13.1", + "wagmi": "2.9.7" }, "packageManager": "yarn@4.0.2" } diff --git a/packages/coinbase-ethers/CHANGELOG.md b/packages/coinbase-ethers/CHANGELOG.md index 4709957d..339652e2 100644 --- a/packages/coinbase-ethers/CHANGELOG.md +++ b/packages/coinbase-ethers/CHANGELOG.md @@ -1,10 +1,22 @@ # @web3modal/coinbase-ethers-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 ## 1.4.0 diff --git a/packages/coinbase-ethers/package.json b/packages/coinbase-ethers/package.json index bcd670c0..712413dc 100644 --- a/packages/coinbase-ethers/package.json +++ b/packages/coinbase-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-ethers-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/coinbase-wagmi/CHANGELOG.md b/packages/coinbase-wagmi/CHANGELOG.md index 7af23632..62b197a0 100644 --- a/packages/coinbase-wagmi/CHANGELOG.md +++ b/packages/coinbase-wagmi/CHANGELOG.md @@ -1,10 +1,22 @@ # @web3modal/coinbase-wagmi-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 ## 1.4.0 diff --git a/packages/coinbase-wagmi/package.json b/packages/coinbase-wagmi/package.json index 5b6bee49..0c9eed24 100644 --- a/packages/coinbase-wagmi/package.json +++ b/packages/coinbase-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-wagmi-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,7 +38,7 @@ }, "peerDependencies": { "@coinbase/wallet-mobile-sdk": ">=1.0.10", - "wagmi": ">=1 <2" + "wagmi": ">=2" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/coinbase-wagmi/src/index.ts b/packages/coinbase-wagmi/src/index.ts index dd037fb6..19ecf1df 100644 --- a/packages/coinbase-wagmi/src/index.ts +++ b/packages/coinbase-wagmi/src/index.ts @@ -1,238 +1,179 @@ -import { Connector, type ConnectorData, type WalletClient } from 'wagmi'; +import { ChainNotConfiguredError, createConnector } from 'wagmi'; import { - createWalletClient, - custom, getAddress, - type Address, UserRejectedRequestError, numberToHex, ProviderRpcError, - SwitchChainError, - type Chain + SwitchChainError } from 'viem'; +import type { Evaluate } from '@wagmi/core/internal'; import { WalletMobileSDKEVMProvider, configure } from '@coinbase/wallet-mobile-sdk'; import type { WalletMobileSDKProviderOptions } from '@coinbase/wallet-mobile-sdk/build/WalletMobileSDKEVMProvider'; -const ADD_ETH_CHAIN_METHOD = 'wallet_addEthereumChain'; -const SWITCH_ETH_CHAIN_METHOD = 'wallet_switchEthereumChain'; +type CoinbaseConnectorParameters = Evaluate< + WalletMobileSDKProviderOptions & { + redirect: string; + } +>; + +type Provider = WalletMobileSDKEVMProvider; + +coinbaseConnector.type = 'coinbaseWallet' as const; +export function coinbaseConnector(parameters: CoinbaseConnectorParameters) { + let _provider: Provider; + + return createConnector(config => ({ + id: 'coinbaseWallet', + name: 'Coinbase Wallet', + type: coinbaseConnector.type, + async connect({ chainId } = {}) { + try { + const provider = await this.getProvider(); + let accounts; + const isConnected = provider.connected; + + if (!isConnected) { + accounts = ( + (await provider.request({ + method: 'eth_requestAccounts' + })) as string[] + ).map(getAddress); + } else { + accounts = provider.selectedAddress ? [getAddress(provider.selectedAddress)] : []; + } -type CoinbaseConnectorOptions = WalletMobileSDKProviderOptions & { - redirect: string; -}; + provider.on('accountsChanged', this.onAccountsChanged); + provider.on('chainChanged', this.onChainChanged); + provider.on('disconnect', this.onDisconnect.bind(this)); + + // Switch to chain if provided + let currentChainId = await this.getChainId(); + if (chainId && currentChainId !== chainId) { + const chain = await this.switchChain!({ chainId }).catch(() => ({ + id: currentChainId + })); + currentChainId = chain?.id ?? currentChainId; + } -export class CoinbaseConnector extends Connector< - WalletMobileSDKEVMProvider, - CoinbaseConnectorOptions -> { - readonly id = 'coinbaseWallet'; - readonly name = 'Coinbase Wallet'; - readonly ready = true; + return { accounts, chainId: currentChainId }; + } catch (error) { + if (/(Error error 0|User rejected the request)/i.test((error as Error).message)) + throw new UserRejectedRequestError(error as Error); - private _provider?: WalletMobileSDKEVMProvider; - private _initProviderPromise?: Promise; + if (/(Error error 5|Could not open wallet)/i.test((error as Error).message)) + throw new Error(`Wallet not found. SDK Error: ${(error as Error).message}`); - constructor(config: { chains?: Chain[]; options: CoinbaseConnectorOptions }) { - super(config); - this._createProvider(); - } - - override connect = async ( - config?: { chainId?: number | undefined } | undefined - ): Promise> => { - try { - await this._setupListeners(); + throw error; + } + }, + async disconnect() { const provider = await this.getProvider(); - const isConnected = provider.connected; + provider.removeListener('accountsChanged', this.onAccountsChanged); + provider.removeListener('chainChanged', this.onChainChanged); + provider.removeListener('disconnect', this.onDisconnect.bind(this)); - if (!isConnected) { - await provider.request({ - method: 'eth_requestAccounts', - params: [] - }); - } + provider.disconnect(); + }, + async getAccounts() { + const provider = await this.getProvider(); - const address = provider.selectedAddress!; - const chainId = config?.chainId; + return ( + await provider.request({ + method: 'eth_accounts' + }) + ).map(getAddress); + }, + async getChainId() { + const provider = await this.getProvider(); - this.emit('message', { type: 'connecting' }); + return Number(provider.chainId); + }, + async getProvider({ chainId } = {}) { + function initProvider() { + configure({ + callbackURL: new URL(parameters.redirect), + hostURL: new URL('https://wallet.coinbase.com/wsegue'), + hostPackageName: 'org.toshi' + }); - // Switch to chain if provided - let id = await this.getChainId(); - let unsupported = this.isChainUnsupported(id); - if (chainId && id !== chainId) { - const chain = await this.switchChain(chainId); - id = chain.id; - unsupported = this.isChainUnsupported(id); + return new WalletMobileSDKEVMProvider({ ...parameters }); } - return { - account: address as `0x${string}`, - chain: { id, unsupported } - }; - } catch (error) { - if (/(Error error 0|User rejected the request)/i.test((error as Error).message)) - throw new UserRejectedRequestError(error as Error); - - if (/(Error error 5|Could not open wallet)/i.test((error as Error).message)) - throw new Error(`Wallet not found. SDK Error: ${(error as Error).message}`); + if (!_provider) { + _provider = initProvider(); + } - throw error; - } - }; + if (chainId) { + await this.switchChain?.({ chainId }); + } - override disconnect = async (): Promise => { - if (!this._provider) return; + return _provider; + }, + async isAuthorized() { + try { + const accounts = await this.getAccounts(); - const provider = await this.getProvider(); - this._removeListeners(); - provider.disconnect(); - }; + return !!accounts.length; + } catch { + return false; + } + }, + async switchChain({ chainId }) { + const chain = config.chains.find(c => c.id === chainId); + if (!chain) throw new SwitchChainError(new ChainNotConfiguredError()); - override async getAccount(): Promise<`0x${string}`> { - const provider = await this.getProvider(); - const accounts = await provider.request({ - method: 'eth_accounts' - }); + const provider = await this.getProvider(); + const chainId_ = numberToHex(chain.id); - return getAddress(accounts[0] as string); - } + try { + await provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: chainId_ }] + }); - override getChainId = async (): Promise => { - const provider = await this.getProvider(); - - return this._normalizeChainId(provider.chainId); - }; - - override getProvider = async ({ chainId }: { chainId?: number } = {}) => { - if (!this._provider) await this._createProvider(); - if (chainId) await this.switchChain(chainId); - - return this._provider!; - }; - - override getWalletClient = async ({ - chainId - }: { chainId?: number } = {}): Promise => { - const [provider, account] = await Promise.all([this.getProvider(), this.getAccount()]); - const chain = this.chains.find(x => x.id === chainId); - if (!provider) throw new Error('provider is required.'); - - // @ts-ignore - return createWalletClient({ - account, - chain, - transport: custom(provider) - }); - }; - - override isAuthorized = async (): Promise => { - try { - const account = await this.getAccount(); - - return !!account; - } catch { - return false; - } - }; - - override switchChain = async (chainId: number) => { - const provider = await this.getProvider(); - const id = numberToHex(chainId); - const chain = this.chains.find(_chain => _chain.id === chainId); - if (!chain) - throw new SwitchChainError( - new Error(`Chain "${chainId}" not configured for connector "${this.id}".`) - ); - - try { - await provider.request({ - method: SWITCH_ETH_CHAIN_METHOD, - params: [{ chainId: id }] - }); - - return chain; - } catch (error) { - // Indicates chain is not added to provider - if ((error as ProviderRpcError).code === 4902) { - try { - await provider.request({ - method: ADD_ETH_CHAIN_METHOD, - params: [ - { - chainId: id, - chainName: chain.name, - nativeCurrency: chain.nativeCurrency, - rpcUrls: [chain.rpcUrls.public?.http[0] ?? ''], - blockExplorerUrls: this.getBlockExplorerUrls(chain) - } - ] - }); - - return chain; - } catch (e) { - throw new UserRejectedRequestError(e as Error); + return chain; + } catch (error) { + // Indicates chain is not added to provider + if ((error as ProviderRpcError).code === 4902) { + try { + await provider.request({ + method: 'wallet_addEthereumChain', + params: [ + { + chainId: chainId_, + chainName: chain.name, + nativeCurrency: chain.nativeCurrency, + rpcUrls: [chain.rpcUrls.default?.http[0] ?? ''], + blockExplorerUrls: [chain.blockExplorers?.default.url] + } + ] + }); + + return chain; + } catch (e) { + throw new UserRejectedRequestError(e as Error); + } } + + throw new SwitchChainError(error as Error); } + }, + onAccountsChanged(accounts) { + if (accounts.length === 0) config.emitter.emit('disconnect'); + else config.emitter.emit('change', { accounts: accounts.map(getAddress) }); + }, + onChainChanged(chain) { + const chainId = Number(chain); + config.emitter.emit('change', { chainId }); + }, + async onDisconnect(_error) { + config.emitter.emit('disconnect'); - throw new SwitchChainError(error as Error); - } - }; - - protected override onAccountsChanged = (accounts: `0x${string}`[]): void => { - if (accounts.length === 0) this.emit('disconnect'); - else this.emit('change', { account: getAddress(accounts[0] as string) }); - }; - - protected override onChainChanged = (chain: string | number): void => { - const id = Number(chain); - const unsupported = this.isChainUnsupported(id); - this.emit('change', { chain: { id, unsupported } }); - }; - - protected override onDisconnect = (): void => { - this.emit('disconnect'); - }; - - private async _createProvider() { - if (!this._initProviderPromise) { - this._initProviderPromise = this._initProvider(); + const provider = await this.getProvider(); + provider.removeListener('accountsChanged', this.onAccountsChanged); + provider.removeListener('chainChanged', this.onChainChanged); + provider.removeListener('disconnect', this.onDisconnect.bind(this)); } - - return this._initProviderPromise; - } - - private _initProvider = async () => { - configure({ - callbackURL: new URL(this.options.redirect), - hostURL: new URL('https://wallet.coinbase.com/wsegue'), // Don't change -> Coinbase url - hostPackageName: 'org.toshi' // Don't change -> Coinbase wallet scheme - }); - - this._provider = new WalletMobileSDKEVMProvider({ ...this.options }); - }; - - private _setupListeners = async () => { - const provider = await this.getProvider(); - this._removeListeners(); - provider.on('accountsChanged', this.onAccountsChanged); - provider.on('chainChanged', this.onChainChanged); - provider.on('disconnect', this.onDisconnect); - }; - - private _removeListeners = () => { - if (!this._provider) return; - - this._provider.removeListener('accountsChanged', this.onAccountsChanged); - this._provider.removeListener('chainChanged', this.onChainChanged); - this._provider.removeListener('disconnect', this.onDisconnect); - }; - - private _normalizeChainId = (chainId: string | number | bigint) => { - if (typeof chainId === 'string') - return Number.parseInt(chainId, chainId.trim().substring(0, 2) === '0x' ? 16 : 10); - if (typeof chainId === 'bigint') return Number(chainId); - - return chainId; - }; + })); } diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index e65c31db..d8452f80 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,10 +1,22 @@ # @web3modal/core-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 ## 1.4.0 diff --git a/packages/core/package.json b/packages/core/package.json index 30d2ab2d..9723719c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/core-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -42,7 +42,7 @@ }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", - "@walletconnect/react-native-compat": ">=2.10.5", + "@walletconnect/react-native-compat": ">=2.13.1", "react": ">=17", "react-native": ">=0.68.5" }, diff --git a/packages/core/src/controllers/AccountController.ts b/packages/core/src/controllers/AccountController.ts index 862ec3cb..2284a281 100644 --- a/packages/core/src/controllers/AccountController.ts +++ b/packages/core/src/controllers/AccountController.ts @@ -1,7 +1,8 @@ import { proxy } from 'valtio'; import { subscribeKey as subKey } from 'valtio/utils'; + import { CoreHelperUtil } from '../utils/CoreHelperUtil'; -import type { CaipAddress } from '../utils/TypeUtil'; +import type { CaipAddress, ConnectedWalletInfo } from '../utils/TypeUtil'; // -- Types --------------------------------------------- // export interface AccountControllerState { @@ -13,8 +14,11 @@ export interface AccountControllerState { profileName?: string; profileImage?: string; addressExplorerUrl?: string; + connectedWalletInfo?: ConnectedWalletInfo; } +type StateKey = keyof AccountControllerState; + // -- State --------------------------------------------- // const state = proxy({ isConnected: false @@ -24,8 +28,8 @@ const state = proxy({ export const AccountController = { state, - subscribeConnection(callback: (value: AccountControllerState['isConnected']) => void) { - return subKey(state, 'isConnected', callback); + subscribeKey(key: K, callback: (value: AccountControllerState[K]) => void) { + return subKey(state, key, callback); }, setIsConnected(isConnected: AccountControllerState['isConnected']) { @@ -54,6 +58,10 @@ export const AccountController = { state.profileImage = profileImage; }, + setConnectedWalletInfo(connectedWalletInfo: AccountControllerState['connectedWalletInfo']) { + state.connectedWalletInfo = connectedWalletInfo; + }, + setAddressExplorerUrl(explorerUrl: AccountControllerState['addressExplorerUrl']) { state.addressExplorerUrl = explorerUrl; }, diff --git a/packages/core/src/controllers/BlockchainApiController.ts b/packages/core/src/controllers/BlockchainApiController.ts index 6d55c5fe..21dd5236 100644 --- a/packages/core/src/controllers/BlockchainApiController.ts +++ b/packages/core/src/controllers/BlockchainApiController.ts @@ -10,11 +10,10 @@ const api = new FetchUtil({ baseUrl: 'https://rpc.walletconnect.com' }); // -- Controller ---------------------------------------- // export const BlockchainApiController = { - fetchIdentity({ caipChainId, address }: BlockchainApiIdentityRequest) { + fetchIdentity({ address }: BlockchainApiIdentityRequest) { return api.get({ path: `/v1/identity/${address}`, params: { - chainId: caipChainId, projectId: OptionsController.state.projectId } }); diff --git a/packages/core/src/controllers/ConnectionController.ts b/packages/core/src/controllers/ConnectionController.ts index b7a75d5a..d74d74c4 100644 --- a/packages/core/src/controllers/ConnectionController.ts +++ b/packages/core/src/controllers/ConnectionController.ts @@ -76,7 +76,7 @@ export const ConnectionController = { async connectExternal(options: ConnectExternalOptions) { await this._getClient().connectExternal?.(options); ConnectorController.setConnectedConnector(options.type); - await StorageUtil.setConnectedConnector(options.type); + StorageUtil.setConnectedConnector(options.type); }, resetWcConnection() { diff --git a/packages/core/src/utils/TypeUtil.ts b/packages/core/src/utils/TypeUtil.ts index 3db4566a..6f62c632 100644 --- a/packages/core/src/utils/TypeUtil.ts +++ b/packages/core/src/utils/TypeUtil.ts @@ -9,6 +9,14 @@ export interface CaipNetwork { imageUrl?: string; } +export type ConnectedWalletInfo = + | { + name?: string; + icon?: string; + [key: string]: unknown; + } + | undefined; + export interface LinkingRecord { redirect: string; href: string; @@ -97,7 +105,6 @@ export interface ThemeVariables { // -- BlockchainApiController Types --------------------------------------------- export interface BlockchainApiIdentityRequest { - caipChainId: CaipNetworkId; address: string; } diff --git a/packages/email-ethers/CHANGELOG.md b/packages/email-ethers/CHANGELOG.md index 5b9ea2f0..a4e68027 100644 --- a/packages/email-ethers/CHANGELOG.md +++ b/packages/email-ethers/CHANGELOG.md @@ -1,12 +1,31 @@ # @web3modal/coinbase-wagmi-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/email-react-native@1.4.1 + - @web3modal/email-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/email-ethers/package.json b/packages/email-ethers/package.json index e0890804..60e6b534 100644 --- a/packages/email-ethers/package.json +++ b/packages/email-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-ethers-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "1.4.1" + "@web3modal/email-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "ethers": ">=5" diff --git a/packages/email-wagmi/CHANGELOG.md b/packages/email-wagmi/CHANGELOG.md index 5b9ea2f0..a4e68027 100644 --- a/packages/email-wagmi/CHANGELOG.md +++ b/packages/email-wagmi/CHANGELOG.md @@ -1,12 +1,31 @@ # @web3modal/coinbase-wagmi-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/email-react-native@1.4.1 + - @web3modal/email-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/email-wagmi/package.json b/packages/email-wagmi/package.json index d0b14e96..f98968eb 100644 --- a/packages/email-wagmi/package.json +++ b/packages/email-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-wagmi-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,10 +37,10 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "1.4.1" + "@web3modal/email-react-native": "2.0.0-alpha.2" }, "peerDependencies": { - "wagmi": ">=1 <2" + "wagmi": ">=2" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/email-wagmi/src/index.ts b/packages/email-wagmi/src/index.ts index a97fffbd..d4cefa80 100644 --- a/packages/email-wagmi/src/index.ts +++ b/packages/email-wagmi/src/index.ts @@ -1,16 +1,8 @@ -import { type Chain, type ConnectorData, Connector } from 'wagmi'; -import { SwitchChainError, createWalletClient, custom, getAddress } from 'viem'; +import { createConnector, ChainNotConfiguredError } from 'wagmi'; +import { SwitchChainError, getAddress, type Address } from 'viem'; +import type { Evaluate } from '@wagmi/core/internal'; import { W3mFrameProvider } from '@web3modal/email-react-native'; -export type StorageStoreData = { - state: { data?: ConnectorData }; -}; - -interface Config { - chains?: Chain[]; - options: EmailProviderOptions; -} - export type Metadata = { name: string; description: string; @@ -18,129 +10,124 @@ export type Metadata = { icons: string[]; }; -type EmailProviderOptions = { +type EmailProviderOptions = Evaluate<{ /** * WalletConnect Cloud Project ID. * @link https://cloud.walletconnect.com/sign-in. */ projectId: string; metadata: Metadata; -}; - -export class EmailConnector extends Connector { - readonly id = 'w3mEmail'; - readonly name = 'Web3Modal Email'; - readonly ready = true; - - private provider: W3mFrameProvider = {} as W3mFrameProvider; - - constructor(config: Config) { - super(config); - this.provider = new W3mFrameProvider(config.options.projectId, config.options.metadata); - } - - async connect(options: { chainId?: number }): Promise> { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; +}>; - const { address, chainId } = await provider.connect({ chainId: options?.chainId }); +type Provider = W3mFrameProvider; - return { - account: address as `0x${string}`, - chain: { - id: chainId, - unsupported: this.isChainUnsupported(1) - } - }; - } - - async disconnect(): Promise { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - - await provider.disconnect(); - } +type StorageItemMap = { + '@w3m/connected_connector'?: string; +}; - override async switchChain(chainId: number): Promise { - try { - const chain = this.chains?.find(c => c.id === chainId); - if (!chain) { - throw new SwitchChainError(new Error('chain not found on connector.')); +emailConnector.type = 'w3mEmail' as const; +emailConnector.id = 'w3mEmail' as const; +export function emailConnector(parameters: EmailProviderOptions) { + let _provider: W3mFrameProvider = {} as W3mFrameProvider; + + return createConnector(config => ({ + id: emailConnector.id, + name: 'Web3Modal Email', + type: emailConnector.type, + async setup() { + _provider = new W3mFrameProvider(parameters.projectId, parameters.metadata); + }, + async connect(options = {}) { + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + const { address, chainId } = await provider.connect({ chainId: options.chainId }); + + return { + accounts: [address as Address], + account: address as Address, + chainId, + chain: { + id: chainId, + unsuported: false + } + }; + }, + async disconnect() { + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + await provider.disconnect(); + }, + async switchChain({ chainId }) { + try { + const chain = config.chains?.find(c => c.id === chainId); + if (!chain) throw new SwitchChainError(new ChainNotConfiguredError()); + + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + await provider.switchNetwork(chainId); + config.emitter.emit('change', { chainId: Number(chainId) }); + + return chain; + } catch (error) { + if (error instanceof Error) { + throw new SwitchChainError(error); + } + throw error; } - + }, + async getAccounts() { const provider = await this.getProvider(); await provider.webviewLoadPromise; - await provider.switchNetwork(chainId); - const unsupported = this.isChainUnsupported(chainId); - this.emit('change', { chain: { id: chainId, unsupported } }); - - return chain; - } catch (error) { - if (error instanceof Error) { - throw new SwitchChainError(error); + return ( + await provider.request({ + method: 'eth_accounts' + }) + ).map(getAddress); + }, + async getChainId() { + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + const { chainId } = await provider.getChainId(); + + return chainId; + }, + async getProvider() { + return Promise.resolve(_provider); + }, + async isAuthorized() { + try { + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + const connectedConnector = await config.storage?.getItem('recentConnectorId'); + + if (connectedConnector !== emailConnector.id) { + // isConnected still needs to be called to disable email input loader + provider.isConnected(); + + return false; + } else { + const { isConnected } = await provider.isConnected(); + + return isConnected; + } + } catch (error) { + return false; } - throw error; + }, + onAccountsChanged(accounts) { + if (accounts.length === 0) config.emitter.emit('disconnect'); + else config.emitter.emit('change', { accounts: accounts.map(getAddress) }); + }, + onChainChanged(chain) { + const chainId = Number(chain); + config.emitter.emit('change', { chainId }); + }, + async onDisconnect() { + const provider = await this.getProvider(); + await provider.webviewLoadPromise; + await provider.disconnect(); + config.emitter.emit('disconnect'); } - } - - async getAccount(): Promise<`0x${string}`> { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - const { address } = await provider.connect(); - - return address as `0x${string}`; - } - - async getChainId(): Promise { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - const { chainId } = await provider.getChainId(); - - return chainId; - } - - async getProvider() { - return Promise.resolve(this.provider); - } - - async getWalletClient() { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - const { address, chainId } = await provider.connect(); - - return Promise.resolve( - createWalletClient({ - account: address as `0x${string}`, - chain: { id: chainId } as Chain, - transport: custom(this.provider) - }) - ); - } - - async isAuthorized(): Promise { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - const { isConnected } = await provider.isConnected(); - - return isConnected; - } - - protected onAccountsChanged = (accounts: string[]) => { - if (accounts.length === 0) this.emit('disconnect'); - else this.emit('change', { account: getAddress(accounts[0]!) }); - }; - - protected onChainChanged = (chainId: number | string) => { - const id = Number(chainId); - const unsupported = this.isChainUnsupported(id); - this.emit('change', { chain: { id, unsupported } }); - }; - - async onDisconnect() { - const provider = await this.getProvider(); - await provider.webviewLoadPromise; - await provider.disconnect(); - this.emit('disconnect'); - } + })); } diff --git a/packages/email/CHANGELOG.md b/packages/email/CHANGELOG.md index 6e3ca019..f1130605 100644 --- a/packages/email/CHANGELOG.md +++ b/packages/email/CHANGELOG.md @@ -1,13 +1,34 @@ # @web3modal/email-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/core-react-native@1.4.1 - - @web3modal/ui-react-native@1.4.1 + - @web3modal/core-react-native@2.0.0-alpha.2 + - @web3modal/ui-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.1 + - @web3modal/ui-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.0 + - @web3modal/ui-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/email/package.json b/packages/email/package.json index 188295fb..3d00b7cb 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -36,8 +36,8 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "1.4.1", - "@web3modal/ui-react-native": "1.4.1", + "@web3modal/core-react-native": "2.0.0-alpha.2", + "@web3modal/ui-react-native": "2.0.0-alpha.2", "zod": "3.22.4" }, "peerDependencies": { diff --git a/packages/email/src/W3mEmailWebview.tsx b/packages/email/src/W3mEmailWebview.tsx index 1085bb03..3d3a16b4 100644 --- a/packages/email/src/W3mEmailWebview.tsx +++ b/packages/email/src/W3mEmailWebview.tsx @@ -66,8 +66,8 @@ export function EmailWebview() { provider.onNotConnected(event, () => { ConnectorController.setEmailLoading(false); - StorageUtil.removeConnectedConnector(); ModalController.setLoading(false); + StorageUtil.removeConnectedConnector(); }); }; diff --git a/packages/ethers/CHANGELOG.md b/packages/ethers/CHANGELOG.md index e82574ba..c35f4b1f 100644 --- a/packages/ethers/CHANGELOG.md +++ b/packages/ethers/CHANGELOG.md @@ -1,13 +1,34 @@ # @web3modal/ethers5-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/scaffold-react-native@1.4.1 - - @web3modal/scaffold-utils-react-native@1.4.1 + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.2 + - @web3modal/scaffold-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.1 + - @web3modal/scaffold-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/scaffold-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/ethers/package.json b/packages/ethers/package.json index 10993de8..b9ee6a97 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,13 +38,14 @@ "access": "public" }, "dependencies": { - "@walletconnect/ethereum-provider": "2.11.1", - "@web3modal/scaffold-react-native": "1.4.1", - "@web3modal/scaffold-utils-react-native": "1.4.1" + "@walletconnect/ethereum-provider": "2.13.0", + "@web3modal/scaffold-react-native": "2.0.0-alpha.2", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", "@react-native-community/netinfo": "*", + "@walletconnect/react-native-compat": ">=2.13.1", "ethers": ">=6.0.0", "react": ">=17", "react-native": ">=0.68.5", diff --git a/packages/ethers5/CHANGELOG.md b/packages/ethers5/CHANGELOG.md index 88a89ad2..1823049e 100644 --- a/packages/ethers5/CHANGELOG.md +++ b/packages/ethers5/CHANGELOG.md @@ -1,13 +1,34 @@ # @web3modal/ethers5-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/scaffold-react-native@1.4.1 - - @web3modal/scaffold-utils-react-native@1.4.1 + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.2 + - @web3modal/scaffold-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.1 + - @web3modal/scaffold-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/scaffold-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/ethers5/package.json b/packages/ethers5/package.json index b515d484..a6dd300a 100644 --- a/packages/ethers5/package.json +++ b/packages/ethers5/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers5-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,14 +38,15 @@ "access": "public" }, "dependencies": { - "@walletconnect/ethereum-provider": "2.11.1", - "@web3modal/scaffold-react-native": "1.4.1", - "@web3modal/scaffold-utils-react-native": "1.4.1" + "@walletconnect/ethereum-provider": "2.13.0", + "@web3modal/scaffold-react-native": "2.0.0-alpha.2", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "@ethersproject/shims": ">=5.0.0", "@react-native-async-storage/async-storage": ">=1.17.0", "@react-native-community/netinfo": "*", + "@walletconnect/react-native-compat": ">=2.13.1", "ethers": ">=5.0.0 <6.0.0", "react": ">=17", "react-native": ">=0.68.5", diff --git a/packages/scaffold-utils/CHANGELOG.md b/packages/scaffold-utils/CHANGELOG.md index 0cf379ef..40015b86 100644 --- a/packages/scaffold-utils/CHANGELOG.md +++ b/packages/scaffold-utils/CHANGELOG.md @@ -1,12 +1,31 @@ # @web3modal/scaffold-utils-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/scaffold-react-native@1.4.1 + - @web3modal/scaffold-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/scaffold-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/scaffold-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/scaffold-utils/package.json b/packages/scaffold-utils/package.json index 29f1fe7d..19d01bc5 100644 --- a/packages/scaffold-utils/package.json +++ b/packages/scaffold-utils/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-utils-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -35,7 +35,7 @@ "access": "public" }, "dependencies": { - "@web3modal/scaffold-react-native": "1.4.1" + "@web3modal/scaffold-react-native": "2.0.0-alpha.2" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/scaffold-utils/src/utils/ConstantsUtil.ts b/packages/scaffold-utils/src/utils/ConstantsUtil.ts index dddf479a..ceb47b80 100644 --- a/packages/scaffold-utils/src/utils/ConstantsUtil.ts +++ b/packages/scaffold-utils/src/utils/ConstantsUtil.ts @@ -1,5 +1,5 @@ export const ConstantsUtil = { - VERSION: '1.4.1', + VERSION: '2.0.0-alpha.2', WALLET_CONNECT_CONNECTOR_ID: 'walletConnect', COINBASE_CONNECTOR_ID: 'coinbaseWallet', EMAIL_CONNECTOR_ID: 'w3mEmail', diff --git a/packages/scaffold/CHANGELOG.md b/packages/scaffold/CHANGELOG.md index 05544313..a641addd 100644 --- a/packages/scaffold/CHANGELOG.md +++ b/packages/scaffold/CHANGELOG.md @@ -1,13 +1,34 @@ # @web3modal/scaffold-react-native -## 1.4.1 +## 2.0.0-alpha.2 ### Patch Changes -- email wallet fixes +- alpha.2 - Updated dependencies - - @web3modal/core-react-native@1.4.1 - - @web3modal/ui-react-native@1.4.1 + - @web3modal/core-react-native@2.0.0-alpha.2 + - @web3modal/ui-react-native@2.0.0-alpha.2 + +## 2.0.0-alpha.1 + +### Patch Changes + +- fixes +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.1 + - @web3modal/ui-react-native@2.0.0-alpha.1 + +## 2.0.0-alpha.0 + +### Major Changes + +- 2.0.0 + +### Patch Changes + +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.0 + - @web3modal/ui-react-native@2.0.0-alpha.0 ## 1.4.0 diff --git a/packages/scaffold/package.json b/packages/scaffold/package.json index 647e9ee5..8fb24ab1 100644 --- a/packages/scaffold/package.json +++ b/packages/scaffold/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-react-native", - "version": "1.4.1", + "version": "2.0.0-alpha.2", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,8 +37,8 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "1.4.1", - "@web3modal/ui-react-native": "1.4.1" + "@web3modal/core-react-native": "2.0.0-alpha.2", + "@web3modal/ui-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "react": ">=17", diff --git a/packages/scaffold/src/client.ts b/packages/scaffold/src/client.ts index e9fe1c03..2e29b9bf 100644 --- a/packages/scaffold/src/client.ts +++ b/packages/scaffold/src/client.ts @@ -12,7 +12,8 @@ import type { ThemeControllerState, ThemeMode, ThemeVariables, - Connector + Connector, + ConnectedWalletInfo } from '@web3modal/core-react-native'; import { AccountController, @@ -89,6 +90,14 @@ export class Web3ModalScaffold { return ThemeController.subscribe(callback); } + public getWalletInfo() { + return AccountController.state.connectedWalletInfo; + } + + public subscribeWalletInfo(callback: (newState: ConnectedWalletInfo) => void) { + return AccountController.subscribeKey('connectedWalletInfo', callback); + } + public getState() { return { ...PublicStateController.state }; } @@ -107,7 +116,7 @@ export class Web3ModalScaffold { public subscribeConnection( callback: (isConnected: AccountControllerState['isConnected']) => void ) { - return AccountController.subscribeConnection(callback); + return AccountController.subscribeKey('isConnected', callback); } public setLoading(loading: ModalControllerState['loading']) { @@ -190,6 +199,11 @@ export class Web3ModalScaffold { AccountController.setAddressExplorerUrl(addressExplorerUrl); }; + protected setConnectedWalletInfo: (typeof AccountController)['setConnectedWalletInfo'] = + connectedWalletInfo => { + AccountController.setConnectedWalletInfo(connectedWalletInfo); + }; + // -- Private ------------------------------------------------------------------ private initControllers(options: ScaffoldOptions) { this.initAsyncValues(options); diff --git a/packages/scaffold/src/modal/w3m-button/index.tsx b/packages/scaffold/src/modal/w3m-button/index.tsx index 6215a620..39042b64 100644 --- a/packages/scaffold/src/modal/w3m-button/index.tsx +++ b/packages/scaffold/src/modal/w3m-button/index.tsx @@ -1,7 +1,7 @@ import { useSnapshot } from 'valtio'; import { W3mAccountButton, type W3mAccountButtonProps } from '../w3m-account-button'; import { W3mConnectButton, type W3mConnectButtonProps } from '../w3m-connect-button'; -import { AccountController } from '@web3modal/core-react-native'; +import { AccountController, ModalController } from '@web3modal/core-react-native'; export interface W3mButtonProps { balance?: W3mAccountButtonProps['balance']; @@ -23,8 +23,9 @@ export function W3mButton({ connectStyle }: W3mButtonProps) { const { isConnected } = useSnapshot(AccountController.state); + const { loading } = useSnapshot(ModalController.state); - return isConnected ? ( + return !loading && isConnected ? ( =1.17.0", "@react-native-community/netinfo": "*", + "@walletconnect/react-native-compat": ">=2.13.1", "react": ">=17", "react-native": ">=0.68.5", "react-native-get-random-values": "*", - "viem": ">=1", - "wagmi": ">=1" + "viem": ">=2", + "wagmi": ">=2" }, "react-native": "src/index.tsx", "react-native-builder-bob": { diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts index d47c73a3..4f6248df 100644 --- a/packages/wagmi/src/client.ts +++ b/packages/wagmi/src/client.ts @@ -1,20 +1,17 @@ +import { formatUnits, type Hex } from 'viem'; import { - type Address, - type Chain, - type Config, - type Connector as WagmiConnector, + type GetAccountReturnType, connect, disconnect, - fetchBalance, - fetchEnsAvatar, - fetchEnsName, - getAccount, - getNetwork, - switchNetwork, + switchChain, watchAccount, - watchNetwork + watchConnectors, + getEnsName, + getEnsAvatar as wagmiGetEnsAvatar, + getBalance } from '@wagmi/core'; -import { mainnet } from '@wagmi/core/chains'; +import { mainnet, type Chain } from '@wagmi/core/chains'; +import { EthereumProvider } from '@walletconnect/ethereum-provider'; import { type CaipAddress, type CaipNetwork, @@ -38,15 +35,13 @@ import { getEmailCaipNetworks, getWalletConnectCaipNetworks } from './utils/helpers'; +import { defaultWagmiConfig } from './utils/defaultWagmiConfig'; // -- Types --------------------------------------------------------------------- -interface WagmiConfig extends Config { - connectors: WagmiConnector[]; -} +type WagmiConfig = ReturnType; export interface Web3ModalClientOptions extends Omit { wagmiConfig: WagmiConfig; - chains?: Chain[]; defaultChain?: Chain; chainImages?: Record; connectorImages?: Record; @@ -66,8 +61,10 @@ export class Web3Modal extends Web3ModalScaffold { private options: Web3ModalClientOptions | undefined = undefined; + private wagmiConfig: WagmiConfig; + public constructor(options: Web3ModalClientOptions) { - const { wagmiConfig, chains, defaultChain, tokens, _sdkVersion, ...w3mOptions } = options; + const { wagmiConfig, defaultChain, tokens, _sdkVersion, ...w3mOptions } = options; if (!wagmiConfig) { throw new Error('web3modal:constructor - wagmiConfig is undefined'); @@ -81,7 +78,7 @@ export class Web3Modal extends Web3ModalScaffold { switchCaipNetwork: async caipNetwork => { const chainId = HelpersUtil.caipNetworkIdToNumber(caipNetwork?.id); if (chainId) { - await switchNetwork({ chainId }); + await switchChain(wagmiConfig, { chainId }); } }, @@ -117,15 +114,16 @@ export class Web3Modal extends Web3ModalScaffold { ); } - connector.on('message', event => { - if (event.type === 'display_uri') { - onUri(event.data as string); - connector.removeAllListeners(); - } + const provider = (await connector.getProvider()) as Awaited< + ReturnType<(typeof EthereumProvider)['init']> + >; + + provider.on('display_uri', data => { + onUri(data); }); const chainId = HelpersUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); - await connect({ connector, chainId }); + await connect(this.wagmiConfig, { connector, chainId }); }, connectExternal: async ({ id }) => { @@ -135,10 +133,12 @@ export class Web3Modal extends Web3ModalScaffold { } const chainId = HelpersUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); - await connect({ connector, chainId }); + await connect(this.wagmiConfig, { connector, chainId }); }, - disconnect + disconnect: async () => { + await disconnect(this.wagmiConfig); + } }; super({ @@ -151,15 +151,21 @@ export class Web3Modal extends Web3ModalScaffold { }); this.options = options; + this.wagmiConfig = wagmiConfig; - this.syncRequestedNetworks(chains); + this.syncRequestedNetworks([...wagmiConfig.chains]); + this.syncConnectors([...wagmiConfig.connectors]); + this.listenEmailConnector([...wagmiConfig.connectors]); - this.syncConnectors(wagmiConfig); - this.syncEmailConnector(wagmiConfig); - this.listenEmailConnector(wagmiConfig); + watchConnectors(wagmiConfig, { + onChange: connectors => this.syncConnectors([...connectors]) + }); - watchAccount(() => this.syncAccount()); - watchNetwork(() => this.syncNetwork()); + watchAccount(wagmiConfig, { + onChange: accountData => { + this.syncAccount({ ...accountData }); + } + }); } // -- Public ------------------------------------------------------------------ @@ -185,7 +191,7 @@ export class Web3Modal extends Web3ModalScaffold { } // -- Private ----------------------------------------------------------------- - private syncRequestedNetworks(chains: Web3ModalClientOptions['chains']) { + private syncRequestedNetworks(chains: Chain[]) { const requestedCaipNetworks = chains?.map( chain => ({ @@ -198,17 +204,29 @@ export class Web3Modal extends Web3ModalScaffold { this.setRequestedCaipNetworks(requestedCaipNetworks ?? []); } - private async syncAccount() { - const { address, isConnected } = getAccount(); - const { chain } = getNetwork(); + private async syncAccount({ + address, + isConnected, + chainId, + connector, + isConnecting, + isReconnecting + }: Pick< + GetAccountReturnType, + 'address' | 'isConnected' | 'chainId' | 'connector' | 'isConnecting' | 'isReconnecting' + >) { this.resetAccount(); - if (isConnected && address && chain) { - const caipAddress: CaipAddress = `${ConstantsUtil.EIP155}:${chain.id}:${address}`; + this.syncNetwork(address, chainId, isConnected); + this.setLoading(!!connector && (isConnecting || isReconnecting)); + + if (isConnected && address && chainId) { + const caipAddress: CaipAddress = `${ConstantsUtil.EIP155}:${chainId}:${address}`; this.setIsConnected(isConnected); this.setCaipAddress(caipAddress); await Promise.all([ - this.syncProfile(address), - this.syncBalance(address, chain), + this.syncProfile(address, chainId), + this.syncBalance(address, chainId), + this.syncConnectedWalletInfo(connector), this.getApprovedCaipNetworksData() ]); this.hasSyncedConnectedAccount = true; @@ -218,79 +236,117 @@ export class Web3Modal extends Web3ModalScaffold { } } - private async syncNetwork() { - const { address, isConnected } = getAccount(); - const { chain } = getNetwork(); + private async syncNetwork(address?: Hex, chainId?: number, isConnected?: boolean) { + const chain = this.wagmiConfig.chains.find((c: Chain) => c.id === chainId); - if (chain) { - const chainId = String(chain.id); - const caipChainId: CaipNetworkId = `${ConstantsUtil.EIP155}:${chainId}`; + if (chain || chainId) { + const name = chain?.name ?? chainId?.toString(); + const id = Number(chain?.id ?? chainId); + const caipChainId: CaipNetworkId = `${ConstantsUtil.EIP155}:${id}`; this.setCaipNetwork({ id: caipChainId, - name: chain.name, - imageId: PresetsUtil.EIP155NetworkImageIds[chain.id], - imageUrl: this.options?.chainImages?.[chain.id] + name, + imageId: PresetsUtil.EIP155NetworkImageIds[id], + imageUrl: this.options?.chainImages?.[id] }); - if (isConnected && address) { - const caipAddress: CaipAddress = `${ConstantsUtil.EIP155}:${chain.id}:${address}`; + if (isConnected && address && chainId) { + const caipAddress: CaipAddress = `${ConstantsUtil.EIP155}:${id}:${address}`; this.setCaipAddress(caipAddress); - if (chain.blockExplorers?.default?.url) { + if (chain?.blockExplorers?.default?.url) { const url = `${chain.blockExplorers.default.url}/address/${address}`; this.setAddressExplorerUrl(url); } else { this.setAddressExplorerUrl(undefined); } if (this.hasSyncedConnectedAccount) { - await this.syncBalance(address, chain); + await this.syncProfile(address, chainId); + await this.syncBalance(address, chainId); } } } } - private async syncProfile(address: Address) { + private async syncProfile(address: Hex, chainId: number) { try { - const response = await this.fetchIdentity({ - caipChainId: `${ConstantsUtil.EIP155}:${mainnet.id}`, - address - }); + const response = await this.fetchIdentity({ address }); if (!response) { throw new Error('Couldnt fetch idendity'); } - const { name, avatar } = response; - - this.setProfileName(name); - this.setProfileImage(avatar); + this.setProfileName(response.name); + this.setProfileImage(response.avatar); } catch { - const profileName = await fetchEnsName({ address, chainId: mainnet.id }); - if (profileName) { - this.setProfileName(profileName); - const profileImage = await fetchEnsAvatar({ name: profileName, chainId: mainnet.id }); - if (profileImage) { - this.setProfileImage(profileImage); + if (chainId === mainnet.id) { + const profileName = await getEnsName(this.wagmiConfig, { address, chainId }); + if (profileName) { + this.setProfileName(profileName); + const profileImage = await wagmiGetEnsAvatar(this.wagmiConfig, { + name: profileName, + chainId + }); + if (profileImage) { + this.setProfileImage(profileImage); + } } + } else { + this.setProfileName(undefined); + this.setProfileImage(undefined); } } } - private async syncBalance(address: Address, chain: Chain) { - const balance = await fetchBalance({ - address, - chainId: chain.id, - token: this.options?.tokens?.[chain.id]?.address as Address - }); - this.setBalance(balance.formatted, balance.symbol); + private async syncBalance(address: Hex, chainId: number) { + const chain = this.wagmiConfig.chains.find((c: Chain) => c.id === chainId); + if (chain) { + const balance = await getBalance(this.wagmiConfig, { + address, + chainId: chain.id + }); + const formattedBalance = formatUnits(balance.value, balance.decimals); + this.setBalance(formattedBalance, balance.symbol); + + return; + } + this.setBalance(undefined, undefined); + } + + private async syncConnectedWalletInfo(connector: GetAccountReturnType['connector']) { + if (!connector) { + throw Error('syncConnectedWalletInfo - connector is undefined'); + } + + if (connector.id === ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID && connector.getProvider) { + const walletConnectProvider = (await connector.getProvider()) as Awaited< + ReturnType<(typeof EthereumProvider)['init']> + >; + if (walletConnectProvider.session) { + this.setConnectedWalletInfo({ + ...walletConnectProvider.session.peer.metadata, + name: walletConnectProvider.session.peer.metadata.name, + icon: walletConnectProvider.session.peer.metadata.icons?.[0] + }); + } + } else { + this.setConnectedWalletInfo({ name: connector.name, icon: connector.icon }); + } } - private syncConnectors(wagmiConfig: Web3ModalClientOptions['wagmiConfig']) { + private syncConnectors(connectors: Web3ModalClientOptions['wagmiConfig']['connectors']) { + const uniqueIds = new Set(); + const filteredConnectors = connectors.filter( + item => !uniqueIds.has(item.id) && uniqueIds.add(item.id) + ); + + const excludedConnectors = [ConstantsUtil.EMAIL_CONNECTOR_ID]; + const w3mConnectors: Connector[] = []; - wagmiConfig.connectors.forEach(({ id, name }) => { - if (![ConstantsUtil.EMAIL_CONNECTOR_ID].includes(id)) { + filteredConnectors.forEach(({ id, name, icon }) => { + if (!excludedConnectors.includes(id)) { w3mConnectors.push({ id, explorerId: PresetsUtil.ConnectorExplorerIds[id], - imageId: PresetsUtil.ConnectorImageIds[id], + imageId: PresetsUtil.ConnectorImageIds[id] ?? icon, imageUrl: this.options?.connectorImages?.[id], name: PresetsUtil.ConnectorNamesMap[id] ?? name, type: PresetsUtil.ConnectorTypesMap[id] ?? 'EXTERNAL' @@ -299,12 +355,13 @@ export class Web3Modal extends Web3ModalScaffold { }); this.setConnectors(w3mConnectors); + this.syncEmailConnector(filteredConnectors); } - private async syncEmailConnector(wagmiConfig: Web3ModalClientOptions['wagmiConfig']) { - const emailConnector = wagmiConfig.connectors.find( - ({ id }) => id === ConstantsUtil.EMAIL_CONNECTOR_ID - ); + private async syncEmailConnector( + connectors: Web3ModalClientOptions['wagmiConfig']['connectors'] + ) { + const emailConnector = connectors.find(({ id }) => id === ConstantsUtil.EMAIL_CONNECTOR_ID); if (emailConnector) { const provider = await emailConnector.getProvider(); this.addConnector({ @@ -316,8 +373,10 @@ export class Web3Modal extends Web3ModalScaffold { } } - private async listenEmailConnector(wagmiConfig: Web3ModalClientOptions['wagmiConfig']) { - const connector = wagmiConfig.connectors.find(c => c.id === ConstantsUtil.EMAIL_CONNECTOR_ID); + private async listenEmailConnector( + connectors: Web3ModalClientOptions['wagmiConfig']['connectors'] + ) { + const connector = connectors.find(c => c.id === ConstantsUtil.EMAIL_CONNECTOR_ID); const connectedConnector = await StorageUtil.getItem('@w3m/connected_connector'); if (connector && connectedConnector === 'EMAIL') { diff --git a/packages/wagmi/src/connectors/WalletConnectConnector.ts b/packages/wagmi/src/connectors/WalletConnectConnector.ts index 7ba966f4..2d491212 100644 --- a/packages/wagmi/src/connectors/WalletConnectConnector.ts +++ b/packages/wagmi/src/connectors/WalletConnectConnector.ts @@ -1,429 +1,473 @@ -import type WalletConnectProvider from '@walletconnect/ethereum-provider'; import { type EthereumProviderOptions } from '@walletconnect/ethereum-provider/dist/types/EthereumProvider'; -import { normalizeNamespaces } from '@walletconnect/utils'; import { + type Address, + type ProviderConnectInfo, ProviderRpcError, SwitchChainError, UserRejectedRequestError, - createWalletClient, - custom, getAddress, - numberToHex + numberToHex, + RpcError, + type AddEthereumChainParameter } from 'viem'; -import type { Account, Chain, Transport, WalletClient as WalletClient_ } from 'viem'; -import type { ConnectorData } from 'wagmi'; +import { + ChainNotConfiguredError, + ProviderNotFoundError, + createConnector, + type Connector +} from '@wagmi/core'; -import { Connector } from 'wagmi'; +import type { Evaluate, Omit } from '@wagmi/core/internal'; -import { - EthereumProvider, - OPTIONAL_EVENTS, - OPTIONAL_METHODS -} from '@walletconnect/ethereum-provider'; +import { EthereumProvider } from '@walletconnect/ethereum-provider'; -import { StorageUtil } from '@web3modal/scaffold-utils-react-native'; +/**** Types ****/ -export type StorageStoreData = { - state: { data?: ConnectorData }; +type WalletConnectConnector = Connector & { + onDisplayUri(uri: string): void; + onSessionDelete(data: { topic: string }): void; }; -export type WalletClient< - TTransport extends Transport = Transport, - TChain extends Chain = Chain, - TAccount extends Account = Account -> = WalletClient_; - -type WalletConnectOptions = { - /** - * WalletConnect Cloud Project ID. - * @link https://cloud.walletconnect.com/sign-in. - */ - projectId: EthereumProviderOptions['projectId']; - /** - * If a new chain is added to a previously existing configured connector `chains`, this flag - * will determine if that chain should be considered as stale. A stale chain is a chain that - * WalletConnect has yet to establish a relationship with (ie. the user has not approved or - * rejected the chain). - * - * Preface: Whereas WalletConnect v1 supported dynamic chain switching, WalletConnect v2 requires - * the user to pre-approve a set of chains up-front. This comes with consequent UX nuances (see below) when - * a user tries to switch to a chain that they have not approved. - * - * This flag mainly affects the behavior when a wallet does not support dynamic chain authorization - * with WalletConnect v2. - * - * If `true` (default), the new chain will be treated as a stale chain. If the user - * has yet to establish a relationship (approved/rejected) with this chain in their WalletConnect - * session, the connector will disconnect upon the dapp auto-connecting, and the user will have to - * reconnect to the dapp (revalidate the chain) in order to approve the newly added chain. - * This is the default behavior to avoid an unexpected error upon switching chains which may - * be a confusing user experience (ie. the user will not know they have to reconnect - * unless the dapp handles these types of errors). - * - * If `false`, the new chain will be treated as a validated chain. This means that if the user - * has yet to establish a relationship with the chain in their WalletConnect session, wagmi will successfully - * auto-connect the user. This comes with the trade-off that the connector will throw an error - * when attempting to switch to the unapproved chain. This may be useful in cases where a dapp constantly - * modifies their configured chains, and they do not want to disconnect the user upon - * auto-connecting. If the user decides to switch to the unapproved chain, it is important that the - * dapp handles this error and prompts the user to reconnect to the dapp in order to approve - * the newly added chain. - * - * @default true - */ - isNewChainsStale?: boolean; - /** - * Metadata for your app. - * @link https://docs.walletconnect.com/web3modal/react-native/about#implementation - */ - metadata?: EthereumProviderOptions['metadata']; - /** - * Option to override default relay url. - */ - relayUrl?: string; +export type WalletConnectParameters = Evaluate< + { + /** + * WalletConnect Cloud Project ID. + * @link https://cloud.walletconnect.com/sign-in. + */ + projectId: EthereumProviderOptions['projectId']; + /** + * If a new chain is added to a previously existing configured connector `chains`, this flag + * will determine if that chain should be considered as stale. A stale chain is a chain that + * WalletConnect has yet to establish a relationship with (e.g. the user has not approved or + * rejected the chain). + * + * This flag mainly affects the behavior when a wallet does not support dynamic chain authorization + * with WalletConnect v2. + * + * If `true` (default), the new chain will be treated as a stale chain. If the user + * has yet to establish a relationship (approved/rejected) with this chain in their WalletConnect + * session, the connector will disconnect upon the dapp auto-connecting, and the user will have to + * reconnect to the dapp (revalidate the chain) in order to approve the newly added chain. + * This is the default behavior to avoid an unexpected error upon switching chains which may + * be a confusing user experience (e.g. the user will not know they have to reconnect + * unless the dapp handles these types of errors). + * + * If `false`, the new chain will be treated as a potentially valid chain. This means that if the user + * has yet to establish a relationship with the chain in their WalletConnect session, wagmi will successfully + * auto-connect the user. This comes with the trade-off that the connector will throw an error + * when attempting to switch to the unapproved chain if the wallet does not support dynamic session updates. + * This may be useful in cases where a dapp constantly + * modifies their configured chains, and they do not want to disconnect the user upon + * auto-connecting. If the user decides to switch to the unapproved chain, it is important that the + * dapp handles this error and prompts the user to reconnect to the dapp in order to approve + * the newly added chain. + * + * @default true + */ + isNewChainsStale?: boolean; + /** + * Metadata for your app. + * @link https://docs.walletconnect.com/web3modal/react-native/about#implementation + */ + metadata: EthereumProviderOptions['metadata']; + } & Omit< + EthereumProviderOptions, + | 'chains' + | 'events' + | 'optionalChains' + | 'optionalEvents' + | 'optionalMethods' + | 'methods' + | 'rpcMap' + | 'showQrModal' + | 'qrModalOptions' + | 'storageOptions' + > +>; + +type Provider = Awaited>; + +type NamespaceMethods = 'wallet_addEthereumChain' | 'wallet_switchEthereumChain'; + +type Properties = { + connect(parameters?: { chainId?: number; pairingTopic?: string }): Promise<{ + accounts: readonly Address[]; + chainId: number; + }>; + getNamespaceChainsIds(): number[]; + getNamespaceMethods(): NamespaceMethods[]; + getRequestedChainsIds(): Promise; + isChainsStale(): Promise; + onConnect(connectInfo: ProviderConnectInfo): void; + onDisplayUri(uri: string): void; + onSessionDelete(data: { topic: string }): void; + setRequestedChainsIds(chains: number[]): void; + requestedChainsStorageKey: `${string}.requestedChains`; }; -type ConnectConfig = { - /** Target chain to connect to. */ - chainId?: number; - /** If provided, will attempt to connect to an existing pairing. */ - pairingTopic?: string; +type StorageItem = { + [_ in Properties['requestedChainsStorageKey']]: number[]; }; -const NAMESPACE = 'eip155'; -const STORE_KEY = 'store'; -const REQUESTED_CHAINS_KEY = 'requestedChains'; -const ADD_ETH_CHAIN_METHOD = 'wallet_addEthereumChain'; -const SWITCH_ETH_CHAIN_METHOD = 'wallet_switchEthereumChain'; - -export class WalletConnectConnector extends Connector { - readonly id = 'walletConnect'; - readonly name = 'WalletConnect'; - readonly ready = true; - - _provider?: WalletConnectProvider; - _initProviderPromise?: Promise; - - constructor(config: { chains?: Chain[]; options: WalletConnectOptions }) { - super({ - ...config, - options: { isNewChainsStale: true, ...config.options } - }); - this._createProvider(); - } - - async connect({ chainId, pairingTopic }: ConnectConfig = {}) { - try { - let targetChainId = chainId; - if (!targetChainId) { - const store = await StorageUtil.getItem(STORE_KEY); - const lastUsedChainId = store?.state?.data?.chain?.id; - if (lastUsedChainId && !this.isChainUnsupported(lastUsedChainId)) - targetChainId = lastUsedChainId; - else targetChainId = this.chains[0]?.id; +walletConnect.type = 'walletConnect' as const; +export function walletConnect(parameters: WalletConnectParameters) { + const isNewChainsStale = parameters.isNewChainsStale ?? true; + + let provider_: Provider | undefined; + let providerPromise: Promise; + const NAMESPACE = 'eip155'; + + let accountsChanged: WalletConnectConnector['onAccountsChanged'] | undefined; + let chainChanged: WalletConnectConnector['onChainChanged'] | undefined; + let connect: WalletConnectConnector['onConnect'] | undefined; + let displayUri: WalletConnectConnector['onDisplayUri'] | undefined; + let sessionDelete: WalletConnectConnector['onSessionDelete'] | undefined; + let disconnect: WalletConnectConnector['onDisconnect'] | undefined; + + return createConnector(config => ({ + id: 'walletConnect', + name: 'WalletConnect', + type: walletConnect.type, + async setup() { + const provider = await this.getProvider().catch(() => null); + if (!provider) return; + if (!connect) { + connect = this.onConnect.bind(this); + provider.on('connect', connect); } - if (!targetChainId) throw new Error('No chains found on connector.'); - + if (!sessionDelete) { + sessionDelete = this.onSessionDelete.bind(this); + provider.on('session_delete', sessionDelete); + } + }, + async connect({ chainId, ...rest } = {}) { + try { + const provider = await this.getProvider(); + if (!provider) throw new ProviderNotFoundError(); + if (!displayUri) { + displayUri = this.onDisplayUri; + provider.on('display_uri', displayUri); + } + + let targetChainId = chainId; + if (!targetChainId) { + const state = (await config.storage?.getItem('state')) ?? {}; + const isChainSupported = config.chains.some(x => x.id === state.chainId); + if (isChainSupported) targetChainId = state.chainId; + else targetChainId = config.chains[0]?.id; + } + if (!targetChainId) throw new Error('No chains found on connector.'); + + const isChainsStale = await this.isChainsStale(); + // If there is an active session with stale chains, disconnect current session. + if (provider.session && isChainsStale) await provider.disconnect(); + + // If there isn't an active session or chains are stale, connect. + if (!provider.session || isChainsStale) { + const optionalChains = config.chains + .filter(chain => chain.id !== targetChainId) + .map(optionalChain => optionalChain.id); + await provider.connect({ + optionalChains: [targetChainId, ...optionalChains], + ...('pairingTopic' in rest ? { pairingTopic: rest.pairingTopic } : {}) + }); + + this.setRequestedChainsIds(config.chains.map(x => x.id)); + } + + // If session exists and chains are authorized, enable provider for required chain + const accounts: Address[] = (await provider.enable()).map(getAddress); + const currentChainId = await this.getChainId(); + + if (displayUri) { + provider.removeListener('display_uri', displayUri); + displayUri = undefined; + } + if (connect) { + provider.removeListener('connect', connect); + connect = undefined; + } + if (!accountsChanged) { + accountsChanged = this.onAccountsChanged.bind(this); + provider.on('accountsChanged', accountsChanged); + } + if (!chainChanged) { + chainChanged = this.onChainChanged.bind(this); + provider.on('chainChanged', chainChanged); + } + if (!disconnect) { + disconnect = this.onDisconnect.bind(this); + provider.on('disconnect', disconnect); + } + if (!sessionDelete) { + sessionDelete = this.onSessionDelete.bind(this); + provider.on('session_delete', sessionDelete); + } + + return { accounts, chainId: currentChainId }; + } catch (error) { + if ( + /(user rejected|connection request reset)/i.test((error as ProviderRpcError)?.message) + ) { + throw new UserRejectedRequestError(error as Error); + } + throw error; + } + }, + async disconnect() { const provider = await this.getProvider(); - this._setupListeners(); - - const isChainsStale = await this._isChainsStale(); - - // If there is an active session with stale chains, disconnect the current session. - if (provider.session && isChainsStale) { - await provider.disconnect(); + try { + await provider?.disconnect(); + } catch (error) { + if (!/No matching key/i.test((error as Error).message)) throw error; + } finally { + if (chainChanged) { + provider?.removeListener('chainChanged', chainChanged); + chainChanged = undefined; + } + if (disconnect) { + provider?.removeListener('disconnect', disconnect); + disconnect = undefined; + } + if (!connect) { + connect = this.onConnect.bind(this); + provider?.on('connect', connect); + } + if (accountsChanged) { + provider?.removeListener('accountsChanged', accountsChanged); + accountsChanged = undefined; + } + if (sessionDelete) { + provider?.removeListener('session_delete', sessionDelete); + sessionDelete = undefined; + } + + this.setRequestedChainsIds([]); } - - // If there no active session, or the chains are stale, connect. - if (!provider.session || isChainsStale) { - const optionalChains = this.chains - .filter(chain => chain.id !== targetChainId) - .map(optionalChain => optionalChain.id); - - this.emit('message', { type: 'connecting' }); - - await provider.connect({ - pairingTopic, - chains: [targetChainId], - optionalChains: optionalChains.length ? optionalChains : undefined + }, + async getAccounts() { + const provider: Provider = await this.getProvider(); + + return provider.accounts.map(getAddress); + }, + async getProvider({ chainId } = {}) { + async function initProvider() { + const optionalChains = config.chains.map(x => x.id) as [number]; + if (!optionalChains.length) return Promise.resolve(undefined); + + const { projectId, metadata, ...params } = parameters; + + return await EthereumProvider.init({ + optionalChains, + projectId, + rpcMap: Object.fromEntries( + config.chains.map(chain => [chain.id, chain.rpcUrls.default.http[0]!]) + ), + showQrModal: false, + qrModalOptions: undefined, + disableProviderPing: true, + metadata, + ...params }); - - this._setRequestedChainsIds(this.chains.map(({ id }) => id)); } - - // If session exists and chains are authorized, enable provider for required chain - const accounts = await provider.enable(); - const account = getAddress(accounts[0]!); - const id = await this.getChainId(); - const unsupported = this.isChainUnsupported(id); - - return { - account, - chain: { id, unsupported } - }; - } catch (error) { - if (/user rejected/i.test((error as ProviderRpcError)?.message)) { - throw new UserRejectedRequestError(error as Error); + if (!provider_) { + if (!providerPromise) providerPromise = initProvider(); + provider_ = await providerPromise; + provider_?.events.setMaxListeners(Number.POSITIVE_INFINITY); } - throw error; - } - } - - async disconnect() { - const provider = await this.getProvider(); - try { - await provider.disconnect(); - } catch (error) { - if (!/No matching key/i.test((error as Error).message)) throw error; - } finally { - this._removeListeners(); - this._setRequestedChainsIds([]); - } - } - - async getAccount() { - const { accounts } = await this.getProvider(); - - return getAddress(accounts[0]!); - } - - async getChainId() { - const { chainId } = await this.getProvider(); - - return chainId; - } + if (chainId) await this.switchChain?.({ chainId }); - async getProvider({ chainId }: { chainId?: number } = {}) { - if (!this._provider) await this._createProvider(); - if (chainId) await this.switchChain(chainId); - - return this._provider!; - } + return provider_!; + }, + async getChainId() { + const provider = await this.getProvider(); - async getWalletClient({ chainId }: { chainId?: number } = {}): Promise { - const [provider, account] = await Promise.all([ - this.getProvider({ chainId }), - this.getAccount() - ]); - const chain = this.chains.find(x => x.id === chainId); - if (!provider) throw new Error('provider is required.'); + return provider.chainId; + }, + async isAuthorized() { + try { + const [accounts, provider] = await Promise.all([this.getAccounts(), this.getProvider()]); - //@ts-ignore - TODO - return createWalletClient({ - account, - chain, - transport: custom(provider) - }); - } + // If an account does not exist on the session, then the connector is unauthorized. + if (!accounts.length) return false; - async isAuthorized() { - try { - const [account, provider] = await Promise.all([this.getAccount(), this.getProvider()]); - const isChainsStale = await this._isChainsStale(); + // If the chains are stale on the session, then the connector is unauthorized. + const isChainsStale = await this.isChainsStale(); + if (isChainsStale && provider.session) { + await provider.disconnect().catch(() => {}); - // If an account does not exist on the session, then the connector is unauthorized. - if (!account) return false; - - // If the chains are stale on the session, then the connector is unauthorized. - if (isChainsStale && provider.session) { - try { - await provider.disconnect(); - } catch {} + return false; + } + return true; + } catch { return false; } + }, + async switchChain({ addEthereumChainParameter, chainId }) { + const provider = await this.getProvider(); + if (!provider) throw new ProviderNotFoundError(); + + const chain = config.chains.find(c => c.id === chainId); + if (!chain) throw new SwitchChainError(new ChainNotConfiguredError()); + + try { + await Promise.all([ + new Promise(resolve => { + const listener = ({ chainId: currentChainId }: { chainId?: number }) => { + if (currentChainId === chainId) { + config.emitter.off('change', listener); + resolve(); + } + }; + config.emitter.on('change', listener); + }), + provider.request({ + method: 'wallet_switchEthereumChain', + params: [{ chainId: numberToHex(chainId) }] + }) + ]); + + const requestedChains = await this.getRequestedChainsIds(); + if (!requestedChains.includes(chainId)) { + this.setRequestedChainsIds([...requestedChains, chainId]); + } + + return chain; + } catch (err) { + const error = err as RpcError; + + if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error); + + // Indicates chain is not added to provider + try { + let blockExplorerUrls: string[] | undefined; + if (addEthereumChainParameter?.blockExplorerUrls) + blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls; + else + blockExplorerUrls = chain.blockExplorers?.default.url + ? [chain.blockExplorers?.default.url] + : []; + + let rpcUrls: readonly string[]; + if (addEthereumChainParameter?.rpcUrls?.length) + rpcUrls = addEthereumChainParameter.rpcUrls; + else rpcUrls = [...chain.rpcUrls.default.http]; + + const addEthereumChain = { + blockExplorerUrls, + chainId: numberToHex(chainId), + chainName: addEthereumChainParameter?.chainName ?? chain.name, + iconUrls: addEthereumChainParameter?.iconUrls, + nativeCurrency: addEthereumChainParameter?.nativeCurrency ?? chain.nativeCurrency, + rpcUrls + } satisfies AddEthereumChainParameter; + + await provider.request({ + method: 'wallet_addEthereumChain', + params: [addEthereumChain] + }); + + const requestedChains = await this.getRequestedChainsIds(); + this.setRequestedChainsIds([...requestedChains, chainId]); + + return chain; + } catch (e) { + throw new UserRejectedRequestError(e as Error); + } + } + }, + onAccountsChanged(accounts) { + if (accounts.length === 0) this.onDisconnect(); + else config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) }); + }, + onChainChanged(chain) { + const chainId = Number(chain); + config.emitter.emit('change', { chainId }); + }, + async onConnect(connectInfo) { + const chainId = Number(connectInfo.chainId); + const accounts = await this.getAccounts(); + config.emitter.emit('connect', { accounts, chainId }); + }, + async onDisconnect(_error) { + this.setRequestedChainsIds([]); + config.emitter.emit('disconnect'); - return true; - } catch { - return false; - } - } - - override async switchChain(chainId: number) { - const chain = this.chains.find(_chain => _chain.id === chainId); - if (!chain) throw new SwitchChainError(new Error('chain not found on connector.')); - - try { const provider = await this.getProvider(); - const namespaceChains = this._getNamespaceChainsIds(); - const namespaceMethods = this._getNamespaceMethods(); - const isChainApproved = namespaceChains.includes(chainId); - - if (!isChainApproved && namespaceMethods.includes(ADD_ETH_CHAIN_METHOD)) { - await provider.request({ - method: ADD_ETH_CHAIN_METHOD, - params: [ - { - chainId: numberToHex(chain.id), - blockExplorerUrls: [chain.blockExplorers?.default?.url], - chainName: chain.name, - nativeCurrency: chain.nativeCurrency, - rpcUrls: [...chain.rpcUrls.default.http] - } - ] - }); - const requestedChains = await this._getRequestedChainsIds(); - requestedChains.push(chainId); - this._setRequestedChainsIds(requestedChains); + if (accountsChanged) { + provider.removeListener('accountsChanged', accountsChanged); + accountsChanged = undefined; } - await provider.request({ - method: SWITCH_ETH_CHAIN_METHOD, - params: [{ chainId: numberToHex(chainId) }] - }); - - return chain; - } catch (error) { - const message = typeof error === 'string' ? error : (error as ProviderRpcError)?.message; - if (/user rejected request/i.test(message)) { - throw new UserRejectedRequestError(error as Error); + if (chainChanged) { + provider.removeListener('chainChanged', chainChanged); + chainChanged = undefined; } - throw new SwitchChainError(error as Error); - } - } + if (disconnect) { + provider.removeListener('disconnect', disconnect); + disconnect = undefined; + } + if (sessionDelete) { + provider.removeListener('session_delete', sessionDelete); + sessionDelete = undefined; + } + if (!connect) { + connect = this.onConnect.bind(this); + provider.on('connect', connect); + } + }, + onDisplayUri(uri) { + config.emitter.emit('message', { type: 'display_uri', data: uri }); + }, + onSessionDelete() { + this.onDisconnect(); + }, + getNamespaceChainsIds() { + if (!provider_) return []; + const chainIds = provider_.session?.namespaces[NAMESPACE]?.accounts?.map(account => + parseInt(account.split(':')[1] || '') + ); + + return chainIds ?? []; + }, + getNamespaceMethods() { + if (!provider_) return []; + const methods = provider_.session?.namespaces[NAMESPACE]?.methods as NamespaceMethods[]; + + return methods ?? []; + }, + async getRequestedChainsIds() { + return (await config.storage?.getItem(this.requestedChainsStorageKey)) ?? []; + }, + /** + * Checks if the target chains match the chains that were + * initially requested by the connector for the WalletConnect session. + * If there is a mismatch, this means that the chains on the connector + * are considered stale, and need to be revalidated at a later point (via + * connection). + * + * There may be a scenario where a dapp adds a chain to the + * connector later on, however, this chain will not have been approved or rejected + * by the wallet. In this case, the chain is considered stale. + */ + async isChainsStale() { + if (!isNewChainsStale) return false; + + const connectorChains = config.chains.map(x => x.id); + const namespaceChains = this.getNamespaceChainsIds(); + if (namespaceChains.length && !namespaceChains.some(id => connectorChains.includes(id))) + return false; - async _createProvider() { - if (!this._initProviderPromise) { - this._initProviderPromise = this._initProvider(); - } + const requestedChains = await this.getRequestedChainsIds(); - return this._initProviderPromise; - } - - async _initProvider() { - const [defaultChain, ...optionalChains] = this.chains.map(({ id }) => id); - if (defaultChain) { - const { projectId, metadata, relayUrl } = this.options; - this._provider = await EthereumProvider.init({ - showQrModal: false, - qrModalOptions: undefined, - projectId, - optionalMethods: OPTIONAL_METHODS, - optionalEvents: OPTIONAL_EVENTS, - chains: [defaultChain], - optionalChains: optionalChains.length ? optionalChains : undefined, - rpcMap: Object.fromEntries( - this.chains.map(chain => [chain.id, chain.rpcUrls.default.http[0]!]) - ), - metadata, - relayUrl - }); + return !connectorChains.every(id => requestedChains.includes(id)); + }, + async setRequestedChainsIds(chains) { + await config.storage?.setItem(this.requestedChainsStorageKey, chains); + }, + get requestedChainsStorageKey() { + return `${this.id}.requestedChains` as Properties['requestedChainsStorageKey']; } - } - - /** - * Checks if the target chains match the chains that were - * initially requested by the connector for the WalletConnect session. - * If there is a mismatch, this means that the chains on the connector - * are considered stale, and need to be revalidated at a later point (via - * connection). - * - * There may be a scenario where a dapp adds a chain to the - * connector later on, however, this chain will not have been approved or rejected - * by the wallet. In this case, the chain is considered stale. - * - * There are exceptions however: - * - If the wallet supports dynamic chain addition via `eth_addEthereumChain`, - * then the chain is not considered stale. - * - If the `isNewChainsStale` flag is falsy on the connector, then the chain is - * not considered stale. - * - * For the above cases, chain validation occurs dynamically when the user - * attempts to switch chain. - * - * Also check that dapp supports at least 1 chain from previously approved session. - */ - async _isChainsStale() { - const namespaceMethods = this._getNamespaceMethods(); - if (namespaceMethods.includes(ADD_ETH_CHAIN_METHOD)) return false; - if (!this.options.isNewChainsStale) return false; - - const requestedChains = await this._getRequestedChainsIds(); - const connectorChains = this.chains.map(({ id }) => id); - const namespaceChains = this._getNamespaceChainsIds(); - - if (namespaceChains.length && !namespaceChains.some(id => connectorChains.includes(id))) - return false; - - return !connectorChains.every(id => requestedChains.includes(id)); - } - - _setupListeners() { - if (!this._provider) return; - this._removeListeners(); - this._provider.on('accountsChanged', this.onAccountsChanged); - this._provider.on('chainChanged', this.onChainChanged); - this._provider.on('disconnect', this.onDisconnect); - this._provider.on('session_delete', this.onDisconnect); - this._provider.on('display_uri', this.onDisplayUri); - this._provider.on('connect', this.onConnect); - } - - _removeListeners() { - if (!this._provider) return; - this._provider.removeListener('accountsChanged', this.onAccountsChanged); - this._provider.removeListener('chainChanged', this.onChainChanged); - this._provider.removeListener('disconnect', this.onDisconnect); - this._provider.removeListener('session_delete', this.onDisconnect); - this._provider.removeListener('display_uri', this.onDisplayUri); - this._provider.removeListener('connect', this.onConnect); - } - - _setRequestedChainsIds(chains: number[]) { - StorageUtil.setItem(REQUESTED_CHAINS_KEY, chains); - } - - async _getRequestedChainsIds(): Promise { - const requestedChains = await StorageUtil.getItem(REQUESTED_CHAINS_KEY); - - return requestedChains || []; - } - - _getNamespaceChainsIds() { - if (!this._provider) return []; - const namespaces = this._provider.session?.namespaces; - if (!namespaces) return []; - - const normalizedNamespaces = normalizeNamespaces(namespaces); - const chainIds = normalizedNamespaces[NAMESPACE]?.chains?.map(chain => - parseInt(chain.split(':')[1] || '') - ); - - return chainIds ?? []; - } - - _getNamespaceMethods() { - if (!this._provider) return []; - const namespaces = this._provider.session?.namespaces; - if (!namespaces) return []; - - const normalizedNamespaces = normalizeNamespaces(namespaces); - const methods = normalizedNamespaces[NAMESPACE]?.methods; - - return methods ?? []; - } - - protected onAccountsChanged = (accounts: string[]) => { - if (accounts.length === 0) this.emit('disconnect'); - else this.emit('change', { account: getAddress(accounts[0]!) }); - }; - - protected onChainChanged = (chainId: number | string) => { - const id = Number(chainId); - const unsupported = this.isChainUnsupported(id); - this.emit('change', { chain: { id, unsupported } }); - }; - - protected onDisconnect = () => { - this._setRequestedChainsIds([]); - this.emit('disconnect'); - }; - - protected onDisplayUri = (uri: string) => { - this.emit('message', { type: 'display_uri', data: uri }); - }; - - protected onConnect = () => { - this.emit('connect', {}); - }; + })); } diff --git a/packages/wagmi/src/index.tsx b/packages/wagmi/src/index.tsx index edf0bc8e..1f67737b 100644 --- a/packages/wagmi/src/index.tsx +++ b/packages/wagmi/src/index.tsx @@ -8,7 +8,7 @@ export { } from '@web3modal/scaffold-react-native'; import { ConstantsUtil } from '@web3modal/scaffold-utils-react-native'; export { defaultWagmiConfig } from './utils/defaultWagmiConfig'; -import { useEffect, useState } from 'react'; +import { useEffect, useState, useSyncExternalStore } from 'react'; import type { Web3ModalOptions } from './client'; import { Web3Modal } from './client'; @@ -68,6 +68,20 @@ export function useWeb3ModalState() { return state; } +export function useWalletInfo() { + if (!modal) { + throw new Error('Please call "createWeb3Modal" before using "useWalletInfo" hook'); + } + + const walletInfo = useSyncExternalStore( + modal.subscribeWalletInfo, + modal.getWalletInfo, + modal.getWalletInfo + ); + + return { walletInfo }; +} + export function useWeb3ModalEvents() { if (!modal) { throw new Error('Please call "createWeb3Modal" before using "useWeb3ModalEvents" hook'); diff --git a/packages/wagmi/src/utils/defaultWagmiConfig.ts b/packages/wagmi/src/utils/defaultWagmiConfig.ts index 58199dc0..6f3bd789 100644 --- a/packages/wagmi/src/utils/defaultWagmiConfig.ts +++ b/packages/wagmi/src/utils/defaultWagmiConfig.ts @@ -1,33 +1,41 @@ -import { configureChains, createConfig, type Chain, Connector } from 'wagmi'; -import { publicProvider } from 'wagmi/providers/public'; +import { + createConfig, + createStorage, + type CreateConnectorFn, + type CreateConfigParameters +} from 'wagmi'; import type { EthereumProviderOptions } from '@walletconnect/ethereum-provider/dist/types/EthereumProvider'; -import { walletConnectProvider } from './provider'; -import { WalletConnectConnector } from '../connectors/WalletConnectConnector'; +import { StorageUtil } from '@web3modal/scaffold-utils-react-native'; -export interface ConfigOptions { +import { walletConnect } from '../connectors/WalletConnectConnector'; +import { getTransport } from './helpers'; + +export type ConfigOptions = Partial & { projectId: string; metadata: Exclude; - chains: Chain[]; + chains: CreateConfigParameters['chains']; enableWalletConnect?: boolean; - extraConnectors?: Connector[]; -} + extraConnectors?: CreateConnectorFn[]; +}; export function defaultWagmiConfig({ projectId, chains, metadata, enableWalletConnect = true, - extraConnectors + extraConnectors, + ...wagmiConfig }: ConfigOptions) { - const { publicClient } = configureChains(chains, [ - walletConnectProvider({ projectId }), - publicProvider() + const connectors: CreateConnectorFn[] = []; + const transportsArr = chains.map(chain => [ + chain.id, + getTransport({ chainId: chain.id, projectId }) ]); - - const connectors: Connector[] = []; + const transports = Object.fromEntries(transportsArr); + const storage = createStorage({ storage: StorageUtil }); if (enableWalletConnect) { - connectors.push(new WalletConnectConnector({ chains, options: { projectId, metadata } })); + connectors.push(walletConnect({ projectId, metadata })); } if (extraConnectors) { @@ -35,8 +43,11 @@ export function defaultWagmiConfig({ } return createConfig({ - autoConnect: true, + chains, connectors, - publicClient + transports, + storage, + multiInjectedProviderDiscovery: false, + ...wagmiConfig }); } diff --git a/packages/wagmi/src/utils/helpers.ts b/packages/wagmi/src/utils/helpers.ts index c8a897f5..bab0ff02 100644 --- a/packages/wagmi/src/utils/helpers.ts +++ b/packages/wagmi/src/utils/helpers.ts @@ -1,8 +1,13 @@ -import type { CaipNetwork, CaipNetworkId } from '@web3modal/scaffold-react-native'; +import { + CoreHelperUtil, + type CaipNetwork, + type CaipNetworkId +} from '@web3modal/scaffold-react-native'; import { PresetsUtil, ConstantsUtil } from '@web3modal/scaffold-utils-react-native'; import type { Connector } from '@wagmi/core'; import { EthereumProvider } from '@walletconnect/ethereum-provider'; import type { Web3ModalClientOptions } from '../client'; +import { http } from 'viem'; export function getCaipDefaultChain(chain?: Web3ModalClientOptions['defaultChain']) { if (!chain) { @@ -41,3 +46,13 @@ export function getEmailCaipNetworks() { ) as CaipNetworkId[] }; } + +export function getTransport({ chainId, projectId }: { chainId: number; projectId: string }) { + const RPC_URL = CoreHelperUtil.getBlockchainApiUrl(); + + if (!PresetsUtil.WalletConnectRpcChainIds.includes(chainId)) { + return http(); + } + + return http(`${RPC_URL}/v1/?chainId=${ConstantsUtil.EIP155}:${chainId}&projectId=${projectId}`); +} diff --git a/packages/wagmi/src/utils/provider.ts b/packages/wagmi/src/utils/provider.ts deleted file mode 100644 index e893f9de..00000000 --- a/packages/wagmi/src/utils/provider.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { CoreHelperUtil } from '@web3modal/scaffold-react-native'; -import { ConstantsUtil, PresetsUtil } from '@web3modal/scaffold-utils-react-native'; -import type { Chain } from 'viem'; - -// -- Helpers ------------------------------------------------------------------ -const RPC_URL = CoreHelperUtil.getBlockchainApiUrl(); - -// -- Types -------------------------------------------------------------------- -interface Options { - projectId: string; -} - -// -- Provider ----------------------------------------------------------------- -export function walletConnectProvider({ projectId }: Options) { - return function provider(chain: C) { - if (!PresetsUtil.WalletConnectRpcChainIds.includes(chain.id)) { - return null; - } - - const baseHttpUrl = `${RPC_URL}/v1/?chainId=${ConstantsUtil.EIP155}:${chain.id}&projectId=${projectId}`; - - return { - chain: { - ...chain, - rpcUrls: { - ...chain.rpcUrls, - default: { http: [baseHttpUrl] } - } - } as C, - rpcUrls: { - http: [baseHttpUrl] - } - }; - }; -} diff --git a/yarn.lock b/yarn.lock index 070e79fc..6e4caf07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,13 +31,6 @@ __metadata: languageName: node linkType: hard -"@adraffy/ens-normalize@npm:1.9.4": - version: 1.9.4 - resolution: "@adraffy/ens-normalize@npm:1.9.4" - checksum: 95190ee7e6e40d77cfbaaac3edfb4c0cf399e0781e920741ffb73cff141c40651cc5dbbb727e21d2c48ef66b9f082757125350b11af974172120f05ce5a635a7 - languageName: node - linkType: hard - "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -65,7 +58,7 @@ __metadata: "@storybook/react-webpack5": "npm:^7.4.6" "@storybook/testing-library": "npm:^0.2.2" "@storybook/theming": "npm:^7.4.6" - "@web3modal/ui-react-native": "npm:1.4.1" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" babel-plugin-react-native-web: "npm:^0.19.7" babel-plugin-react-require: "npm:^4.0.1" metro-react-native-babel-preset: "npm:^0.77.0" @@ -91,11 +84,12 @@ __metadata: "@react-native-community/netinfo": "npm:9.3.10" "@react-native/eslint-config": "npm:^0.72.2" "@react-native/metro-config": "npm:^0.72.11" + "@tanstack/react-query": "npm:5.37.1" "@tsconfig/react-native": "npm:^3.0.0" "@types/react": "npm:^18.0.24" "@types/react-test-renderer": "npm:^18.0.0" - "@walletconnect/react-native-compat": "npm:2.10.5" - "@web3modal/wagmi-react-native": "npm:1.4.1" + "@walletconnect/react-native-compat": "npm:2.13.1" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.2" babel-jest: "npm:^29.2.1" babel-plugin-module-resolver: "npm:^5.0.0" eslint: "npm:^8.19.0" @@ -110,8 +104,8 @@ __metadata: react-native-svg: "npm:13.9.0" react-test-renderer: "npm:18.2.0" typescript: "npm:4.8.4" - viem: "npm:1.19.3" - wagmi: "npm:1.4.7" + viem: "npm:2.13.1" + wagmi: "npm:2.9.7" languageName: unknown linkType: soft @@ -122,11 +116,14 @@ __metadata: "@babel/core": "npm:^7.20.0" "@react-native-async-storage/async-storage": "npm:1.21.0" "@react-native-community/netinfo": "npm:11.1.0" + "@tanstack/query-async-storage-persister": "npm:^5.40.0" + "@tanstack/react-query": "npm:5.37.1" + "@tanstack/react-query-persist-client": "npm:^5.40.0" "@types/react": "npm:~18.2.45" "@types/react-native": "npm:0.72.2" - "@walletconnect/react-native-compat": "npm:2.10.5" - "@web3modal/email-wagmi-react-native": "npm:1.4.1" - "@web3modal/wagmi-react-native": "npm:1.4.1" + "@walletconnect/react-native-compat": "npm:2.13.1" + "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.2" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.2" babel-plugin-module-resolver: "npm:^5.0.0" expo: "npm:^50.0.14" expo-application: "npm:~5.8.3" @@ -143,8 +140,8 @@ __metadata: react-native-webview: "npm:13.6.4" typescript: "npm:^5.3.0" uuid: "npm:3.4.0" - viem: "npm:1.19.3" - wagmi: "npm:1.4.7" + viem: "npm:2.13.1" + wagmi: "npm:2.9.7" languageName: unknown linkType: soft @@ -2683,7 +2680,16 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.5.5": +"@babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0": + version: 7.24.6 + resolution: "@babel/runtime@npm:7.24.6" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 224ad205de33ea28979baaec89eea4c4d4e9482000dd87d15b97859365511cdd4d06517712504024f5d33a5fb9412f9b91c96f1d923974adf9359e1575cde049 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5": version: 7.23.1 resolution: "@babel/runtime@npm:7.23.1" dependencies: @@ -3100,6 +3106,20 @@ __metadata: languageName: node linkType: hard +"@coinbase/wallet-sdk@npm:4.0.2": + version: 4.0.2 + resolution: "@coinbase/wallet-sdk@npm:4.0.2" + dependencies: + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: fa06f48ac1b81f7d25eb98a48af04c481d7cfee15845aa386328257d873c9a900d15e0b5a114f6c481e12250946ea326865341fd388b6f18ab5b25163a2dd209 + languageName: node + linkType: hard + "@coinbase/wallet-sdk@npm:^3.5.1": version: 3.9.1 resolution: "@coinbase/wallet-sdk@npm:3.9.1" @@ -3117,31 +3137,6 @@ __metadata: languageName: node linkType: hard -"@coinbase/wallet-sdk@npm:^3.6.6": - version: 3.7.2 - resolution: "@coinbase/wallet-sdk@npm:3.7.2" - dependencies: - "@metamask/safe-event-emitter": "npm:2.0.0" - "@solana/web3.js": "npm:^1.70.1" - bind-decorator: "npm:^1.0.11" - bn.js: "npm:^5.1.1" - buffer: "npm:^6.0.3" - clsx: "npm:^1.1.0" - eth-block-tracker: "npm:6.1.0" - eth-json-rpc-filters: "npm:5.1.0" - eth-rpc-errors: "npm:4.0.2" - json-rpc-engine: "npm:6.1.0" - keccak: "npm:^3.0.1" - preact: "npm:^10.5.9" - qs: "npm:^6.10.3" - rxjs: "npm:^6.6.3" - sha.js: "npm:^2.4.11" - stream-browserify: "npm:^3.0.0" - util: "npm:^0.12.4" - checksum: 0b76bc5b032e2ae39ba8f6e2c758c77c9cb366675822a50ab89d0d176e9b654b1a65a7f1363f9272fd04c8e01a01ad78523b8cac0ca95ef8f6e9a781e3fb20b6 - languageName: node - linkType: hard - "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" @@ -4871,13 +4866,6 @@ __metadata: languageName: node linkType: hard -"@ledgerhq/connect-kit-loader@npm:^1.1.0": - version: 1.1.2 - resolution: "@ledgerhq/connect-kit-loader@npm:1.1.2" - checksum: 82482d21db3cde4c4d8806cf20a2bd9ee23964d9dbaa349b631be5cc405b7f4562ba7285d3337e147936090955c278644f6d996e3e61a506fd9ccebdb1d45744 - languageName: node - linkType: hard - "@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": version: 1.1.1 resolution: "@lit-labs/ssr-dom-shim@npm:1.1.1" @@ -4954,6 +4942,68 @@ __metadata: languageName: node linkType: hard +"@metamask/json-rpc-engine@npm:^7.3.2": + version: 7.3.3 + resolution: "@metamask/json-rpc-engine@npm:7.3.3" + dependencies: + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: 6c3b55de01593bc841de1bf4daac46cc307ed7c3b759fec12cbda582527962bb0d909b024e6c56251c0644379634cec24f3d37cbf3443430e148078db9baece1 + languageName: node + linkType: hard + +"@metamask/json-rpc-middleware-stream@npm:^6.0.2": + version: 6.0.2 + resolution: "@metamask/json-rpc-middleware-stream@npm:6.0.2" + dependencies: + "@metamask/json-rpc-engine": "npm:^7.3.2" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + readable-stream: "npm:^3.6.2" + checksum: a91b8d834253a1700d96cf0f08d2362e2db58365f751cb3e60b3c5e9422a1f443a8a515d5a653ced59535726717d0f827c1aaf2a33dd33efb96a05f653bb0915 + languageName: node + linkType: hard + +"@metamask/object-multiplex@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/object-multiplex@npm:2.0.0" + dependencies: + once: "npm:^1.4.0" + readable-stream: "npm:^3.6.2" + checksum: 14786b8ec0668ff638ab5cb972d4141a70533452ec18f607f9002acddf547ab4548754948e0298978650f2f3be954d86882d9b0f6b134e0af2c522398594e499 + languageName: node + linkType: hard + +"@metamask/onboarding@npm:^1.0.1": + version: 1.0.1 + resolution: "@metamask/onboarding@npm:1.0.1" + dependencies: + bowser: "npm:^2.9.0" + checksum: 7a95eb47749217878a9e964c169a479a7532892d723eaade86c2e638e5ea5a54c697e0bbf68ab4f06dff5770639b9937da3375a3e8f958eae3f8da69f24031ed + languageName: node + linkType: hard + +"@metamask/providers@npm:^15.0.0": + version: 15.0.0 + resolution: "@metamask/providers@npm:15.0.0" + dependencies: + "@metamask/json-rpc-engine": "npm:^7.3.2" + "@metamask/json-rpc-middleware-stream": "npm:^6.0.2" + "@metamask/object-multiplex": "npm:^2.0.0" + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + detect-browser: "npm:^5.2.0" + extension-port-stream: "npm:^3.0.0" + fast-deep-equal: "npm:^3.1.3" + is-stream: "npm:^2.0.0" + readable-stream: "npm:^3.6.2" + webextension-polyfill: "npm:^0.10.0" + checksum: c079cb8440f7cbd8ba863070a8c5c1ada4ad99e31694ec7b0c537b1cb11e66f9d4271e737633ce89f98248208ba076bfc90ddab94ce0299178fdab9a8489fb09 + languageName: node + linkType: hard + "@metamask/rpc-errors@npm:^6.1.0": version: 6.1.0 resolution: "@metamask/rpc-errors@npm:6.1.0" @@ -4964,6 +5014,16 @@ __metadata: languageName: node linkType: hard +"@metamask/rpc-errors@npm:^6.2.1": + version: 6.2.1 + resolution: "@metamask/rpc-errors@npm:6.2.1" + dependencies: + "@metamask/utils": "npm:^8.3.0" + fast-safe-stringify: "npm:^2.0.6" + checksum: 512a312fa9962dbb0d0e165ffb17a1e65ade51148f8fd360846a7629269d35425388c4e08a8521177a412e8c2161cd04f8673959d65f4c5e1bb3ef258993b848 + languageName: node + linkType: hard + "@metamask/safe-event-emitter@npm:2.0.0, @metamask/safe-event-emitter@npm:^2.0.0": version: 2.0.0 resolution: "@metamask/safe-event-emitter@npm:2.0.0" @@ -4978,15 +5038,82 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^3.0.1": - version: 3.6.0 - resolution: "@metamask/utils@npm:3.6.0" +"@metamask/sdk-communication-layer@npm:0.20.2": + version: 0.20.2 + resolution: "@metamask/sdk-communication-layer@npm:0.20.2" dependencies: - "@types/debug": "npm:^4.1.7" + bufferutil: "npm:^4.0.8" + date-fns: "npm:^2.29.3" debug: "npm:^4.3.4" - semver: "npm:^7.3.8" - superstruct: "npm:^1.0.3" - checksum: 4efcdb04d65dabada1c6918a76a2b7ee226bea309a351670d46737e58bf8d9fb17dfe1b707eaee69f865ccc237dcd6df75b487ccdbe6dd77de52c4cd9ee08cf8 + utf-8-validate: "npm:^6.0.3" + uuid: "npm:^8.3.2" + peerDependencies: + cross-fetch: ^3.1.5 + eciesjs: ^0.3.16 + eventemitter2: ^6.4.7 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + checksum: d33e3b6958e889892f378a8d1e3eab9faded2e71f1f5d8eae9ba4f04dc5d196a7ce049b61ace31a7bd545222be8dd23733e09501ee1556d5178d3d1595ad5dca + languageName: node + linkType: hard + +"@metamask/sdk-install-modal-web@npm:0.20.2": + version: 0.20.2 + resolution: "@metamask/sdk-install-modal-web@npm:0.20.2" + dependencies: + qr-code-styling: "npm:^1.6.0-rc.1" + peerDependencies: + i18next: 22.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + react-i18next: ^13.2.2 + react-native: "*" + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + react-native: + optional: true + checksum: 6f9fc8182871623ef808e5e4a4ed838441b3944719bb27ad05704d89f3a1d3da8333bfc56e613eb3c26ca3a357e2188173ea26d596f79906aa0c564ce0c37a46 + languageName: node + linkType: hard + +"@metamask/sdk@npm:0.20.3": + version: 0.20.3 + resolution: "@metamask/sdk@npm:0.20.3" + dependencies: + "@metamask/onboarding": "npm:^1.0.1" + "@metamask/providers": "npm:^15.0.0" + "@metamask/sdk-communication-layer": "npm:0.20.2" + "@metamask/sdk-install-modal-web": "npm:0.20.2" + "@types/dom-screen-wake-lock": "npm:^1.0.0" + bowser: "npm:^2.9.0" + cross-fetch: "npm:^4.0.0" + debug: "npm:^4.3.4" + eciesjs: "npm:^0.3.15" + eth-rpc-errors: "npm:^4.0.3" + eventemitter2: "npm:^6.4.7" + i18next: "npm:22.5.1" + i18next-browser-languagedetector: "npm:7.1.0" + obj-multiplex: "npm:^1.0.0" + pump: "npm:^3.0.0" + qrcode-terminal-nooctal: "npm:^0.12.1" + react-native-webview: "npm:^11.26.0" + readable-stream: "npm:^3.6.2" + rollup-plugin-visualizer: "npm:^5.9.2" + socket.io-client: "npm:^4.5.1" + util: "npm:^0.12.4" + uuid: "npm:^8.3.2" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 4f0d80e373507f28029d0f87017887d520f0e7881d6a38e269221009c11b7a8cdfb5cff8c8e123ad3be630e9e8904147d2d7ee7ef4a8b9e2bd11b221dd26c89b languageName: node linkType: hard @@ -5019,6 +5146,23 @@ __metadata: languageName: node linkType: hard +"@metamask/utils@npm:^8.3.0": + version: 8.4.0 + resolution: "@metamask/utils@npm:8.4.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + superstruct: "npm:^1.0.3" + uuid: "npm:^9.0.1" + checksum: 4d45b6972fac10837e19f7cc9439bf016eef05c115f756f49ec696663c8bccc601da0a4b38aee66f1cc6a2d8795ce3879512e8d5142717f9fbd45c400d6500de + languageName: node + linkType: hard + "@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.16.3": version: 10.16.3 resolution: "@motionone/animation@npm:10.16.3" @@ -5133,7 +5277,7 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:1.2.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:~1.2.0": +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" dependencies: @@ -7268,27 +7412,17 @@ __metadata: languageName: node linkType: hard -"@safe-global/safe-apps-provider@npm:^0.17.1": - version: 0.17.1 - resolution: "@safe-global/safe-apps-provider@npm:0.17.1" +"@safe-global/safe-apps-provider@npm:0.18.1": + version: 0.18.1 + resolution: "@safe-global/safe-apps-provider@npm:0.18.1" dependencies: - "@safe-global/safe-apps-sdk": "npm:8.0.0" + "@safe-global/safe-apps-sdk": "npm:^8.1.0" events: "npm:^3.3.0" - checksum: cec18ade4630fbbee3a3fc39082a522b37f863461224e9dc9ba3858471bdb649c7e46cf07902d00fa8f638d30fb3d7cd2d4f5db89ac8d1cb41d6de51dd141625 + checksum: 9e6375132930cedd0935baa83cd026eb7c76776c7285edb3ff8c463ccf48d1e30cea03e93ce7199d3d3efa3cd035495e5f85fc361e203a2c03a4459d1989e726 languageName: node linkType: hard -"@safe-global/safe-apps-sdk@npm:8.0.0": - version: 8.0.0 - resolution: "@safe-global/safe-apps-sdk@npm:8.0.0" - dependencies: - "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" - viem: "npm:^1.0.0" - checksum: d8698518e0f386e444cae6115937f8c962839ee58a4dd3860ce0731c5c18928889bdcdbe68443edcc48fccc55776d90f47b1810833f9f71baac4a15491c2fc00 - languageName: node - linkType: hard - -"@safe-global/safe-apps-sdk@npm:^8.0.0": +"@safe-global/safe-apps-sdk@npm:8.1.0, @safe-global/safe-apps-sdk@npm:^8.1.0": version: 8.1.0 resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" dependencies: @@ -7409,35 +7543,10 @@ __metadata: languageName: node linkType: hard -"@solana/buffer-layout@npm:^4.0.0": - version: 4.0.1 - resolution: "@solana/buffer-layout@npm:4.0.1" - dependencies: - buffer: "npm:~6.0.3" - checksum: 6535f3908cf6dfc405b665795f0c2eaa0482a8c6b1811403945cf7b450e7eb7b40acce3e8af046f2fcc3eea1a15e61d48c418315d813bee4b720d56b00053305 - languageName: node - linkType: hard - -"@solana/web3.js@npm:^1.70.1": - version: 1.87.1 - resolution: "@solana/web3.js@npm:1.87.1" - dependencies: - "@babel/runtime": "npm:^7.22.6" - "@noble/curves": "npm:^1.2.0" - "@noble/hashes": "npm:^1.3.1" - "@solana/buffer-layout": "npm:^4.0.0" - agentkeepalive: "npm:^4.3.0" - bigint-buffer: "npm:^1.1.5" - bn.js: "npm:^5.2.1" - borsh: "npm:^0.7.0" - bs58: "npm:^4.0.1" - buffer: "npm:6.0.3" - fast-stable-stringify: "npm:^1.0.0" - jayson: "npm:^4.1.0" - node-fetch: "npm:^2.6.12" - rpc-websockets: "npm:^7.5.1" - superstruct: "npm:^0.14.2" - checksum: 193091f18f0a9e5047a27ae8b2b31e8bf687d886bda3310b229fa5bef9cfd903657a42647da7b52926c44beac741282f37e7663cbc96e8015888ab4532c6a41c +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.2 + resolution: "@socket.io/component-emitter@npm:3.1.2" + checksum: c4242bad66f67e6f7b712733d25b43cbb9e19a595c8701c3ad99cbeb5901555f78b095e24852f862fffb43e96f1d8552e62def885ca82ae1bb05da3668fd87d7 languageName: node linkType: hard @@ -7561,7 +7670,7 @@ __metadata: languageName: node linkType: hard -"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": +"@stablelib/random@npm:1.0.2, @stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": version: 1.0.2 resolution: "@stablelib/random@npm:1.0.2" dependencies: @@ -7600,7 +7709,7 @@ __metadata: languageName: node linkType: hard -"@stablelib/x25519@npm:^1.0.3": +"@stablelib/x25519@npm:1.0.3": version: 1.0.3 resolution: "@stablelib/x25519@npm:1.0.3" dependencies: @@ -8897,58 +9006,58 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.36.1": - version: 4.36.1 - resolution: "@tanstack/query-core@npm:4.36.1" - checksum: f286529dbd4c9cdb237ef0bfa72d785c74b5d0958290e8d85c343043ba7be4bbc6cb771167d8c13ca12bd4f37412a3d8b69331f57daa375b2071fd4752aed66a +"@tanstack/query-async-storage-persister@npm:^5.40.0": + version: 5.40.0 + resolution: "@tanstack/query-async-storage-persister@npm:5.40.0" + dependencies: + "@tanstack/query-persist-client-core": "npm:5.40.0" + checksum: 66cad23bc4e200bb51542be3d9e5d684d91eb568538c636a1d3532cace3204bbe155c4bf82d0fdb2615c09a551b4cdccd1b15d60c1848a79b6ae7dc424558eab languageName: node linkType: hard -"@tanstack/query-persist-client-core@npm:4.36.1": - version: 4.36.1 - resolution: "@tanstack/query-persist-client-core@npm:4.36.1" - dependencies: - "@tanstack/query-core": "npm:4.36.1" - checksum: e1c623cf1d43560fcf2f4f8489f8dbae35172c13d563da63c0db9e18937fb55f157a8b2c94011e30ffb1d6f2f40a1cb60dcebe2c9ef2931c0d2e5ca377a28cd8 +"@tanstack/query-core@npm:5.36.1": + version: 5.36.1 + resolution: "@tanstack/query-core@npm:5.36.1" + checksum: 53ba44c9934c99035122e586ae21bdc10a9978054d555f9608241c20b931c357eb60364e9d17adb1f30501494427bd63c00684923c8d08f41d41c5f346922d47 languageName: node linkType: hard -"@tanstack/query-sync-storage-persister@npm:^4.27.1": - version: 4.36.1 - resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" +"@tanstack/query-core@npm:5.40.0": + version: 5.40.0 + resolution: "@tanstack/query-core@npm:5.40.0" + checksum: 8ed200657dcdc1c05a44571be07e7a9d9a6c19c4ac067560bfb9d065a9cfb3e0dbbd0c44c17814272fd0b8d559030e9f4b50fb917c4312bbe61c9848767fde38 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:5.40.0": + version: 5.40.0 + resolution: "@tanstack/query-persist-client-core@npm:5.40.0" dependencies: - "@tanstack/query-persist-client-core": "npm:4.36.1" - checksum: ae2d71f59d57d07cf3f96402d01e3b51fa9516cb3e7f2a33787af8d3f8eb56d206b9ca474033afc72dd74badbf8773f8799ab757ace8577f446542407c2850d1 + "@tanstack/query-core": "npm:5.40.0" + checksum: 3d9b3affabebc0cb264bf1eb78e0619d02371f6efa793e30babb77d97816fb8b061ace2504c94e414cb8e34dff14b34a07d643bacfa112c8be39a83b2949c573 languageName: node linkType: hard -"@tanstack/react-query-persist-client@npm:^4.28.0": - version: 4.36.1 - resolution: "@tanstack/react-query-persist-client@npm:4.36.1" +"@tanstack/react-query-persist-client@npm:^5.40.0": + version: 5.40.0 + resolution: "@tanstack/react-query-persist-client@npm:5.40.0" dependencies: - "@tanstack/query-persist-client-core": "npm:4.36.1" + "@tanstack/query-persist-client-core": "npm:5.40.0" peerDependencies: - "@tanstack/react-query": ^4.36.1 - checksum: a4bdca1ac7d0852f28b3c00a8e5d061be9f54d0d81254cc006e165b86cc514af759f017261ad83f2c76cd404381223627f52e6def1d0814fd7da13fee14f64ff + "@tanstack/react-query": ^5.40.0 + react: ^18 || ^19 + checksum: 736f4be1f184fb559b0ca49614395d8d567afd17dbc322b813a14d9875b11c659488ab9f7ae324368d2a4d55f4fc60ce7f02935303973f72873ac98d21f28990 languageName: node linkType: hard -"@tanstack/react-query@npm:^4.28.0": - version: 4.36.1 - resolution: "@tanstack/react-query@npm:4.36.1" +"@tanstack/react-query@npm:5.37.1": + version: 5.37.1 + resolution: "@tanstack/react-query@npm:5.37.1" dependencies: - "@tanstack/query-core": "npm:4.36.1" - use-sync-external-store: "npm:^1.2.0" + "@tanstack/query-core": "npm:5.36.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: "*" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 15d9c98269d52fbdd49f4eb4b077b5d70346f904ea2ae51fd0400949d731afde658919a1143dd849fb50d4c5b6d0ab072e7b313a098ef316dd1c24089653f626 + react: ^18.0.0 + checksum: f0b33ec31c68bdc10f4aea9c3288ca969d77c57c87da7c77d0965fb9f82b5cb9d658868769fdaa3d4dc3deffd12b80c7debaa99cb702c52f41040fb7091162f7 languageName: node linkType: hard @@ -9113,15 +9222,6 @@ __metadata: languageName: node linkType: hard -"@types/connect@npm:^3.4.33": - version: 3.4.36 - resolution: "@types/connect@npm:3.4.36" - dependencies: - "@types/node": "npm:*" - checksum: 0dd8fcf576e178e69cbc00d47be69d3198dca4d86734a00fc55de0df147982e0a5f34592117571c5979e92ce8f3e0596e31aa454496db8a43ab90c5ab1068f40 - languageName: node - linkType: hard - "@types/cross-spawn@npm:^6.0.2": version: 6.0.2 resolution: "@types/cross-spawn@npm:6.0.2" @@ -9154,6 +9254,13 @@ __metadata: languageName: node linkType: hard +"@types/dom-screen-wake-lock@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/dom-screen-wake-lock@npm:1.0.3" + checksum: bab45f6a797de562f1bd3c095c49b7c0464ad05e571f38d00adaa35da2b02109bfe587206cc55f420377634cf0f7b07caa5acb3257e49dfd2d94dab74c617bf1 + languageName: node + linkType: hard + "@types/ejs@npm:^3.1.1": version: 3.1.2 resolution: "@types/ejs@npm:3.1.2" @@ -9378,7 +9485,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^12.12.54, @types/node@npm:^12.7.1": +"@types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" checksum: 3b190bb0410047d489c49bbaab592d2e6630de6a50f00ba3d7d513d59401d279972a8f5a598b5bb8ddc1702f8a2f4ec57a65d93852f9c329639738e7053637d1 @@ -9524,6 +9631,15 @@ __metadata: languageName: node linkType: hard +"@types/secp256k1@npm:^4.0.4": + version: 4.0.6 + resolution: "@types/secp256k1@npm:4.0.6" + dependencies: + "@types/node": "npm:*" + checksum: 0e391316ae30c218779583b626382a56546ddbefb65f1ff9cf5e078af8a7118f67f3e66e30914399cc6f8710c424d0d8c3f34262ffb1f429c6ad911fd0d0bc26 + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.4": version: 7.5.0 resolution: "@types/semver@npm:7.5.0" @@ -9594,15 +9710,6 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^7.4.4": - version: 7.4.7 - resolution: "@types/ws@npm:7.4.7" - dependencies: - "@types/node": "npm:*" - checksum: f1f53febd8623a85cef2652949acd19d83967e350ea15a851593e3033501750a1e04f418552e487db90a3d48611a1cff3ffcf139b94190c10f2fd1e1dc95ff10 - languageName: node - linkType: hard - "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -9799,119 +9906,70 @@ __metadata: languageName: node linkType: hard -"@wagmi/connectors@npm:3.1.5": - version: 3.1.5 - resolution: "@wagmi/connectors@npm:3.1.5" +"@wagmi/connectors@npm:5.0.6": + version: 5.0.6 + resolution: "@wagmi/connectors@npm:5.0.6" dependencies: - "@coinbase/wallet-sdk": "npm:^3.6.6" - "@ledgerhq/connect-kit-loader": "npm:^1.1.0" - "@safe-global/safe-apps-provider": "npm:^0.17.1" - "@safe-global/safe-apps-sdk": "npm:^8.0.0" - "@walletconnect/ethereum-provider": "npm:2.10.2" - "@walletconnect/legacy-provider": "npm:^2.0.0" + "@coinbase/wallet-sdk": "npm:4.0.2" + "@metamask/sdk": "npm:0.20.3" + "@safe-global/safe-apps-provider": "npm:0.18.1" + "@safe-global/safe-apps-sdk": "npm:8.1.0" + "@walletconnect/ethereum-provider": "npm:2.13.0" "@walletconnect/modal": "npm:2.6.2" - "@walletconnect/utils": "npm:2.10.2" - abitype: "npm:0.8.7" - eventemitter3: "npm:^4.0.7" + cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3" peerDependencies: + "@wagmi/core": 2.10.4 typescript: ">=5.0.4" - viem: ">=0.3.35" + viem: 2.x peerDependenciesMeta: typescript: optional: true - checksum: 88b56fc27d0209d38e7eaeb0dfdc7406c66f5ee70f928f2812beb06569aaf6350e19e856c728191f753bc00599a58ce85ea2f4afa301cf564d966c6e788e3cde + checksum: ef3857cc7d6da9102b7583a2e07dec1f211f33309ae181e90f3ca910a3beca04a0a4ba22336b86244ee247e9a0507389adf5b1c525c11a77c20f0315ea761958 languageName: node linkType: hard -"@wagmi/core@npm:1.4.7": - version: 1.4.7 - resolution: "@wagmi/core@npm:1.4.7" +"@wagmi/core@npm:2.10.4": + version: 2.10.4 + resolution: "@wagmi/core@npm:2.10.4" dependencies: - "@wagmi/connectors": "npm:3.1.5" - abitype: "npm:0.8.7" - eventemitter3: "npm:^4.0.7" - zustand: "npm:^4.3.1" + eventemitter3: "npm:5.0.1" + mipd: "npm:0.0.5" + zustand: "npm:4.4.1" peerDependencies: + "@tanstack/query-core": ">=5.0.0" typescript: ">=5.0.4" - viem: ">=0.3.35" + viem: 2.x peerDependenciesMeta: + "@tanstack/query-core": + optional: true typescript: optional: true - checksum: 08b0815b67fe2e32acf3d0743044a2fd03e81dd6f97261b6659e0d04f68738691e5e5a90db8eb683b742d8bb8f8bf4d702f2ee7a89c6b602c3ec15d8c025b6ff + checksum: d0bf53f344f9ef86a60f2072e58a0ab1220d484fd20d13b9c703d263c4dcf8b79677bb048e8186e53c5a120f7f4567ff3c3338f09df6893b13044372639c41bb languageName: node linkType: hard -"@walletconnect/core@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/core@npm:2.10.2" - dependencies: - "@walletconnect/heartbeat": "npm:1.2.1" - "@walletconnect/jsonrpc-provider": "npm:1.0.13" - "@walletconnect/jsonrpc-types": "npm:1.0.3" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/jsonrpc-ws-connection": "npm:1.0.13" - "@walletconnect/keyvaluestorage": "npm:^1.0.2" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/relay-api": "npm:^1.0.9" - "@walletconnect/relay-auth": "npm:^1.0.4" - "@walletconnect/safe-json": "npm:^1.0.2" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.10.2" - "@walletconnect/utils": "npm:2.10.2" - events: "npm:^3.3.0" - lodash.isequal: "npm:4.5.0" - uint8arrays: "npm:^3.1.0" - checksum: ff2051feadc328a6977f09acd6c5a5ded939c4b78ad0fecc22dd27391e6cc3857334d3359e9df795a8c2de3cea7bf1188e4fdd8e3e43dac3734b9d03ab4578dc - languageName: node - linkType: hard - -"@walletconnect/core@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/core@npm:2.11.1" +"@walletconnect/core@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/core@npm:2.13.0" dependencies: - "@walletconnect/heartbeat": "npm:1.2.1" - "@walletconnect/jsonrpc-provider": "npm:1.0.13" - "@walletconnect/jsonrpc-types": "npm:1.0.3" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" "@walletconnect/jsonrpc-utils": "npm:1.0.8" "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" - "@walletconnect/keyvaluestorage": "npm:^1.1.1" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/relay-api": "npm:^1.0.9" - "@walletconnect/relay-auth": "npm:^1.0.4" - "@walletconnect/safe-json": "npm:^1.0.2" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.11.1" - "@walletconnect/utils": "npm:2.11.1" - events: "npm:^3.3.0" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.10" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.0" + "@walletconnect/utils": "npm:2.13.0" + events: "npm:3.3.0" isomorphic-unfetch: "npm:3.1.0" lodash.isequal: "npm:4.5.0" - uint8arrays: "npm:^3.1.0" - checksum: 0f85627b6019143d1a5f96a3fefd613f387fa89609d37c66b185b67cfbc652abc28c61591b39ce673ab3fd51b331553f71216067d7ce1abfb5995f122ee0ec35 - languageName: node - linkType: hard - -"@walletconnect/crypto@npm:^1.0.3": - version: 1.0.3 - resolution: "@walletconnect/crypto@npm:1.0.3" - dependencies: - "@walletconnect/encoding": "npm:^1.0.2" - "@walletconnect/environment": "npm:^1.0.1" - "@walletconnect/randombytes": "npm:^1.0.3" - aes-js: "npm:^3.1.2" - hash.js: "npm:^1.1.7" - tslib: "npm:1.14.1" - checksum: dfe35bdafd28f48d1bdb5f4dc091da8361b1d8bef71c0ebc5f56e23363a4adc7d90215fbf6b90acb28634a05058bd0ff65d6dd48a92a6ab653cc8c847f5a7807 - languageName: node - linkType: hard - -"@walletconnect/encoding@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/encoding@npm:1.0.2" - dependencies: - is-typedarray: "npm:1.0.0" - tslib: "npm:1.14.1" - typedarray-to-buffer: "npm:3.1.5" - checksum: ee94e8486d71094e3d23d91c392460a1fcedaf7ac1d541f5c4b0472fbed170c1e0962e29eb7e1b72cd8aefa1332e7b88182ecbc0b3b32adfb3242dbce1c1b236 + uint8arrays: "npm:3.1.0" + checksum: e1356eb8ac94f8f6743814337607244557280d43a6e2ec14591beb21dca0e73cc79b16f0a2ace60ef447149778c5383a1fd4eac67788372d249c8c5f6d8c7dc2 languageName: node linkType: hard @@ -9924,47 +9982,25 @@ __metadata: languageName: node linkType: hard -"@walletconnect/ethereum-provider@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/ethereum-provider@npm:2.10.2" - dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" - "@walletconnect/jsonrpc-provider": "npm:^1.0.13" - "@walletconnect/jsonrpc-types": "npm:^1.0.3" - "@walletconnect/jsonrpc-utils": "npm:^1.0.8" - "@walletconnect/sign-client": "npm:2.10.2" - "@walletconnect/types": "npm:2.10.2" - "@walletconnect/universal-provider": "npm:2.10.2" - "@walletconnect/utils": "npm:2.10.2" - events: "npm:^3.3.0" - peerDependencies: - "@walletconnect/modal": ">=2" - peerDependenciesMeta: - "@walletconnect/modal": - optional: true - checksum: e482b56ea9c2685fd0ee43b7dce1e53e00af59ad28cdbeaa46187931fc5df4989b9541bdc2d6294778da4aefa5e5a06ab816f6d4cbad144526f3c3b3a2b424f6 - languageName: node - linkType: hard - -"@walletconnect/ethereum-provider@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/ethereum-provider@npm:2.11.1" +"@walletconnect/ethereum-provider@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/ethereum-provider@npm:2.13.0" dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" - "@walletconnect/jsonrpc-provider": "npm:^1.0.13" - "@walletconnect/jsonrpc-types": "npm:^1.0.3" - "@walletconnect/jsonrpc-utils": "npm:^1.0.8" - "@walletconnect/modal": "npm:^2.6.2" - "@walletconnect/sign-client": "npm:2.11.1" - "@walletconnect/types": "npm:2.11.1" - "@walletconnect/universal-provider": "npm:2.11.1" - "@walletconnect/utils": "npm:2.11.1" - events: "npm:^3.3.0" - checksum: af2d03ea00beea921c584e6e0de739ca8769d468ee6f10d1a73650da73dc9fc21d246438bd616098ae75363f86198cf4752ae2cf6e0332f2ae474ad3e632c9dd + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/modal": "npm:2.6.2" + "@walletconnect/sign-client": "npm:2.13.0" + "@walletconnect/types": "npm:2.13.0" + "@walletconnect/universal-provider": "npm:2.13.0" + "@walletconnect/utils": "npm:2.13.0" + events: "npm:3.3.0" + checksum: 4bc3c76b7a9e81ac505fcff99244bfa9f14419ee2de322e491dacd94669923adf5e9e1a2298ae84b33e3d5985a0bfab6b7715237e6f2ce23ec02c67dedb58898 languageName: node linkType: hard -"@walletconnect/events@npm:^1.0.1": +"@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/events@npm:1.0.1" dependencies: @@ -9974,41 +10010,51 @@ __metadata: languageName: node linkType: hard -"@walletconnect/heartbeat@npm:1.2.1": - version: 1.2.1 - resolution: "@walletconnect/heartbeat@npm:1.2.1" +"@walletconnect/heartbeat@npm:1.2.2": + version: 1.2.2 + resolution: "@walletconnect/heartbeat@npm:1.2.2" dependencies: "@walletconnect/events": "npm:^1.0.1" "@walletconnect/time": "npm:^1.0.2" - tslib: "npm:1.14.1" - checksum: 5ad46f26dcb7b9b3227f004cd74b18741d4cd32c21825a036eb03985c67a0cf859c285bc5635401966a99129e854d72de3458ff592370575ef7e52f5dd12ebbc + events: "npm:^3.3.0" + checksum: a97b07764c397fe3cd26e8ea4233ecc8a26049624df7edc05290d286266bc5ba1de740d12c50dc1b7e8605198c5974e34e2d5318087bd4e9db246e7b273f4592 languageName: node linkType: hard -"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": - version: 1.0.7 - resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" +"@walletconnect/jsonrpc-http-connection@npm:1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.8" dependencies: "@walletconnect/jsonrpc-utils": "npm:^1.0.6" "@walletconnect/safe-json": "npm:^1.0.1" cross-fetch: "npm:^3.1.4" - tslib: "npm:1.14.1" - checksum: 24272eca0d2b20397b2c83ecaac324cbc857fab4a4c2699332ea5c8b81096b1cf4a3c60f51c82ca9e98ab87a213c04bf047037478b089effabe0139005c71867 + events: "npm:^3.3.0" + checksum: cfac9ae74085d383ebc6edf075aeff01312818ac95e706cb8538ef4d4e6d82e75fb51529b3a9b65fa56a3f0f32a1738defad61713ed8a5f67cee25a79b6b4614 languageName: node linkType: hard -"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": - version: 1.0.13 - resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" +"@walletconnect/jsonrpc-provider@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.14" dependencies: "@walletconnect/jsonrpc-utils": "npm:^1.0.8" "@walletconnect/safe-json": "npm:^1.0.2" - tslib: "npm:1.14.1" - checksum: 9b5b2f0ce516d2ddebe2cd1a2c8ea18a6b765b0d068162caf39745c18534e264a0cc6198adb869ba8684d0efa563be30956a3b9a7cc82b80b9e263f6211e30ab + events: "npm:^3.3.0" + checksum: 9801bd516d81e92977b6add213da91e0e4a7a5915ad22685a4d2a733bab6199e9053485b76340cd724c7faa17a1b0eb842696247944fd57fb581488a2e1bed75 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.4": + version: 1.0.4 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.4" + dependencies: + events: "npm:^3.3.0" + keyvaluestorage-interface: "npm:^1.0.0" + checksum: 752978685b0596a4ba02e1b689d23873e464460e4f376c97ef63e6b3ab273658ca062de2bfcaa8a498d31db0c98be98c8bbfbe5142b256a4b3ef425e1707f353 languageName: node linkType: hard -"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": +"@walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": version: 1.0.3 resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" dependencies: @@ -10018,7 +10064,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": version: 1.0.8 resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" dependencies: @@ -10029,19 +10075,6 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-ws-connection@npm:1.0.13": - version: 1.0.13 - resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" - dependencies: - "@walletconnect/jsonrpc-utils": "npm:^1.0.6" - "@walletconnect/safe-json": "npm:^1.0.2" - events: "npm:^3.3.0" - tslib: "npm:1.14.1" - ws: "npm:^7.5.1" - checksum: afa2cd5647e97857f07a282d7466d3495e76abd0dfff46cd6fc36ca71c9f5a95ae1fae21fb7f0c49f881246d2b8a0e7dbc29f7fe58dbd34bd74fae9e6760c140 - languageName: node - linkType: hard - "@walletconnect/jsonrpc-ws-connection@npm:1.0.14": version: 1.0.14 resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" @@ -10054,25 +10087,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/keyvaluestorage@npm:^1.0.2": - version: 1.0.2 - resolution: "@walletconnect/keyvaluestorage@npm:1.0.2" - dependencies: - safe-json-utils: "npm:^1.1.1" - tslib: "npm:1.14.1" - peerDependencies: - "@react-native-async-storage/async-storage": 1.x - lokijs: 1.x - peerDependenciesMeta: - "@react-native-async-storage/async-storage": - optional: true - lokijs: - optional: true - checksum: efe91137856f6c6f8cd3ac41241fef3554618eb034924edf095942bfda983c32496ea402e0e7074d4a1b7b4e358d762c779dc3fdf4233fc9f4b3ac2dc99f0c17 - languageName: node - linkType: hard - -"@walletconnect/keyvaluestorage@npm:^1.1.1": +"@walletconnect/keyvaluestorage@npm:1.1.1": version: 1.1.1 resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" dependencies: @@ -10088,83 +10103,13 @@ __metadata: languageName: node linkType: hard -"@walletconnect/legacy-client@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-client@npm:2.0.0" - dependencies: - "@walletconnect/crypto": "npm:^1.0.3" - "@walletconnect/encoding": "npm:^1.0.2" - "@walletconnect/jsonrpc-utils": "npm:^1.0.4" - "@walletconnect/legacy-types": "npm:^2.0.0" - "@walletconnect/legacy-utils": "npm:^2.0.0" - "@walletconnect/safe-json": "npm:^1.0.1" - "@walletconnect/window-getters": "npm:^1.0.1" - "@walletconnect/window-metadata": "npm:^1.0.1" - detect-browser: "npm:^5.3.0" - query-string: "npm:^6.13.5" - checksum: 00820b607301d94385e631c2e039450bc72ae71943cb67d06125509c8e8039e275d605c4a3d0c10e94f847c03c8a6437aa86f945581c57e84571ff827062dc8b - languageName: node - linkType: hard - -"@walletconnect/legacy-modal@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-modal@npm:2.0.0" - dependencies: - "@walletconnect/legacy-types": "npm:^2.0.0" - "@walletconnect/legacy-utils": "npm:^2.0.0" - copy-to-clipboard: "npm:^3.3.3" - preact: "npm:^10.12.0" - qrcode: "npm:^1.5.1" - checksum: 92a35d6710e84ac2caa1dc540317d264ca3d612dde5b502de39ee27f3e27eb1d6a92c49e3cf20322c82366fd53cab87de197184ef6000b926d1a7ff724921693 - languageName: node - linkType: hard - -"@walletconnect/legacy-provider@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-provider@npm:2.0.0" - dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:^1.0.4" - "@walletconnect/jsonrpc-provider": "npm:^1.0.6" - "@walletconnect/legacy-client": "npm:^2.0.0" - "@walletconnect/legacy-modal": "npm:^2.0.0" - "@walletconnect/legacy-types": "npm:^2.0.0" - "@walletconnect/legacy-utils": "npm:^2.0.0" - checksum: 770f8998ccdceb3ed01afa9955c096467b58f138095d93e4bf6b70d3d7cb7a873786cf79c93cb706a5b7230627fca8999e779215478b3842f2814a85be13edf9 - languageName: node - linkType: hard - -"@walletconnect/legacy-types@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-types@npm:2.0.0" - dependencies: - "@walletconnect/jsonrpc-types": "npm:^1.0.2" - checksum: a115e4cc251d61ddc8c31c14ab9745248db68e4b36decf0e4d9d7e7de02ccb9d3e3a5dd55796f9531a17594c82dcdfd05d5bc1bc4d50f2a0e3f59b98c98b567d - languageName: node - linkType: hard - -"@walletconnect/legacy-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "@walletconnect/legacy-utils@npm:2.0.0" - dependencies: - "@walletconnect/encoding": "npm:^1.0.2" - "@walletconnect/jsonrpc-utils": "npm:^1.0.4" - "@walletconnect/legacy-types": "npm:^2.0.0" - "@walletconnect/safe-json": "npm:^1.0.1" - "@walletconnect/window-getters": "npm:^1.0.1" - "@walletconnect/window-metadata": "npm:^1.0.1" - detect-browser: "npm:^5.3.0" - query-string: "npm:^6.13.5" - checksum: 457312842a062f9f990dc16af4e84c012c5c39ed0e541a6b1337dcdb8631a2ddacd7790ad40d2f35ee81b158c4e69a4db5399b050cfd324e80450343eae9cdc7 - languageName: node - linkType: hard - -"@walletconnect/logger@npm:^2.0.1": - version: 2.0.1 - resolution: "@walletconnect/logger@npm:2.0.1" +"@walletconnect/logger@npm:2.1.2": + version: 2.1.2 + resolution: "@walletconnect/logger@npm:2.1.2" dependencies: + "@walletconnect/safe-json": "npm:^1.0.2" pino: "npm:7.11.0" - tslib: "npm:1.14.1" - checksum: 1778686f608f03bc8a67fb560a2694e8aef74b392811508e98cc158d1839a1bb0a0256eb2ed719c4ee17e65a11543ddc4f9059d3bdd5dddcca6359ba1bab18bd + checksum: c66e835d33f737f48d6269f151650f6d7bb85bd8b59580fb8116f94d460773820968026e666ddf4a1753f28fceb3c54aae8230a445108a116077cb13a293842f languageName: node linkType: hard @@ -10189,7 +10134,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/modal@npm:2.6.2, @walletconnect/modal@npm:^2.6.2": +"@walletconnect/modal@npm:2.6.2": version: 2.6.2 resolution: "@walletconnect/modal@npm:2.6.2" dependencies: @@ -10199,25 +10144,13 @@ __metadata: languageName: node linkType: hard -"@walletconnect/randombytes@npm:^1.0.3": - version: 1.0.3 - resolution: "@walletconnect/randombytes@npm:1.0.3" - dependencies: - "@walletconnect/encoding": "npm:^1.0.2" - "@walletconnect/environment": "npm:^1.0.1" - randombytes: "npm:^2.1.0" - tslib: "npm:1.14.1" - checksum: 3391eb97db9240479744f2de2c56c5cded6c11fa3a391dd6da6acf763cf62b77249396c538b51324ae1434b0914f765cbeea45db949ca97e6b132677c8a3b64d - languageName: node - linkType: hard - -"@walletconnect/react-native-compat@npm:2.10.5": - version: 2.10.5 - resolution: "@walletconnect/react-native-compat@npm:2.10.5" +"@walletconnect/react-native-compat@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/react-native-compat@npm:2.13.1" dependencies: events: "npm:3.3.0" - fast-text-encoding: "npm:^1.0.6" - react-native-url-polyfill: "npm:^2.0.0" + fast-text-encoding: "npm:1.0.6" + react-native-url-polyfill: "npm:2.0.0" peerDependencies: "@react-native-async-storage/async-storage": "*" "@react-native-community/netinfo": "*" @@ -10226,21 +10159,20 @@ __metadata: peerDependenciesMeta: expo-application: optional: true - checksum: cb8989442989ad216c72746c51f980e2b54d9e61198e7cbd8d2042347baa6fce20dc07e4782009183a2f03cff99e50b9612c9b289269bfe5bc12dfd7e161f47c + checksum: 0eaa413109b7098a3a6c038f6424151c4e995946fc38f7b8c3bfc37fd917a6bac2df06f5f1f6259dadcdf32b6c6fd331f50d1baa89d484c719ce8c4506616b11 languageName: node linkType: hard -"@walletconnect/relay-api@npm:^1.0.9": - version: 1.0.9 - resolution: "@walletconnect/relay-api@npm:1.0.9" +"@walletconnect/relay-api@npm:1.0.10": + version: 1.0.10 + resolution: "@walletconnect/relay-api@npm:1.0.10" dependencies: "@walletconnect/jsonrpc-types": "npm:^1.0.2" - tslib: "npm:1.14.1" - checksum: e5994c63619b89cae45428108857389536f3c7e43a92f324a8ef305f351cf125dcfafeb9c480f23798c162ca2cad7b8f91828bae28a84cf869c3e7ee1dcca9dd + checksum: 2709bbe45f60579cd2e1c74b0fd03c36ea409cd8a9117e00a7485428d0c9ba7eb02e525c21e5286db2b6ce563b1d29053b0249c2ed95f8adcf02b11e54f61fcd languageName: node linkType: hard -"@walletconnect/relay-auth@npm:^1.0.4": +"@walletconnect/relay-auth@npm:1.0.4": version: 1.0.4 resolution: "@walletconnect/relay-auth@npm:1.0.4" dependencies: @@ -10254,7 +10186,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": +"@walletconnect/safe-json@npm:1.0.2, @walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/safe-json@npm:1.0.2" dependencies: @@ -10263,41 +10195,24 @@ __metadata: languageName: node linkType: hard -"@walletconnect/sign-client@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/sign-client@npm:2.10.2" - dependencies: - "@walletconnect/core": "npm:2.10.2" - "@walletconnect/events": "npm:^1.0.1" - "@walletconnect/heartbeat": "npm:1.2.1" - "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.10.2" - "@walletconnect/utils": "npm:2.10.2" - events: "npm:^3.3.0" - checksum: aa450ec5fcff3e25f8d08ae068594bf6003be788dca7b91778edaf64bc8599219f7028802a5964f0c0a5234b80eb9c7c9f3198dae425da52d663a4ffb0171136 - languageName: node - linkType: hard - -"@walletconnect/sign-client@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/sign-client@npm:2.11.1" +"@walletconnect/sign-client@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/sign-client@npm:2.13.0" dependencies: - "@walletconnect/core": "npm:2.11.1" - "@walletconnect/events": "npm:^1.0.1" - "@walletconnect/heartbeat": "npm:1.2.1" + "@walletconnect/core": "npm:2.13.0" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" "@walletconnect/jsonrpc-utils": "npm:1.0.8" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.11.1" - "@walletconnect/utils": "npm:2.11.1" - events: "npm:^3.3.0" - checksum: d4ff52265069c4b4adbd2d6ef349425ada21d5a38b3bc1078af33c01f333d93f83e874b06c90514b869b99feb207e5bf71634f6fc8dd1281eb7ec313e544853b + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.0" + "@walletconnect/utils": "npm:2.13.0" + events: "npm:3.3.0" + checksum: 58c702997f719cab9b183d23c53efee561a3a407de24e464e339e350124a71eeccb1bd651f0893ad0f39343ce42a7ff3666bbd28cb8dfc6a0e8d12c94eacc288 languageName: node linkType: hard -"@walletconnect/time@npm:^1.0.2": +"@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/time@npm:1.0.2" dependencies: @@ -10306,113 +10221,60 @@ __metadata: languageName: node linkType: hard -"@walletconnect/types@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/types@npm:2.10.2" - dependencies: - "@walletconnect/events": "npm:^1.0.1" - "@walletconnect/heartbeat": "npm:1.2.1" - "@walletconnect/jsonrpc-types": "npm:1.0.3" - "@walletconnect/keyvaluestorage": "npm:^1.0.2" - "@walletconnect/logger": "npm:^2.0.1" - events: "npm:^3.3.0" - checksum: 339ff20dae3cf22b289b151ed899639d554ad3354d1baee15f5570bbd5ad5dd723d1be702d18bc302843eaad5e8809e217de18c590f90817c3fa0b65b8fbe0e1 - languageName: node - linkType: hard - -"@walletconnect/types@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/types@npm:2.11.1" - dependencies: - "@walletconnect/events": "npm:^1.0.1" - "@walletconnect/heartbeat": "npm:1.2.1" - "@walletconnect/jsonrpc-types": "npm:1.0.3" - "@walletconnect/keyvaluestorage": "npm:^1.1.1" - "@walletconnect/logger": "npm:^2.0.1" - events: "npm:^3.3.0" - checksum: 3fefd032886c90b4207474916d9d372ea4c0d8e33dd15547669b8f99dca6e95ac3a597442b0ee3c3af77f13e585d0cb54fdf5e382b08e0d3ed4a17d5b7db32f3 - languageName: node - linkType: hard - -"@walletconnect/universal-provider@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/universal-provider@npm:2.10.2" - dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" - "@walletconnect/jsonrpc-provider": "npm:1.0.13" - "@walletconnect/jsonrpc-types": "npm:^1.0.2" - "@walletconnect/jsonrpc-utils": "npm:^1.0.7" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/sign-client": "npm:2.10.2" - "@walletconnect/types": "npm:2.10.2" - "@walletconnect/utils": "npm:2.10.2" - events: "npm:^3.3.0" - checksum: a7b5fdbd328ca41677b17edba1c2a89910b6f9717919d815f31f2044d4c9662abf6437a313b0cabda5fe6956824aad5ebf0bd48b2deacccb32b06864aa8e709f - languageName: node - linkType: hard - -"@walletconnect/universal-provider@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/universal-provider@npm:2.11.1" +"@walletconnect/types@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/types@npm:2.13.0" dependencies: - "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" - "@walletconnect/jsonrpc-provider": "npm:1.0.13" - "@walletconnect/jsonrpc-types": "npm:^1.0.2" - "@walletconnect/jsonrpc-utils": "npm:^1.0.7" - "@walletconnect/logger": "npm:^2.0.1" - "@walletconnect/sign-client": "npm:2.11.1" - "@walletconnect/types": "npm:2.11.1" - "@walletconnect/utils": "npm:2.11.1" - events: "npm:^3.3.0" - checksum: e11c3dc828de7d3b3094148e46ec2cac84f2b4f479e62caaa64e044f04553bef5d9948e42571d13b8a7f451a5942969a1268557cff27aa35d372447d7c588a16 + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 9962284daf92d6b27a009b90b908518b3f028f10f2168ddbc37ad2cb2b20cb0e65d170aa4343e2ea445c519cf79e78264480e2b2c4ab9f974f2c15962db5b012 languageName: node linkType: hard -"@walletconnect/utils@npm:2.10.2": - version: 2.10.2 - resolution: "@walletconnect/utils@npm:2.10.2" +"@walletconnect/universal-provider@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/universal-provider@npm:2.13.0" dependencies: - "@stablelib/chacha20poly1305": "npm:1.0.1" - "@stablelib/hkdf": "npm:1.0.1" - "@stablelib/random": "npm:^1.0.2" - "@stablelib/sha256": "npm:1.0.1" - "@stablelib/x25519": "npm:^1.0.3" - "@walletconnect/relay-api": "npm:^1.0.9" - "@walletconnect/safe-json": "npm:^1.0.2" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.10.2" - "@walletconnect/window-getters": "npm:^1.0.1" - "@walletconnect/window-metadata": "npm:^1.0.1" - detect-browser: "npm:5.3.0" - query-string: "npm:7.1.3" - uint8arrays: "npm:^3.1.0" - checksum: f2efe4bf506b14d5f742dc28ad6aa7f67957016650e5bdf3d0c6480359940d216d979c6c46e12b796ed2a07bbb5b6bc7f73da5927af8c8c1672a631e09142171 + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/sign-client": "npm:2.13.0" + "@walletconnect/types": "npm:2.13.0" + "@walletconnect/utils": "npm:2.13.0" + events: "npm:3.3.0" + checksum: 79d14cdce74054859f26f69a17215c59367d961d0f36e7868601ed98030bd0636b3806dd68b76cc66ec4a70d5f6ec107fbe18bb6a1022a5161ea6d71810a0ed9 languageName: node linkType: hard -"@walletconnect/utils@npm:2.11.1": - version: 2.11.1 - resolution: "@walletconnect/utils@npm:2.11.1" +"@walletconnect/utils@npm:2.13.0": + version: 2.13.0 + resolution: "@walletconnect/utils@npm:2.13.0" dependencies: "@stablelib/chacha20poly1305": "npm:1.0.1" "@stablelib/hkdf": "npm:1.0.1" - "@stablelib/random": "npm:^1.0.2" + "@stablelib/random": "npm:1.0.2" "@stablelib/sha256": "npm:1.0.1" - "@stablelib/x25519": "npm:^1.0.3" - "@walletconnect/relay-api": "npm:^1.0.9" - "@walletconnect/safe-json": "npm:^1.0.2" - "@walletconnect/time": "npm:^1.0.2" - "@walletconnect/types": "npm:2.11.1" - "@walletconnect/window-getters": "npm:^1.0.1" - "@walletconnect/window-metadata": "npm:^1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/relay-api": "npm:1.0.10" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.0" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" detect-browser: "npm:5.3.0" query-string: "npm:7.1.3" - uint8arrays: "npm:^3.1.0" - checksum: b8e879c7a3e0f4fc498d1413d881092f6c0a13d16206a9a3cdbaa78334c5cb913a97f36b7f7f5c8aca3ac98162f5b8980445c0e8dca16d99dd9f4a66640b1fb3 + uint8arrays: "npm:3.1.0" + checksum: 2dbdb9ed790492411eb5c4e6b06aa511f6c0204c4ff283ecb5a4d339bb1bf3da033ef3a0c0af66b94df0553676f408222c2feca8c601b0554be2bbfbef43d6ec languageName: node linkType: hard -"@walletconnect/window-getters@npm:^1.0.1": +"@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/window-getters@npm:1.0.1" dependencies: @@ -10421,7 +10283,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/window-metadata@npm:^1.0.1": +"@walletconnect/window-metadata@npm:1.0.1": version: 1.0.1 resolution: "@walletconnect/window-metadata@npm:1.0.1" dependencies: @@ -10445,18 +10307,18 @@ __metadata: resolution: "@web3modal/coinbase-wagmi-react-native@workspace:packages/coinbase-wagmi" peerDependencies: "@coinbase/wallet-mobile-sdk": ">=1.0.10" - wagmi: ">=1 <2" + wagmi: ">=2" languageName: unknown linkType: soft -"@web3modal/core-react-native@npm:1.4.1, @web3modal/core-react-native@workspace:packages/core": +"@web3modal/core-react-native@npm:2.0.0-alpha.2, @web3modal/core-react-native@workspace:packages/core": version: 0.0.0-use.local resolution: "@web3modal/core-react-native@workspace:packages/core" dependencies: valtio: "npm:1.10.5" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" - "@walletconnect/react-native-compat": ">=2.10.5" + "@walletconnect/react-native-compat": ">=2.13.1" react: ">=17" react-native: ">=0.68.5" languageName: unknown @@ -10466,18 +10328,18 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/email-ethers-react-native@workspace:packages/email-ethers" dependencies: - "@web3modal/email-react-native": "npm:1.4.1" + "@web3modal/email-react-native": "npm:2.0.0-alpha.2" peerDependencies: ethers: ">=5" languageName: unknown linkType: soft -"@web3modal/email-react-native@npm:1.4.1, @web3modal/email-react-native@workspace:packages/email": +"@web3modal/email-react-native@npm:2.0.0-alpha.2, @web3modal/email-react-native@workspace:packages/email": version: 0.0.0-use.local resolution: "@web3modal/email-react-native@workspace:packages/email" dependencies: - "@web3modal/core-react-native": "npm:1.4.1" - "@web3modal/ui-react-native": "npm:1.4.1" + "@web3modal/core-react-native": "npm:2.0.0-alpha.2" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" zod: "npm:3.22.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10485,13 +10347,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/email-wagmi-react-native@npm:1.4.1, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": +"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.2, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": version: 0.0.0-use.local resolution: "@web3modal/email-wagmi-react-native@workspace:packages/email-wagmi" dependencies: - "@web3modal/email-react-native": "npm:1.4.1" + "@web3modal/email-react-native": "npm:2.0.0-alpha.2" peerDependencies: - wagmi: ">=1 <2" + wagmi: ">=2" languageName: unknown linkType: soft @@ -10499,13 +10361,14 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/ethers-react-native@workspace:packages/ethers" dependencies: - "@walletconnect/ethereum-provider": "npm:2.11.1" - "@web3modal/scaffold-react-native": "npm:1.4.1" - "@web3modal/scaffold-utils-react-native": "npm:1.4.1" + "@walletconnect/ethereum-provider": "npm:2.13.0" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" ethers: "npm:6.10.0" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" + "@walletconnect/react-native-compat": ">=2.13.1" ethers: ">=6.0.0" react: ">=17" react-native: ">=0.68.5" @@ -10518,14 +10381,15 @@ __metadata: resolution: "@web3modal/ethers5-react-native@workspace:packages/ethers5" dependencies: "@ethersproject/shims": "npm:5.7.0" - "@walletconnect/ethereum-provider": "npm:2.11.1" - "@web3modal/scaffold-react-native": "npm:1.4.1" - "@web3modal/scaffold-utils-react-native": "npm:1.4.1" + "@walletconnect/ethereum-provider": "npm:2.13.0" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" ethers: "npm:5.7.2" peerDependencies: "@ethersproject/shims": ">=5.0.0" "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" + "@walletconnect/react-native-compat": ">=2.13.1" ethers: ">=5.0.0 <6.0.0" react: ">=17" react-native: ">=0.68.5" @@ -10533,12 +10397,12 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-react-native@npm:1.4.1, @web3modal/scaffold-react-native@workspace:packages/scaffold": +"@web3modal/scaffold-react-native@npm:2.0.0-alpha.2, @web3modal/scaffold-react-native@workspace:packages/scaffold": version: 0.0.0-use.local resolution: "@web3modal/scaffold-react-native@workspace:packages/scaffold" dependencies: - "@web3modal/core-react-native": "npm:1.4.1" - "@web3modal/ui-react-native": "npm:1.4.1" + "@web3modal/core-react-native": "npm:2.0.0-alpha.2" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" peerDependencies: react: ">=17" react-native: ">=0.68.5" @@ -10546,15 +10410,15 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-utils-react-native@npm:1.4.1, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": +"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.2, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": version: 0.0.0-use.local resolution: "@web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils" dependencies: - "@web3modal/scaffold-react-native": "npm:1.4.1" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" languageName: unknown linkType: soft -"@web3modal/ui-react-native@npm:1.4.1, @web3modal/ui-react-native@workspace:packages/ui": +"@web3modal/ui-react-native@npm:2.0.0-alpha.2, @web3modal/ui-react-native@workspace:packages/ui": version: 0.0.0-use.local resolution: "@web3modal/ui-react-native@workspace:packages/ui" dependencies: @@ -10566,20 +10430,21 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/wagmi-react-native@npm:1.4.1, @web3modal/wagmi-react-native@workspace:packages/wagmi": +"@web3modal/wagmi-react-native@npm:2.0.0-alpha.2, @web3modal/wagmi-react-native@workspace:packages/wagmi": version: 0.0.0-use.local resolution: "@web3modal/wagmi-react-native@workspace:packages/wagmi" dependencies: - "@web3modal/scaffold-react-native": "npm:1.4.1" - "@web3modal/scaffold-utils-react-native": "npm:1.4.1" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" + "@walletconnect/react-native-compat": ">=2.13.1" react: ">=17" react-native: ">=0.68.5" react-native-get-random-values: "*" - viem: ">=1" - wagmi: ">=1" + viem: ">=2" + wagmi: ">=2" languageName: unknown linkType: soft @@ -10793,18 +10658,6 @@ __metadata: languageName: node linkType: hard -"JSONStream@npm:^1.3.5": - version: 1.3.5 - resolution: "JSONStream@npm:1.3.5" - dependencies: - jsonparse: "npm:^1.2.0" - through: "npm:>=2.2.7 <3" - bin: - JSONStream: ./bin.js - checksum: 0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 - languageName: node - linkType: hard - "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -10812,31 +10665,33 @@ __metadata: languageName: node linkType: hard -"abitype@npm:0.8.7": - version: 0.8.7 - resolution: "abitype@npm:0.8.7" +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" peerDependencies: typescript: ">=5.0.4" zod: ^3 >=3.19.1 peerDependenciesMeta: + typescript: + optional: true zod: optional: true - checksum: 94cc27cdd2398552285329b53aecc9777dfb9eca89c9615160c79a868e2417ddd331a5d49a6ce8f58c62b9e4026e8b0850e62a9aba960ae93b6a2b32f748a1d6 + checksum: ec559461d901d456820faf307e21b2c129583d44f4c68257ed9d0d44eae461114a7049046e715e069bc6fa70c410f644e06bdd2c798ac30d0ada794cd2a6c51e languageName: node linkType: hard -"abitype@npm:0.9.8": - version: 0.9.8 - resolution: "abitype@npm:0.9.8" +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" peerDependencies: typescript: ">=5.0.4" - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true zod: optional: true - checksum: ec559461d901d456820faf307e21b2c129583d44f4c68257ed9d0d44eae461114a7049046e715e069bc6fa70c410f644e06bdd2c798ac30d0ada794cd2a6c51e + checksum: d685351a725c49f81bdc588e2f3825c28ad96c59048d4f36bf5e4ef30935c31f7e60b5553c70177b77a9e4d8b04290eea43d3d9c1c2562cb130381c88b15d39f languageName: node linkType: hard @@ -10939,13 +10794,6 @@ __metadata: languageName: node linkType: hard -"aes-js@npm:^3.1.2": - version: 3.1.2 - resolution: "aes-js@npm:3.1.2" - checksum: 2568cc67af66fd9d41de25dc73d49ae810269c7648bbb1928b9f84d8fd6ddb4e39ed506d1be6794f5ffd567aadea75fc6895ef34d2b70b764f539f72a6a2baeb - languageName: node - linkType: hard - "agent-base@npm:5": version: 5.1.1 resolution: "agent-base@npm:5.1.1" @@ -10971,15 +10819,6 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.3.0": - version: 4.5.0 - resolution: "agentkeepalive@npm:4.5.0" - dependencies: - humanize-ms: "npm:^1.2.1" - checksum: 394ea19f9710f230722996e156607f48fdf3a345133b0b1823244b7989426c16019a428b56c82d3eabef616e938812981d9009f4792ecc66bd6a59e991c62612 - languageName: node - linkType: hard - "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -11769,15 +11608,6 @@ __metadata: languageName: node linkType: hard -"base-x@npm:^3.0.2": - version: 3.0.9 - resolution: "base-x@npm:3.0.9" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: e6bbeae30b24f748b546005affb710c5fbc8b11a83f6cd0ca999bd1ab7ad3a22e42888addc40cd145adc4edfe62fcfab4ebc91da22e4259aae441f95a77aee1a - languageName: node - linkType: hard - "base64-js@npm:^1.1.2, base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -11824,16 +11654,6 @@ __metadata: languageName: node linkType: hard -"bigint-buffer@npm:^1.1.5": - version: 1.1.5 - resolution: "bigint-buffer@npm:1.1.5" - dependencies: - bindings: "npm:^1.3.0" - node-gyp: "npm:latest" - checksum: aa41e53d38242a2f05f85b08eaf592635f92e5328822784cda518232b1644efdbf29ab3664951b174cc645848add4605488e25c9439bcc749660c885b4ff6118 - languageName: node - linkType: hard - "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -11841,22 +11661,6 @@ __metadata: languageName: node linkType: hard -"bind-decorator@npm:^1.0.11": - version: 1.0.11 - resolution: "bind-decorator@npm:1.0.11" - checksum: 265f1d5cc110075898b0c5f671bb06a05fb3193ee8899e4b66d48bc620248918cf24b14f798cf230ef717063458dc306dbf801268c45989f8546299a541a60fe - languageName: node - linkType: hard - -"bindings@npm:^1.3.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: "npm:1.0.0" - checksum: 3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba - languageName: node - linkType: hard - "bl@npm:^4.0.3, bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -11875,7 +11679,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:5.2.1, bn.js@npm:^5.1.1, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": +"bn.js@npm:5.2.1, bn.js@npm:^5.2.1": version: 5.2.1 resolution: "bn.js@npm:5.2.1" checksum: bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa @@ -11916,14 +11720,10 @@ __metadata: languageName: node linkType: hard -"borsh@npm:^0.7.0": - version: 0.7.0 - resolution: "borsh@npm:0.7.0" - dependencies: - bn.js: "npm:^5.2.0" - bs58: "npm:^4.0.0" - text-encoding-utf-8: "npm:^1.0.2" - checksum: 513b3e51823d2bf5be77cec27742419d2b0427504825dd7ceb00dedb820f246a4762f04b83d5e3aa39c8e075b3cbaeb7ca3c90bd1cbeecccb4a510575be8c581 +"bowser@npm:^2.9.0": + version: 2.11.0 + resolution: "bowser@npm:2.11.0" + checksum: 04efeecc7927a9ec33c667fa0965dea19f4ac60b3fea60793c2e6cf06c1dcd2f7ae1dbc656f450c5f50783b1c75cf9dc173ba6f3b7db2feee01f8c4b793e1bd3 languageName: node linkType: hard @@ -12074,15 +11874,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^4.0.0, bs58@npm:^4.0.1": - version: 4.0.1 - resolution: "bs58@npm:4.0.1" - dependencies: - base-x: "npm:^3.0.2" - checksum: 613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 - languageName: node - linkType: hard - "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -12130,7 +11921,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:6.0.3, buffer@npm:^6.0.3, buffer@npm:~6.0.3": +"buffer@npm:6.0.3, buffer@npm:^6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" dependencies: @@ -12150,13 +11941,13 @@ __metadata: languageName: node linkType: hard -"bufferutil@npm:^4.0.1": - version: 4.0.7 - resolution: "bufferutil@npm:4.0.7" +"bufferutil@npm:^4.0.8": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" dependencies: node-gyp: "npm:latest" node-gyp-build: "npm:^4.3.0" - checksum: 48d6cf98b9c227db65f0a1062b6c80e933c43dc03e0ad5f908da0e79cc87a633c215516f4d541ca9b0e09c1fb386f1bbe1fc2de913057f0201d14798d3e0c2bb + checksum: 36cdc5b53a38d9f61f89fdbe62029a2ebcd020599862253fefebe31566155726df9ff961f41b8c97b02b4c12b391ef97faf94e2383392654cf8f0ed68f76e47c languageName: node linkType: hard @@ -12349,6 +12140,23 @@ __metadata: languageName: node linkType: hard +"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": + version: 3.9.3 + resolution: "@coinbase/wallet-sdk@npm:3.9.3" + dependencies: + bn.js: "npm:^5.2.1" + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eth-block-tracker: "npm:^7.1.0" + eth-json-rpc-filters: "npm:^6.0.0" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: a34b7f3e84f1d12f8235d57b3fd2e06d04e9ad9d999944b43bf0a3b0e79bc1cff336e9097f4555f85e7085ac7a1be2907732cda6a79cad1b60521d996f390b99 + languageName: node + linkType: hard + "chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -12619,7 +12427,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.1.0, clsx@npm:^1.2.1": +"clsx@npm:^1.2.1": version: 1.2.1 resolution: "clsx@npm:1.2.1" checksum: 34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 @@ -12709,7 +12517,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3": +"commander@npm:^2.19.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 @@ -12899,15 +12707,6 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.3": - version: 3.3.3 - resolution: "copy-to-clipboard@npm:3.3.3" - dependencies: - toggle-selection: "npm:^1.0.6" - checksum: 3ebf5e8ee00601f8c440b83ec08d838e8eabb068c1fae94a9cda6b42f288f7e1b552f3463635f419af44bf7675afc8d0390d30876cf5c2d5d35f86d9c56a3e5f - languageName: node - linkType: hard - "core-js-compat@npm:^3.31.0": version: 3.32.0 resolution: "core-js-compat@npm:3.32.0" @@ -13007,6 +12806,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: "npm:^2.6.12" + checksum: 386727dc4c6b044746086aced959ff21101abb85c43df5e1d151547ccb6f338f86dec3f28b9dbddfa8ff5b9ec8662ed2263ad4607a93b2dc354fb7fe3bbb898a + languageName: node + linkType: hard + "cross-spawn@npm:^5.1.0": version: 5.1.0 resolution: "cross-spawn@npm:5.1.0" @@ -13196,6 +13004,15 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^2.29.3": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": "npm:^7.21.0" + checksum: e4b521fbf22bc8c3db332bbfb7b094fd3e7627de0259a9d17c7551e2d2702608a7307a449206065916538e384f37b181565447ce2637ae09828427aed9cb5581 + languageName: node + linkType: hard + "dayjs@npm:^1.8.15": version: 1.11.9 resolution: "dayjs@npm:1.11.9" @@ -13212,7 +13029,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -13250,7 +13067,7 @@ __metadata: languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": +"decode-uri-component@npm:^0.2.2": version: 0.2.2 resolution: "decode-uri-component@npm:0.2.2" checksum: 1f4fa54eb740414a816b3f6c24818fbfcabd74ac478391e9f4e2282c994127db02010ce804f3d08e38255493cfe68608b3f5c8e09fd6efc4ae46c807691f7a31 @@ -13429,13 +13246,6 @@ __metadata: languageName: node linkType: hard -"delay@npm:^5.0.0": - version: 5.0.0 - resolution: "delay@npm:5.0.0" - checksum: 01cdc4cd0cd35fb622518a3df848e67e09763a38e7cdada2232b6fda9ddda72eddcf74f0e24211200fbe718434f2335f2a2633875a6c96037fefa6de42896ad7 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -13507,7 +13317,7 @@ __metadata: languageName: node linkType: hard -"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": +"detect-browser@npm:5.3.0, detect-browser@npm:^5.2.0": version: 5.3.0 resolution: "detect-browser@npm:5.3.0" checksum: 88d49b70ce3836e7971345b2ebdd486ad0d457d1e4f066540d0c12f9210c8f731ccbed955fcc9af2f048f5d4629702a8e46bedf5bcad42ad49a3a0927bfd5a76 @@ -13775,6 +13585,17 @@ __metadata: languageName: node linkType: hard +"eciesjs@npm:^0.3.15": + version: 0.3.18 + resolution: "eciesjs@npm:0.3.18" + dependencies: + "@types/secp256k1": "npm:^4.0.4" + futoin-hkdf: "npm:^1.5.3" + secp256k1: "npm:^5.0.0" + checksum: 88e334b1fb8ae685eadf8023bc4a5c5247c1f7e6b873b8ba8ec84a3e7890352160ca7fcc1b78f75e67e04f2142310e89788a013fbb4f272f2130e76ada5050bc + languageName: node + linkType: hard + "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" @@ -13829,6 +13650,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.4": + version: 6.5.5 + resolution: "elliptic@npm:6.5.5" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 3e591e93783a1b66f234ebf5bd3a8a9a8e063a75073a35a671e03e3b25253b6e33ac121f7efe9b8808890fffb17b40596cc19d01e6e8d1fa13b9a56ff65597c8 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -13880,7 +13716,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.0, end-of-stream@npm:^1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -13900,6 +13736,26 @@ __metadata: languageName: node linkType: hard +"engine.io-client@npm:~6.5.2": + version: 6.5.3 + resolution: "engine.io-client@npm:6.5.3" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + engine.io-parser: "npm:~5.2.1" + ws: "npm:~8.11.0" + xmlhttprequest-ssl: "npm:~2.0.0" + checksum: 15d2136655972984012fe5c92446ff9939c08d872262bbb23cd54be1b66a00d489da93321cd01a8ad72eaf4022cfd73bdc8bccf32fa51c097a96c0b4c679cd7b + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.2.1": + version: 5.2.2 + resolution: "engine.io-parser@npm:5.2.2" + checksum: 38e71a92ed75e2873d4d9cfab7f889e4a3cfc939b689abd1045e1b2ef9f1a50d0350a2bef69f33d313c1aa626232702da5a9043a1038d76f5ecc0be440c648ab + languageName: node + linkType: hard + "enhanced-resolve@npm:^5.15.0": version: 5.15.0 resolution: "enhanced-resolve@npm:5.15.0" @@ -14164,22 +14020,6 @@ __metadata: languageName: node linkType: hard -"es6-promise@npm:^4.0.3": - version: 4.2.8 - resolution: "es6-promise@npm:4.2.8" - checksum: 2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 - languageName: node - linkType: hard - -"es6-promisify@npm:^5.0.0": - version: 5.0.0 - resolution: "es6-promisify@npm:5.0.0" - dependencies: - es6-promise: "npm:^4.0.3" - checksum: 23284c6a733cbf7842ec98f41eac742c9f288a78753c4fe46652bae826446ced7615b9e8a5c5f121a08812b1cd478ea58630f3e1c3d70835bd5dcd69c7cd75c9 - languageName: node - linkType: hard - "esbuild-plugin-alias@npm:^0.2.1": version: 0.2.1 resolution: "esbuild-plugin-alias@npm:0.2.1" @@ -14682,18 +14522,6 @@ __metadata: languageName: node linkType: hard -"eth-block-tracker@npm:6.1.0": - version: 6.1.0 - resolution: "eth-block-tracker@npm:6.1.0" - dependencies: - "@metamask/safe-event-emitter": "npm:^2.0.0" - "@metamask/utils": "npm:^3.0.1" - json-rpc-random-id: "npm:^1.0.1" - pify: "npm:^3.0.0" - checksum: 31cee76eeab18e68363aafbc1687f496f21e6e1a3aab9efe2582abc1885f77c37191006809f1819c81611019512375f9987f9fcae1ed4ac4650fb1582387fdcf - languageName: node - linkType: hard - "eth-block-tracker@npm:^7.1.0": version: 7.1.0 resolution: "eth-block-tracker@npm:7.1.0" @@ -14707,19 +14535,6 @@ __metadata: languageName: node linkType: hard -"eth-json-rpc-filters@npm:5.1.0": - version: 5.1.0 - resolution: "eth-json-rpc-filters@npm:5.1.0" - dependencies: - "@metamask/safe-event-emitter": "npm:^2.0.0" - async-mutex: "npm:^0.2.6" - eth-query: "npm:^2.1.2" - json-rpc-engine: "npm:^6.1.0" - pify: "npm:^5.0.0" - checksum: 70598749ed369e1ae2013d7f48421a82636f3dc803976f5e7a4a7109e8df6ef0532010a635645e5f83fa8ed8054b5338d4dbd4901d41392155eec91c69df5492 - languageName: node - linkType: hard - "eth-json-rpc-filters@npm:^6.0.0": version: 6.0.1 resolution: "eth-json-rpc-filters@npm:6.0.1" @@ -14743,16 +14558,7 @@ __metadata: languageName: node linkType: hard -"eth-rpc-errors@npm:4.0.2": - version: 4.0.2 - resolution: "eth-rpc-errors@npm:4.0.2" - dependencies: - fast-safe-stringify: "npm:^2.0.6" - checksum: e777788481945e7cfa1068bbf2e6368dfa2c65e0b8e50d15ea902369cc9509d7c157c8e384341ddfcd7e7d045a5f0d8e28cac7c6d0d4dffe94c35342e78f7e3f - languageName: node - linkType: hard - -"eth-rpc-errors@npm:4.0.3, eth-rpc-errors@npm:^4.0.2": +"eth-rpc-errors@npm:4.0.3, eth-rpc-errors@npm:^4.0.2, eth-rpc-errors@npm:^4.0.3": version: 4.0.3 resolution: "eth-rpc-errors@npm:4.0.3" dependencies: @@ -14833,14 +14639,14 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.7": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b +"eventemitter2@npm:^6.4.7": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: b2adf7d9f1544aa2d95ee271b0621acaf1e309d85ebcef1244fb0ebc7ab0afa6ffd5e371535d0981bc46195ad67fd6ff57a8d1db030584dee69aa5e371a27ea7 languageName: node linkType: hard -"eventemitter3@npm:^5.0.1": +"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1": version: 5.0.1 resolution: "eventemitter3@npm:5.0.1" checksum: 4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 @@ -15232,6 +15038,16 @@ __metadata: languageName: node linkType: hard +"extension-port-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "extension-port-stream@npm:3.0.0" + dependencies: + readable-stream: "npm:^3.6.2 || ^4.4.2" + webextension-polyfill: "npm:>=0.10.0 <1.0" + checksum: 5645ba63b8e77996b75a5aae5a37d169fef13b65d575fa72b0cf9199c7ecd46df7ef76fbf7d6384b375544e48eb2c8912b62200320ed2a5ef9526a00fcc148d9 + languageName: node + linkType: hard + "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -15257,13 +15073,6 @@ __metadata: languageName: node linkType: hard -"eyes@npm:^0.1.8": - version: 0.1.8 - resolution: "eyes@npm:0.1.8" - checksum: 4c79a9cbf45746d8c9f48cc957e35ad8ea336add1c7b8d5a0e002efc791a7a62b27b2188184ef1a1eea7bc3cd06b161791421e0e6c5fe78309705a162c53eea8 - languageName: node - linkType: hard - "fast-base64-decode@npm:^1.0.0": version: 1.0.0 resolution: "fast-base64-decode@npm:1.0.0" @@ -15340,14 +15149,7 @@ __metadata: languageName: node linkType: hard -"fast-stable-stringify@npm:^1.0.0": - version: 1.0.0 - resolution: "fast-stable-stringify@npm:1.0.0" - checksum: 1d773440c7a9615950577665074746c2e92edafceefa789616ecb6166229e0ccc6dae206ca9b9f7da0d274ba5779162aab2d07940a0f6e52a41a4e555392eb3b - languageName: node - linkType: hard - -"fast-text-encoding@npm:^1.0.6": +"fast-text-encoding@npm:1.0.6": version: 1.0.6 resolution: "fast-text-encoding@npm:1.0.6" checksum: e1d0381bda229c92c7906f63308f3b9caca8c78b732768b1ee16f560089ed21bc159bbe1434138ccd3815931ec8d4785bdade1ad1c45accfdf27ac6606ac67d2 @@ -15467,13 +15269,6 @@ __metadata: languageName: node linkType: hard -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: 3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 - languageName: node - linkType: hard - "filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -15929,6 +15724,13 @@ __metadata: languageName: node linkType: hard +"futoin-hkdf@npm:^1.5.3": + version: 1.5.3 + resolution: "futoin-hkdf@npm:1.5.3" + checksum: fe87b50d2ac125ca2074e92588ca1df5016e9657267363cb77d8287080639dc31f90e7740f4737aa054c3e687b2ab3456f9b5c55950b94cd2c2010bc441aa5ae + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -16385,7 +16187,7 @@ __metadata: languageName: node linkType: hard -"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": version: 1.1.7 resolution: "hash.js@npm:1.1.7" dependencies: @@ -16678,15 +16480,6 @@ __metadata: languageName: node linkType: hard -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: "npm:^2.0.0" - checksum: f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a - languageName: node - linkType: hard - "hyphenate-style-name@npm:^1.0.3": version: 1.0.4 resolution: "hyphenate-style-name@npm:1.0.4" @@ -16694,6 +16487,24 @@ __metadata: languageName: node linkType: hard +"i18next-browser-languagedetector@npm:7.1.0": + version: 7.1.0 + resolution: "i18next-browser-languagedetector@npm:7.1.0" + dependencies: + "@babel/runtime": "npm:^7.19.4" + checksum: d7cd0ea0ad6047e786de665d67b41cbb0940a2983eb2c53dd85a5d71f88e170550bba8de45728470a2b5f88060bed2c79f330aff9806dd50ef58ade0ec7b8ca3 + languageName: node + linkType: hard + +"i18next@npm:22.5.1": + version: 22.5.1 + resolution: "i18next@npm:22.5.1" + dependencies: + "@babel/runtime": "npm:^7.20.6" + checksum: a284f8d805ebad77114a830e60d5c59485a7f4d45179761f877249b63035572cff4103e5b4702669dff1a0e03b4e8b6df377bc871935f8215e43fd97e8e9e910 + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -16816,7 +16627,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.0.4": +"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": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -17358,13 +17169,6 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec - languageName: node - linkType: hard - "is-unc-path@npm:^1.0.0": version: 1.0.0 resolution: "is-unc-path@npm:1.0.0" @@ -17502,21 +17306,21 @@ __metadata: languageName: node linkType: hard -"isomorphic-ws@npm:^4.0.1": - version: 4.0.1 - resolution: "isomorphic-ws@npm:4.0.1" +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" peerDependencies: ws: "*" - checksum: 7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + checksum: adec15db704bb66615dd8ef33f889d41ae2a70866b21fa629855da98cc82a628ae072ee221fe9779a9a19866cad2a3e72593f2d161a0ce0e168b4484c7df9cd2 languageName: node linkType: hard -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" +"isows@npm:1.0.4": + version: 1.0.4 + resolution: "isows@npm:1.0.4" peerDependencies: ws: "*" - checksum: adec15db704bb66615dd8ef33f889d41ae2a70866b21fa629855da98cc82a628ae072ee221fe9779a9a19866cad2a3e72593f2d161a0ce0e168b4484c7df9cd2 + checksum: 46f43b07edcf148acba735ddfc6ed985e1e124446043ea32b71023e67671e46619c8818eda8c34a9ac91cb37c475af12a3aeeee676a88a0aceb5d67a3082313f languageName: node linkType: hard @@ -17625,28 +17429,6 @@ __metadata: languageName: node linkType: hard -"jayson@npm:^4.1.0": - version: 4.1.0 - resolution: "jayson@npm:4.1.0" - dependencies: - "@types/connect": "npm:^3.4.33" - "@types/node": "npm:^12.12.54" - "@types/ws": "npm:^7.4.4" - JSONStream: "npm:^1.3.5" - commander: "npm:^2.20.3" - delay: "npm:^5.0.0" - es6-promisify: "npm:^5.0.0" - eyes: "npm:^0.1.8" - isomorphic-ws: "npm:^4.0.1" - json-stringify-safe: "npm:^5.0.1" - uuid: "npm:^8.3.2" - ws: "npm:^7.4.5" - bin: - jayson: bin/jayson.js - checksum: 1b3a642eab65e7c07be45d6b9c08c1713348ed71454e37536f479400eb6c7257061fab74430d4677d1cedbed18db8fe8370202f0b52fac87d9c7af1140aa293d - languageName: node - linkType: hard - "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -18421,7 +18203,7 @@ __metadata: languageName: node linkType: hard -"json-rpc-engine@npm:6.1.0, json-rpc-engine@npm:^6.1.0": +"json-rpc-engine@npm:^6.1.0": version: 6.1.0 resolution: "json-rpc-engine@npm:6.1.0" dependencies: @@ -18475,13 +18257,6 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1": - version: 5.0.1 - resolution: "json-stringify-safe@npm:5.0.1" - checksum: 7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 - languageName: node - linkType: hard - "json5@npm:^2.1.1, json5@npm:^2.1.2, json5@npm:^2.2.1, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -18523,13 +18298,6 @@ __metadata: languageName: node linkType: hard -"jsonparse@npm:^1.2.0": - version: 1.3.1 - resolution: "jsonparse@npm:1.3.1" - checksum: 89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -18542,7 +18310,7 @@ __metadata: languageName: node linkType: hard -"keccak@npm:^3.0.1, keccak@npm:^3.0.3": +"keccak@npm:^3.0.3": version: 3.0.4 resolution: "keccak@npm:3.0.4" dependencies: @@ -20634,6 +20402,20 @@ __metadata: languageName: node linkType: hard +"mipd@npm:0.0.5": + version: 0.0.5 + resolution: "mipd@npm:0.0.5" + dependencies: + viem: "npm:^1.1.4" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 6b0a82cdc9eec5c12132b46422799cf536b1062b307a6aa0ce57ef240c56bd2dd231a5eda367c8a8962cbff73dd1af6131b8d769e3b47a06f0fc9d148b56f3dd + languageName: node + linkType: hard + "mixme@npm:^0.5.1": version: 0.5.9 resolution: "mixme@npm:0.5.9" @@ -20715,7 +20497,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -20860,6 +20642,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + "node-addon-api@npm:^7.0.0": version: 7.0.0 resolution: "node-addon-api@npm:7.0.0" @@ -21099,6 +20890,17 @@ __metadata: languageName: node linkType: hard +"obj-multiplex@npm:^1.0.0": + version: 1.0.0 + resolution: "obj-multiplex@npm:1.0.0" + dependencies: + end-of-stream: "npm:^1.4.0" + once: "npm:^1.4.0" + readable-stream: "npm:^2.3.3" + checksum: 914e979ab40fb26cbe4309a5fc1cc6b6a428aeff17a015b9abb1197894ee67f6f02542ffd76d8e275cc40b18adc125bff6e2d6b5090932798c135100c5942007 + languageName: node + linkType: hard + "object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -21961,13 +21763,6 @@ __metadata: languageName: node linkType: hard -"preact@npm:^10.12.0, preact@npm:^10.5.9": - version: 10.18.1 - resolution: "preact@npm:10.18.1" - checksum: b157c46d5dbece48cf0f31b0e24d27c989ea019e77730427b4c7549953da7de015b34f13f93d0034966f033738ec582829da918c28d084bbb31d59f320f56aa0 - languageName: node - linkType: hard - "preact@npm:^10.16.0": version: 10.19.3 resolution: "preact@npm:10.19.3" @@ -22282,6 +22077,31 @@ __metadata: languageName: node linkType: hard +"qr-code-styling@npm:^1.6.0-rc.1": + version: 1.6.0-rc.1 + resolution: "qr-code-styling@npm:1.6.0-rc.1" + dependencies: + qrcode-generator: "npm:^1.4.3" + checksum: d62f63ba800dbf7aa645816fca81c9be33d8561deac3686a00b93ce9f68f1784e2f65e59fdc7b1af22e20f37a47f35f8a0c2827043403bfc058b659a14fe02dd + languageName: node + linkType: hard + +"qrcode-generator@npm:^1.4.3": + version: 1.4.4 + resolution: "qrcode-generator@npm:1.4.4" + checksum: 3249fcff98cb9fa17c21329d3dfd895e294a2d6ea48161f7b377010779d41f0cd88668b7fb3478a659725061bb0a770b40a227c2f4853e8c4a6b947a9e8bf17a + languageName: node + linkType: hard + +"qrcode-terminal-nooctal@npm:^0.12.1": + version: 0.12.1 + resolution: "qrcode-terminal-nooctal@npm:0.12.1" + bin: + qrcode-terminal: bin/qrcode-terminal.js + checksum: a7e1ce29e4a4be633bbef6d55636da560e3e06d7507f2ec5e840f28d3dee5012d0d0c2cd810f8f8b018d08d47b0eb134177d799a7525a204ac82cbc8bd68cb50 + languageName: node + linkType: hard + "qrcode-terminal@npm:0.11.0": version: 0.11.0 resolution: "qrcode-terminal@npm:0.11.0" @@ -22291,7 +22111,7 @@ __metadata: languageName: node linkType: hard -"qrcode@npm:1.5.3, qrcode@npm:^1.5.1": +"qrcode@npm:1.5.3": version: 1.5.3 resolution: "qrcode@npm:1.5.3" dependencies: @@ -22314,7 +22134,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.0, qs@npm:^6.10.3, qs@npm:^6.11.0": +"qs@npm:^6.10.0, qs@npm:^6.11.0": version: 6.11.2 resolution: "qs@npm:6.11.2" dependencies: @@ -22335,18 +22155,6 @@ __metadata: languageName: node linkType: hard -"query-string@npm:^6.13.5": - version: 6.14.1 - resolution: "query-string@npm:6.14.1" - dependencies: - decode-uri-component: "npm:^0.2.0" - filter-obj: "npm:^1.1.0" - split-on-first: "npm:^1.0.0" - strict-uri-encode: "npm:^2.0.0" - checksum: 900e0fa788000e9dc5f929b6f4141742dcf281f02d3bab9714bc83bea65fab3de75169ea8d61f19cda996bc0dcec72e156efe3c5614c6bce65dcf234ac955b14 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -22686,7 +22494,7 @@ __metadata: languageName: node linkType: hard -"react-native-url-polyfill@npm:^2.0.0": +"react-native-url-polyfill@npm:2.0.0": version: 2.0.0 resolution: "react-native-url-polyfill@npm:2.0.0" dependencies: @@ -22729,6 +22537,19 @@ __metadata: languageName: node linkType: hard +"react-native-webview@npm:^11.26.0": + version: 11.26.1 + resolution: "react-native-webview@npm:11.26.1" + dependencies: + escape-string-regexp: "npm:2.0.0" + invariant: "npm:2.2.4" + peerDependencies: + react: "*" + react-native: "*" + checksum: 9399929f2b598a66634c4663fa7703144eeab10c7027f72de7e9af6da6d96f12ead1cc2fdbb09b9aab4d1410b0578d11aa5b7c3db70ffa92fb0329cf181099a5 + languageName: node + linkType: hard + "react-native@npm:*": version: 0.73.0 resolution: "react-native@npm:0.73.0" @@ -23066,7 +22887,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -23081,7 +22902,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -23092,6 +22913,19 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^3.6.2 || ^4.4.2": + version: 4.5.2 + resolution: "readable-stream@npm:4.5.2" + dependencies: + abort-controller: "npm:^3.0.0" + buffer: "npm:^6.0.3" + events: "npm:^3.3.0" + process: "npm:^0.11.10" + string_decoder: "npm:^1.3.0" + checksum: a2c80e0e53aabd91d7df0330929e32d0a73219f9477dbbb18472f6fdd6a11a699fc5d172a1beff98d50eae4f1496c950ffa85b7cc2c4c196963f289a5f39275d + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -23553,6 +23387,25 @@ __metadata: languageName: node linkType: hard +"rollup-plugin-visualizer@npm:^5.9.2": + version: 5.12.0 + resolution: "rollup-plugin-visualizer@npm:5.12.0" + dependencies: + open: "npm:^8.4.0" + picomatch: "npm:^2.3.1" + source-map: "npm:^0.7.4" + yargs: "npm:^17.5.1" + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + bin: + rollup-plugin-visualizer: dist/bin/cli.js + checksum: 0e44a641223377ebb472bb10f2b22efa773b5f6fbe8d54f197f07c68d7a432cbf00abad79a0aa1570f70c673c792f24700d926d663ed9a4d0ad8406ae5a0f4e4 + languageName: node + linkType: hard + "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." @@ -23568,7 +23421,7 @@ __metadata: "@types/qrcode": "npm:1.5.1" "@types/react": "npm:18.2.34" "@types/react-native": "npm:0.72.2" - "@walletconnect/react-native-compat": "npm:2.10.5" + "@walletconnect/react-native-compat": "npm:2.13.1" babel-jest: "npm:^29.7.0" eslint: "npm:^8.46.0" eslint-plugin-ft-flow: "npm:2.0.3" @@ -23587,30 +23440,11 @@ __metadata: tsconfig: "npm:*" turbo: "npm:1.10.15" typescript: "npm:5.2.2" - viem: "npm:1.19.3" - wagmi: "npm:1.4.7" + viem: "npm:2.13.1" + wagmi: "npm:2.9.7" languageName: unknown linkType: soft -"rpc-websockets@npm:^7.5.1": - version: 7.6.0 - resolution: "rpc-websockets@npm:7.6.0" - dependencies: - "@babel/runtime": "npm:^7.17.2" - bufferutil: "npm:^4.0.1" - eventemitter3: "npm:^4.0.7" - utf-8-validate: "npm:^5.0.2" - uuid: "npm:^8.3.2" - ws: "npm:^8.5.0" - dependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: dd8c8dc51dd2fc7d26483d1eada87b913fcdd60786635cd686582e3b14811f05418fc7b75e53768a486e3c5e37eb8f4eb5cdcd7c769473eb4625f404a62040bc - languageName: node - linkType: hard - "run-applescript@npm:^5.0.0": version: 5.0.0 resolution: "run-applescript@npm:5.0.0" @@ -23629,15 +23463,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.6.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - "safe-array-concat@npm:^1.0.0": version: 1.0.0 resolution: "safe-array-concat@npm:1.0.0" @@ -23683,13 +23508,6 @@ __metadata: languageName: node linkType: hard -"safe-json-utils@npm:^1.1.1": - version: 1.1.1 - resolution: "safe-json-utils@npm:1.1.1" - checksum: d2758b456dd2b388ef59ef254a7e677cb3ad382030d2949ee88c1af1ca5ead121f1b3dacc8035bafd4dfa6cdead6b80739fec793fe17e8e96105d9d220dbc88b - languageName: node - linkType: hard - "safe-regex-test@npm:^1.0.0": version: 1.0.0 resolution: "safe-regex-test@npm:1.0.0" @@ -23770,6 +23588,18 @@ __metadata: languageName: node linkType: hard +"secp256k1@npm:^5.0.0": + version: 5.0.0 + resolution: "secp256k1@npm:5.0.0" + dependencies: + elliptic: "npm:^6.5.4" + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + checksum: b9ab4c952babfe6103978b2f656265041ebe09b8a91b26a796cbcbe04d2252e28e12ec50d5ed3006bf2ca5feef6edcbd71c7c85122615f5ffbcd1acdd564f77f + languageName: node + linkType: hard + "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -24060,6 +23890,28 @@ __metadata: languageName: node linkType: hard +"socket.io-client@npm:^4.5.1": + version: 4.7.5 + resolution: "socket.io-client@npm:4.7.5" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.2" + engine.io-client: "npm:~6.5.2" + socket.io-parser: "npm:~4.2.4" + checksum: d5dc90ee63755fbbb0a1cb3faf575c9ce20d98e809a43a4c9c3ce03a56b8810335ae38e678ceb0650ac434d55e72ea6449c2e5d6db8bc7258f7c529148fac99d + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + checksum: 9383b30358fde4a801ea4ec5e6860915c0389a091321f1c1f41506618b5cf7cd685d0a31c587467a0c4ee99ef98c2b99fb87911f9dfb329716c43b587f29ca48 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.1": version: 8.0.2 resolution: "socks-proxy-agent@npm:8.0.2" @@ -24138,7 +23990,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.3": +"source-map@npm:^0.7.3, source-map@npm:^0.7.4": version: 0.7.4 resolution: "source-map@npm:0.7.4" checksum: dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc @@ -24325,16 +24177,6 @@ __metadata: languageName: node linkType: hard -"stream-browserify@npm:^3.0.0": - version: 3.0.0 - resolution: "stream-browserify@npm:3.0.0" - dependencies: - inherits: "npm:~2.0.4" - readable-stream: "npm:^3.5.0" - checksum: ec3b975a4e0aa4b3dc5e70ffae3fc8fd29ac725353a14e72f213dff477b00330140ad014b163a8cbb9922dfe90803f81a5ea2b269e1bbfd8bd71511b88f889ad - languageName: node - linkType: hard - "stream-buffers@npm:2.2.x": version: 2.2.0 resolution: "stream-buffers@npm:2.2.0" @@ -24486,7 +24328,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -24658,13 +24500,6 @@ __metadata: languageName: node linkType: hard -"superstruct@npm:^0.14.2": - version: 0.14.2 - resolution: "superstruct@npm:0.14.2" - checksum: e5518f6701524fb8cbae504a84dc9c304bf3fe01616230a5eb4e14af9bfc4e3518b94bfe457e57a5d1b99a2b54f82881b4a39e0b266caa6053f84aa294613b94 - languageName: node - linkType: hard - "superstruct@npm:^1.0.3": version: 1.0.3 resolution: "superstruct@npm:1.0.3" @@ -24952,13 +24787,6 @@ __metadata: languageName: node linkType: hard -"text-encoding-utf-8@npm:^1.0.2": - version: 1.0.2 - resolution: "text-encoding-utf-8@npm:1.0.2" - checksum: 87a64b394c850e8387c2ca7fc6929a26ce97fb598f1c55cd0fdaec4b8e2c3ed6770f65b2f3309c9175ef64ac5e403c8e48b53ceeb86d2897940c5e19cc00bb99 - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -25010,7 +24838,7 @@ __metadata: languageName: node linkType: hard -"through@npm:2, through@npm:>=2.2.7 <3": +"through@npm:2": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: 4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc @@ -25070,13 +24898,6 @@ __metadata: languageName: node linkType: hard -"toggle-selection@npm:^1.0.6": - version: 1.0.6 - resolution: "toggle-selection@npm:1.0.6" - checksum: f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -25202,7 +25023,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:1.14.1, tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0": +"tslib@npm:1.14.1, tslib@npm:^1.13.0, tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 @@ -25472,15 +25293,6 @@ __metadata: languageName: node linkType: hard -"typedarray-to-buffer@npm:3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: "npm:^1.0.0" - checksum: 4ac5b7a93d604edabf3ac58d3a2f7e07487e9f6e98195a080e81dbffdc4127817f470f219d794a843b87052cedef102b53ac9b539855380b8c2172054b7d5027 - languageName: node - linkType: hard - "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" @@ -25583,7 +25395,16 @@ __metadata: languageName: node linkType: hard -"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": +"uint8arrays@npm:3.1.0": + version: 3.1.0 + resolution: "uint8arrays@npm:3.1.0" + dependencies: + multiformats: "npm:^9.4.2" + checksum: e54e64593a76541330f0fea97b1b5dea6becbbec3572b9bb88863d064f2630bede4d42eafd457f19c6ef9125f50bfc61053d519c4d71b59c3b7566a0691e3ba2 + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0": version: 3.1.1 resolution: "uint8arrays@npm:3.1.1" dependencies: @@ -25972,7 +25793,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.0.0, use-sync-external-store@npm:^1.2.0": +"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.0.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" peerDependencies: @@ -25981,13 +25802,13 @@ __metadata: languageName: node linkType: hard -"utf-8-validate@npm:^5.0.2": - version: 5.0.10 - resolution: "utf-8-validate@npm:5.0.10" +"utf-8-validate@npm:^6.0.3": + version: 6.0.4 + resolution: "utf-8-validate@npm:6.0.4" dependencies: node-gyp: "npm:latest" node-gyp-build: "npm:^4.3.0" - checksum: 23cd6adc29e6901aa37ff97ce4b81be9238d0023c5e217515b34792f3c3edb01470c3bd6b264096dd73d0b01a1690b57468de3a24167dd83004ff71c51cc025f + checksum: f7042d94aec6ca02461b64e725bdc7262266610dbb787331e5bbd49374ef6f75fe9900600df3fc63d97906c23614a965c8989b4bf95d70bf35dc617da99215e7 languageName: node linkType: hard @@ -26061,6 +25882,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -26145,32 +25975,32 @@ __metadata: languageName: node linkType: hard -"viem@npm:1.19.3": - version: 1.19.3 - resolution: "viem@npm:1.19.3" +"viem@npm:2.13.1": + version: 2.13.1 + resolution: "viem@npm:2.13.1" dependencies: "@adraffy/ens-normalize": "npm:1.10.0" "@noble/curves": "npm:1.2.0" "@noble/hashes": "npm:1.3.2" "@scure/bip32": "npm:1.3.2" "@scure/bip39": "npm:1.2.1" - abitype: "npm:0.9.8" - isows: "npm:1.0.3" + abitype: "npm:1.0.0" + isows: "npm:1.0.4" ws: "npm:8.13.0" peerDependencies: typescript: ">=5.0.4" peerDependenciesMeta: typescript: optional: true - checksum: 3d9b5fc4f02a981bf88de5ad3c27b61b5597765132767f3f85e4564682303a6e6e31b5375d24e6eac97d345dfa608a793853c8e96a59808011caf4ba551514de + checksum: 215510e3e2a5c40df4b569adfb8c25694009bc09e43ef937cc53e89bcf83f898f0e115a9ebc5ffdf9715479c81d194599da05496008bbfbb327bdf75cac925d7 languageName: node linkType: hard -"viem@npm:^1.0.0": - version: 1.16.2 - resolution: "viem@npm:1.16.2" +"viem@npm:^1.0.0, viem@npm:^1.1.4": + version: 1.21.4 + resolution: "viem@npm:1.21.4" dependencies: - "@adraffy/ens-normalize": "npm:1.9.4" + "@adraffy/ens-normalize": "npm:1.10.0" "@noble/curves": "npm:1.2.0" "@noble/hashes": "npm:1.3.2" "@scure/bip32": "npm:1.3.2" @@ -26183,7 +26013,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: da928efbea6fc90bd8e3de0b59cd20ece7c4daf8c28bf62304774a3a99871e63301176a5414b746a878cdacc157c86396183b98ef9189c9897be57082a84e8bd + checksum: 8b29c790181e44c4c95b9ffed1a8c1b6c2396eb949b95697cc390ca8c49d88ef9e2cd56bd4800b90a9bbc93681ae8d63045fc6fa06e00d84f532bef77967e751 languageName: node linkType: hard @@ -26194,24 +26024,22 @@ __metadata: languageName: node linkType: hard -"wagmi@npm:1.4.7": - version: 1.4.7 - resolution: "wagmi@npm:1.4.7" +"wagmi@npm:2.9.7": + version: 2.9.7 + resolution: "wagmi@npm:2.9.7" dependencies: - "@tanstack/query-sync-storage-persister": "npm:^4.27.1" - "@tanstack/react-query": "npm:^4.28.0" - "@tanstack/react-query-persist-client": "npm:^4.28.0" - "@wagmi/core": "npm:1.4.7" - abitype: "npm:0.8.7" - use-sync-external-store: "npm:^1.2.0" + "@wagmi/connectors": "npm:5.0.6" + "@wagmi/core": "npm:2.10.4" + use-sync-external-store: "npm:1.2.0" peerDependencies: - react: ">=17.0.0" + "@tanstack/react-query": ">=5.0.0" + react: ">=18" typescript: ">=5.0.4" - viem: ">=0.3.35" + viem: 2.x peerDependenciesMeta: typescript: optional: true - checksum: f60f5ffd91bc1b2f932b22034cb607039e3237b0570745fa226952c7106cbebb6c835ba1f4046c33d709a19d10646b4e6e87c0896b1d728f5d3d3d963a814119 + checksum: 52f8ba882cb5ad791a3511e29d519cbbad6410d52fd536ede4efe09ce9d777de0089f2014aef624a954cd9412edb3cd25c4e4702369e04e085fef03d77a5a8e3 languageName: node linkType: hard @@ -26243,6 +26071,20 @@ __metadata: languageName: node linkType: hard +"webextension-polyfill@npm:>=0.10.0 <1.0": + version: 0.12.0 + resolution: "webextension-polyfill@npm:0.12.0" + checksum: 5ace2aaaf6a203515bdd2fb948622f186a5fbb50099b539ce9c0ad54896f9cc1fcc3c0e2a71d1f7071dd7236d7daebba1e0cbcf43bfdfe54361addf0333ee7d1 + languageName: node + linkType: hard + +"webextension-polyfill@npm:^0.10.0": + version: 0.10.0 + resolution: "webextension-polyfill@npm:0.10.0" + checksum: 6a45278f1fed8fbd5355f9b19a7b0b3fadc91fa3a6eef69125a1706bb3efa2181235eefbfb3f538443bb396cfcb97512361551888ce8465c08914431cb2d5b6d + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -26589,7 +26431,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7, ws@npm:^7.4.5, ws@npm:^7.5.1": +"ws@npm:^7, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -26604,18 +26446,18 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.5.0": - version: 8.14.2 - resolution: "ws@npm:8.14.2" +"ws@npm:~8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" + utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 35b4c2da048b8015c797fd14bcb5a5766216ce65c8a5965616a5440ca7b6c3681ee3cbd0ea0c184a59975556e9d58f2002abf8485a14d11d3371770811050a16 + checksum: b672b312f357afba8568b9dbb9e08b9e8a20845659b35fa6b340dc848efe371379f5e22bb1dc89c4b2940d5e2dc52dd1de85dde41776875fce115a448f94754f languageName: node linkType: hard @@ -26660,6 +26502,13 @@ __metadata: languageName: node linkType: hard +"xmlhttprequest-ssl@npm:~2.0.0": + version: 2.0.0 + resolution: "xmlhttprequest-ssl@npm:2.0.0" + checksum: b64ab371459bd5e3a4827e3c7535759047d285fd310aea6fd028973d547133f3be0d473c1fdae9f14d89bf509267759198ae1fbe89802079a7e217ddd990d734 + languageName: node + linkType: hard + "xtend@npm:^4.0.1, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -26827,19 +26676,22 @@ __metadata: languageName: node linkType: hard -"zustand@npm:^4.3.1": - version: 4.3.1 - resolution: "zustand@npm:4.3.1" +"zustand@npm:4.4.1": + version: 4.4.1 + resolution: "zustand@npm:4.4.1" dependencies: use-sync-external-store: "npm:1.2.0" peerDependencies: + "@types/react": ">=16.8" immer: ">=9.0" react: ">=16.8" peerDependenciesMeta: + "@types/react": + optional: true immer: optional: true react: optional: true - checksum: d51671c3724064ac7b2e122c23ada893d9ec81c7780b914b46164cddf6a1a1d51d1c283a7f890055d3c642a822aba8337c044e5c8af790c8fbe13be552fd0441 + checksum: c119273886e5cdbd7a9f80c9e0fee8a2c736bb6428e283b25c6dfd428789a95e10b6ed6b18553c955ce0d5dd62e2f4a84af3e2a41f31fdb34fd25462d2b19a8c languageName: node linkType: hard From 2de0079784105ba6c9b921e39641ae323572c045 Mon Sep 17 00:00:00 2001 From: Ignacio Santise Date: Thu, 6 Jun 2024 16:22:19 -0300 Subject: [PATCH 02/18] feat: One-Click Auth + SIWE (#168) --- .../composites/WalletImage.stories.tsx | 2 +- apps/native/App.tsx | 37 +---- apps/native/src/utils/SiweUtils.ts | 64 ++++++++ apps/native/src/utils/WagmiUtils.ts | 33 ++++ jest.config.ts | 4 +- package.json | 2 + packages/common/.eslintignore | 2 + packages/common/.eslintrc.json | 3 + packages/common/.npmignore | 10 ++ packages/common/bob.config.js | 14 ++ packages/common/package.json | 56 +++++++ packages/common/readme.md | 7 + packages/common/src/index.ts | 1 + packages/common/src/utils/NetworkUtil.ts | 5 + packages/common/tsconfig.json | 5 + .../src/controllers/ConnectionController.ts | 12 ++ .../core/src/controllers/OptionsController.ts | 5 + .../core/src/controllers/RouterController.ts | 13 +- packages/core/src/index.ts | 1 + packages/core/src/utils/CoreHelperUtil.ts | 8 +- packages/core/src/utils/RouterUtil.ts | 18 ++ packages/core/src/utils/StorageUtil.ts | 27 +++ packages/core/src/utils/TypeUtil.ts | 16 ++ packages/ethers/package.json | 6 +- packages/ethers/src/client.ts | 96 +++++++++-- packages/ethers5/package.json | 10 +- packages/ethers5/src/client.ts | 90 ++++++++-- .../scaffold-utils/src/utils/HelpersUtil.ts | 6 +- packages/scaffold/package.json | 1 + packages/scaffold/src/client.ts | 15 +- .../scaffold/src/modal/w3m-modal/index.tsx | 89 +++++++++- .../scaffold/src/modal/w3m-router/index.tsx | 3 + .../partials/w3m-connecting-mobile/index.tsx | 8 +- .../partials/w3m-connecting-qrcode/index.tsx | 34 +++- .../src/partials/w3m-connecting-web/index.tsx | 8 +- .../src/partials/w3m-header/index.tsx | 4 +- packages/scaffold/src/utils/UiUtil.ts | 25 +++ .../w3m-connecting-external-view/index.tsx | 33 ++-- .../src/views/w3m-connecting-view/index.tsx | 42 ++--- .../src/views/w3m-networks-view/index.tsx | 12 +- packages/siwe/.eslintrc.json | 3 + packages/siwe/.npmignore | 10 ++ packages/siwe/babel.config.js | 3 + packages/siwe/jest.config.ts | 5 + packages/siwe/package.json | 67 ++++++++ packages/siwe/readme.md | 7 + .../controllers/SIWEController.test.ts | 70 ++++++++ packages/siwe/src/client.ts | 133 +++++++++++++++ .../siwe/src/controller/SIWEController.ts | 154 ++++++++++++++++++ packages/siwe/src/helpers/index.ts | 33 ++++ packages/siwe/src/index.ts | 27 +++ .../partials/w3m-connecting-siwe/index.tsx | 100 ++++++++++++ .../partials/w3m-connecting-siwe/styles.ts | 24 +++ .../views/w3m-connecting-siwe-view/index.tsx | 95 +++++++++++ .../views/w3m-connecting-siwe-view/styles.ts | 18 ++ packages/siwe/src/utils/ConstantsUtil.ts | 3 + packages/siwe/src/utils/TypeUtils.ts | 86 ++++++++++ packages/siwe/tsconfig.json | 5 + .../components/wui-loading-spinner/index.tsx | 2 +- .../wui-loading-thumbnail/index.tsx | 2 +- .../ui/src/composites/wui-button/index.tsx | 28 ++-- .../ui/src/composites/wui-button/styles.ts | 11 +- .../src/composites/wui-wallet-image/index.tsx | 41 +++-- .../src/composites/wui-wallet-image/styles.ts | 5 + packages/ui/src/utils/ThemeUtil.ts | 3 +- packages/wagmi/package.json | 4 +- packages/wagmi/src/client.ts | 90 +++++++++- yarn.lock | 153 +++++++++++++++-- 68 files changed, 1822 insertions(+), 187 deletions(-) create mode 100644 apps/native/src/utils/SiweUtils.ts create mode 100644 apps/native/src/utils/WagmiUtils.ts create mode 100644 packages/common/.eslintignore create mode 100644 packages/common/.eslintrc.json create mode 100644 packages/common/.npmignore create mode 100644 packages/common/bob.config.js create mode 100644 packages/common/package.json create mode 100644 packages/common/readme.md create mode 100644 packages/common/src/index.ts create mode 100644 packages/common/src/utils/NetworkUtil.ts create mode 100644 packages/common/tsconfig.json create mode 100644 packages/core/src/utils/RouterUtil.ts create mode 100644 packages/siwe/.eslintrc.json create mode 100644 packages/siwe/.npmignore create mode 100644 packages/siwe/babel.config.js create mode 100644 packages/siwe/jest.config.ts create mode 100644 packages/siwe/package.json create mode 100644 packages/siwe/readme.md create mode 100644 packages/siwe/src/__tests__/controllers/SIWEController.test.ts create mode 100644 packages/siwe/src/client.ts create mode 100644 packages/siwe/src/controller/SIWEController.ts create mode 100644 packages/siwe/src/helpers/index.ts create mode 100644 packages/siwe/src/index.ts create mode 100644 packages/siwe/src/scaffold/partials/w3m-connecting-siwe/index.tsx create mode 100644 packages/siwe/src/scaffold/partials/w3m-connecting-siwe/styles.ts create mode 100644 packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/index.tsx create mode 100644 packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/styles.ts create mode 100644 packages/siwe/src/utils/ConstantsUtil.ts create mode 100644 packages/siwe/src/utils/TypeUtils.ts create mode 100644 packages/siwe/tsconfig.json diff --git a/apps/gallery/stories/composites/WalletImage.stories.tsx b/apps/gallery/stories/composites/WalletImage.stories.tsx index 4dda8546..2c5ad95d 100644 --- a/apps/gallery/stories/composites/WalletImage.stories.tsx +++ b/apps/gallery/stories/composites/WalletImage.stories.tsx @@ -11,7 +11,7 @@ const meta: Meta = { control: { type: 'text' } }, size: { - options: ['sm', 'md', 'lg'], + options: ['sm', 'md', 'lg', 'xl'], control: { type: 'select' } } }, diff --git a/apps/native/App.tsx b/apps/native/App.tsx index 1f1e2f3d..656da2c3 100644 --- a/apps/native/App.tsx +++ b/apps/native/App.tsx @@ -2,7 +2,7 @@ import { StyleSheet, View, useColorScheme } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import * as Clipboard from 'expo-clipboard'; import '@walletconnect/react-native-compat'; -import { CreateConfigParameters, WagmiProvider } from 'wagmi'; +import { WagmiProvider } from 'wagmi'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { @@ -15,43 +15,15 @@ import { import { emailConnector } from '@web3modal/email-wagmi-react-native'; -import { - arbitrum, - mainnet, - polygon, - avalanche, - bsc, - optimism, - gnosis, - zkSync, - zora, - base, - celo, - aurora, - sepolia -} from '@wagmi/core/chains'; +import { siweConfig } from './src/utils/SiweUtils'; + import { AccountView } from './src/views/AccountView'; import { ActionsView } from './src/views/ActionsView'; import { getCustomWallets } from './src/utils/misc'; +import { chains } from './src/utils/WagmiUtils'; const projectId = process.env.EXPO_PUBLIC_PROJECT_ID ?? ''; -const chains: CreateConfigParameters['chains'] = [ - mainnet, - polygon, - arbitrum, - avalanche, - bsc, - optimism, - gnosis, - zkSync, - zora, - base, - celo, - aurora, - sepolia -]; - const metadata = { name: 'Web3Modal RN', description: 'Web3Modal RN by WalletConnect', @@ -84,6 +56,7 @@ const customWallets = getCustomWallets(); createWeb3Modal({ projectId, wagmiConfig, + siweConfig, clipboardClient, customWallets, enableAnalytics: true, diff --git a/apps/native/src/utils/SiweUtils.ts b/apps/native/src/utils/SiweUtils.ts new file mode 100644 index 00000000..e086e999 --- /dev/null +++ b/apps/native/src/utils/SiweUtils.ts @@ -0,0 +1,64 @@ +import { + createSIWEConfig, + formatMessage, + type SIWEVerifyMessageArgs, + type SIWECreateMessageArgs +} from '@web3modal/siwe-react-native'; +import { chains } from './WagmiUtils'; + +export const siweConfig = createSIWEConfig({ + signOutOnAccountChange: false, + signOutOnNetworkChange: false, + // We don't require any async action to populate params but other apps might + + getMessageParams: async () => { + // Parameters to create the SIWE message internally. + // More info in https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-222.method + + return { + domain: 'com.walletconnect.web3modal.rnsample', //your bundle id or app id + uri: 'redirect://', // your redirect uri + chains: chains.map(chain => chain.id), + statement: 'Please sign with your account', + iat: new Date().toISOString() + }; + }, + createMessage: ({ address, ...args }: SIWECreateMessageArgs): string => { + // Method for generating an EIP-4361-compatible message. + return formatMessage(args, address); + }, + getNonce: async (): Promise => { + // The getNonce method functions as a safeguard + // against spoofing, akin to a CSRF token. + + const nonce = Math.floor(Math.random() * 1000000).toString(); + + return nonce; + }, + getSession: async () => { + // The backend session should store the associated address and chainId + // and return it via the `getSession` method. + + return Promise.resolve({ + address: '0x', + chainId: 1 + }); + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + verifyMessage: async ({ message, signature, cacao }: SIWEVerifyMessageArgs): Promise => { + // This function ensures the message is valid, + // has not been tampered with, and has been appropriately + // signed by the wallet address. + + return true; + }, + signOut: async (): Promise => { + // The users session must be destroyed when calling `signOut`. + + try { + return Promise.resolve(true); + } catch (error) { + return false; + } + } +}); diff --git a/apps/native/src/utils/WagmiUtils.ts b/apps/native/src/utils/WagmiUtils.ts new file mode 100644 index 00000000..c5803507 --- /dev/null +++ b/apps/native/src/utils/WagmiUtils.ts @@ -0,0 +1,33 @@ +import { CreateConfigParameters } from 'wagmi'; + +import { + arbitrum, + mainnet, + polygon, + avalanche, + bsc, + optimism, + gnosis, + zkSync, + zora, + base, + celo, + aurora, + sepolia +} from '@wagmi/core/chains'; + +export const chains: CreateConfigParameters['chains'] = [ + mainnet, + polygon, + avalanche, + arbitrum, + bsc, + optimism, + gnosis, + zkSync, + zora, + base, + celo, + aurora, + sepolia +]; diff --git a/jest.config.ts b/jest.config.ts index 2354ce6e..68ba6d00 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,6 +1,4 @@ module.exports = { preset: 'react-native', - modulePathIgnorePatterns: ['/node_modules', '/packages/*/lib/'], - coverageDirectory: '.qodana/code-coverage/', - coverageReporters: ['lcovonly'] + modulePathIgnorePatterns: ['/node_modules', '/lib/'] }; diff --git a/package.json b/package.json index 65c28a0e..c035b762 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,11 @@ "workspaces": [ "packages/core", "packages/ui", + "packages/common", "packages/email", "packages/scaffold-utils", "packages/scaffold", + "packages/siwe", "packages/wagmi", "packages/coinbase-wagmi", "packages/email-wagmi", diff --git a/packages/common/.eslintignore b/packages/common/.eslintignore new file mode 100644 index 00000000..c18ed016 --- /dev/null +++ b/packages/common/.eslintignore @@ -0,0 +1,2 @@ +node_modules/ +lib/ \ No newline at end of file diff --git a/packages/common/.eslintrc.json b/packages/common/.eslintrc.json new file mode 100644 index 00000000..b9233ee4 --- /dev/null +++ b/packages/common/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} diff --git a/packages/common/.npmignore b/packages/common/.npmignore new file mode 100644 index 00000000..e203f76a --- /dev/null +++ b/packages/common/.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/common/bob.config.js b/packages/common/bob.config.js new file mode 100644 index 00000000..b7ca0ad6 --- /dev/null +++ b/packages/common/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/common/package.json b/packages/common/package.json new file mode 100644 index 00000000..929777b4 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,56 @@ +{ + "name": "@web3modal/common-react-native", + "version": "2.0.0-alpha.2", + "main": "lib/commonjs/index.js", + "types": "lib/typescript/index.d.ts", + "module": "lib/module/index.js", + "source": "src/index.ts", + "scripts": { + "build": "bob build", + "clean": "rm -rf lib", + "test": "jest --passWithNoTests", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx" + }, + "files": [ + "src", + "lib" + ], + "keywords": [ + "web3", + "crypto", + "ethereum", + "web3modal", + "walletconnect", + "react-native" + ], + "repository": "https://github.com/WalletConnect/web3modal-react-native", + "author": "WalletConnect (https://web3modal.com)", + "homepage": "https://github.com/WalletConnect/web3modal-react-native", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/WalletConnect/web3modal-react-native/issues" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "react-native": "src/index.ts", + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + "commonjs", + "module", + [ + "typescript", + { + "tsc": "../../node_modules/.bin/tsc" + } + ] + ] + }, + "eslintIgnore": [ + "node_modules/", + "lib/" + ] +} diff --git a/packages/common/readme.md b/packages/common/readme.md new file mode 100644 index 00000000..c1bc48fd --- /dev/null +++ b/packages/common/readme.md @@ -0,0 +1,7 @@ +#### 🔎 [Examples](https://github.com/WalletConnect/react-native-examples) + +#### 🔗 [Website](https://web3modal.com) + +# Web3Modal + +Your on-ramp to web3 multichain. Web3Modal is a versatile library that makes it super easy to connect users with your Dapp and start interacting with the blockchain. diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 00000000..088d5213 --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1 @@ +export { NetworkUtil } from './utils/NetworkUtil'; diff --git a/packages/common/src/utils/NetworkUtil.ts b/packages/common/src/utils/NetworkUtil.ts new file mode 100644 index 00000000..32e7ba3c --- /dev/null +++ b/packages/common/src/utils/NetworkUtil.ts @@ -0,0 +1,5 @@ +export const NetworkUtil = { + caipNetworkIdToNumber(caipnetworkId?: `${string}:${string}`) { + return caipnetworkId ? Number(caipnetworkId.split(':')[1]) : undefined; + } +}; diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json new file mode 100644 index 00000000..02d8b10a --- /dev/null +++ b/packages/common/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src"], + "exclude": ["lib", "node_modules"] +} diff --git a/packages/core/src/controllers/ConnectionController.ts b/packages/core/src/controllers/ConnectionController.ts index d74d74c4..7ae80644 100644 --- a/packages/core/src/controllers/ConnectionController.ts +++ b/packages/core/src/controllers/ConnectionController.ts @@ -17,6 +17,7 @@ export interface ConnectExternalOptions { export interface ConnectionControllerClient { connectWalletConnect: (onUri: (uri: string) => void) => Promise; connectExternal?: (options: ConnectExternalOptions) => Promise; + signMessage: (message: string) => Promise; disconnect: () => Promise; } @@ -32,6 +33,7 @@ export interface ConnectionControllerState { wcError?: boolean; pressedWallet?: WcWallet; recentWallets?: WcWallet[]; + connectedWalletImageUrl?: string; } type StateKey = keyof ConnectionControllerState; @@ -79,14 +81,20 @@ export const ConnectionController = { StorageUtil.setConnectedConnector(options.type); }, + async signMessage(message: string) { + return this._getClient().signMessage(message); + }, + resetWcConnection() { state.wcUri = undefined; state.wcPairingExpiry = undefined; state.wcPromise = undefined; state.wcLinking = undefined; state.pressedWallet = undefined; + state.connectedWalletImageUrl = undefined; ConnectorController.setConnectedConnector(undefined); StorageUtil.removeWalletConnectDeepLink(); + StorageUtil.removeConnectedWalletImageUrl(); StorageUtil.removeConnectedConnector(); }, @@ -114,6 +122,10 @@ export const ConnectionController = { state.recentWallets = wallets; }, + async setConnectedWalletImageUrl(url: ConnectionControllerState['connectedWalletImageUrl']) { + state.connectedWalletImageUrl = url; + }, + async disconnect() { await this._getClient().disconnect(); this.resetWcConnection(); diff --git a/packages/core/src/controllers/OptionsController.ts b/packages/core/src/controllers/OptionsController.ts index 108c4338..018867c9 100644 --- a/packages/core/src/controllers/OptionsController.ts +++ b/packages/core/src/controllers/OptionsController.ts @@ -18,6 +18,7 @@ export interface OptionsControllerState { sdkType: string; sdkVersion: SdkVersion; metadata?: Metadata; + isSiweEnabled?: boolean; } // -- State --------------------------------------------- // @@ -71,6 +72,10 @@ export const OptionsController = { state.metadata = metadata; }, + setIsSiweEnabled(isSiweEnabled: OptionsControllerState['isSiweEnabled']) { + state.isSiweEnabled = isSiweEnabled; + }, + isClipboardAvailable() { return !!state._clipboardClient; }, diff --git a/packages/core/src/controllers/RouterController.ts b/packages/core/src/controllers/RouterController.ts index 6e2dad7a..9eecdd34 100644 --- a/packages/core/src/controllers/RouterController.ts +++ b/packages/core/src/controllers/RouterController.ts @@ -19,7 +19,8 @@ export interface RouterControllerState { | 'UpdateEmailWallet' | 'UpdateEmailPrimaryOtp' | 'UpdateEmailSecondaryOtp' - | 'UpgradeEmailWallet'; + | 'UpgradeEmailWallet' + | 'ConnectingSiwe'; history: RouterControllerState['view'][]; data?: { connector?: Connector; @@ -69,5 +70,15 @@ export const RouterController = { state.view = last; } } + }, + + goBackToIndex(historyIndex: number) { + if (state.history.length > 1) { + state.history = state.history.slice(0, historyIndex + 1); + const [last] = state.history.slice(-1); + if (last) { + state.view = last; + } + } } }; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 8a207146..26ce2152 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -52,5 +52,6 @@ export { ConstantsUtil } from './utils/ConstantsUtil'; export { CoreHelperUtil } from './utils/CoreHelperUtil'; export { StorageUtil } from './utils/StorageUtil'; export { EventUtil } from './utils/EventUtil'; +export { RouterUtil } from './utils/RouterUtil'; export type * from './utils/TypeUtil'; diff --git a/packages/core/src/utils/CoreHelperUtil.ts b/packages/core/src/utils/CoreHelperUtil.ts index c8d428f7..9a9e72a3 100644 --- a/packages/core/src/utils/CoreHelperUtil.ts +++ b/packages/core/src/utils/CoreHelperUtil.ts @@ -41,8 +41,12 @@ export const CoreHelperUtil = { return Date.now() + ConstantsUtil.FOUR_MINUTES_MS; }, - getPlainAddress(caipAddress: CaipAddress) { - return caipAddress.split(':')[2]; + getNetworkId(caipAddress: CaipAddress | undefined) { + return caipAddress?.split(':')[1]; + }, + + getPlainAddress(caipAddress: CaipAddress | undefined) { + return caipAddress?.split(':')[2]; }, async wait(milliseconds: number) { diff --git a/packages/core/src/utils/RouterUtil.ts b/packages/core/src/utils/RouterUtil.ts new file mode 100644 index 00000000..340b7b3d --- /dev/null +++ b/packages/core/src/utils/RouterUtil.ts @@ -0,0 +1,18 @@ +import { RouterController, type RouterControllerState } from '../controllers/RouterController'; +import { ModalController } from '../controllers/ModalController'; + +export const RouterUtil = { + navigateAfterNetworkSwitch(excludeViews: RouterControllerState['view'][] = []) { + if (excludeViews.includes(RouterController.state.view)) { + return; + } + + const { history } = RouterController.state; + const networkSelectIndex = history.findIndex(name => name === 'Networks'); + if (networkSelectIndex >= 1) { + RouterController.goBackToIndex(networkSelectIndex - 1); + } else { + ModalController.close(); + } + } +}; diff --git a/packages/core/src/utils/StorageUtil.ts b/packages/core/src/utils/StorageUtil.ts index 42eb251b..61df37af 100644 --- a/packages/core/src/utils/StorageUtil.ts +++ b/packages/core/src/utils/StorageUtil.ts @@ -5,6 +5,7 @@ import type { ConnectorType, WcWallet } from './TypeUtil'; // -- Helpers ----------------------------------------------------------------- const WC_DEEPLINK = 'WALLETCONNECT_DEEPLINK_CHOICE'; const W3M_RECENT = '@w3m/recent'; +const W3M_CONNECTED_WALLET_IMAGE_URL = '@w3m/connected_wallet_image_url'; const W3M_CONNECTED_CONNECTOR = '@w3m/connected_connector'; // -- Utility ----------------------------------------------------------------- @@ -99,5 +100,31 @@ export const StorageUtil = { } catch { console.info('Unable to remove Connected Connector'); } + }, + + async setConnectedWalletImageUrl(url: string) { + try { + await AsyncStorage.setItem(W3M_CONNECTED_WALLET_IMAGE_URL, url); + } catch { + console.info('Unable to set Connected Wallet Image URL'); + } + }, + + async getConnectedWalletImageUrl() { + try { + return await AsyncStorage.getItem(W3M_CONNECTED_WALLET_IMAGE_URL); + } catch { + console.info('Unable to get Connected Wallet Image URL'); + } + + return undefined; + }, + + async removeConnectedWalletImageUrl() { + try { + await AsyncStorage.removeItem(W3M_CONNECTED_WALLET_IMAGE_URL); + } catch { + console.info('Unable to remove Connected Wallet Image URL'); + } } }; diff --git a/packages/core/src/utils/TypeUtil.ts b/packages/core/src/utils/TypeUtil.ts index 6f62c632..5c714ee7 100644 --- a/packages/core/src/utils/TypeUtil.ts +++ b/packages/core/src/utils/TypeUtil.ts @@ -259,6 +259,22 @@ export type Event = | { type: 'track'; event: 'EMAIL_UPGRADE_FROM_MODAL'; + } + | { + type: 'track'; + event: 'CLICK_SIGN_SIWE_MESSAGE'; + } + | { + type: 'track'; + event: 'CLICK_CANCEL_SIWE'; + } + | { + type: 'track'; + event: 'SIWE_AUTH_SUCCESS'; + } + | { + type: 'track'; + event: 'SIWE_AUTH_ERROR'; }; // -- Email Types ------------------------------------------------ diff --git a/packages/ethers/package.json b/packages/ethers/package.json index b9ee6a97..3f598d86 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -38,9 +38,11 @@ "access": "public" }, "dependencies": { - "@walletconnect/ethereum-provider": "2.13.0", + "@walletconnect/ethereum-provider": "2.13.1", + "@web3modal/common-react-native": "2.0.0-alpha.2", "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", + "@web3modal/siwe-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts index 4aa5172b..c89fb060 100644 --- a/packages/ethers/src/client.ts +++ b/packages/ethers/src/client.ts @@ -1,4 +1,12 @@ -import { InfuraProvider, JsonRpcProvider, formatEther, getAddress } from 'ethers'; +import { + InfuraProvider, + JsonRpcProvider, + formatEther, + getAddress, + hexlify, + isHexString, + toUtf8Bytes +} from 'ethers'; import { type CaipAddress, type CaipNetwork, @@ -11,6 +19,7 @@ import { type Token, Web3ModalScaffold } from '@web3modal/scaffold-react-native'; +import { NetworkUtil } from '@web3modal/common-react-native'; import { ConstantsUtil, PresetsUtil, @@ -28,14 +37,16 @@ import { type CombinedProviderType, type W3mFrameProvider } from '@web3modal/scaffold-utils-react-native'; -import EthereumProvider from '@walletconnect/ethereum-provider'; +import EthereumProvider, { OPTIONAL_METHODS } from '@walletconnect/ethereum-provider'; import type { EthereumProviderOptions } from '@walletconnect/ethereum-provider'; import { getEmailCaipNetworks, getWalletConnectCaipNetworks } from './utils/helpers'; +import type { Web3ModalSIWEClient } from '@web3modal/siwe-react-native'; // -- Types --------------------------------------------------------------------- export interface Web3ModalClientOptions extends Omit { config: ProviderType; + siweConfig?: Web3ModalSIWEClient; chains: Chain[]; defaultChain?: Chain; chainImages?: Record; @@ -66,15 +77,23 @@ export class Web3Modal extends Web3ModalScaffold { private chains: Chain[]; - private metadata?: Metadata; + private metadata: Metadata; private options: Web3ModalClientOptions | undefined = undefined; private emailProvider?: W3mFrameProvider; public constructor(options: Web3ModalClientOptions) { - const { config, chains, defaultChain, tokens, chainImages, _sdkVersion, ...w3mOptions } = - options; + const { + config, + siweConfig, + chains, + defaultChain, + tokens, + chainImages, + _sdkVersion, + ...w3mOptions + } = options; if (!config) { throw new Error('web3modal:constructor - config is undefined'); @@ -86,7 +105,7 @@ export class Web3Modal extends Web3ModalScaffold { const networkControllerClient: NetworkControllerClient = { switchCaipNetwork: async caipNetwork => { - const chainId = HelpersUtil.caipNetworkIdToNumber(caipNetwork?.id); + const chainId = NetworkUtil.caipNetworkIdToNumber(caipNetwork?.id); if (chainId) { try { await this.switchNetwork(chainId); @@ -133,7 +152,55 @@ export class Web3Modal extends Web3ModalScaffold { onUri(uri); }); - await WalletConnectProvider.connect(); + // SIWE + const params = await siweConfig?.getMessageParams?.(); + if (siweConfig?.options?.enabled && params && Object.keys(params).length > 0) { + const { SIWEController, getDidChainId, getDidAddress } = await import( + '@web3modal/siwe-react-native' + ); + const result = await WalletConnectProvider.authenticate({ + nonce: await siweConfig.getNonce(), + methods: OPTIONAL_METHODS, + ...params + }); + // Auths is an array of signed CACAO objects https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-74.md + const signedCacao = result?.auths?.[0]; + if (signedCacao) { + const { p, s } = signedCacao; + const chainId = getDidChainId(p.iss); + const address = getDidAddress(p.iss); + if (address && chainId) { + SIWEController.setSession({ + address, + chainId: parseInt(chainId, 10) + }); + } + try { + // Kicks off verifyMessage and populates external states + const message = WalletConnectProvider.signer.client.formatAuthMessage({ + request: p, + iss: p.iss + }); + + await SIWEController.verifyMessage({ + message, + signature: s.s, + cacao: signedCacao + }); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error verifying message', error); + // eslint-disable-next-line no-console + await WalletConnectProvider.disconnect().catch(console.error); + // eslint-disable-next-line no-console + await SIWEController.signOut().catch(console.error); + throw error; + } + } + } else { + await WalletConnectProvider.connect(); + } + await this.setWalletConnectProvider(); }, @@ -163,6 +230,12 @@ export class Web3Modal extends Web3ModalScaffold { PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]; const emailType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.EMAIL_CONNECTOR_ID]; + + if (siweConfig?.options?.signOutOnDisconnect) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + await SIWEController.signOut(); + } + if (providerType === walletConnectType) { const WalletConnectProvider = provider; await (WalletConnectProvider as unknown as EthereumProvider).disconnect(); @@ -180,10 +253,10 @@ export class Web3Modal extends Web3ModalScaffold { if (!provider) { throw new Error('connectionControllerClient:signMessage - provider is undefined'); } - + const hexMessage = isHexString(message) ? message : hexlify(toUtf8Bytes(message)); const signature = await provider.request({ method: 'personal_sign', - params: [message, this.getAddress()] + params: [hexMessage, this.getAddress()] }); return signature as `0x${string}`; @@ -193,6 +266,7 @@ export class Web3Modal extends Web3ModalScaffold { super({ networkControllerClient, connectionControllerClient, + siweControllerClient: siweConfig, defaultChain: EthersHelpersUtil.getCaipDefaultChain(defaultChain), tokens: HelpersUtil.getCaipTokens(tokens), _sdkVersion: _sdkVersion ?? `react-native-ethers-${ConstantsUtil.VERSION}`, @@ -229,7 +303,7 @@ export class Web3Modal extends Web3ModalScaffold { return { ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }; } @@ -238,7 +312,7 @@ export class Web3Modal extends Web3ModalScaffold { return super.subscribeState(state => callback({ ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }) ); } diff --git a/packages/ethers5/package.json b/packages/ethers5/package.json index a6dd300a..7d12aa2f 100644 --- a/packages/ethers5/package.json +++ b/packages/ethers5/package.json @@ -38,22 +38,22 @@ "access": "public" }, "dependencies": { - "@walletconnect/ethereum-provider": "2.13.0", + "@walletconnect/ethereum-provider": "2.13.1", + "@web3modal/common-react-native": "2.0.0-alpha.2", "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", + "@web3modal/siwe-react-native": "2.0.0-alpha.2" }, "peerDependencies": { - "@ethersproject/shims": ">=5.0.0", "@react-native-async-storage/async-storage": ">=1.17.0", "@react-native-community/netinfo": "*", "@walletconnect/react-native-compat": ">=2.13.1", - "ethers": ">=5.0.0 <6.0.0", + "ethers": ">=5.7.2 <6.0.0", "react": ">=17", "react-native": ">=0.68.5", "react-native-get-random-values": "*" }, "devDependencies": { - "@ethersproject/shims": "5.7.0", "ethers": "5.7.2" }, "react-native": "src/index.tsx" diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts index e1261b1b..6c309f56 100644 --- a/packages/ethers5/src/client.ts +++ b/packages/ethers5/src/client.ts @@ -14,8 +14,8 @@ import { import { ConstantsUtil, PresetsUtil, - HelpersUtil, StorageUtil, + HelpersUtil, EthersConstantsUtil, EthersHelpersUtil, EthersStoreUtil, @@ -28,14 +28,17 @@ import { type CombinedProviderType, type W3mFrameProvider } from '@web3modal/scaffold-utils-react-native'; -import EthereumProvider from '@walletconnect/ethereum-provider'; +import { NetworkUtil } from '@web3modal/common-react-native'; +import EthereumProvider, { OPTIONAL_METHODS } from '@walletconnect/ethereum-provider'; import type { EthereumProviderOptions } from '@walletconnect/ethereum-provider'; import { getEmailCaipNetworks, getWalletConnectCaipNetworks } from './utils/helpers'; +import type { Web3ModalSIWEClient } from '@web3modal/siwe-react-native'; // -- Types --------------------------------------------------------------------- export interface Web3ModalClientOptions extends Omit { config: ProviderType; + siweConfig?: Web3ModalSIWEClient; chains: Chain[]; defaultChain?: Chain; chainImages?: Record; @@ -66,15 +69,23 @@ export class Web3Modal extends Web3ModalScaffold { private chains: Chain[]; - private metadata?: Metadata; + private metadata: Metadata; private options: Web3ModalClientOptions | undefined = undefined; private emailProvider?: W3mFrameProvider; public constructor(options: Web3ModalClientOptions) { - const { config, chains, defaultChain, tokens, chainImages, _sdkVersion, ...w3mOptions } = - options; + const { + config, + siweConfig, + chains, + defaultChain, + tokens, + chainImages, + _sdkVersion, + ...w3mOptions + } = options; if (!config) { throw new Error('web3modal:constructor - config is undefined'); @@ -86,7 +97,7 @@ export class Web3Modal extends Web3ModalScaffold { const networkControllerClient: NetworkControllerClient = { switchCaipNetwork: async caipNetwork => { - const chainId = HelpersUtil.caipNetworkIdToNumber(caipNetwork?.id); + const chainId = NetworkUtil.caipNetworkIdToNumber(caipNetwork?.id); if (chainId) { try { await this.switchNetwork(chainId); @@ -133,7 +144,56 @@ export class Web3Modal extends Web3ModalScaffold { onUri(uri); }); - await WalletConnectProvider.connect(); + // SIWE + const params = await siweConfig?.getMessageParams?.(); + if (siweConfig?.options?.enabled && params && Object.keys(params).length > 0) { + const { SIWEController, getDidChainId, getDidAddress } = await import( + '@web3modal/siwe-react-native' + ); + const result = await WalletConnectProvider.authenticate({ + nonce: await siweConfig.getNonce(), + methods: OPTIONAL_METHODS, + ...params + }); + // Auths is an array of signed CACAO objects https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-74.md + const signedCacao = result?.auths?.[0]; + if (signedCacao) { + const { p, s } = signedCacao; + const chainId = getDidChainId(p.iss); + const address = getDidAddress(p.iss); + if (address && chainId) { + SIWEController.setSession({ + address, + chainId: parseInt(chainId, 10) + }); + } + + try { + // Kicks off verifyMessage and populates external states + const message = WalletConnectProvider.signer.client.formatAuthMessage({ + request: p, + iss: p.iss + }); + + await SIWEController.verifyMessage({ + message, + signature: s.s, + cacao: signedCacao + }); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error verifying message', error); + // eslint-disable-next-line no-console + await WalletConnectProvider.disconnect().catch(console.error); + // eslint-disable-next-line no-console + await SIWEController.signOut().catch(console.error); + throw error; + } + } + } else { + await WalletConnectProvider.connect(); + } + await this.setWalletConnectProvider(); }, @@ -163,6 +223,11 @@ export class Web3Modal extends Web3ModalScaffold { PresetsUtil.ConnectorTypesMap[ConstantsUtil.WALLET_CONNECT_CONNECTOR_ID]; const emailType = PresetsUtil.ConnectorTypesMap[ConstantsUtil.EMAIL_CONNECTOR_ID]; + if (siweConfig?.options?.signOutOnDisconnect) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + await SIWEController.signOut(); + } + if (providerType === walletConnectType) { const WalletConnectProvider = provider; await (WalletConnectProvider as unknown as EthereumProvider).disconnect(); @@ -180,10 +245,12 @@ export class Web3Modal extends Web3ModalScaffold { if (!provider) { throw new Error('connectionControllerClient:signMessage - provider is undefined'); } - + const hexMessage = utils.isHexString(message) + ? message + : utils.hexlify(utils.toUtf8Bytes(message)); const signature = await provider.request({ method: 'personal_sign', - params: [message, this.getAddress()] + params: [hexMessage, this.getAddress()] }); return signature as `0x${string}`; @@ -193,6 +260,7 @@ export class Web3Modal extends Web3ModalScaffold { super({ networkControllerClient, connectionControllerClient, + siweControllerClient: siweConfig, defaultChain: EthersHelpersUtil.getCaipDefaultChain(defaultChain), tokens: HelpersUtil.getCaipTokens(tokens), _sdkVersion: _sdkVersion ?? `react-native-ethers5-${ConstantsUtil.VERSION}`, @@ -229,7 +297,7 @@ export class Web3Modal extends Web3ModalScaffold { return { ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }; } @@ -238,7 +306,7 @@ export class Web3Modal extends Web3ModalScaffold { return super.subscribeState(state => callback({ ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }) ); } diff --git a/packages/scaffold-utils/src/utils/HelpersUtil.ts b/packages/scaffold-utils/src/utils/HelpersUtil.ts index d4d72943..f675087b 100644 --- a/packages/scaffold-utils/src/utils/HelpersUtil.ts +++ b/packages/scaffold-utils/src/utils/HelpersUtil.ts @@ -1,11 +1,7 @@ -import type { CaipNetworkId, Tokens } from '@web3modal/scaffold-react-native'; +import type { Tokens } from '@web3modal/scaffold-react-native'; import { ConstantsUtil } from './ConstantsUtil'; export const HelpersUtil = { - caipNetworkIdToNumber(caipnetworkId?: CaipNetworkId) { - return caipnetworkId ? Number(caipnetworkId.split(':')[1]) : undefined; - }, - getCaipTokens(tokens?: Tokens) { if (!tokens) { return undefined; diff --git a/packages/scaffold/package.json b/packages/scaffold/package.json index 8fb24ab1..a191afc9 100644 --- a/packages/scaffold/package.json +++ b/packages/scaffold/package.json @@ -38,6 +38,7 @@ }, "dependencies": { "@web3modal/core-react-native": "2.0.0-alpha.2", + "@web3modal/siwe-react-native": "2.0.0-alpha.2", "@web3modal/ui-react-native": "2.0.0-alpha.2" }, "peerDependencies": { diff --git a/packages/scaffold/src/client.ts b/packages/scaffold/src/client.ts index 2e29b9bf..5cb6119d 100644 --- a/packages/scaffold/src/client.ts +++ b/packages/scaffold/src/client.ts @@ -15,6 +15,7 @@ import type { Connector, ConnectedWalletInfo } from '@web3modal/core-react-native'; +import type { SIWEControllerClient } from '@web3modal/siwe-react-native'; import { AccountController, BlockchainApiController, @@ -49,6 +50,7 @@ export interface LibraryOptions { export interface ScaffoldOptions extends LibraryOptions { networkControllerClient: NetworkControllerClient; connectionControllerClient: ConnectionControllerClient; + siweControllerClient?: SIWEControllerClient; } export interface OpenOptions { @@ -205,7 +207,7 @@ export class Web3ModalScaffold { }; // -- Private ------------------------------------------------------------------ - private initControllers(options: ScaffoldOptions) { + private async initControllers(options: ScaffoldOptions) { this.initAsyncValues(options); NetworkController.setClient(options.networkControllerClient); NetworkController.setDefaultCaipNetwork(options.defaultChain); @@ -234,10 +236,17 @@ export class Web3ModalScaffold { if (options.metadata) { OptionsController.setMetadata(options.metadata); } + + if (options.siweControllerClient) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + + SIWEController.setSIWEClient(options.siweControllerClient); + } } private async initRecentWallets(options: ScaffoldOptions) { const wallets = await StorageUtil.getRecentWallets(); + const connectedWalletImage = await StorageUtil.getConnectedWalletImageUrl(); const filteredWallets = wallets.filter(wallet => { const { includeWalletIds, excludeWalletIds } = options; @@ -252,6 +261,10 @@ export class Web3ModalScaffold { }); ConnectionController.setRecentWallets(filteredWallets); + + if (connectedWalletImage) { + ConnectionController.setConnectedWalletImageUrl(connectedWalletImage); + } } private async initConnectedConnector() { diff --git a/packages/scaffold/src/modal/w3m-modal/index.tsx b/packages/scaffold/src/modal/w3m-modal/index.tsx index 43d1ae81..697e942a 100644 --- a/packages/scaffold/src/modal/w3m-modal/index.tsx +++ b/packages/scaffold/src/modal/w3m-modal/index.tsx @@ -1,14 +1,19 @@ import { useSnapshot } from 'valtio'; -import { useEffect } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { useWindowDimensions, StatusBar } from 'react-native'; import Modal from 'react-native-modal'; import { Card } from '@web3modal/ui-react-native'; import { + AccountController, ApiController, + ConnectionController, ConnectorController, + CoreHelperUtil, EventsController, ModalController, + OptionsController, RouterController, + type CaipAddress, type W3mFrameProvider } from '@web3modal/core-react-native'; @@ -19,9 +24,12 @@ import { useCustomDimensions } from '../../hooks/useCustomDimensions'; import styles from './styles'; export function Web3Modal() { - const { open } = useSnapshot(ModalController.state); + const { open, loading } = useSnapshot(ModalController.state); const { history } = useSnapshot(RouterController.state); const { connectors } = useSnapshot(ConnectorController.state); + const { caipAddress, isConnected } = useSnapshot(AccountController.state); + const { isSiweEnabled } = OptionsController.state; + const [currentAddress, setCurrentAddress] = useState(caipAddress); const { height } = useWindowDimensions(); const { isLandscape } = useCustomDimensions(); const portraitHeight = height - 120; @@ -35,7 +43,7 @@ export function Web3Modal() { return RouterController.goBack(); } - return ModalController.close(); + return handleClose(); }; const prefetch = async () => { @@ -43,10 +51,84 @@ export function Web3Modal() { EventsController.sendEvent({ type: 'track', event: 'MODAL_LOADED' }); }; + const handleClose = async () => { + if (isSiweEnabled) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + + if (SIWEController.state.status !== 'success') { + await ConnectionController.disconnect(); + } + } + }; + + const onNewAddress = useCallback( + async (prevAddr?: CaipAddress, newAddr?: CaipAddress) => { + setCurrentAddress(newAddr); + + if (!prevAddr || !newAddr) { + return; + } + + if (isSiweEnabled) { + const previousAddress = CoreHelperUtil.getPlainAddress(prevAddr); + const newAddress = CoreHelperUtil.getPlainAddress(newAddr); + const previousNetworkId = CoreHelperUtil.getNetworkId(prevAddr); + const newNetworkId = CoreHelperUtil.getNetworkId(newAddr); + const { SIWEController } = await import('@web3modal/siwe-react-native'); + const session = await SIWEController.getSession(); + + // If the address has changed and signOnAccountChange is enabled, sign out + if (session && previousAddress && newAddress && previousAddress !== newAddress) { + if (SIWEController.state._client?.options.signOutOnAccountChange) { + await SIWEController.signOut(); + onSiweNavigation(); + } + + return; + } + + // If the network has changed and signOnNetworkChange is enabled, sign out + if (session && previousNetworkId && newNetworkId && previousNetworkId !== newNetworkId) { + if (SIWEController.state._client?.options.signOutOnNetworkChange) { + await SIWEController.signOut(); + onSiweNavigation(); + } + + return; + } + + // If it's connected but there's no session, show sign view + if (!session) { + onSiweNavigation(); + } + } + }, + [isSiweEnabled] + ); + + const onSiweNavigation = () => { + const { open: modalOpen } = ModalController.state; + if (modalOpen) { + RouterController.push('ConnectingSiwe'); + } else { + ModalController.open({ + view: 'ConnectingSiwe' + }); + } + }; + useEffect(() => { prefetch(); }, []); + useEffect(() => { + if (!isConnected || loading) { + return; + } + + onNewAddress(currentAddress, caipAddress); + }, [isConnected, loading, currentAddress, caipAddress, onNewAddress]); + return ( <> {hasEmail && EmailView && } @@ -57,6 +139,7 @@ export function Web3Modal() { statusBarTranslucent hideModalContentWhileAnimating propagateSwipe + onModalHide={handleClose} onBackdropPress={ModalController.close} onBackButtonPress={onBackButtonPress} > diff --git a/packages/scaffold/src/modal/w3m-router/index.tsx b/packages/scaffold/src/modal/w3m-router/index.tsx index 0ebaf776..fabe66c7 100644 --- a/packages/scaffold/src/modal/w3m-router/index.tsx +++ b/packages/scaffold/src/modal/w3m-router/index.tsx @@ -1,6 +1,7 @@ import { useLayoutEffect, useMemo } from 'react'; import { useSnapshot } from 'valtio'; import { RouterController } from '@web3modal/core-react-native'; +import { ConnectingSiweView } from '@web3modal/siwe-react-native'; import { ConnectView } from '../../views/w3m-connect-view'; import { AllWalletsView } from '../../views/w3m-all-wallets-view'; @@ -61,6 +62,8 @@ export function Web3Router() { return UpdateEmailSecondaryOtpView; case 'UpgradeEmailWallet': return UpgradeEmailWalletView; + case 'ConnectingSiwe': + return ConnectingSiweView; default: return ConnectView; } diff --git a/packages/scaffold/src/partials/w3m-connecting-mobile/index.tsx b/packages/scaffold/src/partials/w3m-connecting-mobile/index.tsx index d8617c90..573aa226 100644 --- a/packages/scaffold/src/partials/w3m-connecting-mobile/index.tsx +++ b/packages/scaffold/src/partials/w3m-connecting-mobile/index.tsx @@ -22,6 +22,7 @@ import { } from '@web3modal/ui-react-native'; import { useCustomDimensions } from '../../hooks/useCustomDimensions'; +import { UiUtil } from '../../utils/UiUtil'; import styles from './styles'; interface Props { @@ -62,11 +63,14 @@ export function ConnectingMobile({ onRetry, onCopyUri, isInstalled }: Props) { setLinkingError(false); ConnectionController.setWcError(false); const { redirect, href } = CoreHelperUtil.formatNativeUrl(mobile_link, wcUri); - ConnectionController.setWcLinking({ name, href }); + const wcLinking = { name, href }; + ConnectionController.setWcLinking(wcLinking); ConnectionController.setPressedWallet(data?.wallet); await Linking.openURL(redirect); await ConnectionController.state.wcPromise; + UiUtil.storeConnectedWallet(wcLinking, data?.wallet); + EventsController.sendEvent({ type: 'track', event: 'CONNECT_SUCCESS', @@ -170,7 +174,7 @@ export function ConnectingMobile({ onRetry, onCopyUri, isInstalled }: Props) { > diff --git a/packages/scaffold/src/partials/w3m-connecting-qrcode/index.tsx b/packages/scaffold/src/partials/w3m-connecting-qrcode/index.tsx index 722070e2..acd7d013 100644 --- a/packages/scaffold/src/partials/w3m-connecting-qrcode/index.tsx +++ b/packages/scaffold/src/partials/w3m-connecting-qrcode/index.tsx @@ -1,8 +1,13 @@ +import { useEffect } from 'react'; import { useSnapshot } from 'valtio'; import { + AssetUtil, ConnectionController, + ConnectorController, + EventsController, OptionsController, - SnackController + SnackController, + StorageUtil } from '@web3modal/core-react-native'; import { FlexView, Link, QrCode, Text, Spacing } from '@web3modal/ui-react-native'; import { useCustomDimensions } from '../../hooks/useCustomDimensions'; @@ -21,6 +26,33 @@ export function ConnectingQrCode() { } }; + const onConnect = async () => { + await ConnectionController.state.wcPromise; + + EventsController.sendEvent({ + type: 'track', + event: 'CONNECT_SUCCESS', + properties: { + method: 'qrcode', + name: 'WalletConnect' + } + }); + + const connectors = ConnectorController.state.connectors; + const connector = connectors.find(c => c.type === 'WALLET_CONNECT'); + const url = AssetUtil.getConnectorImage(connector); + if (url) { + StorageUtil.setConnectedWalletImageUrl(url); + ConnectionController.setConnectedWalletImageUrl(url); + } + }; + + useEffect(() => { + if (wcUri) { + onConnect(); + } + }, [wcUri]); + return ( void; @@ -37,11 +38,14 @@ export function ConnectingWeb({ onCopyUri }: ConnectingWebProps) { if (name && webapp_link && wcUri) { ConnectionController.setWcError(false); const { redirect, href } = CoreHelperUtil.formatUniversalUrl(webapp_link, wcUri); - ConnectionController.setWcLinking({ name, href }); + const wcLinking = { name, href }; + ConnectionController.setWcLinking(wcLinking); ConnectionController.setPressedWallet(data?.wallet); await Linking.openURL(redirect); await ConnectionController.state.wcPromise; + UiUtil.storeConnectedWallet(wcLinking, data?.wallet); + EventsController.sendEvent({ type: 'track', event: 'CONNECT_SUCCESS', @@ -84,7 +88,7 @@ export function ConnectingWeb({ onCopyUri }: ConnectingWebProps) { diff --git a/packages/scaffold/src/partials/w3m-header/index.tsx b/packages/scaffold/src/partials/w3m-header/index.tsx index c2f14f62..ec120b18 100644 --- a/packages/scaffold/src/partials/w3m-header/index.tsx +++ b/packages/scaffold/src/partials/w3m-header/index.tsx @@ -20,6 +20,7 @@ export function Header() { Account: undefined, ConnectingWalletConnect: walletName ?? 'WalletConnect', ConnectingExternal: connectorName ?? 'Connect wallet', + ConnectingSiwe: 'Sign In', Networks: 'Select network', SwitchNetwork: networkName ?? 'Switch network', AllWallets: 'All wallets', @@ -38,7 +39,8 @@ export function Header() { const header = headings()[view]; const dynamicButtonTemplate = () => { - const showBack = history.length > 1; + const hideBackViews = ['ConnectingSiwe']; + const showBack = history.length > 1 && !hideBackViews.includes(view); return showBack ? ( { LayoutAnimation.configureNext(LayoutAnimation.create(200, 'easeInEaseOut', 'opacity')); + }, + + storeConnectedWallet: async ( + wcLinking: { name: string; href: string }, + pressedWallet?: WcWallet + ) => { + StorageUtil.setWalletConnectDeepLink(wcLinking); + + if (pressedWallet) { + const recentWallets = await StorageUtil.setWeb3ModalRecent(pressedWallet); + if (recentWallets) { + ConnectionController.setRecentWallets(recentWallets); + } + const url = AssetUtil.getWalletImage(pressedWallet); + if (url) { + StorageUtil.setConnectedWalletImageUrl(url); + ConnectionController.setConnectedWalletImageUrl(url); + } + } } }; diff --git a/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx b/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx index 9f9c86e8..7b88dfb8 100644 --- a/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx +++ b/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx @@ -8,7 +8,8 @@ import { ConnectionController, ModalController, EventsController, - StorageUtil + StorageUtil, + type WcWallet } from '@web3modal/core-react-native'; import { Button, FlexView, LoadingThumbnail, Text, WalletImage } from '@web3modal/ui-react-native'; @@ -28,14 +29,24 @@ export function ConnectingExternalView() { setIsRetrying(true); }; - const storeDeeplink = useCallback(async () => { - if (data?.wallet) { - const recentWallets = await StorageUtil.setWeb3ModalRecent(data.wallet); - if (recentWallets) { - ConnectionController.setRecentWallets(recentWallets); + const storeConnectedWallet = useCallback( + async (wallet?: WcWallet) => { + if (wallet) { + const recentWallets = await StorageUtil.setWeb3ModalRecent(wallet); + if (recentWallets) { + ConnectionController.setRecentWallets(recentWallets); + } } - } - }, [data?.wallet]); + if (connector) { + const url = AssetUtil.getConnectorImage(connector); + if (url) { + StorageUtil.setConnectedWalletImageUrl(url); + ConnectionController.setConnectedWalletImageUrl(url); + } + } + }, + [connector] + ); const onConnect = useCallback(async () => { try { @@ -43,7 +54,7 @@ export function ConnectingExternalView() { setConnectionError(false); setInstalledError(false); await ConnectionController.connectExternal(connector); - storeDeeplink(); + storeConnectedWallet(data?.wallet); ModalController.close(); EventsController.sendEvent({ type: 'track', @@ -65,7 +76,7 @@ export function ConnectingExternalView() { properties: { message: (error as Error)?.message ?? 'Unknown' } }); } - }, [connector, storeDeeplink, data?.wallet]); + }, [connector, storeConnectedWallet, data?.wallet]); const textTemplate = () => { const connectorName = data?.connector?.name ?? 'Wallet'; @@ -151,7 +162,7 @@ export function ConnectingExternalView() { > diff --git a/packages/scaffold/src/views/w3m-connecting-view/index.tsx b/packages/scaffold/src/views/w3m-connecting-view/index.tsx index 399116b5..302ce2b5 100644 --- a/packages/scaffold/src/views/w3m-connecting-view/index.tsx +++ b/packages/scaffold/src/views/w3m-connecting-view/index.tsx @@ -8,7 +8,6 @@ import { ModalController, RouterController, SnackController, - StorageUtil, type Platform, OptionsController, ApiController, @@ -37,19 +36,17 @@ export function ConnectingView() { if (retry || CoreHelperUtil.isPairingExpired(wcPairingExpiry)) { ConnectionController.connectWalletConnect(); await ConnectionController.state.wcPromise; - storeWalletConnectDeeplink(); AccountController.setIsConnected(true); - ModalController.close(); - - if (!ConnectionController.state.wcLinking) { - EventsController.sendEvent({ - type: 'track', - event: 'CONNECT_SUCCESS', - properties: { - method: 'qrcode', - name: 'WalletConnect' - } - }); + + if (OptionsController.state.isSiweEnabled) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + if (SIWEController.state.status === 'success') { + ModalController.close(); + } else { + RouterController.push('ConnectingSiwe'); + } + } else { + ModalController.close(); } } } catch (error) { @@ -68,19 +65,6 @@ export function ConnectingView() { } }; - const storeWalletConnectDeeplink = async () => { - const { wcLinking, pressedWallet } = ConnectionController.state; - if (wcLinking) { - StorageUtil.setWalletConnectDeepLink(wcLinking); - } - if (pressedWallet) { - const recentWallets = await StorageUtil.setWeb3ModalRecent(pressedWallet); - if (recentWallets) { - ConnectionController.setRecentWallets(recentWallets); - } - } - }; - const onCopyUri = (uri?: string) => { if (OptionsController.isClipboardAvailable() && uri) { OptionsController.copyToClipboard(uri); @@ -104,6 +88,10 @@ export function ConnectingView() { }; const platformTemplate = () => { + if (isQr) { + return ; + } + switch (platform) { case 'mobile': return ( @@ -141,8 +129,6 @@ export function ConnectingView() { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - if (!data?.wallet) return ; - return ( <> {headerTemplate()} diff --git a/packages/scaffold/src/views/w3m-networks-view/index.tsx b/packages/scaffold/src/views/w3m-networks-view/index.tsx index 54d6682b..8d3e2971 100644 --- a/packages/scaffold/src/views/w3m-networks-view/index.tsx +++ b/packages/scaffold/src/views/w3m-networks-view/index.tsx @@ -16,8 +16,8 @@ import { RouterController, type CaipNetwork, AccountController, - ModalController, - EventsController + EventsController, + RouterUtil } from '@web3modal/core-react-native'; import { useCustomDimensions } from '../../hooks/useCustomDimensions'; import styles from './styles'; @@ -26,7 +26,6 @@ export function NetworksView() { const { isConnected } = useSnapshot(AccountController.state); const { caipNetwork, requestedCaipNetworks, approvedCaipNetworkIds, supportsAllNetworks } = useSnapshot(NetworkController.state); - const { history } = useSnapshot(RouterController.state); const imageHeaders = ApiController._getApiHeaders(); const { maxWidth: width, padding } = useCustomDimensions(); const numColumns = 4; @@ -60,11 +59,8 @@ export function NetworksView() { if (isConnected && caipNetwork?.id !== network.id) { if (approvedCaipNetworkIds?.includes(network.id)) { await NetworkController.switchActiveNetwork(network); - if (history.length > 1) { - RouterController.goBack(); - } else { - ModalController.close(); - } + RouterUtil.navigateAfterNetworkSwitch(['ConnectingSiwe']); + EventsController.sendEvent({ type: 'track', event: 'SWITCH_NETWORK', diff --git a/packages/siwe/.eslintrc.json b/packages/siwe/.eslintrc.json new file mode 100644 index 00000000..b9233ee4 --- /dev/null +++ b/packages/siwe/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["../../.eslintrc"] +} diff --git a/packages/siwe/.npmignore b/packages/siwe/.npmignore new file mode 100644 index 00000000..e203f76a --- /dev/null +++ b/packages/siwe/.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/siwe/babel.config.js b/packages/siwe/babel.config.js new file mode 100644 index 00000000..6403cbe5 --- /dev/null +++ b/packages/siwe/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'] +}; diff --git a/packages/siwe/jest.config.ts b/packages/siwe/jest.config.ts new file mode 100644 index 00000000..c25b8597 --- /dev/null +++ b/packages/siwe/jest.config.ts @@ -0,0 +1,5 @@ +const siweConfig = { + ...require('../../jest.config'), + setupFilesAfterEnv: ['../../jest-setup.ts'] +}; +module.exports = siweConfig; diff --git a/packages/siwe/package.json b/packages/siwe/package.json new file mode 100644 index 00000000..844fdc4b --- /dev/null +++ b/packages/siwe/package.json @@ -0,0 +1,67 @@ +{ + "name": "@web3modal/siwe-react-native", + "version": "2.0.0-alpha.2", + "main": "lib/commonjs/index.js", + "types": "lib/typescript/index.d.ts", + "module": "lib/module/index.js", + "source": "src/index.ts", + "scripts": { + "build": "bob build", + "clean": "rm -rf lib", + "test": "jest", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx" + }, + "files": [ + "src", + "lib", + "!**/__tests__", + "!**/__fixtures__", + "!**/__mocks__" + ], + "keywords": [ + "web3", + "crypto", + "ethereum", + "web3modal", + "walletconnect", + "react-native", + "siwe" + ], + "repository": "https://github.com/WalletConnect/web3modal-react-native", + "author": "WalletConnect (https://web3modal.com)", + "homepage": "https://github.com/WalletConnect/web3modal-react-native", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/WalletConnect/web3modal-react-native/issues" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "dependencies": { + "@walletconnect/utils": "2.13.1", + "@web3modal/common-react-native": "2.0.0-alpha.2", + "@web3modal/core-react-native": "2.0.0-alpha.2", + "@web3modal/ui-react-native": "2.0.0-alpha.2", + "valtio": "1.10.5" + }, + "react-native": "src/index.ts", + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + "commonjs", + "module", + [ + "typescript", + { + "tsc": "../../node_modules/.bin/tsc" + } + ] + ] + }, + "eslintIgnore": [ + "node_modules/", + "lib/" + ] +} diff --git a/packages/siwe/readme.md b/packages/siwe/readme.md new file mode 100644 index 00000000..c1bc48fd --- /dev/null +++ b/packages/siwe/readme.md @@ -0,0 +1,7 @@ +#### 🔎 [Examples](https://github.com/WalletConnect/react-native-examples) + +#### 🔗 [Website](https://web3modal.com) + +# Web3Modal + +Your on-ramp to web3 multichain. Web3Modal is a versatile library that makes it super easy to connect users with your Dapp and start interacting with the blockchain. diff --git a/packages/siwe/src/__tests__/controllers/SIWEController.test.ts b/packages/siwe/src/__tests__/controllers/SIWEController.test.ts new file mode 100644 index 00000000..e5940a8c --- /dev/null +++ b/packages/siwe/src/__tests__/controllers/SIWEController.test.ts @@ -0,0 +1,70 @@ +import { SIWEController } from '../../index'; + +// -- Mocks ------------------------------------------------------------- +const session = { address: '0x', chainId: 1 }; +const client = { + signIn: () => Promise.resolve(session), + options: { + enabled: true, + nonceRefetchIntervalMs: 60000, + sessionRefetchIntervalMs: 120000, + signOutOnDisconnect: true, + signOutOnAccountChange: true, + signOutOnNetworkChange: true + }, + getNonce: async () => Promise.resolve('mock-nonce'), + createMessage: () => 'mock-message', + verifyMessage: async () => Promise.resolve(true), + getSession: async () => Promise.resolve(session), + signOut: async () => Promise.resolve(true), + getMessageParams: () => + Promise.resolve({ + chains: [1], + domain: 'mock-domain', + uri: 'mock-uri', + nonce: 'mock-nonce' + }) +}; + +// -- Tests -------------------------------------------------------------------- +describe('SIWEController', () => { + it('should throw if client not set', () => { + expect(() => SIWEController._getClient()).toThrow('SIWEController client not set'); + }); + + it('should set the SIWE client and update status to READY', () => { + SIWEController.setSIWEClient(client); + + const state = SIWEController.state; + expect(state._client).toBe(client); + expect(state.status).toBe('ready'); + }); + + it('should set nonce and update status', () => { + SIWEController.setNonce('mock-nonce'); + + const state = SIWEController.state; + expect(state.nonce).toBe('mock-nonce'); + }); + + it('should set status', () => { + SIWEController.setStatus('success'); + + const state = SIWEController.state; + expect(state.status).toBe('success'); + }); + + it('should set message', () => { + SIWEController.setMessage('mock-message'); + + const state = SIWEController.state; + expect(state.message).toBe('mock-message'); + }); + + it('should set session', () => { + SIWEController.setSession(session); + + const state = SIWEController.state; + expect(state.session).toEqual(session); + }); +}); diff --git a/packages/siwe/src/client.ts b/packages/siwe/src/client.ts new file mode 100644 index 00000000..7debb230 --- /dev/null +++ b/packages/siwe/src/client.ts @@ -0,0 +1,133 @@ +import { + AccountController, + NetworkController, + ConnectionController, + RouterUtil +} from '@web3modal/core-react-native'; +import { NetworkUtil } from '@web3modal/common-react-native'; + +import type { + SIWECreateMessageArgs, + SIWEVerifyMessageArgs, + SIWEConfig, + SIWEClientMethods, + SIWESession, + SIWEMessageArgs +} from './utils/TypeUtils'; +import type { SIWEControllerClient } from './controller/SIWEController'; + +import { ConstantsUtil } from './utils/ConstantsUtil'; + +// -- Client -------------------------------------------------------------------- // +export class Web3ModalSIWEClient { + public options: SIWEControllerClient['options']; + + public methods: SIWEClientMethods; + + public constructor(siweConfig: SIWEConfig) { + const { + enabled = true, + nonceRefetchIntervalMs = ConstantsUtil.FIVE_MINUTES_IN_MS, + sessionRefetchIntervalMs = ConstantsUtil.FIVE_MINUTES_IN_MS, + signOutOnAccountChange = true, + signOutOnDisconnect = true, + signOutOnNetworkChange = true, + ...siweConfigMethods + } = siweConfig; + + this.options = { + // Default options + enabled, + nonceRefetchIntervalMs, + sessionRefetchIntervalMs, + signOutOnDisconnect, + signOutOnAccountChange, + signOutOnNetworkChange + }; + + this.methods = siweConfigMethods; + } + + async getNonce(address?: string) { + const nonce = await this.methods.getNonce(address); + if (!nonce) { + throw new Error('siweControllerClient:getNonce - nonce is undefined'); + } + + return nonce; + } + + async getMessageParams?() { + return ((await this.methods.getMessageParams?.()) || {}) as SIWEMessageArgs; + } + + createMessage(args: SIWECreateMessageArgs) { + const message = this.methods.createMessage(args); + + if (!message) { + throw new Error('siweControllerClient:createMessage - message is undefined'); + } + + return message; + } + + async verifyMessage(args: SIWEVerifyMessageArgs) { + const isValid = await this.methods.verifyMessage(args); + + return isValid; + } + + async getSession() { + const session = await this.methods.getSession(); + if (!session) { + throw new Error('siweControllerClient:getSession - session is undefined'); + } + + return session; + } + + async signIn(): Promise { + const { address } = AccountController.state; + const nonce = await this.getNonce(address); + if (!address) { + throw new Error('An address is required to create a SIWE message.'); + } + const chainId = NetworkUtil.caipNetworkIdToNumber(NetworkController.state.caipNetwork?.id); + if (!chainId) { + throw new Error('A chainId is required to create a SIWE message.'); + } + const messageParams = await this.getMessageParams?.(); + const message = this.createMessage({ + address: `eip155:${chainId}:${address}`, + chainId, + nonce, + version: '1', + iat: messageParams?.iat || new Date().toISOString(), + ...messageParams! + }); + + const signature = await ConnectionController.signMessage(message); + const isValid = await this.verifyMessage({ message, signature }); + if (!isValid) { + throw new Error('Error verifying SIWE signature'); + } + + const session = await this.getSession(); + if (!session) { + throw new Error('Error getting SIWE session'); + } + if (this.methods.onSignIn) { + this.methods.onSignIn(session); + } + + RouterUtil.navigateAfterNetworkSwitch(); + + return session; + } + + async signOut() { + this.methods.onSignOut?.(); + + return this.methods.signOut(); + } +} diff --git a/packages/siwe/src/controller/SIWEController.ts b/packages/siwe/src/controller/SIWEController.ts new file mode 100644 index 00000000..8a6f3e3f --- /dev/null +++ b/packages/siwe/src/controller/SIWEController.ts @@ -0,0 +1,154 @@ +import { proxy, ref, subscribe as sub } from 'valtio'; +import { subscribeKey as subKey } from 'valtio/utils'; +import { OptionsController } from '@web3modal/core-react-native'; +import type { + SIWEClientMethods, + SIWESession, + SIWECreateMessageArgs, + SIWEVerifyMessageArgs +} from '../utils/TypeUtils'; + +// -- Types --------------------------------------------- // +export interface SIWEControllerClient extends SIWEClientMethods { + signIn: () => Promise; + options: { + enabled: boolean; + nonceRefetchIntervalMs: number; + sessionRefetchIntervalMs: number; + signOutOnDisconnect: boolean; + signOutOnAccountChange: boolean; + signOutOnNetworkChange: boolean; + }; +} + +export interface SIWEControllerClientState { + _client?: SIWEControllerClient; + nonce?: string; + session?: SIWESession; + message?: string; + status: 'uninitialized' | 'ready' | 'loading' | 'success' | 'rejected' | 'error'; +} + +type StateKey = keyof SIWEControllerClientState; + +// -- State --------------------------------------------- // +const state = proxy({ + status: 'uninitialized' +}); + +// -- Controller ---------------------------------------- // +export const SIWEController = { + state, + + subscribeKey( + key: K, + callback: (value: SIWEControllerClientState[K]) => void + ) { + return subKey(state, key, callback); + }, + + subscribe(callback: (newState: SIWEControllerClientState) => void) { + return sub(state, () => callback(state)); + }, + + _getClient() { + if (!state._client) { + throw new Error('SIWEController client not set'); + } + + return state._client; + }, + + async getNonce(address?: string) { + const client = this._getClient(); + const nonce = await client.getNonce(address); + this.setNonce(nonce); + + return nonce; + }, + + async getSession() { + try { + const client = this._getClient(); + const session = await client.getSession(); + if (session) { + this.setSession(session); + this.setStatus('success'); + } + + return session; + } catch { + return undefined; + } + }, + + createMessage(args: SIWECreateMessageArgs) { + const client = this._getClient(); + const message = client.createMessage(args); + this.setMessage(message); + + return message; + }, + + async verifyMessage(args: SIWEVerifyMessageArgs) { + const client = this._getClient(); + const isValid = await client.verifyMessage(args); + + return isValid; + }, + + async signIn() { + try { + this.setStatus('loading'); + const client = this._getClient(); + const session = await client.signIn(); + this.setStatus('success'); + + return session; + } catch (error) { + this.setStatus('error'); + throw error; + } + }, + + async signOut() { + const client = this._getClient(); + await client.signOut(); + this.setStatus('ready'); + this.setSession(undefined); + client.onSignOut?.(); + }, + + onSignIn(args: SIWESession) { + const client = this._getClient(); + client.onSignIn?.(args); + }, + + onSignOut() { + const client = this._getClient(); + client.onSignOut?.(); + }, + + setSIWEClient(client: SIWEControllerClient) { + state._client = ref(client); + state.status = 'ready'; + OptionsController.setIsSiweEnabled(client.options.enabled); + }, + + setNonce(nonce: SIWEControllerClientState['nonce']) { + state.nonce = nonce; + }, + + setStatus(status: SIWEControllerClientState['status']) { + state.status = status; + }, + + setMessage(message: SIWEControllerClientState['message']) { + state.message = message; + }, + + setSession(session: SIWEControllerClientState['session']) { + state.session = session; + state.status = session ? 'success' : 'ready'; + } +}; diff --git a/packages/siwe/src/helpers/index.ts b/packages/siwe/src/helpers/index.ts new file mode 100644 index 00000000..9c04e443 --- /dev/null +++ b/packages/siwe/src/helpers/index.ts @@ -0,0 +1,33 @@ +import { isValidEip191Signature, isValidEip1271Signature } from '@walletconnect/utils'; + +const ETH_ADDRESS_PATTERN = /0x[a-fA-F0-9]{40}/u; +const ETH_CHAIN_ID_IN_SIWE_PATTERN = /Chain ID: (?\d+)/u; + +export function getAddressFromMessage(message: string) { + return message.match(ETH_ADDRESS_PATTERN)?.[0] || ''; +} + +export function getChainIdFromMessage(message: string) { + return `eip155:${message.match(ETH_CHAIN_ID_IN_SIWE_PATTERN)?.[1] || 1}`; +} + +export async function verifySignature({ + address, + message, + signature, + chainId, + projectId +}: { + address: string; + message: string; + signature: string; + chainId: string; + projectId: string; +}) { + let isValid = isValidEip191Signature(address, message, signature); + if (!isValid) { + isValid = await isValidEip1271Signature(address, message, signature, chainId, projectId); + } + + return isValid; +} diff --git a/packages/siwe/src/index.ts b/packages/siwe/src/index.ts new file mode 100644 index 00000000..abb9fc26 --- /dev/null +++ b/packages/siwe/src/index.ts @@ -0,0 +1,27 @@ +export { formatMessage, getDidChainId, getDidAddress } from '@walletconnect/utils'; +import type { + SIWEConfig, + SIWESession, + SIWECreateMessageArgs, + SIWEVerifyMessageArgs, + SIWEClientMethods +} from './utils/TypeUtils'; +import { Web3ModalSIWEClient } from '../src/client'; +export { getAddressFromMessage, getChainIdFromMessage, verifySignature } from './helpers/index'; +export { SIWEController, type SIWEControllerClient } from './controller/SIWEController'; + +export type { + Web3ModalSIWEClient, + SIWEConfig, + SIWESession, + SIWECreateMessageArgs, + SIWEVerifyMessageArgs, + SIWEClientMethods +}; + +export function createSIWEConfig(siweConfig: SIWEConfig) { + return new Web3ModalSIWEClient(siweConfig); +} + +export * from './scaffold/partials/w3m-connecting-siwe/index'; +export * from './scaffold/views/w3m-connecting-siwe-view/index'; diff --git a/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/index.tsx b/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/index.tsx new file mode 100644 index 00000000..c7254f93 --- /dev/null +++ b/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/index.tsx @@ -0,0 +1,100 @@ +import { useSnapshot } from 'valtio'; +import { Animated, useAnimatedValue, type StyleProp, type ViewStyle } from 'react-native'; +import { AssetUtil, ConnectionController, OptionsController } from '@web3modal/core-react-native'; +import { FlexView, Icon, Image, WalletImage, useTheme } from '@web3modal/ui-react-native'; +import styles from './styles'; +import { useEffect } from 'react'; + +interface Props { + style?: StyleProp; +} + +export function ConnectingSiwe({ style }: Props) { + const Theme = useTheme(); + const { metadata } = useSnapshot(OptionsController.state); + const { connectedWalletImageUrl, pressedWallet } = useSnapshot(ConnectionController.state); + const dappIcon = metadata?.icons[0] || ''; + const dappPosition = useAnimatedValue(10); + const walletPosition = useAnimatedValue(-10); + const walletIcon = AssetUtil.getWalletImage(pressedWallet) || connectedWalletImageUrl; + + const animateDapp = () => { + Animated.loop( + Animated.sequence([ + Animated.timing(dappPosition, { + toValue: -5, + duration: 1500, + useNativeDriver: true + }), + Animated.timing(dappPosition, { + toValue: 10, + duration: 1500, + useNativeDriver: true + }) + ]) + ).start(); + }; + + const animateWallet = () => { + Animated.loop( + Animated.sequence([ + Animated.timing(walletPosition, { + toValue: 5, + duration: 1500, + useNativeDriver: true + }), + Animated.timing(walletPosition, { + toValue: -10, + duration: 1500, + useNativeDriver: true + }) + ]) + ).start(); + }; + + useEffect(() => { + animateDapp(); + animateWallet(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + {dappIcon ? ( + + ) : ( + + )} + + + {walletIcon ? ( + + ) : ( + + )} + + + ); +} diff --git a/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/styles.ts b/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/styles.ts new file mode 100644 index 00000000..5cf07bd9 --- /dev/null +++ b/packages/siwe/src/scaffold/partials/w3m-connecting-siwe/styles.ts @@ -0,0 +1,24 @@ +import { StyleSheet } from 'react-native'; + +export default StyleSheet.create({ + dappIcon: { + height: 64, + width: 64, + borderRadius: 100 + }, + iconBorder: { + width: 74, + height: 74, + alignItems: 'center', + justifyContent: 'center' + }, + dappBorder: { + borderRadius: 100, + zIndex: 2 + }, + walletBorder: { + borderRadius: 22, + width: 72, + height: 72 + } +}); diff --git a/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/index.tsx b/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/index.tsx new file mode 100644 index 00000000..7c3aff84 --- /dev/null +++ b/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/index.tsx @@ -0,0 +1,95 @@ +import { useSnapshot } from 'valtio'; +import { Button, FlexView, Text } from '@web3modal/ui-react-native'; +import { + AccountController, + ConnectionController, + EventsController, + ModalController, + OptionsController, + RouterController, + SnackController +} from '@web3modal/core-react-native'; + +import { ConnectingSiwe } from '../../partials/w3m-connecting-siwe'; +import { useState } from 'react'; +import { SIWEController } from '../../../controller/SIWEController'; +import styles from './styles'; + +export function ConnectingSiweView() { + const { metadata } = useSnapshot(OptionsController.state); + const [isSigning, setIsSigning] = useState(false); + const [isDisconnecting, setIsDisconnecting] = useState(false); + + const dappName = metadata?.name || 'Dapp'; + + const onSign = async () => { + setIsSigning(true); + EventsController.sendEvent({ + event: 'CLICK_SIGN_SIWE_MESSAGE', + type: 'track' + }); + try { + const session = await SIWEController.signIn(); + + EventsController.sendEvent({ + event: 'SIWE_AUTH_SUCCESS', + type: 'track' + }); + + return session; + } catch (error) { + SnackController.showError('Signature declined'); + + SIWEController.setStatus('error'); + + return EventsController.sendEvent({ + event: 'SIWE_AUTH_ERROR', + type: 'track' + }); + } finally { + setIsSigning(false); + } + }; + + const onCancel = async () => { + const { isConnected } = AccountController.state; + if (isConnected) { + setIsDisconnecting(true); + await ConnectionController.disconnect(); + ModalController.close(); + setIsDisconnecting(false); + } else { + RouterController.push('Connect'); + } + EventsController.sendEvent({ + event: 'CLICK_CANCEL_SIWE', + type: 'track' + }); + }; + + return ( + + + + {dappName} needs to connect to your wallet + + + Sign this message to prove you own this wallet and proceed. Cancelling will disconnect you + + + + + + + ); +} diff --git a/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/styles.ts b/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/styles.ts new file mode 100644 index 00000000..c1d15b78 --- /dev/null +++ b/packages/siwe/src/scaffold/views/w3m-connecting-siwe-view/styles.ts @@ -0,0 +1,18 @@ +import { Spacing } from '@web3modal/ui-react-native'; +import { StyleSheet } from 'react-native'; + +export default StyleSheet.create({ + logoContainer: { + marginBottom: Spacing.m + }, + button: { + width: '48%' + }, + title: { + marginHorizontal: '15%' + }, + subtitle: { + marginHorizontal: '10%', + marginVertical: Spacing.l + } +}); diff --git a/packages/siwe/src/utils/ConstantsUtil.ts b/packages/siwe/src/utils/ConstantsUtil.ts new file mode 100644 index 00000000..5daf1a38 --- /dev/null +++ b/packages/siwe/src/utils/ConstantsUtil.ts @@ -0,0 +1,3 @@ +export const ConstantsUtil = { + FIVE_MINUTES_IN_MS: 300000 +}; diff --git a/packages/siwe/src/utils/TypeUtils.ts b/packages/siwe/src/utils/TypeUtils.ts new file mode 100644 index 00000000..19723e56 --- /dev/null +++ b/packages/siwe/src/utils/TypeUtils.ts @@ -0,0 +1,86 @@ +export interface SIWESession { + address: string; + chainId: number; +} + +interface CacaoHeader { + t: 'caip122'; +} + +export interface SIWECreateMessageArgs { + chainId: number; + domain: string; + nonce: string; + uri: string; + address: string; + version: '1'; + type?: CacaoHeader['t']; + nbf?: string; + exp?: string; + statement?: string; + requestId?: string; + resources?: string[]; + expiry?: number; + iat?: string; +} +export type SIWEMessageArgs = { + chains: number[]; + methods?: string[]; +} & Omit; +// Signed Cacao (CAIP-74) +interface CacaoPayload { + domain: string; + aud: string; + nonce: string; + iss: string; + version?: string; + iat?: string; + nbf?: string; + exp?: string; + statement?: string; + requestId?: string; + resources?: string[]; + type?: string; +} + +interface Cacao { + h: CacaoHeader; + p: CacaoPayload; + s: { + t: 'eip191' | 'eip1271'; + s: string; + m?: string; + }; +} + +export interface SIWEVerifyMessageArgs { + message: string; + signature: string; + cacao?: Cacao; +} + +export interface SIWEClientMethods { + getNonce: (address?: string) => Promise; + createMessage: (args: SIWECreateMessageArgs) => string; + verifyMessage: (args: SIWEVerifyMessageArgs) => Promise; + getSession: () => Promise; + signOut: () => Promise; + getMessageParams?: () => Promise; + onSignIn?: (session?: SIWESession) => void; + onSignOut?: () => void; +} + +export interface SIWEConfig extends SIWEClientMethods { + // Defaults to true + enabled?: boolean; + // In milliseconds, defaults to 5 minutes + nonceRefetchIntervalMs?: number; + // In milliseconds, defaults to 5 minutes + sessionRefetchIntervalMs?: number; + // Defaults to true + signOutOnDisconnect?: boolean; + // Defaults to true + signOutOnAccountChange?: boolean; + // Defaults to true + signOutOnNetworkChange?: boolean; +} diff --git a/packages/siwe/tsconfig.json b/packages/siwe/tsconfig.json new file mode 100644 index 00000000..408b5659 --- /dev/null +++ b/packages/siwe/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src"], + "exclude": ["lib", "node_modules", "src/__tests__"] +} diff --git a/packages/ui/src/components/wui-loading-spinner/index.tsx b/packages/ui/src/components/wui-loading-spinner/index.tsx index 7e6cc5a8..4270f571 100644 --- a/packages/ui/src/components/wui-loading-spinner/index.tsx +++ b/packages/ui/src/components/wui-loading-spinner/index.tsx @@ -10,7 +10,7 @@ const AnimatedSvg = Animated.createAnimatedComponent(Svg); export interface LoadingSpinnerProps { size?: Exclude; - color?: Exclude; + color?: Exclude; style?: StyleProp; } diff --git a/packages/ui/src/components/wui-loading-thumbnail/index.tsx b/packages/ui/src/components/wui-loading-thumbnail/index.tsx index 52f4d4e4..6637f7a8 100644 --- a/packages/ui/src/components/wui-loading-thumbnail/index.tsx +++ b/packages/ui/src/components/wui-loading-thumbnail/index.tsx @@ -21,7 +21,7 @@ export function LoadingThumbnail({ const Theme = useTheme(); const spinValue = useRef(new Animated.Value(0)); const strokeWidth = 4; - const rectangleSize = WalletImageSize.lg + Spacing.l; + const rectangleSize = WalletImageSize.xl + Spacing.l; const outerContainerSize = rectangleSize + strokeWidth; useEffect(() => { diff --git a/packages/ui/src/composites/wui-button/index.tsx b/packages/ui/src/composites/wui-button/index.tsx index 160686f5..902bb3e7 100644 --- a/packages/ui/src/composites/wui-button/index.tsx +++ b/packages/ui/src/composites/wui-button/index.tsx @@ -8,8 +8,9 @@ import { } from 'react-native'; import { Text } from '../../components/wui-text'; import { Icon } from '../../components/wui-icon'; +import { LoadingSpinner } from '../../components/wui-loading-spinner'; import { useTheme } from '../../hooks/useTheme'; -import type { ButtonType, ColorType, IconType, SizeType } from '../../utils/TypesUtil'; +import type { ButtonType, IconType, SizeType } from '../../utils/TypesUtil'; import styles, { getThemedButtonStyle, getThemedTextStyle } from './styles'; import type { SvgProps } from 'react-native-svg'; @@ -26,6 +27,7 @@ export type ButtonProps = NativeProps & { children: React.ReactNode; style?: StyleProp; iconStyle?: SvgProps['style']; + loading?: boolean; }; export function Button({ @@ -38,15 +40,15 @@ export function Button({ iconLeft, iconRight, iconStyle, + loading, ...rest }: ButtonProps) { const Theme = useTheme(); const themedTextStyle = getThemedTextStyle(Theme, variant, disabled); const colorAnimation = useRef(new Animated.Value(0)); const iconSize = size === 'md' ? 'sm' : 'xs'; - const iconColor = ( - variant === 'fill' ? 'inverse-100' : variant === 'accent' ? 'accent-100' : 'fg-150' - ) as ColorType; + const iconColor = + variant === 'fill' ? 'inverse-100' : variant === 'accent' ? 'accent-100' : 'fg-100'; const themedNormalStyle = getThemedButtonStyle(Theme, variant, disabled, false); const themedPressedStyle = getThemedButtonStyle(Theme, variant, disabled, true); @@ -79,7 +81,7 @@ export function Button({ return ( )} - - {children} - + {loading ? ( + + ) : ( + + {children} + + )} {iconRight && ( ; - size?: Exclude; + size?: Exclude; style?: StyleProp; showAllWallets?: boolean; + border?: boolean; } const IconSize = { xs: 10, sm: 24, md: 32, - lg: 40 + lg: 36, + xl: 40 }; export function WalletImage({ @@ -26,7 +28,8 @@ export function WalletImage({ imageHeaders, size = 'md', style, - showAllWallets + showAllWallets, + border = true }: WalletImageProps) { const Theme = useTheme(); @@ -61,20 +64,22 @@ export function WalletImage({ }; return ( - + {templateVisual()} - - + {border && ( + + )} + ); } diff --git a/packages/ui/src/composites/wui-wallet-image/styles.ts b/packages/ui/src/composites/wui-wallet-image/styles.ts index be851de4..610fd4b6 100644 --- a/packages/ui/src/composites/wui-wallet-image/styles.ts +++ b/packages/ui/src/composites/wui-wallet-image/styles.ts @@ -24,6 +24,11 @@ export default StyleSheet.create({ lgImage: { height: WalletImageSize.lg, width: WalletImageSize.lg, + borderRadius: BorderRadius.s + }, + xlImage: { + height: WalletImageSize.xl, + width: WalletImageSize.xl, borderRadius: BorderRadius.m }, border: { diff --git a/packages/ui/src/utils/ThemeUtil.ts b/packages/ui/src/utils/ThemeUtil.ts index 8ce45156..5fa3e4fb 100644 --- a/packages/ui/src/utils/ThemeUtil.ts +++ b/packages/ui/src/utils/ThemeUtil.ts @@ -192,5 +192,6 @@ export const WalletImageSize = { xs: 15, sm: 40, md: 56, - lg: 80 + lg: 64, + xl: 80 }; diff --git a/packages/wagmi/package.json b/packages/wagmi/package.json index 16d6209b..13193604 100644 --- a/packages/wagmi/package.json +++ b/packages/wagmi/package.json @@ -38,8 +38,10 @@ "access": "public" }, "dependencies": { + "@web3modal/common-react-native": "2.0.0-alpha.2", "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2" + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", + "@web3modal/siwe-react-native": "2.0.0-alpha.2" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts index 4f6248df..4b3e7b30 100644 --- a/packages/wagmi/src/client.ts +++ b/packages/wagmi/src/client.ts @@ -3,6 +3,7 @@ import { type GetAccountReturnType, connect, disconnect, + signMessage, switchChain, watchAccount, watchConnectors, @@ -11,7 +12,7 @@ import { getBalance } from '@wagmi/core'; import { mainnet, type Chain } from '@wagmi/core/chains'; -import { EthereumProvider } from '@walletconnect/ethereum-provider'; +import { EthereumProvider, OPTIONAL_METHODS } from '@walletconnect/ethereum-provider'; import { type CaipAddress, type CaipNetwork, @@ -30,18 +31,21 @@ import { PresetsUtil, StorageUtil } from '@web3modal/scaffold-utils-react-native'; +import { NetworkUtil } from '@web3modal/common-react-native'; import { getCaipDefaultChain, getEmailCaipNetworks, getWalletConnectCaipNetworks } from './utils/helpers'; import { defaultWagmiConfig } from './utils/defaultWagmiConfig'; +import { type Web3ModalSIWEClient } from '@web3modal/siwe-react-native'; // -- Types --------------------------------------------------------------------- type WagmiConfig = ReturnType; export interface Web3ModalClientOptions extends Omit { wagmiConfig: WagmiConfig; + siweConfig?: Web3ModalSIWEClient; defaultChain?: Chain; chainImages?: Record; connectorImages?: Record; @@ -64,7 +68,7 @@ export class Web3Modal extends Web3ModalScaffold { private wagmiConfig: WagmiConfig; public constructor(options: Web3ModalClientOptions) { - const { wagmiConfig, defaultChain, tokens, _sdkVersion, ...w3mOptions } = options; + const { wagmiConfig, siweConfig, defaultChain, tokens, _sdkVersion, ...w3mOptions } = options; if (!wagmiConfig) { throw new Error('web3modal:constructor - wagmiConfig is undefined'); @@ -76,7 +80,7 @@ export class Web3Modal extends Web3ModalScaffold { const networkControllerClient: NetworkControllerClient = { switchCaipNetwork: async caipNetwork => { - const chainId = HelpersUtil.caipNetworkIdToNumber(caipNetwork?.id); + const chainId = NetworkUtil.caipNetworkIdToNumber(caipNetwork?.id); if (chainId) { await switchChain(wagmiConfig, { chainId }); } @@ -122,7 +126,71 @@ export class Web3Modal extends Web3ModalScaffold { onUri(data); }); - const chainId = HelpersUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); + const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); + + // SIWE + const siweParams = await siweConfig?.getMessageParams?.(); + // Make sure client uses ethereum provider version that supports `authenticate` + if ( + siweConfig?.options?.enabled && + typeof provider?.authenticate === 'function' && + siweParams && + Object.keys(siweParams || {}).length > 0 + ) { + const { SIWEController, getDidChainId, getDidAddress } = await import( + '@web3modal/siwe-react-native' + ); + // @ts-expect-error - setting requested chains beforehand avoids wagmi auto disconnecting the session when `connect` is called because it things chains are stale + await connector.setRequestedChainsIds(siweParams.chains); + + const result = await provider.authenticate({ + nonce: await siweConfig.getNonce(), + methods: [...OPTIONAL_METHODS], + ...siweParams + }); + + // Auths is an array of signed CACAO objects https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-74.md + const signedCacao = result?.auths?.[0]; + if (signedCacao) { + const { p, s } = signedCacao; + const cacaoChainId = getDidChainId(p.iss) || ''; + const address = getDidAddress(p.iss); + if (address && cacaoChainId) { + SIWEController.setSession({ + address, + chainId: parseInt(cacaoChainId, 10) + }); + } + try { + // Kicks off verifyMessage and populates external states + const message = provider.signer.client.formatAuthMessage({ + request: p, + iss: p.iss + }); + + await SIWEController.verifyMessage({ + message, + signature: s.s, + cacao: signedCacao + }); + } catch (error) { + // eslint-disable-next-line no-console + console.error('Error verifying message', error); + // eslint-disable-next-line no-console + await provider.disconnect().catch(console.error); + // eslint-disable-next-line no-console + await SIWEController.signOut().catch(console.error); + throw error; + } + /* + * Unassign the connector from the wagmiConfig and allow connect() to reassign it in the next step + * this avoids case where wagmi throws because the connector is already connected + * what we need connect() to do is to only setup internal event listeners + */ + this.wagmiConfig.state.current = ''; + } + } + await connect(this.wagmiConfig, { connector, chainId }); }, @@ -132,18 +200,26 @@ export class Web3Modal extends Web3ModalScaffold { throw new Error('connectionControllerClient:connectExternal - connector is undefined'); } - const chainId = HelpersUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); + const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); await connect(this.wagmiConfig, { connector, chainId }); }, + signMessage: async message => signMessage(this.wagmiConfig, { message }), + disconnect: async () => { await disconnect(this.wagmiConfig); + + if (siweConfig?.options?.signOutOnDisconnect) { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + await SIWEController.signOut(); + } } }; super({ networkControllerClient, connectionControllerClient, + siweControllerClient: siweConfig, defaultChain: getCaipDefaultChain(defaultChain), tokens: HelpersUtil.getCaipTokens(tokens), _sdkVersion: _sdkVersion ?? `react-native-wagmi-${ConstantsUtil.VERSION}`, @@ -176,7 +252,7 @@ export class Web3Modal extends Web3ModalScaffold { return { ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }; } @@ -185,7 +261,7 @@ export class Web3Modal extends Web3ModalScaffold { return super.subscribeState(state => callback({ ...state, - selectedNetworkId: HelpersUtil.caipNetworkIdToNumber(state.selectedNetworkId) + selectedNetworkId: NetworkUtil.caipNetworkIdToNumber(state.selectedNetworkId) }) ); } diff --git a/yarn.lock b/yarn.lock index 6e4caf07..0a6932c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3717,13 +3717,6 @@ __metadata: languageName: node linkType: hard -"@ethersproject/shims@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/shims@npm:5.7.0" - checksum: d550494c882278131beb72e0a358859f0398edd5535bed0e0355c2c2016aec59596a2603d06f46469a1768408d739247fef02c320dcd994d893ea771b61c762b - languageName: node - linkType: hard - "@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/signing-key@npm:5.7.0" @@ -9973,6 +9966,31 @@ __metadata: languageName: node linkType: hard +"@walletconnect/core@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/core@npm:2.13.1" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.10" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.1" + "@walletconnect/utils": "npm:2.13.1" + events: "npm:3.3.0" + isomorphic-unfetch: "npm:3.1.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:3.1.0" + checksum: 0295d3b7aede7244f3ea97c04055407421c6b7bb24535ec88af425456f8d9844eb79643478b6bf40b85d1277a3ddf2743edfd2ee058c3194c2c2dd391d6d75c3 + languageName: node + linkType: hard + "@walletconnect/environment@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/environment@npm:1.0.1" @@ -10000,6 +10018,24 @@ __metadata: languageName: node linkType: hard +"@walletconnect/ethereum-provider@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/ethereum-provider@npm:2.13.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/modal": "npm:2.6.2" + "@walletconnect/sign-client": "npm:2.13.1" + "@walletconnect/types": "npm:2.13.1" + "@walletconnect/universal-provider": "npm:2.13.1" + "@walletconnect/utils": "npm:2.13.1" + events: "npm:3.3.0" + checksum: 6d6fe593641a87a659be59ce7430b7e0b0860f21ffcf57428239ffe7a77168b7b861ec7ef7eab7b45a004c11782fc26e6400d3e3b1892607019cb825a119ca97 + languageName: node + linkType: hard + "@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/events@npm:1.0.1" @@ -10212,6 +10248,23 @@ __metadata: languageName: node linkType: hard +"@walletconnect/sign-client@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/sign-client@npm:2.13.1" + dependencies: + "@walletconnect/core": "npm:2.13.1" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.1" + "@walletconnect/utils": "npm:2.13.1" + events: "npm:3.3.0" + checksum: 2b251d781c26c86b4a18cbccd00dd5182d4ef7094e41e089fae2d89306e463c3922786f9f49b849f190712540c20659cf5d00aa790c395dab8bc7810f009f7c1 + languageName: node + linkType: hard + "@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": version: 1.0.2 resolution: "@walletconnect/time@npm:1.0.2" @@ -10235,6 +10288,20 @@ __metadata: languageName: node linkType: hard +"@walletconnect/types@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/types@npm:2.13.1" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 79a45ec8f9d95a6ae4c52d13d52e68b7c6025a958d629db433d7be7e91d397a05305f62f40b735a6eba4ba3f649d82d7b6195d362e508940b1484ebc0c3ee295 + languageName: node + linkType: hard + "@walletconnect/universal-provider@npm:2.13.0": version: 2.13.0 resolution: "@walletconnect/universal-provider@npm:2.13.0" @@ -10252,6 +10319,23 @@ __metadata: languageName: node linkType: hard +"@walletconnect/universal-provider@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/universal-provider@npm:2.13.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/sign-client": "npm:2.13.1" + "@walletconnect/types": "npm:2.13.1" + "@walletconnect/utils": "npm:2.13.1" + events: "npm:3.3.0" + checksum: 432955839df2e803196fbc8d04b183051966977215455eed3bfba21958c7adb8f67989ef328b7ba7b9c99ab6ceea2cb75d338f446b8f5e363192087d479891e9 + languageName: node + linkType: hard + "@walletconnect/utils@npm:2.13.0": version: 2.13.0 resolution: "@walletconnect/utils@npm:2.13.0" @@ -10274,6 +10358,28 @@ __metadata: languageName: node linkType: hard +"@walletconnect/utils@npm:2.13.1": + version: 2.13.1 + resolution: "@walletconnect/utils@npm:2.13.1" + dependencies: + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/relay-api": "npm:1.0.10" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.13.1" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + detect-browser: "npm:5.3.0" + query-string: "npm:7.1.3" + uint8arrays: "npm:3.1.0" + checksum: 8d7f0484a3d110aff0a615bcd99f61ebd23c09af36d20cc32f666a9bd59eef634259c2f29e06f5c175ae36a103761d81bcc6478fbe585b48a6511036b24542bb + languageName: node + linkType: hard + "@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": version: 1.0.1 resolution: "@walletconnect/window-getters@npm:1.0.1" @@ -10311,6 +10417,12 @@ __metadata: languageName: unknown linkType: soft +"@web3modal/common-react-native@npm:2.0.0-alpha.2, @web3modal/common-react-native@workspace:packages/common": + version: 0.0.0-use.local + resolution: "@web3modal/common-react-native@workspace:packages/common" + languageName: unknown + linkType: soft + "@web3modal/core-react-native@npm:2.0.0-alpha.2, @web3modal/core-react-native@workspace:packages/core": version: 0.0.0-use.local resolution: "@web3modal/core-react-native@workspace:packages/core" @@ -10361,9 +10473,11 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/ethers-react-native@workspace:packages/ethers" dependencies: - "@walletconnect/ethereum-provider": "npm:2.13.0" + "@walletconnect/ethereum-provider": "npm:2.13.1" + "@web3modal/common-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" ethers: "npm:6.10.0" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10380,17 +10494,17 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/ethers5-react-native@workspace:packages/ethers5" dependencies: - "@ethersproject/shims": "npm:5.7.0" - "@walletconnect/ethereum-provider": "npm:2.13.0" + "@walletconnect/ethereum-provider": "npm:2.13.1" + "@web3modal/common-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" ethers: "npm:5.7.2" peerDependencies: - "@ethersproject/shims": ">=5.0.0" "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" "@walletconnect/react-native-compat": ">=2.13.1" - ethers: ">=5.0.0 <6.0.0" + ethers: ">=5.7.2 <6.0.0" react: ">=17" react-native: ">=0.68.5" react-native-get-random-values: "*" @@ -10402,6 +10516,7 @@ __metadata: resolution: "@web3modal/scaffold-react-native@workspace:packages/scaffold" dependencies: "@web3modal/core-react-native": "npm:2.0.0-alpha.2" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" peerDependencies: react: ">=17" @@ -10418,6 +10533,18 @@ __metadata: languageName: unknown linkType: soft +"@web3modal/siwe-react-native@npm:2.0.0-alpha.2, @web3modal/siwe-react-native@workspace:packages/siwe": + version: 0.0.0-use.local + resolution: "@web3modal/siwe-react-native@workspace:packages/siwe" + dependencies: + "@walletconnect/utils": "npm:2.13.1" + "@web3modal/common-react-native": "npm:2.0.0-alpha.2" + "@web3modal/core-react-native": "npm:2.0.0-alpha.2" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" + valtio: "npm:1.10.5" + languageName: unknown + linkType: soft + "@web3modal/ui-react-native@npm:2.0.0-alpha.2, @web3modal/ui-react-native@workspace:packages/ui": version: 0.0.0-use.local resolution: "@web3modal/ui-react-native@workspace:packages/ui" @@ -10434,8 +10561,10 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/wagmi-react-native@workspace:packages/wagmi" dependencies: + "@web3modal/common-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" From 8be99864879ce3d913beba432b1ad24f37203989 Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Thu, 6 Jun 2024 16:30:21 -0300 Subject: [PATCH 03/18] chore: changed sample app nonce function --- apps/native/src/utils/SiweUtils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/native/src/utils/SiweUtils.ts b/apps/native/src/utils/SiweUtils.ts index e086e999..a95b63e0 100644 --- a/apps/native/src/utils/SiweUtils.ts +++ b/apps/native/src/utils/SiweUtils.ts @@ -1,3 +1,4 @@ +import { generateRandomBytes32 } from '@walletconnect/utils'; import { createSIWEConfig, formatMessage, @@ -31,7 +32,7 @@ export const siweConfig = createSIWEConfig({ // The getNonce method functions as a safeguard // against spoofing, akin to a CSRF token. - const nonce = Math.floor(Math.random() * 1000000).toString(); + const nonce = generateRandomBytes32(); return nonce; }, From 710cb8f414248f1691a27439f9e31a3c7be04cfb Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Thu, 6 Jun 2024 16:42:31 -0300 Subject: [PATCH 04/18] chore: removed qodana file, changed mock function --- apps/native/src/utils/SiweUtils.ts | 2 +- qodana.yaml | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 qodana.yaml diff --git a/apps/native/src/utils/SiweUtils.ts b/apps/native/src/utils/SiweUtils.ts index a95b63e0..80f2ff6f 100644 --- a/apps/native/src/utils/SiweUtils.ts +++ b/apps/native/src/utils/SiweUtils.ts @@ -57,7 +57,7 @@ export const siweConfig = createSIWEConfig({ // The users session must be destroyed when calling `signOut`. try { - return Promise.resolve(true); + return await Promise.resolve(true); } catch (error) { return false; } diff --git a/qodana.yaml b/qodana.yaml deleted file mode 100644 index 96eb5452..00000000 --- a/qodana.yaml +++ /dev/null @@ -1,9 +0,0 @@ -version: '1.0' -linter: jetbrains/qodana-js:2023.3 -exclude: - - name: All - paths: - - .yarn/ - - name: JSIgnoredPromiseFromCall -include: - - name: Eslint From d0904155871418b6c0bf8677d3b76a67798f2399 Mon Sep 17 00:00:00 2001 From: Ignacio Santise Date: Thu, 6 Jun 2024 17:00:17 -0300 Subject: [PATCH 05/18] chore: added identity lookup to ethers packages (#169) --- packages/ethers/src/client.ts | 33 ++++++++++++++++++++++----------- packages/ethers5/src/client.ts | 33 ++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts index c89fb060..b9094ace 100644 --- a/packages/ethers/src/client.ts +++ b/packages/ethers/src/client.ts @@ -623,20 +623,31 @@ export class Web3Modal extends Web3ModalScaffold { private async syncProfile(address: Address) { const chainId = EthersStoreUtil.state.chainId; - if (chainId === 1) { - const ensProvider = new InfuraProvider('mainnet'); - const name = await ensProvider.lookupAddress(address); - const avatar = await ensProvider.getAvatar(address); + try { + const response = await this.fetchIdentity({ address }); - if (name) { - this.setProfileName(name); + if (!response) { + throw new Error('Couldnt fetch idendity'); } - if (avatar) { - this.setProfileImage(avatar); + + this.setProfileName(response.name); + this.setProfileImage(response.avatar); + } catch { + if (chainId === 1) { + const ensProvider = new InfuraProvider('mainnet'); + const name = await ensProvider.lookupAddress(address); + const avatar = await ensProvider.getAvatar(address); + + if (name) { + this.setProfileName(name); + } + if (avatar) { + this.setProfileImage(avatar); + } + } else { + this.setProfileName(undefined); + this.setProfileImage(undefined); } - } else { - this.setProfileName(undefined); - this.setProfileImage(undefined); } } diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts index 6c309f56..ee67b5c4 100644 --- a/packages/ethers5/src/client.ts +++ b/packages/ethers5/src/client.ts @@ -617,20 +617,31 @@ export class Web3Modal extends Web3ModalScaffold { private async syncProfile(address: Address) { const chainId = EthersStoreUtil.state.chainId; - if (chainId === 1) { - const ensProvider = new ethers.providers.InfuraProvider('mainnet'); - const name = await ensProvider.lookupAddress(address); - const avatar = await ensProvider.getAvatar(address); + try { + const response = await this.fetchIdentity({ address }); - if (name) { - this.setProfileName(name); + if (!response) { + throw new Error('Couldnt fetch idendity'); } - if (avatar) { - this.setProfileImage(avatar); + + this.setProfileName(response.name); + this.setProfileImage(response.avatar); + } catch (error) { + if (chainId === 1) { + const ensProvider = new ethers.providers.InfuraProvider('mainnet'); + const name = await ensProvider.lookupAddress(address); + const avatar = await ensProvider.getAvatar(address); + + if (name) { + this.setProfileName(name); + } + if (avatar) { + this.setProfileImage(avatar); + } + } else { + this.setProfileName(undefined); + this.setProfileImage(undefined); } - } else { - this.setProfileName(undefined); - this.setProfileImage(undefined); } } From 9e9481191f75d0d15ac9d2d640312fcd57e7217e Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Thu, 6 Jun 2024 17:06:50 -0300 Subject: [PATCH 06/18] chore: bumped to 2.0.0 alpha.3 --- .changeset/cuddly-masks-run.md | 18 +++++ .changeset/pre.json | 5 +- apps/gallery/CHANGELOG.md | 7 ++ apps/gallery/package.json | 4 +- apps/native-cli/CHANGELOG.md | 7 ++ apps/native-cli/package.json | 4 +- apps/native/CHANGELOG.md | 8 +++ apps/native/package.json | 6 +- packages/coinbase-ethers/CHANGELOG.md | 6 ++ packages/coinbase-ethers/package.json | 2 +- packages/coinbase-wagmi/CHANGELOG.md | 6 ++ packages/coinbase-wagmi/package.json | 2 +- packages/common/CHANGELOG.md | 7 ++ packages/common/package.json | 2 +- packages/core/CHANGELOG.md | 6 ++ packages/core/package.json | 2 +- packages/email-ethers/CHANGELOG.md | 8 +++ packages/email-ethers/package.json | 4 +- packages/email-wagmi/CHANGELOG.md | 8 +++ packages/email-wagmi/package.json | 4 +- packages/email/CHANGELOG.md | 9 +++ packages/email/package.json | 6 +- packages/ethers/CHANGELOG.md | 11 +++ packages/ethers/package.json | 10 +-- packages/ethers5/CHANGELOG.md | 11 +++ packages/ethers5/package.json | 10 +-- packages/scaffold-utils/CHANGELOG.md | 8 +++ packages/scaffold-utils/package.json | 4 +- .../scaffold-utils/src/utils/ConstantsUtil.ts | 2 +- packages/scaffold/CHANGELOG.md | 10 +++ packages/scaffold/package.json | 8 +-- packages/siwe/CHANGELOG.md | 11 +++ packages/siwe/package.json | 8 +-- packages/ui/CHANGELOG.md | 6 ++ packages/ui/package.json | 2 +- packages/wagmi/CHANGELOG.md | 11 +++ packages/wagmi/package.json | 10 +-- yarn.lock | 72 +++++++++---------- 38 files changed, 243 insertions(+), 82 deletions(-) create mode 100644 .changeset/cuddly-masks-run.md create mode 100644 packages/common/CHANGELOG.md create mode 100644 packages/siwe/CHANGELOG.md diff --git a/.changeset/cuddly-masks-run.md b/.changeset/cuddly-masks-run.md new file mode 100644 index 00000000..2eabe77c --- /dev/null +++ b/.changeset/cuddly-masks-run.md @@ -0,0 +1,18 @@ +--- +'@web3modal/coinbase-ethers-react-native': patch +'@web3modal/coinbase-wagmi-react-native': patch +'@web3modal/scaffold-utils-react-native': patch +'@web3modal/email-ethers-react-native': patch +'@web3modal/email-wagmi-react-native': patch +'@web3modal/scaffold-react-native': patch +'@web3modal/ethers5-react-native': patch +'@web3modal/common-react-native': patch +'@web3modal/ethers-react-native': patch +'@web3modal/email-react-native': patch +'@web3modal/wagmi-react-native': patch +'@web3modal/core-react-native': patch +'@web3modal/siwe-react-native': patch +'@web3modal/ui-react-native': patch +--- + +siwe + one-click auth diff --git a/.changeset/pre.json b/.changeset/pre.json index fd24411f..35e163da 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -16,9 +16,12 @@ "@web3modal/scaffold-react-native": "1.4.0", "@web3modal/scaffold-utils-react-native": "1.4.0", "@web3modal/ui-react-native": "1.4.0", - "@web3modal/wagmi-react-native": "1.4.0" + "@web3modal/wagmi-react-native": "1.4.0", + "@web3modal/common-react-native": "2.0.0-alpha.2", + "@web3modal/siwe-react-native": "2.0.0-alpha.2" }, "changesets": [ + "cuddly-masks-run", "real-timers-wash", "sixty-actors-impress", "witty-owls-sin" diff --git a/apps/gallery/CHANGELOG.md b/apps/gallery/CHANGELOG.md index 59910b18..a04ae60b 100644 --- a/apps/gallery/CHANGELOG.md +++ b/apps/gallery/CHANGELOG.md @@ -1,5 +1,12 @@ # @apps/gallery +## 1.0.7-alpha.3 + +### Patch Changes + +- Updated dependencies + - @web3modal/ui-react-native@2.0.0-alpha.3 + ## 1.0.7-alpha.2 ### Patch Changes diff --git a/apps/gallery/package.json b/apps/gallery/package.json index fb0014e1..c31e9050 100644 --- a/apps/gallery/package.json +++ b/apps/gallery/package.json @@ -1,6 +1,6 @@ { "name": "@apps/gallery", - "version": "1.0.7-alpha.2", + "version": "1.0.7-alpha.3", "main": "index.js", "private": true, "devDependencies": { @@ -33,6 +33,6 @@ }, "dependencies": { "@storybook/theming": "^7.4.6", - "@web3modal/ui-react-native": "2.0.0-alpha.2" + "@web3modal/ui-react-native": "2.0.0-alpha.3" } } diff --git a/apps/native-cli/CHANGELOG.md b/apps/native-cli/CHANGELOG.md index 15a59dd7..0ccde30f 100644 --- a/apps/native-cli/CHANGELOG.md +++ b/apps/native-cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @apps/native-cli +## 1.0.7-alpha.3 + +### Patch Changes + +- Updated dependencies + - @web3modal/wagmi-react-native@2.0.0-alpha.3 + ## 1.0.7-alpha.2 ### Patch Changes diff --git a/apps/native-cli/package.json b/apps/native-cli/package.json index f9ec630d..3fd7806e 100644 --- a/apps/native-cli/package.json +++ b/apps/native-cli/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native-cli", - "version": "1.0.7-alpha.2", + "version": "1.0.7-alpha.3", "private": true, "scripts": { "android": "react-native run-android", @@ -16,7 +16,7 @@ "@react-native-community/netinfo": "9.3.10", "@tanstack/react-query": "5.37.1", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/wagmi-react-native": "2.0.0-alpha.2", + "@web3modal/wagmi-react-native": "2.0.0-alpha.3", "react": "18.2.0", "react-native": "0.72.6", "react-native-get-random-values": "~1.9.0", diff --git a/apps/native/CHANGELOG.md b/apps/native/CHANGELOG.md index 3c71c56c..1e13a17b 100644 --- a/apps/native/CHANGELOG.md +++ b/apps/native/CHANGELOG.md @@ -1,5 +1,13 @@ # @apps/native +## 1.0.7-alpha.3 + +### Patch Changes + +- Updated dependencies + - @web3modal/email-wagmi-react-native@2.0.0-alpha.3 + - @web3modal/wagmi-react-native@2.0.0-alpha.3 + ## 1.0.7-alpha.2 ### Patch Changes diff --git a/apps/native/package.json b/apps/native/package.json index bda5dfe4..559bb923 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native", - "version": "1.0.7-alpha.2", + "version": "1.0.7-alpha.3", "main": "index.js", "private": true, "scripts": { @@ -21,8 +21,8 @@ "@tanstack/react-query": "5.37.1", "@tanstack/react-query-persist-client": "^5.40.0", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/email-wagmi-react-native": "2.0.0-alpha.2", - "@web3modal/wagmi-react-native": "2.0.0-alpha.2", + "@web3modal/email-wagmi-react-native": "2.0.0-alpha.3", + "@web3modal/wagmi-react-native": "2.0.0-alpha.3", "expo": "^50.0.14", "expo-application": "~5.8.3", "expo-clipboard": "~5.0.1", diff --git a/packages/coinbase-ethers/CHANGELOG.md b/packages/coinbase-ethers/CHANGELOG.md index 339652e2..551e85f9 100644 --- a/packages/coinbase-ethers/CHANGELOG.md +++ b/packages/coinbase-ethers/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/coinbase-ethers-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/coinbase-ethers/package.json b/packages/coinbase-ethers/package.json index 712413dc..92a31f8f 100644 --- a/packages/coinbase-ethers/package.json +++ b/packages/coinbase-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-ethers-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/coinbase-wagmi/CHANGELOG.md b/packages/coinbase-wagmi/CHANGELOG.md index 62b197a0..26bbe29f 100644 --- a/packages/coinbase-wagmi/CHANGELOG.md +++ b/packages/coinbase-wagmi/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/coinbase-wagmi/package.json b/packages/coinbase-wagmi/package.json index 0c9eed24..6e98a9a1 100644 --- a/packages/coinbase-wagmi/package.json +++ b/packages/coinbase-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-wagmi-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md new file mode 100644 index 00000000..ea4204ae --- /dev/null +++ b/packages/common/CHANGELOG.md @@ -0,0 +1,7 @@ +# @web3modal/common-react-native + +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth diff --git a/packages/common/package.json b/packages/common/package.json index 929777b4..83ba60b4 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/common-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index d8452f80..0061f263 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/core-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 9723719c..97a5d6d0 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/core-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/email-ethers/CHANGELOG.md b/packages/email-ethers/CHANGELOG.md index a4e68027..3a0efb8d 100644 --- a/packages/email-ethers/CHANGELOG.md +++ b/packages/email-ethers/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/email-ethers/package.json b/packages/email-ethers/package.json index 60e6b534..d264e832 100644 --- a/packages/email-ethers/package.json +++ b/packages/email-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-ethers-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.2" + "@web3modal/email-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "ethers": ">=5" diff --git a/packages/email-wagmi/CHANGELOG.md b/packages/email-wagmi/CHANGELOG.md index a4e68027..3a0efb8d 100644 --- a/packages/email-wagmi/CHANGELOG.md +++ b/packages/email-wagmi/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/email-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/email-wagmi/package.json b/packages/email-wagmi/package.json index f98968eb..0cdac3f6 100644 --- a/packages/email-wagmi/package.json +++ b/packages/email-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-wagmi-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.2" + "@web3modal/email-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "wagmi": ">=2" diff --git a/packages/email/CHANGELOG.md b/packages/email/CHANGELOG.md index f1130605..4e3762f1 100644 --- a/packages/email/CHANGELOG.md +++ b/packages/email/CHANGELOG.md @@ -1,5 +1,14 @@ # @web3modal/email-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.3 + - @web3modal/ui-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/email/package.json b/packages/email/package.json index 3d00b7cb..ae766b29 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -36,8 +36,8 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.2", - "@web3modal/ui-react-native": "2.0.0-alpha.2", + "@web3modal/core-react-native": "2.0.0-alpha.3", + "@web3modal/ui-react-native": "2.0.0-alpha.3", "zod": "3.22.4" }, "peerDependencies": { diff --git a/packages/ethers/CHANGELOG.md b/packages/ethers/CHANGELOG.md index c35f4b1f..22f40f95 100644 --- a/packages/ethers/CHANGELOG.md +++ b/packages/ethers/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/ethers5-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 + - @web3modal/scaffold-react-native@2.0.0-alpha.3 + - @web3modal/common-react-native@2.0.0-alpha.3 + - @web3modal/siwe-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/ethers/package.json b/packages/ethers/package.json index 3f598d86..97040ff4 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", - "@web3modal/siwe-react-native": "2.0.0-alpha.2" + "@web3modal/common-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", + "@web3modal/siwe-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/ethers5/CHANGELOG.md b/packages/ethers5/CHANGELOG.md index 1823049e..0ef99cc0 100644 --- a/packages/ethers5/CHANGELOG.md +++ b/packages/ethers5/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/ethers5-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 + - @web3modal/scaffold-react-native@2.0.0-alpha.3 + - @web3modal/common-react-native@2.0.0-alpha.3 + - @web3modal/siwe-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/ethers5/package.json b/packages/ethers5/package.json index 7d12aa2f..ee5be883 100644 --- a/packages/ethers5/package.json +++ b/packages/ethers5/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers5-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", - "@web3modal/siwe-react-native": "2.0.0-alpha.2" + "@web3modal/common-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", + "@web3modal/siwe-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/scaffold-utils/CHANGELOG.md b/packages/scaffold-utils/CHANGELOG.md index 40015b86..11d6b0d7 100644 --- a/packages/scaffold-utils/CHANGELOG.md +++ b/packages/scaffold-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/scaffold-utils-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/scaffold-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/scaffold-utils/package.json b/packages/scaffold-utils/package.json index 19d01bc5..a989ff28 100644 --- a/packages/scaffold-utils/package.json +++ b/packages/scaffold-utils/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-utils-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -35,7 +35,7 @@ "access": "public" }, "dependencies": { - "@web3modal/scaffold-react-native": "2.0.0-alpha.2" + "@web3modal/scaffold-react-native": "2.0.0-alpha.3" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/scaffold-utils/src/utils/ConstantsUtil.ts b/packages/scaffold-utils/src/utils/ConstantsUtil.ts index ceb47b80..1a3a2b07 100644 --- a/packages/scaffold-utils/src/utils/ConstantsUtil.ts +++ b/packages/scaffold-utils/src/utils/ConstantsUtil.ts @@ -1,5 +1,5 @@ export const ConstantsUtil = { - VERSION: '2.0.0-alpha.2', + VERSION: '2.0.0-alpha.3', WALLET_CONNECT_CONNECTOR_ID: 'walletConnect', COINBASE_CONNECTOR_ID: 'coinbaseWallet', EMAIL_CONNECTOR_ID: 'w3mEmail', diff --git a/packages/scaffold/CHANGELOG.md b/packages/scaffold/CHANGELOG.md index a641addd..cb78013b 100644 --- a/packages/scaffold/CHANGELOG.md +++ b/packages/scaffold/CHANGELOG.md @@ -1,5 +1,15 @@ # @web3modal/scaffold-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/core-react-native@2.0.0-alpha.3 + - @web3modal/siwe-react-native@2.0.0-alpha.3 + - @web3modal/ui-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/scaffold/package.json b/packages/scaffold/package.json index a191afc9..b99e5220 100644 --- a/packages/scaffold/package.json +++ b/packages/scaffold/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,9 +37,9 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.2", - "@web3modal/siwe-react-native": "2.0.0-alpha.2", - "@web3modal/ui-react-native": "2.0.0-alpha.2" + "@web3modal/core-react-native": "2.0.0-alpha.3", + "@web3modal/siwe-react-native": "2.0.0-alpha.3", + "@web3modal/ui-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "react": ">=17", diff --git a/packages/siwe/CHANGELOG.md b/packages/siwe/CHANGELOG.md new file mode 100644 index 00000000..eadcd5f9 --- /dev/null +++ b/packages/siwe/CHANGELOG.md @@ -0,0 +1,11 @@ +# @web3modal/siwe-react-native + +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/common-react-native@2.0.0-alpha.3 + - @web3modal/core-react-native@2.0.0-alpha.3 + - @web3modal/ui-react-native@2.0.0-alpha.3 diff --git a/packages/siwe/package.json b/packages/siwe/package.json index 844fdc4b..0fec9223 100644 --- a/packages/siwe/package.json +++ b/packages/siwe/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/siwe-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -40,9 +40,9 @@ }, "dependencies": { "@walletconnect/utils": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.2", - "@web3modal/core-react-native": "2.0.0-alpha.2", - "@web3modal/ui-react-native": "2.0.0-alpha.2", + "@web3modal/common-react-native": "2.0.0-alpha.3", + "@web3modal/core-react-native": "2.0.0-alpha.3", + "@web3modal/ui-react-native": "2.0.0-alpha.3", "valtio": "1.10.5" }, "react-native": "src/index.ts", diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 5cb1441b..76a1fcce 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/ui-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/ui/package.json b/packages/ui/package.json index 499bcea5..8c311dfb 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ui-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/wagmi/CHANGELOG.md b/packages/wagmi/CHANGELOG.md index 9341a608..1befb320 100644 --- a/packages/wagmi/CHANGELOG.md +++ b/packages/wagmi/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/wagmi-react-native +## 2.0.0-alpha.3 + +### Patch Changes + +- siwe + one-click auth +- Updated dependencies + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 + - @web3modal/scaffold-react-native@2.0.0-alpha.3 + - @web3modal/common-react-native@2.0.0-alpha.3 + - @web3modal/siwe-react-native@2.0.0-alpha.3 + ## 2.0.0-alpha.2 ### Patch Changes diff --git a/packages/wagmi/package.json b/packages/wagmi/package.json index 13193604..d37d35d6 100644 --- a/packages/wagmi/package.json +++ b/packages/wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/wagmi-react-native", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,10 +38,10 @@ "access": "public" }, "dependencies": { - "@web3modal/common-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-react-native": "2.0.0-alpha.2", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.2", - "@web3modal/siwe-react-native": "2.0.0-alpha.2" + "@web3modal/common-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-react-native": "2.0.0-alpha.3", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", + "@web3modal/siwe-react-native": "2.0.0-alpha.3" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/yarn.lock b/yarn.lock index 0a6932c9..203701e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,7 +58,7 @@ __metadata: "@storybook/react-webpack5": "npm:^7.4.6" "@storybook/testing-library": "npm:^0.2.2" "@storybook/theming": "npm:^7.4.6" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" babel-plugin-react-native-web: "npm:^0.19.7" babel-plugin-react-require: "npm:^4.0.1" metro-react-native-babel-preset: "npm:^0.77.0" @@ -89,7 +89,7 @@ __metadata: "@types/react": "npm:^18.0.24" "@types/react-test-renderer": "npm:^18.0.0" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.2" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.3" babel-jest: "npm:^29.2.1" babel-plugin-module-resolver: "npm:^5.0.0" eslint: "npm:^8.19.0" @@ -122,8 +122,8 @@ __metadata: "@types/react": "npm:~18.2.45" "@types/react-native": "npm:0.72.2" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.2" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.2" + "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.3" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.3" babel-plugin-module-resolver: "npm:^5.0.0" expo: "npm:^50.0.14" expo-application: "npm:~5.8.3" @@ -10417,13 +10417,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/common-react-native@npm:2.0.0-alpha.2, @web3modal/common-react-native@workspace:packages/common": +"@web3modal/common-react-native@npm:2.0.0-alpha.3, @web3modal/common-react-native@workspace:packages/common": version: 0.0.0-use.local resolution: "@web3modal/common-react-native@workspace:packages/common" languageName: unknown linkType: soft -"@web3modal/core-react-native@npm:2.0.0-alpha.2, @web3modal/core-react-native@workspace:packages/core": +"@web3modal/core-react-native@npm:2.0.0-alpha.3, @web3modal/core-react-native@workspace:packages/core": version: 0.0.0-use.local resolution: "@web3modal/core-react-native@workspace:packages/core" dependencies: @@ -10440,18 +10440,18 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/email-ethers-react-native@workspace:packages/email-ethers" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.2" + "@web3modal/email-react-native": "npm:2.0.0-alpha.3" peerDependencies: ethers: ">=5" languageName: unknown linkType: soft -"@web3modal/email-react-native@npm:2.0.0-alpha.2, @web3modal/email-react-native@workspace:packages/email": +"@web3modal/email-react-native@npm:2.0.0-alpha.3, @web3modal/email-react-native@workspace:packages/email": version: 0.0.0-use.local resolution: "@web3modal/email-react-native@workspace:packages/email" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.2" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" + "@web3modal/core-react-native": "npm:2.0.0-alpha.3" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" zod: "npm:3.22.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10459,11 +10459,11 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.2, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": +"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.3, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": version: 0.0.0-use.local resolution: "@web3modal/email-wagmi-react-native@workspace:packages/email-wagmi" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.2" + "@web3modal/email-react-native": "npm:2.0.0-alpha.3" peerDependencies: wagmi: ">=2" languageName: unknown @@ -10474,10 +10474,10 @@ __metadata: resolution: "@web3modal/ethers-react-native@workspace:packages/ethers" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" + "@web3modal/common-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" ethers: "npm:6.10.0" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10495,10 +10495,10 @@ __metadata: resolution: "@web3modal/ethers5-react-native@workspace:packages/ethers5" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" + "@web3modal/common-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" ethers: "npm:5.7.2" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10511,13 +10511,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-react-native@npm:2.0.0-alpha.2, @web3modal/scaffold-react-native@workspace:packages/scaffold": +"@web3modal/scaffold-react-native@npm:2.0.0-alpha.3, @web3modal/scaffold-react-native@workspace:packages/scaffold": version: 0.0.0-use.local resolution: "@web3modal/scaffold-react-native@workspace:packages/scaffold" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.2" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" + "@web3modal/core-react-native": "npm:2.0.0-alpha.3" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" peerDependencies: react: ">=17" react-native: ">=0.68.5" @@ -10525,27 +10525,27 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.2, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": +"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.3, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": version: 0.0.0-use.local resolution: "@web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils" dependencies: - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" languageName: unknown linkType: soft -"@web3modal/siwe-react-native@npm:2.0.0-alpha.2, @web3modal/siwe-react-native@workspace:packages/siwe": +"@web3modal/siwe-react-native@npm:2.0.0-alpha.3, @web3modal/siwe-react-native@workspace:packages/siwe": version: 0.0.0-use.local resolution: "@web3modal/siwe-react-native@workspace:packages/siwe" dependencies: "@walletconnect/utils": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.2" - "@web3modal/core-react-native": "npm:2.0.0-alpha.2" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.2" + "@web3modal/common-react-native": "npm:2.0.0-alpha.3" + "@web3modal/core-react-native": "npm:2.0.0-alpha.3" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" valtio: "npm:1.10.5" languageName: unknown linkType: soft -"@web3modal/ui-react-native@npm:2.0.0-alpha.2, @web3modal/ui-react-native@workspace:packages/ui": +"@web3modal/ui-react-native@npm:2.0.0-alpha.3, @web3modal/ui-react-native@workspace:packages/ui": version: 0.0.0-use.local resolution: "@web3modal/ui-react-native@workspace:packages/ui" dependencies: @@ -10557,14 +10557,14 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/wagmi-react-native@npm:2.0.0-alpha.2, @web3modal/wagmi-react-native@workspace:packages/wagmi": +"@web3modal/wagmi-react-native@npm:2.0.0-alpha.3, @web3modal/wagmi-react-native@workspace:packages/wagmi": version: 0.0.0-use.local resolution: "@web3modal/wagmi-react-native@workspace:packages/wagmi" dependencies: - "@web3modal/common-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.2" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.2" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.2" + "@web3modal/common-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" From aa7fa5db7ce00f3016974b23dc14ce583df5a758 Mon Sep 17 00:00:00 2001 From: Ignacio Santise Date: Fri, 7 Jun 2024 14:25:26 -0300 Subject: [PATCH 07/18] fix: siwe email (#170) --- .changeset/dull-eels-rule.md | 18 ++++++ apps/native/src/utils/SiweUtils.ts | 30 ++++++---- .../src/controllers/ConnectionController.ts | 6 ++ .../scaffold/src/modal/w3m-modal/index.tsx | 55 +++++++++++-------- .../partials/w3m-connecting-qrcode/index.tsx | 8 +-- packages/scaffold/src/utils/UiUtil.ts | 5 +- .../w3m-connecting-external-view/index.tsx | 5 +- 7 files changed, 79 insertions(+), 48 deletions(-) create mode 100644 .changeset/dull-eels-rule.md diff --git a/.changeset/dull-eels-rule.md b/.changeset/dull-eels-rule.md new file mode 100644 index 00000000..94dfdb31 --- /dev/null +++ b/.changeset/dull-eels-rule.md @@ -0,0 +1,18 @@ +--- +'@web3modal/coinbase-ethers-react-native': patch +'@web3modal/coinbase-wagmi-react-native': patch +'@web3modal/scaffold-utils-react-native': patch +'@web3modal/email-ethers-react-native': patch +'@web3modal/email-wagmi-react-native': patch +'@web3modal/scaffold-react-native': patch +'@web3modal/ethers5-react-native': patch +'@web3modal/common-react-native': patch +'@web3modal/ethers-react-native': patch +'@web3modal/email-react-native': patch +'@web3modal/wagmi-react-native': patch +'@web3modal/core-react-native': patch +'@web3modal/siwe-react-native': patch +'@web3modal/ui-react-native': patch +--- + +fix: email + siwe diff --git a/apps/native/src/utils/SiweUtils.ts b/apps/native/src/utils/SiweUtils.ts index 80f2ff6f..b75de20c 100644 --- a/apps/native/src/utils/SiweUtils.ts +++ b/apps/native/src/utils/SiweUtils.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ + import { generateRandomBytes32 } from '@walletconnect/utils'; import { createSIWEConfig, @@ -6,6 +8,9 @@ import { type SIWECreateMessageArgs } from '@web3modal/siwe-react-native'; import { chains } from './WagmiUtils'; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +const LOGGED_IN_KEY = '@w3mwagmi/logged_in'; export const siweConfig = createSIWEConfig({ signOutOnAccountChange: false, @@ -40,26 +45,31 @@ export const siweConfig = createSIWEConfig({ // The backend session should store the associated address and chainId // and return it via the `getSession` method. - return Promise.resolve({ - address: '0x', - chainId: 1 - }); + const logged = await AsyncStorage.getItem(LOGGED_IN_KEY); + if (logged === 'true') { + return { + address: '0x', + chainId: 1 + }; + } + + return null; }, - // eslint-disable-next-line @typescript-eslint/no-unused-vars + verifyMessage: async ({ message, signature, cacao }: SIWEVerifyMessageArgs): Promise => { // This function ensures the message is valid, // has not been tampered with, and has been appropriately // signed by the wallet address. + // Just a mock. You should save a token or whatever your backend needs + await AsyncStorage.setItem(LOGGED_IN_KEY, 'true'); + return true; }, signOut: async (): Promise => { // The users session must be destroyed when calling `signOut`. + await AsyncStorage.removeItem(LOGGED_IN_KEY); - try { - return await Promise.resolve(true); - } catch (error) { - return false; - } + return true; } }); diff --git a/packages/core/src/controllers/ConnectionController.ts b/packages/core/src/controllers/ConnectionController.ts index 7ae80644..f4dca322 100644 --- a/packages/core/src/controllers/ConnectionController.ts +++ b/packages/core/src/controllers/ConnectionController.ts @@ -124,6 +124,12 @@ export const ConnectionController = { async setConnectedWalletImageUrl(url: ConnectionControllerState['connectedWalletImageUrl']) { state.connectedWalletImageUrl = url; + + if (url) { + await StorageUtil.setConnectedWalletImageUrl(url); + } else { + StorageUtil.removeConnectedWalletImageUrl(); + } }, async disconnect() { diff --git a/packages/scaffold/src/modal/w3m-modal/index.tsx b/packages/scaffold/src/modal/w3m-modal/index.tsx index 697e942a..50bc175c 100644 --- a/packages/scaffold/src/modal/w3m-modal/index.tsx +++ b/packages/scaffold/src/modal/w3m-modal/index.tsx @@ -61,11 +61,17 @@ export function Web3Modal() { } }; + const onSiweSignOut = useCallback(async () => { + const { SIWEController } = await import('@web3modal/siwe-react-native'); + await SIWEController.signOut(); + onSiweNavigation(); + }, []); + const onNewAddress = useCallback( async (prevAddr?: CaipAddress, newAddr?: CaipAddress) => { setCurrentAddress(newAddr); - if (!prevAddr || !newAddr) { + if (!newAddr) { return; } @@ -75,35 +81,35 @@ export function Web3Modal() { const previousNetworkId = CoreHelperUtil.getNetworkId(prevAddr); const newNetworkId = CoreHelperUtil.getNetworkId(newAddr); const { SIWEController } = await import('@web3modal/siwe-react-native'); + const { signOutOnAccountChange, signOutOnNetworkChange } = + SIWEController.state._client?.options ?? {}; const session = await SIWEController.getSession(); - // If the address has changed and signOnAccountChange is enabled, sign out - if (session && previousAddress && newAddress && previousAddress !== newAddress) { - if (SIWEController.state._client?.options.signOutOnAccountChange) { - await SIWEController.signOut(); - onSiweNavigation(); - } - - return; - } - - // If the network has changed and signOnNetworkChange is enabled, sign out - if (session && previousNetworkId && newNetworkId && previousNetworkId !== newNetworkId) { - if (SIWEController.state._client?.options.signOutOnNetworkChange) { - await SIWEController.signOut(); - onSiweNavigation(); - } - - return; - } - - // If it's connected but there's no session, show sign view - if (!session) { + if ( + session && + previousAddress && + newAddress && + previousAddress !== newAddress && + signOutOnAccountChange + ) { + // If the address has changed and signOnAccountChange is enabled, sign out + onSiweSignOut(); + } else if ( + session && + previousNetworkId && + newNetworkId && + previousNetworkId !== newNetworkId && + signOutOnNetworkChange + ) { + // If the network has changed and signOnNetworkChange is enabled, sign out + onSiweSignOut(); + } else if (!session) { + // If it's connected but there's no session, show sign view onSiweNavigation(); } } }, - [isSiweEnabled] + [isSiweEnabled, onSiweSignOut] ); const onSiweNavigation = () => { @@ -134,6 +140,7 @@ export function Web3Modal() { {hasEmail && EmailView && } c.type === 'WALLET_CONNECT'); const url = AssetUtil.getConnectorImage(connector); - if (url) { - StorageUtil.setConnectedWalletImageUrl(url); - ConnectionController.setConnectedWalletImageUrl(url); - } + ConnectionController.setConnectedWalletImageUrl(url); }; useEffect(() => { diff --git a/packages/scaffold/src/utils/UiUtil.ts b/packages/scaffold/src/utils/UiUtil.ts index 86a97cc6..928943cd 100644 --- a/packages/scaffold/src/utils/UiUtil.ts +++ b/packages/scaffold/src/utils/UiUtil.ts @@ -25,10 +25,7 @@ export const UiUtil = { ConnectionController.setRecentWallets(recentWallets); } const url = AssetUtil.getWalletImage(pressedWallet); - if (url) { - StorageUtil.setConnectedWalletImageUrl(url); - ConnectionController.setConnectedWalletImageUrl(url); - } + ConnectionController.setConnectedWalletImageUrl(url); } } }; diff --git a/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx b/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx index 7b88dfb8..ff0f5313 100644 --- a/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx +++ b/packages/scaffold/src/views/w3m-connecting-external-view/index.tsx @@ -39,10 +39,7 @@ export function ConnectingExternalView() { } if (connector) { const url = AssetUtil.getConnectorImage(connector); - if (url) { - StorageUtil.setConnectedWalletImageUrl(url); - ConnectionController.setConnectedWalletImageUrl(url); - } + ConnectionController.setConnectedWalletImageUrl(url); } }, [connector] From 6cee567d2082d24dd088ead5aa72263240035b55 Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Fri, 7 Jun 2024 14:27:34 -0300 Subject: [PATCH 08/18] chore: added comment on mocked siwe utils --- apps/native/src/utils/SiweUtils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/native/src/utils/SiweUtils.ts b/apps/native/src/utils/SiweUtils.ts index b75de20c..68f5417a 100644 --- a/apps/native/src/utils/SiweUtils.ts +++ b/apps/native/src/utils/SiweUtils.ts @@ -61,6 +61,9 @@ export const siweConfig = createSIWEConfig({ // has not been tampered with, and has been appropriately // signed by the wallet address. + // Call your sign-in backend function here and save the session + // api.signIn({ message, signature, cacao }); + // Just a mock. You should save a token or whatever your backend needs await AsyncStorage.setItem(LOGGED_IN_KEY, 'true'); From 3315f63a7d64355d68e9f3a684f47ff217159261 Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Fri, 7 Jun 2024 14:59:23 -0300 Subject: [PATCH 09/18] fix: coverscreen issue on android --- packages/scaffold/src/modal/w3m-modal/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/scaffold/src/modal/w3m-modal/index.tsx b/packages/scaffold/src/modal/w3m-modal/index.tsx index 50bc175c..771ea0e8 100644 --- a/packages/scaffold/src/modal/w3m-modal/index.tsx +++ b/packages/scaffold/src/modal/w3m-modal/index.tsx @@ -25,7 +25,7 @@ import styles from './styles'; export function Web3Modal() { const { open, loading } = useSnapshot(ModalController.state); - const { history } = useSnapshot(RouterController.state); + const { history, view } = useSnapshot(RouterController.state); const { connectors } = useSnapshot(ConnectorController.state); const { caipAddress, isConnected } = useSnapshot(AccountController.state); const { isSiweEnabled } = OptionsController.state; @@ -36,6 +36,7 @@ export function Web3Modal() { const landScapeHeight = height * 0.95 - (StatusBar.currentHeight ?? 0); const hasEmail = connectors.some(c => c.type === 'EMAIL'); const emailProvider = connectors.find(c => c.type === 'EMAIL')?.provider as W3mFrameProvider; + const modalCoverScreen = view !== 'ConnectingSiwe'; const EmailView = emailProvider?.EmailView; const onBackButtonPress = () => { @@ -140,7 +141,7 @@ export function Web3Modal() { {hasEmail && EmailView && } Date: Fri, 7 Jun 2024 15:03:16 -0300 Subject: [PATCH 10/18] chore: bump to 2.0.0-alpha.4 --- .changeset/pre.json | 1 + apps/gallery/CHANGELOG.md | 7 ++ apps/gallery/package.json | 4 +- apps/native-cli/CHANGELOG.md | 7 ++ apps/native-cli/package.json | 4 +- apps/native/CHANGELOG.md | 8 +++ apps/native/package.json | 6 +- packages/coinbase-ethers/CHANGELOG.md | 6 ++ packages/coinbase-ethers/package.json | 2 +- packages/coinbase-wagmi/CHANGELOG.md | 6 ++ packages/coinbase-wagmi/package.json | 2 +- packages/common/CHANGELOG.md | 6 ++ packages/common/package.json | 2 +- packages/core/CHANGELOG.md | 6 ++ packages/core/package.json | 2 +- packages/email-ethers/CHANGELOG.md | 8 +++ packages/email-ethers/package.json | 4 +- packages/email-wagmi/CHANGELOG.md | 8 +++ packages/email-wagmi/package.json | 4 +- packages/email/CHANGELOG.md | 9 +++ packages/email/package.json | 6 +- packages/ethers/CHANGELOG.md | 11 +++ packages/ethers/package.json | 10 +-- packages/ethers5/CHANGELOG.md | 11 +++ packages/ethers5/package.json | 10 +-- packages/scaffold-utils/CHANGELOG.md | 8 +++ packages/scaffold-utils/package.json | 4 +- .../scaffold-utils/src/utils/ConstantsUtil.ts | 2 +- packages/scaffold/CHANGELOG.md | 10 +++ packages/scaffold/package.json | 8 +-- packages/siwe/CHANGELOG.md | 10 +++ packages/siwe/package.json | 8 +-- packages/ui/CHANGELOG.md | 6 ++ packages/ui/package.json | 2 +- packages/wagmi/CHANGELOG.md | 11 +++ packages/wagmi/package.json | 10 +-- yarn.lock | 72 +++++++++---------- 37 files changed, 220 insertions(+), 81 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 35e163da..5e3a1767 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -22,6 +22,7 @@ }, "changesets": [ "cuddly-masks-run", + "dull-eels-rule", "real-timers-wash", "sixty-actors-impress", "witty-owls-sin" diff --git a/apps/gallery/CHANGELOG.md b/apps/gallery/CHANGELOG.md index a04ae60b..e80bca2d 100644 --- a/apps/gallery/CHANGELOG.md +++ b/apps/gallery/CHANGELOG.md @@ -1,5 +1,12 @@ # @apps/gallery +## 1.0.7-alpha.4 + +### Patch Changes + +- Updated dependencies [aa7fa5d] + - @web3modal/ui-react-native@2.0.0-alpha.4 + ## 1.0.7-alpha.3 ### Patch Changes diff --git a/apps/gallery/package.json b/apps/gallery/package.json index c31e9050..b18c1848 100644 --- a/apps/gallery/package.json +++ b/apps/gallery/package.json @@ -1,6 +1,6 @@ { "name": "@apps/gallery", - "version": "1.0.7-alpha.3", + "version": "1.0.7-alpha.4", "main": "index.js", "private": true, "devDependencies": { @@ -33,6 +33,6 @@ }, "dependencies": { "@storybook/theming": "^7.4.6", - "@web3modal/ui-react-native": "2.0.0-alpha.3" + "@web3modal/ui-react-native": "2.0.0-alpha.4" } } diff --git a/apps/native-cli/CHANGELOG.md b/apps/native-cli/CHANGELOG.md index 0ccde30f..0bbd5a03 100644 --- a/apps/native-cli/CHANGELOG.md +++ b/apps/native-cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @apps/native-cli +## 1.0.7-alpha.4 + +### Patch Changes + +- Updated dependencies [aa7fa5d] + - @web3modal/wagmi-react-native@2.0.0-alpha.4 + ## 1.0.7-alpha.3 ### Patch Changes diff --git a/apps/native-cli/package.json b/apps/native-cli/package.json index 3fd7806e..cc996358 100644 --- a/apps/native-cli/package.json +++ b/apps/native-cli/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native-cli", - "version": "1.0.7-alpha.3", + "version": "1.0.7-alpha.4", "private": true, "scripts": { "android": "react-native run-android", @@ -16,7 +16,7 @@ "@react-native-community/netinfo": "9.3.10", "@tanstack/react-query": "5.37.1", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/wagmi-react-native": "2.0.0-alpha.3", + "@web3modal/wagmi-react-native": "2.0.0-alpha.4", "react": "18.2.0", "react-native": "0.72.6", "react-native-get-random-values": "~1.9.0", diff --git a/apps/native/CHANGELOG.md b/apps/native/CHANGELOG.md index 1e13a17b..42213c45 100644 --- a/apps/native/CHANGELOG.md +++ b/apps/native/CHANGELOG.md @@ -1,5 +1,13 @@ # @apps/native +## 1.0.7-alpha.4 + +### Patch Changes + +- Updated dependencies [aa7fa5d] + - @web3modal/email-wagmi-react-native@2.0.0-alpha.4 + - @web3modal/wagmi-react-native@2.0.0-alpha.4 + ## 1.0.7-alpha.3 ### Patch Changes diff --git a/apps/native/package.json b/apps/native/package.json index 559bb923..33ceda65 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -1,6 +1,6 @@ { "name": "@apps/native", - "version": "1.0.7-alpha.3", + "version": "1.0.7-alpha.4", "main": "index.js", "private": true, "scripts": { @@ -21,8 +21,8 @@ "@tanstack/react-query": "5.37.1", "@tanstack/react-query-persist-client": "^5.40.0", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/email-wagmi-react-native": "2.0.0-alpha.3", - "@web3modal/wagmi-react-native": "2.0.0-alpha.3", + "@web3modal/email-wagmi-react-native": "2.0.0-alpha.4", + "@web3modal/wagmi-react-native": "2.0.0-alpha.4", "expo": "^50.0.14", "expo-application": "~5.8.3", "expo-clipboard": "~5.0.1", diff --git a/packages/coinbase-ethers/CHANGELOG.md b/packages/coinbase-ethers/CHANGELOG.md index 551e85f9..7a7f8c9a 100644 --- a/packages/coinbase-ethers/CHANGELOG.md +++ b/packages/coinbase-ethers/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/coinbase-ethers-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/coinbase-ethers/package.json b/packages/coinbase-ethers/package.json index 92a31f8f..81d46cf4 100644 --- a/packages/coinbase-ethers/package.json +++ b/packages/coinbase-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-ethers-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/coinbase-wagmi/CHANGELOG.md b/packages/coinbase-wagmi/CHANGELOG.md index 26bbe29f..81b1a153 100644 --- a/packages/coinbase-wagmi/CHANGELOG.md +++ b/packages/coinbase-wagmi/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/coinbase-wagmi/package.json b/packages/coinbase-wagmi/package.json index 6e98a9a1..026c2d59 100644 --- a/packages/coinbase-wagmi/package.json +++ b/packages/coinbase-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-wagmi-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index ea4204ae..007ef907 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/common-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index 83ba60b4..579b3bab 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/common-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 0061f263..116623c5 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/core-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 97a5d6d0..abdbad90 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/core-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/email-ethers/CHANGELOG.md b/packages/email-ethers/CHANGELOG.md index 3a0efb8d..ec898c09 100644 --- a/packages/email-ethers/CHANGELOG.md +++ b/packages/email-ethers/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/email-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/email-ethers/package.json b/packages/email-ethers/package.json index d264e832..0d909ba4 100644 --- a/packages/email-ethers/package.json +++ b/packages/email-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-ethers-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.3" + "@web3modal/email-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "ethers": ">=5" diff --git a/packages/email-wagmi/CHANGELOG.md b/packages/email-wagmi/CHANGELOG.md index 3a0efb8d..ec898c09 100644 --- a/packages/email-wagmi/CHANGELOG.md +++ b/packages/email-wagmi/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/coinbase-wagmi-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/email-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/email-wagmi/package.json b/packages/email-wagmi/package.json index 0cdac3f6..a54c6fd5 100644 --- a/packages/email-wagmi/package.json +++ b/packages/email-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-wagmi-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.3" + "@web3modal/email-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "wagmi": ">=2" diff --git a/packages/email/CHANGELOG.md b/packages/email/CHANGELOG.md index 4e3762f1..50615595 100644 --- a/packages/email/CHANGELOG.md +++ b/packages/email/CHANGELOG.md @@ -1,5 +1,14 @@ # @web3modal/email-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/core-react-native@2.0.0-alpha.4 + - @web3modal/ui-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/email/package.json b/packages/email/package.json index ae766b29..9d74451c 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -36,8 +36,8 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.3", - "@web3modal/ui-react-native": "2.0.0-alpha.3", + "@web3modal/core-react-native": "2.0.0-alpha.4", + "@web3modal/ui-react-native": "2.0.0-alpha.4", "zod": "3.22.4" }, "peerDependencies": { diff --git a/packages/ethers/CHANGELOG.md b/packages/ethers/CHANGELOG.md index 22f40f95..7a689a22 100644 --- a/packages/ethers/CHANGELOG.md +++ b/packages/ethers/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/ethers5-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 + - @web3modal/scaffold-react-native@2.0.0-alpha.4 + - @web3modal/common-react-native@2.0.0-alpha.4 + - @web3modal/siwe-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/ethers/package.json b/packages/ethers/package.json index 97040ff4..2abcb6b5 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", - "@web3modal/siwe-react-native": "2.0.0-alpha.3" + "@web3modal/common-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", + "@web3modal/siwe-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/ethers5/CHANGELOG.md b/packages/ethers5/CHANGELOG.md index 0ef99cc0..00548dc8 100644 --- a/packages/ethers5/CHANGELOG.md +++ b/packages/ethers5/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/ethers5-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 + - @web3modal/scaffold-react-native@2.0.0-alpha.4 + - @web3modal/common-react-native@2.0.0-alpha.4 + - @web3modal/siwe-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/ethers5/package.json b/packages/ethers5/package.json index ee5be883..afae93f3 100644 --- a/packages/ethers5/package.json +++ b/packages/ethers5/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers5-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", - "@web3modal/siwe-react-native": "2.0.0-alpha.3" + "@web3modal/common-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", + "@web3modal/siwe-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/scaffold-utils/CHANGELOG.md b/packages/scaffold-utils/CHANGELOG.md index 11d6b0d7..9432cc22 100644 --- a/packages/scaffold-utils/CHANGELOG.md +++ b/packages/scaffold-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @web3modal/scaffold-utils-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/scaffold-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/scaffold-utils/package.json b/packages/scaffold-utils/package.json index a989ff28..e747b428 100644 --- a/packages/scaffold-utils/package.json +++ b/packages/scaffold-utils/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-utils-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -35,7 +35,7 @@ "access": "public" }, "dependencies": { - "@web3modal/scaffold-react-native": "2.0.0-alpha.3" + "@web3modal/scaffold-react-native": "2.0.0-alpha.4" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/scaffold-utils/src/utils/ConstantsUtil.ts b/packages/scaffold-utils/src/utils/ConstantsUtil.ts index 1a3a2b07..06f908dc 100644 --- a/packages/scaffold-utils/src/utils/ConstantsUtil.ts +++ b/packages/scaffold-utils/src/utils/ConstantsUtil.ts @@ -1,5 +1,5 @@ export const ConstantsUtil = { - VERSION: '2.0.0-alpha.3', + VERSION: '2.0.0-alpha.4', WALLET_CONNECT_CONNECTOR_ID: 'walletConnect', COINBASE_CONNECTOR_ID: 'coinbaseWallet', EMAIL_CONNECTOR_ID: 'w3mEmail', diff --git a/packages/scaffold/CHANGELOG.md b/packages/scaffold/CHANGELOG.md index cb78013b..01c0c05c 100644 --- a/packages/scaffold/CHANGELOG.md +++ b/packages/scaffold/CHANGELOG.md @@ -1,5 +1,15 @@ # @web3modal/scaffold-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/core-react-native@2.0.0-alpha.4 + - @web3modal/siwe-react-native@2.0.0-alpha.4 + - @web3modal/ui-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/scaffold/package.json b/packages/scaffold/package.json index b99e5220..f85e947c 100644 --- a/packages/scaffold/package.json +++ b/packages/scaffold/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,9 +37,9 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.3", - "@web3modal/siwe-react-native": "2.0.0-alpha.3", - "@web3modal/ui-react-native": "2.0.0-alpha.3" + "@web3modal/core-react-native": "2.0.0-alpha.4", + "@web3modal/siwe-react-native": "2.0.0-alpha.4", + "@web3modal/ui-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "react": ">=17", diff --git a/packages/siwe/CHANGELOG.md b/packages/siwe/CHANGELOG.md index eadcd5f9..cee1802e 100644 --- a/packages/siwe/CHANGELOG.md +++ b/packages/siwe/CHANGELOG.md @@ -1,5 +1,15 @@ # @web3modal/siwe-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/common-react-native@2.0.0-alpha.4 + - @web3modal/core-react-native@2.0.0-alpha.4 + - @web3modal/ui-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/siwe/package.json b/packages/siwe/package.json index 0fec9223..256d4741 100644 --- a/packages/siwe/package.json +++ b/packages/siwe/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/siwe-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -40,9 +40,9 @@ }, "dependencies": { "@walletconnect/utils": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.3", - "@web3modal/core-react-native": "2.0.0-alpha.3", - "@web3modal/ui-react-native": "2.0.0-alpha.3", + "@web3modal/common-react-native": "2.0.0-alpha.4", + "@web3modal/core-react-native": "2.0.0-alpha.4", + "@web3modal/ui-react-native": "2.0.0-alpha.4", "valtio": "1.10.5" }, "react-native": "src/index.ts", diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 76a1fcce..a3647839 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,5 +1,11 @@ # @web3modal/ui-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/ui/package.json b/packages/ui/package.json index 8c311dfb..8b848ca5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ui-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/wagmi/CHANGELOG.md b/packages/wagmi/CHANGELOG.md index 1befb320..714e91e5 100644 --- a/packages/wagmi/CHANGELOG.md +++ b/packages/wagmi/CHANGELOG.md @@ -1,5 +1,16 @@ # @web3modal/wagmi-react-native +## 2.0.0-alpha.4 + +### Patch Changes + +- aa7fa5d: fix: email + siwe +- Updated dependencies [aa7fa5d] + - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 + - @web3modal/scaffold-react-native@2.0.0-alpha.4 + - @web3modal/common-react-native@2.0.0-alpha.4 + - @web3modal/siwe-react-native@2.0.0-alpha.4 + ## 2.0.0-alpha.3 ### Patch Changes diff --git a/packages/wagmi/package.json b/packages/wagmi/package.json index d37d35d6..a62314af 100644 --- a/packages/wagmi/package.json +++ b/packages/wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/wagmi-react-native", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,10 +38,10 @@ "access": "public" }, "dependencies": { - "@web3modal/common-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-react-native": "2.0.0-alpha.3", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.3", - "@web3modal/siwe-react-native": "2.0.0-alpha.3" + "@web3modal/common-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-react-native": "2.0.0-alpha.4", + "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", + "@web3modal/siwe-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/yarn.lock b/yarn.lock index 203701e4..b8e8faa6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,7 +58,7 @@ __metadata: "@storybook/react-webpack5": "npm:^7.4.6" "@storybook/testing-library": "npm:^0.2.2" "@storybook/theming": "npm:^7.4.6" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" babel-plugin-react-native-web: "npm:^0.19.7" babel-plugin-react-require: "npm:^4.0.1" metro-react-native-babel-preset: "npm:^0.77.0" @@ -89,7 +89,7 @@ __metadata: "@types/react": "npm:^18.0.24" "@types/react-test-renderer": "npm:^18.0.0" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.3" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.4" babel-jest: "npm:^29.2.1" babel-plugin-module-resolver: "npm:^5.0.0" eslint: "npm:^8.19.0" @@ -122,8 +122,8 @@ __metadata: "@types/react": "npm:~18.2.45" "@types/react-native": "npm:0.72.2" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.3" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.3" + "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.4" + "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.4" babel-plugin-module-resolver: "npm:^5.0.0" expo: "npm:^50.0.14" expo-application: "npm:~5.8.3" @@ -10417,13 +10417,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/common-react-native@npm:2.0.0-alpha.3, @web3modal/common-react-native@workspace:packages/common": +"@web3modal/common-react-native@npm:2.0.0-alpha.4, @web3modal/common-react-native@workspace:packages/common": version: 0.0.0-use.local resolution: "@web3modal/common-react-native@workspace:packages/common" languageName: unknown linkType: soft -"@web3modal/core-react-native@npm:2.0.0-alpha.3, @web3modal/core-react-native@workspace:packages/core": +"@web3modal/core-react-native@npm:2.0.0-alpha.4, @web3modal/core-react-native@workspace:packages/core": version: 0.0.0-use.local resolution: "@web3modal/core-react-native@workspace:packages/core" dependencies: @@ -10440,18 +10440,18 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/email-ethers-react-native@workspace:packages/email-ethers" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.3" + "@web3modal/email-react-native": "npm:2.0.0-alpha.4" peerDependencies: ethers: ">=5" languageName: unknown linkType: soft -"@web3modal/email-react-native@npm:2.0.0-alpha.3, @web3modal/email-react-native@workspace:packages/email": +"@web3modal/email-react-native@npm:2.0.0-alpha.4, @web3modal/email-react-native@workspace:packages/email": version: 0.0.0-use.local resolution: "@web3modal/email-react-native@workspace:packages/email" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.3" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" + "@web3modal/core-react-native": "npm:2.0.0-alpha.4" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" zod: "npm:3.22.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10459,11 +10459,11 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.3, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": +"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.4, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": version: 0.0.0-use.local resolution: "@web3modal/email-wagmi-react-native@workspace:packages/email-wagmi" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.3" + "@web3modal/email-react-native": "npm:2.0.0-alpha.4" peerDependencies: wagmi: ">=2" languageName: unknown @@ -10474,10 +10474,10 @@ __metadata: resolution: "@web3modal/ethers-react-native@workspace:packages/ethers" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" + "@web3modal/common-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" ethers: "npm:6.10.0" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10495,10 +10495,10 @@ __metadata: resolution: "@web3modal/ethers5-react-native@workspace:packages/ethers5" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" + "@web3modal/common-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" ethers: "npm:5.7.2" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10511,13 +10511,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-react-native@npm:2.0.0-alpha.3, @web3modal/scaffold-react-native@workspace:packages/scaffold": +"@web3modal/scaffold-react-native@npm:2.0.0-alpha.4, @web3modal/scaffold-react-native@workspace:packages/scaffold": version: 0.0.0-use.local resolution: "@web3modal/scaffold-react-native@workspace:packages/scaffold" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.3" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" + "@web3modal/core-react-native": "npm:2.0.0-alpha.4" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" peerDependencies: react: ">=17" react-native: ">=0.68.5" @@ -10525,27 +10525,27 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.3, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": +"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.4, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": version: 0.0.0-use.local resolution: "@web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils" dependencies: - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" languageName: unknown linkType: soft -"@web3modal/siwe-react-native@npm:2.0.0-alpha.3, @web3modal/siwe-react-native@workspace:packages/siwe": +"@web3modal/siwe-react-native@npm:2.0.0-alpha.4, @web3modal/siwe-react-native@workspace:packages/siwe": version: 0.0.0-use.local resolution: "@web3modal/siwe-react-native@workspace:packages/siwe" dependencies: "@walletconnect/utils": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.3" - "@web3modal/core-react-native": "npm:2.0.0-alpha.3" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.3" + "@web3modal/common-react-native": "npm:2.0.0-alpha.4" + "@web3modal/core-react-native": "npm:2.0.0-alpha.4" + "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" valtio: "npm:1.10.5" languageName: unknown linkType: soft -"@web3modal/ui-react-native@npm:2.0.0-alpha.3, @web3modal/ui-react-native@workspace:packages/ui": +"@web3modal/ui-react-native@npm:2.0.0-alpha.4, @web3modal/ui-react-native@workspace:packages/ui": version: 0.0.0-use.local resolution: "@web3modal/ui-react-native@workspace:packages/ui" dependencies: @@ -10557,14 +10557,14 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/wagmi-react-native@npm:2.0.0-alpha.3, @web3modal/wagmi-react-native@workspace:packages/wagmi": +"@web3modal/wagmi-react-native@npm:2.0.0-alpha.4, @web3modal/wagmi-react-native@workspace:packages/wagmi": version: 0.0.0-use.local resolution: "@web3modal/wagmi-react-native@workspace:packages/wagmi" dependencies: - "@web3modal/common-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.3" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.3" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.3" + "@web3modal/common-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" + "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" From 34e036f834ca3b152637e00875d6384e342c4fa7 Mon Sep 17 00:00:00 2001 From: ignaciosantise Date: Wed, 12 Jun 2024 09:40:09 -0300 Subject: [PATCH 11/18] chore: updated ETH image id --- apps/gallery/utils/PresetUtils.ts | 2 +- .../core/src/__tests__/controllers/AssetController.test.ts | 4 ++-- packages/scaffold-utils/src/utils/PresetsUtil.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/gallery/utils/PresetUtils.ts b/apps/gallery/utils/PresetUtils.ts index e16c48fc..22328477 100644 --- a/apps/gallery/utils/PresetUtils.ts +++ b/apps/gallery/utils/PresetUtils.ts @@ -24,7 +24,7 @@ export const walletImageSrc = 'https://explorer-api.walletconnect.com/w3m/v1/getWalletImage/7a33d7f1-3d12-4b5c-f3ee-5cd83cb1b500?projectId=90369b5c91c6f7fffe308df2b30f3ace'; export const networkImageSrc = - 'https://explorer-api.walletconnect.com/w3m/v1/getAssetImage/692ed6ba-e569-459a-556a-776476829e00?projectId=90369b5c91c6f7fffe308df2b30f3ace'; + 'https://explorer-api.walletconnect.com/w3m/v1/getAssetImage/ba0ba0cd-17c6-4806-ad93-f9d174f17900?projectId=90369b5c91c6f7fffe308df2b30f3ace'; export const avatarImageSrc = 'https://i.seadn.io/gcs/files/007a5af0d93d561f87c8d026ddd5179e.png?auto=format&dpr=1&w=1000'; diff --git a/packages/core/src/__tests__/controllers/AssetController.test.ts b/packages/core/src/__tests__/controllers/AssetController.test.ts index 7db6101b..ec3cefe1 100644 --- a/packages/core/src/__tests__/controllers/AssetController.test.ts +++ b/packages/core/src/__tests__/controllers/AssetController.test.ts @@ -20,9 +20,9 @@ describe('AssetController', () => { }); it('should save network images correctly', () => { - const MOCK_NETWORK_ID = '692ed6ba-e569-459a-556a-776476829e00'; + const MOCK_NETWORK_ID = 'ba0ba0cd-17c6-4806-ad93-f9d174f17900'; const MOCK_NETWORK_IMAGE = - 'https://api.web3modal.com/public/getAssetImage/692ed6ba-e569-459a-556a-776476829e00'; + 'https://api.web3modal.com/public/getAssetImage/ba0ba0cd-17c6-4806-ad93-f9d174f17900'; AssetController.setNetworkImage(MOCK_NETWORK_ID, MOCK_NETWORK_IMAGE); expect(AssetController.state.networkImages[MOCK_NETWORK_ID]).toEqual(MOCK_NETWORK_IMAGE); diff --git a/packages/scaffold-utils/src/utils/PresetsUtil.ts b/packages/scaffold-utils/src/utils/PresetsUtil.ts index 4d4b4e4f..99ef9497 100644 --- a/packages/scaffold-utils/src/utils/PresetsUtil.ts +++ b/packages/scaffold-utils/src/utils/PresetsUtil.ts @@ -9,7 +9,7 @@ export const PresetsUtil = { EIP155NetworkImageIds: { // Ethereum - 1: '692ed6ba-e569-459a-556a-776476829e00', + 1: 'ba0ba0cd-17c6-4806-ad93-f9d174f17900', // Arbitrum 42161: '600a9a04-c1b9-42ca-6785-9b4b6ff85200', // Avalanche From 6fa0b0568709db8d1baf0f4e1a92e5facbab6fa9 Mon Sep 17 00:00:00 2001 From: Ignacio Santise Date: Wed, 3 Jul 2024 11:59:27 -0300 Subject: [PATCH 12/18] feat: export useWalletInfo hook in ethers packages (#173) --- packages/ethers/src/index.tsx | 16 +++++++++++++++- packages/ethers5/src/index.tsx | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/ethers/src/index.tsx b/packages/ethers/src/index.tsx index 9db33b6a..1097c441 100644 --- a/packages/ethers/src/index.tsx +++ b/packages/ethers/src/index.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useState, useSyncExternalStore } from 'react'; import { useSnapshot } from 'valtio'; import { ConstantsUtil, @@ -107,6 +107,20 @@ export function useWeb3ModalAccount() { }; } +export function useWalletInfo() { + if (!modal) { + throw new Error('Please call "createWeb3Modal" before using "useWalletInfo" hook'); + } + + const walletInfo = useSyncExternalStore( + modal.subscribeWalletInfo, + modal.getWalletInfo, + modal.getWalletInfo + ); + + return { walletInfo }; +} + export function useWeb3ModalError() { const { error } = useSnapshot(EthersStoreUtil.state); diff --git a/packages/ethers5/src/index.tsx b/packages/ethers5/src/index.tsx index f73c130b..b9598174 100644 --- a/packages/ethers5/src/index.tsx +++ b/packages/ethers5/src/index.tsx @@ -12,7 +12,7 @@ import { type Provider } from '@web3modal/scaffold-utils-react-native'; export { defaultConfig } from './utils/defaultConfig'; -import { useEffect, useState } from 'react'; +import { useEffect, useState, useSyncExternalStore } from 'react'; import type { Web3ModalOptions } from './client'; import { Web3Modal } from './client'; @@ -104,6 +104,20 @@ export function useWeb3ModalAccount() { }; } +export function useWalletInfo() { + if (!modal) { + throw new Error('Please call "createWeb3Modal" before using "useWalletInfo" hook'); + } + + const walletInfo = useSyncExternalStore( + modal.subscribeWalletInfo, + modal.getWalletInfo, + modal.getWalletInfo + ); + + return { walletInfo }; +} + export function useWeb3ModalError() { const { error } = useSnapshot(EthersStoreUtil.state); From 0fbea706d2732aefed073be116d79ce84803adf9 Mon Sep 17 00:00:00 2001 From: Ignacio Santise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 11 Jul 2024 15:42:57 -0300 Subject: [PATCH 13/18] chore: improvements (#179) * chore: send client id in blockchain api, removed org fallback, ethers improvements --- package.json | 2 +- packages/common/src/index.ts | 1 + packages/common/src/utils/ConstantsUtil.ts | 5 +++ packages/core/package.json | 3 +- .../controllers/AssetController.test.ts | 13 ++++--- .../controllers/BlockchainApiController.ts | 26 ++++++++++++-- packages/core/src/utils/ConstantsUtil.ts | 13 ------- packages/core/src/utils/CoreHelperUtil.ts | 25 +++---------- packages/core/src/utils/FetchUtil.ts | 9 ++++- packages/email/src/W3mFrameHelpers.ts | 25 ++----------- packages/ethers/src/client.ts | 36 ++++++++++++++----- packages/ethers5/src/client.ts | 20 ++++++++++- packages/scaffold/src/client.ts | 4 +++ packages/wagmi/src/client.ts | 10 ++++++ 14 files changed, 115 insertions(+), 77 deletions(-) create mode 100644 packages/common/src/utils/ConstantsUtil.ts diff --git a/package.json b/package.json index c035b762..c3837393 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "test": "turbo run test --parallel", "clean": "turbo clean && rm -rf node_modules && watchman watch-del-all", "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\" --ignore-path .gitignore", - "pre-publish": "turbo clean lint prettier test --parallel; yarn install; turbo run build;" + "pre-publish": "turbo clean lint prettier --parallel; yarn install; turbo run build; turbo run test;" }, "devDependencies": { "@changesets/changelog-github": "0.5.0", diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 088d5213..f27beb61 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1 +1,2 @@ +export { ConstantsUtil } from './utils/ConstantsUtil'; export { NetworkUtil } from './utils/NetworkUtil'; diff --git a/packages/common/src/utils/ConstantsUtil.ts b/packages/common/src/utils/ConstantsUtil.ts new file mode 100644 index 00000000..8caa63e6 --- /dev/null +++ b/packages/common/src/utils/ConstantsUtil.ts @@ -0,0 +1,5 @@ +export const ConstantsUtil = { + BLOCKCHAIN_API_RPC_URL: 'https://rpc.walletconnect.org', + PULSE_API_URL: 'https://pulse.walletconnect.org', + W3M_API_URL: 'https://api.web3modal.org' +}; diff --git a/packages/core/package.json b/packages/core/package.json index abdbad90..54cd3562 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,7 +38,8 @@ "access": "public" }, "dependencies": { - "valtio": "1.10.5" + "valtio": "1.10.5", + "@web3modal/common-react-native": "2.0.0-alpha.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/core/src/__tests__/controllers/AssetController.test.ts b/packages/core/src/__tests__/controllers/AssetController.test.ts index ec3cefe1..7b6717c8 100644 --- a/packages/core/src/__tests__/controllers/AssetController.test.ts +++ b/packages/core/src/__tests__/controllers/AssetController.test.ts @@ -1,4 +1,6 @@ -import { AssetController } from '../../index'; +import { AssetController, CoreHelperUtil } from '../../index'; + +const API_URL = CoreHelperUtil.getApiUrl(); // -- Tests -------------------------------------------------------------------- describe('AssetController', () => { @@ -21,8 +23,7 @@ describe('AssetController', () => { it('should save network images correctly', () => { const MOCK_NETWORK_ID = 'ba0ba0cd-17c6-4806-ad93-f9d174f17900'; - const MOCK_NETWORK_IMAGE = - 'https://api.web3modal.com/public/getAssetImage/ba0ba0cd-17c6-4806-ad93-f9d174f17900'; + const MOCK_NETWORK_IMAGE = `${API_URL}/public/getAssetImage/ba0ba0cd-17c6-4806-ad93-f9d174f17900`; AssetController.setNetworkImage(MOCK_NETWORK_ID, MOCK_NETWORK_IMAGE); expect(AssetController.state.networkImages[MOCK_NETWORK_ID]).toEqual(MOCK_NETWORK_IMAGE); @@ -30,8 +31,7 @@ describe('AssetController', () => { it('should save wallet images correctly', () => { const MOCK_WALLET_ID = '7c5ff577-a68d-49c5-02cd-3d83637b0b00'; - const MOCK_WALLET_IMAGE = - 'https://api.web3modal.com/getWalletImage/7c5ff577-a68d-49c5-02cd-3d83637b0b00'; + const MOCK_WALLET_IMAGE = `${API_URL}/getWalletImage/7c5ff577-a68d-49c5-02cd-3d83637b0b00`; AssetController.setWalletImage(MOCK_WALLET_ID, MOCK_WALLET_IMAGE); expect(AssetController.state.walletImages[MOCK_WALLET_ID]).toEqual(MOCK_WALLET_IMAGE); @@ -39,8 +39,7 @@ describe('AssetController', () => { it('should save connector images correctly', () => { const MOCK_CONNECTOR_ID = '7c5ff577-a68d-49c5-02cd-3d83637b0b00'; - const MOCK_CONNECTOR_IMAGE = - 'https://api.web3modal.com/getWalletImage/7c5ff577-a68d-49c5-02cd-3d83637b0b00'; + const MOCK_CONNECTOR_IMAGE = `${API_URL}/getWalletImage/7c5ff577-a68d-49c5-02cd-3d83637b0b00`; AssetController.setConnectorImage(MOCK_CONNECTOR_ID, MOCK_CONNECTOR_IMAGE); expect(AssetController.state.connectorImages[MOCK_CONNECTOR_ID]).toEqual(MOCK_CONNECTOR_IMAGE); diff --git a/packages/core/src/controllers/BlockchainApiController.ts b/packages/core/src/controllers/BlockchainApiController.ts index 21dd5236..3a116506 100644 --- a/packages/core/src/controllers/BlockchainApiController.ts +++ b/packages/core/src/controllers/BlockchainApiController.ts @@ -1,3 +1,6 @@ +import { proxy } from 'valtio'; + +import { CoreHelperUtil } from '../utils/CoreHelperUtil'; import { FetchUtil } from '../utils/FetchUtil'; import type { BlockchainApiIdentityRequest, @@ -6,16 +9,35 @@ import type { import { OptionsController } from './OptionsController'; // -- Helpers ------------------------------------------- // -const api = new FetchUtil({ baseUrl: 'https://rpc.walletconnect.com' }); +const baseUrl = CoreHelperUtil.getBlockchainApiUrl(); + +// -- Types --------------------------------------------- // +export interface BlockchainApiControllerState { + clientId: string | null; + api: FetchUtil; +} + +// -- State --------------------------------------------- // +const state = proxy({ + clientId: null, + api: new FetchUtil({ baseUrl }) +}); // -- Controller ---------------------------------------- // export const BlockchainApiController = { + state, + fetchIdentity({ address }: BlockchainApiIdentityRequest) { - return api.get({ + return state.api.get({ path: `/v1/identity/${address}`, params: { projectId: OptionsController.state.projectId } }); + }, + + setClientId(clientId: string | null) { + state.clientId = clientId; + state.api = new FetchUtil({ baseUrl, clientId }); } }; diff --git a/packages/core/src/utils/ConstantsUtil.ts b/packages/core/src/utils/ConstantsUtil.ts index 9e8238c4..ab7d07c1 100644 --- a/packages/core/src/utils/ConstantsUtil.ts +++ b/packages/core/src/utils/ConstantsUtil.ts @@ -5,18 +5,5 @@ export const ConstantsUtil = { ONE_SEC_MS: 1000, - RESTRICTED_TIMEZONES: [ - 'ASIA/SHANGHAI', - 'ASIA/URUMQI', - 'ASIA/CHONGQING', - 'ASIA/HARBIN', - 'ASIA/KASHGAR', - 'ASIA/MACAU', - 'ASIA/HONG_KONG', - 'ASIA/MACAO', - 'ASIA/BEIJING', - 'ASIA/HARBIN' - ], - EMAIL_REGEX: /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/ }; diff --git a/packages/core/src/utils/CoreHelperUtil.ts b/packages/core/src/utils/CoreHelperUtil.ts index 9a9e72a3..1ce6c91a 100644 --- a/packages/core/src/utils/CoreHelperUtil.ts +++ b/packages/core/src/utils/CoreHelperUtil.ts @@ -1,6 +1,8 @@ /* eslint-disable no-bitwise */ import { Linking, Platform } from 'react-native'; +import { ConstantsUtil as CommonConstants } from '@web3modal/common-react-native'; + import { ConstantsUtil } from './ConstantsUtil'; import type { CaipAddress, DataWallet, LinkingRecord } from './TypeUtil'; @@ -129,33 +131,16 @@ export const CoreHelperUtil = { return formattedBalance ? `${formattedBalance} ${symbol}` : `0.000 ${symbol || ''}`; }, - isRestrictedRegion() { - try { - const { timeZone } = new Intl.DateTimeFormat().resolvedOptions(); - const capTimeZone = timeZone.toUpperCase(); - - return ConstantsUtil.RESTRICTED_TIMEZONES.includes(capTimeZone); - } catch { - return false; - } - }, - getApiUrl() { - return CoreHelperUtil.isRestrictedRegion() - ? 'https://api.web3modal.org' - : 'https://api.web3modal.com'; + return CommonConstants.W3M_API_URL; }, getBlockchainApiUrl() { - return CoreHelperUtil.isRestrictedRegion() - ? 'https://rpc.walletconnect.org' - : 'https://rpc.walletconnect.com'; + return CommonConstants.BLOCKCHAIN_API_RPC_URL; }, getAnalyticsUrl() { - return CoreHelperUtil.isRestrictedRegion() - ? 'https://pulse.walletconnect.org' - : 'https://pulse.walletconnect.com'; + return CommonConstants.PULSE_API_URL; }, getUUID() { diff --git a/packages/core/src/utils/FetchUtil.ts b/packages/core/src/utils/FetchUtil.ts index 33a5f251..99c0df37 100644 --- a/packages/core/src/utils/FetchUtil.ts +++ b/packages/core/src/utils/FetchUtil.ts @@ -1,6 +1,7 @@ // -- Types ---------------------------------------------------------------------- interface Options { baseUrl: string; + clientId?: string | null; } interface RequestArguments { @@ -16,9 +17,11 @@ interface PostArguments extends RequestArguments { // -- Utility -------------------------------------------------------------------- export class FetchUtil { public baseUrl: Options['baseUrl']; + public clientId: Options['clientId']; - public constructor({ baseUrl }: Options) { + public constructor({ baseUrl, clientId }: Options) { this.baseUrl = baseUrl; + this.clientId = clientId; } public async get({ headers, ...args }: RequestArguments) { @@ -87,6 +90,10 @@ export class FetchUtil { }); } + if (this.clientId) { + url.searchParams.append('clientId', this.clientId); + } + return url.toString(); } diff --git a/packages/email/src/W3mFrameHelpers.ts b/packages/email/src/W3mFrameHelpers.ts index ca3749c6..3f12e9f9 100644 --- a/packages/email/src/W3mFrameHelpers.ts +++ b/packages/email/src/W3mFrameHelpers.ts @@ -1,34 +1,13 @@ +import { CoreHelperUtil } from '@web3modal/core-react-native'; import { W3mFrameStorage } from './W3mFrameStorage'; import { W3mFrameConstants, W3mFrameRpcConstants } from './W3mFrameConstants'; import type { W3mFrameTypes } from './W3mFrameTypes'; -const RESTRICTED_TIMEZONES = [ - 'ASIA/SHANGHAI', - 'ASIA/URUMQI', - 'ASIA/CHONGQING', - 'ASIA/HARBIN', - 'ASIA/KASHGAR', - 'ASIA/MACAU', - 'ASIA/HONG_KONG', - 'ASIA/MACAO', - 'ASIA/BEIJING', - 'ASIA/HARBIN' -]; - const EMAIL_MINIMUM_TIMEOUT = 30 * 1000; export const W3mFrameHelpers = { getBlockchainApiUrl() { - try { - const { timeZone } = new Intl.DateTimeFormat().resolvedOptions(); - const capTimeZone = timeZone.toUpperCase(); - - return RESTRICTED_TIMEZONES.includes(capTimeZone) - ? 'https://rpc.walletconnect.org' - : 'https://rpc.walletconnect.com'; - } catch { - return false; - } + return CoreHelperUtil.getBlockchainApiUrl(); }, async checkIfAllowedToTriggerEmail() { diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts index b9094ace..dac9fdbd 100644 --- a/packages/ethers/src/client.ts +++ b/packages/ethers/src/client.ts @@ -152,6 +152,12 @@ export class Web3Modal extends Web3ModalScaffold { onUri(uri); }); + // When connecting through walletconnect, we need to set the clientId in the store + const clientId = await WalletConnectProvider.signer?.client?.core?.crypto?.getClientId(); + if (clientId) { + this.setClientId(clientId); + } + // SIWE const params = await siweConfig?.getMessageParams?.(); if (siweConfig?.options?.enabled && params && Object.keys(params).length > 0) { @@ -206,6 +212,9 @@ export class Web3Modal extends Web3ModalScaffold { // @ts-expect-error TODO expected types in arguments are incomplete connectExternal: async ({ id }: { id: string; provider: Provider }) => { + // If connecting with something else than walletconnect, we need to clear the clientId in the store + this.setClientId(null); + if (id === ConstantsUtil.COINBASE_CONNECTOR_ID) { const coinbaseProvider = config.extraConnectors?.find(connector => connector.id === id); if (!coinbaseProvider) { @@ -246,6 +255,7 @@ export class Web3Modal extends Web3ModalScaffold { } StorageUtil.removeItem(EthersConstantsUtil.WALLET_ID); EthersStoreUtil.reset(); + this.setClientId(null); }, signMessage: async (message: string) => { @@ -356,6 +366,7 @@ export class Web3Modal extends Web3ModalScaffold { const { provider } = EthersStoreUtil.state; StorageUtil.removeItem(EthersConstantsUtil.WALLET_ID); EthersStoreUtil.reset(); + this.setClientId(null); await (provider as unknown as EthereumProvider).disconnect(); } @@ -370,16 +381,18 @@ export class Web3Modal extends Web3ModalScaffold { } private async initWalletConnectProvider() { + const rpcMap = this.chains + ? this.chains.reduce>((map, chain) => { + map[chain.chainId] = chain.rpcUrl; + + return map; + }, {}) + : ({} as Record); + const walletConnectProviderOptions: EthereumProviderOptions = { projectId: this.projectId, showQrModal: false, - rpcMap: this.chains - ? this.chains.reduce>((map, chain) => { - map[chain.chainId] = chain.rpcUrl; - - return map; - }, {}) - : ({} as Record), + rpcMap, optionalChains: [...this.chains.map(chain => chain.chainId)] as [number], metadata: this.metadata }; @@ -708,7 +721,14 @@ export class Web3Modal extends Web3ModalScaffold { EthersStoreUtil.setChainId(chainId); } catch (switchError: any) { - throw new Error('Chain is not supported'); + const message = switchError?.message as string; + if (/(?user rejected)/u.test(message?.toLowerCase())) { + throw new Error('Chain is not supported'); + } + await EthersHelpersUtil.addEthereumChain( + WalletConnectProvider as unknown as Provider, + chain + ); } } } else if (providerType === coinbaseType && chain) { diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts index ee67b5c4..bb6e86fb 100644 --- a/packages/ethers5/src/client.ts +++ b/packages/ethers5/src/client.ts @@ -144,6 +144,12 @@ export class Web3Modal extends Web3ModalScaffold { onUri(uri); }); + // When connecting through walletconnect, we need to set the clientId in the store + const clientId = await WalletConnectProvider.signer?.client?.core?.crypto?.getClientId(); + if (clientId) { + this.setClientId(clientId); + } + // SIWE const params = await siweConfig?.getMessageParams?.(); if (siweConfig?.options?.enabled && params && Object.keys(params).length > 0) { @@ -199,6 +205,9 @@ export class Web3Modal extends Web3ModalScaffold { // @ts-expect-error TODO expected types in arguments are incomplete connectExternal: async ({ id }: { id: string; provider: Provider }) => { + // If connecting with something else than walletconnect, we need to clear the clientId in the store + this.setClientId(null); + if (id === ConstantsUtil.COINBASE_CONNECTOR_ID) { const coinbaseProvider = config.extraConnectors?.find(connector => connector.id === id); if (!coinbaseProvider) { @@ -238,6 +247,7 @@ export class Web3Modal extends Web3ModalScaffold { } StorageUtil.removeItem(EthersConstantsUtil.WALLET_ID); EthersStoreUtil.reset(); + this.setClientId(null); }, signMessage: async (message: string) => { @@ -350,6 +360,7 @@ export class Web3Modal extends Web3ModalScaffold { const { provider } = EthersStoreUtil.state; StorageUtil.removeItem(EthersConstantsUtil.WALLET_ID); EthersStoreUtil.reset(); + this.setClientId(null); await (provider as unknown as EthereumProvider).disconnect(); } @@ -702,7 +713,14 @@ export class Web3Modal extends Web3ModalScaffold { EthersStoreUtil.setChainId(chainId); } catch (switchError: any) { - throw new Error('Chain is not supported'); + const message = switchError?.message as string; + if (/(?user rejected)/u.test(message?.toLowerCase())) { + throw new Error('Chain is not supported'); + } + await EthersHelpersUtil.addEthereumChain( + WalletConnectProvider as unknown as Provider, + chain + ); } } } else if (providerType === coinbaseType && chain) { diff --git a/packages/scaffold/src/client.ts b/packages/scaffold/src/client.ts index 5cb6119d..6abe5c72 100644 --- a/packages/scaffold/src/client.ts +++ b/packages/scaffold/src/client.ts @@ -206,6 +206,10 @@ export class Web3ModalScaffold { AccountController.setConnectedWalletInfo(connectedWalletInfo); }; + protected setClientId: (typeof BlockchainApiController)['setClientId'] = clientId => { + BlockchainApiController.setClientId(clientId); + }; + // -- Private ------------------------------------------------------------------ private async initControllers(options: ScaffoldOptions) { this.initAsyncValues(options); diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts index 4b3e7b30..f22c13c0 100644 --- a/packages/wagmi/src/client.ts +++ b/packages/wagmi/src/client.ts @@ -126,6 +126,12 @@ export class Web3Modal extends Web3ModalScaffold { onUri(data); }); + // When connecting through walletconnect, we need to set the clientId in the store + const clientId = await provider.signer?.client?.core?.crypto?.getClientId(); + if (clientId) { + this.setClientId(clientId); + } + const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); // SIWE @@ -200,6 +206,9 @@ export class Web3Modal extends Web3ModalScaffold { throw new Error('connectionControllerClient:connectExternal - connector is undefined'); } + // If connecting with something else than walletconnect, we need to clear the clientId in the store + this.setClientId(null); + const chainId = NetworkUtil.caipNetworkIdToNumber(this.getCaipNetwork()?.id); await connect(this.wagmiConfig, { connector, chainId }); }, @@ -208,6 +217,7 @@ export class Web3Modal extends Web3ModalScaffold { disconnect: async () => { await disconnect(this.wagmiConfig); + this.setClientId(null); if (siweConfig?.options?.signOutOnDisconnect) { const { SIWEController } = await import('@web3modal/siwe-react-native'); From 6672373be0cb3ccca8ed9323c9cdb64fae43280b Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:30:10 -0300 Subject: [PATCH 14/18] chore: removed old changesets --- .changeset/cuddly-masks-run.md | 18 ------------------ .changeset/dull-eels-rule.md | 18 ------------------ .changeset/pre.json | 30 ------------------------------ .changeset/real-timers-wash.md | 16 ---------------- .changeset/sixty-actors-impress.md | 16 ---------------- .changeset/witty-owls-sin.md | 16 ---------------- 6 files changed, 114 deletions(-) delete mode 100644 .changeset/cuddly-masks-run.md delete mode 100644 .changeset/dull-eels-rule.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/real-timers-wash.md delete mode 100644 .changeset/sixty-actors-impress.md delete mode 100644 .changeset/witty-owls-sin.md diff --git a/.changeset/cuddly-masks-run.md b/.changeset/cuddly-masks-run.md deleted file mode 100644 index 2eabe77c..00000000 --- a/.changeset/cuddly-masks-run.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@web3modal/coinbase-ethers-react-native': patch -'@web3modal/coinbase-wagmi-react-native': patch -'@web3modal/scaffold-utils-react-native': patch -'@web3modal/email-ethers-react-native': patch -'@web3modal/email-wagmi-react-native': patch -'@web3modal/scaffold-react-native': patch -'@web3modal/ethers5-react-native': patch -'@web3modal/common-react-native': patch -'@web3modal/ethers-react-native': patch -'@web3modal/email-react-native': patch -'@web3modal/wagmi-react-native': patch -'@web3modal/core-react-native': patch -'@web3modal/siwe-react-native': patch -'@web3modal/ui-react-native': patch ---- - -siwe + one-click auth diff --git a/.changeset/dull-eels-rule.md b/.changeset/dull-eels-rule.md deleted file mode 100644 index 94dfdb31..00000000 --- a/.changeset/dull-eels-rule.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@web3modal/coinbase-ethers-react-native': patch -'@web3modal/coinbase-wagmi-react-native': patch -'@web3modal/scaffold-utils-react-native': patch -'@web3modal/email-ethers-react-native': patch -'@web3modal/email-wagmi-react-native': patch -'@web3modal/scaffold-react-native': patch -'@web3modal/ethers5-react-native': patch -'@web3modal/common-react-native': patch -'@web3modal/ethers-react-native': patch -'@web3modal/email-react-native': patch -'@web3modal/wagmi-react-native': patch -'@web3modal/core-react-native': patch -'@web3modal/siwe-react-native': patch -'@web3modal/ui-react-native': patch ---- - -fix: email + siwe diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 5e3a1767..00000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "mode": "pre", - "tag": "alpha", - "initialVersions": { - "@apps/gallery": "1.0.6", - "@apps/native": "1.0.6", - "@apps/native-cli": "1.0.6", - "@web3modal/coinbase-ethers-react-native": "1.4.0", - "@web3modal/coinbase-wagmi-react-native": "1.4.0", - "@web3modal/core-react-native": "1.4.0", - "@web3modal/email-react-native": "1.4.0", - "@web3modal/email-ethers-react-native": "1.4.0", - "@web3modal/email-wagmi-react-native": "1.4.0", - "@web3modal/ethers-react-native": "1.4.0", - "@web3modal/ethers5-react-native": "1.4.0", - "@web3modal/scaffold-react-native": "1.4.0", - "@web3modal/scaffold-utils-react-native": "1.4.0", - "@web3modal/ui-react-native": "1.4.0", - "@web3modal/wagmi-react-native": "1.4.0", - "@web3modal/common-react-native": "2.0.0-alpha.2", - "@web3modal/siwe-react-native": "2.0.0-alpha.2" - }, - "changesets": [ - "cuddly-masks-run", - "dull-eels-rule", - "real-timers-wash", - "sixty-actors-impress", - "witty-owls-sin" - ] -} diff --git a/.changeset/real-timers-wash.md b/.changeset/real-timers-wash.md deleted file mode 100644 index a4bf5e49..00000000 --- a/.changeset/real-timers-wash.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@web3modal/coinbase-ethers-react-native': patch -'@web3modal/coinbase-wagmi-react-native': patch -'@web3modal/scaffold-utils-react-native': patch -'@web3modal/email-ethers-react-native': patch -'@web3modal/email-wagmi-react-native': patch -'@web3modal/scaffold-react-native': patch -'@web3modal/ethers5-react-native': patch -'@web3modal/ethers-react-native': patch -'@web3modal/email-react-native': patch -'@web3modal/wagmi-react-native': patch -'@web3modal/core-react-native': patch -'@web3modal/ui-react-native': patch ---- - -alpha.2 diff --git a/.changeset/sixty-actors-impress.md b/.changeset/sixty-actors-impress.md deleted file mode 100644 index 71943a72..00000000 --- a/.changeset/sixty-actors-impress.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@web3modal/coinbase-wagmi-react-native': major -'@web3modal/email-wagmi-react-native': major -'@web3modal/scaffold-react-native': major -'@web3modal/ethers5-react-native': major -'@web3modal/ethers-react-native': major -'@web3modal/wagmi-react-native': major -'@web3modal/core-react-native': major -'@web3modal/coinbase-ethers-react-native': major -'@web3modal/email-react-native': major -'@web3modal/email-ethers-react-native': major -'@web3modal/scaffold-utils-react-native': major -'@web3modal/ui-react-native': major ---- - -2.0.0 diff --git a/.changeset/witty-owls-sin.md b/.changeset/witty-owls-sin.md deleted file mode 100644 index 422b85b5..00000000 --- a/.changeset/witty-owls-sin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@web3modal/coinbase-ethers-react-native': patch -'@web3modal/coinbase-wagmi-react-native': patch -'@web3modal/scaffold-utils-react-native': patch -'@web3modal/email-ethers-react-native': patch -'@web3modal/email-wagmi-react-native': patch -'@web3modal/scaffold-react-native': patch -'@web3modal/ethers5-react-native': patch -'@web3modal/ethers-react-native': patch -'@web3modal/email-react-native': patch -'@web3modal/wagmi-react-native': patch -'@web3modal/core-react-native': patch -'@web3modal/ui-react-native': patch ---- - -fixes From c9d0046e9ff939d0fd203e7984183c94dfc55247 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:33:23 -0300 Subject: [PATCH 15/18] chore: reverted changelogs --- apps/gallery/CHANGELOG.md | 23 +---------------------- apps/native-cli/CHANGELOG.md | 23 +---------------------- apps/native/CHANGELOG.md | 28 ++-------------------------- 3 files changed, 4 insertions(+), 70 deletions(-) diff --git a/apps/gallery/CHANGELOG.md b/apps/gallery/CHANGELOG.md index 671e2450..6805aae1 100644 --- a/apps/gallery/CHANGELOG.md +++ b/apps/gallery/CHANGELOG.md @@ -12,28 +12,7 @@ ### Patch Changes - Updated dependencies - - @web3modal/ui-react-native@2.0.0-alpha.3 - -## 1.0.7-alpha.2 - -### Patch Changes - -- Updated dependencies - - @web3modal/ui-react-native@2.0.0-alpha.2 - -## 1.0.7-alpha.1 - -### Patch Changes - -- Updated dependencies - - @web3modal/ui-react-native@2.0.0-alpha.1 - -## 1.0.7-alpha.0 - -### Patch Changes - -- Updated dependencies - - @web3modal/ui-react-native@2.0.0-alpha.0 + - @web3modal/ui-react-native@1.4.1 ## 1.0.6 diff --git a/apps/native-cli/CHANGELOG.md b/apps/native-cli/CHANGELOG.md index 621f084d..c322b4c9 100644 --- a/apps/native-cli/CHANGELOG.md +++ b/apps/native-cli/CHANGELOG.md @@ -12,28 +12,7 @@ ### Patch Changes - Updated dependencies - - @web3modal/wagmi-react-native@2.0.0-alpha.3 - -## 1.0.7-alpha.2 - -### Patch Changes - -- Updated dependencies - - @web3modal/wagmi-react-native@2.0.0-alpha.2 - -## 1.0.7-alpha.1 - -### Patch Changes - -- Updated dependencies - - @web3modal/wagmi-react-native@2.0.0-alpha.1 - -## 1.0.7-alpha.0 - -### Patch Changes - -- Updated dependencies - - @web3modal/wagmi-react-native@2.0.0-alpha.0 + - @web3modal/wagmi-react-native@1.4.1 ## 1.0.6 diff --git a/apps/native/CHANGELOG.md b/apps/native/CHANGELOG.md index 817b7913..c2e5b427 100644 --- a/apps/native/CHANGELOG.md +++ b/apps/native/CHANGELOG.md @@ -13,32 +13,8 @@ ### Patch Changes - Updated dependencies - - @web3modal/email-wagmi-react-native@2.0.0-alpha.3 - - @web3modal/wagmi-react-native@2.0.0-alpha.3 - -## 1.0.7-alpha.2 - -### Patch Changes - -- Updated dependencies - - @web3modal/email-wagmi-react-native@2.0.0-alpha.2 - - @web3modal/wagmi-react-native@2.0.0-alpha.2 - -## 1.0.7-alpha.1 - -### Patch Changes - -- Updated dependencies - - @web3modal/email-wagmi-react-native@2.0.0-alpha.1 - - @web3modal/wagmi-react-native@2.0.0-alpha.1 - -## 1.0.7-alpha.0 - -### Patch Changes - -- Updated dependencies - - @web3modal/email-wagmi-react-native@2.0.0-alpha.0 - - @web3modal/wagmi-react-native@2.0.0-alpha.0 + - @web3modal/email-wagmi-react-native@1.4.1 + - @web3modal/wagmi-react-native@1.4.1 ## 1.0.6 From 3822c8163d9e9e6b81f681467b77dc828e0d4c08 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:40:41 -0300 Subject: [PATCH 16/18] chore: reverted changelogs --- packages/coinbase-ethers/CHANGELOG.md | 26 +------------- packages/coinbase-wagmi/CHANGELOG.md | 26 +------------- packages/common/CHANGELOG.md | 13 ------- packages/core/CHANGELOG.md | 26 +------------- packages/email-ethers/CHANGELOG.md | 39 ++------------------- packages/email-wagmi/CHANGELOG.md | 39 ++------------------- packages/email/CHANGELOG.md | 45 ++---------------------- packages/ethers/CHANGELOG.md | 49 ++------------------------- packages/ethers5/CHANGELOG.md | 49 ++------------------------- packages/scaffold-utils/CHANGELOG.md | 39 ++------------------- packages/scaffold/CHANGELOG.md | 47 ++----------------------- packages/siwe/CHANGELOG.md | 21 ------------ packages/ui/CHANGELOG.md | 26 +------------- packages/wagmi/CHANGELOG.md | 49 ++------------------------- 14 files changed, 25 insertions(+), 469 deletions(-) delete mode 100644 packages/common/CHANGELOG.md delete mode 100644 packages/siwe/CHANGELOG.md diff --git a/packages/coinbase-ethers/CHANGELOG.md b/packages/coinbase-ethers/CHANGELOG.md index c1378701..b53c9e45 100644 --- a/packages/coinbase-ethers/CHANGELOG.md +++ b/packages/coinbase-ethers/CHANGELOG.md @@ -22,31 +22,7 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 +- email wallet fixes ## 1.4.0 diff --git a/packages/coinbase-wagmi/CHANGELOG.md b/packages/coinbase-wagmi/CHANGELOG.md index bda7de1e..1e22d6ed 100644 --- a/packages/coinbase-wagmi/CHANGELOG.md +++ b/packages/coinbase-wagmi/CHANGELOG.md @@ -22,31 +22,7 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 +- email wallet fixes ## 1.4.0 diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md deleted file mode 100644 index 007ef907..00000000 --- a/packages/common/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# @web3modal/common-react-native - -## 2.0.0-alpha.4 - -### Patch Changes - -- aa7fa5d: fix: email + siwe - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index d7e9918e..c45ce7c6 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -22,31 +22,7 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 +- email wallet fixes ## 1.4.0 diff --git a/packages/email-ethers/CHANGELOG.md b/packages/email-ethers/CHANGELOG.md index 44f9daa4..82abdc87 100644 --- a/packages/email-ethers/CHANGELOG.md +++ b/packages/email-ethers/CHANGELOG.md @@ -30,44 +30,9 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/email-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.0 + - @web3modal/email-react-native@1.4.1 ## 1.4.0 diff --git a/packages/email-wagmi/CHANGELOG.md b/packages/email-wagmi/CHANGELOG.md index 44f9daa4..82abdc87 100644 --- a/packages/email-wagmi/CHANGELOG.md +++ b/packages/email-wagmi/CHANGELOG.md @@ -30,44 +30,9 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/email-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/email-react-native@2.0.0-alpha.0 + - @web3modal/email-react-native@1.4.1 ## 1.4.0 diff --git a/packages/email/CHANGELOG.md b/packages/email/CHANGELOG.md index 23e1f5d9..76e60811 100644 --- a/packages/email/CHANGELOG.md +++ b/packages/email/CHANGELOG.md @@ -33,49 +33,10 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/core-react-native@2.0.0-alpha.4 - - @web3modal/ui-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.3 - - @web3modal/ui-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.2 - - @web3modal/ui-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.1 - - @web3modal/ui-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.0 - - @web3modal/ui-react-native@2.0.0-alpha.0 + - @web3modal/core-react-native@1.4.1 + - @web3modal/ui-react-native@1.4.1 ## 1.4.0 diff --git a/packages/ethers/CHANGELOG.md b/packages/ethers/CHANGELOG.md index 26ef0115..e2ef32c1 100644 --- a/packages/ethers/CHANGELOG.md +++ b/packages/ethers/CHANGELOG.md @@ -33,53 +33,10 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 - - @web3modal/scaffold-react-native@2.0.0-alpha.4 - - @web3modal/common-react-native@2.0.0-alpha.4 - - @web3modal/siwe-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 - - @web3modal/scaffold-react-native@2.0.0-alpha.3 - - @web3modal/common-react-native@2.0.0-alpha.3 - - @web3modal/siwe-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.2 - - @web3modal/scaffold-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.1 - - @web3modal/scaffold-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.0 - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-react-native@1.4.1 + - @web3modal/scaffold-utils-react-native@1.4.1 ## 1.4.0 diff --git a/packages/ethers5/CHANGELOG.md b/packages/ethers5/CHANGELOG.md index e209682a..34d22d6d 100644 --- a/packages/ethers5/CHANGELOG.md +++ b/packages/ethers5/CHANGELOG.md @@ -33,53 +33,10 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 - - @web3modal/scaffold-react-native@2.0.0-alpha.4 - - @web3modal/common-react-native@2.0.0-alpha.4 - - @web3modal/siwe-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 - - @web3modal/scaffold-react-native@2.0.0-alpha.3 - - @web3modal/common-react-native@2.0.0-alpha.3 - - @web3modal/siwe-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.2 - - @web3modal/scaffold-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.1 - - @web3modal/scaffold-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.0 - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-react-native@1.4.1 + - @web3modal/scaffold-utils-react-native@1.4.1 ## 1.4.0 diff --git a/packages/scaffold-utils/CHANGELOG.md b/packages/scaffold-utils/CHANGELOG.md index 59b90fb3..1f444b58 100644 --- a/packages/scaffold-utils/CHANGELOG.md +++ b/packages/scaffold-utils/CHANGELOG.md @@ -30,44 +30,9 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/scaffold-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-react-native@1.4.1 ## 1.4.0 diff --git a/packages/scaffold/CHANGELOG.md b/packages/scaffold/CHANGELOG.md index c4747d60..d889f555 100644 --- a/packages/scaffold/CHANGELOG.md +++ b/packages/scaffold/CHANGELOG.md @@ -33,51 +33,10 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/core-react-native@2.0.0-alpha.4 - - @web3modal/siwe-react-native@2.0.0-alpha.4 - - @web3modal/ui-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.3 - - @web3modal/siwe-react-native@2.0.0-alpha.3 - - @web3modal/ui-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.2 - - @web3modal/ui-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.1 - - @web3modal/ui-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/core-react-native@2.0.0-alpha.0 - - @web3modal/ui-react-native@2.0.0-alpha.0 + - @web3modal/core-react-native@1.4.1 + - @web3modal/ui-react-native@1.4.1 ## 1.4.0 diff --git a/packages/siwe/CHANGELOG.md b/packages/siwe/CHANGELOG.md deleted file mode 100644 index cee1802e..00000000 --- a/packages/siwe/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# @web3modal/siwe-react-native - -## 2.0.0-alpha.4 - -### Patch Changes - -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/common-react-native@2.0.0-alpha.4 - - @web3modal/core-react-native@2.0.0-alpha.4 - - @web3modal/ui-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/common-react-native@2.0.0-alpha.3 - - @web3modal/core-react-native@2.0.0-alpha.3 - - @web3modal/ui-react-native@2.0.0-alpha.3 diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 917ed8e9..c798d027 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -22,31 +22,7 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 +- email wallet fixes ## 1.4.0 diff --git a/packages/wagmi/CHANGELOG.md b/packages/wagmi/CHANGELOG.md index b520727b..ebe82540 100644 --- a/packages/wagmi/CHANGELOG.md +++ b/packages/wagmi/CHANGELOG.md @@ -33,53 +33,10 @@ ### Patch Changes -- aa7fa5d: fix: email + siwe -- Updated dependencies [aa7fa5d] - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.4 - - @web3modal/scaffold-react-native@2.0.0-alpha.4 - - @web3modal/common-react-native@2.0.0-alpha.4 - - @web3modal/siwe-react-native@2.0.0-alpha.4 - -## 2.0.0-alpha.3 - -### Patch Changes - -- siwe + one-click auth -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.3 - - @web3modal/scaffold-react-native@2.0.0-alpha.3 - - @web3modal/common-react-native@2.0.0-alpha.3 - - @web3modal/siwe-react-native@2.0.0-alpha.3 - -## 2.0.0-alpha.2 - -### Patch Changes - -- alpha.2 -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.2 - - @web3modal/scaffold-react-native@2.0.0-alpha.2 - -## 2.0.0-alpha.1 - -### Patch Changes - -- fixes -- Updated dependencies - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.1 - - @web3modal/scaffold-react-native@2.0.0-alpha.1 - -## 2.0.0-alpha.0 - -### Major Changes - -- 2.0.0 - -### Patch Changes - +- email wallet fixes - Updated dependencies - - @web3modal/scaffold-react-native@2.0.0-alpha.0 - - @web3modal/scaffold-utils-react-native@2.0.0-alpha.0 + - @web3modal/scaffold-react-native@1.4.1 + - @web3modal/scaffold-utils-react-native@1.4.1 ## 1.4.0 From 512bac849111796ac7697b775853639e3e423bc7 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:50:42 -0300 Subject: [PATCH 17/18] chore: reverted version changes --- apps/gallery/package.json | 2 +- apps/native-cli/package.json | 2 +- apps/native/package.json | 4 +- packages/coinbase-ethers/package.json | 2 +- packages/coinbase-wagmi/package.json | 2 +- packages/common/package.json | 2 +- packages/core/package.json | 4 +- packages/email-ethers/package.json | 4 +- packages/email-wagmi/package.json | 4 +- packages/email/package.json | 6 +- packages/ethers/package.json | 10 +-- packages/ethers5/package.json | 10 +-- packages/scaffold-utils/package.json | 4 +- .../scaffold-utils/src/utils/ConstantsUtil.ts | 2 +- packages/scaffold/package.json | 8 +- packages/siwe/package.json | 8 +- packages/ui/package.json | 2 +- packages/wagmi/package.json | 10 +-- yarn.lock | 74 +++++++++---------- 19 files changed, 80 insertions(+), 80 deletions(-) diff --git a/apps/gallery/package.json b/apps/gallery/package.json index 4f6dcee9..4c35163d 100644 --- a/apps/gallery/package.json +++ b/apps/gallery/package.json @@ -33,6 +33,6 @@ }, "dependencies": { "@storybook/theming": "^7.4.6", - "@web3modal/ui-react-native": "2.0.0-alpha.4" + "@web3modal/ui-react-native": "1.4.4" } } diff --git a/apps/native-cli/package.json b/apps/native-cli/package.json index f651911d..834322e7 100644 --- a/apps/native-cli/package.json +++ b/apps/native-cli/package.json @@ -16,7 +16,7 @@ "@react-native-community/netinfo": "9.3.10", "@tanstack/react-query": "5.37.1", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/wagmi-react-native": "2.0.0-alpha.4", + "@web3modal/wagmi-react-native": "1.4.4", "react": "18.2.0", "react-native": "0.72.6", "react-native-get-random-values": "~1.9.0", diff --git a/apps/native/package.json b/apps/native/package.json index 5ef684b4..f05a4c29 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -21,8 +21,8 @@ "@tanstack/react-query": "5.37.1", "@tanstack/react-query-persist-client": "^5.40.0", "@walletconnect/react-native-compat": "2.13.1", - "@web3modal/email-wagmi-react-native": "2.0.0-alpha.4", - "@web3modal/wagmi-react-native": "2.0.0-alpha.4", + "@web3modal/email-wagmi-react-native": "1.4.4", + "@web3modal/wagmi-react-native": "1.4.4", "expo": "^50.0.14", "expo-application": "~5.8.3", "expo-clipboard": "~5.0.1", diff --git a/packages/coinbase-ethers/package.json b/packages/coinbase-ethers/package.json index 81d46cf4..08b19cf0 100644 --- a/packages/coinbase-ethers/package.json +++ b/packages/coinbase-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-ethers-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/coinbase-wagmi/package.json b/packages/coinbase-wagmi/package.json index 026c2d59..4959ac47 100644 --- a/packages/coinbase-wagmi/package.json +++ b/packages/coinbase-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/coinbase-wagmi-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/common/package.json b/packages/common/package.json index 579b3bab..e4873f0e 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/common-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/core/package.json b/packages/core/package.json index 103b311d..ae8ffe36 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/core-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,7 +38,7 @@ "access": "public" }, "dependencies": { - "@web3modal/common-react-native": "2.0.0-alpha.4", + "@web3modal/common-react-native": "1.4.4", "valtio": "1.10.5" }, "peerDependencies": { diff --git a/packages/email-ethers/package.json b/packages/email-ethers/package.json index 0d909ba4..8ea508f1 100644 --- a/packages/email-ethers/package.json +++ b/packages/email-ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-ethers-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.4" + "@web3modal/email-react-native": "1.4.4" }, "peerDependencies": { "ethers": ">=5" diff --git a/packages/email-wagmi/package.json b/packages/email-wagmi/package.json index a54c6fd5..347357b0 100644 --- a/packages/email-wagmi/package.json +++ b/packages/email-wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-wagmi-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@web3modal/email-react-native": "2.0.0-alpha.4" + "@web3modal/email-react-native": "1.4.4" }, "peerDependencies": { "wagmi": ">=2" diff --git a/packages/email/package.json b/packages/email/package.json index 9d74451c..c365d708 100644 --- a/packages/email/package.json +++ b/packages/email/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/email-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -36,8 +36,8 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.4", - "@web3modal/ui-react-native": "2.0.0-alpha.4", + "@web3modal/core-react-native": "1.4.4", + "@web3modal/ui-react-native": "1.4.4", "zod": "3.22.4" }, "peerDependencies": { diff --git a/packages/ethers/package.json b/packages/ethers/package.json index 2abcb6b5..acb08f6e 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", - "@web3modal/siwe-react-native": "2.0.0-alpha.4" + "@web3modal/common-react-native": "1.4.4", + "@web3modal/scaffold-react-native": "1.4.4", + "@web3modal/scaffold-utils-react-native": "1.4.4", + "@web3modal/siwe-react-native": "1.4.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/ethers5/package.json b/packages/ethers5/package.json index afae93f3..edbdf19e 100644 --- a/packages/ethers5/package.json +++ b/packages/ethers5/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ethers5-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -39,10 +39,10 @@ }, "dependencies": { "@walletconnect/ethereum-provider": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", - "@web3modal/siwe-react-native": "2.0.0-alpha.4" + "@web3modal/common-react-native": "1.4.4", + "@web3modal/scaffold-react-native": "1.4.4", + "@web3modal/scaffold-utils-react-native": "1.4.4", + "@web3modal/siwe-react-native": "1.4.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/packages/scaffold-utils/package.json b/packages/scaffold-utils/package.json index c4c38763..c8061eff 100644 --- a/packages/scaffold-utils/package.json +++ b/packages/scaffold-utils/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-utils-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -35,7 +35,7 @@ "access": "public" }, "dependencies": { - "@web3modal/scaffold-react-native": "2.0.0-alpha.4" + "@web3modal/scaffold-react-native": "1.4.4" }, "react-native": "src/index.ts", "react-native-builder-bob": { diff --git a/packages/scaffold-utils/src/utils/ConstantsUtil.ts b/packages/scaffold-utils/src/utils/ConstantsUtil.ts index 06f908dc..bf990cf8 100644 --- a/packages/scaffold-utils/src/utils/ConstantsUtil.ts +++ b/packages/scaffold-utils/src/utils/ConstantsUtil.ts @@ -1,5 +1,5 @@ export const ConstantsUtil = { - VERSION: '2.0.0-alpha.4', + VERSION: '1.4.4', WALLET_CONNECT_CONNECTOR_ID: 'walletConnect', COINBASE_CONNECTOR_ID: 'coinbaseWallet', EMAIL_CONNECTOR_ID: 'w3mEmail', diff --git a/packages/scaffold/package.json b/packages/scaffold/package.json index f85e947c..8ed1e048 100644 --- a/packages/scaffold/package.json +++ b/packages/scaffold/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/scaffold-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -37,9 +37,9 @@ "access": "public" }, "dependencies": { - "@web3modal/core-react-native": "2.0.0-alpha.4", - "@web3modal/siwe-react-native": "2.0.0-alpha.4", - "@web3modal/ui-react-native": "2.0.0-alpha.4" + "@web3modal/core-react-native": "1.4.4", + "@web3modal/siwe-react-native": "1.4.4", + "@web3modal/ui-react-native": "1.4.4" }, "peerDependencies": { "react": ">=17", diff --git a/packages/siwe/package.json b/packages/siwe/package.json index 256d4741..d2c59079 100644 --- a/packages/siwe/package.json +++ b/packages/siwe/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/siwe-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -40,9 +40,9 @@ }, "dependencies": { "@walletconnect/utils": "2.13.1", - "@web3modal/common-react-native": "2.0.0-alpha.4", - "@web3modal/core-react-native": "2.0.0-alpha.4", - "@web3modal/ui-react-native": "2.0.0-alpha.4", + "@web3modal/common-react-native": "1.4.4", + "@web3modal/core-react-native": "1.4.4", + "@web3modal/ui-react-native": "1.4.4", "valtio": "1.10.5" }, "react-native": "src/index.ts", diff --git a/packages/ui/package.json b/packages/ui/package.json index 8b848ca5..d0d1acf8 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/ui-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", diff --git a/packages/wagmi/package.json b/packages/wagmi/package.json index a62314af..f3b4fb76 100644 --- a/packages/wagmi/package.json +++ b/packages/wagmi/package.json @@ -1,6 +1,6 @@ { "name": "@web3modal/wagmi-react-native", - "version": "2.0.0-alpha.4", + "version": "1.4.4", "main": "lib/commonjs/index.js", "types": "lib/typescript/index.d.ts", "module": "lib/module/index.js", @@ -38,10 +38,10 @@ "access": "public" }, "dependencies": { - "@web3modal/common-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-react-native": "2.0.0-alpha.4", - "@web3modal/scaffold-utils-react-native": "2.0.0-alpha.4", - "@web3modal/siwe-react-native": "2.0.0-alpha.4" + "@web3modal/common-react-native": "1.4.4", + "@web3modal/scaffold-react-native": "1.4.4", + "@web3modal/scaffold-utils-react-native": "1.4.4", + "@web3modal/siwe-react-native": "1.4.4" }, "peerDependencies": { "@react-native-async-storage/async-storage": ">=1.17.0", diff --git a/yarn.lock b/yarn.lock index c74d7e85..53356a04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,7 +58,7 @@ __metadata: "@storybook/react-webpack5": "npm:^7.4.6" "@storybook/testing-library": "npm:^0.2.2" "@storybook/theming": "npm:^7.4.6" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" + "@web3modal/ui-react-native": "npm:1.4.4" babel-plugin-react-native-web: "npm:^0.19.7" babel-plugin-react-require: "npm:^4.0.1" metro-react-native-babel-preset: "npm:^0.77.0" @@ -89,7 +89,7 @@ __metadata: "@types/react": "npm:^18.0.24" "@types/react-test-renderer": "npm:^18.0.0" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.4" + "@web3modal/wagmi-react-native": "npm:1.4.4" babel-jest: "npm:^29.2.1" babel-plugin-module-resolver: "npm:^5.0.0" eslint: "npm:^8.19.0" @@ -122,8 +122,8 @@ __metadata: "@types/react": "npm:~18.2.45" "@types/react-native": "npm:0.72.2" "@walletconnect/react-native-compat": "npm:2.13.1" - "@web3modal/email-wagmi-react-native": "npm:2.0.0-alpha.4" - "@web3modal/wagmi-react-native": "npm:2.0.0-alpha.4" + "@web3modal/email-wagmi-react-native": "npm:1.4.4" + "@web3modal/wagmi-react-native": "npm:1.4.4" babel-plugin-module-resolver: "npm:^5.0.0" expo: "npm:^50.0.14" expo-application: "npm:~5.8.3" @@ -10417,17 +10417,17 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/common-react-native@npm:2.0.0-alpha.4, @web3modal/common-react-native@workspace:packages/common": +"@web3modal/common-react-native@npm:1.4.4, @web3modal/common-react-native@workspace:packages/common": version: 0.0.0-use.local resolution: "@web3modal/common-react-native@workspace:packages/common" languageName: unknown linkType: soft -"@web3modal/core-react-native@npm:2.0.0-alpha.4, @web3modal/core-react-native@workspace:packages/core": +"@web3modal/core-react-native@npm:1.4.4, @web3modal/core-react-native@workspace:packages/core": version: 0.0.0-use.local resolution: "@web3modal/core-react-native@workspace:packages/core" dependencies: - "@web3modal/common-react-native": "npm:2.0.0-alpha.4" + "@web3modal/common-react-native": "npm:1.4.4" valtio: "npm:1.10.5" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10441,18 +10441,18 @@ __metadata: version: 0.0.0-use.local resolution: "@web3modal/email-ethers-react-native@workspace:packages/email-ethers" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.4" + "@web3modal/email-react-native": "npm:1.4.4" peerDependencies: ethers: ">=5" languageName: unknown linkType: soft -"@web3modal/email-react-native@npm:2.0.0-alpha.4, @web3modal/email-react-native@workspace:packages/email": +"@web3modal/email-react-native@npm:1.4.4, @web3modal/email-react-native@workspace:packages/email": version: 0.0.0-use.local resolution: "@web3modal/email-react-native@workspace:packages/email" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.4" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" + "@web3modal/core-react-native": "npm:1.4.4" + "@web3modal/ui-react-native": "npm:1.4.4" zod: "npm:3.22.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10460,11 +10460,11 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/email-wagmi-react-native@npm:2.0.0-alpha.4, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": +"@web3modal/email-wagmi-react-native@npm:1.4.4, @web3modal/email-wagmi-react-native@workspace:packages/email-wagmi": version: 0.0.0-use.local resolution: "@web3modal/email-wagmi-react-native@workspace:packages/email-wagmi" dependencies: - "@web3modal/email-react-native": "npm:2.0.0-alpha.4" + "@web3modal/email-react-native": "npm:1.4.4" peerDependencies: wagmi: ">=2" languageName: unknown @@ -10475,10 +10475,10 @@ __metadata: resolution: "@web3modal/ethers-react-native@workspace:packages/ethers" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" + "@web3modal/common-react-native": "npm:1.4.4" + "@web3modal/scaffold-react-native": "npm:1.4.4" + "@web3modal/scaffold-utils-react-native": "npm:1.4.4" + "@web3modal/siwe-react-native": "npm:1.4.4" ethers: "npm:6.10.0" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10496,10 +10496,10 @@ __metadata: resolution: "@web3modal/ethers5-react-native@workspace:packages/ethers5" dependencies: "@walletconnect/ethereum-provider": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" + "@web3modal/common-react-native": "npm:1.4.4" + "@web3modal/scaffold-react-native": "npm:1.4.4" + "@web3modal/scaffold-utils-react-native": "npm:1.4.4" + "@web3modal/siwe-react-native": "npm:1.4.4" ethers: "npm:5.7.2" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" @@ -10512,13 +10512,13 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-react-native@npm:2.0.0-alpha.4, @web3modal/scaffold-react-native@workspace:packages/scaffold": +"@web3modal/scaffold-react-native@npm:1.4.4, @web3modal/scaffold-react-native@workspace:packages/scaffold": version: 0.0.0-use.local resolution: "@web3modal/scaffold-react-native@workspace:packages/scaffold" dependencies: - "@web3modal/core-react-native": "npm:2.0.0-alpha.4" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" + "@web3modal/core-react-native": "npm:1.4.4" + "@web3modal/siwe-react-native": "npm:1.4.4" + "@web3modal/ui-react-native": "npm:1.4.4" peerDependencies: react: ">=17" react-native: ">=0.68.5" @@ -10526,27 +10526,27 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/scaffold-utils-react-native@npm:2.0.0-alpha.4, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": +"@web3modal/scaffold-utils-react-native@npm:1.4.4, @web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils": version: 0.0.0-use.local resolution: "@web3modal/scaffold-utils-react-native@workspace:packages/scaffold-utils" dependencies: - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" + "@web3modal/scaffold-react-native": "npm:1.4.4" languageName: unknown linkType: soft -"@web3modal/siwe-react-native@npm:2.0.0-alpha.4, @web3modal/siwe-react-native@workspace:packages/siwe": +"@web3modal/siwe-react-native@npm:1.4.4, @web3modal/siwe-react-native@workspace:packages/siwe": version: 0.0.0-use.local resolution: "@web3modal/siwe-react-native@workspace:packages/siwe" dependencies: "@walletconnect/utils": "npm:2.13.1" - "@web3modal/common-react-native": "npm:2.0.0-alpha.4" - "@web3modal/core-react-native": "npm:2.0.0-alpha.4" - "@web3modal/ui-react-native": "npm:2.0.0-alpha.4" + "@web3modal/common-react-native": "npm:1.4.4" + "@web3modal/core-react-native": "npm:1.4.4" + "@web3modal/ui-react-native": "npm:1.4.4" valtio: "npm:1.10.5" languageName: unknown linkType: soft -"@web3modal/ui-react-native@npm:2.0.0-alpha.4, @web3modal/ui-react-native@workspace:packages/ui": +"@web3modal/ui-react-native@npm:1.4.4, @web3modal/ui-react-native@workspace:packages/ui": version: 0.0.0-use.local resolution: "@web3modal/ui-react-native@workspace:packages/ui" dependencies: @@ -10558,14 +10558,14 @@ __metadata: languageName: unknown linkType: soft -"@web3modal/wagmi-react-native@npm:2.0.0-alpha.4, @web3modal/wagmi-react-native@workspace:packages/wagmi": +"@web3modal/wagmi-react-native@npm:1.4.4, @web3modal/wagmi-react-native@workspace:packages/wagmi": version: 0.0.0-use.local resolution: "@web3modal/wagmi-react-native@workspace:packages/wagmi" dependencies: - "@web3modal/common-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-react-native": "npm:2.0.0-alpha.4" - "@web3modal/scaffold-utils-react-native": "npm:2.0.0-alpha.4" - "@web3modal/siwe-react-native": "npm:2.0.0-alpha.4" + "@web3modal/common-react-native": "npm:1.4.4" + "@web3modal/scaffold-react-native": "npm:1.4.4" + "@web3modal/scaffold-utils-react-native": "npm:1.4.4" + "@web3modal/siwe-react-native": "npm:1.4.4" peerDependencies: "@react-native-async-storage/async-storage": ">=1.17.0" "@react-native-community/netinfo": "*" From f1c2bfaa6aa23eacd08eb91de4db0287b46a39eb Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:50:54 -0300 Subject: [PATCH 18/18] chore: added changeset major --- .changeset/selfish-buses-compete.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .changeset/selfish-buses-compete.md diff --git a/.changeset/selfish-buses-compete.md b/.changeset/selfish-buses-compete.md new file mode 100644 index 00000000..e7728c80 --- /dev/null +++ b/.changeset/selfish-buses-compete.md @@ -0,0 +1,18 @@ +--- +'@web3modal/coinbase-wagmi-react-native': major +'@web3modal/scaffold-utils-react-native': major +'@web3modal/email-wagmi-react-native': major +'@web3modal/scaffold-react-native': major +'@web3modal/ethers5-react-native': major +'@web3modal/common-react-native': major +'@web3modal/ethers-react-native': major +'@web3modal/email-react-native': major +'@web3modal/wagmi-react-native': major +'@web3modal/core-react-native': major +'@web3modal/siwe-react-native': major +'@web3modal/ui-react-native': major +'@web3modal/coinbase-ethers-react-native': major +'@web3modal/email-ethers-react-native': major +--- + +Migration to Wagmi 2, implemented SIWE + One-Click Auth, general improvements