Skip to content

Commit f482a84

Browse files
committed
refactor: migrate gas-fee-controller to @metamask/messenger
1 parent 6210cf2 commit f482a84

File tree

4 files changed

+71
-45
lines changed

4 files changed

+71
-45
lines changed

packages/gas-fee-controller/src/GasFeeController.test.ts

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import { Messenger } from '@metamask/base-controller';
21
import {
32
ChainId,
43
convertHexToDecimal,
54
toHex,
65
} from '@metamask/controller-utils';
76
import EthQuery from '@metamask/eth-query';
7+
import {
8+
Messenger,
9+
MOCK_ANY_NAMESPACE,
10+
type MessengerActions,
11+
type MessengerEvents,
12+
type MockAnyNamespace,
13+
} from '@metamask/messenger';
814
import { NetworkController, NetworkStatus } from '@metamask/network-controller';
915
import type {
10-
NetworkControllerGetEIP1559CompatibilityAction,
11-
NetworkControllerGetNetworkClientByIdAction,
12-
NetworkControllerGetStateAction,
13-
NetworkControllerNetworkDidChangeEvent,
16+
NetworkControllerMessenger,
1417
NetworkState,
1518
} from '@metamask/network-controller';
1619
import type { Hex } from '@metamask/utils';
@@ -30,12 +33,11 @@ import {
3033
} from './gas-util';
3134
import { GAS_ESTIMATE_TYPES, GasFeeController } from './GasFeeController';
3235
import type {
36+
GasFeeMessenger,
3337
GasFeeState,
34-
GasFeeStateChange,
3538
GasFeeStateEthGasPrice,
3639
GasFeeStateFeeMarket,
3740
GasFeeStateLegacy,
38-
GetGasFeeState,
3941
} from './GasFeeController';
4042

4143
jest.mock('./determineGasFeeCalculations');
@@ -48,39 +50,46 @@ const mockedDetermineGasFeeCalculations =
4850

4951
const name = 'GasFeeController';
5052

51-
type MainMessenger = Messenger<
52-
| GetGasFeeState
53-
| NetworkControllerGetStateAction
54-
| NetworkControllerGetNetworkClientByIdAction
55-
| NetworkControllerGetEIP1559CompatibilityAction,
56-
GasFeeStateChange | NetworkControllerNetworkDidChangeEvent
57-
>;
53+
type AllGasFeeControllerActions = MessengerActions<GasFeeMessenger>;
54+
type AllGasFeeControllerEvents = MessengerEvents<GasFeeMessenger>;
55+
56+
type AllNetworkControllerActions = MessengerActions<NetworkControllerMessenger>;
57+
type AllNetworkControllerEvents = MessengerEvents<NetworkControllerMessenger>;
58+
59+
type AllActions = AllGasFeeControllerActions | AllNetworkControllerActions;
60+
type AllEvents = AllGasFeeControllerEvents | AllNetworkControllerEvents;
5861

59-
const getMessenger = (): MainMessenger => {
60-
return new Messenger();
62+
type RootMessenger = Messenger<MockAnyNamespace, AllActions, AllEvents>;
63+
64+
const getRootMessenger = (): RootMessenger => {
65+
return new Messenger({ namespace: MOCK_ANY_NAMESPACE });
6166
};
6267

6368
const setupNetworkController = async ({
64-
unrestrictedMessenger,
69+
rootMessenger,
6570
state,
6671
clock,
6772
initializeProvider = true,
6873
}: {
69-
unrestrictedMessenger: MainMessenger;
74+
rootMessenger: RootMessenger;
7075
state: Partial<NetworkState>;
7176
clock: sinon.SinonFakeTimers;
7277
initializeProvider?: boolean;
7378
}) => {
74-
const restrictedMessenger = unrestrictedMessenger.getRestricted({
75-
name: 'NetworkController',
76-
allowedActions: [],
77-
allowedEvents: [],
79+
const networkControllerMessenger = new Messenger<
80+
'NetworkController',
81+
MessengerActions<NetworkControllerMessenger>,
82+
MessengerEvents<NetworkControllerMessenger>,
83+
typeof rootMessenger
84+
>({
85+
namespace: 'NetworkController',
86+
parent: rootMessenger,
7887
});
7988

8089
const infuraProjectId = '123';
8190

8291
const networkController = new NetworkController({
83-
messenger: restrictedMessenger,
92+
messenger: networkControllerMessenger,
8493
state,
8594
infuraProjectId,
8695
getRpcServiceOptions: () => ({
@@ -117,16 +126,26 @@ const setupNetworkController = async ({
117126
return networkController;
118127
};
119128

120-
const getRestrictedMessenger = (messenger: MainMessenger) => {
121-
return messenger.getRestricted({
122-
name,
123-
allowedActions: [
129+
const getGasFeeControllerMessenger = (rootMessenger: RootMessenger) => {
130+
const gasFeeControllerMessenger = new Messenger<
131+
'GasFeeController',
132+
AllGasFeeControllerActions,
133+
AllGasFeeControllerEvents,
134+
typeof rootMessenger
135+
>({
136+
namespace: 'GasFeeController',
137+
parent: rootMessenger,
138+
});
139+
rootMessenger.delegate({
140+
messenger: gasFeeControllerMessenger,
141+
actions: [
124142
'NetworkController:getState',
125143
'NetworkController:getNetworkClientById',
126144
'NetworkController:getEIP1559Compatibility',
127145
],
128-
allowedEvents: ['NetworkController:networkDidChange'],
146+
events: ['NetworkController:networkDidChange'],
129147
});
148+
return gasFeeControllerMessenger;
130149
};
131150

132151
/**
@@ -282,14 +301,14 @@ describe('GasFeeController', () => {
282301
interval?: number;
283302
initializeNetworkProvider?: boolean;
284303
} = {}) {
285-
const messenger = getMessenger();
304+
const rootMessenger = getRootMessenger();
286305
networkController = await setupNetworkController({
287-
unrestrictedMessenger: messenger,
306+
rootMessenger,
288307
state: networkControllerState,
289308
clock,
290309
initializeProvider: initializeNetworkProvider,
291310
});
292-
const restrictedMessenger = getRestrictedMessenger(messenger);
311+
const restrictedMessenger = getGasFeeControllerMessenger(rootMessenger);
293312
gasFeeController = new GasFeeController({
294313
getProvider: jest.fn(),
295314
getChainId,

packages/gas-fee-controller/src/GasFeeController.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import type {
22
ControllerGetStateAction,
33
ControllerStateChangeEvent,
4-
RestrictedMessenger,
5-
} from '@metamask/base-controller';
4+
} from '@metamask/base-controller/next';
65
import {
76
convertHexToDecimal,
87
safelyExecute,
98
toHex,
109
} from '@metamask/controller-utils';
1110
import EthQuery from '@metamask/eth-query';
11+
import type { Messenger } from '@metamask/messenger';
1212
import type {
1313
NetworkClientId,
1414
NetworkControllerGetEIP1559CompatibilityAction,
@@ -18,7 +18,7 @@ import type {
1818
NetworkState,
1919
ProviderProxy,
2020
} from '@metamask/network-controller';
21-
import { StaticIntervalPollingController } from '@metamask/polling-controller';
21+
import { StaticIntervalPollingControllerNext } from '@metamask/polling-controller';
2222
import type { Hex } from '@metamask/utils';
2323
import { v1 as random } from 'uuid';
2424

@@ -240,12 +240,10 @@ type AllowedActions =
240240
| NetworkControllerGetNetworkClientByIdAction
241241
| NetworkControllerGetEIP1559CompatibilityAction;
242242

243-
type GasFeeMessenger = RestrictedMessenger<
243+
export type GasFeeMessenger = Messenger<
244244
typeof name,
245245
GasFeeControllerActions | AllowedActions,
246-
GasFeeControllerEvents | NetworkControllerNetworkDidChangeEvent,
247-
AllowedActions['type'],
248-
NetworkControllerNetworkDidChangeEvent['type']
246+
GasFeeControllerEvents | NetworkControllerNetworkDidChangeEvent
249247
>;
250248

251249
const defaultState: GasFeeState = {
@@ -264,7 +262,7 @@ type GasFeePollingInput = {
264262
/**
265263
* Controller that retrieves gas fee estimate data and polls for updated data on a set interval
266264
*/
267-
export class GasFeeController extends StaticIntervalPollingController<GasFeePollingInput>()<
265+
export class GasFeeController extends StaticIntervalPollingControllerNext<GasFeePollingInput>()<
268266
typeof name,
269267
GasFeeState,
270268
GasFeeMessenger
@@ -376,14 +374,14 @@ export class GasFeeController extends StaticIntervalPollingController<GasFeePoll
376374
await this.#onNetworkControllerDidChange(networkControllerState);
377375
});
378376
} else {
379-
const { selectedNetworkClientId } = this.messagingSystem.call(
377+
const { selectedNetworkClientId } = this.messenger.call(
380378
'NetworkController:getState',
381379
);
382-
this.currentChainId = this.messagingSystem.call(
380+
this.currentChainId = this.messenger.call(
383381
'NetworkController:getNetworkClientById',
384382
selectedNetworkClientId,
385383
).configuration.chainId;
386-
this.messagingSystem.subscribe(
384+
this.messenger.subscribe(
387385
'NetworkController:networkDidChange',
388386
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
389387
// eslint-disable-next-line @typescript-eslint/no-misused-promises
@@ -443,7 +441,7 @@ export class GasFeeController extends StaticIntervalPollingController<GasFeePoll
443441
decimalChainId: number;
444442

445443
if (networkClientId !== undefined) {
446-
const networkClient = this.messagingSystem.call(
444+
const networkClient = this.messenger.call(
447445
'NetworkController:getNetworkClientById',
448446
networkClientId,
449447
);
@@ -452,7 +450,7 @@ export class GasFeeController extends StaticIntervalPollingController<GasFeePoll
452450
decimalChainId = convertHexToDecimal(networkClient.configuration.chainId);
453451

454452
try {
455-
const result = await this.messagingSystem.call(
453+
const result = await this.messenger.call(
456454
'NetworkController:getEIP1559Compatibility',
457455
networkClientId,
458456
);
@@ -610,7 +608,7 @@ export class GasFeeController extends StaticIntervalPollingController<GasFeePoll
610608
async #onNetworkControllerDidChange({
611609
selectedNetworkClientId,
612610
}: NetworkState) {
613-
const newChainId = this.messagingSystem.call(
611+
const newChainId = this.messenger.call(
614612
'NetworkController:getNetworkClientById',
615613
selectedNetworkClientId,
616614
).configuration.chainId;

packages/polling-controller/src/StaticIntervalPollingController.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { BaseController } from '@metamask/base-controller';
2+
import { BaseController as BaseControllerNext } from '@metamask/base-controller/next';
23
import type { Json } from '@metamask/utils';
34

45
import {
@@ -89,3 +90,10 @@ export const StaticIntervalPollingController = <PollingInput extends Json>() =>
8990
StaticIntervalPollingControllerMixin<typeof BaseController, PollingInput>(
9091
BaseController,
9192
);
93+
94+
export const StaticIntervalPollingControllerNext = <
95+
PollingInput extends Json,
96+
>() =>
97+
StaticIntervalPollingControllerMixin<typeof BaseControllerNext, PollingInput>(
98+
BaseControllerNext,
99+
);

packages/polling-controller/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export {
66
export {
77
StaticIntervalPollingControllerOnly,
88
StaticIntervalPollingController,
9+
StaticIntervalPollingControllerNext,
910
} from './StaticIntervalPollingController';
1011

1112
export type { IPollingController } from './types';

0 commit comments

Comments
 (0)