Skip to content

Commit 7cfe8b1

Browse files
committed
refactor: Update network client provider type
1 parent 36a1cb5 commit 7cfe8b1

File tree

8 files changed

+49
-10
lines changed

8 files changed

+49
-10
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
"@metamask/eth-block-tracker": "^14.0.0",
6464
"@metamask/eth-json-rpc-provider": "^5.0.1",
6565
"@metamask/json-rpc-engine": "^10.1.1",
66+
"@metamask/network-controller": "^25.0.0",
6667
"@metamask/utils": "^11.8.1",
6768
"@ts-bridge/cli": "^0.6.4",
6869
"@types/jest": "^27.4.1",

packages/network-controller/src/create-network-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export function createNetworkClient({
173173

174174
engine.push(networkMiddleware);
175175

176-
const provider = new InternalProvider({ engine });
176+
const provider: Provider = new InternalProvider({ engine });
177177

178178
const destroy = () => {
179179
// TODO: Either fix this lint violation or explain why it's necessary to ignore.

packages/network-controller/src/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import type { InfuraNetworkType, ChainId } from '@metamask/controller-utils';
22
import type { BlockTracker as BaseBlockTracker } from '@metamask/eth-block-tracker';
33
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
4+
import type { MiddlewareContext } from '@metamask/json-rpc-engine/v2';
45
import type { Hex } from '@metamask/utils';
56

6-
export type Provider = InternalProvider;
7+
export type Provider = InternalProvider<
8+
MiddlewareContext<
9+
{ origin: string; skipCache: boolean } & Record<string, unknown>
10+
>
11+
>;
712

813
export type BlockTracker = BaseBlockTracker & {
914
checkForLatestBlock(): Promise<string>;

packages/network-controller/tests/NetworkController.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
NetworkType,
1414
toHex,
1515
} from '@metamask/controller-utils';
16+
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
1617
import { rpcErrors } from '@metamask/rpc-errors';
1718
import type { Hex } from '@metamask/utils';
1819
import assert from 'assert';
@@ -16639,7 +16640,9 @@ function buildFakeClient(
1663916640
rpcUrl: 'https://test.network',
1664016641
},
1664116642
provider,
16642-
blockTracker: new FakeBlockTracker({ provider }),
16643+
blockTracker: new FakeBlockTracker({
16644+
provider: provider as unknown as InternalProvider,
16645+
}),
1664316646
destroy: () => {
1664416647
// do nothing
1664516648
},

packages/network-controller/tests/helpers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
toHex,
77
} from '@metamask/controller-utils';
88
import type { ErrorReportingServiceCaptureExceptionAction } from '@metamask/error-reporting-service';
9+
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
910
import {
1011
Messenger,
1112
type MockAnyNamespace,
@@ -154,7 +155,9 @@ function buildFakeNetworkClient({
154155
return {
155156
configuration,
156157
provider,
157-
blockTracker: new FakeBlockTracker({ provider }),
158+
blockTracker: new FakeBlockTracker({
159+
provider: provider as unknown as InternalProvider,
160+
}),
158161
destroy: () => {
159162
// do nothing
160163
},

packages/network-controller/tests/network-client/helpers.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { JSONRPCResponse } from '@json-rpc-specification/meta-schema';
22
import type { InfuraNetworkType } from '@metamask/controller-utils';
33
import { BUILT_IN_NETWORKS } from '@metamask/controller-utils';
44
import type { BlockTracker } from '@metamask/eth-block-tracker';
5-
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
65
import EthQuery from '@metamask/eth-query';
76
import type { Hex } from '@metamask/utils';
87
import nock, { isDone as nockIsDone } from 'nock';
@@ -11,7 +10,7 @@ import { useFakeTimers } from 'sinon';
1110

1211
import { createNetworkClient } from '../../src/create-network-client';
1312
import type { NetworkControllerOptions } from '../../src/NetworkController';
14-
import type { NetworkClientConfiguration } from '../../src/types';
13+
import type { NetworkClientConfiguration, Provider } from '../../src/types';
1514
import { NetworkClientType } from '../../src/types';
1615
import type { RootMessenger } from '../helpers';
1716
import {
@@ -390,7 +389,7 @@ export async function withMockedCommunications(
390389

391390
type MockNetworkClient = {
392391
blockTracker: BlockTracker;
393-
provider: InternalProvider;
392+
provider: Provider;
394393
clock: sinon.SinonFakeTimers;
395394
// TODO: Replace `any` with type
396395
// eslint-disable-next-line @typescript-eslint/no-explicit-any

tests/fake-provider.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import { InternalProvider } from '@metamask/eth-json-rpc-provider';
2-
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
2+
import {
3+
JsonRpcEngineV2,
4+
type JsonRpcMiddleware,
5+
type MiddlewareContext,
6+
type ResultConstraint,
7+
} from '@metamask/json-rpc-engine/v2';
8+
import type { Provider } from '@metamask/network-controller';
39
import type {
410
Json,
511
JsonRpcId,
612
JsonRpcParams,
13+
JsonRpcRequest,
714
JsonRpcResponse,
815
JsonRpcVersion2,
916
} from '@metamask/utils';
@@ -91,6 +98,15 @@ type FakeProviderEngineOptions = {
9198
stubs?: FakeProviderStub[];
9299
};
93100

101+
type Context = MiddlewareContext<
102+
{ origin: string; skipCache: boolean } & Record<string, unknown>
103+
>;
104+
type Middleware = JsonRpcMiddleware<
105+
JsonRpcRequest,
106+
ResultConstraint<JsonRpcRequest>,
107+
Context
108+
>;
109+
94110
/**
95111
* An implementation of the provider that NetworkController exposes, which is
96112
* actually an instance of InternalProvider (from the
@@ -102,7 +118,10 @@ type FakeProviderEngineOptions = {
102118
// NOTE: We shouldn't need to extend from the "real" provider here, but
103119
// we'd need a `InternalProvider` _interface_ and that doesn't exist (at
104120
// least not yet).
105-
export class FakeProvider extends InternalProvider {
121+
export class FakeProvider
122+
extends InternalProvider<Context>
123+
implements Provider
124+
{
106125
calledStubs: FakeProviderStub[];
107126

108127
#originalStubs: FakeProviderStub[];
@@ -117,7 +136,15 @@ export class FakeProvider extends InternalProvider {
117136
* of specific invocations of `request` matching a `method`.
118137
*/
119138
constructor({ stubs = [] }: FakeProviderEngineOptions = {}) {
120-
super({ engine: new JsonRpcEngine() });
139+
super({
140+
engine: JsonRpcEngineV2.create<Middleware>({
141+
middleware: [
142+
() => {
143+
throw new Error('FakeProvider received unstubbed method call');
144+
},
145+
],
146+
}),
147+
});
121148
this.#originalStubs = stubs;
122149
this.#stubs = this.#originalStubs.slice();
123150
this.calledStubs = [];

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3190,6 +3190,7 @@ __metadata:
31903190
"@metamask/eth-block-tracker": "npm:^14.0.0"
31913191
"@metamask/eth-json-rpc-provider": "npm:^5.0.1"
31923192
"@metamask/json-rpc-engine": "npm:^10.1.1"
3193+
"@metamask/network-controller": "npm:^25.0.0"
31933194
"@metamask/utils": "npm:^11.8.1"
31943195
"@ts-bridge/cli": "npm:^0.6.4"
31953196
"@types/jest": "npm:^27.4.1"

0 commit comments

Comments
 (0)