@@ -12,19 +12,19 @@ import {
1212 createFetchMiddleware ,
1313 createRetryOnEmptyMiddleware ,
1414} from '@metamask/eth-json-rpc-middleware' ;
15- import type { InternalProvider } from '@metamask/eth-json-rpc-provider' ;
15+ import { InternalProvider } from '@metamask/eth-json-rpc-provider' ;
16+ import { providerFromMiddlewareV2 } from '@metamask/eth-json-rpc-provider' ;
17+ import { asV2Middleware } from '@metamask/json-rpc-engine' ;
1618import {
17- providerFromEngine ,
18- providerFromMiddleware ,
19- } from '@metamask/eth-json-rpc-provider' ;
20- import {
21- createAsyncMiddleware ,
2219 createScaffoldMiddleware ,
23- JsonRpcEngine ,
24- mergeMiddleware ,
25- } from '@metamask/json-rpc-engine' ;
26- import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine' ;
27- import type { Hex , Json , JsonRpcParams } from '@metamask/utils' ;
20+ JsonRpcEngineV2 ,
21+ JsonRpcServer ,
22+ } from '@metamask/json-rpc-engine/v2' ;
23+ import type {
24+ JsonRpcMiddleware ,
25+ MiddlewareContext ,
26+ } from '@metamask/json-rpc-engine/v2' ;
27+ import type { Hex , Json , JsonRpcRequest } from '@metamask/utils' ;
2828import type { Logger } from 'loglevel' ;
2929
3030import type { NetworkControllerMessenger } from './NetworkController' ;
@@ -50,6 +50,12 @@ export type NetworkClient = {
5050 destroy : ( ) => void ;
5151} ;
5252
53+ type RpcApiMiddleware = JsonRpcMiddleware <
54+ JsonRpcRequest ,
55+ Json ,
56+ MiddlewareContext < { origin : string } >
57+ > ;
58+
5359/**
5460 * Create a JSON RPC network client for a specific network.
5561 *
@@ -137,17 +143,21 @@ export function createNetworkClient({
137143 } ) ;
138144 } ) ;
139145
140- const rpcApiMiddleware =
141- configuration . type === NetworkClientType . Infura
142- ? createInfuraMiddleware ( {
143- rpcService : rpcServiceChain ,
144- options : {
145- source : 'metamask' ,
146- } ,
147- } )
148- : createFetchMiddleware ( { rpcService : rpcServiceChain } ) ;
146+ let rpcApiMiddleware : RpcApiMiddleware ;
147+ if ( configuration . type === NetworkClientType . Infura ) {
148+ rpcApiMiddleware = asV2Middleware (
149+ createInfuraMiddleware ( {
150+ rpcService : rpcServiceChain ,
151+ options : {
152+ source : 'metamask' ,
153+ } ,
154+ } ) ,
155+ ) as unknown as RpcApiMiddleware ;
156+ } else {
157+ rpcApiMiddleware = createFetchMiddleware ( { rpcService : rpcServiceChain } ) ;
158+ }
149159
150- const rpcProvider = providerFromMiddleware ( rpcApiMiddleware ) ;
160+ const rpcProvider = providerFromMiddlewareV2 ( rpcApiMiddleware ) ;
151161
152162 const blockTracker = createBlockTracker ( {
153163 networkClientType : configuration . type ,
@@ -170,11 +180,9 @@ export function createNetworkClient({
170180 rpcApiMiddleware,
171181 } ) ;
172182
173- const engine = new JsonRpcEngine ( ) ;
174-
175- engine . push ( networkMiddleware ) ;
176-
177- const provider = providerFromEngine ( engine ) ;
183+ const provider = new InternalProvider ( {
184+ rpcHandler : new JsonRpcServer ( { middleware : [ networkMiddleware ] } ) ,
185+ } ) ;
178186
179187 const destroy = ( ) => {
180188 // TODO: Either fix this lint violation or explain why it's necessary to ignore.
@@ -241,17 +249,19 @@ function createInfuraNetworkMiddleware({
241249 blockTracker : PollingBlockTracker ;
242250 network : InfuraNetworkType ;
243251 rpcProvider : InternalProvider ;
244- rpcApiMiddleware : JsonRpcMiddleware < JsonRpcParams , Json > ;
252+ rpcApiMiddleware : RpcApiMiddleware ;
245253} ) {
246- return mergeMiddleware ( [
247- createNetworkAndChainIdMiddleware ( { network } ) ,
248- createBlockCacheMiddleware ( { blockTracker } ) ,
249- createInflightCacheMiddleware ( ) ,
250- createBlockRefMiddleware ( { blockTracker, provider : rpcProvider } ) ,
251- createRetryOnEmptyMiddleware ( { blockTracker, provider : rpcProvider } ) ,
252- createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
253- rpcApiMiddleware ,
254- ] ) ;
254+ return JsonRpcEngineV2 . create ( {
255+ middleware : [
256+ createNetworkAndChainIdMiddleware ( { network } ) ,
257+ createBlockCacheMiddleware ( { blockTracker } ) ,
258+ createInflightCacheMiddleware ( ) ,
259+ createBlockRefMiddleware ( { blockTracker, provider : rpcProvider } ) ,
260+ createRetryOnEmptyMiddleware ( { blockTracker, provider : rpcProvider } ) ,
261+ createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
262+ rpcApiMiddleware ,
263+ ] ,
264+ } ) . asMiddleware ( ) ;
255265}
256266
257267/**
@@ -273,11 +283,10 @@ function createNetworkAndChainIdMiddleware({
273283
274284const createChainIdMiddleware = (
275285 chainId : Hex ,
276- ) : JsonRpcMiddleware < JsonRpcParams , Json > => {
277- return ( req , res , next , end ) => {
278- if ( req . method === 'eth_chainId' ) {
279- res . result = chainId ;
280- return end ( ) ;
286+ ) : JsonRpcMiddleware < JsonRpcRequest , Json > => {
287+ return ( { request, next } ) => {
288+ if ( request . method === 'eth_chainId' ) {
289+ return chainId ;
281290 }
282291 return next ( ) ;
283292 } ;
@@ -299,21 +308,23 @@ function createCustomNetworkMiddleware({
299308} : {
300309 blockTracker : PollingBlockTracker ;
301310 chainId : Hex ;
302- rpcApiMiddleware : JsonRpcMiddleware < JsonRpcParams , Json > ;
303- } ) : JsonRpcMiddleware < JsonRpcParams , Json > {
311+ rpcApiMiddleware : RpcApiMiddleware ;
312+ } ) {
304313 const testMiddlewares = process . env . IN_TEST
305314 ? [ createEstimateGasDelayTestMiddleware ( ) ]
306315 : [ ] ;
307316
308- return mergeMiddleware ( [
309- ...testMiddlewares ,
310- createChainIdMiddleware ( chainId ) ,
311- createBlockRefRewriteMiddleware ( { blockTracker } ) ,
312- createBlockCacheMiddleware ( { blockTracker } ) ,
313- createInflightCacheMiddleware ( ) ,
314- createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
315- rpcApiMiddleware ,
316- ] ) ;
317+ return JsonRpcEngineV2 . create ( {
318+ middleware : [
319+ ...testMiddlewares ,
320+ createChainIdMiddleware ( chainId ) ,
321+ createBlockRefRewriteMiddleware ( { blockTracker } ) ,
322+ createBlockCacheMiddleware ( { blockTracker } ) ,
323+ createInflightCacheMiddleware ( ) ,
324+ createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
325+ rpcApiMiddleware ,
326+ ] ,
327+ } ) . asMiddleware ( ) ;
317328}
318329
319330/**
@@ -322,11 +333,14 @@ function createCustomNetworkMiddleware({
322333 *
323334 * @returns The middleware for delaying gas estimation calls by 2 seconds when in test.
324335 */
325- function createEstimateGasDelayTestMiddleware ( ) {
326- return createAsyncMiddleware ( async ( req , _ , next ) => {
327- if ( req . method === 'eth_estimateGas' ) {
336+ function createEstimateGasDelayTestMiddleware ( ) : JsonRpcMiddleware <
337+ JsonRpcRequest ,
338+ Json
339+ > {
340+ return async ( { request, next } ) => {
341+ if ( request . method === 'eth_estimateGas' ) {
328342 await new Promise ( ( resolve ) => setTimeout ( resolve , SECOND * 2 ) ) ;
329343 }
330344 return next ( ) ;
331- } ) ;
345+ } ;
332346}
0 commit comments