@metamask/assets-controller 6.0.0 → 6.2.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 +50 -4
- package/dist/AssetsController.cjs +205 -29
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +8 -1
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +8 -1
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +206 -30
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +6 -3
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +6 -0
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +6 -0
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +7 -4
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +5 -3
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts +3 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts +3 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +5 -3
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +12 -8
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +5 -0
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +5 -0
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +12 -8
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +25 -10
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +4 -3
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +4 -3
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +25 -10
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/TokenDataSource.cjs +24 -14
- package/dist/data-sources/TokenDataSource.cjs.map +1 -1
- package/dist/data-sources/TokenDataSource.d.cts +5 -0
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
- package/dist/data-sources/TokenDataSource.d.mts +5 -0
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
- package/dist/data-sources/TokenDataSource.mjs +24 -14
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +8 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +8 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +45 -25
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts +11 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +11 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +45 -25
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.cts +6 -0
- package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.mts +6 -0
- package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -1
- package/dist/errors.cjs +25 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +25 -0
- package/dist/errors.d.cts.map +1 -0
- package/dist/errors.d.mts +25 -0
- package/dist/errors.d.mts.map +1 -0
- package/dist/errors.mjs +21 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/index.cjs +5 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +121 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts +25 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +1 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +25 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +1 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.mjs +117 -0
- package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -0
- package/dist/middlewares/RpcFallbackMiddleware.cjs +90 -0
- package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.cts +23 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.mts +23 -0
- package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -0
- package/dist/middlewares/RpcFallbackMiddleware.mjs +86 -0
- package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -0
- package/dist/middlewares/index.cjs +5 -1
- package/dist/middlewares/index.cjs.map +1 -1
- package/dist/middlewares/index.d.cts +4 -0
- package/dist/middlewares/index.d.cts.map +1 -1
- package/dist/middlewares/index.d.mts +4 -0
- package/dist/middlewares/index.d.mts.map +1 -1
- package/dist/middlewares/index.mjs +2 -0
- package/dist/middlewares/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +7 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +7 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/fetchWithTimeout.cjs +30 -0
- package/dist/utils/fetchWithTimeout.cjs.map +1 -0
- package/dist/utils/fetchWithTimeout.d.cts +11 -0
- package/dist/utils/fetchWithTimeout.d.cts.map +1 -0
- package/dist/utils/fetchWithTimeout.d.mts +11 -0
- package/dist/utils/fetchWithTimeout.d.mts.map +1 -0
- package/dist/utils/fetchWithTimeout.mjs +26 -0
- package/dist/utils/fetchWithTimeout.mjs.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.cjs +10 -8
- package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.d.cts +5 -3
- package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.d.mts +5 -3
- package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.mjs +11 -9
- package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.cjs +8 -6
- package/dist/utils/formatStateForTransactionPay.cjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.cts +2 -2
- package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.mts +2 -2
- package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.mjs +8 -6
- package/dist/utils/formatStateForTransactionPay.mjs.map +1 -1
- package/dist/utils/index.cjs +6 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +2 -0
- package/dist/utils/index.d.cts.map +1 -1
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +2 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/native-assets.cjs +63 -0
- package/dist/utils/native-assets.cjs.map +1 -0
- package/dist/utils/native-assets.d.cts +19 -0
- package/dist/utils/native-assets.d.cts.map +1 -0
- package/dist/utils/native-assets.d.mts +19 -0
- package/dist/utils/native-assets.d.mts.map +1 -0
- package/dist/utils/native-assets.mjs +58 -0
- package/dist/utils/native-assets.mjs.map +1 -0
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatStateForTransactionPay.cjs","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\nimport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\n\n/** Account with id and address for mapping state to legacy format. */\nexport type AccountForLegacyFormat = { id: string; address: string };\n\n/**\n * Legacy Token shape expected by TokensController / transaction-pay-controller.\n */\nexport type LegacyToken = {\n address: string;\n decimals: number;\n symbol: string;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * Legacy state shape that transaction-pay-controller reads from\n * TokenBalancesController, AccountTrackerController, TokensController,\n * TokenRatesController, and CurrencyRateController.\n */\nexport type TransactionPayLegacyFormat = {\n /** TokenBalancesController:getState().tokenBalances */\n tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;\n /** AccountTrackerController:getState().accountsByChainId */\n accountsByChainId: Record<\n string,\n Record<string, { balance: string; stakedBalance?: string }>\n >;\n /** TokensController:getState().allTokens (chainId -> key -> Token[]) */\n allTokens: Record<string, Record<string, LegacyToken[]>>;\n /** TokenRatesController:getState().marketData */\n marketData: BridgeExchangeRatesFormat['marketData'];\n /** CurrencyRateController:getState().currencyRates */\n currencyRates: BridgeExchangeRatesFormat['currencyRates'];\n /** CurrencyRateController:getState().currentCurrency */\n currentCurrency: string;\n};\n\nfunction amountToHex(amount: string): `0x${string}` {\n const hexString = BigInt(amount).toString(16);\n return `0x${hexString}`;\n}\n\nfunction getAmountFromBalance(balance: AssetBalance): string {\n return typeof balance === 'object' && balance !== null && 'amount' in balance\n ? String((balance as { amount: string }).amount)\n : '0';\n}\n\n/**\n * Converts AssetsController state into the legacy format consumed by\n * transaction-pay-controller (TokenBalancesController, AccountTrackerController,\n * TokensController, TokenRatesController, CurrencyRateController shapes).\n *\n * @param params - Conversion parameters.\n * @param params.assetsBalance - Per-account balances by asset ID.\n * @param params.assetsInfo - Metadata by asset ID.\n * @param params.assetsPrice - Prices by asset ID.\n * @param params.selectedCurrency - Current currency code.\n * @param params.accounts - List of accounts (id + address) to map state for.\n * @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.\n * @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nexport function formatStateForTransactionPay(params: {\n assetsBalance: Record<string, Record<string, AssetBalance>>;\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n accounts: AccountForLegacyFormat[];\n nativeAssetIdentifiers?: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n}): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers = {},\n networkConfigurationsByChainId = {},\n } = params;\n\n const tokenBalances: TransactionPayLegacyFormat['tokenBalances'] = {};\n const accountsByChainId: TransactionPayLegacyFormat['accountsByChainId'] = {};\n const allTokensByChain: Record<string, LegacyToken[]> = {};\n\n for (const account of accounts) {\n const accountAddressLower = account.address.toLowerCase();\n const accountBalances = assetsBalance[account.id];\n if (!accountBalances) {\n continue;\n }\n\n for (const [assetId, balance] of Object.entries(accountBalances)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const amount = getAmountFromBalance(balance);\n const balanceHex = amountToHex(amount);\n\n if (parsed.assetNamespace === 'slip44') {\n const nativeAddress =\n '0x0000000000000000000000000000000000000000' as const;\n const checksumAddress = toChecksumAddress(account.address);\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =\n balanceHex;\n accountsByChainId[chainIdHex] ??= {};\n accountsByChainId[chainIdHex][checksumAddress] = {\n balance: balanceHex,\n };\n } else if (parsed.assetNamespace === 'erc20') {\n const tokenAddress = toChecksumAddress(String(parsed.assetReference));\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =\n balanceHex;\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n }\n\n for (const [assetId, metadata] of Object.entries(assetsInfo)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const address =\n parsed.assetNamespace === 'slip44'\n ? '0x0000000000000000000000000000000000000000'\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: metadata.decimals,\n symbol: metadata.symbol,\n name: metadata.name,\n };\n allTokensByChain[chainIdHex] ??= [];\n if (\n !allTokensByChain[chainIdHex].some(\n (existing) =>\n existing.address.toLowerCase() === address.toLowerCase(),\n )\n ) {\n allTokensByChain[chainIdHex].push(token);\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n const allTokens: TransactionPayLegacyFormat['allTokens'] = {};\n for (const [chainId, tokens] of Object.entries(allTokensByChain)) {\n allTokens[chainId] = { '': tokens };\n }\n\n const exchangeRates = formatExchangeRatesForBridge({\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId,\n });\n\n return {\n tokenBalances,\n accountsByChainId,\n allTokens,\n marketData: exchangeRates.marketData,\n currencyRates: exchangeRates.currencyRates,\n currentCurrency: exchangeRates.currentCurrency,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.cjs","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { getNativeTokenAddress } from '@metamask/assets-controllers';\nimport { numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\nimport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\n\n/** Account with id and address for mapping state to legacy format. */\nexport type AccountForLegacyFormat = { id: string; address: string };\n\n/**\n * Legacy Token shape expected by TokensController / transaction-pay-controller.\n */\nexport type LegacyToken = {\n address: string;\n decimals: number;\n symbol: string;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * Legacy state shape that transaction-pay-controller reads from\n * TokenBalancesController, AccountTrackerController, TokensController,\n * TokenRatesController, and CurrencyRateController.\n */\nexport type TransactionPayLegacyFormat = {\n /** TokenBalancesController:getState().tokenBalances */\n tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;\n /** AccountTrackerController:getState().accountsByChainId */\n accountsByChainId: Record<\n string,\n Record<string, { balance: string; stakedBalance?: string }>\n >;\n /** TokensController:getState().allTokens (chainId -> key -> Token[]) */\n allTokens: Record<string, Record<string, LegacyToken[]>>;\n /** TokenRatesController:getState().marketData */\n marketData: BridgeExchangeRatesFormat['marketData'];\n /** CurrencyRateController:getState().currencyRates */\n currencyRates: BridgeExchangeRatesFormat['currencyRates'];\n /** CurrencyRateController:getState().currentCurrency */\n currentCurrency: string;\n};\n\nfunction amountToHex(amount: string): `0x${string}` {\n const hexString = BigInt(amount).toString(16);\n return `0x${hexString}`;\n}\n\nfunction getAmountFromBalance(balance: AssetBalance): string {\n return typeof balance === 'object' && balance !== null && 'amount' in balance\n ? String((balance as { amount: string }).amount)\n : '0';\n}\n\n/**\n * Converts AssetsController state into the legacy format consumed by\n * transaction-pay-controller (TokenBalancesController, AccountTrackerController,\n * TokensController, TokenRatesController, CurrencyRateController shapes).\n *\n * @param params - Conversion parameters.\n * @param params.assetsBalance - Per-account balances by asset ID.\n * @param params.assetsInfo - Metadata by asset ID.\n * @param params.assetsPrice - Prices by asset ID.\n * @param params.selectedCurrency - Current currency code.\n * @param params.accounts - List of accounts (id + address) to map state for.\n * @param params.nativeAssetIdentifiers - Map of CAIP-2 chain ID to native asset ID. Used for EVM native lookups.\n * @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nexport function formatStateForTransactionPay(params: {\n assetsBalance: Record<string, Record<string, AssetBalance>>;\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n accounts: AccountForLegacyFormat[];\n nativeAssetIdentifiers: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n}): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId = {},\n } = params;\n\n const tokenBalances: TransactionPayLegacyFormat['tokenBalances'] = {};\n const accountsByChainId: TransactionPayLegacyFormat['accountsByChainId'] = {};\n const allTokensByChain: Record<string, LegacyToken[]> = {};\n\n for (const account of accounts) {\n const accountAddressLower = account.address.toLowerCase();\n const accountBalances = assetsBalance[account.id];\n if (!accountBalances) {\n continue;\n }\n\n for (const [assetId, balance] of Object.entries(accountBalances)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const amount = getAmountFromBalance(balance);\n const balanceHex = amountToHex(amount);\n\n if (assetsInfo[assetId]?.type === 'native') {\n const nativeAddress = toChecksumAddress(\n getNativeTokenAddress(chainIdHex),\n );\n const checksumAddress = toChecksumAddress(account.address);\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =\n balanceHex;\n accountsByChainId[chainIdHex] ??= {};\n accountsByChainId[chainIdHex][checksumAddress] = {\n balance: balanceHex,\n };\n } else if (parsed.assetNamespace === 'erc20') {\n const tokenAddress = toChecksumAddress(String(parsed.assetReference));\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =\n balanceHex;\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n }\n\n for (const [assetId, metadata] of Object.entries(assetsInfo)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const address =\n metadata.type === 'native'\n ? getNativeTokenAddress(chainIdHex)\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: metadata.decimals,\n symbol: metadata.symbol,\n name: metadata.name,\n };\n allTokensByChain[chainIdHex] ??= [];\n if (\n !allTokensByChain[chainIdHex].some(\n (existing) =>\n existing.address.toLowerCase() === address.toLowerCase(),\n )\n ) {\n allTokensByChain[chainIdHex].push(token);\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n const allTokens: TransactionPayLegacyFormat['allTokens'] = {};\n for (const [chainId, tokens] of Object.entries(allTokensByChain)) {\n allTokens[chainId] = { '': tokens };\n }\n\n const exchangeRates = formatExchangeRatesForBridge({\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId,\n });\n\n return {\n tokenBalances,\n accountsByChainId,\n allTokens,\n marketData: exchangeRates.marketData,\n currencyRates: exchangeRates.currencyRates,\n currentCurrency: exchangeRates.currentCurrency,\n };\n}\n"]}
|
|
@@ -48,7 +48,7 @@ export type TransactionPayLegacyFormat = {
|
|
|
48
48
|
* @param params.assetsPrice - Prices by asset ID.
|
|
49
49
|
* @param params.selectedCurrency - Current currency code.
|
|
50
50
|
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
51
|
-
* @param params.nativeAssetIdentifiers -
|
|
51
|
+
* @param params.nativeAssetIdentifiers - Map of CAIP-2 chain ID to native asset ID. Used for EVM native lookups.
|
|
52
52
|
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
53
53
|
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
54
54
|
*/
|
|
@@ -58,7 +58,7 @@ export declare function formatStateForTransactionPay(params: {
|
|
|
58
58
|
assetsPrice: Record<string, AssetPrice>;
|
|
59
59
|
selectedCurrency: string;
|
|
60
60
|
accounts: AccountForLegacyFormat[];
|
|
61
|
-
nativeAssetIdentifiers
|
|
61
|
+
nativeAssetIdentifiers: Record<string, string>;
|
|
62
62
|
networkConfigurationsByChainId?: Record<string, {
|
|
63
63
|
nativeCurrency?: string;
|
|
64
64
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatStateForTransactionPay.d.cts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.cts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAiB;AAElB,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAAuC;AAEhF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CACvB,MAAM,EACN,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAC5D,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,iDAAiD;IACjD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,sDAAsD;IACtD,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC1D,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAaF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,GAAG,0BAA0B,CAgH7B"}
|
|
@@ -48,7 +48,7 @@ export type TransactionPayLegacyFormat = {
|
|
|
48
48
|
* @param params.assetsPrice - Prices by asset ID.
|
|
49
49
|
* @param params.selectedCurrency - Current currency code.
|
|
50
50
|
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
51
|
-
* @param params.nativeAssetIdentifiers -
|
|
51
|
+
* @param params.nativeAssetIdentifiers - Map of CAIP-2 chain ID to native asset ID. Used for EVM native lookups.
|
|
52
52
|
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
53
53
|
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
54
54
|
*/
|
|
@@ -58,7 +58,7 @@ export declare function formatStateForTransactionPay(params: {
|
|
|
58
58
|
assetsPrice: Record<string, AssetPrice>;
|
|
59
59
|
selectedCurrency: string;
|
|
60
60
|
accounts: AccountForLegacyFormat[];
|
|
61
|
-
nativeAssetIdentifiers
|
|
61
|
+
nativeAssetIdentifiers: Record<string, string>;
|
|
62
62
|
networkConfigurationsByChainId?: Record<string, {
|
|
63
63
|
nativeCurrency?: string;
|
|
64
64
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatStateForTransactionPay.d.mts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.mts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAiB;AAElB,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAAuC;AAEhF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CACvB,MAAM,EACN,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAC5D,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACzD,iDAAiD;IACjD,UAAU,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACpD,sDAAsD;IACtD,aAAa,EAAE,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC1D,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAaF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,GAAG,0BAA0B,CAgH7B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toChecksumAddress } from "@ethereumjs/util";
|
|
2
|
+
import { getNativeTokenAddress } from "@metamask/assets-controllers";
|
|
2
3
|
import { numberToHex } from "@metamask/utils";
|
|
3
4
|
import { parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
|
|
4
5
|
import { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
|
|
@@ -22,13 +23,13 @@ function getAmountFromBalance(balance) {
|
|
|
22
23
|
* @param params.assetsPrice - Prices by asset ID.
|
|
23
24
|
* @param params.selectedCurrency - Current currency code.
|
|
24
25
|
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
25
|
-
* @param params.nativeAssetIdentifiers -
|
|
26
|
+
* @param params.nativeAssetIdentifiers - Map of CAIP-2 chain ID to native asset ID. Used for EVM native lookups.
|
|
26
27
|
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
27
28
|
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
28
29
|
*/
|
|
29
30
|
export function formatStateForTransactionPay(params) {
|
|
30
31
|
var _a, _b;
|
|
31
|
-
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers
|
|
32
|
+
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers, networkConfigurationsByChainId = {}, } = params;
|
|
32
33
|
const tokenBalances = {};
|
|
33
34
|
const accountsByChainId = {};
|
|
34
35
|
const allTokensByChain = {};
|
|
@@ -48,8 +49,8 @@ export function formatStateForTransactionPay(params) {
|
|
|
48
49
|
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
49
50
|
const amount = getAmountFromBalance(balance);
|
|
50
51
|
const balanceHex = amountToHex(amount);
|
|
51
|
-
if (
|
|
52
|
-
const nativeAddress =
|
|
52
|
+
if (assetsInfo[assetId]?.type === 'native') {
|
|
53
|
+
const nativeAddress = toChecksumAddress(getNativeTokenAddress(chainIdHex));
|
|
53
54
|
const checksumAddress = toChecksumAddress(account.address);
|
|
54
55
|
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
55
56
|
(_a = tokenBalances[accountAddressLower])[chainIdHex] ?? (_a[chainIdHex] = {});
|
|
@@ -81,8 +82,8 @@ export function formatStateForTransactionPay(params) {
|
|
|
81
82
|
continue;
|
|
82
83
|
}
|
|
83
84
|
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
84
|
-
const address =
|
|
85
|
-
?
|
|
85
|
+
const address = metadata.type === 'native'
|
|
86
|
+
? getNativeTokenAddress(chainIdHex)
|
|
86
87
|
: toChecksumAddress(String(parsed.assetReference));
|
|
87
88
|
const token = {
|
|
88
89
|
address,
|
|
@@ -104,6 +105,7 @@ export function formatStateForTransactionPay(params) {
|
|
|
104
105
|
allTokens[chainId] = { '': tokens };
|
|
105
106
|
}
|
|
106
107
|
const exchangeRates = formatExchangeRatesForBridge({
|
|
108
|
+
assetsInfo,
|
|
107
109
|
assetsPrice,
|
|
108
110
|
selectedCurrency,
|
|
109
111
|
nativeAssetIdentifiers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatStateForTransactionPay.mjs","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\nimport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\n\n/** Account with id and address for mapping state to legacy format. */\nexport type AccountForLegacyFormat = { id: string; address: string };\n\n/**\n * Legacy Token shape expected by TokensController / transaction-pay-controller.\n */\nexport type LegacyToken = {\n address: string;\n decimals: number;\n symbol: string;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * Legacy state shape that transaction-pay-controller reads from\n * TokenBalancesController, AccountTrackerController, TokensController,\n * TokenRatesController, and CurrencyRateController.\n */\nexport type TransactionPayLegacyFormat = {\n /** TokenBalancesController:getState().tokenBalances */\n tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;\n /** AccountTrackerController:getState().accountsByChainId */\n accountsByChainId: Record<\n string,\n Record<string, { balance: string; stakedBalance?: string }>\n >;\n /** TokensController:getState().allTokens (chainId -> key -> Token[]) */\n allTokens: Record<string, Record<string, LegacyToken[]>>;\n /** TokenRatesController:getState().marketData */\n marketData: BridgeExchangeRatesFormat['marketData'];\n /** CurrencyRateController:getState().currencyRates */\n currencyRates: BridgeExchangeRatesFormat['currencyRates'];\n /** CurrencyRateController:getState().currentCurrency */\n currentCurrency: string;\n};\n\nfunction amountToHex(amount: string): `0x${string}` {\n const hexString = BigInt(amount).toString(16);\n return `0x${hexString}`;\n}\n\nfunction getAmountFromBalance(balance: AssetBalance): string {\n return typeof balance === 'object' && balance !== null && 'amount' in balance\n ? String((balance as { amount: string }).amount)\n : '0';\n}\n\n/**\n * Converts AssetsController state into the legacy format consumed by\n * transaction-pay-controller (TokenBalancesController, AccountTrackerController,\n * TokensController, TokenRatesController, CurrencyRateController shapes).\n *\n * @param params - Conversion parameters.\n * @param params.assetsBalance - Per-account balances by asset ID.\n * @param params.assetsInfo - Metadata by asset ID.\n * @param params.assetsPrice - Prices by asset ID.\n * @param params.selectedCurrency - Current currency code.\n * @param params.accounts - List of accounts (id + address) to map state for.\n * @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.\n * @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nexport function formatStateForTransactionPay(params: {\n assetsBalance: Record<string, Record<string, AssetBalance>>;\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n accounts: AccountForLegacyFormat[];\n nativeAssetIdentifiers?: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n}): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers = {},\n networkConfigurationsByChainId = {},\n } = params;\n\n const tokenBalances: TransactionPayLegacyFormat['tokenBalances'] = {};\n const accountsByChainId: TransactionPayLegacyFormat['accountsByChainId'] = {};\n const allTokensByChain: Record<string, LegacyToken[]> = {};\n\n for (const account of accounts) {\n const accountAddressLower = account.address.toLowerCase();\n const accountBalances = assetsBalance[account.id];\n if (!accountBalances) {\n continue;\n }\n\n for (const [assetId, balance] of Object.entries(accountBalances)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const amount = getAmountFromBalance(balance);\n const balanceHex = amountToHex(amount);\n\n if (parsed.assetNamespace === 'slip44') {\n const nativeAddress =\n '0x0000000000000000000000000000000000000000' as const;\n const checksumAddress = toChecksumAddress(account.address);\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =\n balanceHex;\n accountsByChainId[chainIdHex] ??= {};\n accountsByChainId[chainIdHex][checksumAddress] = {\n balance: balanceHex,\n };\n } else if (parsed.assetNamespace === 'erc20') {\n const tokenAddress = toChecksumAddress(String(parsed.assetReference));\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =\n balanceHex;\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n }\n\n for (const [assetId, metadata] of Object.entries(assetsInfo)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const address =\n parsed.assetNamespace === 'slip44'\n ? '0x0000000000000000000000000000000000000000'\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: metadata.decimals,\n symbol: metadata.symbol,\n name: metadata.name,\n };\n allTokensByChain[chainIdHex] ??= [];\n if (\n !allTokensByChain[chainIdHex].some(\n (existing) =>\n existing.address.toLowerCase() === address.toLowerCase(),\n )\n ) {\n allTokensByChain[chainIdHex].push(token);\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n const allTokens: TransactionPayLegacyFormat['allTokens'] = {};\n for (const [chainId, tokens] of Object.entries(allTokensByChain)) {\n allTokens[chainId] = { '': tokens };\n }\n\n const exchangeRates = formatExchangeRatesForBridge({\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId,\n });\n\n return {\n tokenBalances,\n accountsByChainId,\n allTokens,\n marketData: exchangeRates.marketData,\n currencyRates: exchangeRates.currencyRates,\n currentCurrency: exchangeRates.currentCurrency,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.mjs","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { getNativeTokenAddress } from '@metamask/assets-controllers';\nimport { numberToHex } from '@metamask/utils';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\nimport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\n\n/** Account with id and address for mapping state to legacy format. */\nexport type AccountForLegacyFormat = { id: string; address: string };\n\n/**\n * Legacy Token shape expected by TokensController / transaction-pay-controller.\n */\nexport type LegacyToken = {\n address: string;\n decimals: number;\n symbol: string;\n name?: string;\n [key: string]: unknown;\n};\n\n/**\n * Legacy state shape that transaction-pay-controller reads from\n * TokenBalancesController, AccountTrackerController, TokensController,\n * TokenRatesController, and CurrencyRateController.\n */\nexport type TransactionPayLegacyFormat = {\n /** TokenBalancesController:getState().tokenBalances */\n tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;\n /** AccountTrackerController:getState().accountsByChainId */\n accountsByChainId: Record<\n string,\n Record<string, { balance: string; stakedBalance?: string }>\n >;\n /** TokensController:getState().allTokens (chainId -> key -> Token[]) */\n allTokens: Record<string, Record<string, LegacyToken[]>>;\n /** TokenRatesController:getState().marketData */\n marketData: BridgeExchangeRatesFormat['marketData'];\n /** CurrencyRateController:getState().currencyRates */\n currencyRates: BridgeExchangeRatesFormat['currencyRates'];\n /** CurrencyRateController:getState().currentCurrency */\n currentCurrency: string;\n};\n\nfunction amountToHex(amount: string): `0x${string}` {\n const hexString = BigInt(amount).toString(16);\n return `0x${hexString}`;\n}\n\nfunction getAmountFromBalance(balance: AssetBalance): string {\n return typeof balance === 'object' && balance !== null && 'amount' in balance\n ? String((balance as { amount: string }).amount)\n : '0';\n}\n\n/**\n * Converts AssetsController state into the legacy format consumed by\n * transaction-pay-controller (TokenBalancesController, AccountTrackerController,\n * TokensController, TokenRatesController, CurrencyRateController shapes).\n *\n * @param params - Conversion parameters.\n * @param params.assetsBalance - Per-account balances by asset ID.\n * @param params.assetsInfo - Metadata by asset ID.\n * @param params.assetsPrice - Prices by asset ID.\n * @param params.selectedCurrency - Current currency code.\n * @param params.accounts - List of accounts (id + address) to map state for.\n * @param params.nativeAssetIdentifiers - Map of CAIP-2 chain ID to native asset ID. Used for EVM native lookups.\n * @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).\n * @returns Legacy-compatible state for transaction-pay-controller.\n */\nexport function formatStateForTransactionPay(params: {\n assetsBalance: Record<string, Record<string, AssetBalance>>;\n assetsInfo: Record<string, AssetMetadata>;\n assetsPrice: Record<string, AssetPrice>;\n selectedCurrency: string;\n accounts: AccountForLegacyFormat[];\n nativeAssetIdentifiers: Record<string, string>;\n networkConfigurationsByChainId?: Record<string, { nativeCurrency?: string }>;\n}): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId = {},\n } = params;\n\n const tokenBalances: TransactionPayLegacyFormat['tokenBalances'] = {};\n const accountsByChainId: TransactionPayLegacyFormat['accountsByChainId'] = {};\n const allTokensByChain: Record<string, LegacyToken[]> = {};\n\n for (const account of accounts) {\n const accountAddressLower = account.address.toLowerCase();\n const accountBalances = assetsBalance[account.id];\n if (!accountBalances) {\n continue;\n }\n\n for (const [assetId, balance] of Object.entries(accountBalances)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const amount = getAmountFromBalance(balance);\n const balanceHex = amountToHex(amount);\n\n if (assetsInfo[assetId]?.type === 'native') {\n const nativeAddress = toChecksumAddress(\n getNativeTokenAddress(chainIdHex),\n );\n const checksumAddress = toChecksumAddress(account.address);\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =\n balanceHex;\n accountsByChainId[chainIdHex] ??= {};\n accountsByChainId[chainIdHex][checksumAddress] = {\n balance: balanceHex,\n };\n } else if (parsed.assetNamespace === 'erc20') {\n const tokenAddress = toChecksumAddress(String(parsed.assetReference));\n tokenBalances[accountAddressLower] ??= {};\n tokenBalances[accountAddressLower][chainIdHex] ??= {};\n tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =\n balanceHex;\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n }\n\n for (const [assetId, metadata] of Object.entries(assetsInfo)) {\n try {\n const parsed = parseCaipAssetType(assetId as Caip19AssetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n if (chainIdParsed.namespace !== 'eip155') {\n continue;\n }\n const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));\n const address =\n metadata.type === 'native'\n ? getNativeTokenAddress(chainIdHex)\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: metadata.decimals,\n symbol: metadata.symbol,\n name: metadata.name,\n };\n allTokensByChain[chainIdHex] ??= [];\n if (\n !allTokensByChain[chainIdHex].some(\n (existing) =>\n existing.address.toLowerCase() === address.toLowerCase(),\n )\n ) {\n allTokensByChain[chainIdHex].push(token);\n }\n } catch {\n // Skip malformed asset IDs\n }\n }\n\n const allTokens: TransactionPayLegacyFormat['allTokens'] = {};\n for (const [chainId, tokens] of Object.entries(allTokensByChain)) {\n allTokens[chainId] = { '': tokens };\n }\n\n const exchangeRates = formatExchangeRatesForBridge({\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n nativeAssetIdentifiers,\n networkConfigurationsByChainId,\n });\n\n return {\n tokenBalances,\n accountsByChainId,\n allTokens,\n marketData: exchangeRates.marketData,\n currencyRates: exchangeRates.currencyRates,\n currentCurrency: exchangeRates.currentCurrency,\n };\n}\n"]}
|
package/dist/utils/index.cjs
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.formatStateForTransactionPay = exports.formatExchangeRatesForBridge = exports.normalizeAssetId = void 0;
|
|
3
|
+
exports.buildNativeAssetsFromApi = exports.buildNativeAssetsFromConstant = exports.formatStateForTransactionPay = exports.formatExchangeRatesForBridge = exports.normalizeAssetId = exports.fetchWithTimeout = void 0;
|
|
4
|
+
var fetchWithTimeout_1 = require("./fetchWithTimeout.cjs");
|
|
5
|
+
Object.defineProperty(exports, "fetchWithTimeout", { enumerable: true, get: function () { return fetchWithTimeout_1.fetchWithTimeout; } });
|
|
4
6
|
var normalizeAssetId_1 = require("./normalizeAssetId.cjs");
|
|
5
7
|
Object.defineProperty(exports, "normalizeAssetId", { enumerable: true, get: function () { return normalizeAssetId_1.normalizeAssetId; } });
|
|
6
8
|
var formatExchangeRatesForBridge_1 = require("./formatExchangeRatesForBridge.cjs");
|
|
7
9
|
Object.defineProperty(exports, "formatExchangeRatesForBridge", { enumerable: true, get: function () { return formatExchangeRatesForBridge_1.formatExchangeRatesForBridge; } });
|
|
8
10
|
var formatStateForTransactionPay_1 = require("./formatStateForTransactionPay.cjs");
|
|
9
11
|
Object.defineProperty(exports, "formatStateForTransactionPay", { enumerable: true, get: function () { return formatStateForTransactionPay_1.formatStateForTransactionPay; } });
|
|
12
|
+
var native_assets_1 = require("./native-assets.cjs");
|
|
13
|
+
Object.defineProperty(exports, "buildNativeAssetsFromConstant", { enumerable: true, get: function () { return native_assets_1.buildNativeAssetsFromConstant; } });
|
|
14
|
+
Object.defineProperty(exports, "buildNativeAssetsFromApi", { enumerable: true, get: function () { return native_assets_1.buildNativeAssetsFromApi; } });
|
|
10
15
|
//# sourceMappingURL=index.cjs.map
|
package/dist/utils/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AACrC,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,2DAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AACrC,mFAA8E;AAArE,4IAAA,4BAA4B,OAAA;AAOrC,qDAGyB;AAFvB,8HAAA,6BAA6B,OAAA;AAC7B,yHAAA,wBAAwB,OAAA","sourcesContent":["export { fetchWithTimeout } from './fetchWithTimeout';\nexport { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\nexport {\n buildNativeAssetsFromConstant,\n buildNativeAssetsFromApi,\n} from './native-assets';\n"]}
|
package/dist/utils/index.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
export { fetchWithTimeout } from "./fetchWithTimeout.cjs";
|
|
1
2
|
export { normalizeAssetId } from "./normalizeAssetId.cjs";
|
|
2
3
|
export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.cjs";
|
|
3
4
|
export { formatStateForTransactionPay } from "./formatStateForTransactionPay.cjs";
|
|
4
5
|
export type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.cjs";
|
|
5
6
|
export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.cjs";
|
|
7
|
+
export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi, } from "./native-assets.cjs";
|
|
6
8
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC;AACxC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,4BAAwB"}
|
package/dist/utils/index.d.mts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
export { fetchWithTimeout } from "./fetchWithTimeout.mjs";
|
|
1
2
|
export { normalizeAssetId } from "./normalizeAssetId.mjs";
|
|
2
3
|
export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
|
|
3
4
|
export { formatStateForTransactionPay } from "./formatStateForTransactionPay.mjs";
|
|
4
5
|
export type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.mjs";
|
|
5
6
|
export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.mjs";
|
|
7
|
+
export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi, } from "./native-assets.mjs";
|
|
6
8
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,YAAY,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC;AACxC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,GACzB,4BAAwB"}
|
package/dist/utils/index.mjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
export { fetchWithTimeout } from "./fetchWithTimeout.mjs";
|
|
1
2
|
export { normalizeAssetId } from "./normalizeAssetId.mjs";
|
|
2
3
|
export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
|
|
3
4
|
export { formatStateForTransactionPay } from "./formatStateForTransactionPay.mjs";
|
|
5
|
+
export { buildNativeAssetsFromConstant, buildNativeAssetsFromApi } from "./native-assets.mjs";
|
|
4
6
|
//# sourceMappingURL=index.mjs.map
|
package/dist/utils/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC","sourcesContent":["export { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AACtD,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,2CAAuC;AAO9E,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACzB,4BAAwB","sourcesContent":["export { fetchWithTimeout } from './fetchWithTimeout';\nexport { normalizeAssetId } from './normalizeAssetId';\nexport { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nexport { formatStateForTransactionPay } from './formatStateForTransactionPay';\nexport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\nexport {\n buildNativeAssetsFromConstant,\n buildNativeAssetsFromApi,\n} from './native-assets';\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildNativeAssetsFromApi = exports.buildNativeAssetsFromConstant = void 0;
|
|
4
|
+
const assets_controllers_1 = require("@metamask/assets-controllers");
|
|
5
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
|
+
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
|
|
8
|
+
/**
|
|
9
|
+
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
10
|
+
*
|
|
11
|
+
* @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
|
|
12
|
+
*/
|
|
13
|
+
function buildNativeAssetsFromConstant() {
|
|
14
|
+
const nativeAssetsMap = {};
|
|
15
|
+
for (const nativeAssetId of Object.values(assets_controllers_1.SPOT_PRICES_SUPPORT_INFO)) {
|
|
16
|
+
const { chainId } = (0, utils_1.parseCaipAssetType)(nativeAssetId);
|
|
17
|
+
nativeAssetsMap[chainId] = nativeAssetId;
|
|
18
|
+
}
|
|
19
|
+
return nativeAssetsMap;
|
|
20
|
+
}
|
|
21
|
+
exports.buildNativeAssetsFromConstant = buildNativeAssetsFromConstant;
|
|
22
|
+
/**
|
|
23
|
+
* Fetches chain data from chainid.network and merges it with the seed
|
|
24
|
+
* native asset map built from {@link buildNativeAssetsFromConstant}.
|
|
25
|
+
*
|
|
26
|
+
* Remote entries only fill gaps — chains already present in the seed map
|
|
27
|
+
* are never overwritten. Invalid entries (missing/negative chainId or slip44)
|
|
28
|
+
* are silently skipped.
|
|
29
|
+
*
|
|
30
|
+
* @returns The merged native asset map.
|
|
31
|
+
*/
|
|
32
|
+
async function buildNativeAssetsFromApi() {
|
|
33
|
+
const nativeAssetsMap = buildNativeAssetsFromConstant();
|
|
34
|
+
try {
|
|
35
|
+
const chains = await (0, controller_utils_1.fetchWithErrorHandling)({
|
|
36
|
+
url: CHAINID_NETWORK_URL,
|
|
37
|
+
timeout: 10000,
|
|
38
|
+
});
|
|
39
|
+
if (chains && Array.isArray(chains)) {
|
|
40
|
+
for (const chain of chains) {
|
|
41
|
+
if (!chain.chainId ||
|
|
42
|
+
!chain.slip44 ||
|
|
43
|
+
!Number.isInteger(chain.chainId) ||
|
|
44
|
+
chain.chainId < 1 ||
|
|
45
|
+
!Number.isInteger(chain.slip44) ||
|
|
46
|
+
chain.slip44 < 1) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const caipChainId = `eip155:${chain.chainId}`;
|
|
50
|
+
if (!nativeAssetsMap[caipChainId]) {
|
|
51
|
+
nativeAssetsMap[caipChainId] =
|
|
52
|
+
`eip155:${chain.chainId}/slip44:${chain.slip44}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Non-fatal: caller should fall back to the seed map.
|
|
59
|
+
}
|
|
60
|
+
return nativeAssetsMap;
|
|
61
|
+
}
|
|
62
|
+
exports.buildNativeAssetsFromApi = buildNativeAssetsFromApi;
|
|
63
|
+
//# sourceMappingURL=native-assets.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-assets.cjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AACxE,iEAAoE;AACpE,2CAAqD;AAIrD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,SAAgB,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,6CAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,0BAAkB,EAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAVD,sEAUC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,IAAA,yCAAsB,EAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AArCD,4DAqCC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = nativeAssetId;\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Caip19AssetId, ChainId } from "../types.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
4
|
+
*
|
|
5
|
+
* @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildNativeAssetsFromConstant(): Record<ChainId, Caip19AssetId>;
|
|
8
|
+
/**
|
|
9
|
+
* Fetches chain data from chainid.network and merges it with the seed
|
|
10
|
+
* native asset map built from {@link buildNativeAssetsFromConstant}.
|
|
11
|
+
*
|
|
12
|
+
* Remote entries only fill gaps — chains already present in the seed map
|
|
13
|
+
* are never overwritten. Invalid entries (missing/negative chainId or slip44)
|
|
14
|
+
* are silently skipped.
|
|
15
|
+
*
|
|
16
|
+
* @returns The merged native asset map.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildNativeAssetsFromApi(): Promise<Record<ChainId, Caip19AssetId>>;
|
|
19
|
+
//# sourceMappingURL=native-assets.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-assets.d.cts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AASvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Caip19AssetId, ChainId } from "../types.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
4
|
+
*
|
|
5
|
+
* @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildNativeAssetsFromConstant(): Record<ChainId, Caip19AssetId>;
|
|
8
|
+
/**
|
|
9
|
+
* Fetches chain data from chainid.network and merges it with the seed
|
|
10
|
+
* native asset map built from {@link buildNativeAssetsFromConstant}.
|
|
11
|
+
*
|
|
12
|
+
* Remote entries only fill gaps — chains already present in the seed map
|
|
13
|
+
* are never overwritten. Invalid entries (missing/negative chainId or slip44)
|
|
14
|
+
* are silently skipped.
|
|
15
|
+
*
|
|
16
|
+
* @returns The merged native asset map.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildNativeAssetsFromApi(): Promise<Record<ChainId, Caip19AssetId>>;
|
|
19
|
+
//# sourceMappingURL=native-assets.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-assets.d.mts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AASvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SPOT_PRICES_SUPPORT_INFO } from "@metamask/assets-controllers";
|
|
2
|
+
import { fetchWithErrorHandling } from "@metamask/controller-utils";
|
|
3
|
+
import { parseCaipAssetType } from "@metamask/utils";
|
|
4
|
+
const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
|
|
5
|
+
/**
|
|
6
|
+
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
7
|
+
*
|
|
8
|
+
* @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.
|
|
9
|
+
*/
|
|
10
|
+
export function buildNativeAssetsFromConstant() {
|
|
11
|
+
const nativeAssetsMap = {};
|
|
12
|
+
for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {
|
|
13
|
+
const { chainId } = parseCaipAssetType(nativeAssetId);
|
|
14
|
+
nativeAssetsMap[chainId] = nativeAssetId;
|
|
15
|
+
}
|
|
16
|
+
return nativeAssetsMap;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetches chain data from chainid.network and merges it with the seed
|
|
20
|
+
* native asset map built from {@link buildNativeAssetsFromConstant}.
|
|
21
|
+
*
|
|
22
|
+
* Remote entries only fill gaps — chains already present in the seed map
|
|
23
|
+
* are never overwritten. Invalid entries (missing/negative chainId or slip44)
|
|
24
|
+
* are silently skipped.
|
|
25
|
+
*
|
|
26
|
+
* @returns The merged native asset map.
|
|
27
|
+
*/
|
|
28
|
+
export async function buildNativeAssetsFromApi() {
|
|
29
|
+
const nativeAssetsMap = buildNativeAssetsFromConstant();
|
|
30
|
+
try {
|
|
31
|
+
const chains = await fetchWithErrorHandling({
|
|
32
|
+
url: CHAINID_NETWORK_URL,
|
|
33
|
+
timeout: 10000,
|
|
34
|
+
});
|
|
35
|
+
if (chains && Array.isArray(chains)) {
|
|
36
|
+
for (const chain of chains) {
|
|
37
|
+
if (!chain.chainId ||
|
|
38
|
+
!chain.slip44 ||
|
|
39
|
+
!Number.isInteger(chain.chainId) ||
|
|
40
|
+
chain.chainId < 1 ||
|
|
41
|
+
!Number.isInteger(chain.slip44) ||
|
|
42
|
+
chain.slip44 < 1) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const caipChainId = `eip155:${chain.chainId}`;
|
|
46
|
+
if (!nativeAssetsMap[caipChainId]) {
|
|
47
|
+
nativeAssetsMap[caipChainId] =
|
|
48
|
+
`eip155:${chain.chainId}/slip44:${chain.slip44}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Non-fatal: caller should fall back to the seed map.
|
|
55
|
+
}
|
|
56
|
+
return nativeAssetsMap;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=native-assets.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-assets.mjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qCAAqC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mCAAmC;AACpE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAIrD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,sBAAsB,CAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = nativeAssetId;\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/assets-controller",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"description": "Tracks assets balances/prices and handles token detection across all digital assets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"build:docs": "typedoc",
|
|
45
45
|
"changelog:update": "../../scripts/update-changelog.sh @metamask/assets-controller",
|
|
46
46
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/assets-controller",
|
|
47
|
-
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --check",
|
|
48
|
-
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --generate",
|
|
47
|
+
"messenger-action-types:check": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --check",
|
|
48
|
+
"messenger-action-types:generate": "tsx ../../packages/messenger-cli/src/cli.ts --formatter oxfmt --generate",
|
|
49
49
|
"since-latest-release": "../../scripts/since-latest-release.sh",
|
|
50
50
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
|
|
51
51
|
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
|
|
@@ -58,15 +58,15 @@
|
|
|
58
58
|
"@ethersproject/providers": "^5.7.0",
|
|
59
59
|
"@metamask/account-tree-controller": "^7.1.0",
|
|
60
60
|
"@metamask/accounts-controller": "^37.2.0",
|
|
61
|
-
"@metamask/assets-controllers": "^104.
|
|
61
|
+
"@metamask/assets-controllers": "^104.3.0",
|
|
62
62
|
"@metamask/base-controller": "^9.1.0",
|
|
63
63
|
"@metamask/client-controller": "^1.0.1",
|
|
64
64
|
"@metamask/controller-utils": "^11.20.0",
|
|
65
65
|
"@metamask/core-backend": "^6.2.1",
|
|
66
|
-
"@metamask/keyring-api": "^
|
|
66
|
+
"@metamask/keyring-api": "^23.0.1",
|
|
67
67
|
"@metamask/keyring-controller": "^25.2.0",
|
|
68
|
-
"@metamask/keyring-internal-api": "^10.
|
|
69
|
-
"@metamask/keyring-snap-client": "^
|
|
68
|
+
"@metamask/keyring-internal-api": "^10.1.1",
|
|
69
|
+
"@metamask/keyring-snap-client": "^9.0.1",
|
|
70
70
|
"@metamask/messenger": "^1.1.1",
|
|
71
71
|
"@metamask/network-controller": "^30.0.1",
|
|
72
72
|
"@metamask/network-enablement-controller": "^5.0.2",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@metamask/preferences-controller": "^23.1.0",
|
|
77
77
|
"@metamask/snaps-controllers": "^19.0.0",
|
|
78
78
|
"@metamask/snaps-utils": "^12.1.2",
|
|
79
|
-
"@metamask/transaction-controller": "^64.
|
|
79
|
+
"@metamask/transaction-controller": "^64.4.0",
|
|
80
80
|
"@metamask/utils": "^11.9.0",
|
|
81
81
|
"async-mutex": "^0.5.0",
|
|
82
82
|
"bignumber.js": "^9.1.2",
|