From 7cbfd0cc549c8a977f76ea2c257d7d87cafc47c2 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 14:25:27 +0200 Subject: [PATCH 01/10] chore: bump accounts dependencies --- packages/account-tree-controller/package.json | 6 +- packages/accounts-controller/package.json | 6 +- packages/assets-controllers/package.json | 6 +- packages/bridge-controller/package.json | 2 +- .../bridge-status-controller/package.json | 2 +- .../chain-agnostic-permission/package.json | 2 +- packages/keyring-controller/package.json | 4 +- .../multichain-account-service/package.json | 12 +- .../package.json | 4 +- .../package.json | 6 +- packages/profile-sync-controller/package.json | 4 +- yarn.lock | 128 ++++++++++-------- 12 files changed, 98 insertions(+), 84 deletions(-) diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json index 81a81fd1d77..b1d514aca45 100644 --- a/packages/account-tree-controller/package.json +++ b/packages/account-tree-controller/package.json @@ -53,10 +53,10 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@metamask/account-api": "^0.7.0", + "@metamask/account-api": "^0.8.0", "@metamask/accounts-controller": "^32.0.1", "@metamask/auto-changelog": "^3.4.4", - "@metamask/keyring-api": "^19.0.0", + "@metamask/keyring-api": "^20.0.0", "@metamask/keyring-controller": "^22.1.0", "@metamask/providers": "^22.1.0", "@metamask/snaps-controllers": "^14.0.1", @@ -70,7 +70,7 @@ "webextension-polyfill": "^0.12.0" }, "peerDependencies": { - "@metamask/account-api": "^0.7.0", + "@metamask/account-api": "^0.8.0", "@metamask/accounts-controller": "^32.0.0", "@metamask/keyring-controller": "^22.0.0", "@metamask/providers": "^22.0.0", diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index 62bfeafc5a6..05fe4b56046 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -49,9 +49,9 @@ "dependencies": { "@ethereumjs/util": "^9.1.0", "@metamask/base-controller": "^8.0.1", - "@metamask/eth-snap-keyring": "^14.0.0", - "@metamask/keyring-api": "^19.0.0", - "@metamask/keyring-internal-api": "^7.0.0", + "@metamask/eth-snap-keyring": "^16.0.0", + "@metamask/keyring-api": "^20.0.0", + "@metamask/keyring-internal-api": "^8.0.0", "@metamask/keyring-utils": "^3.1.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", diff --git a/packages/assets-controllers/package.json b/packages/assets-controllers/package.json index a7da036c8d9..f46488f2801 100644 --- a/packages/assets-controllers/package.json +++ b/packages/assets-controllers/package.json @@ -58,7 +58,7 @@ "@metamask/contract-metadata": "^2.4.0", "@metamask/controller-utils": "^11.11.0", "@metamask/eth-query": "^4.0.0", - "@metamask/keyring-api": "^19.0.0", + "@metamask/keyring-api": "^20.0.0", "@metamask/metamask-eth-abis": "^3.1.1", "@metamask/polling-controller": "^14.0.0", "@metamask/rpc-errors": "^7.0.2", @@ -83,8 +83,8 @@ "@metamask/auto-changelog": "^3.4.4", "@metamask/ethjs-provider-http": "^0.3.0", "@metamask/keyring-controller": "^22.1.0", - "@metamask/keyring-internal-api": "^7.0.0", - "@metamask/keyring-snap-client": "^6.0.0", + "@metamask/keyring-internal-api": "^8.0.0", + "@metamask/keyring-snap-client": "^7.0.0", "@metamask/network-controller": "^24.0.1", "@metamask/permission-controller": "^11.0.6", "@metamask/phishing-controller": "^13.1.0", diff --git a/packages/bridge-controller/package.json b/packages/bridge-controller/package.json index 48d6abc78ad..fb383a0ee83 100644 --- a/packages/bridge-controller/package.json +++ b/packages/bridge-controller/package.json @@ -55,7 +55,7 @@ "@metamask/base-controller": "^8.0.1", "@metamask/controller-utils": "^11.11.0", "@metamask/gas-fee-controller": "^24.0.0", - "@metamask/keyring-api": "^19.0.0", + "@metamask/keyring-api": "^20.0.0", "@metamask/metamask-eth-abis": "^3.1.1", "@metamask/multichain-network-controller": "^0.11.0", "@metamask/polling-controller": "^14.0.0", diff --git a/packages/bridge-status-controller/package.json b/packages/bridge-status-controller/package.json index 2111db5210e..dab70f20d07 100644 --- a/packages/bridge-status-controller/package.json +++ b/packages/bridge-status-controller/package.json @@ -49,7 +49,7 @@ "dependencies": { "@metamask/base-controller": "^8.0.1", "@metamask/controller-utils": "^11.11.0", - "@metamask/keyring-api": "^19.0.0", + "@metamask/keyring-api": "^20.0.0", "@metamask/polling-controller": "^14.0.0", "@metamask/superstruct": "^3.1.0", "@metamask/utils": "^11.4.2", diff --git a/packages/chain-agnostic-permission/package.json b/packages/chain-agnostic-permission/package.json index a4f5e7df97f..a87820575df 100644 --- a/packages/chain-agnostic-permission/package.json +++ b/packages/chain-agnostic-permission/package.json @@ -57,7 +57,7 @@ }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", - "@metamask/keyring-internal-api": "^7.0.0", + "@metamask/keyring-internal-api": "^8.0.0", "@types/jest": "^27.4.1", "deepmerge": "^4.2.2", "jest": "^27.5.1", diff --git a/packages/keyring-controller/package.json b/packages/keyring-controller/package.json index 7eece08c789..dbba7bdad4b 100644 --- a/packages/keyring-controller/package.json +++ b/packages/keyring-controller/package.json @@ -54,8 +54,8 @@ "@metamask/eth-hd-keyring": "^12.0.0", "@metamask/eth-sig-util": "^8.2.0", "@metamask/eth-simple-keyring": "^10.0.0", - "@metamask/keyring-api": "^19.0.0", - "@metamask/keyring-internal-api": "^7.0.0", + "@metamask/keyring-api": "^20.0.0", + "@metamask/keyring-internal-api": "^8.0.0", "@metamask/utils": "^11.4.2", "async-mutex": "^0.5.0", "ethereumjs-wallet": "^1.0.1", diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index 47c0bdf89bb..f34079790a5 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -48,17 +48,17 @@ }, "dependencies": { "@metamask/base-controller": "^8.0.1", - "@metamask/eth-snap-keyring": "^14.0.0", - "@metamask/keyring-api": "^19.0.0", - "@metamask/keyring-internal-api": "^7.0.0", - "@metamask/keyring-snap-client": "^6.0.0", + "@metamask/eth-snap-keyring": "^16.0.0", + "@metamask/keyring-api": "^20.0.0", + "@metamask/keyring-internal-api": "^8.0.0", + "@metamask/keyring-snap-client": "^7.0.0", "@metamask/keyring-utils": "^3.1.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", "@metamask/superstruct": "^3.1.0" }, "devDependencies": { - "@metamask/account-api": "^0.7.0", + "@metamask/account-api": "^0.8.0", "@metamask/accounts-controller": "^32.0.1", "@metamask/auto-changelog": "^3.4.4", "@metamask/keyring-controller": "^22.1.0", @@ -76,7 +76,7 @@ "webextension-polyfill": "^0.12.0" }, "peerDependencies": { - "@metamask/account-api": "^0.7.0", + "@metamask/account-api": "^0.8.0", "@metamask/accounts-controller": "^32.0.0", "@metamask/keyring-controller": "^22.0.0", "@metamask/providers": "^22.0.0", diff --git a/packages/multichain-network-controller/package.json b/packages/multichain-network-controller/package.json index fbed986d6d3..757d650cfb8 100644 --- a/packages/multichain-network-controller/package.json +++ b/packages/multichain-network-controller/package.json @@ -49,8 +49,8 @@ "dependencies": { "@metamask/base-controller": "^8.0.1", "@metamask/controller-utils": "^11.11.0", - "@metamask/keyring-api": "^19.0.0", - "@metamask/keyring-internal-api": "^7.0.0", + "@metamask/keyring-api": "^20.0.0", + "@metamask/keyring-internal-api": "^8.0.0", "@metamask/superstruct": "^3.1.0", "@metamask/utils": "^11.4.2", "@solana/addresses": "^2.0.0", diff --git a/packages/multichain-transactions-controller/package.json b/packages/multichain-transactions-controller/package.json index a0c5dec1cba..37e58499d0f 100644 --- a/packages/multichain-transactions-controller/package.json +++ b/packages/multichain-transactions-controller/package.json @@ -48,9 +48,9 @@ }, "dependencies": { "@metamask/base-controller": "^8.0.1", - "@metamask/keyring-api": "^19.0.0", - "@metamask/keyring-internal-api": "^7.0.0", - "@metamask/keyring-snap-client": "^6.0.0", + "@metamask/keyring-api": "^20.0.0", + "@metamask/keyring-internal-api": "^8.0.0", + "@metamask/keyring-snap-client": "^7.0.0", "@metamask/polling-controller": "^14.0.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", diff --git a/packages/profile-sync-controller/package.json b/packages/profile-sync-controller/package.json index dd3a4069711..637eb74a359 100644 --- a/packages/profile-sync-controller/package.json +++ b/packages/profile-sync-controller/package.json @@ -114,9 +114,9 @@ "@lavamoat/preinstall-always-fail": "^2.1.0", "@metamask/accounts-controller": "^32.0.1", "@metamask/auto-changelog": "^3.4.4", - "@metamask/keyring-api": "^19.0.0", + "@metamask/keyring-api": "^20.0.0", "@metamask/keyring-controller": "^22.1.0", - "@metamask/keyring-internal-api": "^7.0.0", + "@metamask/keyring-internal-api": "^8.0.0", "@metamask/providers": "^22.1.0", "@metamask/snaps-controllers": "^14.0.1", "@types/jest": "^27.4.1", diff --git a/yarn.lock b/yarn.lock index 016650d2286..2115ae4e43f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2443,13 +2443,15 @@ __metadata: languageName: node linkType: hard -"@metamask/account-api@npm:^0.7.0": - version: 0.7.0 - resolution: "@metamask/account-api@npm:0.7.0" +"@metamask/account-api@npm:^0.8.0": + version: 0.8.0 + resolution: "@metamask/account-api@npm:0.8.0" dependencies: "@metamask/keyring-api": "npm:^19.1.0" + "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/superstruct": "npm:^3.1.0" - checksum: 10/973286d46f33e1d74f0600ad29f50006f054e25340bd268d65b44b1d6b9f2faced28171725aae5d84ecac43b92074340d918b14fc732a131b61c13dda3a19e63 + uuid: "npm:^9.0.1" + checksum: 10/e32147a91fec3931ccab43f07f23d8bdf38985da95ac03a67500b00a76d0d2a17ac9d4b0d75ae313e90e6b29edb6819b864a9b143b3577c1b5d36549b3216704 languageName: node linkType: hard @@ -2457,11 +2459,11 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/account-tree-controller@workspace:packages/account-tree-controller" dependencies: - "@metamask/account-api": "npm:^0.7.0" + "@metamask/account-api": "npm:^0.8.0" "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" @@ -2477,7 +2479,7 @@ __metadata: typescript: "npm:~5.2.2" webextension-polyfill: "npm:^0.12.0" peerDependencies: - "@metamask/account-api": ^0.7.0 + "@metamask/account-api": ^0.8.0 "@metamask/accounts-controller": ^32.0.0 "@metamask/keyring-controller": ^22.0.0 "@metamask/providers": ^22.0.0 @@ -2494,10 +2496,10 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" "@metamask/controller-utils": "npm:^11.11.0" - "@metamask/eth-snap-keyring": "npm:^14.0.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/eth-snap-keyring": "npm:^16.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/network-controller": "npm:^24.0.1" "@metamask/providers": "npm:^22.1.0" @@ -2637,10 +2639,10 @@ __metadata: "@metamask/controller-utils": "npm:^11.11.0" "@metamask/eth-query": "npm:^4.0.0" "@metamask/ethjs-provider-http": "npm:^0.3.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" - "@metamask/keyring-snap-client": "npm:^6.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" + "@metamask/keyring-snap-client": "npm:^7.0.0" "@metamask/metamask-eth-abis": "npm:^3.1.1" "@metamask/network-controller": "npm:^24.0.1" "@metamask/permission-controller": "npm:^11.0.6" @@ -2786,7 +2788,7 @@ __metadata: "@metamask/controller-utils": "npm:^11.11.0" "@metamask/eth-json-rpc-provider": "npm:^4.1.8" "@metamask/gas-fee-controller": "npm:^24.0.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/metamask-eth-abis": "npm:^3.1.1" "@metamask/multichain-network-controller": "npm:^0.11.0" "@metamask/network-controller": "npm:^24.0.1" @@ -2829,7 +2831,7 @@ __metadata: "@metamask/bridge-controller": "npm:^37.1.0" "@metamask/controller-utils": "npm:^11.11.0" "@metamask/gas-fee-controller": "npm:^24.0.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/network-controller": "npm:^24.0.1" "@metamask/polling-controller": "npm:^14.0.0" "@metamask/snaps-controllers": "npm:^14.0.1" @@ -2891,7 +2893,7 @@ __metadata: "@metamask/api-specs": "npm:^0.14.0" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/controller-utils": "npm:^11.11.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" "@metamask/network-controller": "npm:^24.0.1" "@metamask/permission-controller": "npm:^11.0.6" "@metamask/rpc-errors": "npm:^7.0.2" @@ -3360,24 +3362,24 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-snap-keyring@npm:^14.0.0": - version: 14.0.0 - resolution: "@metamask/eth-snap-keyring@npm:14.0.0" +"@metamask/eth-snap-keyring@npm:^16.0.0": + version: 16.0.0 + resolution: "@metamask/eth-snap-keyring@npm:16.0.0" dependencies: "@ethereumjs/tx": "npm:^5.4.0" "@metamask/base-controller": "npm:^7.1.1" "@metamask/eth-sig-util": "npm:^8.2.0" - "@metamask/keyring-api": "npm:^19.0.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" - "@metamask/keyring-internal-snap-client": "npm:^5.0.0" + "@metamask/keyring-api": "npm:^20.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" + "@metamask/keyring-internal-snap-client": "npm:^6.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.1.0" "@types/uuid": "npm:^9.0.8" uuid: "npm:^9.0.1" peerDependencies: - "@metamask/keyring-api": ^19.0.0 - checksum: 10/c30953ee6b24fa9ee957c2131a4a08764bb1fc6f6c722cae496fc30bd9a4562013b42751c2fee7a996ff63add28139ff653e8e819c960455fd36732d9ff341d2 + "@metamask/keyring-api": ^20.0.0 + checksum: 10/5a1d92c705251ab4cf3dc46d0e43af60ff2a8246653e1f137d27d2d0b88b9f022df77dae44c2b45d34e0cd9a27b1bc9fd25c856181922aa4ea244ede2373c92a languageName: node linkType: hard @@ -3642,7 +3644,7 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-api@npm:^19.0.0, @metamask/keyring-api@npm:^19.1.0": +"@metamask/keyring-api@npm:^19.1.0": version: 19.1.0 resolution: "@metamask/keyring-api@npm:19.1.0" dependencies: @@ -3654,6 +3656,18 @@ __metadata: languageName: node linkType: hard +"@metamask/keyring-api@npm:^20.0.0": + version: 20.0.0 + resolution: "@metamask/keyring-api@npm:20.0.0" + dependencies: + "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/superstruct": "npm:^3.1.0" + "@metamask/utils": "npm:^11.1.0" + bitcoin-address-validation: "npm:^2.2.3" + checksum: 10/d912d388b7706a25a7369e6cb4777660b2c5810544f0a61b58374a0c8bcf0bc396e29033bca18c5e388bac3a6c1d49ef553bd042ab631ce22edc1da070d0f338 + languageName: node + linkType: hard + "@metamask/keyring-controller@npm:^22.1.0, @metamask/keyring-controller@workspace:packages/keyring-controller": version: 0.0.0-use.local resolution: "@metamask/keyring-controller@workspace:packages/keyring-controller" @@ -3671,8 +3685,8 @@ __metadata: "@metamask/eth-hd-keyring": "npm:^12.0.0" "@metamask/eth-sig-util": "npm:^8.2.0" "@metamask/eth-simple-keyring": "npm:^10.0.0" - "@metamask/keyring-api": "npm:^19.0.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" + "@metamask/keyring-api": "npm:^20.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/scure-bip39": "npm:^2.1.1" "@metamask/utils": "npm:^11.4.2" @@ -3694,35 +3708,35 @@ __metadata: languageName: unknown linkType: soft -"@metamask/keyring-internal-api@npm:^7.0.0": - version: 7.0.0 - resolution: "@metamask/keyring-internal-api@npm:7.0.0" +"@metamask/keyring-internal-api@npm:^8.0.0": + version: 8.0.0 + resolution: "@metamask/keyring-internal-api@npm:8.0.0" dependencies: - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/superstruct": "npm:^3.1.0" - checksum: 10/5cb9b0e1e4fa706ccce4c891ddc94abfeb2cadcd7fc42d29abca4cc55518eed7863332b1e93e48b733449db4fdf22dd6c2aceb336f059877315821958c12336e + checksum: 10/6aedd45fe1a9d5e058cc098feafe68734a70c81f722d9249c2252a121dcff19442b4b92e4ebe435190a4e63770cf9ea18cd985662070849382956a988106c30b languageName: node linkType: hard -"@metamask/keyring-internal-snap-client@npm:^5.0.0": - version: 5.0.0 - resolution: "@metamask/keyring-internal-snap-client@npm:5.0.0" +"@metamask/keyring-internal-snap-client@npm:^6.0.0": + version: 6.0.0 + resolution: "@metamask/keyring-internal-snap-client@npm:6.0.0" dependencies: "@metamask/base-controller": "npm:^7.1.1" - "@metamask/keyring-api": "npm:^19.0.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" - "@metamask/keyring-snap-client": "npm:^6.0.0" + "@metamask/keyring-api": "npm:^20.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" + "@metamask/keyring-snap-client": "npm:^7.0.0" "@metamask/keyring-utils": "npm:^3.1.0" - checksum: 10/e61dc8411cda4ffdfaca1366f519b28da65f229703cf71d9cbb2c858d321ba8a54c22b1ddfeb2d8f63af4d17ba9daf4137131f49cfe1f2c78a419e98d46b3014 + checksum: 10/8b358eacba55e6853c6e414387ae03b7bf43ab2b0b082e56e30a2d2c3f4999d05a61d388063d41146512af7e502bbd4aeaffa431ca57d2faa7caa04abf54245e languageName: node linkType: hard -"@metamask/keyring-snap-client@npm:^6.0.0": - version: 6.0.0 - resolution: "@metamask/keyring-snap-client@npm:6.0.0" +"@metamask/keyring-snap-client@npm:^7.0.0": + version: 7.0.0 + resolution: "@metamask/keyring-snap-client@npm:7.0.0" dependencies: - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/superstruct": "npm:^3.1.0" "@types/uuid": "npm:^9.0.8" @@ -3730,7 +3744,7 @@ __metadata: webextension-polyfill: "npm:^0.12.0" peerDependencies: "@metamask/providers": ^19.0.0 - checksum: 10/fe182c602b2a2f349b99426565fbde6bc650d26095162650efdd7bde86ce32047a4dcdad1c8e46b83c5ae01c3e067c6cc24f922d27b388d7c65238fb4de893cf + checksum: 10/c82a46f61dc211eae6b7b36dd4e8d01b3508217b9a1004e92b361a08025ae88162458ddbddf443bb2b7dab1b2c5bfd95060ec80d5411be7c148bd5703e14858e languageName: node linkType: hard @@ -3814,15 +3828,15 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/multichain-account-service@workspace:packages/multichain-account-service" dependencies: - "@metamask/account-api": "npm:^0.7.0" + "@metamask/account-api": "npm:^0.8.0" "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" - "@metamask/eth-snap-keyring": "npm:^14.0.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/eth-snap-keyring": "npm:^16.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" - "@metamask/keyring-snap-client": "npm:^6.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" + "@metamask/keyring-snap-client": "npm:^7.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" @@ -3840,7 +3854,7 @@ __metadata: uuid: "npm:^8.3.2" webextension-polyfill: "npm:^0.12.0" peerDependencies: - "@metamask/account-api": ^0.7.0 + "@metamask/account-api": ^0.8.0 "@metamask/accounts-controller": ^32.0.0 "@metamask/keyring-controller": ^22.0.0 "@metamask/providers": ^22.0.0 @@ -3886,9 +3900,9 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" "@metamask/controller-utils": "npm:^11.11.0" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" "@metamask/network-controller": "npm:^24.0.1" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.4.2" @@ -3918,10 +3932,10 @@ __metadata: "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" - "@metamask/keyring-snap-client": "npm:^6.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" + "@metamask/keyring-snap-client": "npm:^7.0.0" "@metamask/polling-controller": "npm:^14.0.0" "@metamask/snaps-controllers": "npm:^14.0.1" "@metamask/snaps-sdk": "npm:^9.0.0" @@ -4261,9 +4275,9 @@ __metadata: "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" - "@metamask/keyring-api": "npm:^19.0.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-controller": "npm:^22.1.0" - "@metamask/keyring-internal-api": "npm:^7.0.0" + "@metamask/keyring-internal-api": "npm:^8.0.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" "@metamask/snaps-sdk": "npm:^9.0.0" From 46650ee7d47423102207a8a0829d82ed90e89d7e Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 14:33:16 +0200 Subject: [PATCH 02/10] chore: update changelogs --- packages/account-tree-controller/CHANGELOG.md | 2 +- packages/accounts-controller/CHANGELOG.md | 6 ++++++ packages/assets-controllers/CHANGELOG.md | 4 ++++ packages/bridge-controller/CHANGELOG.md | 4 ++++ packages/bridge-status-controller/CHANGELOG.md | 4 ++++ packages/keyring-controller/CHANGELOG.md | 4 ++-- packages/multichain-account-service/CHANGELOG.md | 2 +- packages/multichain-network-controller/CHANGELOG.md | 5 +++++ packages/multichain-transactions-controller/CHANGELOG.md | 6 ++++++ 9 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/account-tree-controller/CHANGELOG.md b/packages/account-tree-controller/CHANGELOG.md index 97da5134a58..5c6969ffa89 100644 --- a/packages/account-tree-controller/CHANGELOG.md +++ b/packages/account-tree-controller/CHANGELOG.md @@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.7.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)) +- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.8.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) - **BREAKING:** Move `wallet.metadata.type` tag to `wallet` node ([#6214](https://github.com/MetaMask/core/pull/6214)) - This `type` can be used as a tag to strongly-type (tagged-union) the `AccountWalletObject`. - Defaults to the EVM account from a group when using `setSelectedAccountGroup` ([#6208](https://github.com/MetaMask/core/pull/6208)) diff --git a/packages/accounts-controller/CHANGELOG.md b/packages/accounts-controller/CHANGELOG.md index f78e0246ee6..24882d7ce6c 100644 --- a/packages/accounts-controller/CHANGELOG.md +++ b/packages/accounts-controller/CHANGELOG.md @@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Stop updating `selectedAccount` unnecesarily ([#6218](https://github.com/MetaMask/core/pull/6218)) +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/keyring-internal-api` from `^7.0.0` to `^8.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/eth-snap-keyring` from `^14.0.0` to `^16.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ## [32.0.1] ### Fixed diff --git a/packages/assets-controllers/CHANGELOG.md b/packages/assets-controllers/CHANGELOG.md index 14175385f10..22cbb66eada 100644 --- a/packages/assets-controllers/CHANGELOG.md +++ b/packages/assets-controllers/CHANGELOG.md @@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Use a narrow selector when listening to `CurrencyRateController:stateChange` ([#6217](https://github.com/MetaMask/core/pull/6217)) - Fixed an issue where attempting to fetch asset conversions for accounts without assets would crash the snap ([#6207](https://github.com/MetaMask/core/pull/6207)) +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ## [73.0.1] ### Changed diff --git a/packages/bridge-controller/CHANGELOG.md b/packages/bridge-controller/CHANGELOG.md index d89e36db5f9..174087bcce4 100644 --- a/packages/bridge-controller/CHANGELOG.md +++ b/packages/bridge-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ## [37.1.0] ### Added diff --git a/packages/bridge-status-controller/CHANGELOG.md b/packages/bridge-status-controller/CHANGELOG.md index d0d793765de..1095a1e12a4 100644 --- a/packages/bridge-status-controller/CHANGELOG.md +++ b/packages/bridge-status-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ### Fixed - Make sure to pass the `requireApproval` for ERC20 approvals ([#6204](https://github.com/MetaMask/core/pull/6204)) diff --git a/packages/keyring-controller/CHANGELOG.md b/packages/keyring-controller/CHANGELOG.md index 91a4489014b..8ac3e2b3c01 100644 --- a/packages/keyring-controller/CHANGELOG.md +++ b/packages/keyring-controller/CHANGELOG.md @@ -9,8 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Bump `@metamask/keyring-api` from `^18.0.0` to `^19.0.0` ([#6146](https://github.com/MetaMask/core/pull/6146)) -- Bump `@metamask/keyring-internal-api` from `^6.2.0` to `^7.0.0` ([#6146](https://github.com/MetaMask/core/pull/6146)) +- Bump `@metamask/keyring-api` from `^18.0.0` to `^20.0.0` ([#6146](https://github.com/MetaMask/core/pull/6146)), ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/keyring-internal-api` from `^6.2.0` to `^8.0.0` ([#6146](https://github.com/MetaMask/core/pull/6146)), ([#6248](https://github.com/MetaMask/core/pull/6248)) - Bump `@metamask/utils` from `^11.2.0` to `^11.4.2` ([#6054](https://github.com/MetaMask/core/pull/6054)) ## [22.1.0] diff --git a/packages/multichain-account-service/CHANGELOG.md b/packages/multichain-account-service/CHANGELOG.md index 9203f8d3d55..b940b41298e 100644 --- a/packages/multichain-account-service/CHANGELOG.md +++ b/packages/multichain-account-service/CHANGELOG.md @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - **BREAKING:** Use `KeyringAccount` instead of `InternalAccount` ([#6227](https://github.com/MetaMask/core/pull/6227)) -- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.7.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)) +- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.8.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) - **BREAKING:** Rename `MultichainAccount` to `MultichainAccountGroup` ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6219](https://github.com/MetaMask/core/pull/6219)) - The naming was confusing and since a `MultichainAccount` is also an `AccountGroup` it makes sense to have the suffix there too. - **BREAKING:** Rename `getMultichainAccount*` to `getMultichainAccountGroup*` ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6219](https://github.com/MetaMask/core/pull/6219)) diff --git a/packages/multichain-network-controller/CHANGELOG.md b/packages/multichain-network-controller/CHANGELOG.md index c2509ab49fd..ec4f88036dd 100644 --- a/packages/multichain-network-controller/CHANGELOG.md +++ b/packages/multichain-network-controller/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/keyring-internal-api` from `^7.0.0` to `^8.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ## [0.11.0] ### Changed diff --git a/packages/multichain-transactions-controller/CHANGELOG.md b/packages/multichain-transactions-controller/CHANGELOG.md index e3d70ef46ba..28a8da419d7 100644 --- a/packages/multichain-transactions-controller/CHANGELOG.md +++ b/packages/multichain-transactions-controller/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/keyring-internal-api` from `^7.0.0` to `^8.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +- Bump `@metamask/keyring-snap-client` from `^6.0.0` to `^7.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ## [4.0.0] ### Changed From 1e96bd2983fbc2b3ed9093a0713e5232bde9841b Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 14:58:55 +0200 Subject: [PATCH 03/10] feat(account-tree-controller): implements get/select --- .../src/AccountTreeController.test.ts | 97 ++++++++++--------- packages/account-tree-controller/src/group.ts | 20 +++- .../src/MultichainAccountGroup.ts | 53 ++-------- 3 files changed, 73 insertions(+), 97 deletions(-) diff --git a/packages/account-tree-controller/src/AccountTreeController.test.ts b/packages/account-tree-controller/src/AccountTreeController.test.ts index 64059aef4de..7bb98cb32db 100644 --- a/packages/account-tree-controller/src/AccountTreeController.test.ts +++ b/packages/account-tree-controller/src/AccountTreeController.test.ts @@ -1128,9 +1128,11 @@ describe('AccountTreeController', () => { }); describe('AccountTreeGroup', () => { - it('gets accounts from an account group', () => { - const { controller } = setup({ - accounts: [MOCK_HD_ACCOUNT_1], + const setupGroup = ({ + accounts = [MOCK_HD_ACCOUNT_1], + }: { accounts?: InternalAccount[] } = {}) => { + const { controller, mocks } = setup({ + accounts, keyrings: [MOCK_HD_KEYRING_1], }); controller.init(); @@ -1143,6 +1145,13 @@ describe('AccountTreeController', () => { expect(groups).toHaveLength(1); const group = groups[0]; + + return { group, controller, mocks }; + }; + + it('gets accounts from an account group', () => { + const { group } = setupGroup(); + expect(group.id).toBeDefined(); expect(group.wallet).toBeDefined(); expect(group.name).toBeDefined(); @@ -1155,16 +1164,7 @@ describe('AccountTreeController', () => { }); it('throws if an account cannot be resolved', () => { - const { controller, mocks } = setup({ - accounts: [MOCK_HD_ACCOUNT_1], - keyrings: [MOCK_HD_KEYRING_1], - }); - controller.init(); - - const wallets = controller.getAccountWallets(); - const wallet = wallets[0]; - const groups = wallet.getAccountGroups(); - const group = groups[0]; + const { group, mocks } = setupGroup(); const accountIds = group.getAccountIds(); expect(accountIds).toHaveLength(1); @@ -1175,45 +1175,46 @@ describe('AccountTreeController', () => { ); }); - it('gets the only account from a group', () => { - const rootMessenger = getRootMessenger(); - const messenger = getAccountTreeControllerMessenger(rootMessenger); + it('gets one account using a selector', () => { + const { group } = setupGroup(); - const account = MOCK_HD_ACCOUNT_1; - const wallet = new AccountTreeWallet({ - messenger, - wallet: { - id: toAccountWalletId(AccountWalletType.Keyring, KeyringTypes.simple), - type: AccountWalletType.Keyring, - groups: {}, - metadata: { - name: '', - keyring: { - type: KeyringTypes.simple, - }, - }, - }, - }); - const group = new AccountTreeGroup({ - messenger, - wallet, - group: { - id: toAccountGroupId(wallet.id, 'bad'), - type: AccountGroupType.SingleAccount, - accounts: [account.id], - metadata: { - name: '', - pinned: false, - hidden: false, - }, - }, + expect(group.get({ scopes: [EthScope.Mainnet] })).toBe(MOCK_HD_ACCOUNT_1); + }); + + it('gets no account if selector did not match', () => { + const { group } = setupGroup(); + + expect(group.get({ scopes: [SolScope.Mainnet] })).toBeUndefined(); + }); + + it('throws if too many accounts are matching selector', () => { + const { group } = setupGroup({ + accounts: [MOCK_HD_ACCOUNT_2, MOCK_HD_ACCOUNT_2], }); - rootMessenger.registerActionHandler( - 'AccountsController:getAccount', - () => account, + expect(() => group.get({ scopes: [EthScope.Mainnet] })).toThrow( + 'Too many account candidates, expected 1, got: 2', ); - expect(group.getOnlyAccount()).toBe(account); + }); + + it('selects accounts using a selector', () => { + const { group } = setupGroup(); + + expect(group.select({ scopes: [EthScope.Mainnet] })).toStrictEqual([ + MOCK_HD_ACCOUNT_1, + ]); + }); + + it('selects no account if selector did not match', () => { + const { group } = setupGroup(); + + expect(group.select({ scopes: [SolScope.Mainnet] })).toStrictEqual([]); + }); + + it('gets the only account from a group', () => { + const { group } = setupGroup({ accounts: [MOCK_HARDWARE_ACCOUNT_1] }); + + expect(group.getOnlyAccount()).toBe(MOCK_HARDWARE_ACCOUNT_1); }); it('throws if the group has more than 1 account when calling getOnlyAccount', () => { diff --git a/packages/account-tree-controller/src/group.ts b/packages/account-tree-controller/src/group.ts index af2e6df3d2f..33946846d90 100644 --- a/packages/account-tree-controller/src/group.ts +++ b/packages/account-tree-controller/src/group.ts @@ -1,8 +1,14 @@ +import { + select, + selectOne, + type AccountGroupType, + type MultichainAccountGroupId, +} from '@metamask/account-api'; import type { - AccountGroupType, - MultichainAccountGroupId, + AccountGroup, + AccountGroupId, + AccountSelector, } from '@metamask/account-api'; -import type { AccountGroup, AccountGroupId } from '@metamask/account-api'; import type { AccountId } from '@metamask/accounts-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; @@ -161,4 +167,12 @@ export class AccountTreeGroup implements AccountGroup { // A group always have at least one account. return this.#getAccount(accountIds[0]); } + + get(selector: AccountSelector): InternalAccount | undefined { + return selectOne(this.getAccounts(), selector); + } + + select(selector: AccountSelector): InternalAccount[] { + return select(this.getAccounts(), selector); + } } diff --git a/packages/multichain-account-service/src/MultichainAccountGroup.ts b/packages/multichain-account-service/src/MultichainAccountGroup.ts index d9f0500a152..a4f52258a08 100644 --- a/packages/multichain-account-service/src/MultichainAccountGroup.ts +++ b/packages/multichain-account-service/src/MultichainAccountGroup.ts @@ -1,4 +1,4 @@ -import { AccountGroupType } from '@metamask/account-api'; +import { AccountGroupType, select, selectOne } from '@metamask/account-api'; import { toMultichainAccountGroupId, type MultichainAccountGroupId, @@ -23,7 +23,7 @@ export class MultichainAccountGroup< readonly #wallet: MultichainAccountWallet; - readonly #index: number; + readonly #groupIndex: number; readonly #providers: AccountProvider[]; @@ -41,7 +41,7 @@ export class MultichainAccountGroup< providers: AccountProvider[]; }) { this.#id = toMultichainAccountGroupId(wallet.id, groupIndex); - this.#index = groupIndex; + this.#groupIndex = groupIndex; this.#wallet = wallet; this.#providers = providers; this.#providerToAccounts = new Map(); @@ -114,8 +114,8 @@ export class MultichainAccountGroup< * * @returns The multichain account group index. */ - get index(): number { - return this.#index; + get groupIndex(): number { + return this.#groupIndex; } /** @@ -177,19 +177,7 @@ export class MultichainAccountGroup< * @throws If multiple accounts match the selector. */ get(selector: AccountSelector): Account | undefined { - const accounts = this.select(selector); - - if (accounts.length > 1) { - throw new Error( - `Too many account candidates, expected 1, got: ${accounts.length}`, - ); - } - - if (accounts.length === 0) { - return undefined; - } - - return accounts[0]; // This is safe, see checks above. + return selectOne(this.getAccounts(), selector); } /** @@ -199,33 +187,6 @@ export class MultichainAccountGroup< * @returns The accounts matching the selector. */ select(selector: AccountSelector): Account[] { - return this.getAccounts().filter((account) => { - let selected = true; - - if (selector.id) { - selected &&= account.id === selector.id; - } - if (selector.address) { - selected &&= account.address === selector.address; - } - if (selector.type) { - selected &&= account.type === selector.type; - } - if (selector.methods !== undefined) { - selected &&= selector.methods.some((method) => - account.methods.includes(method), - ); - } - if (selector.scopes !== undefined) { - selected &&= selector.scopes.some((scope) => { - return ( - // This will cover specific EVM EOA scopes as well. - isScopeEqualToAny(scope, account.scopes) - ); - }); - } - - return selected; - }); + return select(this.getAccounts(), selector); } } From ab4d89dba596c70fdcb866668f68530f11ad87cc Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:17:10 +0200 Subject: [PATCH 04/10] feat(multichain-account-service): use account-api get/select --- .../src/MultichainAccountGroup.test.ts | 255 +++--------------- .../src/MultichainAccountGroup.ts | 3 +- .../src/MultichainAccountService.test.ts | 50 ++-- .../src/MultichainAccountWallet.test.ts | 6 +- .../src/tests/accounts.ts | 16 ++ .../src/tests/providers.ts | 12 +- 6 files changed, 90 insertions(+), 252 deletions(-) diff --git a/packages/multichain-account-service/src/MultichainAccountGroup.test.ts b/packages/multichain-account-service/src/MultichainAccountGroup.test.ts index ebc1ee48ac4..2ae820fdbf0 100644 --- a/packages/multichain-account-service/src/MultichainAccountGroup.test.ts +++ b/packages/multichain-account-service/src/MultichainAccountGroup.test.ts @@ -1,19 +1,11 @@ /* eslint-disable jsdoc/require-jsdoc */ -import type { AccountSelector, Bip44Account } from '@metamask/account-api'; +import type { Bip44Account } from '@metamask/account-api'; import { AccountGroupType, toMultichainAccountGroupId, toMultichainAccountWalletId, } from '@metamask/account-api'; -import { - BtcAccountType, - BtcMethod, - BtcScope, - EthAccountType, - EthMethod, - EthScope, - SolScope, -} from '@metamask/keyring-api'; +import { EthScope, SolScope } from '@metamask/keyring-api'; import type { InternalAccount } from '@metamask/keyring-internal-api'; import { MultichainAccountGroup } from './MultichainAccountGroup'; @@ -82,7 +74,7 @@ describe('MultichainAccount', () => { toMultichainAccountGroupId(expectedWalletId, groupIndex), ); expect(group.type).toBe(AccountGroupType.MultichainAccount); - expect(group.index).toBe(groupIndex); + expect(group.groupIndex).toBe(groupIndex); expect(group.wallet).toStrictEqual(wallet); expect(group.getAccounts()).toHaveLength(expectedAccounts.length); expect(group.getAccounts()).toStrictEqual(expectedAccounts); @@ -92,7 +84,7 @@ describe('MultichainAccount', () => { const groupIndex = 2; const { group } = setup({ groupIndex }); - expect(group.index).toBe(groupIndex); + expect(group.groupIndex).toBe(groupIndex); }); }); @@ -114,227 +106,44 @@ describe('MultichainAccount', () => { }); describe('get', () => { - it.each([ - { - tc: 'using id', - selector: { id: MOCK_WALLET_1_EVM_ACCOUNT.id }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - { - tc: 'using address', - selector: { address: MOCK_WALLET_1_SOL_ACCOUNT.address }, - expected: MOCK_WALLET_1_SOL_ACCOUNT, - }, - { - tc: 'using type', - selector: { type: MOCK_WALLET_1_EVM_ACCOUNT.type }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - { - tc: 'using scope', - selector: { scopes: [SolScope.Mainnet] }, - expected: MOCK_WALLET_1_SOL_ACCOUNT, - }, - { - tc: 'using another scope (but still included in the list of account.scopes)', - selector: { scopes: [SolScope.Testnet] }, - expected: MOCK_WALLET_1_SOL_ACCOUNT, - }, - { - tc: 'using specific EVM chain still matches with EVM EOA scopes', - selector: { scopes: [EthScope.Testnet] }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - { - tc: 'using multiple scopes', - selector: { scopes: [SolScope.Mainnet, SolScope.Testnet] }, - expected: MOCK_WALLET_1_SOL_ACCOUNT, - }, - { - tc: 'using method', - selector: { methods: [EthMethod.SignTransaction] }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - { - tc: 'using another method', - selector: { methods: [EthMethod.PersonalSign] }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - { - tc: 'using multiple methods', - selector: { - methods: [EthMethod.SignTransaction, EthMethod.PersonalSign], - }, - expected: MOCK_WALLET_1_EVM_ACCOUNT, - }, - ] as { - tc: string; - selector: AccountSelector>; - expected: Bip44Account; - }[])( - 'gets internal account from selector: $tc', - async ({ selector, expected }) => { - const { group } = setup(); - - expect(group.get(selector)).toStrictEqual(expected); - }, - ); + it('gets one account using a selector', () => { + const { group } = setup({ accounts: [[MOCK_WALLET_1_EVM_ACCOUNT]] }); - it.each([ - { - tc: 'using non-matching id', - selector: { id: '66da96d7-8f24-4895-82d6-183d740c2da1' }, - }, - { - tc: 'using non-matching address', - selector: { address: 'unknown-address' }, - }, - { - tc: 'using non-matching type', - selector: { type: 'unknown-type' }, - }, - { - tc: 'using non-matching scope', - selector: { - scopes: ['bip122:12a765e31ffd4059bada1e25190f6e98' /* Litecoin */], - }, - }, - { - tc: 'using non-matching method', - selector: { methods: ['eth_unknownMethod'] }, - }, - ] as { - tc: string; - selector: AccountSelector>; - }[])( - 'gets undefined if not matching selector: $tc', - async ({ selector }) => { - const { group } = setup(); + expect(group.get({ scopes: [EthScope.Mainnet] })).toBe( + MOCK_WALLET_1_EVM_ACCOUNT, + ); + }); - expect(group.get(selector)).toBeUndefined(); - }, - ); + it('gets no account if selector did not match', () => { + const { group } = setup({ accounts: [[MOCK_WALLET_1_EVM_ACCOUNT]] }); - it('throws if multiple candidates are found', async () => { - const { group } = setup(); + expect(group.get({ scopes: [SolScope.Mainnet] })).toBeUndefined(); + }); - const selector = { - scopes: [EthScope.Mainnet, SolScope.Mainnet], - }; + it('throws if too many accounts are matching selector', () => { + const { group } = setup({ + accounts: [[MOCK_WALLET_1_EVM_ACCOUNT, MOCK_WALLET_1_EVM_ACCOUNT]], + }); - expect(() => group.get(selector)).toThrow( + expect(() => group.get({ scopes: [EthScope.Mainnet] })).toThrow( 'Too many account candidates, expected 1, got: 2', ); }); }); - it.each([ - { - tc: 'using id', - selector: { id: MOCK_WALLET_1_EVM_ACCOUNT.id }, - expected: [MOCK_WALLET_1_EVM_ACCOUNT], - }, - { - tc: 'using non-matching id', - selector: { id: '66da96d7-8f24-4895-82d6-183d740c2da1' }, - expected: [], - }, - { - tc: 'using address', - selector: { address: MOCK_WALLET_1_SOL_ACCOUNT.address }, - expected: [MOCK_WALLET_1_SOL_ACCOUNT], - }, - { - tc: 'using non-matching address', - selector: { address: 'unknown-address' }, - expected: [], - }, - { - tc: 'using type', - selector: { type: MOCK_WALLET_1_EVM_ACCOUNT.type }, - expected: [MOCK_WALLET_1_EVM_ACCOUNT], - }, - { - tc: 'using non-matching type', - selector: { type: 'unknown-type' }, - expected: [], - }, - { - tc: 'using scope', - selector: { scopes: [SolScope.Mainnet] }, - expected: [MOCK_WALLET_1_SOL_ACCOUNT], - }, - { - tc: 'using another scope (but still included in the list of account.scopes)', - selector: { scopes: [SolScope.Testnet] }, - expected: [MOCK_WALLET_1_SOL_ACCOUNT], - }, - { - tc: 'using specific EVM chain still matches with EVM EOA scopes', - selector: { scopes: [EthScope.Testnet] }, - expected: [MOCK_WALLET_1_EVM_ACCOUNT], - }, - { - tc: 'using multiple scopes', - selector: { scopes: [BtcScope.Mainnet, BtcScope.Testnet] }, - expected: [ - MOCK_WALLET_1_BTC_P2WPKH_ACCOUNT, - MOCK_WALLET_1_BTC_P2TR_ACCOUNT, - ], - }, - { - tc: 'using non-matching scopes', - selector: { - scopes: ['bip122:12a765e31ffd4059bada1e25190f6e98' /* Litecoin */], - }, - expected: [], - }, - { - tc: 'using method', - selector: { methods: [BtcMethod.SendBitcoin] }, - expected: [ - MOCK_WALLET_1_BTC_P2WPKH_ACCOUNT, - MOCK_WALLET_1_BTC_P2TR_ACCOUNT, - ], - }, - { - tc: 'using multiple methods', - selector: { - methods: [EthMethod.SignTransaction, EthMethod.PersonalSign], - }, - expected: [MOCK_WALLET_1_EVM_ACCOUNT], - }, - { - tc: 'using non-matching method', - selector: { methods: ['eth_unknownMethod'] }, - expected: [], - }, - { - tc: 'using multiple selectors', - selector: { - type: EthAccountType.Eoa, - methods: [EthMethod.SignTransaction, EthMethod.PersonalSign], - }, - expected: [MOCK_WALLET_1_EVM_ACCOUNT], - }, - { - tc: 'using non-matching selectors', - selector: { - type: BtcAccountType.P2wpkh, - methods: [EthMethod.SignTransaction, EthMethod.PersonalSign], - }, - expected: [], - }, - ] as { - tc: string; - selector: AccountSelector>; - expected: Bip44Account[]; - }[])( - 'selects internal accounts from selector: $tc', - async ({ selector, expected }) => { + describe('select', () => { + it('selects accounts using a selector', () => { const { group } = setup(); - expect(group.select(selector)).toStrictEqual(expected); - }, - ); + expect(group.select({ scopes: [EthScope.Mainnet] })).toStrictEqual([ + MOCK_WALLET_1_EVM_ACCOUNT, + ]); + }); + + it('selects no account if selector did not match', () => { + const { group } = setup({ accounts: [[MOCK_WALLET_1_EVM_ACCOUNT]] }); + + expect(group.select({ scopes: [SolScope.Mainnet] })).toStrictEqual([]); + }); + }); }); diff --git a/packages/multichain-account-service/src/MultichainAccountGroup.ts b/packages/multichain-account-service/src/MultichainAccountGroup.ts index a4f52258a08..bc238d5b597 100644 --- a/packages/multichain-account-service/src/MultichainAccountGroup.ts +++ b/packages/multichain-account-service/src/MultichainAccountGroup.ts @@ -8,7 +8,6 @@ import type { Bip44Account } from '@metamask/account-api'; import type { AccountSelector } from '@metamask/account-api'; import type { AccountProvider } from '@metamask/account-api'; import { type KeyringAccount } from '@metamask/keyring-api'; -import { isScopeEqualToAny } from '@metamask/keyring-utils'; import type { MultichainAccountWallet } from './MultichainAccountWallet'; @@ -67,7 +66,7 @@ export class MultichainAccountGroup< for (const account of provider.getAccounts()) { if ( account.options.entropy.id === this.wallet.entropySource && - account.options.entropy.groupIndex === this.index + account.options.entropy.groupIndex === this.groupIndex ) { // We only use IDs to always fetch the latest version of accounts. accounts.push(account.id); diff --git a/packages/multichain-account-service/src/MultichainAccountService.test.ts b/packages/multichain-account-service/src/MultichainAccountService.test.ts index 3901ee0b338..cd2681d61cf 100644 --- a/packages/multichain-account-service/src/MultichainAccountService.test.ts +++ b/packages/multichain-account-service/src/MultichainAccountService.test.ts @@ -4,24 +4,26 @@ import type { Messenger } from '@metamask/base-controller'; import type { KeyringAccount } from '@metamask/keyring-api'; import { EthAccountType, SolAccountType } from '@metamask/keyring-api'; import { KeyringTypes, type KeyringObject } from '@metamask/keyring-controller'; -import type { InternalAccount } from '@metamask/keyring-internal-api'; import { MultichainAccountService } from './MultichainAccountService'; import { EvmAccountProvider } from './providers/EvmAccountProvider'; import { SolAccountProvider } from './providers/SolAccountProvider'; import type { MockAccountProvider } from './tests'; import { - getMultichainAccountServiceMessenger, - getRootMessenger, - makeMockAccountProvider, MOCK_HARDWARE_ACCOUNT_1, MOCK_HD_ACCOUNT_1, MOCK_HD_ACCOUNT_2, - MOCK_HD_KEYRING_1, - MOCK_HD_KEYRING_2, MOCK_SNAP_ACCOUNT_1, MOCK_SNAP_ACCOUNT_2, MockAccountBuilder, +} from './tests'; +import { + MOCK_HD_KEYRING_1, + MOCK_HD_KEYRING_2, + getMultichainAccountServiceMessenger, + getRootMessenger, + makeMockAccountProvider, + mockAsInternalAccount, setupAccountProvider, } from './tests'; import type { @@ -61,7 +63,7 @@ type Mocks = { function mockAccountProvider( providerClass: new (messenger: MultichainAccountServiceMessenger) => Provider, mocks: MockAccountProvider, - accounts: InternalAccount[], + accounts: KeyringAccount[], type: KeyringAccount['type'], ) { jest @@ -85,7 +87,7 @@ function setup({ MultichainAccountServiceEvents | AllowedEvents >; keyrings?: KeyringObject[]; - accounts?: InternalAccount[]; + accounts?: KeyringAccount[]; } = {}): { service: MultichainAccountService; messenger: Messenger< @@ -258,7 +260,7 @@ describe('MultichainAccountService', () => { entropySource: MOCK_HD_KEYRING_1.metadata.id, groupIndex, }); - expect(group.index).toBe(groupIndex); + expect(group.groupIndex).toBe(groupIndex); const internalAccounts = group.getAccounts(); expect(internalAccounts).toHaveLength(1); @@ -367,7 +369,10 @@ describe('MultichainAccountService', () => { // Now we're adding `account2`. mocks.EvmAccountProvider.accounts = [account1, account2]; - messenger.publish('AccountsController:accountAdded', account2); + messenger.publish( + 'AccountsController:accountAdded', + mockAsInternalAccount(account2), + ); expect(wallet1.getMultichainAccountGroups()).toHaveLength(2); const [multichainAccount1, multichainAccount2] = @@ -404,7 +409,10 @@ describe('MultichainAccountService', () => { // Now we're adding `account2`. mocks.EvmAccountProvider.accounts = [account1, otherAccount1]; - messenger.publish('AccountsController:accountAdded', otherAccount1); + messenger.publish( + 'AccountsController:accountAdded', + mockAsInternalAccount(otherAccount1), + ); // Still 1, that's the same multichain account, but a new "blockchain // account" got added. expect(wallet1.getMultichainAccountGroups()).toHaveLength(1); @@ -447,7 +455,10 @@ describe('MultichainAccountService', () => { // Now we're adding `account3`. mocks.KeyringController.keyrings = [keyring1, keyring2]; mocks.EvmAccountProvider.accounts = [account1, account2, account3]; - messenger.publish('AccountsController:accountAdded', account3); + messenger.publish( + 'AccountsController:accountAdded', + mockAsInternalAccount(account3), + ); const wallet2 = service.getMultichainAccountWallet({ entropySource: entropy2, }); @@ -478,7 +489,10 @@ describe('MultichainAccountService', () => { expect(oldMultichainAccounts[0].getAccounts()).toHaveLength(1); // Now we're publishing a new account that is not BIP-44 compatible. - messenger.publish('AccountsController:accountAdded', MOCK_SNAP_ACCOUNT_2); + messenger.publish( + 'AccountsController:accountAdded', + mockAsInternalAccount(MOCK_SNAP_ACCOUNT_2), + ); const newMultichainAccounts = wallet1.getMultichainAccountGroups(); expect(newMultichainAccounts).toHaveLength(1); @@ -519,7 +533,7 @@ describe('MultichainAccountService', () => { const nextGroup = await service.createNextMultichainAccountGroup({ entropySource: MOCK_HD_KEYRING_1.metadata.id, }); - expect(nextGroup.index).toBe(1); + expect(nextGroup.groupIndex).toBe(1); // NOTE: There won't be any account for this group, since we're not // mocking the providers. }); @@ -550,11 +564,11 @@ describe('MultichainAccountService', () => { groupIndex: 1, }); - expect(firstGroup.index).toBe(0); + expect(firstGroup.groupIndex).toBe(0); expect(firstGroup.getAccounts()).toHaveLength(1); expect(firstGroup.getAccounts()[0]).toStrictEqual(mockEvmAccount); - expect(secondGroup.index).toBe(1); + expect(secondGroup.groupIndex).toBe(1); expect(secondGroup.getAccounts()).toHaveLength(1); expect(secondGroup.getAccounts()[0]).toStrictEqual(mockSolAccount); }); @@ -612,7 +626,7 @@ describe('MultichainAccountService', () => { 'MultichainAccountService:createNextMultichainAccountGroup', { entropySource: MOCK_HD_KEYRING_1.metadata.id }, ); - expect(nextGroup.index).toBe(1); + expect(nextGroup.groupIndex).toBe(1); // NOTE: There won't be any account for this group, since we're not // mocking the providers. }); @@ -629,7 +643,7 @@ describe('MultichainAccountService', () => { }, ); - expect(firstGroup.index).toBe(0); + expect(firstGroup.groupIndex).toBe(0); expect(firstGroup.getAccounts()).toHaveLength(1); expect(firstGroup.getAccounts()[0]).toStrictEqual(MOCK_HD_ACCOUNT_1); }); diff --git a/packages/multichain-account-service/src/MultichainAccountWallet.test.ts b/packages/multichain-account-service/src/MultichainAccountWallet.test.ts index eb9921c2117..3c832e5467f 100644 --- a/packages/multichain-account-service/src/MultichainAccountWallet.test.ts +++ b/packages/multichain-account-service/src/MultichainAccountWallet.test.ts @@ -86,7 +86,7 @@ describe('MultichainAccountWallet', () => { const multichainAccountGroup = wallet.getMultichainAccountGroup(groupIndex); expect(multichainAccountGroup).toBeDefined(); - expect(multichainAccountGroup?.index).toBe(groupIndex); + expect(multichainAccountGroup?.groupIndex).toBe(groupIndex); // We can still get a multichain account group as a "basic" account group too. const group = wallet.getAccountGroup( @@ -238,7 +238,7 @@ describe('MultichainAccountWallet', () => { const specificGroup = await wallet.createMultichainAccountGroup(groupIndex); - expect(specificGroup.index).toBe(groupIndex); + expect(specificGroup.groupIndex).toBe(groupIndex); const internalAccounts = specificGroup.getAccounts(); expect(internalAccounts).toHaveLength(1); @@ -338,7 +338,7 @@ describe('MultichainAccountWallet', () => { } const nextGroup = await wallet.createNextMultichainAccountGroup(); - expect(nextGroup.index).toBe(1); + expect(nextGroup.groupIndex).toBe(1); const internalAccounts = nextGroup.getAccounts(); expect(internalAccounts).toHaveLength(2); // EVM + SOL. diff --git a/packages/multichain-account-service/src/tests/accounts.ts b/packages/multichain-account-service/src/tests/accounts.ts index e4e7ee57930..25f57828632 100644 --- a/packages/multichain-account-service/src/tests/accounts.ts +++ b/packages/multichain-account-service/src/tests/accounts.ts @@ -1,3 +1,4 @@ +/* eslint-disable jsdoc/require-jsdoc */ import type { Bip44Account } from '@metamask/account-api'; import { isBip44Account } from '@metamask/account-api'; import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api'; @@ -299,3 +300,18 @@ export const MOCK_WALLET_1_BTC_P2TR_ACCOUNT = MockAccountBuilder.from( .withEntropySource(MOCK_WALLET_1_ENTROPY_SOURCE) .withGroupIndex(0) .get(); + +export function mockAsInternalAccount( + account: KeyringAccount, +): InternalAccount { + return { + ...account, + metadata: { + name: 'Mocked Account', + importTime: Date.now(), + keyring: { + type: 'mock-keyring-type', + }, + }, + }; +} diff --git a/packages/multichain-account-service/src/tests/providers.ts b/packages/multichain-account-service/src/tests/providers.ts index 6ab9e845678..4701b8e331c 100644 --- a/packages/multichain-account-service/src/tests/providers.ts +++ b/packages/multichain-account-service/src/tests/providers.ts @@ -2,10 +2,10 @@ import type { Bip44Account } from '@metamask/account-api'; import { isBip44Account } from '@metamask/account-api'; -import type { InternalAccount } from '@metamask/keyring-internal-api'; +import type { KeyringAccount } from '@metamask/keyring-api'; export type MockAccountProvider = { - accounts: InternalAccount[]; + accounts: KeyringAccount[]; getAccount: jest.Mock; getAccounts: jest.Mock; createAccounts: jest.Mock; @@ -13,7 +13,7 @@ export type MockAccountProvider = { }; export function makeMockAccountProvider( - accounts: InternalAccount[] = [], + accounts: KeyringAccount[] = [], ): MockAccountProvider { return { accounts, @@ -30,8 +30,8 @@ export function setupAccountProvider({ filter = () => true, }: { mocks?: MockAccountProvider; - accounts: InternalAccount[]; - filter?: (account: InternalAccount) => boolean; + accounts: KeyringAccount[]; + filter?: (account: KeyringAccount) => boolean; }): MockAccountProvider { // You can mock this and all other mocks will re-use that list // of accounts. @@ -44,7 +44,7 @@ export function setupAccountProvider({ mocks.getAccounts.mockImplementation(getAccounts); mocks.getAccount.mockImplementation( - (id: Bip44Account['id']) => + (id: Bip44Account['id']) => // Assuming this never fails. getAccounts().find((account) => account.id === id), ); From 98a5790590dc1a590dea237eee370fe9f73b9e4b Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:32:43 +0200 Subject: [PATCH 05/10] chore: fix changelog --- packages/accounts-controller/CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/accounts-controller/CHANGELOG.md b/packages/accounts-controller/CHANGELOG.md index 24882d7ce6c..d71c7a651fb 100644 --- a/packages/accounts-controller/CHANGELOG.md +++ b/packages/accounts-controller/CHANGELOG.md @@ -7,16 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Fixed - -- Stop updating `selectedAccount` unnecesarily ([#6218](https://github.com/MetaMask/core/pull/6218)) - ### Changed - Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) - Bump `@metamask/keyring-internal-api` from `^7.0.0` to `^8.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) - Bump `@metamask/eth-snap-keyring` from `^14.0.0` to `^16.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) +### Fixed + +- Stop updating `selectedAccount` unnecesarily ([#6218](https://github.com/MetaMask/core/pull/6218)) + ## [32.0.1] ### Fixed From a2b6d1dfbec61a55e052027d135333e74a0b0f7c Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:35:27 +0200 Subject: [PATCH 06/10] chore: fix changelog --- packages/assets-controllers/CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/assets-controllers/CHANGELOG.md b/packages/assets-controllers/CHANGELOG.md index 22cbb66eada..b9c3523797b 100644 --- a/packages/assets-controllers/CHANGELOG.md +++ b/packages/assets-controllers/CHANGELOG.md @@ -7,15 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) + ### Fixed - Use a narrow selector when listening to `CurrencyRateController:stateChange` ([#6217](https://github.com/MetaMask/core/pull/6217)) - Fixed an issue where attempting to fetch asset conversions for accounts without assets would crash the snap ([#6207](https://github.com/MetaMask/core/pull/6207)) -### Changed - -- Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) - ## [73.0.1] ### Changed From 15f1d754dc540bc507d1839847dc4bc4a2f156d5 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:47:44 +0200 Subject: [PATCH 07/10] chore: use account-api 0.9.0 --- packages/account-tree-controller/package.json | 4 +-- .../multichain-account-service/package.json | 4 +-- yarn.lock | 30 ++++++------------- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/packages/account-tree-controller/package.json b/packages/account-tree-controller/package.json index b1d514aca45..84469b8f8a7 100644 --- a/packages/account-tree-controller/package.json +++ b/packages/account-tree-controller/package.json @@ -53,7 +53,7 @@ "lodash": "^4.17.21" }, "devDependencies": { - "@metamask/account-api": "^0.8.0", + "@metamask/account-api": "^0.9.0", "@metamask/accounts-controller": "^32.0.1", "@metamask/auto-changelog": "^3.4.4", "@metamask/keyring-api": "^20.0.0", @@ -70,7 +70,7 @@ "webextension-polyfill": "^0.12.0" }, "peerDependencies": { - "@metamask/account-api": "^0.8.0", + "@metamask/account-api": "^0.9.0", "@metamask/accounts-controller": "^32.0.0", "@metamask/keyring-controller": "^22.0.0", "@metamask/providers": "^22.0.0", diff --git a/packages/multichain-account-service/package.json b/packages/multichain-account-service/package.json index f34079790a5..4e624806ef0 100644 --- a/packages/multichain-account-service/package.json +++ b/packages/multichain-account-service/package.json @@ -58,7 +58,7 @@ "@metamask/superstruct": "^3.1.0" }, "devDependencies": { - "@metamask/account-api": "^0.8.0", + "@metamask/account-api": "^0.9.0", "@metamask/accounts-controller": "^32.0.1", "@metamask/auto-changelog": "^3.4.4", "@metamask/keyring-controller": "^22.1.0", @@ -76,7 +76,7 @@ "webextension-polyfill": "^0.12.0" }, "peerDependencies": { - "@metamask/account-api": "^0.8.0", + "@metamask/account-api": "^0.9.0", "@metamask/accounts-controller": "^32.0.0", "@metamask/keyring-controller": "^22.0.0", "@metamask/providers": "^22.0.0", diff --git a/yarn.lock b/yarn.lock index 2115ae4e43f..87798eed74b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2443,15 +2443,15 @@ __metadata: languageName: node linkType: hard -"@metamask/account-api@npm:^0.8.0": - version: 0.8.0 - resolution: "@metamask/account-api@npm:0.8.0" +"@metamask/account-api@npm:^0.9.0": + version: 0.9.0 + resolution: "@metamask/account-api@npm:0.9.0" dependencies: - "@metamask/keyring-api": "npm:^19.1.0" + "@metamask/keyring-api": "npm:^20.0.0" "@metamask/keyring-utils": "npm:^3.1.0" "@metamask/superstruct": "npm:^3.1.0" uuid: "npm:^9.0.1" - checksum: 10/e32147a91fec3931ccab43f07f23d8bdf38985da95ac03a67500b00a76d0d2a17ac9d4b0d75ae313e90e6b29edb6819b864a9b143b3577c1b5d36549b3216704 + checksum: 10/17c5c78a0849ec2b1bae717d5227b7f3498903034bc41e93eb28513704f418b1e365a3a2ebd05d4a8a24c3912ab4abf2c6c0a3c55342ed0a9a40432b3aab0b34 languageName: node linkType: hard @@ -2459,7 +2459,7 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/account-tree-controller@workspace:packages/account-tree-controller" dependencies: - "@metamask/account-api": "npm:^0.8.0" + "@metamask/account-api": "npm:^0.9.0" "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" @@ -2479,7 +2479,7 @@ __metadata: typescript: "npm:~5.2.2" webextension-polyfill: "npm:^0.12.0" peerDependencies: - "@metamask/account-api": ^0.8.0 + "@metamask/account-api": ^0.9.0 "@metamask/accounts-controller": ^32.0.0 "@metamask/keyring-controller": ^22.0.0 "@metamask/providers": ^22.0.0 @@ -3644,18 +3644,6 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-api@npm:^19.1.0": - version: 19.1.0 - resolution: "@metamask/keyring-api@npm:19.1.0" - dependencies: - "@metamask/keyring-utils": "npm:^3.1.0" - "@metamask/superstruct": "npm:^3.1.0" - "@metamask/utils": "npm:^11.1.0" - bitcoin-address-validation: "npm:^2.2.3" - checksum: 10/2db4e6e1c0d7c6299b1bb74a5bef6a4b66111556b069dcf23d3dd9a328024da2c0b14ac350d606bc09cb677eb235a43f4a841d5cce850daba2526b4a44b00b3b - languageName: node - linkType: hard - "@metamask/keyring-api@npm:^20.0.0": version: 20.0.0 resolution: "@metamask/keyring-api@npm:20.0.0" @@ -3828,7 +3816,7 @@ __metadata: version: 0.0.0-use.local resolution: "@metamask/multichain-account-service@workspace:packages/multichain-account-service" dependencies: - "@metamask/account-api": "npm:^0.8.0" + "@metamask/account-api": "npm:^0.9.0" "@metamask/accounts-controller": "npm:^32.0.1" "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.0.1" @@ -3854,7 +3842,7 @@ __metadata: uuid: "npm:^8.3.2" webextension-polyfill: "npm:^0.12.0" peerDependencies: - "@metamask/account-api": ^0.8.0 + "@metamask/account-api": ^0.9.0 "@metamask/accounts-controller": ^32.0.0 "@metamask/keyring-controller": ^22.0.0 "@metamask/providers": ^22.0.0 From d429a3e19b511ac34916993089000f33b86f6fab Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:51:26 +0200 Subject: [PATCH 08/10] chore: update changelogs --- packages/account-tree-controller/CHANGELOG.md | 2 +- packages/multichain-account-service/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/account-tree-controller/CHANGELOG.md b/packages/account-tree-controller/CHANGELOG.md index 5c6969ffa89..d1014654533 100644 --- a/packages/account-tree-controller/CHANGELOG.md +++ b/packages/account-tree-controller/CHANGELOG.md @@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.8.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) +- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.9.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) - **BREAKING:** Move `wallet.metadata.type` tag to `wallet` node ([#6214](https://github.com/MetaMask/core/pull/6214)) - This `type` can be used as a tag to strongly-type (tagged-union) the `AccountWalletObject`. - Defaults to the EVM account from a group when using `setSelectedAccountGroup` ([#6208](https://github.com/MetaMask/core/pull/6208)) diff --git a/packages/multichain-account-service/CHANGELOG.md b/packages/multichain-account-service/CHANGELOG.md index b940b41298e..6f292c1eeb9 100644 --- a/packages/multichain-account-service/CHANGELOG.md +++ b/packages/multichain-account-service/CHANGELOG.md @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - **BREAKING:** Use `KeyringAccount` instead of `InternalAccount` ([#6227](https://github.com/MetaMask/core/pull/6227)) -- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.8.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) +- **BREAKING:** Bump peer dependency `@metamask/account-api` from `^0.3.0` to `^0.9.0` ([#6214](https://github.com/MetaMask/core/pull/6214)), ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6222](https://github.com/MetaMask/core/pull/6222)), ([#6248](https://github.com/MetaMask/core/pull/6248)) - **BREAKING:** Rename `MultichainAccount` to `MultichainAccountGroup` ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6219](https://github.com/MetaMask/core/pull/6219)) - The naming was confusing and since a `MultichainAccount` is also an `AccountGroup` it makes sense to have the suffix there too. - **BREAKING:** Rename `getMultichainAccount*` to `getMultichainAccountGroup*` ([#6216](https://github.com/MetaMask/core/pull/6216)), ([#6219](https://github.com/MetaMask/core/pull/6219)) From 7548c05b219edb27d28159c6eb6ee2907e085f09 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 15:54:27 +0200 Subject: [PATCH 09/10] chore: update changelog --- packages/account-tree-controller/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/account-tree-controller/CHANGELOG.md b/packages/account-tree-controller/CHANGELOG.md index d1014654533..d9772a045db 100644 --- a/packages/account-tree-controller/CHANGELOG.md +++ b/packages/account-tree-controller/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Add `AccountTreeGroup.{get,select}` selectors ([#6248](https://github.com/MetaMask/core/pull/6248)) - Add persistence support for user customizations ([#6221](https://github.com/MetaMask/core/pull/6221)) - New `accountGroupsMetadata` (of new type `AccountTreeGroupPersistedMetadata`) and `accountWalletsMetadata` (of new type `AccountTreeWalletPersistedMetadata`) state properties to persist custom names, pinning, and hiding states. - Custom names and metadata survive controller initialization and tree rebuilds. From b247abedbc97c71ebeb45c886d49c3b185b944a7 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Wed, 6 Aug 2025 17:42:58 +0200 Subject: [PATCH 10/10] chore: fix changelog --- packages/assets-controllers/CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/assets-controllers/CHANGELOG.md b/packages/assets-controllers/CHANGELOG.md index df90a713c00..b9c3523797b 100644 --- a/packages/assets-controllers/CHANGELOG.md +++ b/packages/assets-controllers/CHANGELOG.md @@ -11,8 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bump `@metamask/keyring-api` from `^19.0.0` to `^20.0.0` ([#6248](https://github.com/MetaMask/core/pull/6248)) -## [73.0.2] - ### Fixed - Use a narrow selector when listening to `CurrencyRateController:stateChange` ([#6217](https://github.com/MetaMask/core/pull/6217))