diff --git a/src/App.tsx b/src/App.tsx index 4295f7c..d878a9f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -859,7 +859,14 @@ function App() { + {extensionId === MM_CONNECT_ID && + isExternallyConnectableConnected && + currentSession && ( + + )}
@@ -907,7 +934,6 @@ function App() { [chainId]: evt.target.checked, })) } - disabled={!isExternallyConnectableConnected} data-testid={`network-checkbox-${escapeHtmlId( chainId, )}`} diff --git a/src/sdk/SDK.ts b/src/sdk/SDK.ts index 8900f31..7aeeabb 100644 --- a/src/sdk/SDK.ts +++ b/src/sdk/SDK.ts @@ -109,7 +109,10 @@ export class SDK { this.#provider?.disconnect(); } - public async setExtensionIdAndConnect(extensionId: string): Promise { + public async setExtensionIdAndConnect( + extensionId: string, + scopes?: CaipChainId[], + ): Promise { // TODO add logic once we have CAIP-294 wallet discovery + or hardcode the stable extensionId let connected; if (extensionId === WINDOW_POST_MESSAGE_ID) { @@ -118,7 +121,9 @@ export class SDK { } else if (extensionId === MM_CONNECT_ID) { this.#provider = new MetaMaskConnectProvider() as unknown as MetaMaskMultichainBaseProvider; - connected = await this.#provider.connect(); + // Convert CaipChainId[] to Scope[] for MetaMaskConnectProvider + // Scope is from @metamask/connect-multichain and is compatible with CaipChainId + connected = await this.#provider.connect(scopes as unknown as any); } else { this.#provider = new MetaMaskMultichainExternallyConnectableProvider(); connected = await this.#provider.connect(extensionId); diff --git a/src/sdk/providers/MetaMaskConnectProvider.ts b/src/sdk/providers/MetaMaskConnectProvider.ts index 3ed4323..dea50e1 100644 --- a/src/sdk/providers/MetaMaskConnectProvider.ts +++ b/src/sdk/providers/MetaMaskConnectProvider.ts @@ -13,14 +13,27 @@ class MetaMaskConnectProvider implements Provider { #walletSession: unknown = { sessionScopes: {} }; - async connect(): Promise { + async connect(scopes?: Scope[]): Promise { if (this.#mmConnect) { this.disconnect(); } this.#mmConnect = await createMetamaskConnect({ api: { - supportedNetworks: {}, + supportedNetworks: { + 'eip155:1': 'https://eth.llamarpc.com', + 'eip155:59144': 'https://rpc.linea.build', + 'eip155:42161': 'https://arb1.arbitrum.io/rpc', + 'eip155:43114': 'https://avalanche.public-rpc.com', + 'eip155:56': 'https://bsc-dataseed.binance.org', + 'eip155:10': 'https://0xrpc.io/op', + 'eip155:137': 'https://polygon-rpc.com', + 'eip155:324': 'https://mainnet.era.zksync.io', + 'eip155:8453': 'https://mainnet.base.org', + 'eip155:1337': 'http://localhost:8545', + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': + 'https://api.mainnet-beta.solana.com', + }, }, dapp: { name: 'MultichainTest Dapp', @@ -39,7 +52,11 @@ class MetaMaskConnectProvider implements Provider { }, }); - await this.#mmConnect?.connect(['eip155:1'], []); + const scopesToUse = + scopes && scopes.length > 0 + ? scopes + : (['eip155:1'] as unknown as Scope[]); + await this.#mmConnect?.connect(scopesToUse, []); return true; } diff --git a/src/sdk/useSDK.ts b/src/sdk/useSDK.ts index 6c30de7..1ecda95 100644 --- a/src/sdk/useSDK.ts +++ b/src/sdk/useSDK.ts @@ -7,7 +7,7 @@ type UseSDKReturn = { isConnected: boolean; currentSession: any; extensionId: string; - connect: (extensionId: string) => Promise; + connect: (extensionId: string, scopes?: CaipChainId[]) => Promise; disconnect: () => void; createSession: ( scopes: CaipChainId[], @@ -131,10 +131,13 @@ export function useSDK({ }, [sdk, isConnected]); const connect = useCallback( - async (newExtensionId: string) => { + async (newExtensionId: string, scopes?: CaipChainId[]) => { if (sdk) { try { - const connected = await sdk.setExtensionIdAndConnect(newExtensionId); + const connected = await sdk.setExtensionIdAndConnect( + newExtensionId, + scopes, + ); setIsConnected(connected); if (connected) { localStorage.setItem('extensionId', newExtensionId);