@metamask/assets-controller 2.1.0 → 2.3.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 +33 -1
- package/dist/AssetsController-method-action-types.cjs.map +1 -1
- package/dist/AssetsController-method-action-types.d.cts +27 -1
- package/dist/AssetsController-method-action-types.d.cts.map +1 -1
- package/dist/AssetsController-method-action-types.d.mts +27 -1
- package/dist/AssetsController-method-action-types.d.mts.map +1 -1
- package/dist/AssetsController-method-action-types.mjs.map +1 -1
- package/dist/AssetsController.cjs +47 -1
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +21 -0
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +21 -0
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +47 -1
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +48 -29
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +48 -29
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +9 -11
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +9 -11
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.cjs +114 -0
- package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.d.cts +63 -0
- package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.d.mts +63 -0
- package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -0
- package/dist/utils/formatExchangeRatesForBridge.mjs +110 -0
- package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -0
- package/dist/utils/formatStateForTransactionPay.cjs +125 -0
- package/dist/utils/formatStateForTransactionPay.cjs.map +1 -0
- package/dist/utils/formatStateForTransactionPay.d.cts +66 -0
- package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -0
- package/dist/utils/formatStateForTransactionPay.d.mts +66 -0
- package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -0
- package/dist/utils/formatStateForTransactionPay.mjs +121 -0
- package/dist/utils/formatStateForTransactionPay.mjs.map +1 -0
- package/dist/utils/index.cjs +10 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +6 -0
- package/dist/utils/index.d.cts.map +1 -0
- package/dist/utils/index.d.mts +6 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +4 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/{utils.cjs → utils/normalizeAssetId.cjs} +1 -1
- package/dist/utils/normalizeAssetId.cjs.map +1 -0
- package/dist/{utils.d.mts → utils/normalizeAssetId.d.cts} +2 -2
- package/dist/utils/normalizeAssetId.d.cts.map +1 -0
- package/dist/{utils.d.cts → utils/normalizeAssetId.d.mts} +2 -2
- package/dist/utils/normalizeAssetId.d.mts.map +1 -0
- package/dist/{utils.mjs → utils/normalizeAssetId.mjs} +1 -1
- package/dist/utils/normalizeAssetId.mjs.map +1 -0
- package/package.json +7 -7
- package/dist/utils.cjs.map +0 -1
- package/dist/utils.d.cts.map +0 -1
- package/dist/utils.d.mts.map +0 -1
- package/dist/utils.mjs.map +0 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatStateForTransactionPay = void 0;
|
|
4
|
+
const util_1 = require("@ethereumjs/util");
|
|
5
|
+
const utils_1 = require("@metamask/utils");
|
|
6
|
+
const utils_2 = require("@metamask/utils");
|
|
7
|
+
const formatExchangeRatesForBridge_1 = require("./formatExchangeRatesForBridge.cjs");
|
|
8
|
+
function amountToHex(amount) {
|
|
9
|
+
const hexString = BigInt(amount).toString(16);
|
|
10
|
+
return `0x${hexString}`;
|
|
11
|
+
}
|
|
12
|
+
function getAmountFromBalance(balance) {
|
|
13
|
+
return typeof balance === 'object' && balance !== null && 'amount' in balance
|
|
14
|
+
? String(balance.amount)
|
|
15
|
+
: '0';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
19
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
20
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
21
|
+
*
|
|
22
|
+
* @param params - Conversion parameters.
|
|
23
|
+
* @param params.assetsBalance - Per-account balances by asset ID.
|
|
24
|
+
* @param params.assetsInfo - Metadata by asset ID.
|
|
25
|
+
* @param params.assetsPrice - Prices by asset ID.
|
|
26
|
+
* @param params.selectedCurrency - Current currency code.
|
|
27
|
+
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
28
|
+
* @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.
|
|
29
|
+
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
30
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
31
|
+
*/
|
|
32
|
+
function formatStateForTransactionPay(params) {
|
|
33
|
+
var _a, _b;
|
|
34
|
+
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers = {}, networkConfigurationsByChainId = {}, } = params;
|
|
35
|
+
const tokenBalances = {};
|
|
36
|
+
const accountsByChainId = {};
|
|
37
|
+
const allTokensByChain = {};
|
|
38
|
+
for (const account of accounts) {
|
|
39
|
+
const accountAddressLower = account.address.toLowerCase();
|
|
40
|
+
const accountBalances = assetsBalance[account.id];
|
|
41
|
+
if (!accountBalances) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
45
|
+
try {
|
|
46
|
+
const parsed = (0, utils_2.parseCaipAssetType)(assetId);
|
|
47
|
+
const chainIdParsed = (0, utils_2.parseCaipChainId)(parsed.chainId);
|
|
48
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const chainIdHex = (0, utils_1.numberToHex)(parseInt(chainIdParsed.reference, 10));
|
|
52
|
+
const amount = getAmountFromBalance(balance);
|
|
53
|
+
const balanceHex = amountToHex(amount);
|
|
54
|
+
if (parsed.assetNamespace === 'slip44') {
|
|
55
|
+
const nativeAddress = '0x0000000000000000000000000000000000000000';
|
|
56
|
+
const checksumAddress = (0, util_1.toChecksumAddress)(account.address);
|
|
57
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
58
|
+
(_a = tokenBalances[accountAddressLower])[chainIdHex] ?? (_a[chainIdHex] = {});
|
|
59
|
+
tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =
|
|
60
|
+
balanceHex;
|
|
61
|
+
accountsByChainId[chainIdHex] ?? (accountsByChainId[chainIdHex] = {});
|
|
62
|
+
accountsByChainId[chainIdHex][checksumAddress] = {
|
|
63
|
+
balance: balanceHex,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (parsed.assetNamespace === 'erc20') {
|
|
67
|
+
const tokenAddress = (0, util_1.toChecksumAddress)(String(parsed.assetReference));
|
|
68
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
69
|
+
(_b = tokenBalances[accountAddressLower])[chainIdHex] ?? (_b[chainIdHex] = {});
|
|
70
|
+
tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =
|
|
71
|
+
balanceHex;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Skip malformed asset IDs
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const [assetId, metadata] of Object.entries(assetsInfo)) {
|
|
80
|
+
try {
|
|
81
|
+
const parsed = (0, utils_2.parseCaipAssetType)(assetId);
|
|
82
|
+
const chainIdParsed = (0, utils_2.parseCaipChainId)(parsed.chainId);
|
|
83
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const chainIdHex = (0, utils_1.numberToHex)(parseInt(chainIdParsed.reference, 10));
|
|
87
|
+
const address = parsed.assetNamespace === 'slip44'
|
|
88
|
+
? '0x0000000000000000000000000000000000000000'
|
|
89
|
+
: (0, util_1.toChecksumAddress)(String(parsed.assetReference));
|
|
90
|
+
const token = {
|
|
91
|
+
address,
|
|
92
|
+
decimals: metadata.decimals,
|
|
93
|
+
symbol: metadata.symbol,
|
|
94
|
+
name: metadata.name,
|
|
95
|
+
};
|
|
96
|
+
allTokensByChain[chainIdHex] ?? (allTokensByChain[chainIdHex] = []);
|
|
97
|
+
if (!allTokensByChain[chainIdHex].some((existing) => existing.address.toLowerCase() === address.toLowerCase())) {
|
|
98
|
+
allTokensByChain[chainIdHex].push(token);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Skip malformed asset IDs
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const allTokens = {};
|
|
106
|
+
for (const [chainId, tokens] of Object.entries(allTokensByChain)) {
|
|
107
|
+
allTokens[chainId] = { '': tokens };
|
|
108
|
+
}
|
|
109
|
+
const exchangeRates = (0, formatExchangeRatesForBridge_1.formatExchangeRatesForBridge)({
|
|
110
|
+
assetsPrice,
|
|
111
|
+
selectedCurrency,
|
|
112
|
+
nativeAssetIdentifiers,
|
|
113
|
+
networkConfigurationsByChainId,
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
tokenBalances,
|
|
117
|
+
accountsByChainId,
|
|
118
|
+
allTokens,
|
|
119
|
+
marketData: exchangeRates.marketData,
|
|
120
|
+
currencyRates: exchangeRates.currencyRates,
|
|
121
|
+
currentCurrency: exchangeRates.currentCurrency,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
exports.formatStateForTransactionPay = formatStateForTransactionPay;
|
|
125
|
+
//# sourceMappingURL=formatStateForTransactionPay.cjs.map
|
|
@@ -0,0 +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 { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\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"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.cjs";
|
|
2
|
+
import type { AssetBalance, AssetMetadata, AssetPrice } from "../types.cjs";
|
|
3
|
+
/** Account with id and address for mapping state to legacy format. */
|
|
4
|
+
export type AccountForLegacyFormat = {
|
|
5
|
+
id: string;
|
|
6
|
+
address: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Legacy Token shape expected by TokensController / transaction-pay-controller.
|
|
10
|
+
*/
|
|
11
|
+
export type LegacyToken = {
|
|
12
|
+
address: string;
|
|
13
|
+
decimals: number;
|
|
14
|
+
symbol: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Legacy state shape that transaction-pay-controller reads from
|
|
20
|
+
* TokenBalancesController, AccountTrackerController, TokensController,
|
|
21
|
+
* TokenRatesController, and CurrencyRateController.
|
|
22
|
+
*/
|
|
23
|
+
export type TransactionPayLegacyFormat = {
|
|
24
|
+
/** TokenBalancesController:getState().tokenBalances */
|
|
25
|
+
tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;
|
|
26
|
+
/** AccountTrackerController:getState().accountsByChainId */
|
|
27
|
+
accountsByChainId: Record<string, Record<string, {
|
|
28
|
+
balance: string;
|
|
29
|
+
stakedBalance?: string;
|
|
30
|
+
}>>;
|
|
31
|
+
/** TokensController:getState().allTokens (chainId -> key -> Token[]) */
|
|
32
|
+
allTokens: Record<string, Record<string, LegacyToken[]>>;
|
|
33
|
+
/** TokenRatesController:getState().marketData */
|
|
34
|
+
marketData: BridgeExchangeRatesFormat['marketData'];
|
|
35
|
+
/** CurrencyRateController:getState().currencyRates */
|
|
36
|
+
currencyRates: BridgeExchangeRatesFormat['currencyRates'];
|
|
37
|
+
/** CurrencyRateController:getState().currentCurrency */
|
|
38
|
+
currentCurrency: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
42
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
43
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
44
|
+
*
|
|
45
|
+
* @param params - Conversion parameters.
|
|
46
|
+
* @param params.assetsBalance - Per-account balances by asset ID.
|
|
47
|
+
* @param params.assetsInfo - Metadata by asset ID.
|
|
48
|
+
* @param params.assetsPrice - Prices by asset ID.
|
|
49
|
+
* @param params.selectedCurrency - Current currency code.
|
|
50
|
+
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
51
|
+
* @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.
|
|
52
|
+
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
53
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatStateForTransactionPay(params: {
|
|
56
|
+
assetsBalance: Record<string, Record<string, AssetBalance>>;
|
|
57
|
+
assetsInfo: Record<string, AssetMetadata>;
|
|
58
|
+
assetsPrice: Record<string, AssetPrice>;
|
|
59
|
+
selectedCurrency: string;
|
|
60
|
+
accounts: AccountForLegacyFormat[];
|
|
61
|
+
nativeAssetIdentifiers?: Record<string, string>;
|
|
62
|
+
networkConfigurationsByChainId?: Record<string, {
|
|
63
|
+
nativeCurrency?: string;
|
|
64
|
+
}>;
|
|
65
|
+
}): TransactionPayLegacyFormat;
|
|
66
|
+
//# sourceMappingURL=formatStateForTransactionPay.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.cts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAiB;AAElB,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,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,GAAG,0BAA0B,CA8G7B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { BridgeExchangeRatesFormat } from "./formatExchangeRatesForBridge.mjs";
|
|
2
|
+
import type { AssetBalance, AssetMetadata, AssetPrice } from "../types.mjs";
|
|
3
|
+
/** Account with id and address for mapping state to legacy format. */
|
|
4
|
+
export type AccountForLegacyFormat = {
|
|
5
|
+
id: string;
|
|
6
|
+
address: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Legacy Token shape expected by TokensController / transaction-pay-controller.
|
|
10
|
+
*/
|
|
11
|
+
export type LegacyToken = {
|
|
12
|
+
address: string;
|
|
13
|
+
decimals: number;
|
|
14
|
+
symbol: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Legacy state shape that transaction-pay-controller reads from
|
|
20
|
+
* TokenBalancesController, AccountTrackerController, TokensController,
|
|
21
|
+
* TokenRatesController, and CurrencyRateController.
|
|
22
|
+
*/
|
|
23
|
+
export type TransactionPayLegacyFormat = {
|
|
24
|
+
/** TokenBalancesController:getState().tokenBalances */
|
|
25
|
+
tokenBalances: Record<string, Record<string, Record<string, `0x${string}`>>>;
|
|
26
|
+
/** AccountTrackerController:getState().accountsByChainId */
|
|
27
|
+
accountsByChainId: Record<string, Record<string, {
|
|
28
|
+
balance: string;
|
|
29
|
+
stakedBalance?: string;
|
|
30
|
+
}>>;
|
|
31
|
+
/** TokensController:getState().allTokens (chainId -> key -> Token[]) */
|
|
32
|
+
allTokens: Record<string, Record<string, LegacyToken[]>>;
|
|
33
|
+
/** TokenRatesController:getState().marketData */
|
|
34
|
+
marketData: BridgeExchangeRatesFormat['marketData'];
|
|
35
|
+
/** CurrencyRateController:getState().currencyRates */
|
|
36
|
+
currencyRates: BridgeExchangeRatesFormat['currencyRates'];
|
|
37
|
+
/** CurrencyRateController:getState().currentCurrency */
|
|
38
|
+
currentCurrency: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
42
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
43
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
44
|
+
*
|
|
45
|
+
* @param params - Conversion parameters.
|
|
46
|
+
* @param params.assetsBalance - Per-account balances by asset ID.
|
|
47
|
+
* @param params.assetsInfo - Metadata by asset ID.
|
|
48
|
+
* @param params.assetsPrice - Prices by asset ID.
|
|
49
|
+
* @param params.selectedCurrency - Current currency code.
|
|
50
|
+
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
51
|
+
* @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.
|
|
52
|
+
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
53
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatStateForTransactionPay(params: {
|
|
56
|
+
assetsBalance: Record<string, Record<string, AssetBalance>>;
|
|
57
|
+
assetsInfo: Record<string, AssetMetadata>;
|
|
58
|
+
assetsPrice: Record<string, AssetPrice>;
|
|
59
|
+
selectedCurrency: string;
|
|
60
|
+
accounts: AccountForLegacyFormat[];
|
|
61
|
+
nativeAssetIdentifiers?: Record<string, string>;
|
|
62
|
+
networkConfigurationsByChainId?: Record<string, {
|
|
63
|
+
nativeCurrency?: string;
|
|
64
|
+
}>;
|
|
65
|
+
}): TransactionPayLegacyFormat;
|
|
66
|
+
//# sourceMappingURL=formatStateForTransactionPay.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatStateForTransactionPay.d.mts","sourceRoot":"","sources":["../../src/utils/formatStateForTransactionPay.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,2CAAuC;AAChF,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,qBAAiB;AAElB,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,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,8BAA8B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E,GAAG,0BAA0B,CA8G7B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { toChecksumAddress } from "@ethereumjs/util";
|
|
2
|
+
import { numberToHex } from "@metamask/utils";
|
|
3
|
+
import { parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
|
|
4
|
+
import { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
|
|
5
|
+
function amountToHex(amount) {
|
|
6
|
+
const hexString = BigInt(amount).toString(16);
|
|
7
|
+
return `0x${hexString}`;
|
|
8
|
+
}
|
|
9
|
+
function getAmountFromBalance(balance) {
|
|
10
|
+
return typeof balance === 'object' && balance !== null && 'amount' in balance
|
|
11
|
+
? String(balance.amount)
|
|
12
|
+
: '0';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Converts AssetsController state into the legacy format consumed by
|
|
16
|
+
* transaction-pay-controller (TokenBalancesController, AccountTrackerController,
|
|
17
|
+
* TokensController, TokenRatesController, CurrencyRateController shapes).
|
|
18
|
+
*
|
|
19
|
+
* @param params - Conversion parameters.
|
|
20
|
+
* @param params.assetsBalance - Per-account balances by asset ID.
|
|
21
|
+
* @param params.assetsInfo - Metadata by asset ID.
|
|
22
|
+
* @param params.assetsPrice - Prices by asset ID.
|
|
23
|
+
* @param params.selectedCurrency - Current currency code.
|
|
24
|
+
* @param params.accounts - List of accounts (id + address) to map state for.
|
|
25
|
+
* @param params.nativeAssetIdentifiers - Optional CAIP-2 chain ID to native asset ID.
|
|
26
|
+
* @param params.networkConfigurationsByChainId - Optional chain ID to network config (for native symbol).
|
|
27
|
+
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
28
|
+
*/
|
|
29
|
+
export function formatStateForTransactionPay(params) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers = {}, networkConfigurationsByChainId = {}, } = params;
|
|
32
|
+
const tokenBalances = {};
|
|
33
|
+
const accountsByChainId = {};
|
|
34
|
+
const allTokensByChain = {};
|
|
35
|
+
for (const account of accounts) {
|
|
36
|
+
const accountAddressLower = account.address.toLowerCase();
|
|
37
|
+
const accountBalances = assetsBalance[account.id];
|
|
38
|
+
if (!accountBalances) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
42
|
+
try {
|
|
43
|
+
const parsed = parseCaipAssetType(assetId);
|
|
44
|
+
const chainIdParsed = parseCaipChainId(parsed.chainId);
|
|
45
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
49
|
+
const amount = getAmountFromBalance(balance);
|
|
50
|
+
const balanceHex = amountToHex(amount);
|
|
51
|
+
if (parsed.assetNamespace === 'slip44') {
|
|
52
|
+
const nativeAddress = '0x0000000000000000000000000000000000000000';
|
|
53
|
+
const checksumAddress = toChecksumAddress(account.address);
|
|
54
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
55
|
+
(_a = tokenBalances[accountAddressLower])[chainIdHex] ?? (_a[chainIdHex] = {});
|
|
56
|
+
tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =
|
|
57
|
+
balanceHex;
|
|
58
|
+
accountsByChainId[chainIdHex] ?? (accountsByChainId[chainIdHex] = {});
|
|
59
|
+
accountsByChainId[chainIdHex][checksumAddress] = {
|
|
60
|
+
balance: balanceHex,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
else if (parsed.assetNamespace === 'erc20') {
|
|
64
|
+
const tokenAddress = toChecksumAddress(String(parsed.assetReference));
|
|
65
|
+
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
66
|
+
(_b = tokenBalances[accountAddressLower])[chainIdHex] ?? (_b[chainIdHex] = {});
|
|
67
|
+
tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =
|
|
68
|
+
balanceHex;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Skip malformed asset IDs
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const [assetId, metadata] of Object.entries(assetsInfo)) {
|
|
77
|
+
try {
|
|
78
|
+
const parsed = parseCaipAssetType(assetId);
|
|
79
|
+
const chainIdParsed = parseCaipChainId(parsed.chainId);
|
|
80
|
+
if (chainIdParsed.namespace !== 'eip155') {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
84
|
+
const address = parsed.assetNamespace === 'slip44'
|
|
85
|
+
? '0x0000000000000000000000000000000000000000'
|
|
86
|
+
: toChecksumAddress(String(parsed.assetReference));
|
|
87
|
+
const token = {
|
|
88
|
+
address,
|
|
89
|
+
decimals: metadata.decimals,
|
|
90
|
+
symbol: metadata.symbol,
|
|
91
|
+
name: metadata.name,
|
|
92
|
+
};
|
|
93
|
+
allTokensByChain[chainIdHex] ?? (allTokensByChain[chainIdHex] = []);
|
|
94
|
+
if (!allTokensByChain[chainIdHex].some((existing) => existing.address.toLowerCase() === address.toLowerCase())) {
|
|
95
|
+
allTokensByChain[chainIdHex].push(token);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Skip malformed asset IDs
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const allTokens = {};
|
|
103
|
+
for (const [chainId, tokens] of Object.entries(allTokensByChain)) {
|
|
104
|
+
allTokens[chainId] = { '': tokens };
|
|
105
|
+
}
|
|
106
|
+
const exchangeRates = formatExchangeRatesForBridge({
|
|
107
|
+
assetsPrice,
|
|
108
|
+
selectedCurrency,
|
|
109
|
+
nativeAssetIdentifiers,
|
|
110
|
+
networkConfigurationsByChainId,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
tokenBalances,
|
|
114
|
+
accountsByChainId,
|
|
115
|
+
allTokens,
|
|
116
|
+
marketData: exchangeRates.marketData,
|
|
117
|
+
currencyRates: exchangeRates.currencyRates,
|
|
118
|
+
currentCurrency: exchangeRates.currentCurrency,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=formatStateForTransactionPay.mjs.map
|
|
@@ -0,0 +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 { formatExchangeRatesForBridge } from './formatExchangeRatesForBridge';\nimport type { BridgeExchangeRatesFormat } from './formatExchangeRatesForBridge';\nimport type {\n AssetBalance,\n AssetMetadata,\n AssetPrice,\n Caip19AssetId,\n} from '../types';\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"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatStateForTransactionPay = exports.formatExchangeRatesForBridge = exports.normalizeAssetId = void 0;
|
|
4
|
+
var normalizeAssetId_1 = require("./normalizeAssetId.cjs");
|
|
5
|
+
Object.defineProperty(exports, "normalizeAssetId", { enumerable: true, get: function () { return normalizeAssetId_1.normalizeAssetId; } });
|
|
6
|
+
var formatExchangeRatesForBridge_1 = require("./formatExchangeRatesForBridge.cjs");
|
|
7
|
+
Object.defineProperty(exports, "formatExchangeRatesForBridge", { enumerable: true, get: function () { return formatExchangeRatesForBridge_1.formatExchangeRatesForBridge; } });
|
|
8
|
+
var formatStateForTransactionPay_1 = require("./formatStateForTransactionPay.cjs");
|
|
9
|
+
Object.defineProperty(exports, "formatStateForTransactionPay", { enumerable: true, get: function () { return formatStateForTransactionPay_1.formatStateForTransactionPay; } });
|
|
10
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +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 {\n BridgeConversionRateEntry,\n BridgeCurrencyRateEntry,\n BridgeExchangeRatesFormat,\n BridgeMarketDataEntry,\n} from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { normalizeAssetId } from "./normalizeAssetId.cjs";
|
|
2
|
+
export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.cjs";
|
|
3
|
+
export { formatStateForTransactionPay } from "./formatStateForTransactionPay.cjs";
|
|
4
|
+
export type { BridgeConversionRateEntry, BridgeCurrencyRateEntry, BridgeExchangeRatesFormat, BridgeMarketDataEntry, } from "./formatExchangeRatesForBridge.cjs";
|
|
5
|
+
export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.cjs";
|
|
6
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +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,EACV,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACtB,2CAAuC;AACxC,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { normalizeAssetId } from "./normalizeAssetId.mjs";
|
|
2
|
+
export { formatExchangeRatesForBridge } from "./formatExchangeRatesForBridge.mjs";
|
|
3
|
+
export { formatStateForTransactionPay } from "./formatStateForTransactionPay.mjs";
|
|
4
|
+
export type { BridgeConversionRateEntry, BridgeCurrencyRateEntry, BridgeExchangeRatesFormat, BridgeMarketDataEntry, } from "./formatExchangeRatesForBridge.mjs";
|
|
5
|
+
export type { AccountForLegacyFormat, LegacyToken, TransactionPayLegacyFormat, } from "./formatStateForTransactionPay.mjs";
|
|
6
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +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,EACV,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,GACtB,2CAAuC;AACxC,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,0BAA0B,GAC3B,2CAAuC"}
|
|
@@ -0,0 +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 {\n BridgeConversionRateEntry,\n BridgeCurrencyRateEntry,\n BridgeExchangeRatesFormat,\n BridgeMarketDataEntry,\n} from './formatExchangeRatesForBridge';\nexport type {\n AccountForLegacyFormat,\n LegacyToken,\n TransactionPayLegacyFormat,\n} from './formatStateForTransactionPay';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeAssetId.cjs","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AACrD,2CAAuE;AAIvE;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,4CAcC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from '../types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Caip19AssetId } from "
|
|
1
|
+
import type { Caip19AssetId } from "../types.cjs";
|
|
2
2
|
/**
|
|
3
3
|
* Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
|
|
4
4
|
* This ensures consistent asset IDs regardless of the data source format.
|
|
@@ -10,4 +10,4 @@ import type { Caip19AssetId } from "./types.mjs";
|
|
|
10
10
|
* @returns The normalized asset ID with checksummed address (for EVM tokens)
|
|
11
11
|
*/
|
|
12
12
|
export declare function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId;
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=normalizeAssetId.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeAssetId.d.cts","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAiB;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Caip19AssetId } from "
|
|
1
|
+
import type { Caip19AssetId } from "../types.mjs";
|
|
2
2
|
/**
|
|
3
3
|
* Normalizes a CAIP-19 asset ID by checksumming EVM addresses.
|
|
4
4
|
* This ensures consistent asset IDs regardless of the data source format.
|
|
@@ -10,4 +10,4 @@ import type { Caip19AssetId } from "./types.cjs";
|
|
|
10
10
|
* @returns The normalized asset ID with checksummed address (for EVM tokens)
|
|
11
11
|
*/
|
|
12
12
|
export declare function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId;
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=normalizeAssetId.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeAssetId.d.mts","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAiB;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeAssetId.mjs","sourceRoot":"","sources":["../../src/utils/normalizeAssetId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB;AACrD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB;AAIvE;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from '../types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/assets-controller",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Tracks assets balances/prices and handles token detection across all digital assets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -51,25 +51,25 @@
|
|
|
51
51
|
"@ethereumjs/util": "^9.1.0",
|
|
52
52
|
"@ethersproject/abi": "^5.7.0",
|
|
53
53
|
"@ethersproject/providers": "^5.7.0",
|
|
54
|
-
"@metamask/account-tree-controller": "^
|
|
55
|
-
"@metamask/assets-controllers": "^100.0
|
|
54
|
+
"@metamask/account-tree-controller": "^5.0.0",
|
|
55
|
+
"@metamask/assets-controllers": "^100.2.0",
|
|
56
56
|
"@metamask/base-controller": "^9.0.0",
|
|
57
57
|
"@metamask/client-controller": "^1.0.0",
|
|
58
58
|
"@metamask/controller-utils": "^11.19.0",
|
|
59
|
-
"@metamask/core-backend": "^6.
|
|
59
|
+
"@metamask/core-backend": "^6.1.0",
|
|
60
60
|
"@metamask/keyring-api": "^21.5.0",
|
|
61
61
|
"@metamask/keyring-controller": "^25.1.0",
|
|
62
62
|
"@metamask/keyring-internal-api": "^10.0.0",
|
|
63
63
|
"@metamask/keyring-snap-client": "^8.2.0",
|
|
64
64
|
"@metamask/messenger": "^0.3.0",
|
|
65
65
|
"@metamask/network-controller": "^30.0.0",
|
|
66
|
-
"@metamask/network-enablement-controller": "^4.
|
|
66
|
+
"@metamask/network-enablement-controller": "^4.2.0",
|
|
67
67
|
"@metamask/permission-controller": "^12.2.0",
|
|
68
68
|
"@metamask/polling-controller": "^16.0.3",
|
|
69
|
-
"@metamask/preferences-controller": "^
|
|
69
|
+
"@metamask/preferences-controller": "^23.0.0",
|
|
70
70
|
"@metamask/snaps-controllers": "^17.2.0",
|
|
71
71
|
"@metamask/snaps-utils": "^11.7.0",
|
|
72
|
-
"@metamask/transaction-controller": "^62.
|
|
72
|
+
"@metamask/transaction-controller": "^62.21.0",
|
|
73
73
|
"@metamask/utils": "^11.9.0",
|
|
74
74
|
"async-mutex": "^0.5.0",
|
|
75
75
|
"bignumber.js": "^9.1.2",
|
package/dist/utils.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AACrD,2CAAuE;AAIvE;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,IAAA,wBAAiB,EAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,4CAcC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from './types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
|
package/dist/utils.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAgB;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
|
package/dist/utils.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAgB;AAE7C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CActE"}
|
package/dist/utils.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB;AACrD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB;AAIvE;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvD,oCAAoC;IACpC,IACE,aAAa,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,cAAc,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,IAAI,kBAAkB,EAAmB,CAAC;IAC7F,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { toChecksumAddress } from '@ethereumjs/util';\nimport { parseCaipAssetType, parseCaipChainId } from '@metamask/utils';\n\nimport type { Caip19AssetId } from './types';\n\n/**\n * Normalizes a CAIP-19 asset ID by checksumming EVM addresses.\n * This ensures consistent asset IDs regardless of the data source format.\n *\n * For EVM ERC20 tokens (e.g., \"eip155:1/erc20:0x...\"), the address is checksummed.\n * All other asset types are returned unchanged.\n *\n * @param assetId - The CAIP-19 asset ID to normalize\n * @returns The normalized asset ID with checksummed address (for EVM tokens)\n */\nexport function normalizeAssetId(assetId: Caip19AssetId): Caip19AssetId {\n const parsed = parseCaipAssetType(assetId);\n const chainIdParsed = parseCaipChainId(parsed.chainId);\n\n // Only checksum EVM ERC20 addresses\n if (\n chainIdParsed.namespace === 'eip155' &&\n parsed.assetNamespace === 'erc20'\n ) {\n const checksummedAddress = toChecksumAddress(parsed.assetReference);\n return `${parsed.chainId}/${parsed.assetNamespace}:${checksummedAddress}` as Caip19AssetId;\n }\n\n return assetId;\n}\n"]}
|