From 2226588d5c7191864337d55e9e54f8f200187783 Mon Sep 17 00:00:00 2001 From: Prithpal Sooriya Date: Fri, 13 Sep 2024 13:22:30 +0100 Subject: [PATCH] feat: add NetworkController actions and events actions and events for adding, updating, and removing a network configuration --- .../src/NetworkController.ts | 73 ++++++++++++++++++- packages/network-controller/src/index.ts | 6 ++ 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/packages/network-controller/src/NetworkController.ts b/packages/network-controller/src/NetworkController.ts index 6b42d86d27..2e53b4070f 100644 --- a/packages/network-controller/src/NetworkController.ts +++ b/packages/network-controller/src/NetworkController.ts @@ -409,13 +409,33 @@ export type NetworkControllerNetworkAddedEvent = { payload: [networkConfiguration: NetworkConfiguration]; }; +/** + * `networkUpdated` is published after a network configuration is updated in the + * network configuration registry and network clients are created as needed. + */ +export type NetworkControllerNetworkUpdatedEvent = { + type: 'NetworkController:networkUpdated'; + payload: [networkConfiguration: NetworkConfiguration]; +}; + +/** + * `networkRemoved` is published after a network configuration is removed from the + * network configuration registry and once the network clients have been removed. + */ +export type NetworkControllerNetworkRemovedEvent = { + type: 'NetworkController:networkRemoved'; + payload: [networkConfiguration: NetworkConfiguration]; +}; + export type NetworkControllerEvents = | NetworkControllerStateChangeEvent | NetworkControllerNetworkWillChangeEvent | NetworkControllerNetworkDidChangeEvent | NetworkControllerInfuraIsBlockedEvent | NetworkControllerInfuraIsUnblockedEvent - | NetworkControllerNetworkAddedEvent; + | NetworkControllerNetworkAddedEvent + | NetworkControllerNetworkUpdatedEvent + | NetworkControllerNetworkRemovedEvent; export type NetworkControllerGetStateAction = ControllerGetStateAction< typeof controllerName, @@ -473,6 +493,21 @@ export type NetworkControllerGetNetworkConfigurationByNetworkClientId = { handler: NetworkController['getNetworkConfigurationByNetworkClientId']; }; +export type NetworkControllerAddNetworkAction = { + type: 'NetworkController:addNetwork'; + handler: NetworkController['addNetwork']; +}; + +export type NetworkControllerUpdateNetworkAction = { + type: 'NetworkController:updateNetwork'; + handler: NetworkController['updateNetwork']; +}; + +export type NetworkControllerRemoveNetworkAction = { + type: 'NetworkController:removeNetwork'; + handler: NetworkController['removeNetwork']; +}; + export type NetworkControllerActions = | NetworkControllerGetStateAction | NetworkControllerGetEthQueryAction @@ -483,7 +518,10 @@ export type NetworkControllerActions = | NetworkControllerSetActiveNetworkAction | NetworkControllerSetProviderTypeAction | NetworkControllerGetNetworkConfigurationByChainId - | NetworkControllerGetNetworkConfigurationByNetworkClientId; + | NetworkControllerGetNetworkConfigurationByNetworkClientId + | NetworkControllerAddNetworkAction + | NetworkControllerUpdateNetworkAction + | NetworkControllerRemoveNetworkAction; export type NetworkControllerMessenger = RestrictedControllerMessenger< typeof controllerName, @@ -954,6 +992,27 @@ export class NetworkController extends BaseController< `${this.name}:getSelectedNetworkClient`, this.getSelectedNetworkClient.bind(this), ); + + this.messagingSystem.registerActionHandler( + // ESLint is mistaken here; `name` is a string. + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${this.name}:addNetwork`, + this.addNetwork.bind(this), + ); + + this.messagingSystem.registerActionHandler( + // ESLint is mistaken here; `name` is a string. + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${this.name}:updateNetwork`, + this.updateNetwork.bind(this), + ); + + this.messagingSystem.registerActionHandler( + // ESLint is mistaken here; `name` is a string. + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + `${this.name}:removeNetwork`, + this.removeNetwork.bind(this), + ); } /** @@ -1881,6 +1940,11 @@ export class NetworkController extends BaseController< autoManagedNetworkClientRegistry, }); + this.messagingSystem.publish( + 'NetworkController:networkUpdated', + updatedNetworkConfiguration, + ); + return updatedNetworkConfiguration; } @@ -1939,6 +2003,11 @@ export class NetworkController extends BaseController< buildNetworkConfigurationsByNetworkClientId( this.state.networkConfigurationsByChainId, ); + + this.messagingSystem.publish( + 'NetworkController:networkRemoved', + existingNetworkConfiguration, + ); } /** diff --git a/packages/network-controller/src/index.ts b/packages/network-controller/src/index.ts index e05622fc65..957b0d8bc2 100644 --- a/packages/network-controller/src/index.ts +++ b/packages/network-controller/src/index.ts @@ -17,6 +17,9 @@ export type { NetworkControllerNetworkDidChangeEvent, NetworkControllerInfuraIsBlockedEvent, NetworkControllerInfuraIsUnblockedEvent, + NetworkControllerNetworkAddedEvent, + NetworkControllerNetworkUpdatedEvent, + NetworkControllerNetworkRemovedEvent, NetworkControllerEvents, NetworkControllerGetStateAction, NetworkControllerGetEthQueryAction, @@ -26,6 +29,9 @@ export type { NetworkControllerFindNetworkClientIdByChainIdAction, NetworkControllerSetProviderTypeAction, NetworkControllerSetActiveNetworkAction, + NetworkControllerAddNetworkAction, + NetworkControllerUpdateNetworkAction, + NetworkControllerRemoveNetworkAction, NetworkControllerGetNetworkConfigurationByNetworkClientId, NetworkControllerActions, NetworkControllerMessenger,