From 21d93f529fb6c39d96d75f91a5f9bbab846af6e8 Mon Sep 17 00:00:00 2001 From: tomiir Date: Thu, 20 Jun 2024 13:12:53 -0600 Subject: [PATCH] fix: ethers5 CB Id (#2445) --- .../core/src/controllers/OptionsController.ts | 5 + packages/ethers/src/client.ts | 13 +-- packages/ethers/src/utils/defaultConfig.ts | 6 +- packages/ethers5/src/client.ts | 54 ++++++----- packages/ethers5/src/utils/defaultConfig.ts | 11 +-- packages/scaffold-ui/exports/index.ts | 1 + .../w3m-connect-featured-widget/index.ts | 48 ++-------- .../w3m-connect-recommended-widget/index.ts | 31 ++----- .../src/partials/w3m-connector-list/index.ts | 92 +++++++++++++++++++ .../styles.ts | 0 .../partials/w3m-wallet-login-list/index.ts | 13 +-- packages/scaffold-ui/src/utils/WalletUtil.ts | 52 +++++++++++ .../src/views/w3m-connect-view/index.ts | 10 +- packages/scaffold-utils/src/ConstantsUtil.ts | 3 +- packages/scaffold/src/client.ts | 5 + packages/wagmi/src/client.ts | 2 + 16 files changed, 222 insertions(+), 124 deletions(-) create mode 100644 packages/scaffold-ui/src/partials/w3m-connector-list/index.ts rename packages/scaffold-ui/src/partials/{w3m-wallet-login-list => w3m-connector-list}/styles.ts (100%) create mode 100644 packages/scaffold-ui/src/utils/WalletUtil.ts diff --git a/packages/core/src/controllers/OptionsController.ts b/packages/core/src/controllers/OptionsController.ts index 27ebda3004..eff3026752 100644 --- a/packages/core/src/controllers/OptionsController.ts +++ b/packages/core/src/controllers/OptionsController.ts @@ -21,6 +21,7 @@ export interface OptionsControllerState { metadata?: Metadata enableOnramp?: boolean disableAppend?: boolean + enableEIP6963?: boolean } type StateKey = keyof OptionsControllerState @@ -103,6 +104,10 @@ export const OptionsController = { state.disableAppend = disableAppend }, + setEIP6963Enabled(enableEIP6963: OptionsControllerState['enableEIP6963']) { + state.enableEIP6963 = enableEIP6963 + }, + getSnapshot() { return snapshot(state) } diff --git a/packages/ethers/src/client.ts b/packages/ethers/src/client.ts index c72429ff57..7381e9d26b 100644 --- a/packages/ethers/src/client.ts +++ b/packages/ethers/src/client.ts @@ -502,13 +502,14 @@ export class Web3Modal extends Web3ModalScaffold { this.syncRequestedNetworks(chains, chainImages) this.syncConnectors(ethersConfig) - if (ethersConfig.EIP6963) { - if (typeof window !== 'undefined') { - this.listenConnectors(ethersConfig.EIP6963) - this.checkActive6963Provider() - } + // Setup EIP6963 providers + if (typeof window !== 'undefined') { + this.listenConnectors(true) + this.checkActive6963Provider() } + this.setEIP6963Enabled(ethersConfig.EIP6963 !== false) + if (ethersConfig.injected) { this.checkActiveInjectedProvider(ethersConfig) } @@ -1441,7 +1442,7 @@ export class Web3Modal extends Web3ModalScaffold { const isCoinbaseDuplicated = coinbaseConnector && event.detail.info.rdns === - ConstantsUtil.CONNECTOR_RDNS_MAP[ConstantsUtil.COINBASE_CONNECTOR_ID] + ConstantsUtil.CONNECTOR_RDNS_MAP[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID] if (!existingConnector && !isCoinbaseDuplicated) { const type = PresetsUtil.ConnectorTypesMap[ConstantsUtil.EIP6963_CONNECTOR_ID] diff --git a/packages/ethers/src/utils/defaultConfig.ts b/packages/ethers/src/utils/defaultConfig.ts index 4c7da616b5..badb056acf 100644 --- a/packages/ethers/src/utils/defaultConfig.ts +++ b/packages/ethers/src/utils/defaultConfig.ts @@ -30,9 +30,7 @@ export function defaultConfig(options: ConfigOptions) { showWallets: true, walletFeatures: true }, - metadata, - rpcUrl, - defaultChainId + metadata } = options let injectedProvider: Provider | undefined = undefined @@ -95,7 +93,7 @@ export function defaultConfig(options: ConfigOptions) { providers.injected = getInjectedProvider() } - if (enableCoinbase && rpcUrl && defaultChainId) { + if (enableCoinbase) { providers.coinbase = getCoinbaseProvider() } diff --git a/packages/ethers5/src/client.ts b/packages/ethers5/src/client.ts index 944e4c50d0..7cee010cc5 100644 --- a/packages/ethers5/src/client.ts +++ b/packages/ethers5/src/client.ts @@ -250,7 +250,7 @@ export class Web3Modal extends Web3ModalScaffold { EthersStoreUtil.setError(error) } this.setEIP6963Provider(provider, info.name) - } else if (id === ConstantsUtil.COINBASE_CONNECTOR_ID) { + } else if (id === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID) { const CoinbaseProvider = ethersConfig.coinbase if (!CoinbaseProvider) { throw new Error('connectionControllerClient:connectCoinbase - connector is undefined') @@ -384,16 +384,17 @@ export class Web3Modal extends Web3ModalScaffold { this.checkActiveInjectedProvider(ethersConfig) } - if (ethersConfig.EIP6963) { - if (typeof window !== 'undefined') { - this.listenConnectors(ethersConfig.EIP6963) - this.checkActive6963Provider() - } - } - if (ethersConfig.coinbase) { this.checkActiveCoinbaseProvider(ethersConfig) } + + // Setup EIP6963 providers + if (typeof window !== 'undefined') { + this.listenConnectors(true) + this.checkActive6963Provider() + } + + this.setEIP6963Enabled(ethersConfig.EIP6963 !== false) } // -- Public ------------------------------------------------------------------ @@ -563,7 +564,7 @@ export class Web3Modal extends Web3ModalScaffold { const walletId = localStorage.getItem(EthersConstantsUtil.WALLET_ID) if (CoinbaseProvider) { - if (walletId === ConstantsUtil.COINBASE_CONNECTOR_ID) { + if (walletId === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID) { if (CoinbaseProvider._addresses && CoinbaseProvider._addresses?.length > 0) { this.setCoinbaseProvider(config) this.watchCoinbase(config) @@ -640,14 +641,17 @@ export class Web3Modal extends Web3ModalScaffold { } private async setCoinbaseProvider(config: ProviderType) { - window?.localStorage.setItem(EthersConstantsUtil.WALLET_ID, ConstantsUtil.COINBASE_CONNECTOR_ID) + window?.localStorage.setItem( + EthersConstantsUtil.WALLET_ID, + ConstantsUtil.COINBASE_SDK_CONNECTOR_ID + ) const CoinbaseProvider = config.coinbase if (CoinbaseProvider) { const { address, chainId } = await EthersHelpersUtil.getUserInfo(CoinbaseProvider) if (address && chainId) { EthersStoreUtil.setChainId(chainId) - EthersStoreUtil.setProviderType('coinbaseWallet') + EthersStoreUtil.setProviderType('coinbaseWalletSDK') EthersStoreUtil.setProvider(config.coinbase) EthersStoreUtil.setStatus('connected') EthersStoreUtil.setIsConnected(true) @@ -786,7 +790,7 @@ export class Web3Modal extends Web3ModalScaffold { } function chainChangedHandler(chainId: string) { - if (chainId && walletId === ConstantsUtil.COINBASE_CONNECTOR_ID) { + if (chainId && walletId === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID) { const chain = Number(chainId) EthersStoreUtil.setChainId(chain) } @@ -1002,7 +1006,7 @@ export class Web3Modal extends Web3ModalScaffold { } } } - } else if (providerType === ConstantsUtil.COINBASE_CONNECTOR_ID && chain) { + } else if (providerType === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID && chain) { const CoinbaseProvider = provider if (CoinbaseProvider) { try { @@ -1059,11 +1063,11 @@ export class Web3Modal extends Web3ModalScaffold { if (config.coinbase) { w3mConnectors.push({ - id: ConstantsUtil.COINBASE_CONNECTOR_ID, - explorerId: PresetsUtil.ConnectorExplorerIds[ConstantsUtil.COINBASE_CONNECTOR_ID], - imageId: PresetsUtil.ConnectorImageIds[ConstantsUtil.COINBASE_CONNECTOR_ID], - imageUrl: this.options?.connectorImages?.[ConstantsUtil.COINBASE_CONNECTOR_ID], - name: PresetsUtil.ConnectorNamesMap[ConstantsUtil.COINBASE_CONNECTOR_ID], + id: ConstantsUtil.COINBASE_SDK_CONNECTOR_ID, + explorerId: PresetsUtil.ConnectorExplorerIds[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID], + imageId: PresetsUtil.ConnectorImageIds[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID], + imageUrl: this.options?.connectorImages?.[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID], + name: PresetsUtil.ConnectorNamesMap[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID], type: 'EXTERNAL' }) } @@ -1076,7 +1080,15 @@ export class Web3Modal extends Web3ModalScaffold { const { info, provider } = event.detail const connectors = this.getConnectors() const existingConnector = connectors.find(c => c.name === info.name) - if (!existingConnector) { + const coinbaseConnector = connectors.find( + c => c.id === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID + ) + const isCoinbaseDuplicated = + coinbaseConnector && + event.detail.info.rdns === + ConstantsUtil.CONNECTOR_RDNS_MAP[ConstantsUtil.COINBASE_SDK_CONNECTOR_ID] + + if (!existingConnector && !isCoinbaseDuplicated) { const type = PresetsUtil.ConnectorTypesMap[ConstantsUtil.EIP6963_CONNECTOR_ID] if (type) { this.addConnector({ @@ -1090,8 +1102,8 @@ export class Web3Modal extends Web3ModalScaffold { }) const eip6963ProviderObj = { - info, - provider + provider, + info } this.EIP6963Providers.push(eip6963ProviderObj) diff --git a/packages/ethers5/src/utils/defaultConfig.ts b/packages/ethers5/src/utils/defaultConfig.ts index d002eb5f37..5c6c5e6250 100644 --- a/packages/ethers5/src/utils/defaultConfig.ts +++ b/packages/ethers5/src/utils/defaultConfig.ts @@ -14,14 +14,7 @@ export interface ConfigOptions { } export function defaultConfig(options: ConfigOptions) { - const { - enableEIP6963 = true, - enableInjected = true, - enableCoinbase = true, - metadata, - rpcUrl, - defaultChainId - } = options + const { enableEIP6963 = true, enableInjected = true, enableCoinbase = true, metadata } = options let injectedProvider: Provider | undefined = undefined // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents @@ -78,7 +71,7 @@ export function defaultConfig(options: ConfigOptions) { return coinbaseProvider } - if (enableCoinbase && rpcUrl && defaultChainId) { + if (enableCoinbase) { providers.coinbase = getCoinbaseProvider() } diff --git a/packages/scaffold-ui/exports/index.ts b/packages/scaffold-ui/exports/index.ts index 5eb76c4e1a..d455421c66 100644 --- a/packages/scaffold-ui/exports/index.ts +++ b/packages/scaffold-ui/exports/index.ts @@ -104,5 +104,6 @@ export * from '../src/partials/w3m-connect-external-widget/index.js' export * from '../src/partials/w3m-connect-recent-widget/index.js' export * from '../src/partials/w3m-connect-recommended-widget/index.js' export * from '../src/partials/w3m-connect-walletconnect-widget/index.js' +export * from '../src/partials/w3m-connector-list/index.js' export * from '../src/partials/w3m-all-wallets-widget/index.js' export * from '../src/partials/w3m-account-auth-button/index.js' diff --git a/packages/scaffold-ui/src/partials/w3m-connect-featured-widget/index.ts b/packages/scaffold-ui/src/partials/w3m-connect-featured-widget/index.ts index 35946ee992..d8878de660 100644 --- a/packages/scaffold-ui/src/partials/w3m-connect-featured-widget/index.ts +++ b/packages/scaffold-ui/src/partials/w3m-connect-featured-widget/index.ts @@ -1,32 +1,15 @@ import type { WcWallet } from '@web3modal/core' -import { - ApiController, - AssetUtil, - ConnectorController, - CoreHelperUtil, - RouterController, - StorageUtil -} from '@web3modal/core' +import { ApiController, AssetUtil, ConnectorController, RouterController } from '@web3modal/core' import { customElement } from '@web3modal/ui' import { LitElement, html } from 'lit' -import { state } from 'lit/decorators.js' import { ifDefined } from 'lit/directives/if-defined.js' +import { WalletUtil } from '../../utils/WalletUtil.js' @customElement('w3m-connect-featured-widget') export class W3mConnectFeaturedWidget extends LitElement { // -- Members ------------------------------------------- // private unsubscribe: (() => void)[] = [] - // -- State & Properties -------------------------------- // - @state() private connectors = ConnectorController.state.connectors - - public constructor() { - super() - this.unsubscribe.push( - ConnectorController.subscribeKey('connectors', val => (this.connectors = val)) - ) - } - public override disconnectedCallback() { this.unsubscribe.forEach(unsubscribe => unsubscribe()) } @@ -40,7 +23,7 @@ export class W3mConnectFeaturedWidget extends LitElement { return null } - const wallets = this.filterOutDuplicateWallets(featured) + const wallets = WalletUtil.filterOutDuplicateWallets(featured) return html` @@ -59,26 +42,13 @@ export class W3mConnectFeaturedWidget extends LitElement { } // -- Private Methods ----------------------------------- // - private filterOutDuplicateWallets(wallets: WcWallet[]) { - const recent = StorageUtil.getRecentWallets() - - const connectorRDNSs = this.connectors - .map(connector => connector.info?.rdns) - .filter(Boolean) as string[] - - const recentRDNSs = recent.map(wallet => wallet.rdns).filter(Boolean) as string[] - const allRDNSs = connectorRDNSs.concat(recentRDNSs) - if (allRDNSs.includes('io.metamask.mobile') && CoreHelperUtil.isMobile()) { - const index = allRDNSs.indexOf('io.metamask.mobile') - allRDNSs[index] = 'io.metamask' - } - const filtered = wallets.filter(wallet => !allRDNSs.includes(String(wallet?.rdns))) - - return filtered - } - private onConnectWallet(wallet: WcWallet) { - RouterController.push('ConnectingWalletConnect', { wallet }) + const connector = ConnectorController.getConnector(wallet.id, wallet.rdns) + if (connector) { + RouterController.push('ConnectingExternal', { connector }) + } else { + RouterController.push('ConnectingWalletConnect', { wallet }) + } } } diff --git a/packages/scaffold-ui/src/partials/w3m-connect-recommended-widget/index.ts b/packages/scaffold-ui/src/partials/w3m-connect-recommended-widget/index.ts index ec7e20051e..986f401511 100644 --- a/packages/scaffold-ui/src/partials/w3m-connect-recommended-widget/index.ts +++ b/packages/scaffold-ui/src/partials/w3m-connect-recommended-widget/index.ts @@ -3,7 +3,6 @@ import { ApiController, AssetUtil, ConnectorController, - CoreHelperUtil, OptionsController, RouterController, StorageUtil @@ -12,6 +11,7 @@ import { customElement } from '@web3modal/ui' import { LitElement, html } from 'lit' import { state } from 'lit/decorators.js' import { ifDefined } from 'lit/directives/if-defined.js' +import { WalletUtil } from '../../utils/WalletUtil.js' @customElement('w3m-connect-recommended-widget') export class W3mConnectRecommendedWidget extends LitElement { @@ -55,9 +55,7 @@ export class W3mConnectRecommendedWidget extends LitElement { const overrideLength = injectedWallets.length + recent.length const maxRecommended = Math.max(0, 2 - overrideLength) - - const wallets = this.filterOutDuplicateWallets(recommended).slice(0, maxRecommended) - + const wallets = WalletUtil.filterOutDuplicateWallets(recommended).slice(0, maxRecommended) if (!wallets.length) { this.style.cssText = `display: none` @@ -81,26 +79,13 @@ export class W3mConnectRecommendedWidget extends LitElement { } // -- Private Methods ----------------------------------- // - private filterOutDuplicateWallets(wallets: WcWallet[]) { - const recent = StorageUtil.getRecentWallets() - - const connectorRDNSs = this.connectors - .map(connector => connector.info?.rdns) - .filter(Boolean) as string[] - - const recentRDNSs = recent.map(wallet => wallet.rdns).filter(Boolean) as string[] - const allRDNSs = connectorRDNSs.concat(recentRDNSs) - if (allRDNSs.includes('io.metamask.mobile') && CoreHelperUtil.isMobile()) { - const index = allRDNSs.indexOf('io.metamask.mobile') - allRDNSs[index] = 'io.metamask' - } - const filtered = wallets.filter(wallet => !allRDNSs.includes(String(wallet?.rdns))) - - return filtered - } - private onConnectWallet(wallet: WcWallet) { - RouterController.push('ConnectingWalletConnect', { wallet }) + const connector = ConnectorController.getConnector(wallet.id, wallet.rdns) + if (connector) { + RouterController.push('ConnectingExternal', { connector }) + } else { + RouterController.push('ConnectingWalletConnect', { wallet }) + } } } diff --git a/packages/scaffold-ui/src/partials/w3m-connector-list/index.ts b/packages/scaffold-ui/src/partials/w3m-connector-list/index.ts new file mode 100644 index 0000000000..de648bac1c --- /dev/null +++ b/packages/scaffold-ui/src/partials/w3m-connector-list/index.ts @@ -0,0 +1,92 @@ +import { customElement } from '@web3modal/ui' +import { LitElement, html } from 'lit' + +import styles from './styles.js' +import { ApiController, ConnectorController, OptionsController, StorageUtil } from '@web3modal/core' +import { state } from 'lit/decorators.js' +import { ConstantsUtil } from '@web3modal/scaffold-utils' +import { WalletUtil } from '../../utils/WalletUtil.js' +@customElement('w3m-connector-list') +export class W3mConnectorList extends LitElement { + public static override styles = styles + + // -- Members ------------------------------------------- // + private unsubscribe: (() => void)[] = [] + + // -- State & Properties -------------------------------- // + @state() private connectors = ConnectorController.state.connectors + + public constructor() { + super() + this.unsubscribe.push( + ConnectorController.subscribeKey('connectors', val => (this.connectors = val)) + ) + } + + public override disconnectedCallback() { + this.unsubscribe.forEach(unsubscribe => unsubscribe()) + } + + // -- Render -------------------------------------------- // + public override render() { + const { custom, recent, announced, coinbase, injected, recommended, featured, external } = + this.getConnectorsByType() + + return html` + + + ${recent.length ? html`` : null} + ${announced.length + ? html`` + : null} + ${injected.length + ? html`` + : null} + ${featured.length + ? html`` + : null} + ${custom?.length ? html`` : null} + ${coinbase ? html`` : null} + ${external.length + ? html`` + : null} + ${recommended.length + ? html`` + : null} + + ` + } + + private getConnectorsByType() { + const { featured, recommended } = ApiController.state + const { customWallets: custom } = OptionsController.state + const recent = StorageUtil.getRecentWallets() + + const filteredRecommended = WalletUtil.filterOutDuplicateWallets(recommended) + const filteredFeatured = WalletUtil.filterOutDuplicateWallets(featured) + + const announced = this.connectors.filter(connector => connector.type === 'ANNOUNCED') + const injected = this.connectors.filter(connector => connector.type === 'INJECTED') + const external = this.connectors.filter(connector => connector.type === 'EXTERNAL') + const coinbase = this.connectors.find( + connector => connector.id === ConstantsUtil.COINBASE_SDK_CONNECTOR_ID + ) + + return { + custom, + recent, + coinbase, + external, + announced: OptionsController.state.enableEIP6963 ? announced : [], + injected: OptionsController.state.enableEIP6963 ? injected : [], + recommended: filteredRecommended, + featured: filteredFeatured + } + } +} + +declare global { + interface HTMLElementTagNameMap { + 'w3m-connector-list': W3mConnectorList + } +} diff --git a/packages/scaffold-ui/src/partials/w3m-wallet-login-list/styles.ts b/packages/scaffold-ui/src/partials/w3m-connector-list/styles.ts similarity index 100% rename from packages/scaffold-ui/src/partials/w3m-wallet-login-list/styles.ts rename to packages/scaffold-ui/src/partials/w3m-connector-list/styles.ts diff --git a/packages/scaffold-ui/src/partials/w3m-wallet-login-list/index.ts b/packages/scaffold-ui/src/partials/w3m-wallet-login-list/index.ts index c7eb73a483..b5ddd13e40 100644 --- a/packages/scaffold-ui/src/partials/w3m-wallet-login-list/index.ts +++ b/packages/scaffold-ui/src/partials/w3m-wallet-login-list/index.ts @@ -1,24 +1,13 @@ import { customElement } from '@web3modal/ui' import { LitElement, html } from 'lit' -import styles from './styles.js' @customElement('w3m-wallet-login-list') export class W3mWalletLoginList extends LitElement { - public static override styles = styles - // -- Render -------------------------------------------- // public override render() { return html` - - - - - - - - - + ` diff --git a/packages/scaffold-ui/src/utils/WalletUtil.ts b/packages/scaffold-ui/src/utils/WalletUtil.ts new file mode 100644 index 0000000000..a48f386bf7 --- /dev/null +++ b/packages/scaffold-ui/src/utils/WalletUtil.ts @@ -0,0 +1,52 @@ +import { + ConnectorController, + CoreHelperUtil, + OptionsController, + StorageUtil, + type WcWallet +} from '@web3modal/core' + +export const WalletUtil = { + filterOutDuplicatesByRDNS(wallets: WcWallet[]) { + const connectors = OptionsController.state.enableEIP6963 + ? ConnectorController.state.connectors + : [] + const recent = StorageUtil.getRecentWallets() + + const connectorRDNSs = connectors + .map(connector => connector.info?.rdns) + .filter(Boolean) as string[] + + const recentRDNSs = recent.map(wallet => wallet.rdns).filter(Boolean) as string[] + const allRDNSs = connectorRDNSs.concat(recentRDNSs) + if (allRDNSs.includes('io.metamask.mobile') && CoreHelperUtil.isMobile()) { + const index = allRDNSs.indexOf('io.metamask.mobile') + allRDNSs[index] = 'io.metamask' + } + const filtered = wallets.filter(wallet => !allRDNSs.includes(String(wallet?.rdns))) + + return filtered + }, + + filterOutDuplicatesByIds(wallets: WcWallet[]) { + const connectors = ConnectorController.state.connectors + const recent = StorageUtil.getRecentWallets() + + const connectorIds = connectors.map(connector => connector.explorerId) + + const recentIds = recent.map(wallet => wallet.id) + + const allIds = connectorIds.concat(recentIds) + + const filtered = wallets.filter(wallet => !allIds.includes(wallet?.id)) + + return filtered + }, + + filterOutDuplicateWallets(wallets: WcWallet[]) { + const uniqueByRDNS = this.filterOutDuplicatesByRDNS(wallets) + const uniqueWallets = this.filterOutDuplicatesByIds(uniqueByRDNS) + + return uniqueWallets + } +} diff --git a/packages/scaffold-ui/src/views/w3m-connect-view/index.ts b/packages/scaffold-ui/src/views/w3m-connect-view/index.ts index 29f042a6b6..5369796570 100644 --- a/packages/scaffold-ui/src/views/w3m-connect-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-connect-view/index.ts @@ -45,15 +45,7 @@ export class W3mConnectView extends LitElement { if (authConnector?.showWallets) { return html` - - - - - - - - - + diff --git a/packages/scaffold-utils/src/ConstantsUtil.ts b/packages/scaffold-utils/src/ConstantsUtil.ts index 2dc2c3b1f0..1bbe9893bd 100644 --- a/packages/scaffold-utils/src/ConstantsUtil.ts +++ b/packages/scaffold-utils/src/ConstantsUtil.ts @@ -12,7 +12,8 @@ export const ConstantsUtil = { EIP6963_ANNOUNCE_EVENT: 'eip6963:announceProvider', EIP6963_REQUEST_EVENT: 'eip6963:requestProvider', CONNECTOR_RDNS_MAP: { - coinbaseWallet: 'com.coinbase.wallet' + coinbaseWallet: 'com.coinbase.wallet', + coinbaseWalletSDK: 'com.coinbase.wallet' } as Record, VERSION: '5.0.2' } diff --git a/packages/scaffold/src/client.ts b/packages/scaffold/src/client.ts index e743ac8515..38f13c9483 100644 --- a/packages/scaffold/src/client.ts +++ b/packages/scaffold/src/client.ts @@ -55,6 +55,7 @@ export interface LibraryOptions { disableAppend?: OptionsControllerState['disableAppend'] allowUnsupportedChain?: NetworkControllerState['allowUnsupportedChain'] _sdkVersion: OptionsControllerState['sdkVersion'] + enableEIP6963?: OptionsControllerState['enableEIP6963'] } export interface ScaffoldOptions extends LibraryOptions { @@ -270,6 +271,10 @@ export class Web3ModalScaffold { return networkNameAddresses[0]?.address || false } + protected setEIP6963Enabled: (typeof OptionsController)['setEIP6963Enabled'] = enabled => { + OptionsController.setEIP6963Enabled(enabled) + } + // -- Private ------------------------------------------------------------------ private async initControllers(options: ScaffoldOptions) { NetworkController.setClient(options.networkControllerClient) diff --git a/packages/wagmi/src/client.ts b/packages/wagmi/src/client.ts index 51cf3ff669..2c6138585f 100644 --- a/packages/wagmi/src/client.ts +++ b/packages/wagmi/src/client.ts @@ -363,6 +363,8 @@ export class Web3Modal extends Web3ModalScaffold { watchAccount(this.wagmiConfig, { onChange: accountData => this.syncAccount({ ...accountData }) }) + + this.setEIP6963Enabled(w3mOptions.enableEIP6963 !== false) } // -- Public ------------------------------------------------------------------