Skip to content

Commit 95eb8f7

Browse files
Merge pull request #2308 from Web3Auth/fix/coinbase-switch-chain
(fix): coinbase switch chain for eoa wallets
2 parents 2334814 + dfcdd3b commit 95eb8f7

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

packages/no-modal/src/connectors/coinbase-connector/coinbaseConnector.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { AppMetadata, Preference, ProviderInterface } from "@coinbase/wallet-sdk";
2+
import type { ProviderRpcError } from "@coinbase/wallet-sdk/dist/core/provider/interface";
23

34
import {
45
BaseConnectorLoginParams,
@@ -68,7 +69,6 @@ class CoinbaseConnector extends BaseEvmConnector<void> {
6869
const chainConfig = this.coreOptions.chains.find((x) => x.chainId === options.chainId);
6970
super.checkInitializationRequirements({ chainConfig });
7071
const { createCoinbaseWalletSDK } = await import("@coinbase/wallet-sdk");
71-
7272
const coinbaseInstance = createCoinbaseWalletSDK({
7373
...this.coinbaseOptions,
7474
preference: { options: this.coinbaseOptions.options || "smartWalletOnly" },
@@ -156,7 +156,31 @@ class CoinbaseConnector extends BaseEvmConnector<void> {
156156

157157
public async switchChain(params: { chainId: string }, init = false): Promise<void> {
158158
super.checkSwitchChainRequirements(params, init);
159-
await this.coinbaseProvider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: params.chainId }] });
159+
try {
160+
await this.coinbaseProvider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: params.chainId }] });
161+
} catch (switchError: unknown) {
162+
// 4902 indicates that the client does not recognize the Harmony One network
163+
if ((switchError as ProviderRpcError).code === 4902) {
164+
const chainConfig = this.coreOptions.chains.find((x) => x.chainId === params.chainId);
165+
if (!chainConfig) throw WalletLoginError.connectionError("Chain config is not available");
166+
await this.coinbaseProvider.request({
167+
method: "wallet_addEthereumChain",
168+
params: [
169+
{
170+
chainId: chainConfig.chainId,
171+
rpcUrls: [chainConfig.rpcTarget],
172+
chainName: chainConfig.displayName,
173+
nativeCurrency: { name: chainConfig.tickerName, symbol: chainConfig.ticker, decimals: chainConfig.decimals || 18 },
174+
blockExplorerUrls: [chainConfig.blockExplorerUrl],
175+
iconUrls: [chainConfig.logo],
176+
},
177+
],
178+
});
179+
return;
180+
}
181+
182+
throw switchError;
183+
}
160184
}
161185

162186
public async enableMFA(): Promise<void> {

0 commit comments

Comments
 (0)