From 50802a2c04dc47c8739e131d7e6475f9218045b7 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Tue, 11 Feb 2025 16:58:10 +0100 Subject: [PATCH 01/27] fix: bump assets-controllers to v49 --- package.json | 2 +- yarn.lock | 87 ++++++++++++++++++++-------------------------------- 2 files changed, 35 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 4b76ed907840..a3e5dbccd6c6 100644 --- a/package.json +++ b/package.json @@ -294,7 +294,7 @@ "@metamask/address-book-controller": "^6.0.0", "@metamask/announcement-controller": "^7.0.0", "@metamask/approval-controller": "^7.0.0", - "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A48.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch", + "@metamask/assets-controllers": "^49.0.0", "@metamask/base-controller": "^7.0.0", "@metamask/bitcoin-wallet-snap": "^0.9.0", "@metamask/browser-passworder": "^4.3.0", diff --git a/yarn.lock b/yarn.lock index cd69e32a191a..25dbdbcdc2ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4893,9 +4893,9 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:48.0.0": - version: 48.0.0 - resolution: "@metamask/assets-controllers@npm:48.0.0" +"@metamask/assets-controllers@npm:^49.0.0": + version: 49.0.0 + resolution: "@metamask/assets-controllers@npm:49.0.0" dependencies: "@ethereumjs/util": "npm:^8.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -4904,58 +4904,13 @@ __metadata: "@ethersproject/contracts": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.0" "@metamask/abi-utils": "npm:^2.0.3" - "@metamask/base-controller": "npm:^7.1.1" - "@metamask/contract-metadata": "npm:^2.4.0" - "@metamask/controller-utils": "npm:^11.5.0" - "@metamask/eth-query": "npm:^4.0.0" - "@metamask/keyring-api": "npm:^17.0.0" - "@metamask/metamask-eth-abis": "npm:^3.1.1" - "@metamask/polling-controller": "npm:^12.0.2" - "@metamask/rpc-errors": "npm:^7.0.2" - "@metamask/snaps-utils": "npm:^8.10.0" - "@metamask/utils": "npm:^11.1.0" - "@types/bn.js": "npm:^5.1.5" - "@types/uuid": "npm:^8.3.0" - async-mutex: "npm:^0.5.0" - bitcoin-address-validation: "npm:^2.2.3" - bn.js: "npm:^5.2.1" - immer: "npm:^9.0.6" - lodash: "npm:^4.17.21" - multiformats: "npm:^13.1.0" - single-call-balance-checker-abi: "npm:^1.0.0" - uuid: "npm:^8.3.2" - peerDependencies: - "@metamask/accounts-controller": ^23.0.0 - "@metamask/approval-controller": ^7.0.0 - "@metamask/keyring-controller": ^19.0.0 - "@metamask/network-controller": ^22.0.0 - "@metamask/permission-controller": ^11.0.0 - "@metamask/preferences-controller": ^15.0.0 - "@metamask/providers": ^18.1.0 - "@metamask/snaps-controllers": ^9.19.0 - webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/0f634135b347044a67c1524fa8b8602cd0bb3b29fcdecca602ade6305b368b584b91d821a101cef323252f7a4df59ebd5366c2dcc993d6d707ebac3fa43bd0c5 - languageName: node - linkType: hard - -"@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A48.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch": - version: 48.0.0 - resolution: "@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A48.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch::version=48.0.0&hash=7473ef" - dependencies: - "@ethereumjs/util": "npm:^8.1.0" - "@ethersproject/abi": "npm:^5.7.0" - "@ethersproject/address": "npm:^5.7.0" - "@ethersproject/bignumber": "npm:^5.7.0" - "@ethersproject/contracts": "npm:^5.7.0" - "@ethersproject/providers": "npm:^5.7.0" - "@metamask/abi-utils": "npm:^2.0.3" - "@metamask/base-controller": "npm:^7.1.1" + "@metamask/base-controller": "npm:^8.0.0" "@metamask/contract-metadata": "npm:^2.4.0" "@metamask/controller-utils": "npm:^11.5.0" "@metamask/eth-query": "npm:^4.0.0" "@metamask/keyring-api": "npm:^17.0.0" "@metamask/metamask-eth-abis": "npm:^3.1.1" - "@metamask/polling-controller": "npm:^12.0.2" + "@metamask/polling-controller": "npm:^12.0.3" "@metamask/rpc-errors": "npm:^7.0.2" "@metamask/snaps-utils": "npm:^8.10.0" "@metamask/utils": "npm:^11.1.0" @@ -4970,7 +4925,7 @@ __metadata: single-call-balance-checker-abi: "npm:^1.0.0" uuid: "npm:^8.3.2" peerDependencies: - "@metamask/accounts-controller": ^23.0.0 + "@metamask/accounts-controller": ^23.0.1 "@metamask/approval-controller": ^7.0.0 "@metamask/keyring-controller": ^19.0.0 "@metamask/network-controller": ^22.0.0 @@ -4979,7 +4934,7 @@ __metadata: "@metamask/providers": ^18.1.0 "@metamask/snaps-controllers": ^9.19.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/89099dcf529eb5d32c4c2c1f17a8b9a5d0089d643695d140877b1888f62e454869815ae29535ce14624abff91564b125881c24e2a597f524bc75b1ce2ea70121 + checksum: 10/c94089dcae780527396a4ff5126dab40efe13c9fda6c7fa8967aa39919eb63ae53e9bd1eb5a1da39dc5b4bda952975958ab8cdb73a71c3cce205e281ee5a1bc6 languageName: node linkType: hard @@ -5017,6 +4972,16 @@ __metadata: languageName: node linkType: hard +"@metamask/base-controller@npm:^8.0.0": + version: 8.0.0 + resolution: "@metamask/base-controller@npm:8.0.0" + dependencies: + "@metamask/utils": "npm:^11.1.0" + immer: "npm:^9.0.6" + checksum: 10/10d55f4af8962581d11a45d0fa3241c47c6dcede307ea0c119844b5e8bf417be4ec7a805d0a18a36ab125b201ec1478ea387f0e72928268a84b6a2aad39e07ef + languageName: node + linkType: hard + "@metamask/bitcoin-wallet-snap@npm:^0.9.0": version: 0.9.0 resolution: "@metamask/bitcoin-wallet-snap@npm:0.9.0" @@ -5982,6 +5947,22 @@ __metadata: languageName: node linkType: hard +"@metamask/polling-controller@npm:^12.0.3": + version: 12.0.3 + resolution: "@metamask/polling-controller@npm:12.0.3" + dependencies: + "@metamask/base-controller": "npm:^8.0.0" + "@metamask/controller-utils": "npm:^11.5.0" + "@metamask/utils": "npm:^11.1.0" + "@types/uuid": "npm:^8.3.0" + fast-json-stable-stringify: "npm:^2.1.0" + uuid: "npm:^8.3.2" + peerDependencies: + "@metamask/network-controller": ^22.0.0 + checksum: 10/4eb410beaa6f8ff2e089f9aa9eee9ad730d70a596c839df2f4c1aa873466722f4dc95e9cf1c68c055d89c7222d4476241c1d1c45d9b2583ac245cd8fa08144ab + languageName: node + linkType: hard + "@metamask/post-message-stream@npm:^8.0.0": version: 8.1.1 resolution: "@metamask/post-message-stream@npm:8.1.1" @@ -26642,7 +26623,7 @@ __metadata: "@metamask/announcement-controller": "npm:^7.0.0" "@metamask/api-specs": "npm:^0.9.3" "@metamask/approval-controller": "npm:^7.0.0" - "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A48.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch" + "@metamask/assets-controllers": "npm:^49.0.0" "@metamask/auto-changelog": "npm:^2.1.0" "@metamask/base-controller": "npm:^7.0.0" "@metamask/bitcoin-wallet-snap": "npm:^0.9.0" From b1463f9772804250c1cd5f665a6952fff6203328 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Tue, 11 Feb 2025 16:32:10 +0000 Subject: [PATCH 02/27] Update LavaMoat policies --- lavamoat/browserify/beta/policy.json | 27 +++++++++++++++++++++++---- lavamoat/browserify/flask/policy.json | 27 +++++++++++++++++++++++---- lavamoat/browserify/main/policy.json | 27 +++++++++++++++++++++++---- lavamoat/browserify/mmi/policy.json | 27 +++++++++++++++++++++++---- 4 files changed, 92 insertions(+), 16 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 4f4d99da592e..08394b6fb3da 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -900,6 +900,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, + "__import__": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -914,22 +915,20 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/base-controller": true, + "@metamask/assets-controllers>@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, "@metamask/name-controller>async-mutex": true, - "bitcoin-address-validation": true, "bn.js": true, "lodash": true, - "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -950,6 +949,14 @@ "immer": true } }, + "@metamask/assets-controllers>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/name-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1600,6 +1607,18 @@ "uuid": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/post-message-stream": { "globals": { "MessageEvent.prototype": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index c5f32896b0e6..6171a82fe6fe 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -900,6 +900,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, + "__import__": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -914,22 +915,20 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/base-controller": true, + "@metamask/assets-controllers>@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, "@metamask/name-controller>async-mutex": true, - "bitcoin-address-validation": true, "bn.js": true, "lodash": true, - "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -950,6 +949,14 @@ "immer": true } }, + "@metamask/assets-controllers>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/name-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1628,6 +1635,18 @@ "uuid": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/post-message-stream": { "globals": { "MessageEvent.prototype": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 4f4d99da592e..08394b6fb3da 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -900,6 +900,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, + "__import__": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -914,22 +915,20 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/base-controller": true, + "@metamask/assets-controllers>@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, "@metamask/name-controller>async-mutex": true, - "bitcoin-address-validation": true, "bn.js": true, "lodash": true, - "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -950,6 +949,14 @@ "immer": true } }, + "@metamask/assets-controllers>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/name-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1600,6 +1607,18 @@ "uuid": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/post-message-stream": { "globals": { "MessageEvent.prototype": true, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index e7172f8f6dee..b448d4693fd7 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -992,6 +992,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, + "__import__": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -1006,22 +1007,20 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/base-controller": true, + "@metamask/assets-controllers>@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/polling-controller": true, + "@metamask/assets-controllers>@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, "@metamask/name-controller>async-mutex": true, - "bitcoin-address-validation": true, "bn.js": true, "lodash": true, - "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -1042,6 +1041,14 @@ "immer": true } }, + "@metamask/assets-controllers>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/name-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1692,6 +1699,18 @@ "uuid": true } }, + "@metamask/assets-controllers>@metamask/polling-controller": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/snaps-utils>fast-json-stable-stringify": true, + "uuid": true + } + }, "@metamask/post-message-stream": { "globals": { "MessageEvent.prototype": true, From fb857aed5ec413073d9dcd32c24b839825f68dd0 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Tue, 11 Feb 2025 17:43:58 +0100 Subject: [PATCH 03/27] fix: dedupe --- yarn.lock | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/yarn.lock b/yarn.lock index 25dbdbcdc2ec..f1b6db857f43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5931,23 +5931,7 @@ __metadata: languageName: node linkType: hard -"@metamask/polling-controller@npm:^12.0.0, @metamask/polling-controller@npm:^12.0.1, @metamask/polling-controller@npm:^12.0.2": - version: 12.0.2 - resolution: "@metamask/polling-controller@npm:12.0.2" - dependencies: - "@metamask/base-controller": "npm:^7.0.2" - "@metamask/controller-utils": "npm:^11.4.4" - "@metamask/utils": "npm:^10.0.0" - "@types/uuid": "npm:^8.3.0" - fast-json-stable-stringify: "npm:^2.1.0" - uuid: "npm:^8.3.2" - peerDependencies: - "@metamask/network-controller": ^22.0.0 - checksum: 10/15bb6c087b506e15474d4d3555a37a540389c47674ac14052f7877bbf2be29e3bf78f2ea34a10d1ed21696bc0f45525cb2916e020a1b87e74ad695cb98ae4a94 - languageName: node - linkType: hard - -"@metamask/polling-controller@npm:^12.0.3": +"@metamask/polling-controller@npm:^12.0.0, @metamask/polling-controller@npm:^12.0.1, @metamask/polling-controller@npm:^12.0.2, @metamask/polling-controller@npm:^12.0.3": version: 12.0.3 resolution: "@metamask/polling-controller@npm:12.0.3" dependencies: From 4a453d1f86ad387e0f75b0330bf1f19f7fe8bee8 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Tue, 11 Feb 2025 17:20:23 +0000 Subject: [PATCH 04/27] Update LavaMoat policies --- lavamoat/browserify/beta/policy.json | 24 ++++++++++-------------- lavamoat/browserify/flask/policy.json | 24 ++++++++++-------------- lavamoat/browserify/main/policy.json | 24 ++++++++++-------------- lavamoat/browserify/mmi/policy.json | 24 ++++++++++-------------- 4 files changed, 40 insertions(+), 56 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 08394b6fb3da..ec6d1a5ccca6 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -922,7 +922,7 @@ "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/assets-controllers>@metamask/polling-controller": true, + "@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, @@ -965,6 +965,14 @@ "immer": true } }, + "@metamask/polling-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1602,19 +1610,7 @@ "setTimeout": true }, "packages": { - "@metamask/base-controller": true, - "@metamask/snaps-utils>fast-json-stable-stringify": true, - "uuid": true - } - }, - "@metamask/assets-controllers>@metamask/polling-controller": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/polling-controller>@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 6171a82fe6fe..e62bd7cd19f8 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -922,7 +922,7 @@ "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/assets-controllers>@metamask/polling-controller": true, + "@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, @@ -965,6 +965,14 @@ "immer": true } }, + "@metamask/polling-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1630,19 +1638,7 @@ "setTimeout": true }, "packages": { - "@metamask/base-controller": true, - "@metamask/snaps-utils>fast-json-stable-stringify": true, - "uuid": true - } - }, - "@metamask/assets-controllers>@metamask/polling-controller": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/polling-controller>@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 08394b6fb3da..ec6d1a5ccca6 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -922,7 +922,7 @@ "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/assets-controllers>@metamask/polling-controller": true, + "@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, @@ -965,6 +965,14 @@ "immer": true } }, + "@metamask/polling-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1602,19 +1610,7 @@ "setTimeout": true }, "packages": { - "@metamask/base-controller": true, - "@metamask/snaps-utils>fast-json-stable-stringify": true, - "uuid": true - } - }, - "@metamask/assets-controllers>@metamask/polling-controller": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/polling-controller>@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index b448d4693fd7..bfd7a58fec25 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -1014,7 +1014,7 @@ "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/assets-controllers>@metamask/polling-controller": true, + "@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, @@ -1057,6 +1057,14 @@ "immer": true } }, + "@metamask/polling-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1694,19 +1702,7 @@ "setTimeout": true }, "packages": { - "@metamask/base-controller": true, - "@metamask/snaps-utils>fast-json-stable-stringify": true, - "uuid": true - } - }, - "@metamask/assets-controllers>@metamask/polling-controller": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/polling-controller>@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } From db6784711bbf53066be4862437d07dacb41f5a7c Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Wed, 12 Feb 2025 14:46:58 +0100 Subject: [PATCH 05/27] fix: bump assets --- package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 625916184c13..68c157eb82d0 100644 --- a/package.json +++ b/package.json @@ -295,7 +295,7 @@ "@metamask/address-book-controller": "^6.0.3", "@metamask/announcement-controller": "^7.0.3", "@metamask/approval-controller": "^7.0.0", - "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A48.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch", + "@metamask/assets-controllers": "^49.0.0", "@metamask/base-controller": "^8.0.0", "@metamask/bitcoin-wallet-snap": "^0.9.0", "@metamask/browser-passworder": "^4.3.0", diff --git a/yarn.lock b/yarn.lock index 888177c09daf..ce0d8f57c823 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5921,7 +5921,7 @@ __metadata: languageName: node linkType: hard -"@metamask/polling-controller@npm:^12.0.0, @metamask/polling-controller@npm:^12.0.2, @metamask/polling-controller@npm:^12.0.3": +"@metamask/polling-controller@npm:^12.0.0, @metamask/polling-controller@npm:^12.0.3": version: 12.0.3 resolution: "@metamask/polling-controller@npm:12.0.3" dependencies: From 607ca16be9d39ec07c6a4a5484b9969bacaf5b27 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Wed, 12 Feb 2025 14:51:45 +0100 Subject: [PATCH 06/27] fix: patch --- ... @metamask-assets-controllers-npm-49.0.0-e9c0266958.patch} | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename .yarn/patches/{@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch => @metamask-assets-controllers-npm-49.0.0-e9c0266958.patch} (81%) diff --git a/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch b/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch similarity index 81% rename from .yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch rename to .yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch index 776e8c0287a6..a370fe86fa14 100644 --- a/.yarn/patches/@metamask-assets-controllers-npm-48.0.0-7a6e6586a9.patch +++ b/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch @@ -1,12 +1,12 @@ diff --git a/dist/assetsUtil.cjs b/dist/assetsUtil.cjs -index 017fb94055b64f99c75f8d54b763a501bdd03e97..34396ba143e3ebcb04fa2c80f7a35d1abd06710e 100644 +index 017fb94055b64f99c75f8d54b763a501bdd03e97..bdf160b61883f701b85d34edfab8f9717455d00e 100644 --- a/dist/assetsUtil.cjs +++ b/dist/assetsUtil.cjs @@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } +++function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } exports.getKeyByValue = exports.fetchTokenContractExchangeRates = exports.reduceInBatchesSerially = exports.divideIntoBatches = exports.ethersBigNumberToBN = exports.addUrlProtocolPrefix = exports.getFormattedIpfsUrl = exports.getIpfsCIDv1AndPath = exports.removeIpfsProtocolPrefix = exports.isTokenListSupportedForNetwork = exports.isTokenDetectionSupportedForNetwork = exports.SupportedStakedBalanceNetworks = exports.SupportedTokenDetectionNetworks = exports.formatIconUrlWithProxy = exports.formatAggregatorNames = exports.hasNewCollectionFields = exports.compareNftMetadata = exports.TOKEN_PRICES_BATCH_SIZE = void 0; const controller_utils_1 = require("@metamask/controller-utils"); const utils_1 = require("@metamask/utils"); diff --git a/package.json b/package.json index 68c157eb82d0..53484ebd5106 100644 --- a/package.json +++ b/package.json @@ -295,7 +295,7 @@ "@metamask/address-book-controller": "^6.0.3", "@metamask/announcement-controller": "^7.0.3", "@metamask/approval-controller": "^7.0.0", - "@metamask/assets-controllers": "^49.0.0", + "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch", "@metamask/base-controller": "^8.0.0", "@metamask/bitcoin-wallet-snap": "^0.9.0", "@metamask/browser-passworder": "^4.3.0", From 66c944f9f4603645f240d865faa5f7678da53229 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Wed, 12 Feb 2025 14:54:33 +0100 Subject: [PATCH 07/27] fix: fix yarn --- yarn.lock | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index ce0d8f57c823..0cfdef76b91d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4893,7 +4893,7 @@ __metadata: languageName: node linkType: hard -"@metamask/assets-controllers@npm:^49.0.0": +"@metamask/assets-controllers@npm:49.0.0": version: 49.0.0 resolution: "@metamask/assets-controllers@npm:49.0.0" dependencies: @@ -4938,6 +4938,51 @@ __metadata: languageName: node linkType: hard +"@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch": + version: 49.0.0 + resolution: "@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch::version=49.0.0&hash=985dce" + dependencies: + "@ethereumjs/util": "npm:^8.1.0" + "@ethersproject/abi": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/contracts": "npm:^5.7.0" + "@ethersproject/providers": "npm:^5.7.0" + "@metamask/abi-utils": "npm:^2.0.3" + "@metamask/base-controller": "npm:^8.0.0" + "@metamask/contract-metadata": "npm:^2.4.0" + "@metamask/controller-utils": "npm:^11.5.0" + "@metamask/eth-query": "npm:^4.0.0" + "@metamask/keyring-api": "npm:^17.0.0" + "@metamask/metamask-eth-abis": "npm:^3.1.1" + "@metamask/polling-controller": "npm:^12.0.3" + "@metamask/rpc-errors": "npm:^7.0.2" + "@metamask/snaps-utils": "npm:^8.10.0" + "@metamask/utils": "npm:^11.1.0" + "@types/bn.js": "npm:^5.1.5" + "@types/uuid": "npm:^8.3.0" + async-mutex: "npm:^0.5.0" + bitcoin-address-validation: "npm:^2.2.3" + bn.js: "npm:^5.2.1" + immer: "npm:^9.0.6" + lodash: "npm:^4.17.21" + multiformats: "npm:^13.1.0" + single-call-balance-checker-abi: "npm:^1.0.0" + uuid: "npm:^8.3.2" + peerDependencies: + "@metamask/accounts-controller": ^23.0.1 + "@metamask/approval-controller": ^7.0.0 + "@metamask/keyring-controller": ^19.0.0 + "@metamask/network-controller": ^22.0.0 + "@metamask/permission-controller": ^11.0.0 + "@metamask/preferences-controller": ^15.0.0 + "@metamask/providers": ^18.1.0 + "@metamask/snaps-controllers": ^9.19.0 + webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 + checksum: 10/6e5e7f8c162bbf68f6b9064fb6828282bca978664350190078674aa066b6a37b70be66e89779fa2b3520f5401c4be04b637bc399c6b24f39856ecda050c33531 + languageName: node + linkType: hard + "@metamask/auto-changelog@npm:^2.1.0": version: 2.6.1 resolution: "@metamask/auto-changelog@npm:2.6.1" @@ -26587,7 +26632,7 @@ __metadata: "@metamask/announcement-controller": "npm:^7.0.3" "@metamask/api-specs": "npm:^0.9.3" "@metamask/approval-controller": "npm:^7.0.0" - "@metamask/assets-controllers": "npm:^49.0.0" + "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch" "@metamask/auto-changelog": "npm:^2.1.0" "@metamask/base-controller": "npm:^8.0.0" "@metamask/bitcoin-wallet-snap": "npm:^0.9.0" From 98eebaa26f76547a4785259e70fbf09f605dbd5b Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Wed, 12 Feb 2025 15:06:07 +0100 Subject: [PATCH 08/27] fix: fix test --- app/scripts/metamask-controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index eb1116f7c590..8105a2863724 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1024,6 +1024,7 @@ export default class MetamaskController extends EventEmitter { 'AccountsController:accountAdded', 'AccountsController:accountRemoved', 'AccountsController:accountBalancesUpdated', + 'MultichainAssetsController:stateChange', ], allowedActions: [ 'AccountsController:listMultichainAccounts', From 6fd1caa2bd4d667120f66558d3b98288bfd20656 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Wed, 12 Feb 2025 14:14:14 +0000 Subject: [PATCH 09/27] Update LavaMoat policies --- lavamoat/browserify/beta/policy.json | 23 ++++------------------- lavamoat/browserify/flask/policy.json | 27 ++++----------------------- lavamoat/browserify/main/policy.json | 23 ++++------------------- lavamoat/browserify/mmi/policy.json | 23 ++++------------------- 4 files changed, 16 insertions(+), 80 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 943fb5b6b287..12b4d6bff3a7 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -905,7 +905,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "__import__": true, + "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -920,7 +920,7 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, @@ -934,6 +934,7 @@ "@metamask/name-controller>async-mutex": true, "bn.js": true, "lodash": true, + "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -962,14 +963,6 @@ "immer": true } }, - "@metamask/assets-controllers>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/network-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1034,14 +1027,6 @@ "immer": true } }, - "@metamask/polling-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1661,7 +1646,7 @@ "setTimeout": true }, "packages": { - "@metamask/polling-controller>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 528f1e6d93b2..d106bf996f0e 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -905,7 +905,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "__import__": true, + "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -920,20 +920,21 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, "@metamask/keyring-api": true, "@metamask/keyring-snap-client": true, "@metamask/metamask-eth-abis": true, - "@metamask/assets-controllers>@metamask/polling-controller": true, + "@metamask/polling-controller": true, "@metamask/rpc-errors": true, "@metamask/snaps-utils": true, "@metamask/assets-controllers>@metamask/utils": true, "@metamask/name-controller>async-mutex": true, "bn.js": true, "lodash": true, + "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -962,14 +963,6 @@ "immer": true } }, - "@metamask/assets-controllers>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/network-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1686,18 +1679,6 @@ "uuid": true } }, - "@metamask/assets-controllers>@metamask/polling-controller": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/assets-controllers>@metamask/base-controller": true, - "@metamask/snaps-utils>fast-json-stable-stringify": true, - "uuid": true - } - }, "@metamask/post-message-stream": { "globals": { "MessageEvent.prototype": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 943fb5b6b287..12b4d6bff3a7 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -905,7 +905,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "__import__": true, + "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -920,7 +920,7 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, @@ -934,6 +934,7 @@ "@metamask/name-controller>async-mutex": true, "bn.js": true, "lodash": true, + "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -962,14 +963,6 @@ "immer": true } }, - "@metamask/assets-controllers>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/network-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1034,14 +1027,6 @@ "immer": true } }, - "@metamask/polling-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1661,7 +1646,7 @@ "setTimeout": true }, "packages": { - "@metamask/polling-controller>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index 534558702af8..ad69c5ea5735 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -997,7 +997,7 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "__import__": true, + "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, @@ -1012,7 +1012,7 @@ "@ethersproject/contracts": true, "@ethersproject/providers": true, "@metamask/abi-utils": true, - "@metamask/assets-controllers>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/contract-metadata": true, "@metamask/controller-utils": true, "@metamask/controller-utils>@metamask/eth-query": true, @@ -1026,6 +1026,7 @@ "@metamask/name-controller>async-mutex": true, "bn.js": true, "lodash": true, + "@ensdomains/content-hash>multicodec>uint8arrays>multiformats": true, "single-call-balance-checker-abi": true, "uuid": true } @@ -1054,14 +1055,6 @@ "immer": true } }, - "@metamask/assets-controllers>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/network-controller>@metamask/base-controller": { "globals": { "setTimeout": true @@ -1126,14 +1119,6 @@ "immer": true } }, - "@metamask/polling-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/browser-passworder": { "globals": { "CryptoKey": true, @@ -1753,7 +1738,7 @@ "setTimeout": true }, "packages": { - "@metamask/polling-controller>@metamask/base-controller": true, + "@metamask/base-controller": true, "@metamask/snaps-utils>fast-json-stable-stringify": true, "uuid": true } From 70fabeaff1a19f7a1742e954dedfdfabede080d8 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Wed, 12 Feb 2025 17:50:34 +0100 Subject: [PATCH 10/27] fix: fix patch --- .../@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch | 4 ++-- yarn.lock | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch b/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch index a370fe86fa14..776e8c0287a6 100644 --- a/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch +++ b/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch @@ -1,12 +1,12 @@ diff --git a/dist/assetsUtil.cjs b/dist/assetsUtil.cjs -index 017fb94055b64f99c75f8d54b763a501bdd03e97..bdf160b61883f701b85d34edfab8f9717455d00e 100644 +index 017fb94055b64f99c75f8d54b763a501bdd03e97..34396ba143e3ebcb04fa2c80f7a35d1abd06710e 100644 --- a/dist/assetsUtil.cjs +++ b/dist/assetsUtil.cjs @@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -++function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } ++function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } exports.getKeyByValue = exports.fetchTokenContractExchangeRates = exports.reduceInBatchesSerially = exports.divideIntoBatches = exports.ethersBigNumberToBN = exports.addUrlProtocolPrefix = exports.getFormattedIpfsUrl = exports.getIpfsCIDv1AndPath = exports.removeIpfsProtocolPrefix = exports.isTokenListSupportedForNetwork = exports.isTokenDetectionSupportedForNetwork = exports.SupportedStakedBalanceNetworks = exports.SupportedTokenDetectionNetworks = exports.formatIconUrlWithProxy = exports.formatAggregatorNames = exports.hasNewCollectionFields = exports.compareNftMetadata = exports.TOKEN_PRICES_BATCH_SIZE = void 0; const controller_utils_1 = require("@metamask/controller-utils"); const utils_1 = require("@metamask/utils"); diff --git a/yarn.lock b/yarn.lock index 0cfdef76b91d..68075669ffbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4940,7 +4940,7 @@ __metadata: "@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch": version: 49.0.0 - resolution: "@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch::version=49.0.0&hash=985dce" + resolution: "@metamask/assets-controllers@patch:@metamask/assets-controllers@npm%3A49.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-49.0.0-e9c0266958.patch::version=49.0.0&hash=7473ef" dependencies: "@ethereumjs/util": "npm:^8.1.0" "@ethersproject/abi": "npm:^5.7.0" @@ -4979,7 +4979,7 @@ __metadata: "@metamask/providers": ^18.1.0 "@metamask/snaps-controllers": ^9.19.0 webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 - checksum: 10/6e5e7f8c162bbf68f6b9064fb6828282bca978664350190078674aa066b6a37b70be66e89779fa2b3520f5401c4be04b637bc399c6b24f39856ecda050c33531 + checksum: 10/86a21131cc5b5fe66717274188d1b52aa3e37e01c8d154edaa65456308b013417cc06aab676f0509f013a24df82abbcefd6b29521f851eef4ab5a9b47df71778 languageName: node linkType: hard From 7d4627d65359cb9763f9b0317622a4f06cc63f1f Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Wed, 12 Feb 2025 17:13:01 +0000 Subject: [PATCH 11/27] Update LavaMoat policies --- lavamoat/browserify/beta/policy.json | 1 - lavamoat/browserify/flask/policy.json | 1 - lavamoat/browserify/main/policy.json | 1 - lavamoat/browserify/mmi/policy.json | 1 - 4 files changed, 4 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 12b4d6bff3a7..7bf93662f819 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -905,7 +905,6 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index d106bf996f0e..6d6d52abfd39 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -905,7 +905,6 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 12b4d6bff3a7..7bf93662f819 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -905,7 +905,6 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index ad69c5ea5735..1c565447bc58 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -997,7 +997,6 @@ "Headers": true, "URL": true, "URLSearchParams": true, - "_interopRequireWildcard": true, "clearInterval": true, "clearTimeout": true, "console.error": true, From 550a15df9689a86f3b0afcb4defeef43e9b7c6a9 Mon Sep 17 00:00:00 2001 From: sahar-fehri Date: Thu, 13 Feb 2025 12:46:34 +0100 Subject: [PATCH 12/27] fix: lint --- .../multichain/multichain-balances-controller-init.test.ts | 1 - .../multichain/multichain-balances-controller-init.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/app/scripts/controller-init/multichain/multichain-balances-controller-init.test.ts b/app/scripts/controller-init/multichain/multichain-balances-controller-init.test.ts index a593f7628035..ee99745fc4e1 100644 --- a/app/scripts/controller-init/multichain/multichain-balances-controller-init.test.ts +++ b/app/scripts/controller-init/multichain/multichain-balances-controller-init.test.ts @@ -16,7 +16,6 @@ jest.mock('@metamask/assets-controllers'); function buildInitRequestMock(): jest.Mocked< ControllerInitRequest< - // @ts-expect-error TODO: figure out why there's a mismatch MultichainBalancesControllerMessenger, MultichainBalancesControllerInitMessenger > diff --git a/app/scripts/controller-init/multichain/multichain-balances-controller-init.ts b/app/scripts/controller-init/multichain/multichain-balances-controller-init.ts index 9bab8037f8e5..50db1219b233 100644 --- a/app/scripts/controller-init/multichain/multichain-balances-controller-init.ts +++ b/app/scripts/controller-init/multichain/multichain-balances-controller-init.ts @@ -7,7 +7,6 @@ import { MultichainBalancesControllerInitMessenger } from '../messengers/multich export const MultichainBalancesControllerInit: ControllerInitFunction< MultichainBalancesController, - // @ts-expect-error TODO: figure out why there's a mismatch MultichainBalancesControllerMessenger, MultichainBalancesControllerInitMessenger > = (request) => { From 209900a8da05c023f70823388a696fedb0aa155a Mon Sep 17 00:00:00 2001 From: Guillaume Roux Date: Thu, 13 Feb 2025 12:57:40 +0100 Subject: [PATCH 13/27] [WIP] `MultichainAssetsController` init --- .../multichain-assets-controller-messenger.ts | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts diff --git a/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts new file mode 100644 index 000000000000..824872b0b4a4 --- /dev/null +++ b/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts @@ -0,0 +1,49 @@ +import { + AccountsControllerAccountAddedEvent, + AccountsControllerAccountAssetListUpdatedEvent, + AccountsControllerAccountRemovedEvent, + AccountsControllerListMultichainAccountsAction, +} from '@metamask/accounts-controller'; +import { Messenger } from '@metamask/base-controller'; +import { GetPermissions } from '@metamask/permission-controller'; +import { GetAllSnaps, HandleSnapRequest } from '@metamask/snaps-controllers'; + +type Actions = + | HandleSnapRequest + | GetAllSnaps + | GetPermissions + | AccountsControllerListMultichainAccountsAction; + +type Events = + | AccountsControllerAccountAddedEvent + | AccountsControllerAccountRemovedEvent + | AccountsControllerAccountAssetListUpdatedEvent; + +export type MultichainAssetsControllerMessenger = ReturnType< + typeof getMultichainAssetsControllerMessenger +>; + +/** + * Get a restricted messenger for the Multichain Assets controller. This is scoped to the + * actions and events that the multichain Assets controller is allowed to handle. + * @param messenger - The controller messenger to restrict. + * @returns The restricted controller messenger. + */ +export function getMultichainAssetsControllerMessenger( + messenger: Messenger, +) { + return messenger.getRestricted({ + name: 'MultichainAssetsController', + allowedEvents: [ + 'AccountsController:accountAdded', + 'AccountsController:accountRemoved', + 'AccountsController:accountAssetListUpdated', + ], + allowedActions: [ + 'PermissionController:getPermissions', + 'SnapController:handleRequest', + 'SnapController:getAll', + 'AccountsController:listMultichainAccounts', + ], + }); +} From 51c7df591e9676e02e8ef510a7ff055838a9102d Mon Sep 17 00:00:00 2001 From: Guillaume Roux Date: Thu, 13 Feb 2025 13:52:46 +0100 Subject: [PATCH 14/27] Update multichain controllers init - Add `MultichainAssetsController` to the controller init list - Fix issues with `MultichainBalanceController` - Fix issues with `MultichainTransactionsController` - Revert type changes --- .../multichain-assets-controller-messenger.ts | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts diff --git a/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts deleted file mode 100644 index 824872b0b4a4..000000000000 --- a/app/scripts/controller-init/messengers/multichain-assets-controller-messenger.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - AccountsControllerAccountAddedEvent, - AccountsControllerAccountAssetListUpdatedEvent, - AccountsControllerAccountRemovedEvent, - AccountsControllerListMultichainAccountsAction, -} from '@metamask/accounts-controller'; -import { Messenger } from '@metamask/base-controller'; -import { GetPermissions } from '@metamask/permission-controller'; -import { GetAllSnaps, HandleSnapRequest } from '@metamask/snaps-controllers'; - -type Actions = - | HandleSnapRequest - | GetAllSnaps - | GetPermissions - | AccountsControllerListMultichainAccountsAction; - -type Events = - | AccountsControllerAccountAddedEvent - | AccountsControllerAccountRemovedEvent - | AccountsControllerAccountAssetListUpdatedEvent; - -export type MultichainAssetsControllerMessenger = ReturnType< - typeof getMultichainAssetsControllerMessenger ->; - -/** - * Get a restricted messenger for the Multichain Assets controller. This is scoped to the - * actions and events that the multichain Assets controller is allowed to handle. - * @param messenger - The controller messenger to restrict. - * @returns The restricted controller messenger. - */ -export function getMultichainAssetsControllerMessenger( - messenger: Messenger, -) { - return messenger.getRestricted({ - name: 'MultichainAssetsController', - allowedEvents: [ - 'AccountsController:accountAdded', - 'AccountsController:accountRemoved', - 'AccountsController:accountAssetListUpdated', - ], - allowedActions: [ - 'PermissionController:getPermissions', - 'SnapController:handleRequest', - 'SnapController:getAll', - 'AccountsController:listMultichainAccounts', - ], - }); -} From d8aa775f3fdf454f886a2c4f1e685b4ee867d04d Mon Sep 17 00:00:00 2001 From: salimtb Date: Thu, 13 Feb 2025 15:39:18 +0100 Subject: [PATCH 15/27] fix: integrate multichainAssetsRatesController --- app/scripts/constants/sentry-state.ts | 3 + .../controller-init/messengers/index.ts | 4 ++ .../messengers/multichain/index.ts | 1 + ...-assets-rates-controller-messenger.test.ts | 14 +++++ ...chain-assets-rates-controller-messenger.ts | 59 +++++++++++++++++++ .../controller-init/multichain/index.ts | 1 + ...multichain-rates-assets-controller-init.ts | 26 ++++++++ ui/selectors/multichain-assets-rates.test.ts | 32 ++++++++++ ui/selectors/multichain-assets-rates.ts | 15 +++++ 9 files changed, 155 insertions(+) create mode 100644 app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts create mode 100644 app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts create mode 100644 app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts create mode 100644 ui/selectors/multichain-assets-rates.test.ts create mode 100644 ui/selectors/multichain-assets-rates.ts diff --git a/app/scripts/constants/sentry-state.ts b/app/scripts/constants/sentry-state.ts index 2d8154557065..7806f000590d 100644 --- a/app/scripts/constants/sentry-state.ts +++ b/app/scripts/constants/sentry-state.ts @@ -105,6 +105,9 @@ export const SENTRY_BACKGROUND_STATE = { accountsAssets: false, assetsMetadata: false, }, + MultichainAssetsRatesController: { + assetsRates: false, + }, BridgeController: { bridgeState: { bridgeFeatureFlags: { diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index a00540f4aa15..e2e3796c2c76 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -21,6 +21,7 @@ import { getMultichainBalancesControllerMessenger, getMultichainTransactionsControllerMessenger, getMultichainAssetsControllerMessenger, + getMultichainAssetsRatesControllerMessenger, } from './multichain'; export const CONTROLLER_MESSENGERS = { @@ -64,4 +65,7 @@ export const CONTROLLER_MESSENGERS = { getMessenger: getTransactionControllerMessenger, getInitMessenger: getTransactionControllerInitMessenger, }, + MultichainAssetsRatesController: { + getMessenger: getMultichainAssetsRatesControllerMessenger, + }, } as const; diff --git a/app/scripts/controller-init/messengers/multichain/index.ts b/app/scripts/controller-init/messengers/multichain/index.ts index 691c5e1e45ab..116af6b0d988 100644 --- a/app/scripts/controller-init/messengers/multichain/index.ts +++ b/app/scripts/controller-init/messengers/multichain/index.ts @@ -5,3 +5,4 @@ export { getMultichainTransactionsControllerMessenger } from './multichain-trans export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export type { MultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; +export type { MultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts new file mode 100644 index 000000000000..a55998ab0cf9 --- /dev/null +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts @@ -0,0 +1,14 @@ +import { Messenger, RestrictedMessenger } from '@metamask/base-controller'; +import { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; + +describe('getMultichainAssetsRatesControllerMessenger', () => { + it('returns a restricted messenger', () => { + const messenger = new Messenger(); + const multichainAssetsRatesControllerMessenger = + getMultichainAssetsRatesControllerMessenger(messenger); + + expect(multichainAssetsRatesControllerMessenger).toBeInstanceOf( + RestrictedMessenger, + ); + }); +}); diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts new file mode 100644 index 000000000000..a96db407815d --- /dev/null +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts @@ -0,0 +1,59 @@ +import { Messenger } from '@metamask/base-controller'; +import { + AccountsControllerAccountAddedEvent, + AccountsControllerListMultichainAccountsAction, +} from '@metamask/accounts-controller'; +import { + CurrencyRateStateChange, + GetCurrencyRateState, + MultichainAssetsControllerStateChangeEvent, +} from '@metamask/assets-controllers'; +import { MultichainAssetsControllerGetStateAction } from '@metamask/assets-controllers'; +import { KeyringControllerLockEvent } from '@metamask/keyring-controller'; +import { KeyringControllerUnlockEvent } from '@metamask/keyring-controller'; +import { HandleSnapRequest } from '@metamask/snaps-controllers'; + +type Actions = + | HandleSnapRequest + | AccountsControllerListMultichainAccountsAction + | GetCurrencyRateState + | MultichainAssetsControllerGetStateAction; + +type Events = + | KeyringControllerLockEvent + | KeyringControllerUnlockEvent + | AccountsControllerAccountAddedEvent + | CurrencyRateStateChange + | MultichainAssetsControllerStateChangeEvent; + +export type MultichainAssetsRatesControllerMessenger = ReturnType< + typeof getMultichainAssetsRatesControllerMessenger +>; + +/** + * Get a restricted messenger for the Multichain Assets controller. This is scoped to the + * actions and events that the multichain Assets controller is allowed to handle. + * + * @param messenger - The controller messenger to restrict. + * @returns The restricted controller messenger. + */ +export function getMultichainAssetsRatesControllerMessenger( + messenger: Messenger, +) { + return messenger.getRestricted({ + name: 'MultiChainAssetsRatesController', + allowedEvents: [ + 'AccountsController:accountAdded', + 'KeyringController:lock', + 'KeyringController:unlock', + 'CurrencyRateController:stateChange', + 'MultichainAssetsController:stateChange', + ], + allowedActions: [ + 'AccountsController:listMultichainAccounts', + 'SnapController:handleRequest', + 'CurrencyRateController:getState', + 'MultichainAssetsController:getState', + ], + }); +} diff --git a/app/scripts/controller-init/multichain/index.ts b/app/scripts/controller-init/multichain/index.ts index 09a29be3f581..8c99adcf1446 100644 --- a/app/scripts/controller-init/multichain/index.ts +++ b/app/scripts/controller-init/multichain/index.ts @@ -1,3 +1,4 @@ export { MultichainAssetsControllerInit } from './multichain-assets-controller-init'; export { MultichainBalancesControllerInit } from './multichain-balances-controller-init'; export { MultichainTransactionsControllerInit } from './multichain-transactions-controller-init'; +export { MultichainAssetsRatesControllerInit } from './multichain-assets-rates-controller-init'; diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts new file mode 100644 index 000000000000..aed9a63eab9b --- /dev/null +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts @@ -0,0 +1,26 @@ +import { MultichainAssetsRatesController } from '@metamask/assets-controllers'; +import { ControllerInitFunction } from '../types'; +import { MultichainAssetsRatesControllerMessenger } from '../messengers/multichain'; + +/** + * Initialize the Multichain Assets controller. + * + * @param request - The request object. + * @param request.controllerMessenger - The messenger to use for the controller. + * @param request.persistedState - The persisted state of the extension. + * @returns The initialized controller. + */ +export const MultichainAssetsRatesControllerInit: ControllerInitFunction< + MultichainAssetsRatesController, + MultichainAssetsRatesControllerMessenger +> = ({ controllerMessenger, persistedState }) => { + const controller = new MultichainAssetsRatesController({ + // @ts-expect-error TODO: Resolve mismatch between base-controller versions. + messenger: controllerMessenger, + state: persistedState.MultichainAssetsRatesController, + }); + + return { + controller, + }; +}; diff --git a/ui/selectors/multichain-assets-rates.test.ts b/ui/selectors/multichain-assets-rates.test.ts new file mode 100644 index 000000000000..4c2f37c9e87c --- /dev/null +++ b/ui/selectors/multichain-assets-rates.test.ts @@ -0,0 +1,32 @@ +import { getAssetsRates, AssetsState } from './multichain-assets-rates'; + +// Mock state for testing +const mockState = { + metamask: { + assetsRates: { + 'token-1': { rate: 1.5, currency: 'USD' }, + 'token-2': { rate: 0.8, currency: 'EUR' }, + }, + }, +}; +describe('getAssetsRates', () => { + it('should return the assetsRates from the state', () => { + const result = getAssetsRates(mockState); + expect(result).toEqual(mockState.metamask.assetsRates); + }); + + it('should return an empty object if assetsRates is empty', () => { + const emptyState: AssetsState = { + metamask: { + assetsRates: {}, + }, + }; + const result = getAssetsRates(emptyState); + expect(result).toEqual({}); + }); + + it('should return undefined if state does not have metamask property', () => { + const invalidState = {} as AssetsState; + expect(() => getAssetsRates(invalidState)).toThrow(); + }); +}); diff --git a/ui/selectors/multichain-assets-rates.ts b/ui/selectors/multichain-assets-rates.ts new file mode 100644 index 000000000000..32de4dfc8f9b --- /dev/null +++ b/ui/selectors/multichain-assets-rates.ts @@ -0,0 +1,15 @@ +import { MultichainAssetsRatesControllerState } from '@metamask/assets-controllers'; + +export type AssetsState = { + metamask: MultichainAssetsRatesControllerState; +}; + +/** + * Gets non-EVM accounts assets. + * + * @param state - Redux state object. + * @returns An object containing non-EVM assets per accounts. + */ +export function getAssetsRates(state: AssetsState) { + return state.metamask.assetsRates; +} From 48aa482c264548e5beec6042cac463ffb44911e0 Mon Sep 17 00:00:00 2001 From: salimtb Date: Thu, 13 Feb 2025 16:18:53 +0100 Subject: [PATCH 16/27] fix: fix after rebase --- .../controller-init/controller-list.ts | 2 + .../controller-init/messengers/index.ts | 6 +-- .../messengers/multichain/index.ts | 1 + .../controller-init/multichain/index.ts | 2 +- ...chain-rates-assets-controller-init.test.ts | 51 +++++++++++++++++++ ...multichain-rates-assets-controller-init.ts | 11 ++-- app/scripts/metamask-controller.js | 2 + 7 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts diff --git a/app/scripts/controller-init/controller-list.ts b/app/scripts/controller-init/controller-list.ts index c0ea242e8c31..071567e0a0a4 100644 --- a/app/scripts/controller-init/controller-list.ts +++ b/app/scripts/controller-init/controller-list.ts @@ -13,6 +13,7 @@ import { TransactionUpdateController } from '@metamask-institutional/transaction import { AccountsController } from '@metamask/accounts-controller'; import { MultichainAssetsController, + MultiChainAssetsRatesController, MultichainBalancesController, } from '@metamask/assets-controllers'; import { MultichainTransactionsController } from '@metamask/multichain-transactions-controller'; @@ -44,6 +45,7 @@ export type Controller = | MultichainAssetsController | MultichainBalancesController | MultichainTransactionsController + | MultiChainAssetsRatesController | NetworkController | OnboardingController | PermissionController< diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index e2e3796c2c76..9ae2dcee1c56 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -37,6 +37,9 @@ export const CONTROLLER_MESSENGERS = { MultichainBalancesController: { getMessenger: getMultichainBalancesControllerMessenger, }, + MultichainAssetsRatesController: { + getMessenger: getMultichainAssetsRatesControllerMessenger, + }, MultichainTransactionsController: { getMessenger: getMultichainTransactionsControllerMessenger, }, @@ -65,7 +68,4 @@ export const CONTROLLER_MESSENGERS = { getMessenger: getTransactionControllerMessenger, getInitMessenger: getTransactionControllerInitMessenger, }, - MultichainAssetsRatesController: { - getMessenger: getMultichainAssetsRatesControllerMessenger, - }, } as const; diff --git a/app/scripts/controller-init/messengers/multichain/index.ts b/app/scripts/controller-init/messengers/multichain/index.ts index 116af6b0d988..2d63c22e2523 100644 --- a/app/scripts/controller-init/messengers/multichain/index.ts +++ b/app/scripts/controller-init/messengers/multichain/index.ts @@ -1,6 +1,7 @@ export { getMultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; export { getMultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export { getMultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; +export { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; diff --git a/app/scripts/controller-init/multichain/index.ts b/app/scripts/controller-init/multichain/index.ts index 8c99adcf1446..4e7d2e132ced 100644 --- a/app/scripts/controller-init/multichain/index.ts +++ b/app/scripts/controller-init/multichain/index.ts @@ -1,4 +1,4 @@ export { MultichainAssetsControllerInit } from './multichain-assets-controller-init'; export { MultichainBalancesControllerInit } from './multichain-balances-controller-init'; export { MultichainTransactionsControllerInit } from './multichain-transactions-controller-init'; -export { MultichainAssetsRatesControllerInit } from './multichain-assets-rates-controller-init'; +export { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init'; diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts new file mode 100644 index 000000000000..551e4fb27bce --- /dev/null +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts @@ -0,0 +1,51 @@ +import { MultiChainAssetsRatesController } from '@metamask/assets-controllers'; +import { Messenger } from '@metamask/base-controller'; +import { buildControllerInitRequestMock } from '../test/utils'; +import { ControllerInitRequest } from '../types'; +import { + getMultichainAssetsRatesControllerMessenger, + MultichainAssetsRatesControllerMessenger, +} from '../messengers/multichain'; +import { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init'; + +jest.mock('@metamask/assets-controllers'); + +function buildInitRequestMock(): jest.Mocked< + ControllerInitRequest +> { + const baseControllerMessenger = new Messenger(); + + return { + ...buildControllerInitRequestMock(), + controllerMessenger: getMultichainAssetsRatesControllerMessenger( + baseControllerMessenger, + ), + }; +} + +describe('MultiChainAssetsRatesControllerInit', () => { + const multiChainAssetsRatesControllerClassMock = jest.mocked( + MultiChainAssetsRatesController, + ); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('returns controller instance', () => { + const requestMock = buildInitRequestMock(); + expect( + MultiChainAssetsRatesControllerInit(requestMock).controller, + ).toBeInstanceOf(MultiChainAssetsRatesController); + }); + + it('initializes with correct messenger and state', () => { + const requestMock = buildInitRequestMock(); + MultiChainAssetsRatesControllerInit(requestMock); + + expect(multiChainAssetsRatesControllerClassMock).toHaveBeenCalledWith({ + messenger: requestMock.controllerMessenger, + state: requestMock.persistedState.MultiChainAssetsRatesController, + }); + }); +}); diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts index aed9a63eab9b..f09d0e4fa2c3 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts @@ -1,4 +1,4 @@ -import { MultichainAssetsRatesController } from '@metamask/assets-controllers'; +import { MultiChainAssetsRatesController } from '@metamask/assets-controllers'; import { ControllerInitFunction } from '../types'; import { MultichainAssetsRatesControllerMessenger } from '../messengers/multichain'; @@ -10,14 +10,13 @@ import { MultichainAssetsRatesControllerMessenger } from '../messengers/multicha * @param request.persistedState - The persisted state of the extension. * @returns The initialized controller. */ -export const MultichainAssetsRatesControllerInit: ControllerInitFunction< - MultichainAssetsRatesController, +export const MultiChainAssetsRatesControllerInit: ControllerInitFunction< + MultiChainAssetsRatesController, MultichainAssetsRatesControllerMessenger > = ({ controllerMessenger, persistedState }) => { - const controller = new MultichainAssetsRatesController({ - // @ts-expect-error TODO: Resolve mismatch between base-controller versions. + const controller = new MultiChainAssetsRatesController({ messenger: controllerMessenger, - state: persistedState.MultichainAssetsRatesController, + state: persistedState.MultiChainAssetsRatesController, }); return { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index c284a31d0494..97dae3b7d569 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -363,6 +363,7 @@ import { MultichainAssetsControllerInit, MultichainTransactionsControllerInit, MultichainBalancesControllerInit, + MultiChainAssetsRatesControllerInit, } from './controller-init/multichain'; ///: END:ONLY_INCLUDE_IF import { TransactionControllerInit } from './controller-init/confirmations/transaction-controller-init'; @@ -2056,6 +2057,7 @@ export default class MetamaskController extends EventEmitter { MultichainAssetsController: MultichainAssetsControllerInit, MultichainBalancesController: MultichainBalancesControllerInit, MultichainTransactionsController: MultichainTransactionsControllerInit, + MultiChainAssetsRatesController: MultiChainAssetsRatesControllerInit, ///: END:ONLY_INCLUDE_IF }; From ef32bf4814befd4dd45c816267b9ec1dbc3c8083 Mon Sep 17 00:00:00 2001 From: salimtb Date: Thu, 13 Feb 2025 17:06:10 +0100 Subject: [PATCH 17/27] fix: fix linter --- .../multichain-assets-rates-controller-messenger.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts index a96db407815d..3a0290e74efc 100644 --- a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts @@ -7,10 +7,12 @@ import { CurrencyRateStateChange, GetCurrencyRateState, MultichainAssetsControllerStateChangeEvent, + MultichainAssetsControllerGetStateAction, } from '@metamask/assets-controllers'; -import { MultichainAssetsControllerGetStateAction } from '@metamask/assets-controllers'; -import { KeyringControllerLockEvent } from '@metamask/keyring-controller'; -import { KeyringControllerUnlockEvent } from '@metamask/keyring-controller'; +import { + KeyringControllerLockEvent, + KeyringControllerUnlockEvent, +} from '@metamask/keyring-controller'; import { HandleSnapRequest } from '@metamask/snaps-controllers'; type Actions = From f174ac496faee9bd9870128dedcc126106ee2e06 Mon Sep 17 00:00:00 2001 From: salimtb Date: Fri, 14 Feb 2025 10:19:20 +0100 Subject: [PATCH 18/27] fix: fix PR comments --- .../multichain-assets-rates-controller-messenger.ts | 4 ++-- .../multichain/multichain-rates-assets-controller-init.ts | 2 +- ui/selectors/multichain-assets-rates.test.ts | 6 +++--- ui/selectors/multichain-assets-rates.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts index 3a0290e74efc..cf8baeb619e4 100644 --- a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts @@ -33,8 +33,8 @@ export type MultichainAssetsRatesControllerMessenger = ReturnType< >; /** - * Get a restricted messenger for the Multichain Assets controller. This is scoped to the - * actions and events that the multichain Assets controller is allowed to handle. + * Get a restricted messenger for the Multichain Assets Rate controller. This is scoped to the + * actions and events that the multichain Assets Rate controller is allowed to handle. * * @param messenger - The controller messenger to restrict. * @returns The restricted controller messenger. diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts index f09d0e4fa2c3..574a1a38b5e0 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts @@ -3,7 +3,7 @@ import { ControllerInitFunction } from '../types'; import { MultichainAssetsRatesControllerMessenger } from '../messengers/multichain'; /** - * Initialize the Multichain Assets controller. + * Initialize the Multichain Assets Rate controller. * * @param request - The request object. * @param request.controllerMessenger - The messenger to use for the controller. diff --git a/ui/selectors/multichain-assets-rates.test.ts b/ui/selectors/multichain-assets-rates.test.ts index 4c2f37c9e87c..89ffa1892cc0 100644 --- a/ui/selectors/multichain-assets-rates.test.ts +++ b/ui/selectors/multichain-assets-rates.test.ts @@ -3,7 +3,7 @@ import { getAssetsRates, AssetsState } from './multichain-assets-rates'; // Mock state for testing const mockState = { metamask: { - assetsRates: { + conversionRates: { 'token-1': { rate: 1.5, currency: 'USD' }, 'token-2': { rate: 0.8, currency: 'EUR' }, }, @@ -12,13 +12,13 @@ const mockState = { describe('getAssetsRates', () => { it('should return the assetsRates from the state', () => { const result = getAssetsRates(mockState); - expect(result).toEqual(mockState.metamask.assetsRates); + expect(result).toEqual(mockState.metamask.conversionRates); }); it('should return an empty object if assetsRates is empty', () => { const emptyState: AssetsState = { metamask: { - assetsRates: {}, + conversionRates: {}, }, }; const result = getAssetsRates(emptyState); diff --git a/ui/selectors/multichain-assets-rates.ts b/ui/selectors/multichain-assets-rates.ts index 32de4dfc8f9b..1333a9c655e8 100644 --- a/ui/selectors/multichain-assets-rates.ts +++ b/ui/selectors/multichain-assets-rates.ts @@ -5,11 +5,11 @@ export type AssetsState = { }; /** - * Gets non-EVM accounts assets. + * Gets non-EVM accounts assets rates. * * @param state - Redux state object. * @returns An object containing non-EVM assets per accounts. */ export function getAssetsRates(state: AssetsState) { - return state.metamask.assetsRates; + return state.metamask.conversionRates; } From aaabc9babd3ebe3e09a09fb763d1a639e3a0348b Mon Sep 17 00:00:00 2001 From: salimtb Date: Fri, 14 Feb 2025 17:44:54 +0100 Subject: [PATCH 19/27] fix: fix e2e tests --- test/e2e/tests/metrics/errors.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/tests/metrics/errors.spec.js b/test/e2e/tests/metrics/errors.spec.js index cbe96504a50a..ff930544ce7c 100644 --- a/test/e2e/tests/metrics/errors.spec.js +++ b/test/e2e/tests/metrics/errors.spec.js @@ -892,6 +892,7 @@ describe('Sentry errors', function () { balances: false, accountsAssets: false, assetsMetadata: false, + assetsRates: false, smartTransactionsState: { fees: { approvalTxFees: true, // Initialized as undefined From f05509a47bccb3e89b013ec79bd92d31cb6e27d4 Mon Sep 17 00:00:00 2001 From: salimtb Date: Fri, 14 Feb 2025 18:57:23 +0100 Subject: [PATCH 20/27] fix: fix build --- app/scripts/metamask-controller.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index eef8dc39fe66..b0d09d7c23fc 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -2093,6 +2093,8 @@ export default class MetamaskController extends EventEmitter { controllersByName.MultichainBalancesController; this.multichainTransactionsController = controllersByName.MultichainTransactionsController; + this.multichainAssetsRatesController = + controllersByName.MultiChainAssetsRatesController; ///: END:ONLY_INCLUDE_IF this.controllerMessenger.subscribe( @@ -2268,6 +2270,7 @@ export default class MetamaskController extends EventEmitter { MultichainAssetsController: this.multichainAssetsController, MultichainBalancesController: this.multichainBalancesController, MultichainTransactionsController: this.multichainTransactionsController, + MultichainAssetsRatesController: this.multichainAssetsRatesController, ///: END:ONLY_INCLUDE_IF NetworkController: this.networkController, KeyringController: this.keyringController, From da24a10a455630048f09c5adb6fdbf981ccc4bae Mon Sep 17 00:00:00 2001 From: salimtb Date: Fri, 14 Feb 2025 19:36:20 +0100 Subject: [PATCH 21/27] fix: fix build --- app/scripts/constants/sentry-state.ts | 2 +- app/scripts/controller-init/controller-list.ts | 1 + app/scripts/controller-init/messengers/index.ts | 8 ++++---- .../controller-init/messengers/multichain/index.ts | 4 ++-- .../multichain-assets-rates-controller-messenger.test.ts | 6 +++--- .../multichain-assets-rates-controller-messenger.ts | 6 +++--- .../multichain-rates-assets-controller-init.test.ts | 8 ++++---- .../multichain/multichain-rates-assets-controller-init.ts | 5 +++-- app/scripts/metamask-controller.js | 4 ++-- 9 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/scripts/constants/sentry-state.ts b/app/scripts/constants/sentry-state.ts index 7806f000590d..5a632e39df50 100644 --- a/app/scripts/constants/sentry-state.ts +++ b/app/scripts/constants/sentry-state.ts @@ -105,7 +105,7 @@ export const SENTRY_BACKGROUND_STATE = { accountsAssets: false, assetsMetadata: false, }, - MultichainAssetsRatesController: { + MultiChainAssetsRatesController: { assetsRates: false, }, BridgeController: { diff --git a/app/scripts/controller-init/controller-list.ts b/app/scripts/controller-init/controller-list.ts index 071567e0a0a4..45f7af2016ef 100644 --- a/app/scripts/controller-init/controller-list.ts +++ b/app/scripts/controller-init/controller-list.ts @@ -77,6 +77,7 @@ export type ControllerFlatState = AccountsController['state'] & MultichainAssetsController['state'] & MultichainBalancesController['state'] & MultichainTransactionsController['state'] & + MultiChainAssetsRatesController['state'] & NetworkController['state'] & OnboardingController['state'] & PermissionController< diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index 9ae2dcee1c56..b38074da6c8d 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -21,7 +21,7 @@ import { getMultichainBalancesControllerMessenger, getMultichainTransactionsControllerMessenger, getMultichainAssetsControllerMessenger, - getMultichainAssetsRatesControllerMessenger, + getMultiChainAssetsRatesControllerMessenger, } from './multichain'; export const CONTROLLER_MESSENGERS = { @@ -37,12 +37,12 @@ export const CONTROLLER_MESSENGERS = { MultichainBalancesController: { getMessenger: getMultichainBalancesControllerMessenger, }, - MultichainAssetsRatesController: { - getMessenger: getMultichainAssetsRatesControllerMessenger, - }, MultichainTransactionsController: { getMessenger: getMultichainTransactionsControllerMessenger, }, + MultiChainAssetsRatesController: { + getMessenger: getMultiChainAssetsRatesControllerMessenger, + }, RateLimitController: { getMessenger: getRateLimitControllerMessenger, getInitMessenger: getRateLimitControllerInitMessenger, diff --git a/app/scripts/controller-init/messengers/multichain/index.ts b/app/scripts/controller-init/messengers/multichain/index.ts index 2d63c22e2523..a3c4eb4298ca 100644 --- a/app/scripts/controller-init/messengers/multichain/index.ts +++ b/app/scripts/controller-init/messengers/multichain/index.ts @@ -1,9 +1,9 @@ export { getMultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; export { getMultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export { getMultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; -export { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; +export { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export type { MultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; -export type { MultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; +export type { MultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts index a55998ab0cf9..a74561b1c144 100644 --- a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.test.ts @@ -1,11 +1,11 @@ import { Messenger, RestrictedMessenger } from '@metamask/base-controller'; -import { getMultichainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; +import { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; -describe('getMultichainAssetsRatesControllerMessenger', () => { +describe('getMultiChainAssetsRatesControllerMessenger', () => { it('returns a restricted messenger', () => { const messenger = new Messenger(); const multichainAssetsRatesControllerMessenger = - getMultichainAssetsRatesControllerMessenger(messenger); + getMultiChainAssetsRatesControllerMessenger(messenger); expect(multichainAssetsRatesControllerMessenger).toBeInstanceOf( RestrictedMessenger, diff --git a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts index cf8baeb619e4..94e5f0cc9c8c 100644 --- a/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts +++ b/app/scripts/controller-init/messengers/multichain/multichain-assets-rates-controller-messenger.ts @@ -28,8 +28,8 @@ type Events = | CurrencyRateStateChange | MultichainAssetsControllerStateChangeEvent; -export type MultichainAssetsRatesControllerMessenger = ReturnType< - typeof getMultichainAssetsRatesControllerMessenger +export type MultiChainAssetsRatesControllerMessenger = ReturnType< + typeof getMultiChainAssetsRatesControllerMessenger >; /** @@ -39,7 +39,7 @@ export type MultichainAssetsRatesControllerMessenger = ReturnType< * @param messenger - The controller messenger to restrict. * @returns The restricted controller messenger. */ -export function getMultichainAssetsRatesControllerMessenger( +export function getMultiChainAssetsRatesControllerMessenger( messenger: Messenger, ) { return messenger.getRestricted({ diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts index 551e4fb27bce..2aeee0b5c237 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts @@ -3,21 +3,21 @@ import { Messenger } from '@metamask/base-controller'; import { buildControllerInitRequestMock } from '../test/utils'; import { ControllerInitRequest } from '../types'; import { - getMultichainAssetsRatesControllerMessenger, - MultichainAssetsRatesControllerMessenger, + getMultiChainAssetsRatesControllerMessenger, + MultiChainAssetsRatesControllerMessenger, } from '../messengers/multichain'; import { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init'; jest.mock('@metamask/assets-controllers'); function buildInitRequestMock(): jest.Mocked< - ControllerInitRequest + ControllerInitRequest > { const baseControllerMessenger = new Messenger(); return { ...buildControllerInitRequestMock(), - controllerMessenger: getMultichainAssetsRatesControllerMessenger( + controllerMessenger: getMultiChainAssetsRatesControllerMessenger( baseControllerMessenger, ), }; diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts index 574a1a38b5e0..3479acba7780 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts @@ -1,6 +1,6 @@ import { MultiChainAssetsRatesController } from '@metamask/assets-controllers'; import { ControllerInitFunction } from '../types'; -import { MultichainAssetsRatesControllerMessenger } from '../messengers/multichain'; +import { MultiChainAssetsRatesControllerMessenger } from '../messengers/multichain'; /** * Initialize the Multichain Assets Rate controller. @@ -12,9 +12,10 @@ import { MultichainAssetsRatesControllerMessenger } from '../messengers/multicha */ export const MultiChainAssetsRatesControllerInit: ControllerInitFunction< MultiChainAssetsRatesController, - MultichainAssetsRatesControllerMessenger + MultiChainAssetsRatesControllerMessenger > = ({ controllerMessenger, persistedState }) => { const controller = new MultiChainAssetsRatesController({ + // @ts-expect-error TODO: Resolve mismatch between base-controller versions. messenger: controllerMessenger, state: persistedState.MultiChainAssetsRatesController, }); diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index b0d09d7c23fc..224b8c603acc 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -2093,7 +2093,7 @@ export default class MetamaskController extends EventEmitter { controllersByName.MultichainBalancesController; this.multichainTransactionsController = controllersByName.MultichainTransactionsController; - this.multichainAssetsRatesController = + this.multiChainAssetsRatesController = controllersByName.MultiChainAssetsRatesController; ///: END:ONLY_INCLUDE_IF @@ -2270,7 +2270,7 @@ export default class MetamaskController extends EventEmitter { MultichainAssetsController: this.multichainAssetsController, MultichainBalancesController: this.multichainBalancesController, MultichainTransactionsController: this.multichainTransactionsController, - MultichainAssetsRatesController: this.multichainAssetsRatesController, + MultiChainAssetsRatesController: this.multiChainAssetsRatesController, ///: END:ONLY_INCLUDE_IF NetworkController: this.networkController, KeyringController: this.keyringController, From 04ae98188f5797d156821999212d6bd0404f0035 Mon Sep 17 00:00:00 2001 From: salimtb Date: Fri, 14 Feb 2025 19:47:05 +0100 Subject: [PATCH 22/27] fix: fix linter --- .../multichain/multichain-rates-assets-controller-init.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts index 3479acba7780..120a23cf057b 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.ts @@ -15,7 +15,6 @@ export const MultiChainAssetsRatesControllerInit: ControllerInitFunction< MultiChainAssetsRatesControllerMessenger > = ({ controllerMessenger, persistedState }) => { const controller = new MultiChainAssetsRatesController({ - // @ts-expect-error TODO: Resolve mismatch between base-controller versions. messenger: controllerMessenger, state: persistedState.MultiChainAssetsRatesController, }); From 60a228491f5fc93676807b04d85bb352b3c3380f Mon Sep 17 00:00:00 2001 From: salimtb Date: Mon, 17 Feb 2025 12:39:53 +0100 Subject: [PATCH 23/27] fix: fix PR comments --- .../controller-init/messengers/index.ts | 2 + ...chain-rates-assets-controller-init.test.ts | 1 + ui/selectors/assets.test.ts | 93 +++++++++++++++++++ ui/selectors/assets.ts | 19 +++- ui/selectors/multichain-assets-rates.test.ts | 32 ------- ui/selectors/multichain-assets-rates.ts | 15 --- 6 files changed, 114 insertions(+), 48 deletions(-) create mode 100644 ui/selectors/assets.test.ts delete mode 100644 ui/selectors/multichain-assets-rates.test.ts delete mode 100644 ui/selectors/multichain-assets-rates.ts diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index b38074da6c8d..d4abb37c992a 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -23,6 +23,7 @@ import { getMultichainAssetsControllerMessenger, getMultiChainAssetsRatesControllerMessenger, } from './multichain'; +import { noop } from 'lodash'; export const CONTROLLER_MESSENGERS = { CronjobController: { @@ -42,6 +43,7 @@ export const CONTROLLER_MESSENGERS = { }, MultiChainAssetsRatesController: { getMessenger: getMultiChainAssetsRatesControllerMessenger, + getInitMessenger: noop, }, RateLimitController: { getMessenger: getRateLimitControllerMessenger, diff --git a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts index 2aeee0b5c237..89244134a004 100644 --- a/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts +++ b/app/scripts/controller-init/multichain/multichain-rates-assets-controller-init.test.ts @@ -20,6 +20,7 @@ function buildInitRequestMock(): jest.Mocked< controllerMessenger: getMultiChainAssetsRatesControllerMessenger( baseControllerMessenger, ), + initMessenger: undefined, }; } diff --git a/ui/selectors/assets.test.ts b/ui/selectors/assets.test.ts new file mode 100644 index 000000000000..d7e293d3d838 --- /dev/null +++ b/ui/selectors/assets.test.ts @@ -0,0 +1,93 @@ +import { + getAssetsRates, + AssetsRatesState, + AssetsState, + getAccountAssets, + getAssetsMetadata, +} from './assets'; + +const mockRatesState = { + metamask: { + conversionRates: { + 'token-1': { rate: 1.5, currency: 'USD' }, + 'token-2': { rate: 0.8, currency: 'EUR' }, + }, + }, +}; + +// Mock state for testing +const mockAssetsState: AssetsState = { + metamask: { + accountsAssets: { + '5132883f-598e-482c-a02b-84eeaa352f5b': [ + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501', + ], + }, + assetsMetadata: { + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': { + name: 'Token 1', + symbol: 'TKN1', + iconUrl: 'https://example.com/token-1.png', + fungible: true, + units: [{ symbol: 'TKN1', name: 'Token 1', decimals: 9 }], + }, + }, + }, +}; + +describe('getAccountAssets', () => { + it('should return the assets from the state', () => { + const result = getAccountAssets(mockAssetsState); + expect(result).toEqual(mockAssetsState.metamask.accountsAssets); + }); + + it('should return an empty object if accountAssets is empty', () => { + const emptyState: AssetsState = { + // @ts-expect-error + metamask: { accountsAssets: {} }, + }; + const result = getAccountAssets(emptyState); + expect(result).toEqual({}); + }); +}); + +describe('getAssetsMetadata', () => { + it('should return the assets metadata from the state', () => { + const result = getAssetsMetadata(mockAssetsState); + expect(result).toEqual(mockAssetsState.metamask.assetsMetadata); + }); + + it('should return an empty object if assetsMetadata is empty', () => { + const emptyState: AssetsState = { + // @ts-expect-error + metamask: { assetsMetadata: {} }, + }; + const result = getAssetsMetadata(emptyState); + expect(result).toEqual({}); + }); + + it('should return undefined if state does not have metamask property', () => { + const invalidState = {} as AssetsState; + expect(() => getAssetsMetadata(invalidState)).toThrow(); + }); +}); + +describe('getAssetsRates', () => { + it('should return the assetsRates from the state', () => { + const result = getAssetsRates(mockRatesState); + expect(result).toEqual(mockRatesState.metamask.conversionRates); + }); + + it('should return an empty object if assetsRates is empty', () => { + const emptyState: AssetsRatesState = { + metamask: { conversionRates: {} }, + }; + const result = getAssetsRates(emptyState); + expect(result).toEqual({}); + }); + + it('should return undefined if state does not have metamask property', () => { + const invalidState = {} as AssetsRatesState; + expect(() => getAssetsRates(invalidState)).toThrow(); + }); +}); diff --git a/ui/selectors/assets.ts b/ui/selectors/assets.ts index 8e26d82a150e..9f7a739c49d9 100644 --- a/ui/selectors/assets.ts +++ b/ui/selectors/assets.ts @@ -1,9 +1,16 @@ -import { MultichainAssetsControllerState } from '@metamask/assets-controllers'; +import { + MultichainAssetsControllerState, + MultichainAssetsRatesControllerState, +} from '@metamask/assets-controllers'; export type AssetsState = { metamask: MultichainAssetsControllerState; }; +export type AssetsRatesState = { + metamask: MultichainAssetsRatesControllerState; +}; + /** * Gets non-EVM accounts assets. * @@ -23,3 +30,13 @@ export function getAccountAssets(state: AssetsState) { export function getAssetsMetadata(state: AssetsState) { return state.metamask.assetsMetadata; } + +/** + * Gets non-EVM accounts assets rates. + * + * @param state - Redux state object. + * @returns An object containing non-EVM assets per accounts. + */ +export function getAssetsRates(state: AssetsRatesState) { + return state.metamask.conversionRates; +} diff --git a/ui/selectors/multichain-assets-rates.test.ts b/ui/selectors/multichain-assets-rates.test.ts deleted file mode 100644 index 89ffa1892cc0..000000000000 --- a/ui/selectors/multichain-assets-rates.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { getAssetsRates, AssetsState } from './multichain-assets-rates'; - -// Mock state for testing -const mockState = { - metamask: { - conversionRates: { - 'token-1': { rate: 1.5, currency: 'USD' }, - 'token-2': { rate: 0.8, currency: 'EUR' }, - }, - }, -}; -describe('getAssetsRates', () => { - it('should return the assetsRates from the state', () => { - const result = getAssetsRates(mockState); - expect(result).toEqual(mockState.metamask.conversionRates); - }); - - it('should return an empty object if assetsRates is empty', () => { - const emptyState: AssetsState = { - metamask: { - conversionRates: {}, - }, - }; - const result = getAssetsRates(emptyState); - expect(result).toEqual({}); - }); - - it('should return undefined if state does not have metamask property', () => { - const invalidState = {} as AssetsState; - expect(() => getAssetsRates(invalidState)).toThrow(); - }); -}); diff --git a/ui/selectors/multichain-assets-rates.ts b/ui/selectors/multichain-assets-rates.ts deleted file mode 100644 index 1333a9c655e8..000000000000 --- a/ui/selectors/multichain-assets-rates.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { MultichainAssetsRatesControllerState } from '@metamask/assets-controllers'; - -export type AssetsState = { - metamask: MultichainAssetsRatesControllerState; -}; - -/** - * Gets non-EVM accounts assets rates. - * - * @param state - Redux state object. - * @returns An object containing non-EVM assets per accounts. - */ -export function getAssetsRates(state: AssetsState) { - return state.metamask.conversionRates; -} From 942e8e90c87d1f40a96322356ac120201c0fc9b8 Mon Sep 17 00:00:00 2001 From: salimtb Date: Mon, 17 Feb 2025 14:31:47 +0100 Subject: [PATCH 24/27] fix: fix linter --- .../controller-init/messengers/index.ts | 1 - ui/selectors/assets.test.ts | 18 ------------------ 2 files changed, 19 deletions(-) diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index d2fb62dd3519..b8fc60a6ba79 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -24,7 +24,6 @@ import { getMultichainAssetsControllerMessenger, getMultiChainAssetsRatesControllerMessenger, } from './multichain'; -import { noop } from 'lodash'; export const CONTROLLER_MESSENGERS = { CronjobController: { diff --git a/ui/selectors/assets.test.ts b/ui/selectors/assets.test.ts index d7e293d3d838..cf6a9b799717 100644 --- a/ui/selectors/assets.test.ts +++ b/ui/selectors/assets.test.ts @@ -40,15 +40,6 @@ describe('getAccountAssets', () => { const result = getAccountAssets(mockAssetsState); expect(result).toEqual(mockAssetsState.metamask.accountsAssets); }); - - it('should return an empty object if accountAssets is empty', () => { - const emptyState: AssetsState = { - // @ts-expect-error - metamask: { accountsAssets: {} }, - }; - const result = getAccountAssets(emptyState); - expect(result).toEqual({}); - }); }); describe('getAssetsMetadata', () => { @@ -57,15 +48,6 @@ describe('getAssetsMetadata', () => { expect(result).toEqual(mockAssetsState.metamask.assetsMetadata); }); - it('should return an empty object if assetsMetadata is empty', () => { - const emptyState: AssetsState = { - // @ts-expect-error - metamask: { assetsMetadata: {} }, - }; - const result = getAssetsMetadata(emptyState); - expect(result).toEqual({}); - }); - it('should return undefined if state does not have metamask property', () => { const invalidState = {} as AssetsState; expect(() => getAssetsMetadata(invalidState)).toThrow(); From 415aa4c595daaf1646741f6f08cbaf3724882608 Mon Sep 17 00:00:00 2001 From: salimtb Date: Mon, 17 Feb 2025 14:45:11 +0100 Subject: [PATCH 25/27] fix: add controller name --- app/scripts/controller-init/utils.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/scripts/controller-init/utils.ts b/app/scripts/controller-init/utils.ts index b9eba4498651..a7f991b3a233 100644 --- a/app/scripts/controller-init/utils.ts +++ b/app/scripts/controller-init/utils.ts @@ -42,6 +42,7 @@ export type ControllersToInitialize = | 'MultichainAssetsController' | 'MultichainBalancesController' | 'MultichainTransactionsController' + | 'MultiChainAssetsRatesController' | 'RateLimitController' | 'SnapsRegistry' | 'SnapController' From ec004545aa001706a02ce55221cab3ec0b8b2cfb Mon Sep 17 00:00:00 2001 From: salimtb Date: Mon, 17 Feb 2025 15:07:39 +0100 Subject: [PATCH 26/27] fix: sort alphabetically the added controller --- app/scripts/controller-init/controller-list.ts | 4 ++-- app/scripts/controller-init/messengers/index.ts | 8 ++++---- .../controller-init/messengers/multichain/index.ts | 4 ++-- app/scripts/controller-init/utils.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/scripts/controller-init/controller-list.ts b/app/scripts/controller-init/controller-list.ts index 45f7af2016ef..029f22f7da5d 100644 --- a/app/scripts/controller-init/controller-list.ts +++ b/app/scripts/controller-init/controller-list.ts @@ -43,9 +43,9 @@ export type Controller = | JsonSnapsRegistry | KeyringController | MultichainAssetsController + | MultiChainAssetsRatesController | MultichainBalancesController | MultichainTransactionsController - | MultiChainAssetsRatesController | NetworkController | OnboardingController | PermissionController< @@ -75,9 +75,9 @@ export type ControllerFlatState = AccountsController['state'] & JsonSnapsRegistry['state'] & KeyringController['state'] & MultichainAssetsController['state'] & + MultiChainAssetsRatesController['state'] & MultichainBalancesController['state'] & MultichainTransactionsController['state'] & - MultiChainAssetsRatesController['state'] & NetworkController['state'] & OnboardingController['state'] & PermissionController< diff --git a/app/scripts/controller-init/messengers/index.ts b/app/scripts/controller-init/messengers/index.ts index b8fc60a6ba79..62b4f63b5cd8 100644 --- a/app/scripts/controller-init/messengers/index.ts +++ b/app/scripts/controller-init/messengers/index.ts @@ -38,6 +38,10 @@ export const CONTROLLER_MESSENGERS = { getMessenger: getMultichainAssetsControllerMessenger, getInitMessenger: noop, }, + MultiChainAssetsRatesController: { + getMessenger: getMultiChainAssetsRatesControllerMessenger, + getInitMessenger: noop, + }, MultichainBalancesController: { getMessenger: getMultichainBalancesControllerMessenger, getInitMessenger: noop, @@ -46,10 +50,6 @@ export const CONTROLLER_MESSENGERS = { getMessenger: getMultichainTransactionsControllerMessenger, getInitMessenger: noop, }, - MultiChainAssetsRatesController: { - getMessenger: getMultiChainAssetsRatesControllerMessenger, - getInitMessenger: noop, - }, RateLimitController: { getMessenger: getRateLimitControllerMessenger, getInitMessenger: getRateLimitControllerInitMessenger, diff --git a/app/scripts/controller-init/messengers/multichain/index.ts b/app/scripts/controller-init/messengers/multichain/index.ts index a3c4eb4298ca..dae4039662fe 100644 --- a/app/scripts/controller-init/messengers/multichain/index.ts +++ b/app/scripts/controller-init/messengers/multichain/index.ts @@ -1,9 +1,9 @@ export { getMultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; +export { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; export { getMultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export { getMultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; -export { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger'; +export type { MultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger'; export type { MultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger'; -export type { MultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger'; diff --git a/app/scripts/controller-init/utils.ts b/app/scripts/controller-init/utils.ts index a7f991b3a233..5a90aaecf229 100644 --- a/app/scripts/controller-init/utils.ts +++ b/app/scripts/controller-init/utils.ts @@ -40,9 +40,9 @@ export type ControllersToInitialize = | 'CronjobController' | 'ExecutionService' | 'MultichainAssetsController' + | 'MultiChainAssetsRatesController' | 'MultichainBalancesController' | 'MultichainTransactionsController' - | 'MultiChainAssetsRatesController' | 'RateLimitController' | 'SnapsRegistry' | 'SnapController' From ae46e8983786370d03c2a77ec9513affdc9b13a7 Mon Sep 17 00:00:00 2001 From: salimtb Date: Mon, 17 Feb 2025 15:08:55 +0100 Subject: [PATCH 27/27] fix: sort initialisation --- app/scripts/metamask-controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 224b8c603acc..8a335ac1209c 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -2055,9 +2055,9 @@ export default class MetamaskController extends EventEmitter { TransactionController: TransactionControllerInit, ///: BEGIN:ONLY_INCLUDE_IF(build-flask) MultichainAssetsController: MultichainAssetsControllerInit, + MultiChainAssetsRatesController: MultiChainAssetsRatesControllerInit, MultichainBalancesController: MultichainBalancesControllerInit, MultichainTransactionsController: MultichainTransactionsControllerInit, - MultiChainAssetsRatesController: MultiChainAssetsRatesControllerInit, ///: END:ONLY_INCLUDE_IF };