Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ linkStyle default opacity:0.5
earn_controller --> transaction_controller;
eip_5792_middleware --> transaction_controller;
eip_5792_middleware --> keyring_controller;
eip_7702_internal_rpc_middleware --> controller_utils;
eip1193_permission_middleware --> chain_agnostic_permission;
eip1193_permission_middleware --> controller_utils;
eip1193_permission_middleware --> json_rpc_engine;
Expand Down Expand Up @@ -307,6 +308,7 @@ linkStyle default opacity:0.5
seedless_onboarding_controller --> keyring_controller;
selected_network_controller --> base_controller;
selected_network_controller --> json_rpc_engine;
selected_network_controller --> messenger;
selected_network_controller --> network_controller;
selected_network_controller --> permission_controller;
shield_controller --> base_controller;
Expand Down
6 changes: 6 additions & 0 deletions packages/selected-network-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6500](https://github.com/MetaMask/core/pull/6500))
- Previously, `SelectedNetworkController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6500](https://github.com/MetaMask/core/pull/6500))

## [24.0.2]

### Changed
Expand Down
1 change: 1 addition & 0 deletions packages/selected-network-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"dependencies": {
"@metamask/base-controller": "^8.4.2",
"@metamask/json-rpc-engine": "^10.1.1",
"@metamask/messenger": "^0.3.0",
"@metamask/swappable-obj-proxy": "^2.3.0",
"@metamask/utils": "^11.8.1"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import type { RestrictedMessenger } from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
import {
BaseController,
type ControllerGetStateAction,
type ControllerStateChangeEvent,
} from '@metamask/base-controller/next';
import type { Messenger } from '@metamask/messenger';
import type {
BlockTrackerProxy,
NetworkClientId,
Expand All @@ -16,15 +20,14 @@ import type {
} from '@metamask/permission-controller';
import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';
import type { Hex } from '@metamask/utils';
import type { Patch } from 'immer';

export const controllerName = 'SelectedNetworkController';
const controllerName = 'SelectedNetworkController';

const stateMetadata = {
domains: {
includeInStateLogs: true,
persist: true,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
};
Expand All @@ -51,15 +54,17 @@ export type SelectedNetworkControllerState = {
domains: Record<Domain, NetworkClientId>;
};

export type SelectedNetworkControllerStateChangeEvent = {
type: typeof SelectedNetworkControllerEventTypes.stateChange;
payload: [SelectedNetworkControllerState, Patch[]];
};
export type SelectedNetworkControllerStateChangeEvent =
ControllerStateChangeEvent<
typeof controllerName,
SelectedNetworkControllerState
>;

export type SelectedNetworkControllerGetSelectedNetworkStateAction = {
type: typeof SelectedNetworkControllerActionTypes.getState;
handler: () => SelectedNetworkControllerState;
};
export type SelectedNetworkControllerGetSelectedNetworkStateAction =
ControllerGetStateAction<
typeof controllerName,
SelectedNetworkControllerState
>;

export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;
Expand All @@ -76,7 +81,7 @@ export type SelectedNetworkControllerActions =
| SelectedNetworkControllerGetNetworkClientIdForDomainAction
| SelectedNetworkControllerSetNetworkClientIdForDomainAction;

export type AllowedActions =
type AllowedActions =
| NetworkControllerGetNetworkClientByIdAction
| NetworkControllerGetSelectedNetworkClientAction
| NetworkControllerGetStateAction
Expand All @@ -86,16 +91,14 @@ export type AllowedActions =
export type SelectedNetworkControllerEvents =
SelectedNetworkControllerStateChangeEvent;

export type AllowedEvents =
type AllowedEvents =
| NetworkControllerStateChangeEvent
| PermissionControllerStateChange;

export type SelectedNetworkControllerMessenger = RestrictedMessenger<
export type SelectedNetworkControllerMessenger = Messenger<
typeof controllerName,
SelectedNetworkControllerActions | AllowedActions,
SelectedNetworkControllerEvents | AllowedEvents,
AllowedActions['type'],
AllowedEvents['type']
SelectedNetworkControllerEvents | AllowedEvents
>;

export type SelectedNetworkControllerOptions = {
Expand Down Expand Up @@ -123,7 +126,7 @@ export class SelectedNetworkController extends BaseController<
* Construct a SelectedNetworkController controller.
*
* @param options - The controller options.
* @param options.messenger - The restricted messenger for the EncryptionPublicKey controller.
* @param options.messenger - The messenger for the SelectedNetworkController controller.
* @param options.state - The controllers initial state.
* @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use.
*/
Expand All @@ -142,18 +145,18 @@ export class SelectedNetworkController extends BaseController<
this.#registerMessageHandlers();

// this is fetching all the dapp permissions from the PermissionsController and looking for any domains that are not in domains state in this controller. Then we take any missing domains and add them to state here, setting it with the globally selected networkClientId (fetched from the NetworkController)
this.messagingSystem
this.messenger
.call('PermissionController:getSubjectNames')
.filter((domain) => this.state.domains[domain] === undefined)
.forEach((domain) =>
this.setNetworkClientIdForDomain(
domain,
this.messagingSystem.call('NetworkController:getState')
this.messenger.call('NetworkController:getState')
.selectedNetworkClientId,
),
);

this.messagingSystem.subscribe(
this.messenger.subscribe(
'PermissionController:stateChange',
(_, patches) => {
patches.forEach(({ op, path }) => {
Expand All @@ -164,7 +167,7 @@ export class SelectedNetworkController extends BaseController<
if (op === 'add' && this.state.domains[domain] === undefined) {
this.setNetworkClientIdForDomain(
domain,
this.messagingSystem.call('NetworkController:getState')
this.messenger.call('NetworkController:getState')
.selectedNetworkClientId,
);
} else if (
Expand All @@ -178,7 +181,7 @@ export class SelectedNetworkController extends BaseController<
},
);

this.messagingSystem.subscribe(
this.messenger.subscribe(
'NetworkController:stateChange',
(
{ selectedNetworkClientId, networkConfigurationsByChainId },
Expand Down Expand Up @@ -242,11 +245,11 @@ export class SelectedNetworkController extends BaseController<
}

#registerMessageHandlers(): void {
this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
this.getNetworkClientIdForDomain.bind(this),
);
this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
this.setNetworkClientIdForDomain.bind(this),
);
Expand All @@ -256,7 +259,7 @@ export class SelectedNetworkController extends BaseController<
domain: Domain,
networkClientId: NetworkClientId,
) {
const networkClient = this.messagingSystem.call(
const networkClient = this.messenger.call(
'NetworkController:getNetworkClientById',
networkClientId,
);
Expand All @@ -279,7 +282,7 @@ export class SelectedNetworkController extends BaseController<
* @param domain - The domain for which to unset the network client ID.
*/
#unsetNetworkClientIdForDomain(domain: Domain) {
const globallySelectedNetworkClient = this.messagingSystem.call(
const globallySelectedNetworkClient = this.messenger.call(
'NetworkController:getSelectedNetworkClient',
);
const networkProxy = this.#domainProxyMap.get(domain);
Expand All @@ -297,10 +300,7 @@ export class SelectedNetworkController extends BaseController<
}

#domainHasPermissions(domain: Domain): boolean {
return this.messagingSystem.call(
'PermissionController:hasPermissions',
domain,
);
return this.messenger.call('PermissionController:hasPermissions', domain);
}

setNetworkClientIdForDomain(
Expand All @@ -324,7 +324,7 @@ export class SelectedNetworkController extends BaseController<

getNetworkClientIdForDomain(domain: Domain): NetworkClientId {
const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =
this.messagingSystem.call('NetworkController:getState');
this.messenger.call('NetworkController:getState');

return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;
}
Expand All @@ -338,7 +338,7 @@ export class SelectedNetworkController extends BaseController<
getProviderAndBlockTracker(domain: Domain): NetworkProxy {
// If the domain is 'metamask', return the NetworkController's globally selected network client proxy
if (domain === METAMASK_DOMAIN) {
const networkClient = this.messagingSystem.call(
const networkClient = this.messenger.call(
'NetworkController:getSelectedNetworkClient',
);
if (networkClient === undefined) {
Expand All @@ -352,12 +352,12 @@ export class SelectedNetworkController extends BaseController<
let networkClient;
if (this.#domainHasPermissions(domain)) {
const networkClientId = this.getNetworkClientIdForDomain(domain);
networkClient = this.messagingSystem.call(
networkClient = this.messenger.call(
'NetworkController:getNetworkClientById',
networkClientId,
);
} else {
networkClient = this.messagingSystem.call(
networkClient = this.messenger.call(
'NetworkController:getSelectedNetworkClient',
);
if (networkClient === undefined) {
Expand Down
Loading
Loading