@metamask/assets-controllers 83.1.0 → 85.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -2
- package/dist/AccountTrackerController.cjs +20 -21
- package/dist/AccountTrackerController.cjs.map +1 -1
- package/dist/AccountTrackerController.d.cts +4 -3
- package/dist/AccountTrackerController.d.cts.map +1 -1
- package/dist/AccountTrackerController.d.mts +4 -3
- package/dist/AccountTrackerController.d.mts.map +1 -1
- package/dist/AccountTrackerController.mjs +20 -21
- package/dist/AccountTrackerController.mjs.map +1 -1
- package/dist/AssetsContractController.cjs +10 -10
- package/dist/AssetsContractController.cjs.map +1 -1
- package/dist/AssetsContractController.d.cts +3 -3
- package/dist/AssetsContractController.d.cts.map +1 -1
- package/dist/AssetsContractController.d.mts +3 -3
- package/dist/AssetsContractController.d.mts.map +1 -1
- package/dist/AssetsContractController.mjs +10 -10
- package/dist/AssetsContractController.mjs.map +1 -1
- package/dist/CurrencyRateController.cjs +68 -15
- package/dist/CurrencyRateController.cjs.map +1 -1
- package/dist/CurrencyRateController.d.cts +18 -10
- package/dist/CurrencyRateController.d.cts.map +1 -1
- package/dist/CurrencyRateController.d.mts +18 -10
- package/dist/CurrencyRateController.d.mts.map +1 -1
- package/dist/CurrencyRateController.mjs +68 -15
- package/dist/CurrencyRateController.mjs.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.cjs +7 -7
- package/dist/DeFiPositionsController/DeFiPositionsController.cjs.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.d.cts +3 -2
- package/dist/DeFiPositionsController/DeFiPositionsController.d.cts.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.d.mts +3 -2
- package/dist/DeFiPositionsController/DeFiPositionsController.d.mts.map +1 -1
- package/dist/DeFiPositionsController/DeFiPositionsController.mjs +7 -7
- package/dist/DeFiPositionsController/DeFiPositionsController.mjs.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs +54 -22
- package/dist/MultichainAssetsController/MultichainAssetsController.cjs.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.d.cts +18 -3
- package/dist/MultichainAssetsController/MultichainAssetsController.d.cts.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.d.mts +18 -3
- package/dist/MultichainAssetsController/MultichainAssetsController.d.mts.map +1 -1
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs +54 -22
- package/dist/MultichainAssetsController/MultichainAssetsController.mjs.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs +13 -13
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts +4 -3
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts +4 -3
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts.map +1 -1
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs +13 -13
- package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs +9 -9
- package/dist/MultichainBalancesController/MultichainBalancesController.cjs.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.cts +3 -2
- package/dist/MultichainBalancesController/MultichainBalancesController.d.cts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.d.mts +3 -2
- package/dist/MultichainBalancesController/MultichainBalancesController.d.mts.map +1 -1
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs +9 -9
- package/dist/MultichainBalancesController/MultichainBalancesController.mjs.map +1 -1
- package/dist/NftController.cjs +25 -25
- package/dist/NftController.cjs.map +1 -1
- package/dist/NftController.d.cts +3 -3
- package/dist/NftController.d.cts.map +1 -1
- package/dist/NftController.d.mts +3 -3
- package/dist/NftController.d.mts.map +1 -1
- package/dist/NftController.mjs +25 -25
- package/dist/NftController.mjs.map +1 -1
- package/dist/NftDetectionController.cjs +5 -6
- package/dist/NftDetectionController.cjs.map +1 -1
- package/dist/NftDetectionController.d.cts +5 -5
- package/dist/NftDetectionController.d.cts.map +1 -1
- package/dist/NftDetectionController.d.mts +5 -5
- package/dist/NftDetectionController.d.mts.map +1 -1
- package/dist/NftDetectionController.mjs +5 -6
- package/dist/NftDetectionController.mjs.map +1 -1
- package/dist/RatesController/RatesController.cjs +5 -5
- package/dist/RatesController/RatesController.cjs.map +1 -1
- package/dist/RatesController/RatesController.d.cts.map +1 -1
- package/dist/RatesController/RatesController.d.mts.map +1 -1
- package/dist/RatesController/RatesController.mjs +5 -5
- package/dist/RatesController/RatesController.mjs.map +1 -1
- package/dist/RatesController/types.cjs.map +1 -1
- package/dist/RatesController/types.d.cts +3 -2
- package/dist/RatesController/types.d.cts.map +1 -1
- package/dist/RatesController/types.d.mts +3 -2
- package/dist/RatesController/types.d.mts.map +1 -1
- package/dist/RatesController/types.mjs.map +1 -1
- package/dist/TokenBalancesController.cjs +22 -22
- package/dist/TokenBalancesController.cjs.map +1 -1
- package/dist/TokenBalancesController.d.cts +3 -2
- package/dist/TokenBalancesController.d.cts.map +1 -1
- package/dist/TokenBalancesController.d.mts +3 -2
- package/dist/TokenBalancesController.d.mts.map +1 -1
- package/dist/TokenBalancesController.mjs +22 -22
- package/dist/TokenBalancesController.mjs.map +1 -1
- package/dist/TokenDetectionController.cjs +24 -24
- package/dist/TokenDetectionController.cjs.map +1 -1
- package/dist/TokenDetectionController.d.cts +4 -3
- package/dist/TokenDetectionController.d.cts.map +1 -1
- package/dist/TokenDetectionController.d.mts +4 -3
- package/dist/TokenDetectionController.d.mts.map +1 -1
- package/dist/TokenDetectionController.mjs +24 -24
- package/dist/TokenDetectionController.mjs.map +1 -1
- package/dist/TokenListController.cjs +4 -4
- package/dist/TokenListController.cjs.map +1 -1
- package/dist/TokenListController.d.cts +3 -2
- package/dist/TokenListController.d.cts.map +1 -1
- package/dist/TokenListController.d.mts +3 -2
- package/dist/TokenListController.d.mts.map +1 -1
- package/dist/TokenListController.mjs +4 -4
- package/dist/TokenListController.mjs.map +1 -1
- package/dist/TokenRatesController.cjs +6 -6
- package/dist/TokenRatesController.cjs.map +1 -1
- package/dist/TokenRatesController.d.cts +3 -2
- package/dist/TokenRatesController.d.cts.map +1 -1
- package/dist/TokenRatesController.d.mts +3 -2
- package/dist/TokenRatesController.d.mts.map +1 -1
- package/dist/TokenRatesController.mjs +6 -6
- package/dist/TokenRatesController.mjs.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.cjs +4 -4
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.cjs.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.cts +3 -2
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.cts.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.mts +3 -2
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.d.mts.map +1 -1
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.mjs +4 -4
- package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.mjs.map +1 -1
- package/dist/TokensController.cjs +17 -17
- package/dist/TokensController.cjs.map +1 -1
- package/dist/TokensController.d.cts +3 -2
- package/dist/TokensController.d.cts.map +1 -1
- package/dist/TokensController.d.mts +3 -2
- package/dist/TokensController.d.mts.map +1 -1
- package/dist/TokensController.mjs +17 -17
- package/dist/TokensController.mjs.map +1 -1
- package/dist/balances.cjs +20 -12
- package/dist/balances.cjs.map +1 -1
- package/dist/balances.d.cts +7 -3
- package/dist/balances.d.cts.map +1 -1
- package/dist/balances.d.mts +7 -3
- package/dist/balances.d.mts.map +1 -1
- package/dist/balances.mjs +20 -12
- package/dist/balances.mjs.map +1 -1
- package/dist/selectors/token-selectors.cjs +5 -1
- package/dist/selectors/token-selectors.cjs.map +1 -1
- package/dist/selectors/token-selectors.d.cts +21 -14
- package/dist/selectors/token-selectors.d.cts.map +1 -1
- package/dist/selectors/token-selectors.d.mts +21 -14
- package/dist/selectors/token-selectors.d.mts.map +1 -1
- package/dist/selectors/token-selectors.mjs +5 -1
- package/dist/selectors/token-selectors.mjs.map +1 -1
- package/dist/token-prices-service/abstract-token-prices-service.cjs.map +1 -1
- package/dist/token-prices-service/abstract-token-prices-service.d.cts +30 -0
- package/dist/token-prices-service/abstract-token-prices-service.d.cts.map +1 -1
- package/dist/token-prices-service/abstract-token-prices-service.d.mts +30 -0
- package/dist/token-prices-service/abstract-token-prices-service.d.mts.map +1 -1
- package/dist/token-prices-service/abstract-token-prices-service.mjs.map +1 -1
- package/dist/token-prices-service/codefi-v2.cjs +75 -0
- package/dist/token-prices-service/codefi-v2.cjs.map +1 -1
- package/dist/token-prices-service/codefi-v2.d.cts +15 -1
- package/dist/token-prices-service/codefi-v2.d.cts.map +1 -1
- package/dist/token-prices-service/codefi-v2.d.mts +15 -1
- package/dist/token-prices-service/codefi-v2.d.mts.map +1 -1
- package/dist/token-prices-service/codefi-v2.mjs +75 -0
- package/dist/token-prices-service/codefi-v2.mjs.map +1 -1
- package/package.json +26 -25
package/dist/balances.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.mjs","sourceRoot":"","sources":["../src/balances.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n parseAccountGroupId,\n type AccountGroupId,\n} from '@metamask/account-api';\nimport type { AccountTreeControllerState } from '@metamask/account-tree-controller';\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { Hex } from '@metamask/utils';\nimport type { CaipAssetType, CaipChainId } from '@metamask/utils';\nimport {\n KnownCaipNamespace,\n parseCaipAssetType,\n parseCaipChainId,\n isStrictHexString,\n} from '@metamask/utils';\n\nimport { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';\nimport type { CurrencyRateState } from './CurrencyRateController';\nimport type { MultichainAssetsRatesControllerState } from './MultichainAssetsRatesController';\nimport type { MultichainBalancesControllerState } from './MultichainBalancesController';\nimport { getNativeTokenAddress } from './token-prices-service/codefi-v2';\nimport type { TokenBalancesControllerState } from './TokenBalancesController';\nimport type { TokenRatesControllerState } from './TokenRatesController';\nimport type { TokensControllerState } from './TokensController';\n\nexport type AccountGroupBalance = {\n walletId: string;\n groupId: string;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type WalletBalance = {\n walletId: string;\n groups: Record<string, AccountGroupBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type AllWalletsBalance = {\n wallets: Record<string, WalletBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type BalanceChangePeriod = '1d' | '7d' | '30d';\n\nconst evmRatePropertiesRecord = {\n '1d': 'pricePercentChange1d',\n '7d': 'pricePercentChange7d',\n '30d': 'pricePercentChange30d',\n} as const;\n\nconst nonEvmRatePropertiesRecord = {\n '1d': 'P1D',\n '7d': 'P7D',\n '30d': 'P30D',\n};\n\nexport type BalanceChangeResult = {\n period: BalanceChangePeriod;\n currentTotalInUserCurrency: number;\n previousTotalInUserCurrency: number;\n amountChangeInUserCurrency: number;\n percentChange: number;\n userCurrency: string;\n};\n\nconst isChainEnabledByMap = (\n map: Record<string, Record<string, boolean>> | undefined,\n id: Hex | CaipChainId,\n): boolean => {\n if (!map) {\n return true;\n }\n if (isStrictHexString(id)) {\n return Boolean(map[KnownCaipNamespace.Eip155]?.[id]);\n }\n const { namespace } = parseCaipChainId(id);\n return Boolean(map[namespace]?.[id]);\n};\n\nconst getInternalAccountsForGroup = (\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n groupId: string,\n): InternalAccount[] => {\n const walletId = parseAccountGroupId(groupId).wallet.id;\n const wallet = accountTreeState.accountTree.wallets[walletId];\n if (!wallet) {\n return [];\n }\n const group = wallet.groups[groupId as AccountGroupId];\n if (!group) {\n return [];\n }\n return group.accounts\n .map(\n (accountId: string) => accountsState.internalAccounts.accounts[accountId],\n )\n .filter(Boolean);\n};\n\nconst isNonNaNNumber = (value: unknown): value is number =>\n typeof value === 'number' && !Number.isNaN(value);\n\n/**\n * Combined function that gets valid token balances with calculation data\n *\n * @param account - Internal account.\n * @param tokenBalancesState - Token balances state.\n * @param tokensState - Tokens state.\n * @param tokenRatesState - Token rates state.\n * @param currencyRateState - Currency rate state.\n * @param isEvmChainEnabled - Predicate to check EVM chain enablement.\n * @returns token calculation data\n */\nfunction getEvmTokenBalances(\n account: InternalAccount,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n) {\n const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Hex;\n const accountBalances =\n tokenBalancesState.tokenBalances[account.address as Hex] ?? {};\n\n return Object.entries(accountBalances)\n .filter(([chainId]) => isEvmChainEnabled(chainId as Hex))\n .flatMap(([chainId, chainBalances]) =>\n Object.entries(chainBalances).map(([tokenAddress, balance]) => ({\n chainId: chainId as Hex,\n tokenAddress: tokenAddress as Hex,\n balance,\n })),\n )\n .map((tokenBalance) => {\n const { chainId, tokenAddress, balance } = tokenBalance;\n\n const stakingContractAddress =\n STAKING_CONTRACT_ADDRESS_BY_CHAINID[\n chainId as keyof typeof STAKING_CONTRACT_ADDRESS_BY_CHAINID\n ];\n const isNative = tokenAddress === ZERO_ADDRESS;\n const isStakedNative = stakingContractAddress\n ? tokenAddress.toLowerCase() === stakingContractAddress.toLowerCase()\n : false;\n\n // Get Token Info (skip allTokens check for native and staked native)\n if (!isNative && !isStakedNative) {\n const accountTokens =\n tokensState?.allTokens?.[chainId]?.[account.address];\n const token = accountTokens?.find((t) => t.address === tokenAddress);\n if (!token) {\n return null;\n }\n }\n\n // Get market data\n const marketDataAddress =\n isNative || isStakedNative\n ? getNativeTokenAddress(chainId as Hex)\n : (tokenAddress as Hex);\n const tokenMarketData =\n tokenRatesState?.marketData?.[chainId]?.[marketDataAddress];\n if (!tokenMarketData?.price) {\n return null;\n }\n\n // Get conversion rate\n const nativeToUserRate =\n currencyRateState.currencyRates[tokenMarketData.currency]\n ?.conversionRate;\n if (!nativeToUserRate) {\n return null;\n }\n\n // Calculate values\n let decimals = 18;\n if (!isNative && !isStakedNative) {\n const accountTokens =\n tokensState?.allTokens?.[chainId]?.[account.address];\n const token = accountTokens?.find((t) => t.address === tokenAddress);\n decimals = isNonNaNNumber(token?.decimals)\n ? (token?.decimals as number)\n : 18;\n }\n const decimalBalance = parseInt(balance, 16);\n if (!isNonNaNNumber(decimalBalance)) {\n return null;\n }\n\n const userCurrencyValue =\n (decimalBalance / Math.pow(10, decimals)) *\n tokenMarketData.price *\n nativeToUserRate;\n\n return {\n userCurrencyValue,\n tokenMarketData, // Only needed for change calculations\n };\n })\n .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\n/**\n * Combined function that gets valid non-EVM asset balances with calculation data\n *\n * @param account - Internal account.\n * @param multichainBalancesState - Multichain balances state.\n * @param multichainRatesState - Multichain rates state.\n * @param isAssetChainEnabled - Predicate to check asset chain enablement.\n * @returns token calculation data\n */\nfunction getNonEvmAssetBalances(\n account: InternalAccount,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n) {\n const accountBalances = multichainBalancesState.balances[account.id] ?? {};\n\n return Object.entries(accountBalances)\n .filter(([assetId]) => isAssetChainEnabled(assetId as CaipAssetType))\n .map(([assetId, balanceData]) => {\n const balanceAmount = parseFloat(balanceData.amount);\n if (Number.isNaN(balanceAmount)) {\n return null;\n }\n\n const conversionRate =\n multichainRatesState.conversionRates[assetId as CaipAssetType];\n if (!conversionRate) {\n return null;\n }\n\n const conversionRateValue = parseFloat(conversionRate.rate);\n if (Number.isNaN(conversionRateValue)) {\n return null;\n }\n\n const userCurrencyValue = balanceAmount * conversionRateValue;\n\n return {\n assetId: assetId as CaipAssetType,\n userCurrencyValue,\n conversionRate, // Only needed for change calculations\n };\n })\n .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\n/**\n * Sum EVM account token balances in user currency.\n *\n * @param account - Internal account.\n * @param tokenBalancesState - Token balances state.\n * @param tokensState - Tokens state.\n * @param tokenRatesState - Token rates state.\n * @param currencyRateState - Currency rate state.\n * @param isEvmChainEnabled - Predicate to check EVM chain enablement.\n * @returns Total value in user currency.\n */\nfunction sumEvmAccountBalanceInUserCurrency(\n account: InternalAccount,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n): number {\n const tokenBalances = getEvmTokenBalances(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n );\n return tokenBalances.reduce((a, b) => a + b.userCurrencyValue, 0);\n}\n\n/**\n * Sum non‑EVM account balances in user currency from multichain sources.\n *\n * @param account - Internal account.\n * @param multichainBalancesState - Multichain balances state.\n * @param multichainRatesState - Multichain rates state.\n * @param isAssetChainEnabled - Predicate to check asset chain enablement.\n * @returns Total value in user currency.\n */\nfunction sumNonEvmAccountBalanceInUserCurrency(\n account: InternalAccount,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n): number {\n const assetBalances = getNonEvmAssetBalances(\n account,\n multichainBalancesState,\n multichainRatesState,\n isAssetChainEnabled,\n );\n\n return assetBalances.reduce((a, b) => a + b.userCurrencyValue, 0);\n}\n\n/**\n * Calculate balances for all wallets and groups.\n * Pure function – accepts controller states and returns aggregated totals.\n *\n * @param accountTreeState - AccountTreeController state\n * @param accountsState - AccountsController state\n * @param tokenBalancesState - TokenBalancesController state\n * @param tokenRatesState - TokenRatesController state\n * @param multichainRatesState - MultichainAssetsRatesController state\n * @param multichainBalancesState - MultichainBalancesController state\n * @param tokensState - TokensController state\n * @param currencyRateState - CurrencyRateController state\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace\n * @returns Aggregated balances for all wallets\n */\nexport function calculateBalanceForAllWallets(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n): AllWalletsBalance {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean =>\n isChainEnabledByMap(enabledNetworkMap, parseCaipAssetType(assetId).chainId);\n\n const getBalance = {\n evm: (account: InternalAccount) =>\n sumEvmAccountBalanceInUserCurrency(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountBalanceInUserCurrency(\n account,\n multichainBalancesState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountBalances = () =>\n Object.entries(accountTreeState.accountTree.wallets ?? {})\n .flatMap(([walletId, wallet]) =>\n Object.keys(wallet?.groups || {}).flatMap((groupId) => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n\n return accounts.map((account) => ({\n walletId,\n groupId,\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n }),\n )\n .map((flatAccount) => {\n const flatAccountWithBalance = flatAccount as typeof flatAccount & {\n balance: number;\n };\n flatAccountWithBalance.balance = flatAccount.isEvm\n ? getBalance.evm(flatAccount.account)\n : getBalance.nonEvm(flatAccount.account);\n return flatAccountWithBalance;\n });\n\n const getAggWalletBalance = (\n flatAccountBalances: ReturnType<typeof getFlatAccountBalances>,\n ): number => flatAccountBalances.reduce((a, b) => a + b.balance, 0);\n\n const getWalletBalances = (\n flatAccountBalances: ReturnType<typeof getFlatAccountBalances>,\n ): Record<string, WalletBalance> => {\n const wallets: Record<string, WalletBalance> = {};\n const defaultWalletBalance = (walletId: string): WalletBalance => ({\n walletId,\n groups: {},\n totalBalanceInUserCurrency: 0,\n userCurrency: currencyRateState.currentCurrency,\n });\n const defaultGroupBalance = (\n walletId: string,\n groupId: string,\n ): AccountGroupBalance => ({\n walletId,\n groupId,\n totalBalanceInUserCurrency: 0,\n userCurrency: currencyRateState.currentCurrency,\n });\n\n flatAccountBalances.forEach((flatAccount) => {\n const { walletId, groupId, balance } = flatAccount;\n wallets[walletId] ??= defaultWalletBalance(walletId);\n wallets[walletId].groups[groupId] ??= defaultGroupBalance(\n walletId,\n groupId,\n );\n wallets[walletId].groups[groupId].totalBalanceInUserCurrency += balance;\n wallets[walletId].totalBalanceInUserCurrency += balance;\n });\n\n // Ensure all groups (including empty ones) are represented\n Object.entries(accountTreeState.accountTree.wallets ?? {}).forEach(\n ([walletId, wallet]) => {\n if (!wallet) {\n return;\n }\n wallets[walletId] ??= defaultWalletBalance(walletId);\n Object.keys(wallet.groups || {}).forEach((groupId) => {\n wallets[walletId].groups[groupId] ??= defaultGroupBalance(\n walletId,\n groupId,\n );\n });\n },\n );\n\n return wallets;\n };\n\n const flatAccounts = getFlatAccountBalances();\n return {\n wallets: getWalletBalances(flatAccounts),\n totalBalanceInUserCurrency: getAggWalletBalance(flatAccounts),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n\n/**\n * Calculate aggregated portfolio value change for a given period (1d, 7d, 30d).\n * Logic mirrors extension/mobile historical aggregation:\n * - For each asset with available percent change for the requested period, compute current value in user currency.\n * - Reconstruct previous value by dividing current by (1 + percent/100).\n * - Sum across all assets, then compute amount change and percent change.\n *\n * @param accountTreeState - AccountTreeController state.\n * @param accountsState - AccountsController state.\n * @param tokenBalancesState - TokenBalancesController state.\n * @param tokenRatesState - TokenRatesController state.\n * @param multichainRatesState - MultichainAssetsRatesController state.\n * @param multichainBalancesState - MultichainBalancesController state.\n * @param tokensState - TokensController state.\n * @param currencyRateState - CurrencyRateController state.\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param period - Period to compute change for ('1d' | '7d' | '30d').\n * @returns Aggregated change details for the requested period.\n */\nexport function calculateBalanceChangeForAllWallets(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n period: BalanceChangePeriod,\n): BalanceChangeResult {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean => {\n const { chainId } = parseCaipAssetType(assetId);\n return isChainEnabledByMap(enabledNetworkMap, chainId);\n };\n\n const getAccountChange = {\n evm: (account: InternalAccount) =>\n sumEvmAccountChangeForPeriod(\n account,\n period,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountChangeForPeriod(\n account,\n period,\n multichainBalancesState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountChanges = () =>\n Object.entries(accountTreeState.accountTree.wallets ?? {})\n .flatMap(([walletId, wallet]) =>\n Object.keys(wallet?.groups || {}).flatMap((groupId) => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n return accounts.map((account) => ({\n walletId,\n groupId,\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n }),\n )\n .map((flatAccount) => {\n const flatAccountWithChange = flatAccount as typeof flatAccount & {\n current: number;\n previous: number;\n };\n\n const change = flatAccount.isEvm\n ? getAccountChange.evm(flatAccount.account)\n : getAccountChange.nonEvm(flatAccount.account);\n\n flatAccountWithChange.current = change.current;\n flatAccountWithChange.previous = change.previous;\n return flatAccountWithChange;\n });\n\n const getAggregatedTotals = (\n flatAccountChanges: ReturnType<typeof getFlatAccountChanges>,\n ) => {\n return flatAccountChanges.reduce(\n (totals, account) => {\n totals.current += account.current;\n totals.previous += account.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n };\n\n const flatAccountChanges = getFlatAccountChanges();\n const aggregatedTotals = getAggregatedTotals(flatAccountChanges);\n const amountChange = aggregatedTotals.current - aggregatedTotals.previous;\n const percentChange =\n aggregatedTotals.previous !== 0\n ? (amountChange / aggregatedTotals.previous) * 100\n : 0;\n\n return {\n period,\n currentTotalInUserCurrency: Number(aggregatedTotals.current.toFixed(8)),\n previousTotalInUserCurrency: Number(aggregatedTotals.previous.toFixed(8)),\n amountChangeInUserCurrency: Number(amountChange.toFixed(8)),\n percentChange: Number(percentChange.toFixed(8)),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n\n/**\n * Sum EVM account change for a period (current and previous totals).\n *\n * @param account - Internal account to aggregate.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @param tokenBalancesState - Token balances controller state.\n * @param tokensState - Tokens controller state.\n * @param tokenRatesState - Token rates controller state.\n * @param currencyRateState - Currency rate controller state.\n * @param isEvmChainEnabled - Predicate that returns true if the EVM chain is enabled.\n * @returns Object with current and previous totals in user currency.\n */\nfunction sumEvmAccountChangeForPeriod(\n account: InternalAccount,\n period: BalanceChangePeriod,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n): { current: number; previous: number } {\n const tokenBalances = getEvmTokenBalances(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n );\n\n const tokenChanges = tokenBalances\n .map((token) => {\n const percentRaw = token.tokenMarketData[evmRatePropertiesRecord[period]];\n if (!isNonNaNNumber(percentRaw)) {\n return null;\n }\n\n const denom = Number((1 + percentRaw / 100).toFixed(8));\n if (denom === 0) {\n return null;\n }\n\n return {\n current: token.userCurrencyValue,\n previous: token.userCurrencyValue / denom,\n };\n })\n .filter((change): change is NonNullable<typeof change> => change !== null);\n\n return tokenChanges.reduce(\n (totals, change) => {\n totals.current += change.current;\n totals.previous += change.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n}\n\n/**\n * Sum non-EVM account change for a period (current and previous totals).\n *\n * @param account - Internal account to aggregate.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @param multichainBalancesState - Multichain balances controller state.\n * @param multichainRatesState - Multichain assets rates controller state.\n * @param isAssetChainEnabled - Predicate that returns true if the asset's chain is enabled.\n * @returns Object with current and previous totals in user currency.\n */\nfunction sumNonEvmAccountChangeForPeriod(\n account: InternalAccount,\n period: BalanceChangePeriod,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n): { current: number; previous: number } {\n const assetBalances = getNonEvmAssetBalances(\n account,\n multichainBalancesState,\n multichainRatesState,\n isAssetChainEnabled,\n );\n\n const assetChanges = assetBalances\n .map((asset) => {\n // Safely access the percent change data with proper type checking\n const marketData = asset.conversionRate?.marketData;\n const pricePercentChange = marketData?.pricePercentChange;\n const percentRaw =\n pricePercentChange?.[nonEvmRatePropertiesRecord[period]];\n\n if (!isNonNaNNumber(percentRaw)) {\n return null;\n }\n\n const denom = Number((1 + percentRaw / 100).toFixed(8));\n if (denom === 0) {\n return null;\n }\n\n return {\n current: asset.userCurrencyValue,\n previous: asset.userCurrencyValue / denom,\n };\n })\n .filter((change): change is NonNullable<typeof change> => change !== null);\n\n return assetChanges.reduce(\n (totals, change) => ({\n current: totals.current + change.current,\n previous: totals.previous + change.previous,\n }),\n { current: 0, previous: 0 },\n );\n}\n\n/**\n * Calculate portfolio value change for a specific account group and period.\n *\n * @param accountTreeState - AccountTreeController state.\n * @param accountsState - AccountsController state.\n * @param tokenBalancesState - TokenBalancesController state.\n * @param tokenRatesState - TokenRatesController state.\n * @param multichainRatesState - MultichainAssetsRatesController state.\n * @param multichainBalancesState - MultichainBalancesController state.\n * @param tokensState - TokensController state.\n * @param currencyRateState - CurrencyRateController state.\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param groupId - Account group ID to compute change for.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @returns Change result including current, previous, delta, percent, and period.\n */\nexport function calculateBalanceChangeForAccountGroup(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n groupId: string,\n period: BalanceChangePeriod,\n): BalanceChangeResult {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean => {\n const { chainId } = parseCaipAssetType(assetId);\n return isChainEnabledByMap(enabledNetworkMap, chainId);\n };\n\n const getAccountChange = {\n evm: (account: InternalAccount) =>\n sumEvmAccountChangeForPeriod(\n account,\n period,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountChangeForPeriod(\n account,\n period,\n multichainBalancesState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountChanges = () => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n return accounts.map((account) => ({\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n };\n\n const getAggregatedTotals = (\n flatAccountChanges: ReturnType<typeof getFlatAccountChanges>,\n ) => {\n return flatAccountChanges.reduce(\n (totals, { account, isEvm }) => {\n const change = isEvm\n ? getAccountChange.evm(account)\n : getAccountChange.nonEvm(account);\n totals.current += change.current;\n totals.previous += change.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n };\n\n const flatAccountChanges = getFlatAccountChanges();\n const aggregatedTotals = getAggregatedTotals(flatAccountChanges);\n\n const amountChange = aggregatedTotals.current - aggregatedTotals.previous;\n const percentChange =\n aggregatedTotals.previous !== 0\n ? (amountChange / aggregatedTotals.previous) * 100\n : 0;\n\n return {\n period,\n currentTotalInUserCurrency: Number(aggregatedTotals.current.toFixed(8)),\n previousTotalInUserCurrency: Number(aggregatedTotals.previous.toFixed(8)),\n amountChangeInUserCurrency: Number(amountChange.toFixed(8)),\n percentChange: Number(percentChange.toFixed(8)),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"balances.mjs","sourceRoot":"","sources":["../src/balances.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n parseAccountGroupId,\n type AccountGroupId,\n} from '@metamask/account-api';\nimport type { AccountTreeControllerState } from '@metamask/account-tree-controller';\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { Hex } from '@metamask/utils';\nimport type { CaipAssetType, CaipChainId } from '@metamask/utils';\nimport {\n KnownCaipNamespace,\n parseCaipAssetType,\n parseCaipChainId,\n isStrictHexString,\n} from '@metamask/utils';\n\nimport { STAKING_CONTRACT_ADDRESS_BY_CHAINID } from './AssetsContractController';\nimport type { CurrencyRateState } from './CurrencyRateController';\nimport type { MultichainAssetsControllerState } from './MultichainAssetsController';\nimport type { MultichainAssetsRatesControllerState } from './MultichainAssetsRatesController';\nimport type { MultichainBalancesControllerState } from './MultichainBalancesController';\nimport { getNativeTokenAddress } from './token-prices-service/codefi-v2';\nimport type { TokenBalancesControllerState } from './TokenBalancesController';\nimport type { TokenRatesControllerState } from './TokenRatesController';\nimport type { TokensControllerState } from './TokensController';\n\nexport type AccountGroupBalance = {\n walletId: string;\n groupId: string;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type WalletBalance = {\n walletId: string;\n groups: Record<string, AccountGroupBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type AllWalletsBalance = {\n wallets: Record<string, WalletBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type BalanceChangePeriod = '1d' | '7d' | '30d';\n\nconst evmRatePropertiesRecord = {\n '1d': 'pricePercentChange1d',\n '7d': 'pricePercentChange7d',\n '30d': 'pricePercentChange30d',\n} as const;\n\nconst nonEvmRatePropertiesRecord = {\n '1d': 'P1D',\n '7d': 'P7D',\n '30d': 'P30D',\n};\n\nexport type BalanceChangeResult = {\n period: BalanceChangePeriod;\n currentTotalInUserCurrency: number;\n previousTotalInUserCurrency: number;\n amountChangeInUserCurrency: number;\n percentChange: number;\n userCurrency: string;\n};\n\nconst isChainEnabledByMap = (\n map: Record<string, Record<string, boolean>> | undefined,\n id: Hex | CaipChainId,\n): boolean => {\n if (!map) {\n return true;\n }\n if (isStrictHexString(id)) {\n return Boolean(map[KnownCaipNamespace.Eip155]?.[id]);\n }\n const { namespace } = parseCaipChainId(id);\n return Boolean(map[namespace]?.[id]);\n};\n\nconst getInternalAccountsForGroup = (\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n groupId: string,\n): InternalAccount[] => {\n const walletId = parseAccountGroupId(groupId).wallet.id;\n const wallet = accountTreeState.accountTree.wallets[walletId];\n if (!wallet) {\n return [];\n }\n const group = wallet.groups[groupId as AccountGroupId];\n if (!group) {\n return [];\n }\n return group.accounts\n .map(\n (accountId: string) => accountsState.internalAccounts.accounts[accountId],\n )\n .filter(Boolean);\n};\n\nconst isNonNaNNumber = (value: unknown): value is number =>\n typeof value === 'number' && !Number.isNaN(value);\n\n/**\n * Combined function that gets valid token balances with calculation data\n *\n * @param account - Internal account.\n * @param tokenBalancesState - Token balances state.\n * @param tokensState - Tokens state.\n * @param tokenRatesState - Token rates state.\n * @param currencyRateState - Currency rate state.\n * @param isEvmChainEnabled - Predicate to check EVM chain enablement.\n * @returns token calculation data\n */\nfunction getEvmTokenBalances(\n account: InternalAccount,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n) {\n const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' as Hex;\n const accountBalances =\n tokenBalancesState.tokenBalances[account.address as Hex] ?? {};\n\n return Object.entries(accountBalances)\n .filter(([chainId]) => isEvmChainEnabled(chainId as Hex))\n .flatMap(([chainId, chainBalances]) =>\n Object.entries(chainBalances).map(([tokenAddress, balance]) => ({\n chainId: chainId as Hex,\n tokenAddress: tokenAddress as Hex,\n balance,\n })),\n )\n .map((tokenBalance) => {\n const { chainId, tokenAddress, balance } = tokenBalance;\n\n const stakingContractAddress =\n STAKING_CONTRACT_ADDRESS_BY_CHAINID[\n chainId as keyof typeof STAKING_CONTRACT_ADDRESS_BY_CHAINID\n ];\n const isNative = tokenAddress === ZERO_ADDRESS;\n const isStakedNative = stakingContractAddress\n ? tokenAddress.toLowerCase() === stakingContractAddress.toLowerCase()\n : false;\n\n // Get Token Info (skip allTokens check for native and staked native)\n if (!isNative && !isStakedNative) {\n const accountTokens =\n tokensState?.allTokens?.[chainId]?.[account.address];\n const token = accountTokens?.find((t) => t.address === tokenAddress);\n if (!token) {\n return null;\n }\n }\n\n // Get market data\n const marketDataAddress =\n isNative || isStakedNative\n ? getNativeTokenAddress(chainId as Hex)\n : (tokenAddress as Hex);\n const tokenMarketData =\n tokenRatesState?.marketData?.[chainId]?.[marketDataAddress];\n if (!tokenMarketData?.price) {\n return null;\n }\n\n // Get conversion rate\n const nativeToUserRate =\n currencyRateState.currencyRates[tokenMarketData.currency]\n ?.conversionRate;\n if (!nativeToUserRate) {\n return null;\n }\n\n // Calculate values\n let decimals = 18;\n if (!isNative && !isStakedNative) {\n const accountTokens =\n tokensState?.allTokens?.[chainId]?.[account.address];\n const token = accountTokens?.find((t) => t.address === tokenAddress);\n decimals = isNonNaNNumber(token?.decimals)\n ? (token?.decimals as number)\n : 18;\n }\n const decimalBalance = parseInt(balance, 16);\n if (!isNonNaNNumber(decimalBalance)) {\n return null;\n }\n\n const userCurrencyValue =\n (decimalBalance / Math.pow(10, decimals)) *\n tokenMarketData.price *\n nativeToUserRate;\n\n return {\n userCurrencyValue,\n tokenMarketData, // Only needed for change calculations\n };\n })\n .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\n/**\n * Combined function that gets valid non-EVM asset balances with calculation data\n *\n * @param account - Internal account.\n * @param multichainBalancesState - Multichain balances state.\n * @param multichainAssetsState - Multichain assets state (for ignored assets).\n * @param multichainRatesState - Multichain rates state.\n * @param isAssetChainEnabled - Predicate to check asset chain enablement.\n * @returns token calculation data\n */\nfunction getNonEvmAssetBalances(\n account: InternalAccount,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n) {\n const accountBalances = multichainBalancesState.balances[account.id] ?? {};\n const ignoredAssets =\n multichainAssetsState.allIgnoredAssets[account.id] || [];\n\n return Object.entries(accountBalances)\n .filter(\n ([assetId]) =>\n isAssetChainEnabled(assetId as CaipAssetType) &&\n !ignoredAssets.includes(assetId as CaipAssetType),\n )\n .map(([assetId, balanceData]) => {\n const balanceAmount = parseFloat(balanceData.amount);\n if (Number.isNaN(balanceAmount)) {\n return null;\n }\n\n const conversionRate =\n multichainRatesState.conversionRates[assetId as CaipAssetType];\n if (!conversionRate) {\n return null;\n }\n\n const conversionRateValue = parseFloat(conversionRate.rate);\n if (Number.isNaN(conversionRateValue)) {\n return null;\n }\n\n const userCurrencyValue = balanceAmount * conversionRateValue;\n\n return {\n assetId: assetId as CaipAssetType,\n userCurrencyValue,\n conversionRate, // Only needed for change calculations\n };\n })\n .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\n/**\n * Sum EVM account token balances in user currency.\n *\n * @param account - Internal account.\n * @param tokenBalancesState - Token balances state.\n * @param tokensState - Tokens state.\n * @param tokenRatesState - Token rates state.\n * @param currencyRateState - Currency rate state.\n * @param isEvmChainEnabled - Predicate to check EVM chain enablement.\n * @returns Total value in user currency.\n */\nfunction sumEvmAccountBalanceInUserCurrency(\n account: InternalAccount,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n): number {\n const tokenBalances = getEvmTokenBalances(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n );\n return tokenBalances.reduce((a, b) => a + b.userCurrencyValue, 0);\n}\n\n/**\n * Sum non‑EVM account balances in user currency from multichain sources.\n *\n * @param account - Internal account.\n * @param multichainBalancesState - Multichain balances state.\n * @param multichainAssetsState - Multichain assets state (for ignored assets).\n * @param multichainRatesState - Multichain rates state.\n * @param isAssetChainEnabled - Predicate to check asset chain enablement.\n * @returns Total value in user currency.\n */\nfunction sumNonEvmAccountBalanceInUserCurrency(\n account: InternalAccount,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n): number {\n const assetBalances = getNonEvmAssetBalances(\n account,\n multichainBalancesState,\n multichainAssetsState,\n multichainRatesState,\n isAssetChainEnabled,\n );\n\n return assetBalances.reduce((a, b) => a + b.userCurrencyValue, 0);\n}\n\n/**\n * Calculate balances for all wallets and groups.\n * Pure function – accepts controller states and returns aggregated totals.\n *\n * @param accountTreeState - AccountTreeController state\n * @param accountsState - AccountsController state\n * @param tokenBalancesState - TokenBalancesController state\n * @param tokenRatesState - TokenRatesController state\n * @param multichainRatesState - MultichainAssetsRatesController state\n * @param multichainBalancesState - MultichainBalancesController state\n * @param multichainAssetsState - MultichainAssetsController state\n * @param tokensState - TokensController state\n * @param currencyRateState - CurrencyRateController state\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace\n * @returns Aggregated balances for all wallets\n */\nexport function calculateBalanceForAllWallets(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n): AllWalletsBalance {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean =>\n isChainEnabledByMap(enabledNetworkMap, parseCaipAssetType(assetId).chainId);\n\n const getBalance = {\n evm: (account: InternalAccount) =>\n sumEvmAccountBalanceInUserCurrency(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountBalanceInUserCurrency(\n account,\n multichainBalancesState,\n multichainAssetsState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountBalances = () =>\n Object.entries(accountTreeState.accountTree.wallets ?? {})\n .flatMap(([walletId, wallet]) =>\n Object.keys(wallet?.groups || {}).flatMap((groupId) => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n\n return accounts.map((account) => ({\n walletId,\n groupId,\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n }),\n )\n .map((flatAccount) => {\n const flatAccountWithBalance = flatAccount as typeof flatAccount & {\n balance: number;\n };\n flatAccountWithBalance.balance = flatAccount.isEvm\n ? getBalance.evm(flatAccount.account)\n : getBalance.nonEvm(flatAccount.account);\n return flatAccountWithBalance;\n });\n\n const getAggWalletBalance = (\n flatAccountBalances: ReturnType<typeof getFlatAccountBalances>,\n ): number => flatAccountBalances.reduce((a, b) => a + b.balance, 0);\n\n const getWalletBalances = (\n flatAccountBalances: ReturnType<typeof getFlatAccountBalances>,\n ): Record<string, WalletBalance> => {\n const wallets: Record<string, WalletBalance> = {};\n const defaultWalletBalance = (walletId: string): WalletBalance => ({\n walletId,\n groups: {},\n totalBalanceInUserCurrency: 0,\n userCurrency: currencyRateState.currentCurrency,\n });\n const defaultGroupBalance = (\n walletId: string,\n groupId: string,\n ): AccountGroupBalance => ({\n walletId,\n groupId,\n totalBalanceInUserCurrency: 0,\n userCurrency: currencyRateState.currentCurrency,\n });\n\n flatAccountBalances.forEach((flatAccount) => {\n const { walletId, groupId, balance } = flatAccount;\n wallets[walletId] ??= defaultWalletBalance(walletId);\n wallets[walletId].groups[groupId] ??= defaultGroupBalance(\n walletId,\n groupId,\n );\n wallets[walletId].groups[groupId].totalBalanceInUserCurrency += balance;\n wallets[walletId].totalBalanceInUserCurrency += balance;\n });\n\n // Ensure all groups (including empty ones) are represented\n Object.entries(accountTreeState.accountTree.wallets ?? {}).forEach(\n ([walletId, wallet]) => {\n if (!wallet) {\n return;\n }\n wallets[walletId] ??= defaultWalletBalance(walletId);\n Object.keys(wallet.groups || {}).forEach((groupId) => {\n wallets[walletId].groups[groupId] ??= defaultGroupBalance(\n walletId,\n groupId,\n );\n });\n },\n );\n\n return wallets;\n };\n\n const flatAccounts = getFlatAccountBalances();\n return {\n wallets: getWalletBalances(flatAccounts),\n totalBalanceInUserCurrency: getAggWalletBalance(flatAccounts),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n\n/**\n * Calculate aggregated portfolio value change for a given period (1d, 7d, 30d).\n * Logic mirrors extension/mobile historical aggregation:\n * - For each asset with available percent change for the requested period, compute current value in user currency.\n * - Reconstruct previous value by dividing current by (1 + percent/100).\n * - Sum across all assets, then compute amount change and percent change.\n *\n * @param accountTreeState - AccountTreeController state.\n * @param accountsState - AccountsController state.\n * @param tokenBalancesState - TokenBalancesController state.\n * @param tokenRatesState - TokenRatesController state.\n * @param multichainRatesState - MultichainAssetsRatesController state.\n * @param multichainBalancesState - MultichainBalancesController state.\n * @param multichainAssetsState - MultichainAssetsController state.\n * @param tokensState - TokensController state.\n * @param currencyRateState - CurrencyRateController state.\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param period - Period to compute change for ('1d' | '7d' | '30d').\n * @returns Aggregated change details for the requested period.\n */\nexport function calculateBalanceChangeForAllWallets(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n period: BalanceChangePeriod,\n): BalanceChangeResult {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean => {\n const { chainId } = parseCaipAssetType(assetId);\n return isChainEnabledByMap(enabledNetworkMap, chainId);\n };\n\n const getAccountChange = {\n evm: (account: InternalAccount) =>\n sumEvmAccountChangeForPeriod(\n account,\n period,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountChangeForPeriod(\n account,\n period,\n multichainBalancesState,\n multichainAssetsState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountChanges = () =>\n Object.entries(accountTreeState.accountTree.wallets ?? {})\n .flatMap(([walletId, wallet]) =>\n Object.keys(wallet?.groups || {}).flatMap((groupId) => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n return accounts.map((account) => ({\n walletId,\n groupId,\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n }),\n )\n .map((flatAccount) => {\n const flatAccountWithChange = flatAccount as typeof flatAccount & {\n current: number;\n previous: number;\n };\n\n const change = flatAccount.isEvm\n ? getAccountChange.evm(flatAccount.account)\n : getAccountChange.nonEvm(flatAccount.account);\n\n flatAccountWithChange.current = change.current;\n flatAccountWithChange.previous = change.previous;\n return flatAccountWithChange;\n });\n\n const getAggregatedTotals = (\n flatAccountChanges: ReturnType<typeof getFlatAccountChanges>,\n ) => {\n return flatAccountChanges.reduce(\n (totals, account) => {\n totals.current += account.current;\n totals.previous += account.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n };\n\n const flatAccountChanges = getFlatAccountChanges();\n const aggregatedTotals = getAggregatedTotals(flatAccountChanges);\n const amountChange = aggregatedTotals.current - aggregatedTotals.previous;\n const percentChange =\n aggregatedTotals.previous !== 0\n ? (amountChange / aggregatedTotals.previous) * 100\n : 0;\n\n return {\n period,\n currentTotalInUserCurrency: Number(aggregatedTotals.current.toFixed(8)),\n previousTotalInUserCurrency: Number(aggregatedTotals.previous.toFixed(8)),\n amountChangeInUserCurrency: Number(amountChange.toFixed(8)),\n percentChange: Number(percentChange.toFixed(8)),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n\n/**\n * Sum EVM account change for a period (current and previous totals).\n *\n * @param account - Internal account to aggregate.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @param tokenBalancesState - Token balances controller state.\n * @param tokensState - Tokens controller state.\n * @param tokenRatesState - Token rates controller state.\n * @param currencyRateState - Currency rate controller state.\n * @param isEvmChainEnabled - Predicate that returns true if the EVM chain is enabled.\n * @returns Object with current and previous totals in user currency.\n */\nfunction sumEvmAccountChangeForPeriod(\n account: InternalAccount,\n period: BalanceChangePeriod,\n tokenBalancesState: TokenBalancesControllerState,\n tokensState: TokensControllerState,\n tokenRatesState: TokenRatesControllerState,\n currencyRateState: CurrencyRateState,\n isEvmChainEnabled: (chainId: Hex) => boolean,\n): { current: number; previous: number } {\n const tokenBalances = getEvmTokenBalances(\n account,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n );\n\n const tokenChanges = tokenBalances\n .map((token) => {\n const percentRaw = token.tokenMarketData[evmRatePropertiesRecord[period]];\n if (!isNonNaNNumber(percentRaw)) {\n return null;\n }\n\n const denom = Number((1 + percentRaw / 100).toFixed(8));\n if (denom === 0) {\n return null;\n }\n\n return {\n current: token.userCurrencyValue,\n previous: token.userCurrencyValue / denom,\n };\n })\n .filter((change): change is NonNullable<typeof change> => change !== null);\n\n return tokenChanges.reduce(\n (totals, change) => {\n totals.current += change.current;\n totals.previous += change.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n}\n\n/**\n * Sum non-EVM account change for a period (current and previous totals).\n *\n * @param account - Internal account to aggregate.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @param multichainBalancesState - Multichain balances controller state.\n * @param multichainAssetsState - Multichain assets controller state.\n * @param multichainRatesState - Multichain assets rates controller state.\n * @param isAssetChainEnabled - Predicate that returns true if the asset's chain is enabled.\n * @returns Object with current and previous totals in user currency.\n */\nfunction sumNonEvmAccountChangeForPeriod(\n account: InternalAccount,\n period: BalanceChangePeriod,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n isAssetChainEnabled: (assetId: CaipAssetType) => boolean,\n): { current: number; previous: number } {\n const assetBalances = getNonEvmAssetBalances(\n account,\n multichainBalancesState,\n multichainAssetsState,\n multichainRatesState,\n isAssetChainEnabled,\n );\n\n const assetChanges = assetBalances\n .map((asset) => {\n // Safely access the percent change data with proper type checking\n const marketData = asset.conversionRate?.marketData;\n const pricePercentChange = marketData?.pricePercentChange;\n const percentRaw =\n pricePercentChange?.[nonEvmRatePropertiesRecord[period]];\n\n if (!isNonNaNNumber(percentRaw)) {\n return null;\n }\n\n const denom = Number((1 + percentRaw / 100).toFixed(8));\n if (denom === 0) {\n return null;\n }\n\n return {\n current: asset.userCurrencyValue,\n previous: asset.userCurrencyValue / denom,\n };\n })\n .filter((change): change is NonNullable<typeof change> => change !== null);\n\n return assetChanges.reduce(\n (totals, change) => ({\n current: totals.current + change.current,\n previous: totals.previous + change.previous,\n }),\n { current: 0, previous: 0 },\n );\n}\n\n/**\n * Calculate portfolio value change for a specific account group and period.\n *\n * @param accountTreeState - AccountTreeController state.\n * @param accountsState - AccountsController state.\n * @param tokenBalancesState - TokenBalancesController state.\n * @param tokenRatesState - TokenRatesController state.\n * @param multichainRatesState - MultichainAssetsRatesController state.\n * @param multichainBalancesState - MultichainBalancesController state.\n * @param multichainAssetsState - MultichainAssetsController state.\n * @param tokensState - TokensController state.\n * @param currencyRateState - CurrencyRateController state.\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param groupId - Account group ID to compute change for.\n * @param period - Change period ('1d' | '7d' | '30d').\n * @returns Change result including current, previous, delta, percent, and period.\n */\nexport function calculateBalanceChangeForAccountGroup(\n accountTreeState: AccountTreeControllerState,\n accountsState: AccountsControllerState,\n tokenBalancesState: TokenBalancesControllerState,\n tokenRatesState: TokenRatesControllerState,\n multichainRatesState: MultichainAssetsRatesControllerState,\n multichainBalancesState: MultichainBalancesControllerState,\n multichainAssetsState: MultichainAssetsControllerState,\n tokensState: TokensControllerState,\n currencyRateState: CurrencyRateState,\n enabledNetworkMap: Record<string, Record<string, boolean>> | undefined,\n groupId: string,\n period: BalanceChangePeriod,\n): BalanceChangeResult {\n const isEvmChainEnabled = (chainId: Hex): boolean =>\n isChainEnabledByMap(enabledNetworkMap, chainId);\n\n const isAssetChainEnabled = (assetId: CaipAssetType): boolean => {\n const { chainId } = parseCaipAssetType(assetId);\n return isChainEnabledByMap(enabledNetworkMap, chainId);\n };\n\n const getAccountChange = {\n evm: (account: InternalAccount) =>\n sumEvmAccountChangeForPeriod(\n account,\n period,\n tokenBalancesState,\n tokensState,\n tokenRatesState,\n currencyRateState,\n isEvmChainEnabled,\n ),\n nonEvm: (account: InternalAccount) =>\n sumNonEvmAccountChangeForPeriod(\n account,\n period,\n multichainBalancesState,\n multichainAssetsState,\n multichainRatesState,\n isAssetChainEnabled,\n ),\n };\n\n const getFlatAccountChanges = () => {\n const accounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsState,\n groupId,\n );\n return accounts.map((account) => ({\n account,\n isEvm: isEvmAccountType(account.type),\n }));\n };\n\n const getAggregatedTotals = (\n flatAccountChanges: ReturnType<typeof getFlatAccountChanges>,\n ) => {\n return flatAccountChanges.reduce(\n (totals, { account, isEvm }) => {\n const change = isEvm\n ? getAccountChange.evm(account)\n : getAccountChange.nonEvm(account);\n totals.current += change.current;\n totals.previous += change.previous;\n return totals;\n },\n { current: 0, previous: 0 },\n );\n };\n\n const flatAccountChanges = getFlatAccountChanges();\n const aggregatedTotals = getAggregatedTotals(flatAccountChanges);\n\n const amountChange = aggregatedTotals.current - aggregatedTotals.previous;\n const percentChange =\n aggregatedTotals.previous !== 0\n ? (amountChange / aggregatedTotals.previous) * 100\n : 0;\n\n return {\n period,\n currentTotalInUserCurrency: Number(aggregatedTotals.current.toFixed(8)),\n previousTotalInUserCurrency: Number(aggregatedTotals.previous.toFixed(8)),\n amountChangeInUserCurrency: Number(amountChange.toFixed(8)),\n percentChange: Number(percentChange.toFixed(8)),\n userCurrency: currencyRateState.currentCurrency,\n };\n}\n"]}
|
|
@@ -146,11 +146,12 @@ const selectAllEvmAssets = createAssetListSelector([
|
|
|
146
146
|
const selectAllMultichainAssets = createAssetListSelector([
|
|
147
147
|
selectAccountsToGroupIdMap,
|
|
148
148
|
(state) => state.accountsAssets,
|
|
149
|
+
(state) => state.allIgnoredAssets,
|
|
149
150
|
(state) => state.assetsMetadata,
|
|
150
151
|
(state) => state.balances,
|
|
151
152
|
(state) => state.conversionRates,
|
|
152
153
|
(state) => state.currentCurrency,
|
|
153
|
-
], (accountsMap, multichainTokens, multichainAssetsMetadata, multichainBalances, multichainConversionRates, currentCurrency) => {
|
|
154
|
+
], (accountsMap, multichainTokens, ignoredMultichainAssets, multichainAssetsMetadata, multichainBalances, multichainConversionRates, currentCurrency) => {
|
|
154
155
|
var _a;
|
|
155
156
|
const groupAssets = {};
|
|
156
157
|
for (const [accountId, accountAssets] of Object.entries(multichainTokens)) {
|
|
@@ -171,6 +172,9 @@ const selectAllMultichainAssets = createAssetListSelector([
|
|
|
171
172
|
continue;
|
|
172
173
|
}
|
|
173
174
|
const { accountGroupId, type } = account;
|
|
175
|
+
if (ignoredMultichainAssets?.[accountId]?.includes(assetId)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
174
178
|
groupAssets[accountGroupId] ?? (groupAssets[accountGroupId] = {});
|
|
175
179
|
(_a = groupAssets[accountGroupId])[chainId] ?? (_a[chainId] = []);
|
|
176
180
|
const groupChainAssets = groupAssets[accountGroupId][chainId];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-selectors.cjs","sourceRoot":"","sources":["../../src/selectors/token-selectors.ts"],"names":[],"mappings":";;;AAGA,iEAAiE;AAGjE,2CAA4E;AAC5E,uCAA0C;AAE1C,+DAG6B;AAK7B,qEAA0E;AAa1E,2GAA2G;AAC3G,MAAM,2BAA2B,GAAG;IAClC,kDAAkD;IAClD,oDAAoD;CACrD,CAAC;AAkEF,MAAM,uBAAuB,GAAG,yBAAc,CAAC,SAAS,EAAkB,CAAC;AAE3E,MAAM,0BAA0B,GAAG,uBAAuB,CACxD,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EACjE,CAAC,WAAW,EAAE,gBAAgB,EAAE,EAAE;IAChC,MAAM,WAAW,GAOb,EAAE,CAAC;IACP,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;QAC3D,KAAK,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACpE,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;gBAChC,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAE7D,WAAW;gBACT,gFAAgF;gBAChF,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBACvC,CAAC,CAAC,eAAe,CAAC,OAAO;oBACzB,CAAC,CAAC,SAAS,CACd,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;aAC/D;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CACF,CAAC;AAEF,mGAAmG;AACnG,MAAM,iCAAiC,GAAG,uBAAuB,CAC/D;IACE,0BAA0B;IAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB;IAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU;IAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa;IAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe;IAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,8BAA8B;CAChD,EACD,CACE,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,eAAe,EACf,8BAA8B,EAC9B,EAAE;;IACF,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CACnD,iBAAiB,CAC+B,EAAE;QAClD,KAAK,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAC3D,aAAa,CACd,EAAE;YACD,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE;gBACZ,SAAS;aACV;YAED,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;YAEpD,WAAW,CAAC,cAAc,MAA1B,WAAW,CAAC,cAAc,IAAM,EAAE,EAAC;YACnC,MAAA,WAAW,CAAC,cAAc,CAAC,EAAC,OAAO,SAAP,OAAO,IAAM,EAAE,EAAC;YAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC;YAE9D,gEAAgE;YAChE,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC;YAEnD,MAAM,cAAc,GAClB,8BAA8B,CAAC,OAAO,CAAC,EAAE,cAAc,IAAI,QAAQ,CAAC;YAEtE,MAAM,WAAW,GAAG;gBAClB,OAAO,EAAE,IAAA,iCAAqB,EAAC,OAAO,CAAC;gBACvC,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc;gBAC5D,MAAM,EAAE,cAAc;gBACtB,uDAAuD;gBACvD,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,QAAQ,GAAG,yBAAyB,CACxC,UAAU,EACV,WAAW,CAAC,QAAQ,EACpB,UAAU,EACV,aAAa,EACb,OAAO,EACP,WAAW,CAAC,OAAO,CACpB,CAAC;YAEF,gBAAgB,CAAC,IAAI,CAAC;gBACpB,WAAW,EAAE,IAAsB;gBACnC,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,SAAS;gBACT,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,UAAU;gBACV,OAAO,EAAE,IAAA,gDAA4B,EACnC,IAAA,mBAAW,EAAC,UAAU,CAAC,EACvB,WAAW,CAAC,QAAQ,CACrB;gBACD,IAAI,EAAE,QAAQ;oBACZ,CAAC,CAAC;wBACE,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,QAAQ,EAAE,eAAe;wBACzB,cAAc,EAAE,QAAQ,CAAC,cAAc;qBACxC;oBACH,CAAC,CAAC,SAAS;gBACb,OAAO;aACR,CAAC,CAAC;SACJ;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAChD;IACE,0BAA0B;IAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS;IAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB;IACjC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa;IAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU;IAC3B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa;IAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe;CACjC,EACD,CACE,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,aAAa,EACb,eAAe,EACf,EAAE;;IACF,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAG1D,EAAE;QACH,KAAK,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAC1D,WAAW,CACQ,EAAE;YACrB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;gBACjC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAc,CAAC;gBAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,CAAC,OAAO,EAAE;oBACZ,SAAS;iBACV;gBAED,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;gBAEpD,IACE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACnE;oBACA,SAAS;iBACV;gBAED,MAAM,UAAU,GACd,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;gBAE3D,IAAI,CAAC,UAAU,EAAE;oBACf,SAAS;iBACV;gBAED,WAAW,CAAC,cAAc,MAA1B,WAAW,CAAC,cAAc,IAAM,EAAE,EAAC;gBACnC,MAAA,WAAW,CAAC,cAAc,CAAC,EAAC,OAAO,SAAP,OAAO,IAAM,EAAE,EAAC;gBAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC;gBAE9D,MAAM,QAAQ,GAAG,yBAAyB,CACxC,UAAU,EACV,KAAK,CAAC,QAAQ,EACd,UAAU,EACV,aAAa,EACb,OAAO,EACP,YAAY,CACb,CAAC;gBAEF,gBAAgB,CAAC,IAAI,CAAC;oBACpB,WAAW,EAAE,IAAsB;oBACnC,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,YAAY;oBACrB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;oBACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM;oBAChC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS;oBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,UAAU;oBACV,OAAO,EAAE,IAAA,gDAA4B,EACnC,IAAA,mBAAW,EAAC,UAAU,CAAC,EACvB,KAAK,CAAC,QAAQ,CACf;oBACD,IAAI,EAAE,QAAQ;wBACZ,CAAC,CAAC;4BACE,OAAO,EAAE,QAAQ,CAAC,OAAO;4BACzB,QAAQ,EAAE,eAAe;4BACzB,cAAc,EAAE,QAAQ,CAAC,cAAc;yBACxC;wBACH,CAAC,CAAC,SAAS;oBACb,OAAO;iBACR,CAAC,CAAC;aACJ;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CACF,CAAC;AAEF,MAAM,yBAAyB,GAAG,uBAAuB,CACvD;IACE,0BAA0B;IAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc;IAC/B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc;IAC/B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ;IACzB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe;IAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe;CACjC,EACD,CACE,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,EAAE;;IACF,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACzE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE;YACnC,IAAI,SAAgD,CAAC;YACrD,IAAI;gBACF,SAAS,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;aACzC;YAAC,MAAM;gBACN,6FAA6F;gBAC7F,SAAS;aACV;YAED,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAExE,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;gBAC9B,SAAS;aACV;YAED,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAEzC,WAAW,CAAC,cAAc,MAA1B,WAAW,CAAC,cAAc,IAAM,EAAE,EAAC;YACnC,MAAA,WAAW,CAAC,cAAc,CAAC,EAAC,OAAO,SAAP,OAAO,IAAM,EAAE,EAAC;YAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC;YAE9D,MAAM,OAAO,GAKG,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YAEzD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CACvC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;gBAChC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,CACvC,EAAE,QAAQ,CAAC;YAEZ,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE;gBACtC,SAAS;aACV;YAED,MAAM,UAAU,GAAG,IAAA,4CAAwB,EAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEtE,IAAI,CAAC,UAAU,EAAE;gBACf,SAAS;aACV;YAED,MAAM,QAAQ,GAAG,gCAAgC,CAC/C,OAAO,EACP,yBAAyB,EACzB,OAAO,CACR,CAAC;YAEF,gGAAgG;YAChG,gBAAgB,CAAC,IAAI,CAAC;gBACpB,WAAW,EAAE,IAA6B;gBAC1C,OAAO;gBACP,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACvD,KAAK,EAAE,aAAa,CAAC,OAAO;gBAC5B,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK;gBACzD,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,KAAK;gBACrC,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ;oBACZ,CAAC,CAAC;wBACE,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,QAAQ,EAAE,eAAe;wBACzB,cAAc,EAAE,QAAQ,CAAC,cAAc;qBACxC;oBACH,CAAC,CAAC,SAAS;gBACb,OAAO;aACR,CAAC,CAAC;SACJ;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CACF,CAAC;AAEF,MAAM,eAAe,GAAG,uBAAuB,CAC7C;IACE,kBAAkB;IAClB,yBAAyB;IACzB,iCAAiC;CAClC,EACD,CAAC,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,EAAE;IACxD,MAAM,WAAW,GAAyB,EAAE,CAAC;IAE7C,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEpC,WAAW,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAE3C,WAAW,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IAEnD,OAAO,WAAW,CAAC;AACrB,CAAC,CACF,CAAC;AAEW,QAAA,kCAAkC,GAAG,uBAAuB,CACvE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAC/C,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE;IAC3B,MAAM,EAAE,oBAAoB,EAAE,GAAG,WAAW,CAAC;IAC7C,IAAI,CAAC,oBAAoB,EAAE;QACzB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC,CACF,CAAC;AAEF,6HAA6H;AAC7H;;;;;GAKG;AACH,SAAS,WAAW,CAClB,cAAoC,EACpC,SAA+B;IAE/B,KAAK,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAGnE,EAAE;QACH,MAAM,0BAA0B,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,CAAC,0BAA0B,EAAE;YAC/B,cAAc,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gBAClE,cAAc,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;aAC5D;SACF;aAAM;YACL,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;gBAClE,0BAA0B,CAAC,OAAO,MAAlC,0BAA0B,CAAC,OAAO,IAAM,EAAE,EAAC;gBAC3C,0BAA0B,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;aAC1D;SACF;KACF;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,yBAAyB,CAChC,UAAe,EACf,QAAgB,EAChB,UAAmD,EACnD,aAAiD,EACjD,OAAY,EACZ,YAAiB;IAEjB,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAE5D,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE7D,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE;QACjC,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,WAAW,GACf,CAAC,IAAA,sCAAmB,EAAC,UAAU,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;QAClD,eAAe,CAAC,KAAK;QACrB,YAAY,CAAC,cAAc,CAAC;IAE9B,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,cAAc,EAAE,YAAY,CAAC,cAAc;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gCAAgC,CACvC,OAAyC,EACzC,yBAAkF,EAClF,OAAkD;IAElD,MAAM,eAAe,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE;QAC1B,OAAO,SAAS,CAAC;KAClB;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;QAC9D,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC","sourcesContent":["import type { AccountGroupId } from '@metamask/account-api';\nimport type { AccountTreeControllerState } from '@metamask/account-tree-controller';\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkState } from '@metamask/network-controller';\nimport { hexToBigInt, parseCaipAssetType, type Hex } from '@metamask/utils';\nimport { createSelector } from 'reselect';\n\nimport {\n parseBalanceWithDecimals,\n stringifyBalanceWithDecimals,\n} from './stringify-balance';\nimport type { CurrencyRateState } from '../CurrencyRateController';\nimport type { MultichainAssetsControllerState } from '../MultichainAssetsController';\nimport type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController';\nimport type { MultichainBalancesControllerState } from '../MultichainBalancesController';\nimport { getNativeTokenAddress } from '../token-prices-service/codefi-v2';\nimport type { TokenBalancesControllerState } from '../TokenBalancesController';\nimport type { Token, TokenRatesControllerState } from '../TokenRatesController';\nimport type { TokensControllerState } from '../TokensController';\n\ntype AssetsByAccountGroup = {\n [accountGroupId: AccountGroupId]: AccountGroupAssets;\n};\n\nexport type AccountGroupAssets = {\n [network: string]: Asset[];\n};\n\n// If this gets out of hand with other chains, we should probably have a permanent object that defines them\nconst MULTICHAIN_NATIVE_ASSET_IDS = [\n `bip122:000000000019d6689c085ae165831e93/slip44:0`,\n `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501`,\n];\n\ntype EvmAccountType = Extract<InternalAccount['type'], `eip155:${string}`>;\ntype MultichainAccountType = Exclude<\n InternalAccount['type'],\n `eip155:${string}`\n>;\n\nexport type Asset = (\n | {\n accountType: EvmAccountType;\n assetId: Hex; // This is also the address for EVM tokens\n address: Hex;\n chainId: Hex;\n }\n | {\n accountType: MultichainAccountType;\n assetId: `${string}:${string}/${string}:${string}`;\n chainId: `${string}:${string}`;\n }\n) & {\n accountId: string;\n image: string;\n name: string;\n symbol: string;\n decimals: number;\n isNative: boolean;\n rawBalance: Hex;\n balance: string;\n fiat:\n | {\n balance: number;\n currency: string;\n conversionRate: number;\n }\n | undefined;\n};\n\nexport type AssetListState = {\n accountTree: AccountTreeControllerState['accountTree'];\n internalAccounts: AccountsControllerState['internalAccounts'];\n allTokens: TokensControllerState['allTokens'];\n allIgnoredTokens: TokensControllerState['allIgnoredTokens'];\n tokenBalances: TokenBalancesControllerState['tokenBalances'];\n marketData: TokenRatesControllerState['marketData'];\n currencyRates: CurrencyRateState['currencyRates'];\n accountsAssets: MultichainAssetsControllerState['accountsAssets'];\n assetsMetadata: MultichainAssetsControllerState['assetsMetadata'];\n balances: MultichainBalancesControllerState['balances'];\n conversionRates: MultichainAssetsRatesControllerState['conversionRates'];\n currentCurrency: CurrencyRateState['currentCurrency'];\n networkConfigurationsByChainId: NetworkState['networkConfigurationsByChainId'];\n // This is the state from AccountTrackerController. The state is different on mobile and extension\n // accountsByChainId with a balance is the only field that both clients have in common\n // This field could be removed once TokenBalancesController returns native balances\n accountsByChainId: Record<\n Hex,\n Record<\n Hex,\n {\n balance: Hex | null;\n }\n >\n >;\n};\n\nconst createAssetListSelector = createSelector.withTypes<AssetListState>();\n\nconst selectAccountsToGroupIdMap = createAssetListSelector(\n [(state) => state.accountTree, (state) => state.internalAccounts],\n (accountTree, internalAccounts) => {\n const accountsMap: Record<\n string,\n {\n accountGroupId: AccountGroupId;\n type: InternalAccount['type'];\n accountId: string;\n }\n > = {};\n for (const { groups } of Object.values(accountTree.wallets)) {\n for (const { id: accountGroupId, accounts } of Object.values(groups)) {\n for (const accountId of accounts) {\n const internalAccount = internalAccounts.accounts[accountId];\n\n accountsMap[\n // TODO: We would not need internalAccounts if evmTokens state had the accountId\n internalAccount.type.startsWith('eip155')\n ? internalAccount.address\n : accountId\n ] = { accountGroupId, type: internalAccount.type, accountId };\n }\n }\n }\n\n return accountsMap;\n },\n);\n\n// TODO: This selector will not be needed once the native balances are part of the evm tokens state\nconst selectAllEvmAccountNativeBalances = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.accountsByChainId,\n (state) => state.marketData,\n (state) => state.currencyRates,\n (state) => state.currentCurrency,\n (state) => state.networkConfigurationsByChainId,\n ],\n (\n accountsMap,\n accountsByChainId,\n marketData,\n currencyRates,\n currentCurrency,\n networkConfigurationsByChainId,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [chainId, chainAccounts] of Object.entries(\n accountsByChainId,\n ) as [Hex, Record<Hex, { balance: Hex | null }>][]) {\n for (const [accountAddress, accountBalance] of Object.entries(\n chainAccounts,\n )) {\n const account = accountsMap[accountAddress.toLowerCase()];\n if (!account) {\n continue;\n }\n\n const { accountGroupId, type, accountId } = account;\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n // If a native balance is missing, we still want to show it as 0\n const rawBalance = accountBalance.balance || '0x0';\n\n const nativeCurrency =\n networkConfigurationsByChainId[chainId]?.nativeCurrency || 'NATIVE';\n\n const nativeToken = {\n address: getNativeTokenAddress(chainId),\n decimals: 18,\n name: nativeCurrency === 'ETH' ? 'Ethereum' : nativeCurrency,\n symbol: nativeCurrency,\n // This field need to be filled at client level for now\n image: '',\n };\n\n const fiatData = getFiatBalanceForEvmToken(\n rawBalance,\n nativeToken.decimals,\n marketData,\n currencyRates,\n chainId,\n nativeToken.address,\n );\n\n groupChainAssets.push({\n accountType: type as EvmAccountType,\n assetId: nativeToken.address,\n isNative: true,\n address: nativeToken.address,\n image: nativeToken.image,\n name: nativeToken.name,\n symbol: nativeToken.symbol,\n accountId,\n decimals: nativeToken.decimals,\n rawBalance,\n balance: stringifyBalanceWithDecimals(\n hexToBigInt(rawBalance),\n nativeToken.decimals,\n ),\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllEvmAssets = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.allTokens,\n (state) => state.allIgnoredTokens,\n (state) => state.tokenBalances,\n (state) => state.marketData,\n (state) => state.currencyRates,\n (state) => state.currentCurrency,\n ],\n (\n accountsMap,\n evmTokens,\n ignoredEvmTokens,\n tokenBalances,\n marketData,\n currencyRates,\n currentCurrency,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [chainId, chainTokens] of Object.entries(evmTokens) as [\n Hex,\n { [key: string]: Token[] },\n ][]) {\n for (const [accountAddress, addressTokens] of Object.entries(\n chainTokens,\n ) as [Hex, Token[]][]) {\n for (const token of addressTokens) {\n const tokenAddress = token.address as Hex;\n const account = accountsMap[accountAddress];\n if (!account) {\n continue;\n }\n\n const { accountGroupId, type, accountId } = account;\n\n if (\n ignoredEvmTokens[chainId]?.[accountAddress]?.includes(tokenAddress)\n ) {\n continue;\n }\n\n const rawBalance =\n tokenBalances[accountAddress]?.[chainId]?.[tokenAddress];\n\n if (!rawBalance) {\n continue;\n }\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n const fiatData = getFiatBalanceForEvmToken(\n rawBalance,\n token.decimals,\n marketData,\n currencyRates,\n chainId,\n tokenAddress,\n );\n\n groupChainAssets.push({\n accountType: type as EvmAccountType,\n assetId: tokenAddress,\n isNative: false,\n address: tokenAddress,\n image: token.image ?? '',\n name: token.name ?? token.symbol,\n symbol: token.symbol,\n accountId,\n decimals: token.decimals,\n rawBalance,\n balance: stringifyBalanceWithDecimals(\n hexToBigInt(rawBalance),\n token.decimals,\n ),\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllMultichainAssets = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.accountsAssets,\n (state) => state.assetsMetadata,\n (state) => state.balances,\n (state) => state.conversionRates,\n (state) => state.currentCurrency,\n ],\n (\n accountsMap,\n multichainTokens,\n multichainAssetsMetadata,\n multichainBalances,\n multichainConversionRates,\n currentCurrency,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [accountId, accountAssets] of Object.entries(multichainTokens)) {\n for (const assetId of accountAssets) {\n let caipAsset: ReturnType<typeof parseCaipAssetType>;\n try {\n caipAsset = parseCaipAssetType(assetId);\n } catch {\n // TODO: We should log this error when we have the ability to inject a logger from the client\n continue;\n }\n\n const { chainId } = caipAsset;\n const asset = `${caipAsset.assetNamespace}:${caipAsset.assetReference}`;\n\n const account = accountsMap[accountId];\n const assetMetadata = multichainAssetsMetadata[assetId];\n if (!account || !assetMetadata) {\n continue;\n }\n\n const { accountGroupId, type } = account;\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n const balance:\n | {\n amount: string;\n unit: string;\n }\n | undefined = multichainBalances[accountId]?.[assetId];\n\n const decimals = assetMetadata.units.find(\n (unit) =>\n unit.name === assetMetadata.name &&\n unit.symbol === assetMetadata.symbol,\n )?.decimals;\n\n if (!balance || decimals === undefined) {\n continue;\n }\n\n const rawBalance = parseBalanceWithDecimals(balance.amount, decimals);\n\n if (!rawBalance) {\n continue;\n }\n\n const fiatData = getFiatBalanceForMultichainAsset(\n balance,\n multichainConversionRates,\n assetId,\n );\n\n // TODO: We shouldn't have to rely on fallbacks for name and symbol, they should not be optional\n groupChainAssets.push({\n accountType: type as MultichainAccountType,\n assetId,\n isNative: MULTICHAIN_NATIVE_ASSET_IDS.includes(assetId),\n image: assetMetadata.iconUrl,\n name: assetMetadata.name ?? assetMetadata.symbol ?? asset,\n symbol: assetMetadata.symbol ?? asset,\n accountId,\n decimals,\n rawBalance,\n balance: balance.amount,\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllAssets = createAssetListSelector(\n [\n selectAllEvmAssets,\n selectAllMultichainAssets,\n selectAllEvmAccountNativeBalances,\n ],\n (evmAssets, multichainAssets, evmAccountNativeBalances) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n mergeAssets(groupAssets, evmAssets);\n\n mergeAssets(groupAssets, multichainAssets);\n\n mergeAssets(groupAssets, evmAccountNativeBalances);\n\n return groupAssets;\n },\n);\n\nexport const selectAssetsBySelectedAccountGroup = createAssetListSelector(\n [selectAllAssets, (state) => state.accountTree],\n (groupAssets, accountTree) => {\n const { selectedAccountGroup } = accountTree;\n if (!selectedAccountGroup) {\n return {};\n }\n return groupAssets[selectedAccountGroup] || {};\n },\n);\n\n// TODO: Once native assets are part of the evm tokens state, this function can be simplified as chains will always be unique\n/**\n * Merges the new assets into the existing assets\n *\n * @param existingAssets - The existing assets\n * @param newAssets - The new assets\n */\nfunction mergeAssets(\n existingAssets: AssetsByAccountGroup,\n newAssets: AssetsByAccountGroup,\n) {\n for (const [accountGroupId, accountAssets] of Object.entries(newAssets) as [\n AccountGroupId,\n AccountGroupAssets,\n ][]) {\n const existingAccountGroupAssets = existingAssets[accountGroupId];\n\n if (!existingAccountGroupAssets) {\n existingAssets[accountGroupId] = {};\n for (const [network, chainAssets] of Object.entries(accountAssets)) {\n existingAssets[accountGroupId][network] = [...chainAssets];\n }\n } else {\n for (const [network, chainAssets] of Object.entries(accountAssets)) {\n existingAccountGroupAssets[network] ??= [];\n existingAccountGroupAssets[network].push(...chainAssets);\n }\n }\n }\n}\n\n/**\n * @param rawBalance - The balance of the token\n * @param decimals - The decimals of the token\n * @param marketData - The market data for the token\n * @param currencyRates - The currency rates for the token\n * @param chainId - The chain id of the token\n * @param tokenAddress - The address of the token\n * @returns The price and currency of the token in the current currency. Returns undefined if the asset is not found in the market data or currency rates.\n */\nfunction getFiatBalanceForEvmToken(\n rawBalance: Hex,\n decimals: number,\n marketData: TokenRatesControllerState['marketData'],\n currencyRates: CurrencyRateState['currencyRates'],\n chainId: Hex,\n tokenAddress: Hex,\n) {\n const tokenMarketData = marketData[chainId]?.[tokenAddress];\n\n if (!tokenMarketData) {\n return undefined;\n }\n\n const currencyRate = currencyRates[tokenMarketData.currency];\n\n if (!currencyRate?.conversionRate) {\n return undefined;\n }\n\n const fiatBalance =\n (convertHexToDecimal(rawBalance) / 10 ** decimals) *\n tokenMarketData.price *\n currencyRate.conversionRate;\n\n return {\n balance: fiatBalance,\n conversionRate: currencyRate.conversionRate,\n };\n}\n\n/**\n * @param balance - The balance of the asset, in the format { amount: string; unit: string }\n * @param balance.amount - The amount of the balance\n * @param balance.unit - The unit of the balance\n * @param multichainConversionRates - The conversion rates for the multichain asset\n * @param assetId - The asset id of the asset\n * @returns The price and currency of the token in the current currency. Returns undefined if the asset is not found in the conversion rates.\n */\nfunction getFiatBalanceForMultichainAsset(\n balance: { amount: string; unit: string },\n multichainConversionRates: MultichainAssetsRatesControllerState['conversionRates'],\n assetId: `${string}:${string}/${string}:${string}`,\n) {\n const assetMarketData = multichainConversionRates[assetId];\n\n if (!assetMarketData?.rate) {\n return undefined;\n }\n\n return {\n balance: Number(balance.amount) * Number(assetMarketData.rate),\n conversionRate: Number(assetMarketData.rate),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"token-selectors.cjs","sourceRoot":"","sources":["../../src/selectors/token-selectors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountGroupId } from '@metamask/account-api';\nimport type { AccountTreeControllerState } from '@metamask/account-tree-controller';\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkState } from '@metamask/network-controller';\nimport { hexToBigInt, parseCaipAssetType, type Hex } from '@metamask/utils';\nimport { createSelector } from 'reselect';\n\nimport {\n parseBalanceWithDecimals,\n stringifyBalanceWithDecimals,\n} from './stringify-balance';\nimport type { CurrencyRateState } from '../CurrencyRateController';\nimport type { MultichainAssetsControllerState } from '../MultichainAssetsController';\nimport type { MultichainAssetsRatesControllerState } from '../MultichainAssetsRatesController';\nimport type { MultichainBalancesControllerState } from '../MultichainBalancesController';\nimport { getNativeTokenAddress } from '../token-prices-service/codefi-v2';\nimport type { TokenBalancesControllerState } from '../TokenBalancesController';\nimport type { Token, TokenRatesControllerState } from '../TokenRatesController';\nimport type { TokensControllerState } from '../TokensController';\n\ntype AssetsByAccountGroup = {\n [accountGroupId: AccountGroupId]: AccountGroupAssets;\n};\n\nexport type AccountGroupAssets = {\n [network: string]: Asset[];\n};\n\n// If this gets out of hand with other chains, we should probably have a permanent object that defines them\nconst MULTICHAIN_NATIVE_ASSET_IDS = [\n `bip122:000000000019d6689c085ae165831e93/slip44:0`,\n `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501`,\n];\n\ntype EvmAccountType = Extract<InternalAccount['type'], `eip155:${string}`>;\ntype MultichainAccountType = Exclude<\n InternalAccount['type'],\n `eip155:${string}`\n>;\n\nexport type Asset = (\n | {\n accountType: EvmAccountType;\n assetId: Hex; // This is also the address for EVM tokens\n address: Hex;\n chainId: Hex;\n }\n | {\n accountType: MultichainAccountType;\n assetId: `${string}:${string}/${string}:${string}`;\n chainId: `${string}:${string}`;\n }\n) & {\n accountId: string;\n image: string;\n name: string;\n symbol: string;\n decimals: number;\n isNative: boolean;\n rawBalance: Hex;\n balance: string;\n fiat:\n | {\n balance: number;\n currency: string;\n conversionRate: number;\n }\n | undefined;\n};\n\nexport type AssetListState = {\n accountTree: AccountTreeControllerState['accountTree'];\n internalAccounts: AccountsControllerState['internalAccounts'];\n allTokens: TokensControllerState['allTokens'];\n allIgnoredTokens: TokensControllerState['allIgnoredTokens'];\n tokenBalances: TokenBalancesControllerState['tokenBalances'];\n marketData: TokenRatesControllerState['marketData'];\n currencyRates: CurrencyRateState['currencyRates'];\n accountsAssets: MultichainAssetsControllerState['accountsAssets'];\n allIgnoredAssets: MultichainAssetsControllerState['allIgnoredAssets'];\n assetsMetadata: MultichainAssetsControllerState['assetsMetadata'];\n balances: MultichainBalancesControllerState['balances'];\n conversionRates: MultichainAssetsRatesControllerState['conversionRates'];\n currentCurrency: CurrencyRateState['currentCurrency'];\n networkConfigurationsByChainId: NetworkState['networkConfigurationsByChainId'];\n // This is the state from AccountTrackerController. The state is different on mobile and extension\n // accountsByChainId with a balance is the only field that both clients have in common\n // This field could be removed once TokenBalancesController returns native balances\n accountsByChainId: Record<\n Hex,\n Record<\n Hex,\n {\n balance: Hex | null;\n }\n >\n >;\n};\n\nconst createAssetListSelector = createSelector.withTypes<AssetListState>();\n\nconst selectAccountsToGroupIdMap = createAssetListSelector(\n [(state) => state.accountTree, (state) => state.internalAccounts],\n (accountTree, internalAccounts) => {\n const accountsMap: Record<\n string,\n {\n accountGroupId: AccountGroupId;\n type: InternalAccount['type'];\n accountId: string;\n }\n > = {};\n for (const { groups } of Object.values(accountTree.wallets)) {\n for (const { id: accountGroupId, accounts } of Object.values(groups)) {\n for (const accountId of accounts) {\n const internalAccount = internalAccounts.accounts[accountId];\n\n accountsMap[\n // TODO: We would not need internalAccounts if evmTokens state had the accountId\n internalAccount.type.startsWith('eip155')\n ? internalAccount.address\n : accountId\n ] = { accountGroupId, type: internalAccount.type, accountId };\n }\n }\n }\n\n return accountsMap;\n },\n);\n\n// TODO: This selector will not be needed once the native balances are part of the evm tokens state\nconst selectAllEvmAccountNativeBalances = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.accountsByChainId,\n (state) => state.marketData,\n (state) => state.currencyRates,\n (state) => state.currentCurrency,\n (state) => state.networkConfigurationsByChainId,\n ],\n (\n accountsMap,\n accountsByChainId,\n marketData,\n currencyRates,\n currentCurrency,\n networkConfigurationsByChainId,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [chainId, chainAccounts] of Object.entries(\n accountsByChainId,\n ) as [Hex, Record<Hex, { balance: Hex | null }>][]) {\n for (const [accountAddress, accountBalance] of Object.entries(\n chainAccounts,\n )) {\n const account = accountsMap[accountAddress.toLowerCase()];\n if (!account) {\n continue;\n }\n\n const { accountGroupId, type, accountId } = account;\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n // If a native balance is missing, we still want to show it as 0\n const rawBalance = accountBalance.balance || '0x0';\n\n const nativeCurrency =\n networkConfigurationsByChainId[chainId]?.nativeCurrency || 'NATIVE';\n\n const nativeToken = {\n address: getNativeTokenAddress(chainId),\n decimals: 18,\n name: nativeCurrency === 'ETH' ? 'Ethereum' : nativeCurrency,\n symbol: nativeCurrency,\n // This field need to be filled at client level for now\n image: '',\n };\n\n const fiatData = getFiatBalanceForEvmToken(\n rawBalance,\n nativeToken.decimals,\n marketData,\n currencyRates,\n chainId,\n nativeToken.address,\n );\n\n groupChainAssets.push({\n accountType: type as EvmAccountType,\n assetId: nativeToken.address,\n isNative: true,\n address: nativeToken.address,\n image: nativeToken.image,\n name: nativeToken.name,\n symbol: nativeToken.symbol,\n accountId,\n decimals: nativeToken.decimals,\n rawBalance,\n balance: stringifyBalanceWithDecimals(\n hexToBigInt(rawBalance),\n nativeToken.decimals,\n ),\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllEvmAssets = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.allTokens,\n (state) => state.allIgnoredTokens,\n (state) => state.tokenBalances,\n (state) => state.marketData,\n (state) => state.currencyRates,\n (state) => state.currentCurrency,\n ],\n (\n accountsMap,\n evmTokens,\n ignoredEvmTokens,\n tokenBalances,\n marketData,\n currencyRates,\n currentCurrency,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [chainId, chainTokens] of Object.entries(evmTokens) as [\n Hex,\n { [key: string]: Token[] },\n ][]) {\n for (const [accountAddress, addressTokens] of Object.entries(\n chainTokens,\n ) as [Hex, Token[]][]) {\n for (const token of addressTokens) {\n const tokenAddress = token.address as Hex;\n const account = accountsMap[accountAddress];\n if (!account) {\n continue;\n }\n\n const { accountGroupId, type, accountId } = account;\n\n if (\n ignoredEvmTokens[chainId]?.[accountAddress]?.includes(tokenAddress)\n ) {\n continue;\n }\n\n const rawBalance =\n tokenBalances[accountAddress]?.[chainId]?.[tokenAddress];\n\n if (!rawBalance) {\n continue;\n }\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n const fiatData = getFiatBalanceForEvmToken(\n rawBalance,\n token.decimals,\n marketData,\n currencyRates,\n chainId,\n tokenAddress,\n );\n\n groupChainAssets.push({\n accountType: type as EvmAccountType,\n assetId: tokenAddress,\n isNative: false,\n address: tokenAddress,\n image: token.image ?? '',\n name: token.name ?? token.symbol,\n symbol: token.symbol,\n accountId,\n decimals: token.decimals,\n rawBalance,\n balance: stringifyBalanceWithDecimals(\n hexToBigInt(rawBalance),\n token.decimals,\n ),\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllMultichainAssets = createAssetListSelector(\n [\n selectAccountsToGroupIdMap,\n (state) => state.accountsAssets,\n (state) => state.allIgnoredAssets,\n (state) => state.assetsMetadata,\n (state) => state.balances,\n (state) => state.conversionRates,\n (state) => state.currentCurrency,\n ],\n (\n accountsMap,\n multichainTokens,\n ignoredMultichainAssets,\n multichainAssetsMetadata,\n multichainBalances,\n multichainConversionRates,\n currentCurrency,\n ) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n for (const [accountId, accountAssets] of Object.entries(multichainTokens)) {\n for (const assetId of accountAssets) {\n let caipAsset: ReturnType<typeof parseCaipAssetType>;\n try {\n caipAsset = parseCaipAssetType(assetId);\n } catch {\n // TODO: We should log this error when we have the ability to inject a logger from the client\n continue;\n }\n\n const { chainId } = caipAsset;\n const asset = `${caipAsset.assetNamespace}:${caipAsset.assetReference}`;\n\n const account = accountsMap[accountId];\n const assetMetadata = multichainAssetsMetadata[assetId];\n if (!account || !assetMetadata) {\n continue;\n }\n\n const { accountGroupId, type } = account;\n\n if (ignoredMultichainAssets?.[accountId]?.includes(assetId)) {\n continue;\n }\n\n groupAssets[accountGroupId] ??= {};\n groupAssets[accountGroupId][chainId] ??= [];\n const groupChainAssets = groupAssets[accountGroupId][chainId];\n\n const balance:\n | {\n amount: string;\n unit: string;\n }\n | undefined = multichainBalances[accountId]?.[assetId];\n\n const decimals = assetMetadata.units.find(\n (unit) =>\n unit.name === assetMetadata.name &&\n unit.symbol === assetMetadata.symbol,\n )?.decimals;\n\n if (!balance || decimals === undefined) {\n continue;\n }\n\n const rawBalance = parseBalanceWithDecimals(balance.amount, decimals);\n\n if (!rawBalance) {\n continue;\n }\n\n const fiatData = getFiatBalanceForMultichainAsset(\n balance,\n multichainConversionRates,\n assetId,\n );\n\n // TODO: We shouldn't have to rely on fallbacks for name and symbol, they should not be optional\n groupChainAssets.push({\n accountType: type as MultichainAccountType,\n assetId,\n isNative: MULTICHAIN_NATIVE_ASSET_IDS.includes(assetId),\n image: assetMetadata.iconUrl,\n name: assetMetadata.name ?? assetMetadata.symbol ?? asset,\n symbol: assetMetadata.symbol ?? asset,\n accountId,\n decimals,\n rawBalance,\n balance: balance.amount,\n fiat: fiatData\n ? {\n balance: fiatData.balance,\n currency: currentCurrency,\n conversionRate: fiatData.conversionRate,\n }\n : undefined,\n chainId,\n });\n }\n }\n\n return groupAssets;\n },\n);\n\nconst selectAllAssets = createAssetListSelector(\n [\n selectAllEvmAssets,\n selectAllMultichainAssets,\n selectAllEvmAccountNativeBalances,\n ],\n (evmAssets, multichainAssets, evmAccountNativeBalances) => {\n const groupAssets: AssetsByAccountGroup = {};\n\n mergeAssets(groupAssets, evmAssets);\n\n mergeAssets(groupAssets, multichainAssets);\n\n mergeAssets(groupAssets, evmAccountNativeBalances);\n\n return groupAssets;\n },\n);\n\nexport const selectAssetsBySelectedAccountGroup = createAssetListSelector(\n [selectAllAssets, (state) => state.accountTree],\n (groupAssets, accountTree) => {\n const { selectedAccountGroup } = accountTree;\n if (!selectedAccountGroup) {\n return {};\n }\n return groupAssets[selectedAccountGroup] || {};\n },\n);\n\n// TODO: Once native assets are part of the evm tokens state, this function can be simplified as chains will always be unique\n/**\n * Merges the new assets into the existing assets\n *\n * @param existingAssets - The existing assets\n * @param newAssets - The new assets\n */\nfunction mergeAssets(\n existingAssets: AssetsByAccountGroup,\n newAssets: AssetsByAccountGroup,\n) {\n for (const [accountGroupId, accountAssets] of Object.entries(newAssets) as [\n AccountGroupId,\n AccountGroupAssets,\n ][]) {\n const existingAccountGroupAssets = existingAssets[accountGroupId];\n\n if (!existingAccountGroupAssets) {\n existingAssets[accountGroupId] = {};\n for (const [network, chainAssets] of Object.entries(accountAssets)) {\n existingAssets[accountGroupId][network] = [...chainAssets];\n }\n } else {\n for (const [network, chainAssets] of Object.entries(accountAssets)) {\n existingAccountGroupAssets[network] ??= [];\n existingAccountGroupAssets[network].push(...chainAssets);\n }\n }\n }\n}\n\n/**\n * @param rawBalance - The balance of the token\n * @param decimals - The decimals of the token\n * @param marketData - The market data for the token\n * @param currencyRates - The currency rates for the token\n * @param chainId - The chain id of the token\n * @param tokenAddress - The address of the token\n * @returns The price and currency of the token in the current currency. Returns undefined if the asset is not found in the market data or currency rates.\n */\nfunction getFiatBalanceForEvmToken(\n rawBalance: Hex,\n decimals: number,\n marketData: TokenRatesControllerState['marketData'],\n currencyRates: CurrencyRateState['currencyRates'],\n chainId: Hex,\n tokenAddress: Hex,\n) {\n const tokenMarketData = marketData[chainId]?.[tokenAddress];\n\n if (!tokenMarketData) {\n return undefined;\n }\n\n const currencyRate = currencyRates[tokenMarketData.currency];\n\n if (!currencyRate?.conversionRate) {\n return undefined;\n }\n\n const fiatBalance =\n (convertHexToDecimal(rawBalance) / 10 ** decimals) *\n tokenMarketData.price *\n currencyRate.conversionRate;\n\n return {\n balance: fiatBalance,\n conversionRate: currencyRate.conversionRate,\n };\n}\n\n/**\n * @param balance - The balance of the asset, in the format { amount: string; unit: string }\n * @param balance.amount - The amount of the balance\n * @param balance.unit - The unit of the balance\n * @param multichainConversionRates - The conversion rates for the multichain asset\n * @param assetId - The asset id of the asset\n * @returns The price and currency of the token in the current currency. Returns undefined if the asset is not found in the conversion rates.\n */\nfunction getFiatBalanceForMultichainAsset(\n balance: { amount: string; unit: string },\n multichainConversionRates: MultichainAssetsRatesControllerState['conversionRates'],\n assetId: `${string}:${string}/${string}:${string}`,\n) {\n const assetMarketData = multichainConversionRates[assetId];\n\n if (!assetMarketData?.rate) {\n return undefined;\n }\n\n return {\n balance: Number(balance.amount) * Number(assetMarketData.rate),\n conversionRate: Number(assetMarketData.rate),\n };\n}\n"]}
|
|
@@ -52,6 +52,7 @@ export type AssetListState = {
|
|
|
52
52
|
marketData: TokenRatesControllerState['marketData'];
|
|
53
53
|
currencyRates: CurrencyRateState['currencyRates'];
|
|
54
54
|
accountsAssets: MultichainAssetsControllerState['accountsAssets'];
|
|
55
|
+
allIgnoredAssets: MultichainAssetsControllerState['allIgnoredAssets'];
|
|
55
56
|
assetsMetadata: MultichainAssetsControllerState['assetsMetadata'];
|
|
56
57
|
balances: MultichainBalancesControllerState['balances'];
|
|
57
58
|
conversionRates: MultichainAssetsRatesControllerState['conversionRates'];
|
|
@@ -300,8 +301,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
300
301
|
dependencyRecomputations: () => number;
|
|
301
302
|
resetDependencyRecomputations: () => void;
|
|
302
303
|
} & {
|
|
303
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
304
304
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
305
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
305
306
|
}, (state: AssetListState) => {
|
|
306
307
|
[chainId: `0x${string}`]: {
|
|
307
308
|
[key: string]: Token[];
|
|
@@ -320,8 +321,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
320
321
|
dependencyRecomputations: () => number;
|
|
321
322
|
resetDependencyRecomputations: () => void;
|
|
322
323
|
} & {
|
|
323
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
324
324
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
325
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
325
326
|
}, ((state: AssetListState) => AssetsByAccountGroup) & {
|
|
326
327
|
clearCache: () => void;
|
|
327
328
|
resultsCount: () => number;
|
|
@@ -334,6 +335,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
334
335
|
}>, resultFuncArgs_1: {
|
|
335
336
|
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
336
337
|
}, resultFuncArgs_2: {
|
|
338
|
+
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
339
|
+
}, resultFuncArgs_3: {
|
|
337
340
|
[asset: `${string}:${string}/${string}:${string}`]: {
|
|
338
341
|
fungible: true;
|
|
339
342
|
iconUrl: string;
|
|
@@ -345,16 +348,16 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
345
348
|
symbol?: string | undefined;
|
|
346
349
|
name?: string | undefined;
|
|
347
350
|
};
|
|
348
|
-
},
|
|
351
|
+
}, resultFuncArgs_4: {
|
|
349
352
|
[account: string]: {
|
|
350
353
|
[asset: string]: {
|
|
351
354
|
amount: string;
|
|
352
355
|
unit: string;
|
|
353
356
|
};
|
|
354
357
|
};
|
|
355
|
-
},
|
|
358
|
+
}, resultFuncArgs_5: Record<`${string}:${string}/${string}:${string}`, import("@metamask/snaps-sdk").AssetConversion & {
|
|
356
359
|
marketData?: import("@metamask/snaps-sdk").FungibleAssetMarketData | undefined;
|
|
357
|
-
}>,
|
|
360
|
+
}>, resultFuncArgs_6: string) => AssetsByAccountGroup;
|
|
358
361
|
memoizedResultFunc: ((resultFuncArgs_0: Record<string, {
|
|
359
362
|
accountGroupId: AccountGroupId;
|
|
360
363
|
type: InternalAccount['type'];
|
|
@@ -362,6 +365,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
362
365
|
}>, resultFuncArgs_1: {
|
|
363
366
|
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
364
367
|
}, resultFuncArgs_2: {
|
|
368
|
+
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
369
|
+
}, resultFuncArgs_3: {
|
|
365
370
|
[asset: `${string}:${string}/${string}:${string}`]: {
|
|
366
371
|
fungible: true;
|
|
367
372
|
iconUrl: string;
|
|
@@ -373,16 +378,16 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
373
378
|
symbol?: string | undefined;
|
|
374
379
|
name?: string | undefined;
|
|
375
380
|
};
|
|
376
|
-
},
|
|
381
|
+
}, resultFuncArgs_4: {
|
|
377
382
|
[account: string]: {
|
|
378
383
|
[asset: string]: {
|
|
379
384
|
amount: string;
|
|
380
385
|
unit: string;
|
|
381
386
|
};
|
|
382
387
|
};
|
|
383
|
-
},
|
|
388
|
+
}, resultFuncArgs_5: Record<`${string}:${string}/${string}:${string}`, import("@metamask/snaps-sdk").AssetConversion & {
|
|
384
389
|
marketData?: import("@metamask/snaps-sdk").FungibleAssetMarketData | undefined;
|
|
385
|
-
}>,
|
|
390
|
+
}>, resultFuncArgs_6: string) => AssetsByAccountGroup) & {
|
|
386
391
|
clearCache: () => void;
|
|
387
392
|
resultsCount: () => number;
|
|
388
393
|
resetResultsCount: () => void;
|
|
@@ -545,8 +550,10 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
545
550
|
dependencyRecomputations: () => number;
|
|
546
551
|
resetDependencyRecomputations: () => void;
|
|
547
552
|
} & {
|
|
548
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
549
553
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
554
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
555
|
+
}, (state: AssetListState) => {
|
|
556
|
+
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
550
557
|
}, (state: AssetListState) => {
|
|
551
558
|
[account: string]: `${string}:${string}/${string}:${string}`[];
|
|
552
559
|
}, (state: AssetListState) => {
|
|
@@ -576,8 +583,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
576
583
|
dependencyRecomputations: () => number;
|
|
577
584
|
resetDependencyRecomputations: () => void;
|
|
578
585
|
} & {
|
|
579
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
580
586
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
587
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
581
588
|
}, ((state: AssetListState) => AssetsByAccountGroup) & {
|
|
582
589
|
clearCache: () => void;
|
|
583
590
|
resultsCount: () => number;
|
|
@@ -767,8 +774,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
767
774
|
dependencyRecomputations: () => number;
|
|
768
775
|
resetDependencyRecomputations: () => void;
|
|
769
776
|
} & {
|
|
770
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
771
777
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
778
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
772
779
|
}, (state: AssetListState) => Record<`0x${string}`, Record<`0x${string}`, {
|
|
773
780
|
balance: Hex | null;
|
|
774
781
|
}>>, (state: AssetListState) => Record<`0x${string}`, Record<`0x${string}`, import("../TokenRatesController.cjs").MarketDataDetails>>, (state: AssetListState) => Record<string, {
|
|
@@ -781,16 +788,16 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
781
788
|
dependencyRecomputations: () => number;
|
|
782
789
|
resetDependencyRecomputations: () => void;
|
|
783
790
|
} & {
|
|
784
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
785
791
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
792
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
786
793
|
}];
|
|
787
794
|
recomputations: () => number;
|
|
788
795
|
resetRecomputations: () => void;
|
|
789
796
|
dependencyRecomputations: () => number;
|
|
790
797
|
resetDependencyRecomputations: () => void;
|
|
791
798
|
} & {
|
|
792
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
793
799
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
800
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
794
801
|
}, (state: AssetListState) => {
|
|
795
802
|
wallets: {
|
|
796
803
|
[walletId: `entropy:${string}`]: import("../../../account-tree-controller/src/wallet.cjs").AccountWalletEntropyObject | import("../../../account-tree-controller/src/wallet.cjs").AccountWalletSnapObject | import("../../../account-tree-controller/src/wallet.cjs").AccountWalletKeyringObject;
|
|
@@ -804,8 +811,8 @@ export declare const selectAssetsBySelectedAccountGroup: ((state: AssetListState
|
|
|
804
811
|
dependencyRecomputations: () => number;
|
|
805
812
|
resetDependencyRecomputations: () => void;
|
|
806
813
|
} & {
|
|
807
|
-
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
808
814
|
memoize: typeof import("reselect").weakMapMemoize;
|
|
815
|
+
argsMemoize: typeof import("reselect").weakMapMemoize;
|
|
809
816
|
};
|
|
810
817
|
export {};
|
|
811
818
|
//# sourceMappingURL=token-selectors.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-selectors.d.cts","sourceRoot":"","sources":["../../src/selectors/token-selectors.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"token-selectors.d.cts","sourceRoot":"","sources":["../../src/selectors/token-selectors.ts"],"names":[],"mappings":"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"}
|