Skip to content

Commit 9162c83

Browse files
committed
stash
1 parent d7a775e commit 9162c83

File tree

7 files changed

+72
-49
lines changed

7 files changed

+72
-49
lines changed

packages/network-controller/src/NetworkController.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ import {
88
NetworkType,
99
isSafeChainId,
1010
} from '@metamask/controller-utils';
11-
import EthQuery from '@metamask/eth-query';
11+
import EthQuery, { type Provider } from '@metamask/eth-query';
1212
import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';
13-
import type { SwappableProxy } from '@metamask/swappable-obj-proxy';
13+
import type {
14+
EventEmitterLike,
15+
SwappableProxy,
16+
} from '@metamask/swappable-obj-proxy';
1417
import type { Hex } from '@metamask/utils';
1518
import {
1619
assertIsStrictHexString,
@@ -32,7 +35,6 @@ import { projectLogger, createModuleLogger } from './logger';
3235
import { NetworkClientType } from './types';
3336
import type {
3437
BlockTracker,
35-
Provider,
3638
CustomNetworkClientConfiguration,
3739
InfuraNetworkClientConfiguration,
3840
NetworkClientConfiguration,
@@ -357,7 +359,9 @@ export type BlockTrackerProxy = SwappableProxy<
357359
* selected network can change without consumers needing to refresh the object
358360
* reference to that network.)
359361
*/
360-
export type ProviderProxy = SwappableProxy<ProxyWithAccessibleTarget<Provider>>;
362+
export type ProviderProxy =
363+
| SwappableProxy<ProxyWithAccessibleTarget<Provider>>
364+
| SwappableProxy<EventEmitterLike>;
361365

362366
export type NetworkControllerStateChangeEvent = {
363367
type: `NetworkController:stateChange`;

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
import type { NetworkClient } from './create-network-client';
2-
import { createNetworkClient } from './create-network-client';
31
import type {
4-
BlockTracker,
5-
NetworkClientConfiguration,
62
Provider,
7-
} from './types';
3+
ProviderSendAsyncCallback,
4+
SendAsyncPayload,
5+
} from '@metamask/eth-query';
6+
7+
import type { NetworkClient } from './create-network-client';
8+
import { createNetworkClient } from './create-network-client';
9+
import type { BlockTracker, NetworkClientConfiguration } from './types';
810

911
/**
1012
* The name of the method on both the provider and block tracker proxy which can
@@ -90,10 +92,13 @@ export function createAutoManagedNetworkClient<
9092
// Ensure that the method on the provider is called with `this` as
9193
// the target, *not* the proxy (which happens by default) —
9294
// this allows private properties to be accessed
93-
return function (this: unknown, ...args: any[]) {
94-
// @ts-expect-error We don't care that `this` may not be compatible
95-
// with the signature of the method being called, as technically
96-
// it can be anything.
95+
return function (
96+
this: unknown,
97+
...args: [
98+
payload: SendAsyncPayload<unknown>,
99+
callback: ProviderSendAsyncCallback<unknown>,
100+
]
101+
) {
97102
return value.apply(this === receiver ? provider : this, args);
98103
};
99104
}

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ import {
1010
createFetchMiddleware,
1111
createRetryOnEmptyMiddleware,
1212
} from '@metamask/eth-json-rpc-middleware';
13-
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
1413
import {
14+
type SafeEventEmitterProvider,
1515
providerFromEngine,
1616
providerFromMiddleware,
1717
} from '@metamask/eth-json-rpc-provider';
18+
import type { Provider } from '@metamask/eth-query';
1819
import type { Hex } from '@metamask/utils';
1920
import { PollingBlockTracker } from 'eth-block-tracker';
2021
import {
@@ -25,11 +26,7 @@ import {
2526
} from 'json-rpc-engine';
2627
import type { JsonRpcMiddleware } from 'json-rpc-engine';
2728

28-
import type {
29-
BlockTracker,
30-
NetworkClientConfiguration,
31-
Provider,
32-
} from './types';
29+
import type { BlockTracker, NetworkClientConfiguration } from './types';
3330
import { NetworkClientType } from './types';
3431

3532
const SECOND = 1000;
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export * from './NetworkController';
22
export * from './constants';
3-
export type { BlockTracker, Provider } from './types';
4-
export type { NetworkClientConfiguration } from './types';
5-
export { NetworkClientType } from './types';
3+
export type {
4+
BlockTracker,
5+
NetworkClientConfiguration,
6+
NetworkClientType,
7+
} from './types';

packages/network-controller/src/types.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import type { InfuraNetworkType } from '@metamask/controller-utils';
2-
import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
32
import type { Hex } from '@metamask/utils';
43
import type { PollingBlockTracker } from 'eth-block-tracker';
54

6-
export type Provider = SafeEventEmitterProvider;
7-
85
export type BlockTracker = PollingBlockTracker;
96

107
/**

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

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
NetworkType,
88
toHex,
99
} from '@metamask/controller-utils';
10+
import type { Provider } from '@metamask/eth-query';
1011
import assert from 'assert';
1112
import { ethErrors } from 'eth-rpc-errors';
1213
import type { Patch } from 'immer';
@@ -27,10 +28,8 @@ import type {
2728
ProviderConfig,
2829
} from '../src/NetworkController';
2930
import { NetworkController } from '../src/NetworkController';
30-
import type { Provider } from '../src/types';
3131
import { NetworkClientType } from '../src/types';
32-
import type { FakeProviderStub } from './fake-provider';
33-
import { FakeProvider } from './fake-provider';
32+
import { FakeProvider, type FakeProviderStub } from './fake-provider';
3433

3534
jest.mock('../src/create-network-client');
3635

@@ -978,9 +977,10 @@ describe('NetworkController', () => {
978977
provider,
979978
);
980979
const response1 = await promisifiedSendAsync1({
981-
id: '1',
980+
id: 1,
982981
jsonrpc: '2.0',
983982
method: 'test',
983+
params: [],
984984
});
985985
expect(response1.result).toBe('test response 1');
986986

@@ -989,9 +989,10 @@ describe('NetworkController', () => {
989989
provider,
990990
);
991991
const response2 = await promisifiedSendAsync2({
992-
id: '2',
992+
id: 2,
993993
jsonrpc: '2.0',
994994
method: 'test',
995+
params: [],
995996
});
996997
expect(response2.result).toBe('test response 2');
997998
},
@@ -1072,9 +1073,10 @@ describe('NetworkController', () => {
10721073
provider,
10731074
);
10741075
const response1 = await promisifiedSendAsync1({
1075-
id: '1',
1076+
id: 1,
10761077
jsonrpc: '2.0',
10771078
method: 'test',
1079+
params: [],
10781080
});
10791081
expect(response1.result).toBe('test response 1');
10801082

@@ -1083,9 +1085,10 @@ describe('NetworkController', () => {
10831085
provider,
10841086
);
10851087
const response2 = await promisifiedSendAsync2({
1086-
id: '2',
1088+
id: 2,
10871089
jsonrpc: '2.0',
10881090
method: 'test',
1091+
params: [],
10891092
});
10901093
expect(response2.result).toBe('test response 2');
10911094
},
@@ -3134,7 +3137,7 @@ describe('NetworkController', () => {
31343137
},
31353138
},
31363139
async ({ controller, messenger }) => {
3137-
setFakeProvider(controller, {
3140+
await setFakeProvider(controller, {
31383141
stubLookupNetworkWhileSetting: true,
31393142
});
31403143
const promiseForNoStateChanges = waitForStateChanges({
@@ -4871,10 +4874,10 @@ describe('NetworkController', () => {
48714874
// We only care about the first state change, because it
48724875
// happens before networkDidChange
48734876
count: 1,
4874-
operation: () => {
4877+
operation: async () => {
48754878
// Intentionally not awaited because we want to check state
48764879
// while this operation is in-progress
4877-
controller.rollbackToPreviousProvider();
4880+
await controller.rollbackToPreviousProvider();
48784881
},
48794882
beforeResolving: () => {
48804883
expect(
@@ -4948,9 +4951,10 @@ describe('NetworkController', () => {
49484951
provider,
49494952
);
49504953
const response = await promisifiedSendAsync({
4951-
id: '1',
4954+
id: 1,
49524955
jsonrpc: '2.0',
49534956
method: 'test',
4957+
params: [],
49544958
});
49554959
expect(response.result).toBe('test response');
49564960
},
@@ -5431,10 +5435,10 @@ describe('NetworkController', () => {
54315435
// We only care about the first state change, because it
54325436
// happens before networkDidChange
54335437
count: 1,
5434-
operation: () => {
5438+
operation: async () => {
54355439
// Intentionally not awaited because we want to check state
54365440
// while this operation is in-progress
5437-
controller.rollbackToPreviousProvider();
5441+
await controller.rollbackToPreviousProvider();
54385442
},
54395443
beforeResolving: () => {
54405444
expect(
@@ -5502,9 +5506,10 @@ describe('NetworkController', () => {
55025506
provider,
55035507
);
55045508
const response = await promisifiedSendAsync({
5505-
id: '1',
5509+
id: 1,
55065510
jsonrpc: '2.0',
55075511
method: 'test',
5512+
params: [],
55085513
});
55095514
expect(response.result).toBe('test response');
55105515
},
@@ -7092,14 +7097,14 @@ async function waitForPublishedEvents<E extends NetworkControllerEvents>({
70927097
// the signature of `subscribe` and the way that we're using it. Try
70937098
// changing `any` to either `((...args: E['payload']) => void)` or
70947099
// `ExtractEventHandler<E, E['type']>` to see the issue.
7095-
const eventListener: any = (...payload: E['payload']) => {
7100+
const eventListener: any = async (...payload: E['payload']) => {
70967101
allEventPayloads.push(payload);
70977102

70987103
if (isEventPayloadInteresting(payload)) {
70997104
interestingEventPayloads.push(payload);
71007105
if (interestingEventPayloads.length === expectedNumberOfEvents) {
71017106
stopTimer();
7102-
end();
7107+
await end();
71037108
} else {
71047109
resetTimer();
71057110
}

packages/network-controller/tests/fake-provider.ts

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider/dist/safe-event-emitter-provider';
1+
import { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';
2+
import type { ProviderSendAsyncResponse } from '@metamask/eth-query';
23
import type { JsonRpcRequest, JsonRpcResponse } from 'json-rpc-engine';
34
import { JsonRpcEngine } from 'json-rpc-engine';
45
import { inspect, isDeepStrictEqual } from 'util';
@@ -105,21 +106,30 @@ export class FakeProvider extends SafeEventEmitterProvider {
105106

106107
send = (
107108
payload: JsonRpcRequest<any>,
108-
callback: (error: unknown, response?: JsonRpcResponse<any>) => void,
109+
callback: (
110+
error: unknown,
111+
response?: JsonRpcResponse<unknown> | ProviderSendAsyncResponse<unknown>,
112+
) => void,
109113
) => {
110114
return this.#handleSend(payload, callback);
111115
};
112116

113117
sendAsync = (
114-
payload: JsonRpcRequest<any>,
115-
callback: (error: unknown, response?: JsonRpcResponse<any>) => void,
118+
payload: JsonRpcRequest<unknown>,
119+
callback: (
120+
error: unknown,
121+
response: JsonRpcResponse<unknown> | ProviderSendAsyncResponse<unknown>,
122+
) => void,
116123
) => {
117124
return this.#handleSend(payload, callback);
118125
};
119126

120127
#handleSend(
121-
payload: JsonRpcRequest<any>,
122-
callback: (error: unknown, response?: JsonRpcResponse<any>) => void,
128+
payload: JsonRpcRequest<unknown>,
129+
callback: (
130+
error: unknown,
131+
response: JsonRpcResponse<unknown> | ProviderSendAsyncResponse<unknown>,
132+
) => void,
123133
) {
124134
if (Array.isArray(payload)) {
125135
throw new Error("Arrays aren't supported");
@@ -173,7 +183,10 @@ export class FakeProvider extends SafeEventEmitterProvider {
173183

174184
async #handleRequest(
175185
stub: FakeProviderStub,
176-
callback: (error: unknown, response?: JsonRpcResponse<any>) => void,
186+
callback: (
187+
error: unknown,
188+
response: JsonRpcResponse<unknown> | ProviderSendAsyncResponse<unknown>,
189+
) => void,
177190
) {
178191
if (stub.beforeCompleting) {
179192
await stub.beforeCompleting();
@@ -199,7 +212,7 @@ export class FakeProvider extends SafeEventEmitterProvider {
199212
});
200213
}
201214
} else if ('error' in stub) {
202-
return callback(stub.error);
215+
return callback(stub.error, { result: undefined });
203216
}
204217

205218
return undefined;

0 commit comments

Comments
 (0)