Skip to content

Commit fae4bd9

Browse files
committed
fix: publish address along with id in AccountsController:accountRemoved
1 parent 76036c4 commit fae4bd9

14 files changed

+60
-60
lines changed

packages/accounts-controller/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Add account address in payload for `AccountsController:accountRemoved` event ([#5859](https://github.com/MetaMask/core/pull/5859))
13+
1014
### Fixed
1115

1216
- Populate `.options.entropySource` for new `InternalAccount`s before publishing `:accountAdded` ([#5841](https://github.com/MetaMask/core/pull/5841))

packages/accounts-controller/src/AccountsController.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,7 @@ describe('AccountsController', () => {
14171417
// 2. AccountsController:stateChange
14181418
3,
14191419
'AccountsController:accountRemoved',
1420-
mockAccount3.id,
1420+
{ id: mockAccount3.id, address: mockAccount3.address },
14211421
);
14221422
});
14231423
});

packages/accounts-controller/src/AccountsController.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export type AccountsControllerAccountAddedEvent = {
162162

163163
export type AccountsControllerAccountRemovedEvent = {
164164
type: `${typeof controllerName}:accountRemoved`;
165-
payload: [AccountId];
165+
payload: [{ id: string; address: string }];
166166
};
167167

168168
export type AccountsControllerAccountRenamedEvent = {
@@ -862,8 +862,12 @@ export class AccountsController extends BaseController<
862862
}
863863

864864
// Diff that we will use to publish events afterward.
865+
type diffItem = {
866+
id: string;
867+
address: string;
868+
};
865869
const diff = {
866-
removed: [] as string[],
870+
removed: [] as diffItem[],
867871
added: [] as InternalAccount[],
868872
};
869873

@@ -874,7 +878,10 @@ export class AccountsController extends BaseController<
874878
for (const account of patch.removed) {
875879
delete internalAccounts.accounts[account.id];
876880

877-
diff.removed.push(account.id);
881+
diff.removed.push({
882+
id: account.id,
883+
address: account.address,
884+
});
878885
}
879886

880887
for (const added of patch.added) {
@@ -921,8 +928,11 @@ export class AccountsController extends BaseController<
921928
});
922929

923930
// Now publish events
924-
for (const id of diff.removed) {
925-
this.messagingSystem.publish('AccountsController:accountRemoved', id);
931+
for (const item of diff.removed) {
932+
this.messagingSystem.publish('AccountsController:accountRemoved', {
933+
id: item.id,
934+
address: item.address,
935+
});
926936
}
927937

928938
for (const account of diff.added) {

packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,10 @@ describe('MultichainAssetsController', () => {
534534
assetsMetadata: mockGetMetadataReturnValue.assets,
535535
});
536536
// Remove an EVM account
537-
messenger.publish('AccountsController:accountRemoved', mockEthAccount.id);
537+
messenger.publish('AccountsController:accountRemoved', {
538+
id: mockEthAccount.id,
539+
address: mockEthAccount.address,
540+
});
538541

539542
await advanceTime({ clock, duration: 1 });
540543

@@ -580,10 +583,10 @@ describe('MultichainAssetsController', () => {
580583
assetsMetadata: mockGetMetadataReturnValue.assets,
581584
});
582585
// Remove the added solana account
583-
messenger.publish(
584-
'AccountsController:accountRemoved',
585-
mockSolanaAccount.id,
586-
);
586+
messenger.publish('AccountsController:accountRemoved', {
587+
id: mockSolanaAccount.id,
588+
address: mockSolanaAccount.address,
589+
});
587590

588591
await advanceTime({ clock, duration: 1 });
589592

packages/assets-controllers/src/MultichainAssetsController/MultichainAssetsController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export class MultichainAssetsController extends BaseController<
204204
);
205205
this.messagingSystem.subscribe(
206206
'AccountsController:accountRemoved',
207-
async (account) => await this.#handleOnAccountRemovedEvent(account),
207+
async ({ id }) => await this.#handleOnAccountRemovedEvent(id),
208208
);
209209
this.messagingSystem.subscribe(
210210
'AccountsController:accountAssetListUpdated',

packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,10 @@ describe('MultichainBalancesController', () => {
272272
},
273273
});
274274

275-
messenger.publish('AccountsController:accountRemoved', mockBtcAccount.id);
275+
messenger.publish('AccountsController:accountRemoved', {
276+
id: mockBtcAccount.id,
277+
address: mockBtcAccount.address,
278+
});
276279

277280
expect(controller.state).toStrictEqual({
278281
balances: {},

packages/assets-controllers/src/MultichainBalancesController/MultichainBalancesController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ export class MultichainBalancesController extends BaseController<
165165

166166
this.messagingSystem.subscribe(
167167
'AccountsController:accountRemoved',
168-
(account: string) => this.#handleOnAccountRemoved(account),
168+
({ id }) => this.#handleOnAccountRemoved(id),
169169
);
170170
this.messagingSystem.subscribe(
171171
'AccountsController:accountBalancesUpdated',

packages/assets-controllers/src/TokenBalancesController.test.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -747,17 +747,6 @@ describe('TokenBalancesController', () => {
747747
});
748748

749749
describe('when accountRemoved is published', () => {
750-
it('does not update state if account removed is not in the list of accounts', async () => {
751-
const { controller, messenger, updateSpy } = setupController();
752-
753-
messenger.publish(
754-
'AccountsController:accountRemoved',
755-
'0x0000000000000000000000000000000000000000',
756-
);
757-
758-
expect(controller.state.tokenBalances).toStrictEqual({});
759-
expect(updateSpy).toHaveBeenCalledTimes(0);
760-
});
761750
it('removes the balances for the removed account', async () => {
762751
const chainId = '0x1';
763752
const accountAddress = '0x0000000000000000000000000000000000000000';
@@ -822,7 +811,10 @@ describe('TokenBalancesController', () => {
822811
},
823812
});
824813

825-
messenger.publish('AccountsController:accountRemoved', account.id);
814+
messenger.publish('AccountsController:accountRemoved', {
815+
id: account.id,
816+
address: account.address,
817+
});
826818

827819
await advanceTime({ clock, duration: 1 });
828820

packages/assets-controllers/src/TokenBalancesController.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ export class TokenBalancesController extends StaticIntervalPollingController<Tok
196196

197197
this.messagingSystem.subscribe(
198198
'AccountsController:accountRemoved',
199-
(accountId: string) => this.#handleOnAccountRemoved(accountId),
199+
({ address }) => this.#handleOnAccountRemoved(address),
200200
);
201201
}
202202

@@ -286,19 +286,9 @@ export class TokenBalancesController extends StaticIntervalPollingController<Tok
286286
/**
287287
* Handles changes when an account has been removed.
288288
*
289-
* @param accountId - The account id being removed.
289+
* @param accountAddress - The account address being removed.
290290
*/
291-
#handleOnAccountRemoved(accountId: string) {
292-
const accounts = this.messagingSystem.call(
293-
'AccountsController:listAccounts',
294-
);
295-
const accountAddress = accounts.find(
296-
(account) => account.id === accountId,
297-
)?.address;
298-
if (!accountAddress) {
299-
return;
300-
}
301-
291+
#handleOnAccountRemoved(accountAddress: string) {
302292
this.update((state) => {
303293
delete state.tokenBalances[accountAddress as `0x${string}`];
304294
});

packages/assets-controllers/src/TokensController.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3393,7 +3393,7 @@ describe('TokensController', () => {
33933393
({ controller, triggerAccountRemoved }) => {
33943394
expect(controller.state).toStrictEqual(initialState);
33953395

3396-
triggerAccountRemoved(firstAccount.id);
3396+
triggerAccountRemoved(firstAccount.id, firstAccount.address);
33973397

33983398
expect(controller.state).toStrictEqual({
33993399
allTokens: {
@@ -3462,7 +3462,7 @@ describe('TokensController', () => {
34623462
({ controller, triggerAccountRemoved }) => {
34633463
expect(controller.state).toStrictEqual(initialState);
34643464

3465-
triggerAccountRemoved(secondAccount.id);
3465+
triggerAccountRemoved(secondAccount.id, secondAccount.address);
34663466

34673467
expect(controller.state).toStrictEqual(initialState);
34683468
},
@@ -3486,7 +3486,7 @@ type WithControllerCallback<ReturnValue> = ({
34863486
messenger: UnrestrictedMessenger;
34873487
approvalController: ApprovalController;
34883488
triggerSelectedAccountChange: (internalAccount: InternalAccount) => void;
3489-
triggerAccountRemoved: (accountId: string) => void;
3489+
triggerAccountRemoved: (accountId: string, accountAddress: string) => void;
34903490
triggerNetworkStateChange: (
34913491
networkState: NetworkState,
34923492
patches: Patch[],
@@ -3613,8 +3613,11 @@ async function withController<ReturnValue>(
36133613
);
36143614
};
36153615

3616-
const triggerAccountRemoved = (accountId: string) => {
3617-
messenger.publish('AccountsController:accountRemoved', accountId);
3616+
const triggerAccountRemoved = (accountId: string, accountAddress: string) => {
3617+
messenger.publish('AccountsController:accountRemoved', {
3618+
id: accountId,
3619+
address: accountAddress,
3620+
});
36183621
};
36193622

36203623
const changeNetwork = ({

packages/assets-controllers/src/TokensController.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,7 @@ export class TokensController extends BaseController<
229229

230230
this.messagingSystem.subscribe(
231231
'AccountsController:accountRemoved',
232-
(accountAddress: string) =>
233-
this.#handleOnAccountRemoved(accountAddress as Hex),
232+
({ address }) => this.#handleOnAccountRemoved(address),
234233
);
235234

236235
this.messagingSystem.subscribe(
@@ -270,19 +269,8 @@ export class TokensController extends BaseController<
270269
);
271270
}
272271

273-
#handleOnAccountRemoved(accountId: string) {
274-
// find the account address in allTokens, allDetectedTokens, allIgnoredTokens
272+
#handleOnAccountRemoved(accountAddress: string) {
275273
const { allTokens, allIgnoredTokens, allDetectedTokens } = this.state;
276-
const accounts = this.messagingSystem.call(
277-
'AccountsController:listAccounts',
278-
);
279-
const accountAddress = accounts.find(
280-
(account) => account.id === accountId,
281-
)?.address;
282-
283-
if (!accountAddress) {
284-
return;
285-
}
286274
const newAllTokens = cloneDeep(allTokens);
287275
const newAllDetectedTokens = cloneDeep(allDetectedTokens);
288276
const newAllIgnoredTokens = cloneDeep(allIgnoredTokens);

packages/multichain-transactions-controller/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
12+
- Fix getting accountId from payload after subscribing to `AccountsController:accountRemoved` ([#5859](https://github.com/MetaMask/core/pull/5859))
13+
1014
## [1.0.0]
1115

1216
### Changed

packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,10 @@ describe('MultichainTransactionsController', () => {
253253
lastUpdated: expect.any(Number),
254254
});
255255

256-
messenger.publish('AccountsController:accountRemoved', mockBtcAccount.id);
256+
messenger.publish('AccountsController:accountRemoved', {
257+
id: mockBtcAccount.id,
258+
address: mockBtcAccount.address,
259+
});
257260
mockListMultichainAccounts.mockReturnValue([]);
258261

259262
expect(controller.state.nonEvmTransactions).toStrictEqual({});

packages/multichain-transactions-controller/src/MultichainTransactionsController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ export class MultichainTransactionsController extends BaseController<
205205
);
206206
this.messagingSystem.subscribe(
207207
'AccountsController:accountRemoved',
208-
(accountId: string) => this.#handleOnAccountRemoved(accountId),
208+
({ id }) => this.#handleOnAccountRemoved(id),
209209
);
210210
this.messagingSystem.subscribe(
211211
'AccountsController:accountTransactionsUpdated',

0 commit comments

Comments
 (0)