@metamask/transaction-pay-controller 5.0.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -1
- package/dist/TransactionPayController.cjs +1 -1
- package/dist/TransactionPayController.cjs.map +1 -1
- package/dist/TransactionPayController.mjs +1 -1
- package/dist/TransactionPayController.mjs.map +1 -1
- package/dist/constants.cjs +5 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +4 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +4 -0
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +4 -0
- package/dist/constants.mjs.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.cjs +1 -1
- package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -1
- package/dist/helpers/TransactionPayPublishHook.mjs +1 -1
- package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -1
- package/dist/strategy/bridge/bridge-quotes.cjs +37 -22
- package/dist/strategy/bridge/bridge-quotes.cjs.map +1 -1
- package/dist/strategy/bridge/bridge-quotes.mjs +37 -22
- package/dist/strategy/bridge/bridge-quotes.mjs.map +1 -1
- package/dist/strategy/relay/constants.cjs +1 -4
- package/dist/strategy/relay/constants.cjs.map +1 -1
- package/dist/strategy/relay/constants.d.cts +0 -3
- package/dist/strategy/relay/constants.d.cts.map +1 -1
- package/dist/strategy/relay/constants.d.mts +0 -3
- package/dist/strategy/relay/constants.d.mts.map +1 -1
- package/dist/strategy/relay/constants.mjs +0 -3
- package/dist/strategy/relay/constants.mjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.cjs +34 -8
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
- package/dist/strategy/relay/relay-quotes.mjs +32 -6
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
- package/dist/strategy/relay/types.cjs.map +1 -1
- package/dist/strategy/relay/types.d.cts +1 -0
- package/dist/strategy/relay/types.d.cts.map +1 -1
- package/dist/strategy/relay/types.d.mts +1 -0
- package/dist/strategy/relay/types.d.mts.map +1 -1
- package/dist/strategy/relay/types.mjs.map +1 -1
- package/dist/strategy/test/TestStrategy.cjs +24 -2
- package/dist/strategy/test/TestStrategy.cjs.map +1 -1
- package/dist/strategy/test/TestStrategy.d.cts.map +1 -1
- package/dist/strategy/test/TestStrategy.d.mts.map +1 -1
- package/dist/strategy/test/TestStrategy.mjs +24 -2
- package/dist/strategy/test/TestStrategy.mjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +1 -1
- package/dist/tests/messenger-mock.d.mts +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +19 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +19 -3
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/gas.cjs +85 -12
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +12 -3
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +12 -3
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +86 -13
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/quotes.cjs +2 -2
- package/dist/utils/quotes.cjs.map +1 -1
- package/dist/utils/quotes.mjs +2 -2
- package/dist/utils/quotes.mjs.map +1 -1
- package/dist/utils/source-amounts.cjs +34 -5
- package/dist/utils/source-amounts.cjs.map +1 -1
- package/dist/utils/source-amounts.d.cts.map +1 -1
- package/dist/utils/source-amounts.d.mts.map +1 -1
- package/dist/utils/source-amounts.mjs +34 -5
- package/dist/utils/source-amounts.mjs.map +1 -1
- package/dist/utils/strategy.cjs +2 -2
- package/dist/utils/strategy.cjs.map +1 -1
- package/dist/utils/strategy.d.cts +1 -1
- package/dist/utils/strategy.d.cts.map +1 -1
- package/dist/utils/strategy.d.mts +1 -1
- package/dist/utils/strategy.d.mts.map +1 -1
- package/dist/utils/strategy.mjs +2 -2
- package/dist/utils/strategy.mjs.map +1 -1
- package/dist/utils/token.cjs +11 -4
- package/dist/utils/token.cjs.map +1 -1
- package/dist/utils/token.d.cts +1 -1
- package/dist/utils/token.d.cts.map +1 -1
- package/dist/utils/token.d.mts +1 -1
- package/dist/utils/token.d.mts.map +1 -1
- package/dist/utils/token.mjs +12 -5
- package/dist/utils/token.mjs.map +1 -1
- package/dist/utils/totals.cjs +51 -26
- package/dist/utils/totals.cjs.map +1 -1
- package/dist/utils/totals.d.cts.map +1 -1
- package/dist/utils/totals.d.mts.map +1 -1
- package/dist/utils/totals.mjs +51 -26
- package/dist/utils/totals.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.mts","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"token.d.mts","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAW3C,OAAO,KAAK,EAAE,SAAS,EAAE,iCAAiC,EAAE,qBAAiB;AAO7E;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,iCAAiC,EAC5C,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,GAAG,GAChB,MAAM,CAiCR;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,iCAAiC,EAC5C,OAAO,EAAE,GAAG;;;;IAkCb;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,iCAAiC,EAC5C,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,GACX;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA0BlD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,iCAAiC,EAC5C,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,GACX,SAAS,GAAG,SAAS,CAiDvB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,iBAO1C"}
|
package/dist/utils/token.mjs
CHANGED
|
@@ -2,7 +2,11 @@ import { toChecksumHexAddress } from "@metamask/controller-utils";
|
|
|
2
2
|
import { BigNumber } from "bignumber.js";
|
|
3
3
|
import $lodash from "lodash";
|
|
4
4
|
const { uniq } = $lodash;
|
|
5
|
-
import { NATIVE_TOKEN_ADDRESS } from "../constants.mjs";
|
|
5
|
+
import { ARBITRUM_USDC_ADDRESS, CHAIN_ID_ARBITRUM, CHAIN_ID_POLYGON, NATIVE_TOKEN_ADDRESS, POLYGON_USDCE_ADDRESS } from "../constants.mjs";
|
|
6
|
+
const STABLECOINS = {
|
|
7
|
+
[CHAIN_ID_ARBITRUM]: [ARBITRUM_USDC_ADDRESS.toLowerCase()],
|
|
8
|
+
[CHAIN_ID_POLYGON]: [POLYGON_USDCE_ADDRESS.toLowerCase()],
|
|
9
|
+
};
|
|
6
10
|
/**
|
|
7
11
|
* Get the token balance for a specific account and token.
|
|
8
12
|
*
|
|
@@ -10,7 +14,7 @@ import { NATIVE_TOKEN_ADDRESS } from "../constants.mjs";
|
|
|
10
14
|
* @param account - Address of the account.
|
|
11
15
|
* @param chainId - Id of the chain.
|
|
12
16
|
* @param tokenAddress - Address of the token contract.
|
|
13
|
-
* @returns
|
|
17
|
+
* @returns Raw token balance as a decimal string.
|
|
14
18
|
*/
|
|
15
19
|
export function getTokenBalance(messenger, account, chainId, tokenAddress) {
|
|
16
20
|
const tokenBalanceControllerState = messenger.call('TokenBalancesController:getState');
|
|
@@ -112,9 +116,12 @@ export function getTokenFiatRate(messenger, tokenAddress, chainId) {
|
|
|
112
116
|
if (nativeToFiatRate === null || nativeToUsdRate === null) {
|
|
113
117
|
return undefined;
|
|
114
118
|
}
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
119
|
+
const isStablecoin = STABLECOINS[chainId]?.includes(tokenAddress.toLowerCase());
|
|
120
|
+
const usdRate = isStablecoin
|
|
121
|
+
? '1'
|
|
122
|
+
: new BigNumber(tokenToNativeRate ?? 1)
|
|
123
|
+
.multipliedBy(nativeToUsdRate)
|
|
124
|
+
.toString(10);
|
|
118
125
|
const fiatRate = new BigNumber(tokenToNativeRate ?? 1)
|
|
119
126
|
.multipliedBy(nativeToFiatRate)
|
|
120
127
|
.toString(10);
|
package/dist/utils/token.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.mjs","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { uniq } from 'lodash';\n\nimport { NATIVE_TOKEN_ADDRESS } from '../constants';\nimport type { FiatRates, TransactionPayControllerMessenger } from '../types';\n\n/**\n * Get the token balance for a specific account and token.\n *\n * @param messenger - Controller messenger.\n * @param account - Address of the account.\n * @param chainId - Id of the chain.\n * @param tokenAddress - Address of the token contract.\n * @returns The token balance as a BigNumber.\n */\nexport function getTokenBalance(\n messenger: TransactionPayControllerMessenger,\n account: Hex,\n chainId: Hex,\n tokenAddress: Hex,\n): string {\n const tokenBalanceControllerState = messenger.call(\n 'TokenBalancesController:getState',\n );\n\n const normalizedAccount = account.toLowerCase() as Hex;\n const normalizedTokenAddress = toChecksumHexAddress(tokenAddress) as Hex;\n const isNative = normalizedTokenAddress === getNativeToken(chainId);\n\n const balanceHex =\n tokenBalanceControllerState.tokenBalances?.[normalizedAccount]?.[chainId]?.[\n normalizedTokenAddress\n ];\n\n if (!isNative && balanceHex === undefined) {\n return '0';\n }\n\n if (!isNative && balanceHex) {\n return new BigNumber(balanceHex, 16).toString(10);\n }\n\n const accountTrackerControllerState = messenger.call(\n 'AccountTrackerController:getState',\n );\n\n const chainAccounts =\n accountTrackerControllerState.accountsByChainId?.[chainId];\n\n const checksumAccount = toChecksumHexAddress(normalizedAccount) as Hex;\n const nativeBalanceHex = chainAccounts?.[checksumAccount]?.balance as Hex;\n\n return new BigNumber(nativeBalanceHex ?? '0x0', 16).toString(10);\n}\n\n/**\n * Get the token balance for a specific account and token.\n *\n * @param messenger - Controller messenger.\n * @param account - Address of the account.\n * @returns The token balance as a BigNumber.\n */\nexport function getAllTokenBalances(\n messenger: TransactionPayControllerMessenger,\n account: Hex,\n) {\n const tokenBalanceControllerState = messenger.call(\n 'TokenBalancesController:getState',\n );\n\n const accountTrackerControllerState = messenger.call(\n 'AccountTrackerController:getState',\n );\n\n const nativeChainIds = Object.keys(\n accountTrackerControllerState.accountsByChainId,\n ) as Hex[];\n\n const normalizedAccount = account.toLowerCase() as Hex;\n\n const balancesByTokenByChain =\n tokenBalanceControllerState.tokenBalances?.[normalizedAccount];\n\n const tokenChainIds = Object.keys(balancesByTokenByChain) as Hex[];\n const chainIds = uniq([...tokenChainIds, ...nativeChainIds]);\n\n return chainIds.flatMap((chainId) => {\n const tokenAddresses = [\n ...(Object.keys(balancesByTokenByChain[chainId] ?? {}) as Hex[]),\n getNativeToken(chainId),\n ];\n\n return tokenAddresses.map((tokenAddress) => ({\n chainId,\n tokenAddress,\n balance: getTokenBalance(messenger, account, chainId, tokenAddress),\n }));\n });\n}\n\n/**\n * Get the token decimals for a specific token.\n *\n * @param messenger - Controller messenger.\n * @param tokenAddress - Address of the token contract.\n * @param chainId - Id of the chain.\n * @returns The token decimals or undefined if the token is not found.\n */\nexport function getTokenInfo(\n messenger: TransactionPayControllerMessenger,\n tokenAddress: Hex,\n chainId: Hex,\n): { decimals: number; symbol: string } | undefined {\n const controllerState = messenger.call('TokensController:getState');\n const normalizedTokenAddress = tokenAddress.toLowerCase() as Hex;\n\n const isNative =\n normalizedTokenAddress === getNativeToken(chainId).toLowerCase();\n\n const token = Object.values(controllerState.allTokens?.[chainId] ?? {})\n .flat()\n .find((t) => t.address.toLowerCase() === normalizedTokenAddress);\n\n if (!token && !isNative) {\n return undefined;\n }\n\n if (token && !isNative) {\n return { decimals: Number(token.decimals), symbol: token.symbol };\n }\n\n const ticker = getTicker(chainId, messenger);\n\n if (!ticker) {\n return undefined;\n }\n\n return { decimals: 18, symbol: ticker };\n}\n\n/**\n * Calculate fiat rates for a specific token.\n *\n * @param messenger - Controller messenger.\n * @param tokenAddress - Address of the token contract.\n * @param chainId - Id of the chain.\n * @returns An object containing the USD and fiat rates, or undefined if rates are not available.\n */\nexport function getTokenFiatRate(\n messenger: TransactionPayControllerMessenger,\n tokenAddress: Hex,\n chainId: Hex,\n): FiatRates | undefined {\n const ticker = getTicker(chainId, messenger);\n\n if (!ticker) {\n return undefined;\n }\n\n const rateControllerState = messenger.call('TokenRatesController:getState');\n\n const currencyRateControllerState = messenger.call(\n 'CurrencyRateController:getState',\n );\n\n const normalizedTokenAddress = toChecksumHexAddress(tokenAddress) as Hex;\n const isNative = normalizedTokenAddress === getNativeToken(chainId);\n\n const tokenToNativeRate =\n rateControllerState.marketData?.[chainId]?.[normalizedTokenAddress]?.price;\n\n if (tokenToNativeRate === undefined && !isNative) {\n return undefined;\n }\n\n const {\n conversionRate: nativeToFiatRate,\n usdConversionRate: nativeToUsdRate,\n } = currencyRateControllerState.currencyRates?.[ticker] ?? {\n conversionRate: null,\n usdConversionRate: null,\n };\n\n if (nativeToFiatRate === null || nativeToUsdRate === null) {\n return undefined;\n }\n\n const usdRate = new BigNumber(tokenToNativeRate ?? 1)\n .multipliedBy(nativeToUsdRate)\n .toString(10);\n\n const fiatRate = new BigNumber(tokenToNativeRate ?? 1)\n .multipliedBy(nativeToFiatRate)\n .toString(10);\n\n return { usdRate, fiatRate };\n}\n\n/**\n * Get the native token address for a given chain ID.\n *\n * @param chainId - Chain ID.\n * @returns - Native token address for the given chain ID.\n */\nexport function getNativeToken(chainId: Hex) {\n switch (chainId) {\n case '0x89':\n return '0x0000000000000000000000000000000000001010';\n default:\n return NATIVE_TOKEN_ADDRESS;\n }\n}\n\n/**\n * Get the ticker for a given chain ID.\n *\n * @param chainId - Chain ID.\n * @param messenger - Messenger instance.\n * @returns Ticker symbol for the given chain ID or undefined if not found.\n */\nfunction getTicker(\n chainId: Hex,\n messenger: TransactionPayControllerMessenger,\n): string | undefined {\n try {\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n\n const networkConfiguration = messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkConfiguration.configuration.ticker;\n } catch {\n return undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"token.mjs","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { uniq } from 'lodash';\n\nimport {\n ARBITRUM_USDC_ADDRESS,\n CHAIN_ID_ARBITRUM,\n CHAIN_ID_POLYGON,\n NATIVE_TOKEN_ADDRESS,\n POLYGON_USDCE_ADDRESS,\n} from '../constants';\nimport type { FiatRates, TransactionPayControllerMessenger } from '../types';\n\nconst STABLECOINS: Record<Hex, Hex[]> = {\n [CHAIN_ID_ARBITRUM]: [ARBITRUM_USDC_ADDRESS.toLowerCase() as Hex],\n [CHAIN_ID_POLYGON]: [POLYGON_USDCE_ADDRESS.toLowerCase() as Hex],\n};\n\n/**\n * Get the token balance for a specific account and token.\n *\n * @param messenger - Controller messenger.\n * @param account - Address of the account.\n * @param chainId - Id of the chain.\n * @param tokenAddress - Address of the token contract.\n * @returns Raw token balance as a decimal string.\n */\nexport function getTokenBalance(\n messenger: TransactionPayControllerMessenger,\n account: Hex,\n chainId: Hex,\n tokenAddress: Hex,\n): string {\n const tokenBalanceControllerState = messenger.call(\n 'TokenBalancesController:getState',\n );\n\n const normalizedAccount = account.toLowerCase() as Hex;\n const normalizedTokenAddress = toChecksumHexAddress(tokenAddress) as Hex;\n const isNative = normalizedTokenAddress === getNativeToken(chainId);\n\n const balanceHex =\n tokenBalanceControllerState.tokenBalances?.[normalizedAccount]?.[chainId]?.[\n normalizedTokenAddress\n ];\n\n if (!isNative && balanceHex === undefined) {\n return '0';\n }\n\n if (!isNative && balanceHex) {\n return new BigNumber(balanceHex, 16).toString(10);\n }\n\n const accountTrackerControllerState = messenger.call(\n 'AccountTrackerController:getState',\n );\n\n const chainAccounts =\n accountTrackerControllerState.accountsByChainId?.[chainId];\n\n const checksumAccount = toChecksumHexAddress(normalizedAccount) as Hex;\n const nativeBalanceHex = chainAccounts?.[checksumAccount]?.balance as Hex;\n\n return new BigNumber(nativeBalanceHex ?? '0x0', 16).toString(10);\n}\n\n/**\n * Get the token balance for a specific account and token.\n *\n * @param messenger - Controller messenger.\n * @param account - Address of the account.\n * @returns The token balance as a BigNumber.\n */\nexport function getAllTokenBalances(\n messenger: TransactionPayControllerMessenger,\n account: Hex,\n) {\n const tokenBalanceControllerState = messenger.call(\n 'TokenBalancesController:getState',\n );\n\n const accountTrackerControllerState = messenger.call(\n 'AccountTrackerController:getState',\n );\n\n const nativeChainIds = Object.keys(\n accountTrackerControllerState.accountsByChainId,\n ) as Hex[];\n\n const normalizedAccount = account.toLowerCase() as Hex;\n\n const balancesByTokenByChain =\n tokenBalanceControllerState.tokenBalances?.[normalizedAccount];\n\n const tokenChainIds = Object.keys(balancesByTokenByChain) as Hex[];\n const chainIds = uniq([...tokenChainIds, ...nativeChainIds]);\n\n return chainIds.flatMap((chainId) => {\n const tokenAddresses = [\n ...(Object.keys(balancesByTokenByChain[chainId] ?? {}) as Hex[]),\n getNativeToken(chainId),\n ];\n\n return tokenAddresses.map((tokenAddress) => ({\n chainId,\n tokenAddress,\n balance: getTokenBalance(messenger, account, chainId, tokenAddress),\n }));\n });\n}\n\n/**\n * Get the token decimals for a specific token.\n *\n * @param messenger - Controller messenger.\n * @param tokenAddress - Address of the token contract.\n * @param chainId - Id of the chain.\n * @returns The token decimals or undefined if the token is not found.\n */\nexport function getTokenInfo(\n messenger: TransactionPayControllerMessenger,\n tokenAddress: Hex,\n chainId: Hex,\n): { decimals: number; symbol: string } | undefined {\n const controllerState = messenger.call('TokensController:getState');\n const normalizedTokenAddress = tokenAddress.toLowerCase() as Hex;\n\n const isNative =\n normalizedTokenAddress === getNativeToken(chainId).toLowerCase();\n\n const token = Object.values(controllerState.allTokens?.[chainId] ?? {})\n .flat()\n .find((t) => t.address.toLowerCase() === normalizedTokenAddress);\n\n if (!token && !isNative) {\n return undefined;\n }\n\n if (token && !isNative) {\n return { decimals: Number(token.decimals), symbol: token.symbol };\n }\n\n const ticker = getTicker(chainId, messenger);\n\n if (!ticker) {\n return undefined;\n }\n\n return { decimals: 18, symbol: ticker };\n}\n\n/**\n * Calculate fiat rates for a specific token.\n *\n * @param messenger - Controller messenger.\n * @param tokenAddress - Address of the token contract.\n * @param chainId - Id of the chain.\n * @returns An object containing the USD and fiat rates, or undefined if rates are not available.\n */\nexport function getTokenFiatRate(\n messenger: TransactionPayControllerMessenger,\n tokenAddress: Hex,\n chainId: Hex,\n): FiatRates | undefined {\n const ticker = getTicker(chainId, messenger);\n\n if (!ticker) {\n return undefined;\n }\n\n const rateControllerState = messenger.call('TokenRatesController:getState');\n\n const currencyRateControllerState = messenger.call(\n 'CurrencyRateController:getState',\n );\n\n const normalizedTokenAddress = toChecksumHexAddress(tokenAddress) as Hex;\n const isNative = normalizedTokenAddress === getNativeToken(chainId);\n\n const tokenToNativeRate =\n rateControllerState.marketData?.[chainId]?.[normalizedTokenAddress]?.price;\n\n if (tokenToNativeRate === undefined && !isNative) {\n return undefined;\n }\n\n const {\n conversionRate: nativeToFiatRate,\n usdConversionRate: nativeToUsdRate,\n } = currencyRateControllerState.currencyRates?.[ticker] ?? {\n conversionRate: null,\n usdConversionRate: null,\n };\n\n if (nativeToFiatRate === null || nativeToUsdRate === null) {\n return undefined;\n }\n const isStablecoin = STABLECOINS[chainId]?.includes(\n tokenAddress.toLowerCase() as Hex,\n );\n\n const usdRate = isStablecoin\n ? '1'\n : new BigNumber(tokenToNativeRate ?? 1)\n .multipliedBy(nativeToUsdRate)\n .toString(10);\n\n const fiatRate = new BigNumber(tokenToNativeRate ?? 1)\n .multipliedBy(nativeToFiatRate)\n .toString(10);\n\n return { usdRate, fiatRate };\n}\n\n/**\n * Get the native token address for a given chain ID.\n *\n * @param chainId - Chain ID.\n * @returns - Native token address for the given chain ID.\n */\nexport function getNativeToken(chainId: Hex) {\n switch (chainId) {\n case '0x89':\n return '0x0000000000000000000000000000000000001010';\n default:\n return NATIVE_TOKEN_ADDRESS;\n }\n}\n\n/**\n * Get the ticker for a given chain ID.\n *\n * @param chainId - Chain ID.\n * @param messenger - Messenger instance.\n * @returns Ticker symbol for the given chain ID or undefined if not found.\n */\nfunction getTicker(\n chainId: Hex,\n messenger: TransactionPayControllerMessenger,\n): string | undefined {\n try {\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n\n const networkConfiguration = messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n return networkConfiguration.configuration.ticker;\n } catch {\n return undefined;\n }\n}\n"]}
|
package/dist/utils/totals.cjs
CHANGED
|
@@ -14,47 +14,45 @@ const gas_1 = require("./gas.cjs");
|
|
|
14
14
|
* @returns The calculated totals in USD and fiat currency.
|
|
15
15
|
*/
|
|
16
16
|
function calculateTotals({ quotes, messenger, tokens, transaction, }) {
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const sourceNetworkFeeUsd = sumProperty(quotes, (quote) => quote.fees.sourceNetwork.usd);
|
|
17
|
+
const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));
|
|
18
|
+
const sourceNetworkFeeMax = sumAmounts(quotes.map((quote) => quote.fees.sourceNetwork.max));
|
|
19
|
+
const sourceNetworkFeeEstimate = sumAmounts(quotes.map((quote) => quote.fees.sourceNetwork.estimate));
|
|
21
20
|
const transactionNetworkFee = (0, gas_1.calculateTransactionGasCost)(transaction, messenger);
|
|
22
|
-
const
|
|
23
|
-
?
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
: transactionNetworkFee
|
|
21
|
+
const targetNetworkFee = quotes?.length
|
|
22
|
+
? {
|
|
23
|
+
...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),
|
|
24
|
+
isGasFeeToken: false,
|
|
25
|
+
}
|
|
26
|
+
: transactionNetworkFee;
|
|
27
|
+
const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));
|
|
28
28
|
const quoteTokens = tokens.filter((t) => !t.skipIfBalance);
|
|
29
29
|
const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);
|
|
30
30
|
const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);
|
|
31
|
-
const totalFiat = new bignumber_js_1.BigNumber(
|
|
32
|
-
.plus(
|
|
33
|
-
.plus(
|
|
31
|
+
const totalFiat = new bignumber_js_1.BigNumber(providerFee.fiat)
|
|
32
|
+
.plus(sourceNetworkFeeEstimate.fiat)
|
|
33
|
+
.plus(targetNetworkFee.fiat)
|
|
34
34
|
.plus(amountFiat)
|
|
35
35
|
.toString(10);
|
|
36
|
-
const totalUsd = new bignumber_js_1.BigNumber(
|
|
37
|
-
.plus(
|
|
38
|
-
.plus(
|
|
36
|
+
const totalUsd = new bignumber_js_1.BigNumber(providerFee.usd)
|
|
37
|
+
.plus(sourceNetworkFeeEstimate.usd)
|
|
38
|
+
.plus(targetNetworkFee.usd)
|
|
39
39
|
.plus(amountUsd)
|
|
40
40
|
.toString(10);
|
|
41
41
|
const estimatedDuration = Number(sumProperty(quotes, (quote) => quote.estimatedDuration));
|
|
42
|
+
const isTargetGasFeeToken = targetNetworkFee.isGasFeeToken ||
|
|
43
|
+
quotes.some((quote) => quote.fees.isTargetGasFeeToken);
|
|
42
44
|
return {
|
|
43
45
|
estimatedDuration,
|
|
44
46
|
fees: {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
usd: providerFeeUsd,
|
|
48
|
-
},
|
|
47
|
+
isTargetGasFeeToken,
|
|
48
|
+
provider: providerFee,
|
|
49
49
|
sourceNetwork: {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
targetNetwork: {
|
|
54
|
-
fiat: targetNetworkFeeFiat,
|
|
55
|
-
usd: targetNetworkFeeUsd,
|
|
50
|
+
estimate: sourceNetworkFeeEstimate,
|
|
51
|
+
max: sourceNetworkFeeMax,
|
|
56
52
|
},
|
|
53
|
+
targetNetwork: targetNetworkFee,
|
|
57
54
|
},
|
|
55
|
+
sourceAmount,
|
|
58
56
|
total: {
|
|
59
57
|
fiat: totalFiat,
|
|
60
58
|
usd: totalUsd,
|
|
@@ -62,6 +60,33 @@ function calculateTotals({ quotes, messenger, tokens, transaction, }) {
|
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
62
|
exports.calculateTotals = calculateTotals;
|
|
63
|
+
/**
|
|
64
|
+
* Sum a list of amounts.
|
|
65
|
+
*
|
|
66
|
+
* @param data - List of amounts.
|
|
67
|
+
* @returns Total amount.
|
|
68
|
+
*/
|
|
69
|
+
function sumAmounts(data) {
|
|
70
|
+
const fiatValue = sumFiat(data);
|
|
71
|
+
const human = sumProperty(data, (item) => item.human);
|
|
72
|
+
const raw = sumProperty(data, (item) => item.raw);
|
|
73
|
+
return {
|
|
74
|
+
...fiatValue,
|
|
75
|
+
human,
|
|
76
|
+
raw,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sum a list of fiat value.
|
|
81
|
+
*
|
|
82
|
+
* @param data - List of fiat values.
|
|
83
|
+
* @returns Total fiat value.
|
|
84
|
+
*/
|
|
85
|
+
function sumFiat(data) {
|
|
86
|
+
const fiat = sumProperty(data, (item) => item.fiat);
|
|
87
|
+
const usd = sumProperty(data, (item) => item.usd);
|
|
88
|
+
return { fiat, usd };
|
|
89
|
+
}
|
|
65
90
|
/**
|
|
66
91
|
* Sum a specific property from a list of items.
|
|
67
92
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totals.cjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":";;;AACA,+CAAyC;AAEzC,mCAAoD;
|
|
1
|
+
{"version":3,"file":"totals.cjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calculateTransactionGasCost } from './gas';\nimport type {\n Amount,\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const quoteTokens = tokens.filter((t) => !t.skipIfBalance);\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(amountFiat)\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(amountUsd)\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isTargetGasFeeToken =\n targetNetworkFee.isGasFeeToken ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isTargetGasFeeToken,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Sum a list of amounts.\n *\n * @param data - List of amounts.\n * @returns Total amount.\n */\nfunction sumAmounts(data: Amount[]): Amount {\n const fiatValue = sumFiat(data);\n const human = sumProperty(data, (item) => item.human);\n const raw = sumProperty(data, (item) => item.raw);\n\n return {\n ...fiatValue,\n human,\n raw,\n };\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<T>(\n data: T[],\n getProperty: (item: T) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totals.d.cts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"totals.d.cts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAGV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAElB;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CAiEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totals.d.mts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"totals.d.mts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAGV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAElB;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CAiEvB"}
|
package/dist/utils/totals.mjs
CHANGED
|
@@ -11,53 +11,78 @@ import { calculateTransactionGasCost } from "./gas.mjs";
|
|
|
11
11
|
* @returns The calculated totals in USD and fiat currency.
|
|
12
12
|
*/
|
|
13
13
|
export function calculateTotals({ quotes, messenger, tokens, transaction, }) {
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const sourceNetworkFeeUsd = sumProperty(quotes, (quote) => quote.fees.sourceNetwork.usd);
|
|
14
|
+
const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));
|
|
15
|
+
const sourceNetworkFeeMax = sumAmounts(quotes.map((quote) => quote.fees.sourceNetwork.max));
|
|
16
|
+
const sourceNetworkFeeEstimate = sumAmounts(quotes.map((quote) => quote.fees.sourceNetwork.estimate));
|
|
18
17
|
const transactionNetworkFee = calculateTransactionGasCost(transaction, messenger);
|
|
19
|
-
const
|
|
20
|
-
?
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
: transactionNetworkFee
|
|
18
|
+
const targetNetworkFee = quotes?.length
|
|
19
|
+
? {
|
|
20
|
+
...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),
|
|
21
|
+
isGasFeeToken: false,
|
|
22
|
+
}
|
|
23
|
+
: transactionNetworkFee;
|
|
24
|
+
const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));
|
|
25
25
|
const quoteTokens = tokens.filter((t) => !t.skipIfBalance);
|
|
26
26
|
const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);
|
|
27
27
|
const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);
|
|
28
|
-
const totalFiat = new BigNumber(
|
|
29
|
-
.plus(
|
|
30
|
-
.plus(
|
|
28
|
+
const totalFiat = new BigNumber(providerFee.fiat)
|
|
29
|
+
.plus(sourceNetworkFeeEstimate.fiat)
|
|
30
|
+
.plus(targetNetworkFee.fiat)
|
|
31
31
|
.plus(amountFiat)
|
|
32
32
|
.toString(10);
|
|
33
|
-
const totalUsd = new BigNumber(
|
|
34
|
-
.plus(
|
|
35
|
-
.plus(
|
|
33
|
+
const totalUsd = new BigNumber(providerFee.usd)
|
|
34
|
+
.plus(sourceNetworkFeeEstimate.usd)
|
|
35
|
+
.plus(targetNetworkFee.usd)
|
|
36
36
|
.plus(amountUsd)
|
|
37
37
|
.toString(10);
|
|
38
38
|
const estimatedDuration = Number(sumProperty(quotes, (quote) => quote.estimatedDuration));
|
|
39
|
+
const isTargetGasFeeToken = targetNetworkFee.isGasFeeToken ||
|
|
40
|
+
quotes.some((quote) => quote.fees.isTargetGasFeeToken);
|
|
39
41
|
return {
|
|
40
42
|
estimatedDuration,
|
|
41
43
|
fees: {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
usd: providerFeeUsd,
|
|
45
|
-
},
|
|
44
|
+
isTargetGasFeeToken,
|
|
45
|
+
provider: providerFee,
|
|
46
46
|
sourceNetwork: {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
targetNetwork: {
|
|
51
|
-
fiat: targetNetworkFeeFiat,
|
|
52
|
-
usd: targetNetworkFeeUsd,
|
|
47
|
+
estimate: sourceNetworkFeeEstimate,
|
|
48
|
+
max: sourceNetworkFeeMax,
|
|
53
49
|
},
|
|
50
|
+
targetNetwork: targetNetworkFee,
|
|
54
51
|
},
|
|
52
|
+
sourceAmount,
|
|
55
53
|
total: {
|
|
56
54
|
fiat: totalFiat,
|
|
57
55
|
usd: totalUsd,
|
|
58
56
|
},
|
|
59
57
|
};
|
|
60
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Sum a list of amounts.
|
|
61
|
+
*
|
|
62
|
+
* @param data - List of amounts.
|
|
63
|
+
* @returns Total amount.
|
|
64
|
+
*/
|
|
65
|
+
function sumAmounts(data) {
|
|
66
|
+
const fiatValue = sumFiat(data);
|
|
67
|
+
const human = sumProperty(data, (item) => item.human);
|
|
68
|
+
const raw = sumProperty(data, (item) => item.raw);
|
|
69
|
+
return {
|
|
70
|
+
...fiatValue,
|
|
71
|
+
human,
|
|
72
|
+
raw,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sum a list of fiat value.
|
|
77
|
+
*
|
|
78
|
+
* @param data - List of fiat values.
|
|
79
|
+
* @returns Total fiat value.
|
|
80
|
+
*/
|
|
81
|
+
function sumFiat(data) {
|
|
82
|
+
const fiat = sumProperty(data, (item) => item.fiat);
|
|
83
|
+
const usd = sumProperty(data, (item) => item.usd);
|
|
84
|
+
return { fiat, usd };
|
|
85
|
+
}
|
|
61
86
|
/**
|
|
62
87
|
* Sum a specific property from a list of items.
|
|
63
88
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totals.mjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,EAAE,2BAA2B,EAAE,kBAAc;
|
|
1
|
+
{"version":3,"file":"totals.mjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calculateTransactionGasCost } from './gas';\nimport type {\n Amount,\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const quoteTokens = tokens.filter((t) => !t.skipIfBalance);\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(amountFiat)\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(amountUsd)\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isTargetGasFeeToken =\n targetNetworkFee.isGasFeeToken ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isTargetGasFeeToken,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Sum a list of amounts.\n *\n * @param data - List of amounts.\n * @returns Total amount.\n */\nfunction sumAmounts(data: Amount[]): Amount {\n const fiatValue = sumFiat(data);\n const human = sumProperty(data, (item) => item.human);\n const raw = sumProperty(data, (item) => item.raw);\n\n return {\n ...fiatValue,\n human,\n raw,\n };\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<T>(\n data: T[],\n getProperty: (item: T) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/transaction-pay-controller",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "Manages alternate payment strategies to provide required funds for transactions in MetaMask",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -64,12 +64,12 @@
|
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@metamask/assets-controllers": "^88.0.0",
|
|
66
66
|
"@metamask/auto-changelog": "^3.4.4",
|
|
67
|
-
"@metamask/bridge-controller": "^60.
|
|
68
|
-
"@metamask/bridge-status-controller": "^60.
|
|
67
|
+
"@metamask/bridge-controller": "^60.1.0",
|
|
68
|
+
"@metamask/bridge-status-controller": "^60.1.0",
|
|
69
69
|
"@metamask/gas-fee-controller": "^25.0.0",
|
|
70
70
|
"@metamask/network-controller": "^25.0.0",
|
|
71
71
|
"@metamask/remote-feature-flag-controller": "^2.0.0",
|
|
72
|
-
"@metamask/transaction-controller": "^61.
|
|
72
|
+
"@metamask/transaction-controller": "^61.3.0",
|
|
73
73
|
"@ts-bridge/cli": "^0.6.4",
|
|
74
74
|
"@types/jest": "^27.4.1",
|
|
75
75
|
"deepmerge": "^4.2.2",
|