Skip to content

Commit

Permalink
rix race
Browse files Browse the repository at this point in the history
  • Loading branch information
bergeron committed Jan 9, 2025
1 parent 3b94a7c commit c3ebf62
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 15 deletions.
21 changes: 6 additions & 15 deletions packages/network-controller/src/NetworkController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import type { Hex } from '@metamask/utils';
import { hasProperty, isPlainObject, isStrictHexString } from '@metamask/utils';
import deepEqual from 'fast-deep-equal';
import type { Draft } from 'immer';
import { cloneDeep } from 'lodash';
import type { Logger } from 'loglevel';
import { createSelector } from 'reselect';
import * as URI from 'uri-js';
Expand Down Expand Up @@ -1636,11 +1637,6 @@ export class NetworkController extends BaseController<
});
});

this.#networkConfigurationsByNetworkClientId =
buildNetworkConfigurationsByNetworkClientId(
this.state.networkConfigurationsByChainId,
);

this.messagingSystem.publish(
`${controllerName}:networkAdded`,
newNetworkConfiguration,
Expand Down Expand Up @@ -1919,11 +1915,6 @@ export class NetworkController extends BaseController<
});
}

this.#networkConfigurationsByNetworkClientId =
buildNetworkConfigurationsByNetworkClientId(
this.state.networkConfigurationsByChainId,
);

this.#unregisterNetworkClientsAsNeeded({
networkClientOperations,
autoManagedNetworkClientRegistry,
Expand Down Expand Up @@ -1983,11 +1974,6 @@ export class NetworkController extends BaseController<
});
});

this.#networkConfigurationsByNetworkClientId =
buildNetworkConfigurationsByNetworkClientId(
this.state.networkConfigurationsByChainId,
);

this.messagingSystem.publish(
'NetworkController:networkRemoved',
existingNetworkConfiguration,
Expand Down Expand Up @@ -2500,6 +2486,11 @@ export class NetworkController extends BaseController<
state.networkConfigurationsByChainId[args.networkFields.chainId] =
args.networkConfigurationToPersist;
}

this.#networkConfigurationsByNetworkClientId =
buildNetworkConfigurationsByNetworkClientId(
cloneDeep(state.networkConfigurationsByChainId),
);
}

/**
Expand Down
58 changes: 58 additions & 0 deletions packages/network-controller/tests/NetworkController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11338,6 +11338,64 @@ describe('NetworkController', () => {
});
});
});

it.only('allows calling `getNetworkConfigurationByNetworkClientId` when subscribing to state changes containing new endpoints', async () => {
const network = buildCustomNetworkConfiguration({
chainId: '0x1' as Hex,
name: 'mainnet',
nativeCurrency: 'ETH',
blockExplorerUrls: [],
defaultRpcEndpointIndex: 0,
rpcEndpoints: [
{
type: RpcEndpointType.Custom,
url: 'https://test.endpoint/1',
networkClientId: 'client1',
},
],
});

await withController(
{
state: {
selectedNetworkClientId: 'client1',
networkConfigurationsByChainId: { '0x1': network },
},
},
async ({ controller, messenger }) => {
// Verify we can call `getNetworkConfigurationByNetworkClientId` with the new endpoint
const stateChangePromise = new Promise<void>((resolve, reject) => {
messenger.subscribe('NetworkController:stateChange', (state) => {
const { networkClientId } =
state.networkConfigurationsByChainId['0x1'].rpcEndpoints[1];

const networkConfiguration =
controller.getNetworkConfigurationByNetworkClientId(
networkClientId,
);

networkConfiguration
? resolve()
: reject(`networkClient ${networkClientId} not found`);
});
});

// Add a new endpoint
await controller.updateNetwork('0x1', {
...network,
rpcEndpoints: [
...network.rpcEndpoints,
{
type: RpcEndpointType.Custom,
url: 'https://test.endpoint/2',
},
],
});

await stateChangePromise;
},
);
});
});

describe('removeNetwork', () => {
Expand Down

0 comments on commit c3ebf62

Please sign in to comment.