diff --git a/packages/connect-evm/CHANGELOG.md b/packages/connect-evm/CHANGELOG.md index 4946901b..2fa48ac0 100644 --- a/packages/connect-evm/CHANGELOG.md +++ b/packages/connect-evm/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `ConnectEvm.status` property which exposes the current `ConnectionStatus` ([#136](https://github.com/MetaMask/connect-monorepo/pull/136)) +### Fixed + +- 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)) + ## [0.2.0] ### Added diff --git a/packages/connect-evm/src/connect.ts b/packages/connect-evm/src/connect.ts index 37c048a4..404a4a60 100644 --- a/packages/connect-evm/src/connect.ts +++ b/packages/connect-evm/src/connect.ts @@ -36,6 +36,7 @@ import { getPermittedEthChainIds } from './utils/caip'; import { isAccountsRequest, isAddChainRequest, + isChainIdRequest, isConnectRequest, isSwitchChainRequest, validSupportedChainsUrls, @@ -633,6 +634,10 @@ export class MetamaskConnectEVM { return this.#provider.accounts; } + if (isChainIdRequest(request)) { + return this.#provider.selectedChainId; + } + logger('Request not intercepted, forwarding to default handler', request); return Promise.resolve(); } diff --git a/packages/connect-evm/src/constants.ts b/packages/connect-evm/src/constants.ts index 01f35055..523eba57 100644 --- a/packages/connect-evm/src/constants.ts +++ b/packages/connect-evm/src/constants.ts @@ -14,10 +14,13 @@ export const CONNECT_METHODS = [ export const ACCOUNTS_METHODS = ['eth_accounts', 'eth_coinbase']; +export const CHAIN_METHODS = ['eth_chainId']; + export const INTERCEPTABLE_METHODS = [ ...ACCOUNTS_METHODS, ...IGNORED_METHODS, ...CONNECT_METHODS, + ...CHAIN_METHODS, // These have bespoke handlers 'wallet_revokePermissions', 'wallet_switchEthereumChain', diff --git a/packages/connect-evm/src/utils/type-guards.ts b/packages/connect-evm/src/utils/type-guards.ts index 72a6aa09..e321a444 100644 --- a/packages/connect-evm/src/utils/type-guards.ts +++ b/packages/connect-evm/src/utils/type-guards.ts @@ -61,6 +61,18 @@ export function isAccountsRequest( return req.method === 'eth_accounts' || req.method === 'eth_coinbase'; } +/** + * Type guard for generic eth_chainId request. + * + * @param req - The request object to check + * @returns True if the request is a eth_chainId request, false otherwise + */ +export function isChainIdRequest( + req: ProviderRequest, +): req is Extract { + return req.method === 'eth_chainId'; +} + /** * Validates that all values in a Record are valid URLs. *