@metamask/bridge-controller 64.0.0 → 64.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/dist/bridge-controller.cjs.map +1 -1
  3. package/dist/bridge-controller.d.cts +2 -2
  4. package/dist/bridge-controller.d.cts.map +1 -1
  5. package/dist/bridge-controller.d.mts +2 -2
  6. package/dist/bridge-controller.d.mts.map +1 -1
  7. package/dist/bridge-controller.mjs.map +1 -1
  8. package/dist/selectors.cjs +11 -2
  9. package/dist/selectors.cjs.map +1 -1
  10. package/dist/selectors.d.cts +474 -18
  11. package/dist/selectors.d.cts.map +1 -1
  12. package/dist/selectors.d.mts +474 -18
  13. package/dist/selectors.d.mts.map +1 -1
  14. package/dist/selectors.mjs +11 -2
  15. package/dist/selectors.mjs.map +1 -1
  16. package/dist/utils/assets.cjs.map +1 -1
  17. package/dist/utils/assets.d.cts.map +1 -1
  18. package/dist/utils/assets.d.mts.map +1 -1
  19. package/dist/utils/assets.mjs.map +1 -1
  20. package/dist/utils/bridge.cjs.map +1 -1
  21. package/dist/utils/bridge.d.cts +1 -2
  22. package/dist/utils/bridge.d.cts.map +1 -1
  23. package/dist/utils/bridge.d.mts +1 -2
  24. package/dist/utils/bridge.d.mts.map +1 -1
  25. package/dist/utils/bridge.mjs.map +1 -1
  26. package/dist/utils/caip-formatters.cjs.map +1 -1
  27. package/dist/utils/caip-formatters.d.cts +1 -2
  28. package/dist/utils/caip-formatters.d.cts.map +1 -1
  29. package/dist/utils/caip-formatters.d.mts +1 -2
  30. package/dist/utils/caip-formatters.d.mts.map +1 -1
  31. package/dist/utils/caip-formatters.mjs.map +1 -1
  32. package/dist/utils/fetch.cjs.map +1 -1
  33. package/dist/utils/fetch.d.cts.map +1 -1
  34. package/dist/utils/fetch.d.mts.map +1 -1
  35. package/dist/utils/fetch.mjs.map +1 -1
  36. package/dist/utils/metrics/properties.cjs.map +1 -1
  37. package/dist/utils/metrics/properties.d.cts +1 -2
  38. package/dist/utils/metrics/properties.d.cts.map +1 -1
  39. package/dist/utils/metrics/properties.d.mts +1 -2
  40. package/dist/utils/metrics/properties.d.mts.map +1 -1
  41. package/dist/utils/metrics/properties.mjs.map +1 -1
  42. package/dist/utils/quote-fees.cjs +1 -0
  43. package/dist/utils/quote-fees.cjs.map +1 -1
  44. package/dist/utils/quote-fees.d.cts.map +1 -1
  45. package/dist/utils/quote-fees.d.mts.map +1 -1
  46. package/dist/utils/quote-fees.mjs +1 -0
  47. package/dist/utils/quote-fees.mjs.map +1 -1
  48. package/dist/utils/quote.cjs +7 -11
  49. package/dist/utils/quote.cjs.map +1 -1
  50. package/dist/utils/quote.d.cts +4 -5
  51. package/dist/utils/quote.d.cts.map +1 -1
  52. package/dist/utils/quote.d.mts +4 -5
  53. package/dist/utils/quote.d.mts.map +1 -1
  54. package/dist/utils/quote.mjs +7 -11
  55. package/dist/utils/quote.mjs.map +1 -1
  56. package/dist/utils/trade-utils.d.cts +1 -0
  57. package/dist/utils/trade-utils.d.cts.map +1 -1
  58. package/dist/utils/trade-utils.d.mts +1 -0
  59. package/dist/utils/trade-utils.d.mts.map +1 -1
  60. package/dist/utils/validators.cjs +1 -0
  61. package/dist/utils/validators.cjs.map +1 -1
  62. package/dist/utils/validators.d.cts +9 -0
  63. package/dist/utils/validators.d.cts.map +1 -1
  64. package/dist/utils/validators.d.mts +9 -0
  65. package/dist/utils/validators.d.mts.map +1 -1
  66. package/dist/utils/validators.mjs +1 -0
  67. package/dist/utils/validators.mjs.map +1 -1
  68. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"quote.cjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\nimport { FeatureId } from './validators';\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n NonEvmFees,\n TxData,\n} from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponse['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponse & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // Find all fees that will be taken from the src token\n const srcTokenFees = Object.values(feeData).filter(\n (fee) => fee && fee.amount && fee.asset?.assetId === srcAsset.assetId,\n );\n const sentAmount = srcTokenFees.reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponse<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei: string;\n priorityFeePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(\n priorityFeePerGasInDecGwei,\n );\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(totalFeePerGasInDecGwei)\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;\n estimatedBaseFeeInDecGwei: string;\n maxFeePerGasInDecGwei: string;\n maxPriorityFeePerGasInDecGwei: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n {\n effective: gasFeeToDisplay,\n }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd || '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponse[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
1
+ {"version":3,"file":"quote.cjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\nimport { FeatureId } from './validators';\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n NonEvmFees,\n TxData,\n} from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponse['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponse & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // Find all fees that will be taken from the src token\n const srcTokenFees = Object.values(feeData).filter(\n (fee) => fee && fee.amount && fee.asset?.assetId === srcAsset.assetId,\n );\n const sentAmount = srcTokenFees.reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponse<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(feePerGasInDecGwei)\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n maxFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;\n maxFeePerGasInDecGwei: string;\n feePerGasInDecGwei: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n { total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd || '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponse[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
@@ -29,21 +29,20 @@ export declare const calcRelayerFee: (quoteResponse: QuoteResponse<TxData, TxDat
29
29
  valueInCurrency: BigNumber | null;
30
30
  usd: BigNumber | null;
31
31
  };
32
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
32
+ export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
33
33
  bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;
34
- estimatedBaseFeeInDecGwei: string;
35
34
  maxFeePerGasInDecGwei: string;
36
- maxPriorityFeePerGasInDecGwei: string;
35
+ feePerGasInDecGwei: string;
37
36
  } & ExchangeRate) => QuoteMetadata['gasFee'];
38
37
  /**
39
38
  * Calculates the total estimated network fees for the bridge transaction
40
39
  *
41
40
  * @param gasFee - The gas fee for the bridge transaction
42
- * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
41
+ * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
43
42
  * @param relayerFee - The relayer fee paid to bridge providers
44
43
  * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
45
44
  */
46
- export declare const calcTotalEstimatedNetworkFee: ({ effective: gasFeeToDisplay, }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
45
+ export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
47
46
  amount: string;
48
47
  valueInCurrency: string | null;
49
48
  usd: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"quote.d.cts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,EAAE,SAAS,EAAE,yBAAqB;AACzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,MAAM,EACP,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,aAAa,CAAC,OAAO,CAAC,WACD,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,aAAa,GAAG,UAAU,qCACJ,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,cAAc,MAAM,EAAE,MAAM,CAAC,qCACT,YAAY;;;;CAwBhD,CAAC;AAgDF,eAAO,MAAM,8BAA8B;iBAQ5B,cAAc,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;+BAC3B,MAAM;2BACV,MAAM;mCACE,MAAM;qBACpB,aAAa,CAAC,QAAQ,CAgExC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,oCAGpC,WAAW,qCAAqC,CAAC,cACxC,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,aAAa,EAAE,aACZ,SAAS,GAAG,IAAI,oBAW5B,CAAC"}
1
+ {"version":3,"file":"quote.d.cts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,EAAE,SAAS,EAAE,yBAAqB;AACzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,MAAM,EACP,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,aAAa,CAAC,OAAO,CAAC,WACD,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,aAAa,GAAG,UAAU,qCACJ,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,cAAc,MAAM,EAAE,MAAM,CAAC,qCACT,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,cAAc,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;2BAC/B,MAAM;wBACT,MAAM;qBACT,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,aAAa,EAAE,aACZ,SAAS,GAAG,IAAI,oBAW5B,CAAC"}
@@ -29,21 +29,20 @@ export declare const calcRelayerFee: (quoteResponse: QuoteResponse<TxData, TxDat
29
29
  valueInCurrency: BigNumber | null;
30
30
  usd: BigNumber | null;
31
31
  };
32
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
32
+ export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
33
33
  bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;
34
- estimatedBaseFeeInDecGwei: string;
35
34
  maxFeePerGasInDecGwei: string;
36
- maxPriorityFeePerGasInDecGwei: string;
35
+ feePerGasInDecGwei: string;
37
36
  } & ExchangeRate) => QuoteMetadata['gasFee'];
38
37
  /**
39
38
  * Calculates the total estimated network fees for the bridge transaction
40
39
  *
41
40
  * @param gasFee - The gas fee for the bridge transaction
42
- * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
41
+ * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
43
42
  * @param relayerFee - The relayer fee paid to bridge providers
44
43
  * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
45
44
  */
46
- export declare const calcTotalEstimatedNetworkFee: ({ effective: gasFeeToDisplay, }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
45
+ export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
47
46
  amount: string;
48
47
  valueInCurrency: string | null;
49
48
  usd: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"quote.d.mts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,EAAE,SAAS,EAAE,yBAAqB;AACzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,MAAM,EACP,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,aAAa,CAAC,OAAO,CAAC,WACD,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,aAAa,GAAG,UAAU,qCACJ,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,cAAc,MAAM,EAAE,MAAM,CAAC,qCACT,YAAY;;;;CAwBhD,CAAC;AAgDF,eAAO,MAAM,8BAA8B;iBAQ5B,cAAc,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;+BAC3B,MAAM;2BACV,MAAM;mCACE,MAAM;qBACpB,aAAa,CAAC,QAAQ,CAgExC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,oCAGpC,WAAW,qCAAqC,CAAC,cACxC,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,aAAa,EAAE,aACZ,SAAS,GAAG,IAAI,oBAW5B,CAAC"}
1
+ {"version":3,"file":"quote.d.mts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,EAAE,SAAS,EAAE,yBAAqB;AACzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,MAAM,EACP,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,aAAa,CAAC,OAAO,CAAC,WACD,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,aAAa,GAAG,UAAU,qCACJ,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,cAAc,MAAM,EAAE,MAAM,CAAC,qCACT,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,cAAc,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;2BAC/B,MAAM;wBACT,MAAM;qBACT,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,aAAa,EAAE,aACZ,SAAS,GAAG,IAAI,oBAW5B,CAAC"}
@@ -121,14 +121,13 @@ export const calcRelayerFee = (quoteResponse, { exchangeRate, usdExchangeRate })
121
121
  usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,
122
122
  };
123
123
  };
124
- const calcTotalGasFee = ({ approvalGasLimit, resetApprovalGasLimit, tradeGasLimit, l1GasFeesInHexWei, feePerGasInDecGwei, priorityFeePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
124
+ const calcTotalGasFee = ({ approvalGasLimit, resetApprovalGasLimit, tradeGasLimit, l1GasFeesInHexWei, feePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
125
125
  const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')
126
126
  .plus(approvalGasLimit?.toString() ?? '0')
127
127
  .plus(resetApprovalGasLimit?.toString() ?? '0');
128
- const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(priorityFeePerGasInDecGwei);
129
128
  const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));
130
129
  const gasFeesInDecGwei = totalGasLimitInDec
131
- .times(totalFeePerGasInDecGwei)
130
+ .times(feePerGasInDecGwei)
132
131
  .plus(l1GasFeesInDecGWei);
133
132
  const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));
134
133
  const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate
@@ -143,7 +142,7 @@ const calcTotalGasFee = ({ approvalGasLimit, resetApprovalGasLimit, tradeGasLimi
143
142
  usd: gasFeesInUSD?.toString() ?? null,
144
143
  };
145
144
  };
146
- export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
145
+ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
147
146
  // Estimated gas fees spent after receiving refunds, this is shown to the user
148
147
  const { amount: amountEffective, valueInCurrency: valueInCurrencyEffective, usd: usdEffective, } = calcTotalGasFee({
149
148
  // Fallback to gasLimit if effectiveGas is not available
@@ -151,8 +150,7 @@ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade,
151
150
  resetApprovalGasLimit: resetApproval?.effectiveGas ?? resetApproval?.gasLimit,
152
151
  tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,
153
152
  l1GasFeesInHexWei,
154
- feePerGasInDecGwei: estimatedBaseFeeInDecGwei,
155
- priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
153
+ feePerGasInDecGwei,
156
154
  nativeToDisplayCurrencyExchangeRate,
157
155
  nativeToUsdExchangeRate,
158
156
  });
@@ -162,8 +160,7 @@ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade,
162
160
  resetApprovalGasLimit: resetApproval?.gasLimit,
163
161
  tradeGasLimit: trade?.gasLimit,
164
162
  l1GasFeesInHexWei,
165
- feePerGasInDecGwei: estimatedBaseFeeInDecGwei,
166
- priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
163
+ feePerGasInDecGwei,
167
164
  nativeToDisplayCurrencyExchangeRate,
168
165
  nativeToUsdExchangeRate,
169
166
  });
@@ -174,7 +171,6 @@ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade,
174
171
  tradeGasLimit: trade?.gasLimit,
175
172
  l1GasFeesInHexWei,
176
173
  feePerGasInDecGwei: maxFeePerGasInDecGwei,
177
- priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
178
174
  nativeToDisplayCurrencyExchangeRate,
179
175
  nativeToUsdExchangeRate,
180
176
  });
@@ -200,11 +196,11 @@ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade,
200
196
  * Calculates the total estimated network fees for the bridge transaction
201
197
  *
202
198
  * @param gasFee - The gas fee for the bridge transaction
203
- * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
199
+ * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
204
200
  * @param relayerFee - The relayer fee paid to bridge providers
205
201
  * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
206
202
  */
207
- export const calcTotalEstimatedNetworkFee = ({ effective: gasFeeToDisplay, }, relayerFee) => {
203
+ export const calcTotalEstimatedNetworkFee = ({ total: gasFeeToDisplay }, relayerFee) => {
208
204
  return {
209
205
  amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')
210
206
  .plus(relayerFee.amount)
@@ -1 +1 @@
1
- {"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\nimport { FeatureId } from './validators';\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n NonEvmFees,\n TxData,\n} from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponse['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponse & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // Find all fees that will be taken from the src token\n const srcTokenFees = Object.values(feeData).filter(\n (fee) => fee && fee.amount && fee.asset?.assetId === srcAsset.assetId,\n );\n const sentAmount = srcTokenFees.reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponse<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei: string;\n priorityFeePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(\n priorityFeePerGasInDecGwei,\n );\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(totalFeePerGasInDecGwei)\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;\n estimatedBaseFeeInDecGwei: string;\n maxFeePerGasInDecGwei: string;\n maxPriorityFeePerGasInDecGwei: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n {\n effective: gasFeeToDisplay,\n }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd || '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponse[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
1
+ {"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\nimport { FeatureId } from './validators';\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n NonEvmFees,\n TxData,\n} from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\n/**\n * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps\n *\n * @param quote - The quote to generate an identifier for\n * @returns A pseudo-unique string that identifies the quote\n */\nexport const getQuoteIdentifier = (quote: QuoteResponse['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponse & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // Find all fees that will be taken from the src token\n const srcTokenFees = Object.values(feeData).filter(\n (fee) => fee && fee.amount && fee.asset?.assetId === srcAsset.assetId,\n );\n const sentAmount = srcTokenFees.reduce(\n (acc, { amount }) => acc.plus(amount),\n new BigNumber(srcTokenAmount),\n );\n const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);\n return {\n amount: normalizedSentAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedSentAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedSentAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponse<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(feePerGasInDecGwei)\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n maxFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse<TxData, TxData> & L1GasFees;\n maxFeePerGasInDecGwei: string;\n feePerGasInDecGwei: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n { total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd || '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd || '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponse[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
@@ -38,6 +38,7 @@ export declare const isTronTrade: (trade: Trade) => trade is {
38
38
  contract?: {
39
39
  type?: string | undefined;
40
40
  }[] | undefined;
41
+ fee_limit?: number | undefined;
41
42
  } | null | undefined;
42
43
  };
43
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"trade-utils.d.cts","sourceRoot":"","sources":["../../src/utils/trade-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAiB;AAGxE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAQvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,KAAK;;;CAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAEvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,UAAW,KAAK,KAAG,MAuB/C,CAAC"}
1
+ {"version":3,"file":"trade-utils.d.cts","sourceRoot":"","sources":["../../src/utils/trade-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAiB;AAGxE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAQvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,KAAK;;;CAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;;CAEvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,UAAW,KAAK,KAAG,MAuB/C,CAAC"}
@@ -38,6 +38,7 @@ export declare const isTronTrade: (trade: Trade) => trade is {
38
38
  contract?: {
39
39
  type?: string | undefined;
40
40
  }[] | undefined;
41
+ fee_limit?: number | undefined;
41
42
  } | null | undefined;
42
43
  };
43
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"trade-utils.d.mts","sourceRoot":"","sources":["../../src/utils/trade-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAiB;AAGxE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAQvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,KAAK;;;CAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAEvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,UAAW,KAAK,KAAG,MAuB/C,CAAC"}
1
+ {"version":3,"file":"trade-utils.d.mts","sourceRoot":"","sources":["../../src/utils/trade-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAiB;AAGxE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;CAQvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,KAAK;;;CAI1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,UAAW,KAAK;;;;;;;;;CAEvC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,UAAW,KAAK,KAAG,MAuB/C,CAAC"}
@@ -219,6 +219,7 @@ exports.TronTradeDataSchema = (0, superstruct_1.type)({
219
219
  contract: (0, superstruct_1.optional)((0, superstruct_1.array)((0, superstruct_1.type)({
220
220
  type: (0, superstruct_1.optional)((0, superstruct_1.string)()),
221
221
  }))),
222
+ fee_limit: (0, superstruct_1.optional)((0, superstruct_1.number)()),
222
223
  }))),
223
224
  });
224
225
  exports.QuoteResponseSchema = (0, superstruct_1.type)({
@@ -1 +1 @@
1
- {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport type { Infer } from '@metamask/superstruct';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n assert,\n pattern,\n intersection,\n} from '@metamask/superstruct';\nimport { CaipAssetTypeStruct, isStrictHexString } from '@metamask/utils';\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n TX_FEE = 'txFee',\n}\n\nexport enum FeatureId {\n PERPS = 'perps',\n}\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nconst HexAddressSchema = define<string>('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define<string>('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nconst VersionStringSchema = define<string>(\n 'VersionString',\n (v: unknown) =>\n typeof v === 'string' &&\n /^(\\d+\\.*){2}\\d+$/u.test(v) &&\n v.split('.').length === 3,\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = pattern(string(), /^\\d+$/u);\n\nconst ChainIdSchema = number();\n\nexport const BridgeAssetSchema = type({\n /**\n * The chainId of the token\n */\n chainId: ChainIdSchema,\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string(),\n /**\n * The assetId of the token\n */\n assetId: CaipAssetTypeStruct,\n /**\n * The symbol of token object\n */\n symbol: string(),\n /**\n * The name for the network\n */\n name: string(),\n decimals: number(),\n /**\n * URL for token icon\n */\n icon: optional(nullable(string())),\n /**\n * URL for token icon\n */\n iconUrl: optional(nullable(string())),\n});\n\nconst DefaultPairSchema = type({\n /**\n * The standard default pairs. Use this if the pair is only set once.\n * The key is the CAIP asset type of the src token and the value is the CAIP asset type of the dest token.\n */\n standard: record(string(), string()),\n /**\n * The other default pairs. Use this if the dest token depends on the src token and can be set multiple times.\n * The key is the CAIP asset type of the src token and the value is the CAIP asset type of the dest token.\n */\n other: record(string(), string()),\n});\n\nexport const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n stablecoins: optional(array(string())),\n isUnifiedUIEnabled: optional(boolean()),\n isSingleSwapBridgeButtonEnabled: optional(boolean()),\n isGaslessSwapEnabled: optional(boolean()),\n noFeeAssets: optional(array(string())),\n defaultPairs: optional(DefaultPairSchema),\n});\n\nexport const PriceImpactThresholdSchema = type({\n gasless: number(),\n normal: number(),\n});\n\nconst GenericQuoteRequestSchema = type({\n aggIds: optional(array(string())),\n bridgeIds: optional(array(string())),\n fee: optional(number()),\n});\n\nconst FeatureIdSchema = enums(Object.values(FeatureId));\n\n/**\n * This is the schema for the feature flags response from the RemoteFeatureFlagController\n */\nexport const PlatformConfigSchema = type({\n priceImpactThreshold: optional(PriceImpactThresholdSchema),\n quoteRequestOverrides: optional(\n record(FeatureIdSchema, optional(GenericQuoteRequestSchema)),\n ),\n minimumVersion: string(),\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n /**\n * The bip44 default pairs for the chains\n * Key is the CAIP chainId namespace\n */\n bip44DefaultPairs: optional(record(string(), optional(DefaultPairSchema))),\n sse: optional(\n type({\n enabled: boolean(),\n /**\n * The minimum version of the client required to enable SSE, for example 13.8.0\n */\n minimumVersion: VersionStringSchema,\n }),\n ),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is Infer<typeof PlatformConfigSchema> => {\n return is(data, PlatformConfigSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is Infer<typeof BridgeAssetSchema> => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n});\n\nexport const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n});\n\nexport const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n});\n\nconst RefuelDataSchema = StepSchema;\n\nexport const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n /**\n * The amount sent, in atomic amount: amount sent - fees\n * Some tokens have a fee of 0, so sometimes it's equal to amount sent\n */\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n /**\n * The amount received, in atomic amount\n */\n destTokenAmount: string(),\n /**\n * The minimum amount that will be received, in atomic amount\n */\n minDestTokenAmount: string(),\n feeData: type({\n [FeeType.METABRIDGE]: FeeDataSchema,\n /**\n * This is the fee for the swap transaction taken from either the\n * src or dest token if the quote has gas fees included or \"gasless\"\n */\n [FeeType.TX_FEE]: optional(\n intersection([\n FeeDataSchema,\n type({\n maxFeePerGas: string(),\n maxPriorityFeePerGas: string(),\n }),\n ]),\n ),\n }),\n gasIncluded: optional(boolean()),\n /**\n * Whether the quote can use EIP-7702 delegated gasless execution\n */\n gasIncluded7702: optional(boolean()),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n priceData: optional(\n type({\n totalFromAmountUsd: optional(string()),\n totalToAmountUsd: optional(string()),\n priceImpact: optional(string()),\n totalFeeAmountUsd: optional(string()),\n }),\n ),\n /**\n * A third party sponsors the gas. If true, then gasIncluded7702 is also true.\n */\n gasSponsored: optional(boolean()),\n});\n\nexport const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n effectiveGas: optional(number()),\n});\n\nexport const BitcoinTradeDataSchema = type({\n unsignedPsbtBase64: string(),\n inputsToSign: nullable(array(type({}))),\n});\n\nexport const TronTradeDataSchema = type({\n raw_data_hex: string(),\n visible: optional(boolean()),\n raw_data: optional(\n nullable(\n type({\n contract: optional(\n array(\n type({\n type: optional(string()),\n }),\n ),\n ),\n }),\n ),\n ),\n});\n\nexport const QuoteResponseSchema = type({\n quote: QuoteSchema,\n estimatedProcessingTimeInSeconds: number(),\n approval: optional(union([TxDataSchema, TronTradeDataSchema])),\n trade: union([\n TxDataSchema,\n BitcoinTradeDataSchema,\n TronTradeDataSchema,\n string(),\n ]),\n});\n\nexport const validateQuoteResponse = (\n data: unknown,\n): data is Infer<typeof QuoteResponseSchema> => {\n assert(data, QuoteResponseSchema);\n return true;\n};\n"]}
1
+ {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport type { Infer } from '@metamask/superstruct';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n assert,\n pattern,\n intersection,\n} from '@metamask/superstruct';\nimport { CaipAssetTypeStruct, isStrictHexString } from '@metamask/utils';\n\nexport enum FeeType {\n METABRIDGE = 'metabridge',\n REFUEL = 'refuel',\n TX_FEE = 'txFee',\n}\n\nexport enum FeatureId {\n PERPS = 'perps',\n}\n\nexport enum ActionTypes {\n BRIDGE = 'bridge',\n SWAP = 'swap',\n REFUEL = 'refuel',\n}\n\nconst HexAddressSchema = define<string>('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define<string>('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nconst VersionStringSchema = define<string>(\n 'VersionString',\n (v: unknown) =>\n typeof v === 'string' &&\n /^(\\d+\\.*){2}\\d+$/u.test(v) &&\n v.split('.').length === 3,\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = pattern(string(), /^\\d+$/u);\n\nconst ChainIdSchema = number();\n\nexport const BridgeAssetSchema = type({\n /**\n * The chainId of the token\n */\n chainId: ChainIdSchema,\n /**\n * An address that the metaswap-api recognizes as the default token\n */\n address: string(),\n /**\n * The assetId of the token\n */\n assetId: CaipAssetTypeStruct,\n /**\n * The symbol of token object\n */\n symbol: string(),\n /**\n * The name for the network\n */\n name: string(),\n decimals: number(),\n /**\n * URL for token icon\n */\n icon: optional(nullable(string())),\n /**\n * URL for token icon\n */\n iconUrl: optional(nullable(string())),\n});\n\nconst DefaultPairSchema = type({\n /**\n * The standard default pairs. Use this if the pair is only set once.\n * The key is the CAIP asset type of the src token and the value is the CAIP asset type of the dest token.\n */\n standard: record(string(), string()),\n /**\n * The other default pairs. Use this if the dest token depends on the src token and can be set multiple times.\n * The key is the CAIP asset type of the src token and the value is the CAIP asset type of the dest token.\n */\n other: record(string(), string()),\n});\n\nexport const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n stablecoins: optional(array(string())),\n isUnifiedUIEnabled: optional(boolean()),\n isSingleSwapBridgeButtonEnabled: optional(boolean()),\n isGaslessSwapEnabled: optional(boolean()),\n noFeeAssets: optional(array(string())),\n defaultPairs: optional(DefaultPairSchema),\n});\n\nexport const PriceImpactThresholdSchema = type({\n gasless: number(),\n normal: number(),\n});\n\nconst GenericQuoteRequestSchema = type({\n aggIds: optional(array(string())),\n bridgeIds: optional(array(string())),\n fee: optional(number()),\n});\n\nconst FeatureIdSchema = enums(Object.values(FeatureId));\n\n/**\n * This is the schema for the feature flags response from the RemoteFeatureFlagController\n */\nexport const PlatformConfigSchema = type({\n priceImpactThreshold: optional(PriceImpactThresholdSchema),\n quoteRequestOverrides: optional(\n record(FeatureIdSchema, optional(GenericQuoteRequestSchema)),\n ),\n minimumVersion: string(),\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n /**\n * The bip44 default pairs for the chains\n * Key is the CAIP chainId namespace\n */\n bip44DefaultPairs: optional(record(string(), optional(DefaultPairSchema))),\n sse: optional(\n type({\n enabled: boolean(),\n /**\n * The minimum version of the client required to enable SSE, for example 13.8.0\n */\n minimumVersion: VersionStringSchema,\n }),\n ),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is Infer<typeof PlatformConfigSchema> => {\n return is(data, PlatformConfigSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is Infer<typeof BridgeAssetSchema> => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n});\n\nexport const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n});\n\nexport const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n});\n\nconst RefuelDataSchema = StepSchema;\n\nexport const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n /**\n * The amount sent, in atomic amount: amount sent - fees\n * Some tokens have a fee of 0, so sometimes it's equal to amount sent\n */\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n /**\n * The amount received, in atomic amount\n */\n destTokenAmount: string(),\n /**\n * The minimum amount that will be received, in atomic amount\n */\n minDestTokenAmount: string(),\n feeData: type({\n [FeeType.METABRIDGE]: FeeDataSchema,\n /**\n * This is the fee for the swap transaction taken from either the\n * src or dest token if the quote has gas fees included or \"gasless\"\n */\n [FeeType.TX_FEE]: optional(\n intersection([\n FeeDataSchema,\n type({\n maxFeePerGas: string(),\n maxPriorityFeePerGas: string(),\n }),\n ]),\n ),\n }),\n gasIncluded: optional(boolean()),\n /**\n * Whether the quote can use EIP-7702 delegated gasless execution\n */\n gasIncluded7702: optional(boolean()),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n priceData: optional(\n type({\n totalFromAmountUsd: optional(string()),\n totalToAmountUsd: optional(string()),\n priceImpact: optional(string()),\n totalFeeAmountUsd: optional(string()),\n }),\n ),\n /**\n * A third party sponsors the gas. If true, then gasIncluded7702 is also true.\n */\n gasSponsored: optional(boolean()),\n});\n\nexport const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n effectiveGas: optional(number()),\n});\n\nexport const BitcoinTradeDataSchema = type({\n unsignedPsbtBase64: string(),\n inputsToSign: nullable(array(type({}))),\n});\n\nexport const TronTradeDataSchema = type({\n raw_data_hex: string(),\n visible: optional(boolean()),\n raw_data: optional(\n nullable(\n type({\n contract: optional(\n array(\n type({\n type: optional(string()),\n }),\n ),\n ),\n fee_limit: optional(number()),\n }),\n ),\n ),\n});\n\nexport const QuoteResponseSchema = type({\n quote: QuoteSchema,\n estimatedProcessingTimeInSeconds: number(),\n approval: optional(union([TxDataSchema, TronTradeDataSchema])),\n trade: union([\n TxDataSchema,\n BitcoinTradeDataSchema,\n TronTradeDataSchema,\n string(),\n ]),\n});\n\nexport const validateQuoteResponse = (\n data: unknown,\n): data is Infer<typeof QuoteResponseSchema> => {\n assert(data, QuoteResponseSchema);\n return true;\n};\n"]}
@@ -1117,6 +1117,7 @@ export declare const TronTradeDataSchema: import("@metamask/superstruct").Struct
1117
1117
  contract?: {
1118
1118
  type?: string | undefined;
1119
1119
  }[] | undefined;
1120
+ fee_limit?: number | undefined;
1120
1121
  } | null | undefined;
1121
1122
  }, {
1122
1123
  raw_data_hex: import("@metamask/superstruct").Struct<string, null>;
@@ -1125,6 +1126,7 @@ export declare const TronTradeDataSchema: import("@metamask/superstruct").Struct
1125
1126
  contract?: {
1126
1127
  type?: string | undefined;
1127
1128
  }[] | undefined;
1129
+ fee_limit?: number | undefined;
1128
1130
  } | null | undefined, {
1129
1131
  contract: import("@metamask/superstruct").Struct<{
1130
1132
  type?: string | undefined;
@@ -1133,6 +1135,7 @@ export declare const TronTradeDataSchema: import("@metamask/superstruct").Struct
1133
1135
  }, {
1134
1136
  type: import("@metamask/superstruct").Struct<string | undefined, null>;
1135
1137
  }>>;
1138
+ fee_limit: import("@metamask/superstruct").Struct<number | undefined, null>;
1136
1139
  }>;
1137
1140
  }>;
1138
1141
  export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct<{
@@ -1289,6 +1292,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1289
1292
  contract?: {
1290
1293
  type?: string | undefined;
1291
1294
  }[] | undefined;
1295
+ fee_limit?: number | undefined;
1292
1296
  } | null | undefined;
1293
1297
  };
1294
1298
  approval?: {
@@ -1306,6 +1310,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1306
1310
  contract?: {
1307
1311
  type?: string | undefined;
1308
1312
  }[] | undefined;
1313
+ fee_limit?: number | undefined;
1309
1314
  } | null | undefined;
1310
1315
  } | undefined;
1311
1316
  }, {
@@ -1978,6 +1983,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1978
1983
  contract?: {
1979
1984
  type?: string | undefined;
1980
1985
  }[] | undefined;
1986
+ fee_limit?: number | undefined;
1981
1987
  } | null | undefined;
1982
1988
  } | undefined, null>;
1983
1989
  trade: import("@metamask/superstruct").Struct<string | {
@@ -1998,6 +2004,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1998
2004
  contract?: {
1999
2005
  type?: string | undefined;
2000
2006
  }[] | undefined;
2007
+ fee_limit?: number | undefined;
2001
2008
  } | null | undefined;
2002
2009
  }, null>;
2003
2010
  }>;
@@ -2155,6 +2162,7 @@ export declare const validateQuoteResponse: (data: unknown) => data is {
2155
2162
  contract?: {
2156
2163
  type?: string | undefined;
2157
2164
  }[] | undefined;
2165
+ fee_limit?: number | undefined;
2158
2166
  } | null | undefined;
2159
2167
  };
2160
2168
  approval?: {
@@ -2172,6 +2180,7 @@ export declare const validateQuoteResponse: (data: unknown) => data is {
2172
2180
  contract?: {
2173
2181
  type?: string | undefined;
2174
2182
  }[] | undefined;
2183
+ fee_limit?: number | undefined;
2175
2184
  } | null | undefined;
2176
2185
  } | undefined;
2177
2186
  };