From 5472372c99ba05d132598aea570da8e8e7d9d977 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 f4f1414434..99c27da7ef 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -59,6 +59,7 @@ "@metamask/controller-utils": "^12.1.0", "@metamask/keyring-controller": "^26.0.0", "@metamask/messenger": "^1.2.0", + "@metamask/network-controller": "^32.0.0", "@metamask/scure-bip39": "^2.1.1", "@metamask/storage-service": "^1.0.1", "@metamask/utils": "^11.9.0" diff --git a/packages/wallet/src/initialization/instances/index.ts b/packages/wallet/src/initialization/instances/index.ts index aa79320da7..6fac09eaad 100644 --- a/packages/wallet/src/initialization/instances/index.ts +++ b/packages/wallet/src/initialization/instances/index.ts @@ -1,3 +1,4 @@ export { approvalController } from './approval-controller/approval-controller'; export { keyringController } from './keyring-controller/keyring-controller'; +export { networkController } from './network-controller/network-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 08c2b63321..8ff91b6d1e 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -8,7 +8,8 @@ import type { import type { ApprovalControllerInstanceOptions } from './initialization/instances/approval-controller/types'; import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-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; @@ -23,5 +24,6 @@ export type WalletOptions = { export type InstanceSpecificOptions = { approvalController?: ApprovalControllerInstanceOptions; keyringController?: KeyringControllerInstanceOptions; + networkController: NetworkControllerInstanceOptions; storageService: StorageServiceInstanceOptions; }; diff --git a/packages/wallet/tsconfig.build.json b/packages/wallet/tsconfig.build.json index 68e89ef628..4ba1a106eb 100644 --- a/packages/wallet/tsconfig.build.json +++ b/packages/wallet/tsconfig.build.json @@ -11,6 +11,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": "../storage-service/tsconfig.build.json" } ], "include": ["../../types", "./src"] diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json index 7b905db657..0f425e6f3d 100644 --- a/packages/wallet/tsconfig.json +++ b/packages/wallet/tsconfig.json @@ -9,6 +9,7 @@ { "path": "../controller-utils/tsconfig.json" }, { "path": "../keyring-controller/tsconfig.json" }, { "path": "../messenger/tsconfig.json" }, + { "path": "../network-controller/tsconfig.json" }, { "path": "../storage-service/tsconfig.json" } ], "include": ["../../types", "./src"] diff --git a/yarn.lock b/yarn.lock index 5ef0e77490..e4790c106f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8828,6 +8828,7 @@ __metadata: "@metamask/controller-utils": "npm:^12.1.0" "@metamask/keyring-controller": "npm:^26.0.0" "@metamask/messenger": "npm:^1.2.0" + "@metamask/network-controller": "npm:^32.0.0" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/storage-service": "npm:^1.0.1" "@metamask/utils": "npm:^11.9.0" From ce747d305f989800ba4a455a0a36d75496b07dd7 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 | 12 ++++++++++++ packages/wallet/src/types.ts | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/wallet/src/Wallet.test.ts b/packages/wallet/src/Wallet.test.ts index e0ff366c09..f2eef21ba3 100644 --- a/packages/wallet/src/Wallet.test.ts +++ b/packages/wallet/src/Wallet.test.ts @@ -14,6 +14,9 @@ const TEST_PASSWORD = 'testpass'; async function setupWallet(): Promise { const wallet = new Wallet({ instanceOptions: { + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -70,6 +73,9 @@ describe('Wallet', () => { keyringController: { encryptor: new MockEncryptor(), }, + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -112,6 +118,9 @@ describe('Wallet', () => { }, ], instanceOptions: { + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, @@ -212,6 +221,9 @@ describe('Wallet', () => { }, }, instanceOptions: { + networkController: { + infuraProjectId: 'fake-infura-project-id', + }, storageService: { storage: new InMemoryStorageAdapter(), }, diff --git a/packages/wallet/src/types.ts b/packages/wallet/src/types.ts index 8ff91b6d1e..8d0f9af27e 100644 --- a/packages/wallet/src/types.ts +++ b/packages/wallet/src/types.ts @@ -7,8 +7,8 @@ import type { } from './initialization/defaults'; import type { ApprovalControllerInstanceOptions } from './initialization/instances/approval-controller/types'; import type { KeyringControllerInstanceOptions } from './initialization/instances/keyring-controller/types'; -import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types'; import type { NetworkControllerInstanceOptions } from './initialization/instances/network-controller/types'; +import type { StorageServiceInstanceOptions } from './initialization/instances/storage-service/types'; import type { InitializationConfiguration } from './initialization/types'; export type WalletOptions = { From 9ea9017d94fab05b08629487c9c8692da6e32097 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 54235840db..4a3e107f7e 100644 --- a/README.md +++ b/README.md @@ -572,6 +572,7 @@ linkStyle default opacity:0.5 wallet --> controller_utils; wallet --> keyring_controller; wallet --> messenger; + wallet --> network_controller; wallet --> storage_service; ```