@@ -12,18 +12,18 @@ import {
1212 createFetchMiddleware ,
1313 createRetryOnEmptyMiddleware ,
1414} from '@metamask/eth-json-rpc-middleware' ;
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' ;
1518import {
16- InternalProvider ,
17- providerFromMiddleware ,
18- } from '@metamask/eth-json-rpc-provider' ;
19- import {
20- createAsyncMiddleware ,
2119 createScaffoldMiddleware ,
22- JsonRpcEngine ,
23- mergeMiddleware ,
24- } from '@metamask/json-rpc-engine' ;
25- import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine' ;
26- import type { Hex , Json , JsonRpcParams } from '@metamask/utils' ;
20+ JsonRpcEngineV2 ,
21+ } from '@metamask/json-rpc-engine/v2' ;
22+ import type {
23+ JsonRpcMiddleware ,
24+ MiddlewareContext ,
25+ } from '@metamask/json-rpc-engine/v2' ;
26+ import type { Hex , Json , JsonRpcRequest } from '@metamask/utils' ;
2727import type { Logger } from 'loglevel' ;
2828
2929import type { NetworkControllerMessenger } from './NetworkController' ;
@@ -49,6 +49,12 @@ export type NetworkClient = {
4949 destroy : ( ) => void ;
5050} ;
5151
52+ type RpcApiMiddleware = JsonRpcMiddleware <
53+ JsonRpcRequest ,
54+ Json ,
55+ MiddlewareContext < { origin : string } >
56+ > ;
57+
5258/**
5359 * Create a JSON RPC network client for a specific network.
5460 *
@@ -136,17 +142,21 @@ export function createNetworkClient({
136142 } ) ;
137143 } ) ;
138144
139- const rpcApiMiddleware =
140- configuration . type === NetworkClientType . Infura
141- ? createInfuraMiddleware ( {
142- rpcService : rpcServiceChain ,
143- options : {
144- source : 'metamask' ,
145- } ,
146- } )
147- : createFetchMiddleware ( { rpcService : rpcServiceChain } ) ;
145+ let rpcApiMiddleware : RpcApiMiddleware ;
146+ if ( configuration . type === NetworkClientType . Infura ) {
147+ rpcApiMiddleware = asV2Middleware (
148+ createInfuraMiddleware ( {
149+ rpcService : rpcServiceChain ,
150+ options : {
151+ source : 'metamask' ,
152+ } ,
153+ } ) ,
154+ ) as unknown as RpcApiMiddleware ;
155+ } else {
156+ rpcApiMiddleware = createFetchMiddleware ( { rpcService : rpcServiceChain } ) ;
157+ }
148158
149- const rpcProvider = providerFromMiddleware ( rpcApiMiddleware ) ;
159+ const rpcProvider = providerFromMiddlewareV2 ( rpcApiMiddleware ) ;
150160
151161 const blockTracker = createBlockTracker ( {
152162 networkClientType : configuration . type ,
@@ -169,11 +179,11 @@ export function createNetworkClient({
169179 rpcApiMiddleware,
170180 } ) ;
171181
172- const engine = new JsonRpcEngine ( ) ;
173-
174- engine . push ( networkMiddleware ) ;
175-
176- const provider : Provider = new InternalProvider ( { engine } ) ;
182+ const provider : Provider = new InternalProvider ( {
183+ engine : JsonRpcEngineV2 . create ( {
184+ middleware : [ networkMiddleware ] ,
185+ } ) ,
186+ } ) ;
177187
178188 const destroy = ( ) => {
179189 // TODO: Either fix this lint violation or explain why it's necessary to ignore.
@@ -240,17 +250,19 @@ function createInfuraNetworkMiddleware({
240250 blockTracker : PollingBlockTracker ;
241251 network : InfuraNetworkType ;
242252 rpcProvider : InternalProvider ;
243- rpcApiMiddleware : JsonRpcMiddleware < JsonRpcParams , Json > ;
253+ rpcApiMiddleware : RpcApiMiddleware ;
244254} ) {
245- return mergeMiddleware ( [
246- createNetworkAndChainIdMiddleware ( { network } ) ,
247- createBlockCacheMiddleware ( { blockTracker } ) ,
248- createInflightCacheMiddleware ( ) ,
249- createBlockRefMiddleware ( { blockTracker, provider : rpcProvider } ) ,
250- createRetryOnEmptyMiddleware ( { blockTracker, provider : rpcProvider } ) ,
251- createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
252- rpcApiMiddleware ,
253- ] ) ;
255+ return JsonRpcEngineV2 . create ( {
256+ middleware : [
257+ createNetworkAndChainIdMiddleware ( { network } ) ,
258+ createBlockCacheMiddleware ( { blockTracker } ) ,
259+ createInflightCacheMiddleware ( ) ,
260+ createBlockRefMiddleware ( { blockTracker, provider : rpcProvider } ) ,
261+ createRetryOnEmptyMiddleware ( { blockTracker, provider : rpcProvider } ) ,
262+ createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
263+ rpcApiMiddleware ,
264+ ] ,
265+ } ) . asMiddleware ( ) ;
254266}
255267
256268/**
@@ -272,11 +284,10 @@ function createNetworkAndChainIdMiddleware({
272284
273285const createChainIdMiddleware = (
274286 chainId : Hex ,
275- ) : JsonRpcMiddleware < JsonRpcParams , Json > => {
276- return ( req , res , next , end ) => {
277- if ( req . method === 'eth_chainId' ) {
278- res . result = chainId ;
279- return end ( ) ;
287+ ) : JsonRpcMiddleware < JsonRpcRequest , Json > => {
288+ return ( { request, next } ) => {
289+ if ( request . method === 'eth_chainId' ) {
290+ return chainId ;
280291 }
281292 return next ( ) ;
282293 } ;
@@ -298,21 +309,23 @@ function createCustomNetworkMiddleware({
298309} : {
299310 blockTracker : PollingBlockTracker ;
300311 chainId : Hex ;
301- rpcApiMiddleware : JsonRpcMiddleware < JsonRpcParams , Json > ;
302- } ) : JsonRpcMiddleware < JsonRpcParams , Json > {
312+ rpcApiMiddleware : RpcApiMiddleware ;
313+ } ) {
303314 const testMiddlewares = process . env . IN_TEST
304315 ? [ createEstimateGasDelayTestMiddleware ( ) ]
305316 : [ ] ;
306317
307- return mergeMiddleware ( [
308- ...testMiddlewares ,
309- createChainIdMiddleware ( chainId ) ,
310- createBlockRefRewriteMiddleware ( { blockTracker } ) ,
311- createBlockCacheMiddleware ( { blockTracker } ) ,
312- createInflightCacheMiddleware ( ) ,
313- createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
314- rpcApiMiddleware ,
315- ] ) ;
318+ return JsonRpcEngineV2 . create ( {
319+ middleware : [
320+ ...testMiddlewares ,
321+ createChainIdMiddleware ( chainId ) ,
322+ createBlockRefRewriteMiddleware ( { blockTracker } ) ,
323+ createBlockCacheMiddleware ( { blockTracker } ) ,
324+ createInflightCacheMiddleware ( ) ,
325+ createBlockTrackerInspectorMiddleware ( { blockTracker } ) ,
326+ rpcApiMiddleware ,
327+ ] ,
328+ } ) . asMiddleware ( ) ;
316329}
317330
318331/**
@@ -321,11 +334,14 @@ function createCustomNetworkMiddleware({
321334 *
322335 * @returns The middleware for delaying gas estimation calls by 2 seconds when in test.
323336 */
324- function createEstimateGasDelayTestMiddleware ( ) {
325- return createAsyncMiddleware ( async ( req , _ , next ) => {
326- if ( req . method === 'eth_estimateGas' ) {
337+ function createEstimateGasDelayTestMiddleware ( ) : JsonRpcMiddleware <
338+ JsonRpcRequest ,
339+ Json
340+ > {
341+ return async ( { request, next } ) => {
342+ if ( request . method === 'eth_estimateGas' ) {
327343 await new Promise ( ( resolve ) => setTimeout ( resolve , SECOND * 2 ) ) ;
328344 }
329345 return next ( ) ;
330- } ) ;
346+ } ;
331347}
0 commit comments