From 517c07ed01ee20c1ae21f037233f0a05a22f67de Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 4 Jun 2026 11:05:23 +0200 Subject: [PATCH 1/3] feat(wallet): Add NetworkController initialization --- packages/wallet/package.json | 1 + .../src/initialization/instances/index.ts | 1 + .../network-controller/network-controller.ts | 35 +++++++++++++++++++ .../instances/network-controller/types.ts | 6 ++++ packages/wallet/src/types.ts | 4 ++- packages/wallet/tsconfig.build.json | 1 + packages/wallet/tsconfig.json | 1 + yarn.lock | 1 + 8 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/wallet/src/initialization/instances/network-controller/network-controller.ts create mode 100644 packages/wallet/src/initialization/instances/network-controller/types.ts diff --git a/packages/wallet/package.json b/packages/wallet/package.json index df889e0bbf..38e6ac4f7d 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -61,6 +61,7 @@ "@metamask/controller-utils": "^12.2.0", "@metamask/keyring-controller": "^27.0.0", "@metamask/messenger": "^1.2.0", + "@metamask/network-controller": "^32.0.0", "@metamask/remote-feature-flag-controller": "^4.2.2", "@metamask/scure-bip39": "^2.1.1", "@metamask/storage-service": "^1.0.2", diff --git a/packages/wallet/src/initialization/instances/index.ts b/packages/wallet/src/initialization/instances/index.ts index bed6e52b26..03fab5e5d5 100644 --- a/packages/wallet/src/initialization/instances/index.ts +++ b/packages/wallet/src/initialization/instances/index.ts @@ -2,5 +2,6 @@ export { accountsController } from './accounts-controller/accounts-controller'; export { approvalController } from './approval-controller/approval-controller'; export { connectivityController } from './connectivity-controller/connectivity-controller'; export { keyringController } from './keyring-controller/keyring-controller'; +export { networkController } from './network-controller/network-controller'; export { remoteFeatureFlagController } from './remote-feature-flag-controller/remote-feature-flag-controller'; export { storageService } from './storage-service/storage-service'; diff --git a/packages/wallet/src/initialization/instances/network-controller/network-controller.ts b/packages/wallet/src/initialization/instances/network-controller/network-controller.ts new file mode 100644 index 0000000000..ee1f9e21ff --- /dev/null +++ b/packages/wallet/src/initialization/instances/network-controller/network-controller.ts @@ -0,0 +1,35 @@ +import { Messenger } from '@metamask/messenger'; +import { + NetworkController, + NetworkControllerMessenger, +} from '@metamask/network-controller'; + +import { InitializationConfiguration } from '../../types'; + +export const networkController: InitializationConfiguration< + NetworkController, + NetworkControllerMessenger +> = { + name: 'NetworkController', + init: ({ state, messenger, options }) => + new NetworkController({ + state, + messenger, + infuraProjectId: options.infuraProjectId, + }), + getMessenger: (parent) => { + const networkControllerMessenger: NetworkControllerMessenger = + new Messenger({ + namespace: 'NetworkController', + parent, + }); + + parent.delegate({ + messenger: networkControllerMessenger, + actions: ['ConnectivityController:getState'], + events: [], + }); + + return networkControllerMessenger; + }, +}; diff --git a/packages/wallet/src/initialization/instances/network-controller/types.ts b/packages/wallet/src/initialization/instances/network-controller/types.ts new file mode 100644 index 0000000000..69fbc03eaa --- /dev/null +++ b/packages/wallet/src/initialization/instances/network-controller/types.ts @@ -0,0 +1,6 @@ +/** + * Per-instance options for the wallet's `NetworkController`. + */ +export type NetworkControllerInstanceOptions = { + infuraProjectId: string; +}; diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts index 0bc6c0efaa..05bc1f365f 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -10,7 +10,8 @@ import type { ConnectivityControllerInstanceOptions } from './initialization/ins import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-controller/types'; import type { RemoteFeatureFlagControllerInstanceOptions } from './initialization/instances/remote-feature-flag-controller/types'; import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types'; -import { InitializationConfiguration } from './initialization/types'; +import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types'; +import type { InitializationConfiguration } from './initialization/types'; export type WalletOptions = { messenger?: RootMessenger; @@ -26,6 +27,7 @@ export type InstanceSpecificOptions = { approvalController?: ApprovalControllerInstanceOptions; connectivityController: ConnectivityControllerInstanceOptions; keyringController?: KeyringControllerInstanceOptions; + networkController: NetworkControllerInstanceOptions; remoteFeatureFlagController: RemoteFeatureFlagControllerInstanceOptions; storageService: StorageServiceInstanceOptions; }; diff --git a/packages/wallet/tsconfig.build.json b/packages/wallet/tsconfig.build.json index 317fe28aac..fcf397e033 100644 --- a/packages/wallet/tsconfig.build.json +++ b/packages/wallet/tsconfig.build.json @@ -13,6 +13,7 @@ { "path": "../controller-utils/tsconfig.build.json" }, { "path": "../keyring-controller/tsconfig.build.json" }, { "path": "../messenger/tsconfig.build.json" }, + { "path": "../network-controller/tsconfig.build.json" }, { "path": "../remote-feature-flag-controller/tsconfig.build.json" }, { "path": "../storage-service/tsconfig.build.json" } ], diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json index abbd559b3e..a206b1baba 100644 --- a/packages/wallet/tsconfig.json +++ b/packages/wallet/tsconfig.json @@ -11,6 +11,7 @@ { "path": "../controller-utils/tsconfig.json" }, { "path": "../keyring-controller/tsconfig.json" }, { "path": "../messenger/tsconfig.json" }, + { "path": "../network-controller/tsconfig.json" }, { "path": "../remote-feature-flag-controller/tsconfig.json" }, { "path": "../storage-service/tsconfig.json" } ], diff --git a/yarn.lock b/yarn.lock index afd95d2755..ef4aadd85c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8815,6 +8815,7 @@ __metadata: "@metamask/controller-utils": "npm:^12.2.0" "@metamask/keyring-controller": "npm:^27.0.0" "@metamask/messenger": "npm:^1.2.0" + "@metamask/network-controller": "npm:^32.0.0" "@metamask/remote-feature-flag-controller": "npm:^4.2.2" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/storage-service": "npm:^1.0.2" From 22df2e5d9b9a8b5b3773cffe7403641ba02a7a82 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 4 Jun 2026 13:44:42 +0200 Subject: [PATCH 2/3] Fix tests --- packages/wallet/src/Wallet.test.ts | 21 +++++++++++++++++++++ packages/wallet/src/types.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/wallet/src/Wallet.test.ts b/packages/wallet/src/Wallet.test.ts index a89602c3fc..586f6ee58c 100644 --- a/packages/wallet/src/Wallet.test.ts +++ b/packages/wallet/src/Wallet.test.ts @@ -28,6 +28,9 @@ async function setupWallet(): Promise { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -88,6 +91,9 @@ describe('Wallet', () => { keyringController: { encryptor: new MockEncryptor(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -134,6 +140,9 @@ describe('Wallet', () => { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -174,6 +183,9 @@ describe('Wallet', () => { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -249,6 +261,9 @@ describe('Wallet', () => { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -286,6 +301,9 @@ describe('Wallet', () => { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -361,6 +379,9 @@ describe('Wallet', () => { connectivityController: { connectivityAdapter: new AlwaysOnlineAdapter(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, keyringController: { encryptor: new MockEncryptor() }, storageService: { storage: new InMemoryStorageAdapter() }, remoteFeatureFlagController: { diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts index 05bc1f365f..6a66903dde 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -8,9 +8,9 @@ import type { import type { ApprovalControllerInstanceOptions } from './initialization/instances/approval-controller/types'; import type { ConnectivityControllerInstanceOptions } from './initialization/instances/connectivity-controller/types'; import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-controller/types'; +import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types'; import type { RemoteFeatureFlagControllerInstanceOptions } from './initialization/instances/remote-feature-flag-controller/types'; import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types'; -import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types'; import type { InitializationConfiguration } from './initialization/types'; export type WalletOptions = { From 3bb0a08f09091bf64ee98a5d675882eedcfb0ae7 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Fri, 5 Jun 2026 09:58:31 +0200 Subject: [PATCH 3/3] Update README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f4a317c926..30c5af2239 100644 --- a/README.md +++ b/README.md @@ -594,6 +594,7 @@ linkStyle default opacity:0.5 wallet --> controller_utils; wallet --> keyring_controller; wallet --> messenger; + wallet --> network_controller; wallet --> remote_feature_flag_controller; wallet --> storage_service; ```