UNPKG

@web3-onboard/coinbase

Version:

Coinbase SDK wallet module for connecting to Web3-Onboard. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic moder

62 lines (61 loc) 3.01 kB
function coinbaseWallet({ supportedWalletType = 'all', darkMode = false, enableMobileWalletLink = false, reloadOnDisconnect = true } = {}) { return () => { return { label: 'Coinbase Wallet', getIcon: async () => (await import('./icon.js')).default, getInterface: async ({ chains, appMetadata }) => { if (enableMobileWalletLink || reloadOnDisconnect || darkMode) { console.warn('darkMode, enableMobileWalletLink and reloadOnDisconnect init props are deprecated after version 2.2.7 of @web3-onboard/coinbase'); } const { name, icon } = appMetadata || {}; // according to https://github.com/wagmi-dev/wagmi/issues/383 // @coinbase/wallet-sdk export double default fields // so we need to detect it to get the real constructor const { default: CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk'); const CoinbaseWalletSDKConstructor = (CoinbaseWalletSDK.default ? CoinbaseWalletSDK.default : CoinbaseWalletSDK); const { isHex, toHex, createEIP1193Provider, fromHex } = await import('@web3-onboard/common'); const base64 = window.btoa(icon || ''); const appLogoUrl = `data:image/svg+xml;base64,${base64}`; const appChainIds = chains.map(({ id }) => fromHex(id, 'number')); const instance = new CoinbaseWalletSDKConstructor({ appName: name || '', appLogoUrl, appChainIds }); const coinbaseWalletProvider = instance.makeWeb3Provider({ options: supportedWalletType }); // patch the chainChanged event const on = coinbaseWalletProvider.on.bind(coinbaseWalletProvider); coinbaseWalletProvider.on = (event, listener) => { // @ts-ignore on(event, val => { if (event === 'chainChanged') { let hexVal; if (isHex(val)) { hexVal = val; } else { hexVal = toHex(val); } // @ts-ignore listener(hexVal); return; } listener(val); }); return coinbaseWalletProvider; }; const provider = createEIP1193Provider(coinbaseWalletProvider); provider.removeListener = (event, func) => { }; return { provider, instance }; } }; }; } export default coinbaseWallet;