@metamask/bridge-controller 37.2.0 → 39.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/dist/bridge-controller.cjs +2 -3
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts.map +1 -1
  5. package/dist/bridge-controller.d.mts.map +1 -1
  6. package/dist/bridge-controller.mjs +4 -5
  7. package/dist/bridge-controller.mjs.map +1 -1
  8. package/dist/constants/bridge.cjs +1 -2
  9. package/dist/constants/bridge.cjs.map +1 -1
  10. package/dist/constants/bridge.d.cts +1 -1
  11. package/dist/constants/bridge.d.cts.map +1 -1
  12. package/dist/constants/bridge.d.mts +1 -1
  13. package/dist/constants/bridge.d.mts.map +1 -1
  14. package/dist/constants/bridge.mjs +1 -2
  15. package/dist/constants/bridge.mjs.map +1 -1
  16. package/dist/index.cjs +2 -3
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +1 -1
  19. package/dist/index.d.cts.map +1 -1
  20. package/dist/index.d.mts +1 -1
  21. package/dist/index.d.mts.map +1 -1
  22. package/dist/index.mjs +1 -1
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/selectors.cjs +7 -2
  25. package/dist/selectors.cjs.map +1 -1
  26. package/dist/selectors.d.cts +312 -90
  27. package/dist/selectors.d.cts.map +1 -1
  28. package/dist/selectors.d.mts +312 -90
  29. package/dist/selectors.d.mts.map +1 -1
  30. package/dist/selectors.mjs +7 -2
  31. package/dist/selectors.mjs.map +1 -1
  32. package/dist/types.cjs.map +1 -1
  33. package/dist/types.d.cts +8 -1
  34. package/dist/types.d.cts.map +1 -1
  35. package/dist/types.d.mts +8 -1
  36. package/dist/types.d.mts.map +1 -1
  37. package/dist/types.mjs.map +1 -1
  38. package/dist/utils/metrics/constants.cjs +3 -0
  39. package/dist/utils/metrics/constants.cjs.map +1 -1
  40. package/dist/utils/metrics/constants.d.cts +3 -0
  41. package/dist/utils/metrics/constants.d.cts.map +1 -1
  42. package/dist/utils/metrics/constants.d.mts +3 -0
  43. package/dist/utils/metrics/constants.d.mts.map +1 -1
  44. package/dist/utils/metrics/constants.mjs +3 -0
  45. package/dist/utils/metrics/constants.mjs.map +1 -1
  46. package/dist/utils/metrics/properties.cjs +1 -12
  47. package/dist/utils/metrics/properties.cjs.map +1 -1
  48. package/dist/utils/metrics/properties.d.cts +2 -4
  49. package/dist/utils/metrics/properties.d.cts.map +1 -1
  50. package/dist/utils/metrics/properties.d.mts +2 -4
  51. package/dist/utils/metrics/properties.d.mts.map +1 -1
  52. package/dist/utils/metrics/properties.mjs +1 -10
  53. package/dist/utils/metrics/properties.mjs.map +1 -1
  54. package/dist/utils/metrics/types.cjs.map +1 -1
  55. package/dist/utils/metrics/types.d.cts +8 -11
  56. package/dist/utils/metrics/types.d.cts.map +1 -1
  57. package/dist/utils/metrics/types.d.mts +8 -11
  58. package/dist/utils/metrics/types.d.mts.map +1 -1
  59. package/dist/utils/metrics/types.mjs.map +1 -1
  60. package/dist/utils/quote.cjs +60 -23
  61. package/dist/utils/quote.cjs.map +1 -1
  62. package/dist/utils/quote.d.cts +12 -11
  63. package/dist/utils/quote.d.cts.map +1 -1
  64. package/dist/utils/quote.d.mts +12 -11
  65. package/dist/utils/quote.d.mts.map +1 -1
  66. package/dist/utils/quote.mjs +60 -23
  67. package/dist/utils/quote.mjs.map +1 -1
  68. package/dist/utils/validators.cjs +1 -0
  69. package/dist/utils/validators.cjs.map +1 -1
  70. package/dist/utils/validators.d.cts +9 -0
  71. package/dist/utils/validators.d.cts.map +1 -1
  72. package/dist/utils/validators.d.mts +9 -0
  73. package/dist/utils/validators.d.mts.map +1 -1
  74. package/dist/utils/validators.mjs +1 -0
  75. package/dist/utils/validators.mjs.map +1 -1
  76. package/package.json +6 -6
@@ -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, isSolanaChainId } from './bridge';\nimport type {\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteResponse,\n SolanaFees,\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 and one of the chains is solana, require the dest wallet address\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n isSolanaChainId(partialRequest.destChainId) ===\n !isSolanaChainId(partialRequest.srcChainId)\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 calcSolanaTotalNetworkFee = (\n bridgeQuote: QuoteResponse & SolanaFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { solanaFeesInLamports } = bridgeQuote;\n const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);\n return {\n amount: solanaFeeInNative.toString(),\n valueInCurrency: exchangeRate\n ? solanaFeeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? solanaFeeInNative.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcToAmount = (\n { destTokenAmount, destAsset }: Quote,\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 { quote, trade }: QuoteResponse,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\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 bridgeQuote,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n feePerGasInDecGwei: string;\n priorityFeePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const { approval, trade, l1GasFeesInHexWei } = bridgeQuote;\n\n const totalGasLimitInDec = new BigNumber(\n trade.gasLimit?.toString() ?? '0',\n ).plus(approval?.gasLimit?.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,\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n estimatedBaseFeeInDecGwei: string;\n maxFeePerGasInDecGwei: string;\n maxPriorityFeePerGasInDecGwei: string;\n} & ExchangeRate) => {\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n return {\n amount,\n amountMax,\n valueInCurrency,\n valueInCurrencyMax,\n usd,\n usdMax,\n };\n};\n\nexport const calcTotalEstimatedNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrency\n ? new BigNumber(gasFee.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usd\n ? new BigNumber(gasFee.usd).plus(relayerFee.usd || '0').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.amountMax).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrencyMax\n ? new BigNumber(gasFee.valueInCurrencyMax)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usdMax\n ? new BigNumber(gasFee.usdMax).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, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !gasIncluded) {\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"]}
1
+ {"version":3,"file":"quote.cjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":";;;AAAA,iEAIoC;AACpC,+CAAyC;AAEzC,yCAA4D;AAWrD,MAAM,mBAAmB,GAAG,CACjC,cAA4C,EAC5C,aAAa,GAAG,IAAI,EACmB,EAAE;IACzC,MAAM,YAAY,GAAG;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,eAAe;KAChB,CAAC;IACF,IAAI,aAAa,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACrC;IACD,+EAA+E;IAC/E,IACE,cAAc,CAAC,WAAW;QAC1B,cAAc,CAAC,UAAU;QACzB,IAAA,wBAAe,EAAC,cAAc,CAAC,WAAW,CAAC;YACzC,CAAC,IAAA,wBAAe,EAAC,cAAc,CAAC,UAAU,CAAC,EAC7C;QACA,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;YACrC,OAAO,KAAK,CAAC;SACd;KACF;IACD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE;QACzC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/B;IAED,OAAO,CACL,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;QACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;YACzD,QAAQ;QACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;QAClE,cAAc,CAAC,KAAoC,CAAC,KAAK,EAAE;QAC3D,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;YACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;gBACzD,QAAQ;YACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;YAClE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAoC,CAAC,CAAC,CAAC;YACpE,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,CAAC,aAAa;YACZ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC,CAAC;AAvDW,QAAA,mBAAmB,uBAuD9B;AAEF;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAA6B,EAAE,EAAE,CAClE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AADnD,QAAA,kBAAkB,sBACiC;AAEhE,MAAM,eAAe,GAAG,CAAC,KAAyB,EAAE,QAAgB,EAAE,EAAE;IACtE,MAAM,OAAO,GAAG,IAAI,wBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,IAAI,wBAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEK,MAAM,yBAAyB,GAAG,CACvC,WAAuC,EACvC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,oBAAoB,EAAE,GAAG,WAAW,CAAC;IAC7C,MAAM,iBAAiB,GAAG,eAAe,CAAC,oBAAoB,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO;QACL,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACpC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YAClD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACrD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,yBAAyB,6BAepC;AAEK,MAAM,YAAY,GAAG,CAC1B,EAAE,eAAe,EAAE,SAAS,EAAS,EACrC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,oBAAoB,GAAG,eAAe,CAC1C,eAAe,EACf,SAAS,CAAC,QAAQ,CACnB,CAAC;IACF,OAAO;QACL,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;QACvC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACxD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,YAAY,gBAiBvB;AAEK,MAAM,cAAc,GAAG,CAC5B,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAS,EAC5C,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,sDAAsD;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAChD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,OAAO,CACtE,CAAC;IACF,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EACrC,IAAI,wBAAS,CAAC,cAAc,CAAC,CAC9B,CAAC;IACF,MAAM,oBAAoB,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO;QACL,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;QACvC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACrD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACxD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,cAAc,kBAsBzB;AAEK,MAAM,cAAc,GAAG,CAC5B,EAAE,KAAK,EAAE,KAAK,EAAiB,EAC/B,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,gBAAgB,GAAG,IAAI,wBAAS,CACpC,IAAA,sCAAmB,EAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAC1C,CAAC;IACF,IAAI,kBAAkB,GAAG,eAAe,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE/D,2EAA2E;IAC3E,IAAI,IAAA,wBAAe,EAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC3C,MAAM,kBAAkB,GAAG,IAAA,sBAAc,EAAC,KAAK,EAAE;YAC/C,YAAY;YACZ,eAAe;SAChB,CAAC,CAAC,MAAM,CAAC;QACV,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;KACnE;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB;QAC1B,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC;YACxC,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;KACxE,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,cAAc,kBAyBzB;AAEF,MAAM,eAAe,GAAG,CAAC,EACvB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,mCAAmC,EACnC,uBAAuB,GASxB,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG,IAAI,wBAAS,CACtC,aAAa,EAAE,QAAQ,EAAE,IAAI,GAAG,CACjC,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;IAE5C,MAAM,uBAAuB,GAAG,IAAI,wBAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACpE,0BAA0B,CAC3B,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAA,kCAAe,EAAC,IAAA,wBAAK,EAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,kBAAkB;SACxC,KAAK,CAAC,uBAAuB,CAAC;SAC9B,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,wBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,wBAAwB,GAAG,mCAAmC;QAClE,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,mCAAmC,CAAC,QAAQ,EAAE,CAAC;QACvE,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,uBAAuB;QAC1C,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE;QAClC,eAAe,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,IAAI;QAC7D,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,IAAI;KACtC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,8BAA8B,GAAG,CAAC,EAC7C,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,EACnD,yBAAyB,EACzB,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,EAAE,mCAAmC,EACjD,eAAe,EAAE,uBAAuB,GAM1B,EAA2B,EAAE;IAC3C,8EAA8E;IAC9E,MAAM,EACJ,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,wBAAwB,EACzC,GAAG,EAAE,YAAY,GAClB,GAAG,eAAe,CAAC;QAClB,wDAAwD;QACxD,gBAAgB,EAAE,QAAQ,EAAE,YAAY,IAAI,QAAQ,EAAE,QAAQ;QAC9D,aAAa,EAAE,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,QAAQ;QACrD,iBAAiB;QACjB,kBAAkB,EAAE,yBAAyB;QAC7C,0BAA0B,EAAE,6BAA6B;QACzD,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC;QACvD,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;QACpC,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB,EAAE,yBAAyB;QAC7C,0BAA0B,EAAE,6BAA6B;QACzD,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,EACJ,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,GAAG,EAAE,MAAM,GACZ,GAAG,eAAe,CAAC;QAClB,gBAAgB,EAAE,QAAQ,EAAE,QAAQ;QACpC,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB,EAAE,qBAAqB;QACzC,0BAA0B,EAAE,6BAA6B;QACzD,mCAAmC;QACnC,uBAAuB;KACxB,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE;YACT,MAAM,EAAE,eAAe;YACvB,eAAe,EAAE,wBAAwB;YACzC,GAAG,EAAE,YAAY;SAClB;QACD,KAAK,EAAE;YACL,MAAM;YACN,eAAe;YACf,GAAG;SACJ;QACD,GAAG,EAAE;YACH,MAAM,EAAE,SAAS;YACjB,eAAe,EAAE,kBAAkB;YACnC,GAAG,EAAE,MAAM;SACZ;KACF,CAAC;AACJ,CAAC,CAAC;AAxEW,QAAA,8BAA8B,kCAwEzC;AAEF;;;;;;;GAOG;AACI,MAAM,4BAA4B,GAAG,CAC1C,EACE,SAAS,EAAE,eAAe,GACwB,EACpD,UAA6C,EAC7C,EAAE;IACF,OAAO;QACL,MAAM,EAAE,IAAI,wBAAS,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,CAAC;aAClD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;aACvB,QAAQ,EAAE;QACb,eAAe,EAAE,eAAe,EAAE,eAAe;YAC/C,CAAC,CAAC,IAAI,wBAAS,CAAC,eAAe,CAAC,eAAe,CAAC;iBAC3C,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,CAAC;iBACvC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,EAAE,GAAG;YACvB,CAAC,CAAC,IAAI,wBAAS,CAAC,eAAe,CAAC,GAAG,CAAC;iBAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;iBAC3B,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,4BAA4B,gCAqBvC;AAEK,MAAM,sBAAsB,GAAG,CACpC,MAAyD,EACzD,UAA6C,EAC7C,EAAE;IACF,OAAO;QACL,MAAM,EAAE,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QAC3E,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe;YACzC,CAAC,CAAC,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;iBACtC,IAAI,CAAC,UAAU,CAAC,eAAe,IAAI,GAAG,CAAC;iBACvC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG;YACjB,CAAC,CAAC,IAAI,wBAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE;YACtE,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,sBAAsB,0BAejC;AAEF,qFAAqF;AAC9E,MAAM,kBAAkB,GAAG,CAChC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAS,EACpD,oBAAkC,EAClC,qBAAmC,EACnC,EAAE;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE;QAC1B,OAAO,IAAI,CAAC;KACb;IACD,+EAA+E;IAC/E,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GACrC,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;QACtC,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,qBAAqB,CAAC;IAC5B,MAAM,qBAAqB,GAAG,eAAe,CAC3C,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,KAAK,CAAC,QAAQ,CACrB,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QACxC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACtD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACzD,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,kBAAkB,sBA2B7B;AAEK,MAAM,kBAAkB,GAAG,CAChC,aAA8C,EAC9C,wBAAyE,EACzE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAS,EAClE,EAAE;IACF,8FAA8F;IAC9F,IAAI,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,WAAW,EAAE;QACzC,OAAO;YACL,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,GAAG,EAAE,aAAa,CAAC,GAAG;SACvB,CAAC;KACH;IACD,OAAO;QACL,eAAe,EACb,aAAa,CAAC,eAAe,IAAI,wBAAwB,CAAC,eAAe;YACvE,CAAC,CAAC,IAAI,wBAAS,CAAC,aAAa,CAAC,eAAe,CAAC;iBACzC,KAAK,CAAC,wBAAwB,CAAC,eAAe,CAAC;iBAC/C,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;QACV,GAAG,EACD,aAAa,CAAC,GAAG,IAAI,wBAAwB,CAAC,GAAG;YAC/C,CAAC,CAAC,IAAI,wBAAS,CAAC,aAAa,CAAC,GAAG,CAAC;iBAC7B,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC;iBACnC,QAAQ,EAAE;YACf,CAAC,CAAC,IAAI;KACX,CAAC;AACJ,CAAC,CAAC;AA1BW,QAAA,kBAAkB,sBA0B7B;AAEK,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,eAAuB,EAAE,EAAE,CAC1E,IAAI,wBAAS,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;AAD/C,QAAA,YAAY,gBACmC;AAErD,MAAM,QAAQ,GAAG,CACtB,cAAqD,EACrD,UAA6C,EAC7C,EAAE,CAAC,CAAC;IACJ,eAAe,EACb,cAAc,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe;QAC1D,CAAC,CAAC,IAAI,wBAAS,CAAC,UAAU,CAAC,eAAe,CAAC;aACtC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;aACrC,QAAQ,EAAE;QACf,CAAC,CAAC,IAAI;IACV,GAAG,EACD,cAAc,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG;QAClC,CAAC,CAAC,IAAI,wBAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QACpE,CAAC,CAAC,IAAI;CACX,CAAC,CAAC;AAdU,QAAA,QAAQ,YAclB;AAEH;;;;;;GAMG;AACI,MAAM,sBAAsB,GAAG,CACpC,cAAqD,EACrD,UAA6C,EAC9B,EAAE;IACjB,MAAM,IAAI,GAAG,IAAA,gBAAQ,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,EAAE;QACtD,OAAO,IAAI,wBAAS,CAAC,IAAI,CAAC,eAAe,CAAC;aACvC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;KACf;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE;QAC9B,OAAO,IAAI,wBAAS,CAAC,IAAI,CAAC,GAAG,CAAC;aAC3B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;aACnB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,EAAE;aACL,QAAQ,EAAE,CAAC;KACf;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,sBAAsB,0BAuBjC;AAEK,MAAM,kBAAkB,GAAG,CAChC,gCAAwC,EACxC,EAAE;IACF,IAAI,gCAAgC,GAAG,EAAE,EAAE;QACzC,OAAO,KAAK,CAAC;KACd;IACD,OAAO,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B","sourcesContent":["import {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { isNativeAddress, isSolanaChainId } from './bridge';\nimport type {\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n SolanaFees,\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 and one of the chains is solana, require the dest wallet address\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n isSolanaChainId(partialRequest.destChainId) ===\n !isSolanaChainId(partialRequest.srcChainId)\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 calcSolanaTotalNetworkFee = (\n bridgeQuote: QuoteResponse & SolanaFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { solanaFeesInLamports } = bridgeQuote;\n const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);\n return {\n amount: solanaFeeInNative.toString(),\n valueInCurrency: exchangeRate\n ? solanaFeeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? solanaFeeInNative.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcToAmount = (\n { destTokenAmount, destAsset }: Quote,\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 { quote, trade }: QuoteResponse,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\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 tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: 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(\n tradeGasLimit?.toString() ?? '0',\n ).plus(approvalGasLimit?.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 },\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & 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 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 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 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, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !gasIncluded) {\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"]}
@@ -1,5 +1,5 @@
1
1
  import { BigNumber } from "bignumber.js";
2
- import type { ExchangeRate, GenericQuoteRequest, L1GasFees, Quote, QuoteResponse, SolanaFees } from "../types.cjs";
2
+ import type { ExchangeRate, GenericQuoteRequest, L1GasFees, Quote, QuoteMetadata, QuoteResponse, SolanaFees } from "../types.cjs";
3
3
  export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
4
4
  /**
5
5
  * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
@@ -28,20 +28,21 @@ export declare const calcRelayerFee: ({ quote, trade }: QuoteResponse, { exchang
28
28
  valueInCurrency: BigNumber | null;
29
29
  usd: BigNumber | null;
30
30
  };
31
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
31
+ export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
32
32
  bridgeQuote: QuoteResponse & L1GasFees;
33
33
  estimatedBaseFeeInDecGwei: string;
34
34
  maxFeePerGasInDecGwei: string;
35
35
  maxPriorityFeePerGasInDecGwei: string;
36
- } & ExchangeRate) => {
37
- amount: string;
38
- amountMax: string;
39
- valueInCurrency: string | null;
40
- valueInCurrencyMax: string | null;
41
- usd: string | null;
42
- usdMax: string | null;
43
- };
44
- export declare const calcTotalEstimatedNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
36
+ } & ExchangeRate) => QuoteMetadata['gasFee'];
37
+ /**
38
+ * Calculates the total estimated network fees for the bridge transaction
39
+ *
40
+ * @param gasFee - The gas fee for the bridge transaction
41
+ * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
42
+ * @param relayerFee - The relayer fee paid to bridge providers
43
+ * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
44
+ */
45
+ export declare const calcTotalEstimatedNetworkFee: ({ effective: gasFeeToDisplay, }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
45
46
  amount: string;
46
47
  valueInCurrency: string | null;
47
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,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,UAAU,EACX,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEAsD7C,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,mCACS,KAAK,qCACF,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,qBACP,aAAa,qCACI,YAAY;;;;CAuBhD,CAAC;AA4CF,eAAO,MAAM,8BAA8B;iBAQ5B,aAAa,GAAG,SAAS;+BACX,MAAM;2BACV,MAAM;mCACE,MAAM;;;;;;;;CA4BtC,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAC/B,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,kDACkB,KAAK,wBAC9B,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"}
1
+ {"version":3,"file":"quote.d.cts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACX,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEAsD7C,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,mCACS,KAAK,qCACF,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,qBACP,aAAa,qCACI,YAAY;;;;CAuBhD,CAAC;AA8CF,eAAO,MAAM,8BAA8B;iBAQ5B,aAAa,GAAG,SAAS;+BACX,MAAM;2BACV,MAAM;mCACE,MAAM;qBACpB,aAAa,CAAC,QAAQ,CA4DxC,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,kDACkB,KAAK,wBAC9B,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"}
@@ -1,5 +1,5 @@
1
1
  import { BigNumber } from "bignumber.js";
2
- import type { ExchangeRate, GenericQuoteRequest, L1GasFees, Quote, QuoteResponse, SolanaFees } from "../types.mjs";
2
+ import type { ExchangeRate, GenericQuoteRequest, L1GasFees, Quote, QuoteMetadata, QuoteResponse, SolanaFees } from "../types.mjs";
3
3
  export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
4
4
  /**
5
5
  * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
@@ -28,20 +28,21 @@ export declare const calcRelayerFee: ({ quote, trade }: QuoteResponse, { exchang
28
28
  valueInCurrency: BigNumber | null;
29
29
  usd: BigNumber | null;
30
30
  };
31
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
31
+ export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
32
32
  bridgeQuote: QuoteResponse & L1GasFees;
33
33
  estimatedBaseFeeInDecGwei: string;
34
34
  maxFeePerGasInDecGwei: string;
35
35
  maxPriorityFeePerGasInDecGwei: string;
36
- } & ExchangeRate) => {
37
- amount: string;
38
- amountMax: string;
39
- valueInCurrency: string | null;
40
- valueInCurrencyMax: string | null;
41
- usd: string | null;
42
- usdMax: string | null;
43
- };
44
- export declare const calcTotalEstimatedNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
36
+ } & ExchangeRate) => QuoteMetadata['gasFee'];
37
+ /**
38
+ * Calculates the total estimated network fees for the bridge transaction
39
+ *
40
+ * @param gasFee - The gas fee for the bridge transaction
41
+ * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
42
+ * @param relayerFee - The relayer fee paid to bridge providers
43
+ * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
44
+ */
45
+ export declare const calcTotalEstimatedNetworkFee: ({ effective: gasFeeToDisplay, }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
45
46
  amount: string;
46
47
  valueInCurrency: string | null;
47
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,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,UAAU,EACX,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEAsD7C,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,mCACS,KAAK,qCACF,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,qBACP,aAAa,qCACI,YAAY;;;;CAuBhD,CAAC;AA4CF,eAAO,MAAM,8BAA8B;iBAQ5B,aAAa,GAAG,SAAS;+BACX,MAAM;2BACV,MAAM;mCACE,MAAM;;;;;;;;CA4BtC,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAC/B,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,kDACkB,KAAK,wBAC9B,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"}
1
+ {"version":3,"file":"quote.d.mts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAGzC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACX,qBAAiB;AAElB,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEAsD7C,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,mCACS,KAAK,qCACF,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,0CACc,KAAK,qCACT,YAAY;;;;CAoBhD,CAAC;AAEF,eAAO,MAAM,cAAc,qBACP,aAAa,qCACI,YAAY;;;;CAuBhD,CAAC;AA8CF,eAAO,MAAM,8BAA8B;iBAQ5B,aAAa,GAAG,SAAS;+BACX,MAAM;2BACV,MAAM;mCACE,MAAM;qBACpB,aAAa,CAAC,QAAQ,CA4DxC,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,kDACkB,KAAK,wBAC9B,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"}
@@ -113,9 +113,8 @@ export const calcRelayerFee = ({ quote, trade }, { exchangeRate, usdExchangeRate
113
113
  usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,
114
114
  };
115
115
  };
116
- const calcTotalGasFee = ({ bridgeQuote, feePerGasInDecGwei, priorityFeePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
117
- const { approval, trade, l1GasFeesInHexWei } = bridgeQuote;
118
- const totalGasLimitInDec = new BigNumber(trade.gasLimit?.toString() ?? '0').plus(approval?.gasLimit?.toString() ?? '0');
116
+ const calcTotalGasFee = ({ approvalGasLimit, tradeGasLimit, l1GasFeesInHexWei, feePerGasInDecGwei, priorityFeePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
117
+ const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0').plus(approvalGasLimit?.toString() ?? '0');
119
118
  const totalFeePerGasInDecGwei = new BigNumber(feePerGasInDecGwei).plus(priorityFeePerGasInDecGwei);
120
119
  const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));
121
120
  const gasFeesInDecGwei = totalGasLimitInDec
@@ -134,53 +133,91 @@ const calcTotalGasFee = ({ bridgeQuote, feePerGasInDecGwei, priorityFeePerGasInD
134
133
  usd: gasFeesInUSD?.toString() ?? null,
135
134
  };
136
135
  };
137
- export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
136
+ export const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei }, estimatedBaseFeeInDecGwei, maxFeePerGasInDecGwei, maxPriorityFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
137
+ // Estimated gas fees spent after receiving refunds, this is shown to the user
138
+ const { amount: amountEffective, valueInCurrency: valueInCurrencyEffective, usd: usdEffective, } = calcTotalGasFee({
139
+ // Fallback to gasLimit if effectiveGas is not available
140
+ approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,
141
+ tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,
142
+ l1GasFeesInHexWei,
143
+ feePerGasInDecGwei: estimatedBaseFeeInDecGwei,
144
+ priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
145
+ nativeToDisplayCurrencyExchangeRate,
146
+ nativeToUsdExchangeRate,
147
+ });
148
+ // Estimated total gas fee, including refunded fees (medium)
138
149
  const { amount, valueInCurrency, usd } = calcTotalGasFee({
139
- bridgeQuote,
150
+ approvalGasLimit: approval?.gasLimit,
151
+ tradeGasLimit: trade?.gasLimit,
152
+ l1GasFeesInHexWei,
140
153
  feePerGasInDecGwei: estimatedBaseFeeInDecGwei,
141
154
  priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
142
155
  nativeToDisplayCurrencyExchangeRate,
143
156
  nativeToUsdExchangeRate,
144
157
  });
158
+ // Max gas fee (high), used to disable submission of the transaction
145
159
  const { amount: amountMax, valueInCurrency: valueInCurrencyMax, usd: usdMax, } = calcTotalGasFee({
146
- bridgeQuote,
160
+ approvalGasLimit: approval?.gasLimit,
161
+ tradeGasLimit: trade?.gasLimit,
162
+ l1GasFeesInHexWei,
147
163
  feePerGasInDecGwei: maxFeePerGasInDecGwei,
148
164
  priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,
149
165
  nativeToDisplayCurrencyExchangeRate,
150
166
  nativeToUsdExchangeRate,
151
167
  });
152
168
  return {
153
- amount,
154
- amountMax,
155
- valueInCurrency,
156
- valueInCurrencyMax,
157
- usd,
158
- usdMax,
169
+ effective: {
170
+ amount: amountEffective,
171
+ valueInCurrency: valueInCurrencyEffective,
172
+ usd: usdEffective,
173
+ },
174
+ total: {
175
+ amount,
176
+ valueInCurrency,
177
+ usd,
178
+ },
179
+ max: {
180
+ amount: amountMax,
181
+ valueInCurrency: valueInCurrencyMax,
182
+ usd: usdMax,
183
+ },
159
184
  };
160
185
  };
161
- export const calcTotalEstimatedNetworkFee = (gasFee, relayerFee) => {
186
+ /**
187
+ * Calculates the total estimated network fees for the bridge transaction
188
+ *
189
+ * @param gasFee - The gas fee for the bridge transaction
190
+ * @param gasFee.effective - The fee to display to the user. If not available, this is equal to the gasLimit (total)
191
+ * @param relayerFee - The relayer fee paid to bridge providers
192
+ * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
193
+ */
194
+ export const calcTotalEstimatedNetworkFee = ({ effective: gasFeeToDisplay, }, relayerFee) => {
162
195
  return {
163
- amount: new BigNumber(gasFee.amount).plus(relayerFee.amount).toString(),
164
- valueInCurrency: gasFee.valueInCurrency
165
- ? new BigNumber(gasFee.valueInCurrency)
196
+ amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')
197
+ .plus(relayerFee.amount)
198
+ .toString(),
199
+ valueInCurrency: gasFeeToDisplay?.valueInCurrency
200
+ ? new BigNumber(gasFeeToDisplay.valueInCurrency)
166
201
  .plus(relayerFee.valueInCurrency || '0')
167
202
  .toString()
168
203
  : null,
169
- usd: gasFee.usd
170
- ? new BigNumber(gasFee.usd).plus(relayerFee.usd || '0').toString()
204
+ usd: gasFeeToDisplay?.usd
205
+ ? new BigNumber(gasFeeToDisplay.usd)
206
+ .plus(relayerFee.usd || '0')
207
+ .toString()
171
208
  : null,
172
209
  };
173
210
  };
174
211
  export const calcTotalMaxNetworkFee = (gasFee, relayerFee) => {
175
212
  return {
176
- amount: new BigNumber(gasFee.amountMax).plus(relayerFee.amount).toString(),
177
- valueInCurrency: gasFee.valueInCurrencyMax
178
- ? new BigNumber(gasFee.valueInCurrencyMax)
213
+ amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),
214
+ valueInCurrency: gasFee.max.valueInCurrency
215
+ ? new BigNumber(gasFee.max.valueInCurrency)
179
216
  .plus(relayerFee.valueInCurrency || '0')
180
217
  .toString()
181
218
  : null,
182
- usd: gasFee.usdMax
183
- ? new BigNumber(gasFee.usdMax).plus(relayerFee.usd || '0').toString()
219
+ usd: gasFee.max.usd
220
+ ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd || '0').toString()
184
221
  : null,
185
222
  };
186
223
  };
@@ -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, isSolanaChainId } from './bridge';\nimport type {\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteResponse,\n SolanaFees,\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 and one of the chains is solana, require the dest wallet address\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n isSolanaChainId(partialRequest.destChainId) ===\n !isSolanaChainId(partialRequest.srcChainId)\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 calcSolanaTotalNetworkFee = (\n bridgeQuote: QuoteResponse & SolanaFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { solanaFeesInLamports } = bridgeQuote;\n const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);\n return {\n amount: solanaFeeInNative.toString(),\n valueInCurrency: exchangeRate\n ? solanaFeeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? solanaFeeInNative.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcToAmount = (\n { destTokenAmount, destAsset }: Quote,\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 { quote, trade }: QuoteResponse,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\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 bridgeQuote,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n feePerGasInDecGwei: string;\n priorityFeePerGasInDecGwei: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const { approval, trade, l1GasFeesInHexWei } = bridgeQuote;\n\n const totalGasLimitInDec = new BigNumber(\n trade.gasLimit?.toString() ?? '0',\n ).plus(approval?.gasLimit?.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,\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & L1GasFees;\n estimatedBaseFeeInDecGwei: string;\n maxFeePerGasInDecGwei: string;\n maxPriorityFeePerGasInDecGwei: string;\n} & ExchangeRate) => {\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: estimatedBaseFeeInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n bridgeQuote,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n priorityFeePerGasInDecGwei: maxPriorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n return {\n amount,\n amountMax,\n valueInCurrency,\n valueInCurrencyMax,\n usd,\n usdMax,\n };\n};\n\nexport const calcTotalEstimatedNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrency\n ? new BigNumber(gasFee.valueInCurrency)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usd\n ? new BigNumber(gasFee.usd).plus(relayerFee.usd || '0').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.amountMax).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.valueInCurrencyMax\n ? new BigNumber(gasFee.valueInCurrencyMax)\n .plus(relayerFee.valueInCurrency || '0')\n .toString()\n : null,\n usd: gasFee.usdMax\n ? new BigNumber(gasFee.usdMax).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, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !gasIncluded) {\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"]}
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, isSolanaChainId } from './bridge';\nimport type {\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n SolanaFees,\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 and one of the chains is solana, require the dest wallet address\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n isSolanaChainId(partialRequest.destChainId) ===\n !isSolanaChainId(partialRequest.srcChainId)\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 calcSolanaTotalNetworkFee = (\n bridgeQuote: QuoteResponse & SolanaFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { solanaFeesInLamports } = bridgeQuote;\n const solanaFeeInNative = calcTokenAmount(solanaFeesInLamports ?? '0', 9);\n return {\n amount: solanaFeeInNative.toString(),\n valueInCurrency: exchangeRate\n ? solanaFeeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? solanaFeeInNative.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcToAmount = (\n { destTokenAmount, destAsset }: Quote,\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 { quote, trade }: QuoteResponse,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\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 tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n priorityFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: 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(\n tradeGasLimit?.toString() ?? '0',\n ).plus(approvalGasLimit?.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 },\n estimatedBaseFeeInDecGwei,\n maxFeePerGasInDecGwei,\n maxPriorityFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponse & 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 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 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 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, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !gasIncluded) {\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"]}
@@ -162,6 +162,7 @@ exports.TxDataSchema = (0, superstruct_1.type)({
162
162
  value: HexStringSchema,
163
163
  data: HexStringSchema,
164
164
  gasLimit: (0, superstruct_1.nullable)((0, superstruct_1.number)()),
165
+ effectiveGas: (0, superstruct_1.optional)((0, superstruct_1.number)()),
165
166
  });
166
167
  exports.QuoteResponseSchema = (0, superstruct_1.type)({
167
168
  quote: exports.QuoteSchema,
@@ -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\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\nexport const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n isUnifiedUIEnabled: optional(boolean()),\n isSingleSwapBridgeButtonEnabled: optional(boolean()),\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 noFee: optional(boolean()),\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\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 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 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 }),\n ),\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});\n\nexport const QuoteResponseSchema = type({\n quote: QuoteSchema,\n estimatedProcessingTimeInSeconds: number(),\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\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\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\nexport const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n isUnifiedUIEnabled: optional(boolean()),\n isSingleSwapBridgeButtonEnabled: optional(boolean()),\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 noFee: optional(boolean()),\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\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 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 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 }),\n ),\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 QuoteResponseSchema = type({\n quote: QuoteSchema,\n estimatedProcessingTimeInSeconds: number(),\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\n});\n\nexport const validateQuoteResponse = (\n data: unknown,\n): data is Infer<typeof QuoteResponseSchema> => {\n assert(data, QuoteResponseSchema);\n return true;\n};\n"]}
@@ -995,6 +995,7 @@ export declare const TxDataSchema: import("@metamask/superstruct").Struct<{
995
995
  from: string;
996
996
  gasLimit: number | null;
997
997
  chainId: number;
998
+ effectiveGas?: number | undefined;
998
999
  }, {
999
1000
  chainId: import("@metamask/superstruct").Struct<number, null>;
1000
1001
  to: import("@metamask/superstruct").Struct<string, null>;
@@ -1002,6 +1003,7 @@ export declare const TxDataSchema: import("@metamask/superstruct").Struct<{
1002
1003
  value: import("@metamask/superstruct").Struct<string, null>;
1003
1004
  data: import("@metamask/superstruct").Struct<string, null>;
1004
1005
  gasLimit: import("@metamask/superstruct").Struct<number | null, null>;
1006
+ effectiveGas: import("@metamask/superstruct").Struct<number | undefined, null>;
1005
1007
  }>;
1006
1008
  export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct<{
1007
1009
  quote: {
@@ -1142,6 +1144,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1142
1144
  from: string;
1143
1145
  gasLimit: number | null;
1144
1146
  chainId: number;
1147
+ effectiveGas?: number | undefined;
1145
1148
  };
1146
1149
  approval?: {
1147
1150
  data: string;
@@ -1150,6 +1153,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1150
1153
  from: string;
1151
1154
  gasLimit: number | null;
1152
1155
  chainId: number;
1156
+ effectiveGas?: number | undefined;
1153
1157
  } | undefined;
1154
1158
  }, {
1155
1159
  quote: import("@metamask/superstruct").Struct<{
@@ -1795,6 +1799,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1795
1799
  from: string;
1796
1800
  gasLimit: number | null;
1797
1801
  chainId: number;
1802
+ effectiveGas?: number | undefined;
1798
1803
  } | undefined, {
1799
1804
  chainId: import("@metamask/superstruct").Struct<number, null>;
1800
1805
  to: import("@metamask/superstruct").Struct<string, null>;
@@ -1802,6 +1807,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1802
1807
  value: import("@metamask/superstruct").Struct<string, null>;
1803
1808
  data: import("@metamask/superstruct").Struct<string, null>;
1804
1809
  gasLimit: import("@metamask/superstruct").Struct<number | null, null>;
1810
+ effectiveGas: import("@metamask/superstruct").Struct<number | undefined, null>;
1805
1811
  }>;
1806
1812
  trade: import("@metamask/superstruct").Struct<string | {
1807
1813
  data: string;
@@ -1810,6 +1816,7 @@ export declare const QuoteResponseSchema: import("@metamask/superstruct").Struct
1810
1816
  from: string;
1811
1817
  gasLimit: number | null;
1812
1818
  chainId: number;
1819
+ effectiveGas?: number | undefined;
1813
1820
  }, null>;
1814
1821
  }>;
1815
1822
  export declare const validateQuoteResponse: (data: unknown) => data is {
@@ -1951,6 +1958,7 @@ export declare const validateQuoteResponse: (data: unknown) => data is {
1951
1958
  from: string;
1952
1959
  gasLimit: number | null;
1953
1960
  chainId: number;
1961
+ effectiveGas?: number | undefined;
1954
1962
  };
1955
1963
  approval?: {
1956
1964
  data: string;
@@ -1959,6 +1967,7 @@ export declare const validateQuoteResponse: (data: unknown) => data is {
1959
1967
  from: string;
1960
1968
  gasLimit: number | null;
1961
1969
  chainId: number;
1970
+ effectiveGas?: number | undefined;
1962
1971
  } | undefined;
1963
1972
  };
1964
1973
  //# sourceMappingURL=validators.d.cts.map