Skip to content

Commit 2a566ec

Browse files
tmmwenfixadonesky1ffmcgee725jiexi
authored
refactor(connectors): metamask (#4960)
* draft metamask connector upgrade * update connect errors * update switchChain errors * handle disconnect edge-case * handle accounts changed edge-case * prevent connect event when no accounts are present * add fallback to getChainId * setup supportedNetworks off wagmi's config * add connectWith, connectAndSign support and update types * add dapp name and url to playground * ensure provider is available in reconnection flow * lint * fix reconnecting by adding retry w/ timeout * update @metamask/connect-evm version to published version * fix connectAndSign parameter * lint * refactor: code clean up * update CODEOWNERS * update docs * add support for debug flag and update docs * add support for initial multichain connection * feat: update connector * lint * run pnpm i * lint * add changeset entry * chore: update references to outdated sdk * refactor(connectors): metamask * fix: add mobile.preferredOpenLink option support for react native deeplink handling in metamask connector * chore: tweaks * feat: upgrade @metamask/connect-evm for full display_uri support * chore: add qr code for display_uri to playground * chore: tweaks * chore: audit * Use connect-evm 0.3.1 * connect-evm 0.4.0 * update connector param interface * bump @metamask/connect-evm to 0.5.0 * use hex instead of decimal chainId * refactor: minor update to metamask connector * biome * Bump @metamask/connect-evm to latest * bump @metamask/connect-evm and add analytics identifier * update connect-evm * make metamask connector headless in vite-react playground * remove dappMetadata and logging options * update changeset and docs * update changeset * refactor: tweaks * chore: changeset * fix(connectors): merge dappMetadata with defaults to prevent missing name dappMetadata is typed with all-optional fields for backwards compat, but the underlying connect-evm SDK requires `name`. Merge with defaultDappParams instead of replacing so a partial dappMetadata always gets a valid `name` filled in. * chore: revert onAccountsChanged update * reset lockfile * chore: tweaks --------- Co-authored-by: Alex Mendonca <[email protected]> Co-authored-by: Alex Donesky <[email protected]> Co-authored-by: ffmcgee <[email protected]> Co-authored-by: aphex <[email protected]> Co-authored-by: Jiexi Luan <[email protected]>
1 parent 4e55f70 commit 2a566ec

File tree

16 files changed

+800
-788
lines changed

16 files changed

+800
-788
lines changed

.changeset/brave-hens-rare.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
"wagmi": minor
3+
"@wagmi/vue": patch
4+
"@wagmi/solid": patch
5+
---
6+
7+
Update MetaMask connector from `@metamask/sdk` to the new `@metamask/connect-evm`.
8+
9+
```bash
10+
npm install @metamask/connect-evm
11+
npm uninstall @metamask/sdk
12+
```

.changeset/upset-trains-lick.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
---
2+
"@wagmi/connectors": major
3+
---
4+
5+
Migrated MetaMask connector from `@metamask/sdk` to the new `@metamask/connect-evm` package.
6+
7+
## Breaking Changes
8+
9+
### New Peer Dependency
10+
11+
You must install `@metamask/connect-evm` as a peer dependency:
12+
13+
```bash
14+
npm install @metamask/connect-evm
15+
# or
16+
pnpm add @metamask/connect-evm
17+
```
18+
19+
### Parameter Changes
20+
21+
The connector parameters have been simplified and changed to align with the new SDK.
22+
23+
**Removed options:**
24+
25+
- `dappMetadata` - Use `dapp` instead
26+
- `logging` - Use `debug` instead
27+
- `headless` - Use `ui.headless` instead
28+
- `checkInstallationImmediately`
29+
- `checkInstallationOnAllCalls`
30+
- `preferDesktop` - Use `ui.preferExtension` instead
31+
- `openDeeplink` - Use `mobile.preferredOpenLink` instead
32+
- `extensionOnly`
33+
- `infuraAPIKey`
34+
- `communicationLayerPreference`
35+
- `communicationServerUrl`
36+
- `enableAnalytics`
37+
- `shouldShimWeb3`
38+
- `storage`
39+
- `timer`
40+
- `i18nOptions`
41+
- `modals`
42+
- All communication layer options
43+
44+
**New options:**
45+
46+
- `dapp` - Dapp identification (`{ name: string, url?: string, iconUrl?: string }`)
47+
- `debug` - Enable debug logging (boolean)
48+
- `mobile` - Mobile-specific options:
49+
- `preferredOpenLink` - Custom function to open deeplinks (required for React Native)
50+
- `useDeeplink` - Use `metamask://` deeplink vs `https://metamask.app.link` universal link
51+
- `ui` - UI configuration options:
52+
- `headless` - Disable built-in UI
53+
- `preferExtension` - Prefer browser extension over mobile
54+
- `showInstallModal` - Show install modal when MetaMask is not installed
55+
- `transport` - Transport configuration:
56+
- `extensionId` - Extension ID for browser extension transport
57+
58+
**Preserved options:**
59+
60+
- `connectAndSign` - Shortcut to connect and sign a message
61+
- `connectWith` - Connect with any RPC method
62+
63+
### Migration Example
64+
65+
**Before:**
66+
67+
```ts
68+
import { metaMask } from 'wagmi/connectors'
69+
70+
metaMask({
71+
dappMetadata: {
72+
name: 'My DApp',
73+
url: 'https://mydapp.com',
74+
iconUrl: 'https://mydapp.com/icon.png',
75+
},
76+
logging: { sdk: true },
77+
})
78+
```
79+
80+
**After:**
81+
82+
```ts
83+
import { metaMask } from 'wagmi/connectors'
84+
85+
metaMask({
86+
dapp: {
87+
name: 'My DApp',
88+
url: 'https://mydapp.com',
89+
iconUrl: 'https://mydapp.com/icon.png',
90+
},
91+
debug: true,
92+
})
93+
```

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@tmm @jxom
22

33
/packages/connectors/src/gemini @mikelxc
4-
/packages/connectors/src/metaMask @ecp4224 @omridan159 @abretonc7s @elefantel @BjornGunnarsson @EdouardBougon
4+
/packages/connectors/src/metaMask @wenfix @ffmcgee725 @jiexi @adonesky1 @chakra-guy
55
/packages/connectors/src/safe @DaniSomoza @dasanra @mikhailxyz @yagopv
66
/packages/connectors/src/walletConnect @ganchoradkov @glitch-txs @ignaciosantise @tomiir

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
"ignoreDependencies": [
110110
"@base-org/account",
111111
"@coinbase/wallet-sdk",
112-
"@metamask/sdk",
112+
"@metamask/connect-evm",
113113
"@safe-global/safe-apps-provider",
114114
"@safe-global/safe-apps-sdk",
115115
"@wagmi/core",

packages/connectors/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"peerDependencies": {
3838
"@base-org/account": "^2.5.1",
3939
"@coinbase/wallet-sdk": "^4.3.6",
40-
"@metamask/sdk": "~0.33.1",
40+
"@metamask/connect-evm": "~0.9.0",
4141
"@safe-global/safe-apps-provider": "~0.18.6",
4242
"@safe-global/safe-apps-sdk": "^9.1.0",
4343
"@wagmi/core": "workspace:*",
@@ -53,7 +53,7 @@
5353
"@coinbase/wallet-sdk": {
5454
"optional": true
5555
},
56-
"@metamask/sdk": {
56+
"@metamask/connect-evm": {
5757
"optional": true
5858
},
5959
"@safe-global/safe-apps-provider": {
@@ -75,7 +75,7 @@
7575
"devDependencies": {
7676
"@base-org/account": "catalog:",
7777
"@coinbase/wallet-sdk": "catalog:",
78-
"@metamask/sdk": "catalog:",
78+
"@metamask/connect-evm": "catalog:",
7979
"@safe-global/safe-apps-provider": "catalog:",
8080
"@safe-global/safe-apps-sdk": "catalog:",
8181
"@wagmi/core": "workspace:*",

0 commit comments

Comments
 (0)