From 1520f57b775c0224ab631abf3693a8ea24cfab55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Regadas?= Date: Thu, 15 Jun 2023 17:57:35 +0100 Subject: [PATCH] MMI start script and fixes a bug preventing it to run (#19594) * adds MMI start script and fixes a bug preventing it to run * lint fix --- app/scripts/controllers/mmi-controller.js | 26 ---------------- app/scripts/metamask-controller.js | 38 ++++++++++++++++++++++- package.json | 1 + ui/selectors/institutional/selectors.js | 7 +++-- 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/app/scripts/controllers/mmi-controller.js b/app/scripts/controllers/mmi-controller.js index 35e56c338..ca9933cfb 100644 --- a/app/scripts/controllers/mmi-controller.js +++ b/app/scripts/controllers/mmi-controller.js @@ -14,9 +14,7 @@ import { REFRESH_TOKEN_CHANGE_EVENT, INTERACTIVE_REPLACEMENT_TOKEN_CHANGE_EVENT, } from '@metamask-institutional/sdk'; -import { handleMmiPortfolio } from '@metamask-institutional/portfolio-dashboard'; import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils'; -import { CHAIN_IDS } from '../../../shared/constants/network'; import { BUILD_QUOTE_ROUTE, CONNECT_HARDWARE_ROUTE, @@ -544,30 +542,6 @@ export default class MMIController extends EventEmitter { }); } - async setMmiPortfolioCookie() { - await this.appStateController.getUnlockPromise(true); - const keyringAccounts = await this.keyringController.getAccounts(); - const { identities } = this.preferencesController.store.getState(); - const { metaMetricsId } = this.metaMetricsController.store.getState(); - const getAccountDetails = (address) => - this.custodyController.getAccountDetails(address); - const extensionId = this.extension.runtime.id; - const networks = [ - ...this.preferencesController.getRpcMethodPreferences(), - { chainId: CHAIN_IDS.MAINNET }, - { chainId: CHAIN_IDS.GOERLI }, - ]; - - handleMmiPortfolio({ - keyringAccounts, - identities, - metaMetricsId, - networks, - getAccountDetails, - extensionId, - }); - } - async setAccountAndNetwork(origin, address, chainId) { await this.appStateController.getUnlockPromise(true); const selectedAddress = this.preferencesController.getSelectedAddress(); diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index b9d517d92..eb1464f3f 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -70,6 +70,7 @@ import { } from '@metamask-institutional/custody-keyring'; import { InstitutionalFeaturesController } from '@metamask-institutional/institutional-features'; import { CustodyController } from '@metamask-institutional/custody-controller'; +import { handleMmiPortfolio } from '@metamask-institutional/portfolio-dashboard'; import { TransactionUpdateController } from '@metamask-institutional/transaction-update'; ///: END:ONLY_INCLUDE_IN import { SignatureController } from '@metamask/signature-controller'; @@ -348,6 +349,10 @@ export default class MetamaskController extends EventEmitter { ), tokenListController: this.tokenListController, provider: this.provider, + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + handleMmiPortfolio: this.setMmiPortfolioCookie.bind(this), + mmiConfigurationStore: this.mmiConfigurationController.store, + ///: END:ONLY_INCLUDE_IN }); this.tokensController = new TokensController({ @@ -3884,7 +3889,7 @@ export default class MetamaskController extends EventEmitter { ), handleMmiCheckIfTokenIsPresent: this.mmiController.handleMmiCheckIfTokenIsPresent.bind(this), - handleMmiPortfolio: this.mmiController.setMmiPortfolioCookie.bind(this), + handleMmiPortfolio: this.setMmiPortfolioCookie.bind(this), handleMmiOpenSwaps: this.mmiController.handleMmiOpenSwaps.bind(this), handleMmiSetAccountAndNetwork: this.mmiController.setAccountAndNetwork.bind(this), @@ -3943,6 +3948,37 @@ export default class MetamaskController extends EventEmitter { return engine; } + ///: BEGIN:ONLY_INCLUDE_IN(build-mmi) + /** + * This method is needed in preferences controller + * so it needs to be here and not in our controller because + * preferences controllers is initiated first + */ + async setMmiPortfolioCookie() { + await this.appStateController.getUnlockPromise(true); + const keyringAccounts = await this.keyringController.getAccounts(); + const { identities } = this.preferencesController.store.getState(); + const { metaMetricsId } = this.metaMetricsController.store.getState(); + const getAccountDetails = (address) => + this.custodyController.getAccountDetails(address); + const extensionId = this.extension.runtime.id; + const networks = [ + ...this.preferencesController.getRpcMethodPreferences(), + { chainId: CHAIN_IDS.MAINNET }, + { chainId: CHAIN_IDS.GOERLI }, + ]; + + return handleMmiPortfolio({ + keyringAccounts, + identities, + metaMetricsId, + networks, + getAccountDetails, + extensionId, + }); + } + ///: END:ONLY_INCLUDE_IN + /** * TODO:LegacyProvider: Delete * A method for providing our public config info over a stream. diff --git a/package.json b/package.json index e78e75b52..cbd0eb645 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "start": "yarn build:dev dev --apply-lavamoat=false --snow=false", "start:mv3": "ENABLE_MV3=true yarn build:dev dev --apply-lavamoat=false", "start:flask": "yarn start --build-type flask", + "start:mmi": "yarn start --build-type mmi", "start:lavamoat": "yarn build:dev dev --apply-lavamoat=true", "dist": "yarn build dist", "build": "yarn lavamoat:build", diff --git a/ui/selectors/institutional/selectors.js b/ui/selectors/institutional/selectors.js index 2ca64cef1..f7198a833 100644 --- a/ui/selectors/institutional/selectors.js +++ b/ui/selectors/institutional/selectors.js @@ -36,8 +36,11 @@ export function getConfiguredCustodians(state) { export function getCustodianIconForAddress(state, address) { let custodianIcon; - const checksummedAddress = toChecksumAddress(address); - if (state.metamask.custodyAccountDetails?.[checksummedAddress]) { + const checksummedAddress = address && toChecksumAddress(address); + if ( + checksummedAddress && + state.metamask.custodyAccountDetails?.[checksummedAddress] + ) { const { custodianName } = state.metamask.custodyAccountDetails[checksummedAddress]; custodianIcon = state.metamask.mmiConfiguration?.custodians?.find(