@metamask-previews/assets-controller 2.2.0-preview-93519965c → 2.2.0-preview-62fe3fa64
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 +0 -14
- package/dist/AssetsController-method-action-types.cjs.map +1 -1
- package/dist/AssetsController-method-action-types.d.cts +1 -16
- package/dist/AssetsController-method-action-types.d.cts.map +1 -1
- package/dist/AssetsController-method-action-types.d.mts +1 -16
- 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 +0 -28
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +1 -15
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +1 -15
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +1 -29
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/utils/index.cjs +1 -3
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +0 -2
- package/dist/utils/index.d.cts.map +1 -1
- package/dist/utils/index.d.mts +0 -2
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +0 -1
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/utils/formatStateForTransactionPay.cjs +0 -133
- package/dist/utils/formatStateForTransactionPay.cjs.map +0 -1
- package/dist/utils/formatStateForTransactionPay.d.cts +0 -68
- package/dist/utils/formatStateForTransactionPay.d.cts.map +0 -1
- package/dist/utils/formatStateForTransactionPay.d.mts +0 -68
- package/dist/utils/formatStateForTransactionPay.d.mts.map +0 -1
- package/dist/utils/formatStateForTransactionPay.mjs +0 -129
- package/dist/utils/formatStateForTransactionPay.mjs.map +0 -1
|
@@ -1,129 +0,0 @@
|
|
|
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
|
-
* @param params.usdToSelectedCurrencyRate - Optional rate: 1 USD = this many units of selected currency. Required for correct currencyRates when selectedCurrency is not 'usd'; when omitted, conversionRate and usdConversionRate will be equal (incorrect for non-USD).
|
|
28
|
-
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
29
|
-
*/
|
|
30
|
-
export function formatStateForTransactionPay(params) {
|
|
31
|
-
var _a, _b;
|
|
32
|
-
const { assetsBalance, assetsInfo, assetsPrice, selectedCurrency, accounts, nativeAssetIdentifiers = {}, networkConfigurationsByChainId = {}, usdToSelectedCurrencyRate, } = params;
|
|
33
|
-
const tokenBalances = {};
|
|
34
|
-
const accountsByChainId = {};
|
|
35
|
-
const allTokensByChain = {};
|
|
36
|
-
for (const account of accounts) {
|
|
37
|
-
const accountAddressLower = account.address.toLowerCase();
|
|
38
|
-
const accountBalances = assetsBalance[account.id];
|
|
39
|
-
if (!accountBalances) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
43
|
-
try {
|
|
44
|
-
const parsed = parseCaipAssetType(assetId);
|
|
45
|
-
const chainIdParsed = parseCaipChainId(parsed.chainId);
|
|
46
|
-
if (chainIdParsed.namespace !== 'eip155') {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
50
|
-
const amount = getAmountFromBalance(balance);
|
|
51
|
-
const balanceHex = amountToHex(amount);
|
|
52
|
-
if (parsed.assetNamespace === 'slip44') {
|
|
53
|
-
const nativeAddress = '0x0000000000000000000000000000000000000000';
|
|
54
|
-
const checksumAddress = toChecksumAddress(account.address);
|
|
55
|
-
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
56
|
-
(_a = tokenBalances[accountAddressLower])[chainIdHex] ?? (_a[chainIdHex] = {});
|
|
57
|
-
tokenBalances[accountAddressLower][chainIdHex][nativeAddress] =
|
|
58
|
-
balanceHex;
|
|
59
|
-
accountsByChainId[chainIdHex] ?? (accountsByChainId[chainIdHex] = {});
|
|
60
|
-
accountsByChainId[chainIdHex][checksumAddress] = {
|
|
61
|
-
balance: balanceHex,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
else if (parsed.assetNamespace === 'erc20') {
|
|
65
|
-
const tokenAddress = toChecksumAddress(String(parsed.assetReference));
|
|
66
|
-
tokenBalances[accountAddressLower] ?? (tokenBalances[accountAddressLower] = {});
|
|
67
|
-
(_b = tokenBalances[accountAddressLower])[chainIdHex] ?? (_b[chainIdHex] = {});
|
|
68
|
-
tokenBalances[accountAddressLower][chainIdHex][tokenAddress] =
|
|
69
|
-
balanceHex;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// Skip malformed asset IDs
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
for (const [assetId, metadata] of Object.entries(assetsInfo)) {
|
|
78
|
-
try {
|
|
79
|
-
const parsed = parseCaipAssetType(assetId);
|
|
80
|
-
const chainIdParsed = parseCaipChainId(parsed.chainId);
|
|
81
|
-
if (chainIdParsed.namespace !== 'eip155') {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
const chainIdHex = numberToHex(parseInt(chainIdParsed.reference, 10));
|
|
85
|
-
const baseMeta = metadata && typeof metadata === 'object' && 'decimals' in metadata
|
|
86
|
-
? metadata
|
|
87
|
-
: null;
|
|
88
|
-
if (!baseMeta) {
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
const address = parsed.assetNamespace === 'slip44'
|
|
92
|
-
? '0x0000000000000000000000000000000000000000'
|
|
93
|
-
: toChecksumAddress(String(parsed.assetReference));
|
|
94
|
-
const token = {
|
|
95
|
-
address,
|
|
96
|
-
decimals: Number(baseMeta.decimals),
|
|
97
|
-
symbol: baseMeta.symbol ?? '',
|
|
98
|
-
name: baseMeta.name,
|
|
99
|
-
};
|
|
100
|
-
allTokensByChain[chainIdHex] ?? (allTokensByChain[chainIdHex] = []);
|
|
101
|
-
if (!allTokensByChain[chainIdHex].some((existing) => existing.address.toLowerCase() === address.toLowerCase())) {
|
|
102
|
-
allTokensByChain[chainIdHex].push(token);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// Skip malformed asset IDs
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
const allTokens = {};
|
|
110
|
-
for (const [chainId, tokens] of Object.entries(allTokensByChain)) {
|
|
111
|
-
allTokens[chainId] = { '': tokens };
|
|
112
|
-
}
|
|
113
|
-
const exchangeRates = formatExchangeRatesForBridge({
|
|
114
|
-
assetsPrice,
|
|
115
|
-
selectedCurrency,
|
|
116
|
-
nativeAssetIdentifiers,
|
|
117
|
-
networkConfigurationsByChainId,
|
|
118
|
-
usdToSelectedCurrencyRate,
|
|
119
|
-
});
|
|
120
|
-
return {
|
|
121
|
-
tokenBalances,
|
|
122
|
-
accountsByChainId,
|
|
123
|
-
allTokens,
|
|
124
|
-
marketData: exchangeRates.marketData,
|
|
125
|
-
currencyRates: exchangeRates.currencyRates,
|
|
126
|
-
currentCurrency: exchangeRates.currentCurrency,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=formatStateForTransactionPay.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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 * @param params.usdToSelectedCurrencyRate - Optional rate: 1 USD = this many units of selected currency. Required for correct currencyRates when selectedCurrency is not 'usd'; when omitted, conversionRate and usdConversionRate will be equal (incorrect for non-USD).\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 usdToSelectedCurrencyRate?: number;\n}): TransactionPayLegacyFormat {\n const {\n assetsBalance,\n assetsInfo,\n assetsPrice,\n selectedCurrency,\n accounts,\n nativeAssetIdentifiers = {},\n networkConfigurationsByChainId = {},\n usdToSelectedCurrencyRate,\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 baseMeta =\n metadata && typeof metadata === 'object' && 'decimals' in metadata\n ? (metadata as { decimals: number; symbol: string; name?: string })\n : null;\n if (!baseMeta) {\n continue;\n }\n const address =\n parsed.assetNamespace === 'slip44'\n ? '0x0000000000000000000000000000000000000000'\n : toChecksumAddress(String(parsed.assetReference));\n const token: LegacyToken = {\n address,\n decimals: Number(baseMeta.decimals),\n symbol: baseMeta.symbol ?? '',\n name: baseMeta.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 usdToSelectedCurrencyRate,\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"]}
|