Skip to content

Commit c9e7cce

Browse files
[fix] Duplicate coinbase wallets (#987)
* [fix] Duplicate coinbase wallets * Minor refactor
1 parent 838eb87 commit c9e7cce

File tree

3 files changed

+51
-48
lines changed

3 files changed

+51
-48
lines changed

packages/coinbase/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@web3-onboard/coinbase",
3-
"version": "2.0.0",
3+
"version": "2.0.1",
44
"description": "Coinbase Wallet module for web3-onboard",
55
"module": "dist/index.js",
66
"browser": "dist/index.js",

packages/coinbase/src/index.ts

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,57 @@
11
import { WalletInit } from '@web3-onboard/common'
22

3-
function coinbaseWallet(options?: { darkMode?: boolean }): WalletInit {
4-
const { darkMode = false } = options || {}
5-
6-
return () => {
7-
return {
8-
label: 'Coinbase',
9-
getIcon: async () => (await import('./icon.js')).default,
10-
getInterface: async ({ chains, appMetadata }) => {
11-
const [chain] = chains
12-
const { name, icon } = appMetadata || {}
13-
14-
const { CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk')
15-
16-
const base64 = window.btoa(icon || '')
17-
const appLogoUrl = `data:image/svg+xml;base64,${base64}`
18-
19-
const instance = new CoinbaseWalletSDK({
20-
appName: name || '',
21-
appLogoUrl,
22-
darkMode
23-
})
24-
25-
const coinbaseWalletProvider = instance.makeWeb3Provider(
26-
chain.rpcUrl,
27-
parseInt(chain.id)
28-
)
29-
30-
// patch the chainChanged event
31-
const on = coinbaseWalletProvider.on.bind(coinbaseWalletProvider)
32-
coinbaseWalletProvider.on = (event, listener) => {
33-
on(event, val => {
34-
if (event === 'chainChanged') {
35-
listener(`0x${(val as number).toString(16)}`)
36-
return
3+
function coinbaseWallet({
4+
darkMode = false
5+
}: {
6+
darkMode?: boolean
7+
}): WalletInit {
8+
return ({ device }) =>
9+
device.type === 'mobile'
10+
? {
11+
label: 'Coinbase',
12+
getIcon: async () => (await import('./icon.js')).default,
13+
getInterface: async ({ chains, appMetadata }) => {
14+
const [chain] = chains
15+
const { name, icon } = appMetadata || {}
16+
17+
const { CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk')
18+
19+
const base64 = window.btoa(icon || '')
20+
const appLogoUrl = `data:image/svg+xml;base64,${base64}`
21+
22+
const instance = new CoinbaseWalletSDK({
23+
appName: name || '',
24+
appLogoUrl,
25+
darkMode
26+
})
27+
28+
const coinbaseWalletProvider = instance.makeWeb3Provider(
29+
chain.rpcUrl,
30+
parseInt(chain.id)
31+
)
32+
33+
// patch the chainChanged event
34+
const on = coinbaseWalletProvider.on.bind(coinbaseWalletProvider)
35+
coinbaseWalletProvider.on = (event, listener) => {
36+
on(event, val => {
37+
if (event === 'chainChanged') {
38+
listener(`0x${(val as number).toString(16)}`)
39+
return
40+
}
41+
42+
listener(val)
43+
})
44+
45+
return coinbaseWalletProvider
3746
}
3847

39-
listener(val)
40-
})
41-
42-
return coinbaseWalletProvider
43-
}
44-
45-
return {
46-
provider: coinbaseWalletProvider,
47-
instance
48+
return {
49+
provider: coinbaseWalletProvider,
50+
instance
51+
}
52+
}
4853
}
49-
}
50-
}
51-
}
54+
: null
5255
}
5356

5457
export default coinbaseWallet

packages/injected/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export enum ProviderLabel {
4949
Bitpie = 'Bitpie',
5050
BlockWallet = 'BlockWallet',
5151
Brave = 'Brave Wallet',
52-
Coinbase = 'Coinbase Wallet',
52+
Coinbase = 'Coinbase',
5353
Dcent = `D'CENT`,
5454
Detected = 'Detected Wallet',
5555
Frame = 'Frame',

0 commit comments

Comments
 (0)