diff --git a/.changeset/small-numbers-compare.md b/.changeset/small-numbers-compare.md new file mode 100644 index 00000000..5344eafd --- /dev/null +++ b/.changeset/small-numbers-compare.md @@ -0,0 +1,5 @@ +--- +'@node-real/walletkit': patch +--- + +Support connecting to a specified wallet diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index f232ffdd..d06c0d43 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -9,10 +9,10 @@ inputs: runs: using: composite steps: - - name: Setup node.js - uses: actions/setup-node@v3 + - name: Install Node.js + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 20 - name: Setup pnpm uses: pnpm/action-setup@v2 diff --git a/examples/nextjs/package.json b/examples/nextjs/package.json index 8390e60e..cdd60926 100644 --- a/examples/nextjs/package.json +++ b/examples/nextjs/package.json @@ -11,12 +11,14 @@ }, "dependencies": { "@node-real/walletkit": "workspace:*", + "@tanstack/react-query": "^5", + "encoding": "^0.1.13", "next": "^14", + "pino-pretty": "^11.2.2", "react": "^18", "react-dom": "^18", "viem": "^2", - "wagmi": "^2", - "@tanstack/react-query": "^5.51.1" + "wagmi": "^2" }, "devDependencies": { "@types/node": "^20", diff --git a/examples/nextjs/pages/_app.tsx b/examples/nextjs/pages/_app.tsx index 02dfb412..4bfb2ae4 100644 --- a/examples/nextjs/pages/_app.tsx +++ b/examples/nextjs/pages/_app.tsx @@ -1,62 +1,67 @@ import '@node-real/walletkit/styles.css'; import '@/styles/globals.css'; -import { bsc, mainnet, opBNB } from 'wagmi/chains'; +import { mainnet } from 'wagmi/chains'; -import { trustWallet, metaMask, walletConnect } from '@node-real/walletkit/wallets'; +import { trustWallet, metaMask, walletConnect } from '@node-real/walletkit/evm'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { - defaultWagmiConfig, - SwitchNetworkModal, - WalletKitButton, - WalletKitOptions, WalletKitProvider, - ProfileModal, ConnectModal, + useConnectModal, + WalletKitConfig, } from '@node-real/walletkit'; -import { WagmiProvider } from 'wagmi'; import { AppProps } from 'next/app'; const queryClient = new QueryClient(); -const config = defaultWagmiConfig({ - appName: 'WalletKit', - chains: [bsc, mainnet, opBNB], - connectors: [trustWallet(), metaMask(), walletConnect()], - - // WalletConnect 2.0 requires a projectId which you can create quickly - // and easily for free over at WalletConnect Cloud https://cloud.walletconnect.com/sign-in - walletConnectProjectId: 'e68a1816d39726c2afabf05661a32767', -}); - -const options: WalletKitOptions = { - initialChainId: 1, +const config: WalletKitConfig = { + walletConfig: { + autoConnect: true, + evmConfig: { + initialChainId: 1, + wallets: [metaMask(), trustWallet(), walletConnect()], + chains: [mainnet] as any[], + }, + }, + appearance: { + mode: 'light', + }, + eventConfig: { + closeModalOnEsc: false, + closeModalOnOverlayClick: false, + closeModalAfterConnected: true, + }, }; export default function App({ Component, pageProps }: AppProps) { return ( - + - - - - + - + {/* */} + + - {/* + {/* Profile modal shows some basic information about the current account, If you don't need this modal, you can remove it. */} - + {/* */} - {/* + {/* 👇 Here's the SwitchNetworkModal If the user switches to a network that is not supported by our dApp, this modal will be displayed to remind the user to switch to our supported networks. */} - - + {/* */} - + ); } + +function ConnectButton() { + const { onOpen } = useConnectModal(); + + return ; +} diff --git a/examples/nextjs/pages/_document.tsx b/examples/nextjs/pages/_document.tsx index ef37a5de..f6de4d29 100644 --- a/examples/nextjs/pages/_document.tsx +++ b/examples/nextjs/pages/_document.tsx @@ -1,5 +1,5 @@ import { Html, Head, Main, NextScript } from 'next/document'; -import { EthereumScript } from '@node-real/walletkit'; +import { EthereumScript } from '@node-real/walletkit/evm'; export default function Document() { return ( diff --git a/examples/vite/package.json b/examples/vite/package.json index a8fb2855..de7d4431 100644 --- a/examples/vite/package.json +++ b/examples/vite/package.json @@ -11,11 +11,12 @@ }, "dependencies": { "@node-real/walletkit": "workspace:*", + "@particle-network/connectkit": "^2.0.0", + "@tanstack/react-query": "^5", "react": "^18", "react-dom": "^18", "viem": "^2", - "wagmi": "^2", - "@tanstack/react-query": "^5.51.1" + "wagmi": "^2" }, "devDependencies": { "@types/react": "^18", diff --git a/examples/vite/src/App.tsx b/examples/vite/src/App.tsx index 6059af0d..60d6e44e 100644 --- a/examples/vite/src/App.tsx +++ b/examples/vite/src/App.tsx @@ -1,47 +1,49 @@ -import '@node-real/walletkit/styles.css'; -import './global.css'; -import { bsc, mainnet, opBNB } from 'wagmi/chains'; - -import { trustWallet, metaMask, walletConnect } from '@node-real/walletkit/wallets'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ConnectModal, - defaultWagmiConfig, - ProfileModal, - SwitchNetworkModal, - WalletKitButton, - WalletKitOptions, + useConnectModal, + WalletKitConfig, WalletKitProvider, } from '@node-real/walletkit'; -import { WagmiProvider } from 'wagmi'; - -const queryClient = new QueryClient(); +import VConsole from 'vconsole'; +import { metaMask, trustWallet, walletConnect } from '@node-real/walletkit/evm'; +import { mainnet } from 'viem/chains'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -const config = defaultWagmiConfig({ - appName: 'WalletKit', - chains: [mainnet, bsc, opBNB], - connectors: [trustWallet(), metaMask(), walletConnect()], +new VConsole(); - // WalletConnect 2.0 requires a projectId which you can create quickly - // and easily for free over at WalletConnect Cloud https://cloud.walletconnect.com/sign-in - walletConnectProjectId: 'e68a1816d39726c2afabf05661a32767', -}); +const queryClient = new QueryClient(); -const options: WalletKitOptions = { - initialChainId: 1, +const config: WalletKitConfig = { + walletConfig: { + autoConnect: true, + evmConfig: { + initialChainId: 1, + wallets: [metaMask(), trustWallet(), walletConnect()], + chains: [mainnet] as any[], + }, + }, + appearance: { + mode: 'auto', + }, + eventConfig: { + closeModalOnEsc: false, + closeModalOnOverlayClick: false, + closeModalAfterConnected: true, + }, }; export default function App() { return ( - + - - - - - - + + - + ); } + +function ConnectButton() { + const { onOpen } = useConnectModal(); + return ; +} diff --git a/package.json b/package.json index 19c4a0ca..1b5dd8e2 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,8 @@ "scripts": { "prepare": "husky install", "lint": "pnpm eslint .", - "dev": "pnpm --F @node-real/walletkit dev", - "build": "pnpm --F @node-real/walletkit build", - "dev:docs": "pnpm --F @node-real/walletkit build:watch & pnpm --F website dev", + "dev": "pnpm --F @node-real/* dev", + "build": "pnpm --F @node-real/* build", "build:docs": "pnpm build && pnpm --F website build", "ci:enter": "pnpm changeset pre enter alpha || true", "ci:exit": "pnpm changeset pre exit || true", @@ -21,7 +20,7 @@ "ci:stable-version": "pnpm ci:exit && pnpm ci:version" }, "devDependencies": { - "@changesets/cli": "^2.27.5", + "@changesets/cli": "^2.27.7", "@commitlint/cli": "^18.6.1", "@commitlint/config-conventional": "^18.6.3", "@typescript-eslint/eslint-plugin": "^5.62.0", @@ -30,7 +29,7 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.3.5", "husky": "^8.0.3", - "lint-staged": "^15.2.7", - "prettier": "^3.3.2" + "lint-staged": "^15.2.9", + "prettier": "^3.3.3" } } diff --git a/packages/walletkit/CHANGELOG.md b/packages/walletkit/CHANGELOG.md index f3ecfd30..e05de090 100644 --- a/packages/walletkit/CHANGELOG.md +++ b/packages/walletkit/CHANGELOG.md @@ -1,40 +1,17 @@ # @node-real/walletkit -## 2.0.3 +## 2.3.0-alpha.1 ### Patch Changes -- 5b7f3f6: test: Add log -- 5b7f3f6: fix: ssr no need to wait for the provider to be ready +- decd1a4: feat: Add log -## 2.0.3-alpha.0 +## 2.3.0-alpha.0 -### Patch Changes - -- d5437a7: test: Add log -- 90846a4: fix: ssr no need to wait for the provider to be ready - -## 2.0.2 - -### Patch Changes - -- 1fed209: feat: Upgrade wagmi & viem to 2.x -- 1fed209: fix: ssr no need to wait for the provider to be ready - -## 2.0.2-alpha.0 - -### Patch Changes - -- 90846a4: fix: ssr no need to wait for the provider to be ready - -## 2.0.1 - -### Patch Changes - -- 83c5001: feat: Upgrade wagmi & viem to 2.x +### Minor Changes -## 2.0.1-alpha.0 +- 1ebabc3: refactor: solana and evm are unified into one package ### Patch Changes -- 919b9ba: feat: Upgrade wagmi & viem to 2.x +- 1ebabc3: refactor: Update configuration items & Add EmbeddedConnectModal diff --git a/packages/walletkit/__dev__/App.tsx b/packages/walletkit/__dev__/App.tsx index 0f02686d..7212c53e 100644 --- a/packages/walletkit/__dev__/App.tsx +++ b/packages/walletkit/__dev__/App.tsx @@ -1,89 +1,124 @@ -import { useState } from 'react'; -import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { WagmiProvider } from 'wagmi'; -import VConsole from 'vconsole'; import { ConnectModal, - ProfileModal, - SwitchNetworkModal, - ThemeMode, - WalletKitButton, - WalletKitOptions, - WalletKitProvider, - defaultWagmiConfig, useConnectModal, - useProfileModal, - useSwitchNetworkModal, -} from '@/index'; + useWalletKit, + WalletKitConfig, + WalletKitProvider, +} from '@/core/index'; +import './style.css'; +import VConsole from 'vconsole'; import { binanceWeb3Wallet, bitgetWallet, coinbaseWallet, + evmConfig, + mathWallet, metaMask, okxWallet, tokenPocket, trustWallet, walletConnect, -} from '@/wallets'; -import { chains } from './chains'; - -const queryClient = new QueryClient(); +} from '@/evm/index'; +import { + trustWallet as solanaTrustWallet, + phantomWallet as solanaPhantomWallet, + solanaConfig, +} from '@/solana/index'; +import { bsc, mainnet } from 'viem/chains'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { useAccount, useDisconnect } from 'wagmi'; new VConsole(); -const config = defaultWagmiConfig({ - appName: 'WalletKit', - chains, - connectors: [ - binanceWeb3Wallet(), - bitgetWallet(), - coinbaseWallet(), - metaMask(), - okxWallet(), - tokenPocket(), - trustWallet(), - walletConnect(), - ], -}); +const queryClient = new QueryClient(); -const options: WalletKitOptions = { - initialChainId: 204, +const config: WalletKitConfig = { + debug: true, + appearance: { + mode: 'light', + }, + eventConfig: { + closeModalOnEsc: false, + closeModalOnOverlayClick: false, + closeModalAfterConnected: true, + onChainAlreadyAdded(wallet, chainId) { + console.log(wallet, chainId); + }, + }, + walletConfigs: [ + evmConfig({ + autoConnect: true, + initialChainId: 1, + chains: [mainnet, bsc], + wallets: [ + metaMask(), + trustWallet(), + walletConnect(), + binanceWeb3Wallet(), + tokenPocket(), + bitgetWallet(), + okxWallet(), + coinbaseWallet(), + mathWallet(), + ], + }), + solanaConfig({ + autoConnect: true, + rpcUrl: 'https://solana-rpc.debridge.finance', + wallets: [solanaTrustWallet(), solanaPhantomWallet()], + }), + ], }; export default function App() { - const [mode, setMode] = useState('light'); - const nextMode = mode === 'light' ? 'dark' : 'light'; - return ( - + - -
mode: {mode}
- -
- - - - - - - - + + - + ); } -function Example() { - const connectModal = useConnectModal(); - const profileModal = useProfileModal(); - const switchNetworkModal = useSwitchNetworkModal(); +function ConnectButton() { + const { onOpen } = useConnectModal(); + + const { address } = useAccount(); + const { disconnect } = useDisconnect(); + const { connect } = useWalletKit(); + + if (address) { + return ( + <> +
address:{address}
+ + + ); + } return ( <> - - - + + ); } diff --git a/packages/walletkit/__dev__/chains.ts b/packages/walletkit/__dev__/chains.ts deleted file mode 100644 index b2067fd4..00000000 --- a/packages/walletkit/__dev__/chains.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { bsc, bscTestnet, mainnet, opBNB } from 'wagmi/chains'; - -export const chains = [ - { - id: 1017, - name: 'BNB Greenfield', - nativeCurrency: { - name: 'tBNB', - symbol: 'tBNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: [`https://greenfield-chain-us.bnbchain.org`], - }, - public: { - http: [`https://greenfield-chain-us.bnbchain.org`], - }, - }, - blockExplorers: { - etherscan: { name: 'Greenfield Scan', url: `https://greenfieldscan.com` }, - default: { name: 'Greenfield Scan', url: `https://greenfieldscan.com` }, - }, - }, - opBNB, - bscTestnet, - bsc, - mainnet, -]; diff --git a/packages/walletkit/__dev__/index.html b/packages/walletkit/__dev__/index.html index 07e23793..d7134589 100644 --- a/packages/walletkit/__dev__/index.html +++ b/packages/walletkit/__dev__/index.html @@ -2,7 +2,6 @@ - WalletKit Test Demo