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);