11import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine' ;
22import { createAsyncMiddleware } from '@metamask/json-rpc-engine' ;
3+ import { rpcErrors } from '@metamask/rpc-errors' ;
34import type { Json , JsonRpcParams } from '@metamask/utils' ;
4- import { hexToBigInt } from '@metamask/utils' ;
5+ import { hasProperty , hexToBigInt } from '@metamask/utils' ;
56import { InfuraProvider } from 'ethers' ;
67
7- import type { Store , getChainId } from '../store' ;
8+ import type { Store } from '../store' ;
9+ import { getChainId } from '../store' ;
810
911/**
1012 * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.
@@ -16,10 +18,22 @@ export function createProviderMiddleware(
1618 store : Store ,
1719) : JsonRpcMiddleware < JsonRpcParams , Json > {
1820 return createAsyncMiddleware ( async ( request , response ) => {
19- const chainId = getChainId ( store . getState ( ) ) ;
20- const provider = new InfuraProvider ( hexToBigInt ( chainId ) ) ;
21+ try {
22+ const chainId = getChainId ( store . getState ( ) ) ;
23+ const provider = new InfuraProvider ( hexToBigInt ( chainId ) ) ;
2124
22- const result = await provider . send ( request . method , request . params ?? [ ] ) ;
23- response . result = result ;
25+ const result = await provider . send ( request . method , request . params ?? [ ] ) ;
26+ response . result = result ;
27+ } catch ( error ) {
28+ if ( hasProperty ( error , 'info' ) && hasProperty ( error . info , 'error' ) ) {
29+ response . error = error . info . error ;
30+ return ;
31+ }
32+ if ( hasProperty ( error , 'error' ) ) {
33+ response . error = error . error ;
34+ return ;
35+ }
36+ response . error = rpcErrors . internal ( ) ;
37+ }
2438 } ) ;
2539}
0 commit comments