@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
JavaScript
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;