Skip to content

Commit e0ab14d

Browse files
authored
fix: Fix eth_chainId not being resolved from cache when using EIP-1193 Provider (#124)
* Add chainId request interceptor * expose ConnectMultichain.state in ConnectEvm * WIP displayUri * Fix ConnectEvm.status * Revert "WIP displayUri" This reverts commit 5aa5964. * changelog * lint * lint
1 parent 3047b53 commit e0ab14d

4 files changed

Lines changed: 24 additions & 0 deletions

File tree

packages/connect-evm/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
- Add `ConnectEvm.status` property which exposes the current `ConnectionStatus` ([#136](https://github.com/MetaMask/connect-monorepo/pull/136))
1313

14+
### Fixed
15+
16+
- Fix `eth_chainId` requests not being resolved from local cached state when using the EIP-1193 Provider `request()` method over the `MwpTransport` ([#124](https://github.com/MetaMask/connect-monorepo/pull/124))
17+
1418
## [0.2.0]
1519

1620
### Added

packages/connect-evm/src/connect.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { getPermittedEthChainIds } from './utils/caip';
3636
import {
3737
isAccountsRequest,
3838
isAddChainRequest,
39+
isChainIdRequest,
3940
isConnectRequest,
4041
isSwitchChainRequest,
4142
validSupportedChainsUrls,
@@ -633,6 +634,10 @@ export class MetamaskConnectEVM {
633634
return this.#provider.accounts;
634635
}
635636

637+
if (isChainIdRequest(request)) {
638+
return this.#provider.selectedChainId;
639+
}
640+
636641
logger('Request not intercepted, forwarding to default handler', request);
637642
return Promise.resolve();
638643
}

packages/connect-evm/src/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ export const CONNECT_METHODS = [
1414

1515
export const ACCOUNTS_METHODS = ['eth_accounts', 'eth_coinbase'];
1616

17+
export const CHAIN_METHODS = ['eth_chainId'];
18+
1719
export const INTERCEPTABLE_METHODS = [
1820
...ACCOUNTS_METHODS,
1921
...IGNORED_METHODS,
2022
...CONNECT_METHODS,
23+
...CHAIN_METHODS,
2124
// These have bespoke handlers
2225
'wallet_revokePermissions',
2326
'wallet_switchEthereumChain',

packages/connect-evm/src/utils/type-guards.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@ export function isAccountsRequest(
6161
return req.method === 'eth_accounts' || req.method === 'eth_coinbase';
6262
}
6363

64+
/**
65+
* Type guard for generic eth_chainId request.
66+
*
67+
* @param req - The request object to check
68+
* @returns True if the request is a eth_chainId request, false otherwise
69+
*/
70+
export function isChainIdRequest(
71+
req: ProviderRequest,
72+
): req is Extract<ProviderRequest, { method: 'eth_chainId' }> {
73+
return req.method === 'eth_chainId';
74+
}
75+
6476
/**
6577
* Validates that all values in a Record are valid URLs.
6678
*

0 commit comments

Comments
 (0)