@metamask-previews/bridge-controller 77.6.0-preview-68ba7f84e → 77.8.0-preview-5959fe813

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 (246) hide show
  1. package/CHANGELOG.md +42 -7
  2. package/dist/bridge-controller.cjs +13 -8
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts +2 -1
  5. package/dist/bridge-controller.d.cts.map +1 -1
  6. package/dist/bridge-controller.d.mts +2 -1
  7. package/dist/bridge-controller.d.mts.map +1 -1
  8. package/dist/bridge-controller.mjs +10 -5
  9. package/dist/bridge-controller.mjs.map +1 -1
  10. package/dist/coercers/quote-response-v1-to-v2.cjs +137 -0
  11. package/dist/coercers/quote-response-v1-to-v2.cjs.map +1 -0
  12. package/dist/coercers/quote-response-v1-to-v2.d.cts +13 -0
  13. package/dist/coercers/quote-response-v1-to-v2.d.cts.map +1 -0
  14. package/dist/coercers/quote-response-v1-to-v2.d.mts +13 -0
  15. package/dist/coercers/quote-response-v1-to-v2.d.mts.map +1 -0
  16. package/dist/coercers/quote-response-v1-to-v2.mjs +132 -0
  17. package/dist/coercers/quote-response-v1-to-v2.mjs.map +1 -0
  18. package/dist/coercers/quote-response-v2-to-v1.cjs +173 -0
  19. package/dist/coercers/quote-response-v2-to-v1.cjs.map +1 -0
  20. package/dist/coercers/quote-response-v2-to-v1.d.cts +13 -0
  21. package/dist/coercers/quote-response-v2-to-v1.d.cts.map +1 -0
  22. package/dist/coercers/quote-response-v2-to-v1.d.mts +13 -0
  23. package/dist/coercers/quote-response-v2-to-v1.d.mts.map +1 -0
  24. package/dist/coercers/quote-response-v2-to-v1.mjs +169 -0
  25. package/dist/coercers/quote-response-v2-to-v1.mjs.map +1 -0
  26. package/dist/constants/bridge.cjs +2 -1
  27. package/dist/constants/bridge.cjs.map +1 -1
  28. package/dist/constants/bridge.d.cts +1 -0
  29. package/dist/constants/bridge.d.cts.map +1 -1
  30. package/dist/constants/bridge.d.mts +1 -0
  31. package/dist/constants/bridge.d.mts.map +1 -1
  32. package/dist/constants/bridge.mjs +1 -0
  33. package/dist/constants/bridge.mjs.map +1 -1
  34. package/dist/index.cjs +32 -7
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +17 -5
  37. package/dist/index.d.cts.map +1 -1
  38. package/dist/index.d.mts +17 -5
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +12 -3
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/selectors.cjs +52 -100
  43. package/dist/selectors.cjs.map +1 -1
  44. package/dist/selectors.d.cts +11198 -31552
  45. package/dist/selectors.d.cts.map +1 -1
  46. package/dist/selectors.d.mts +11198 -31552
  47. package/dist/selectors.d.mts.map +1 -1
  48. package/dist/selectors.mjs +52 -100
  49. package/dist/selectors.mjs.map +1 -1
  50. package/dist/types.cjs.map +1 -1
  51. package/dist/types.d.cts +4 -87
  52. package/dist/types.d.cts.map +1 -1
  53. package/dist/types.d.mts +4 -87
  54. package/dist/types.d.mts.map +1 -1
  55. package/dist/types.mjs.map +1 -1
  56. package/dist/utils/bridge.cjs +2 -6
  57. package/dist/utils/bridge.cjs.map +1 -1
  58. package/dist/utils/bridge.d.cts +2 -19
  59. package/dist/utils/bridge.d.cts.map +1 -1
  60. package/dist/utils/bridge.d.mts +2 -19
  61. package/dist/utils/bridge.d.mts.map +1 -1
  62. package/dist/utils/bridge.mjs +1 -4
  63. package/dist/utils/bridge.mjs.map +1 -1
  64. package/dist/utils/caip-formatters.cjs +0 -3
  65. package/dist/utils/caip-formatters.cjs.map +1 -1
  66. package/dist/utils/caip-formatters.d.cts.map +1 -1
  67. package/dist/utils/caip-formatters.d.mts.map +1 -1
  68. package/dist/utils/caip-formatters.mjs +0 -3
  69. package/dist/utils/caip-formatters.mjs.map +1 -1
  70. package/dist/utils/feature-flags.d.cts +2 -2
  71. package/dist/utils/feature-flags.d.mts +2 -2
  72. package/dist/utils/fetch.cjs +37 -40
  73. package/dist/utils/fetch.cjs.map +1 -1
  74. package/dist/utils/fetch.d.cts +10 -4
  75. package/dist/utils/fetch.d.cts.map +1 -1
  76. package/dist/utils/fetch.d.mts +10 -4
  77. package/dist/utils/fetch.d.mts.map +1 -1
  78. package/dist/utils/fetch.mjs +37 -40
  79. package/dist/utils/fetch.mjs.map +1 -1
  80. package/dist/utils/metrics/constants.cjs +1 -0
  81. package/dist/utils/metrics/constants.cjs.map +1 -1
  82. package/dist/utils/metrics/constants.d.cts +2 -1
  83. package/dist/utils/metrics/constants.d.cts.map +1 -1
  84. package/dist/utils/metrics/constants.d.mts +2 -1
  85. package/dist/utils/metrics/constants.d.mts.map +1 -1
  86. package/dist/utils/metrics/constants.mjs +1 -0
  87. package/dist/utils/metrics/constants.mjs.map +1 -1
  88. package/dist/utils/metrics/properties.cjs +6 -6
  89. package/dist/utils/metrics/properties.cjs.map +1 -1
  90. package/dist/utils/metrics/properties.d.cts +9 -5
  91. package/dist/utils/metrics/properties.d.cts.map +1 -1
  92. package/dist/utils/metrics/properties.d.mts +9 -5
  93. package/dist/utils/metrics/properties.d.mts.map +1 -1
  94. package/dist/utils/metrics/properties.mjs +6 -6
  95. package/dist/utils/metrics/properties.mjs.map +1 -1
  96. package/dist/utils/metrics/types.cjs.map +1 -1
  97. package/dist/utils/metrics/types.d.cts +1 -1
  98. package/dist/utils/metrics/types.d.cts.map +1 -1
  99. package/dist/utils/metrics/types.d.mts +1 -1
  100. package/dist/utils/metrics/types.d.mts.map +1 -1
  101. package/dist/utils/metrics/types.mjs.map +1 -1
  102. package/dist/utils/number-formatters.cjs +106 -0
  103. package/dist/utils/number-formatters.cjs.map +1 -0
  104. package/dist/utils/number-formatters.d.cts +34 -0
  105. package/dist/utils/number-formatters.d.cts.map +1 -0
  106. package/dist/utils/number-formatters.d.mts +34 -0
  107. package/dist/utils/number-formatters.d.mts.map +1 -0
  108. package/dist/utils/number-formatters.mjs +99 -0
  109. package/dist/utils/number-formatters.mjs.map +1 -0
  110. package/dist/utils/quote-fees.cjs +23 -22
  111. package/dist/utils/quote-fees.cjs.map +1 -1
  112. package/dist/utils/quote-fees.d.cts +4 -2
  113. package/dist/utils/quote-fees.d.cts.map +1 -1
  114. package/dist/utils/quote-fees.d.mts +4 -2
  115. package/dist/utils/quote-fees.d.mts.map +1 -1
  116. package/dist/utils/quote-fees.mjs +24 -23
  117. package/dist/utils/quote-fees.mjs.map +1 -1
  118. package/dist/utils/quote-metadata/calculators.cjs +340 -0
  119. package/dist/utils/quote-metadata/calculators.cjs.map +1 -0
  120. package/dist/utils/quote-metadata/calculators.d.cts +125 -0
  121. package/dist/utils/quote-metadata/calculators.d.cts.map +1 -0
  122. package/dist/utils/quote-metadata/calculators.d.mts +125 -0
  123. package/dist/utils/quote-metadata/calculators.d.mts.map +1 -0
  124. package/dist/utils/quote-metadata/calculators.mjs +323 -0
  125. package/dist/utils/quote-metadata/calculators.mjs.map +1 -0
  126. package/dist/utils/quote-metadata/merge.cjs +38 -0
  127. package/dist/utils/quote-metadata/merge.cjs.map +1 -0
  128. package/dist/utils/quote-metadata/merge.d.cts +12 -0
  129. package/dist/utils/quote-metadata/merge.d.cts.map +1 -0
  130. package/dist/utils/quote-metadata/merge.d.mts +12 -0
  131. package/dist/utils/quote-metadata/merge.d.mts.map +1 -0
  132. package/dist/utils/quote-metadata/merge.mjs +35 -0
  133. package/dist/utils/quote-metadata/merge.mjs.map +1 -0
  134. package/dist/utils/quote-metadata/to-normalized-amounts.cjs +38 -0
  135. package/dist/utils/quote-metadata/to-normalized-amounts.cjs.map +1 -0
  136. package/dist/utils/quote-metadata/to-normalized-amounts.d.cts +10 -0
  137. package/dist/utils/quote-metadata/to-normalized-amounts.d.cts.map +1 -0
  138. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts +10 -0
  139. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts.map +1 -0
  140. package/dist/utils/quote-metadata/to-normalized-amounts.mjs +34 -0
  141. package/dist/utils/quote-metadata/to-normalized-amounts.mjs.map +1 -0
  142. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs +39 -0
  143. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs.map +1 -0
  144. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts +13 -0
  145. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts.map +1 -0
  146. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts +13 -0
  147. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts.map +1 -0
  148. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs +36 -0
  149. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs.map +1 -0
  150. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs +94 -0
  151. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs.map +1 -0
  152. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts +12 -0
  153. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts.map +1 -0
  154. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts +12 -0
  155. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts.map +1 -0
  156. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs +90 -0
  157. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs.map +1 -0
  158. package/dist/utils/quote-metadata/types.cjs +3 -0
  159. package/dist/utils/quote-metadata/types.cjs.map +1 -0
  160. package/dist/utils/quote-metadata/types.d.cts +87 -0
  161. package/dist/utils/quote-metadata/types.d.cts.map +1 -0
  162. package/dist/utils/quote-metadata/types.d.mts +87 -0
  163. package/dist/utils/quote-metadata/types.d.mts.map +1 -0
  164. package/dist/utils/quote-metadata/types.mjs +2 -0
  165. package/dist/utils/quote-metadata/types.mjs.map +1 -0
  166. package/dist/utils/slippage.d.cts +1 -1
  167. package/dist/utils/slippage.d.mts +1 -1
  168. package/dist/utils/sort-quotes.cjs +16 -0
  169. package/dist/utils/sort-quotes.cjs.map +1 -0
  170. package/dist/utils/sort-quotes.d.cts +4 -0
  171. package/dist/utils/sort-quotes.d.cts.map +1 -0
  172. package/dist/utils/sort-quotes.d.mts +4 -0
  173. package/dist/utils/sort-quotes.d.mts.map +1 -0
  174. package/dist/utils/sort-quotes.mjs +12 -0
  175. package/dist/utils/sort-quotes.mjs.map +1 -0
  176. package/dist/validators/amount-and-asset.cjs +27 -0
  177. package/dist/validators/amount-and-asset.cjs.map +1 -0
  178. package/dist/validators/amount-and-asset.d.cts +62 -0
  179. package/dist/validators/amount-and-asset.d.cts.map +1 -0
  180. package/dist/validators/amount-and-asset.d.mts +62 -0
  181. package/dist/validators/amount-and-asset.d.mts.map +1 -0
  182. package/dist/validators/amount-and-asset.mjs +24 -0
  183. package/dist/validators/amount-and-asset.mjs.map +1 -0
  184. package/dist/validators/batch-sell.d.cts +8 -8
  185. package/dist/validators/batch-sell.d.mts +8 -8
  186. package/dist/validators/bridge-asset.cjs +65 -1
  187. package/dist/validators/bridge-asset.cjs.map +1 -1
  188. package/dist/validators/bridge-asset.d.cts +99 -5
  189. package/dist/validators/bridge-asset.d.cts.map +1 -1
  190. package/dist/validators/bridge-asset.d.mts +99 -5
  191. package/dist/validators/bridge-asset.d.mts.map +1 -1
  192. package/dist/validators/bridge-asset.mjs +64 -1
  193. package/dist/validators/bridge-asset.mjs.map +1 -1
  194. package/dist/validators/feature-flags.d.cts +5 -5
  195. package/dist/validators/feature-flags.d.mts +5 -5
  196. package/dist/validators/intent.d.cts +3 -3
  197. package/dist/validators/intent.d.mts +3 -3
  198. package/dist/validators/quote-request.cjs +57 -0
  199. package/dist/validators/quote-request.cjs.map +1 -0
  200. package/dist/validators/quote-request.d.cts +4 -0
  201. package/dist/validators/quote-request.d.cts.map +1 -0
  202. package/dist/validators/quote-request.d.mts +4 -0
  203. package/dist/validators/quote-request.d.mts.map +1 -0
  204. package/dist/validators/quote-request.mjs +52 -0
  205. package/dist/validators/quote-request.mjs.map +1 -0
  206. package/dist/validators/quote-response-v1.d.cts +179 -176
  207. package/dist/validators/quote-response-v1.d.cts.map +1 -1
  208. package/dist/validators/quote-response-v1.d.mts +179 -176
  209. package/dist/validators/quote-response-v1.d.mts.map +1 -1
  210. package/dist/validators/quote-response.cjs +116 -0
  211. package/dist/validators/quote-response.cjs.map +1 -0
  212. package/dist/validators/quote-response.d.cts +1979 -0
  213. package/dist/validators/quote-response.d.cts.map +1 -0
  214. package/dist/validators/quote-response.d.mts +1979 -0
  215. package/dist/validators/quote-response.d.mts.map +1 -0
  216. package/dist/validators/quote-response.mjs +112 -0
  217. package/dist/validators/quote-response.mjs.map +1 -0
  218. package/dist/validators/quote.cjs +75 -2
  219. package/dist/validators/quote.cjs.map +1 -1
  220. package/dist/validators/quote.d.cts +407 -44
  221. package/dist/validators/quote.d.cts.map +1 -1
  222. package/dist/validators/quote.d.mts +407 -44
  223. package/dist/validators/quote.d.mts.map +1 -1
  224. package/dist/validators/quote.mjs +76 -3
  225. package/dist/validators/quote.mjs.map +1 -1
  226. package/dist/validators/step.cjs +7 -1
  227. package/dist/validators/step.cjs.map +1 -1
  228. package/dist/validators/step.d.cts +197 -26
  229. package/dist/validators/step.d.cts.map +1 -1
  230. package/dist/validators/step.d.mts +197 -26
  231. package/dist/validators/step.d.mts.map +1 -1
  232. package/dist/validators/step.mjs +7 -1
  233. package/dist/validators/step.mjs.map +1 -1
  234. package/dist/validators/token-feature.d.cts +2 -2
  235. package/dist/validators/token-feature.d.mts +2 -2
  236. package/dist/validators/trade.d.cts +2 -2
  237. package/dist/validators/trade.d.mts +2 -2
  238. package/package.json +8 -8
  239. package/dist/utils/quote.cjs +0 -368
  240. package/dist/utils/quote.cjs.map +0 -1
  241. package/dist/utils/quote.d.cts +0 -98
  242. package/dist/utils/quote.d.cts.map +0 -1
  243. package/dist/utils/quote.d.mts +0 -98
  244. package/dist/utils/quote.d.mts.map +0 -1
  245. package/dist/utils/quote.mjs +0 -347
  246. package/dist/utils/quote.mjs.map +0 -1
@@ -1,368 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sortQuotes = exports.formatEtaInMinutes = exports.calcSlippagePercentage = exports.calcCost = exports.calcSwapRate = exports.calcAdjustedReturn = exports.calcIncludedTxFees = exports.calcTotalMaxNetworkFee = exports.calcTotalEstimatedNetworkFee = exports.calcEstimatedAndMaxTotalGasFee = exports.calcRelayerFee = exports.calcBatchFees = exports.calcSentAmount = exports.calcToAmount = exports.calcNonEvmTotalNetworkFee = exports.getQuoteIdentifier = exports.isValidBatchSellQuoteRequest = exports.isValidQuoteRequest = void 0;
4
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
5
- const controller_utils_1 = require("@metamask/controller-utils");
6
- const bignumber_js_1 = require("bignumber.js");
7
- const feature_flags_1 = require("../validators/feature-flags.cjs");
8
- const bridge_1 = require("./bridge.cjs");
9
- const isValidQuoteRequest = (partialRequest, requireAmount = true) => {
10
- const stringFields = [
11
- 'srcTokenAddress',
12
- 'destTokenAddress',
13
- 'srcChainId',
14
- 'destChainId',
15
- 'walletAddress',
16
- ];
17
- if (requireAmount) {
18
- stringFields.push('srcTokenAmount');
19
- }
20
- // If bridging between different chain types or different non-EVM chains, require dest wallet address
21
- // Cases that need destWalletAddress:
22
- // 1. EVM -> non-EVM
23
- // 2. non-EVM -> EVM
24
- // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)
25
- // Only same-chain swaps don't need destWalletAddress
26
- if (partialRequest.destChainId &&
27
- partialRequest.srcChainId &&
28
- partialRequest.destChainId !== partialRequest.srcChainId && // Different chains
29
- ((0, bridge_1.isNonEvmChainId)(partialRequest.destChainId) ||
30
- (0, bridge_1.isNonEvmChainId)(partialRequest.srcChainId)) // At least one is non-EVM
31
- ) {
32
- stringFields.push('destWalletAddress');
33
- if (!partialRequest.destWalletAddress) {
34
- return false;
35
- }
36
- }
37
- const numberFields = [];
38
- // if slippage is defined, require it to be a number
39
- if (partialRequest.slippage !== undefined) {
40
- numberFields.push('slippage');
41
- }
42
- return (stringFields.every((field) => field in partialRequest &&
43
- typeof partialRequest[field] ===
44
- 'string' &&
45
- partialRequest[field] !== undefined &&
46
- partialRequest[field] !== '' &&
47
- partialRequest[field] !== null) &&
48
- numberFields.every((field) => field in partialRequest &&
49
- typeof partialRequest[field] ===
50
- 'number' &&
51
- partialRequest[field] !== undefined &&
52
- !isNaN(Number(partialRequest[field])) &&
53
- partialRequest[field] !== null) &&
54
- (requireAmount
55
- ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\d*$/u))
56
- : true));
57
- };
58
- exports.isValidQuoteRequest = isValidQuoteRequest;
59
- const isValidBatchSellQuoteRequest = (quoteRequests, requireAmount = true) => quoteRequests.every((req) => (0, exports.isValidQuoteRequest)(req, requireAmount));
60
- exports.isValidBatchSellQuoteRequest = isValidBatchSellQuoteRequest;
61
- /**
62
- * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
63
- *
64
- * @param quote - The quote to generate an identifier for
65
- * @returns A pseudo-unique string that identifies the quote
66
- */
67
- const getQuoteIdentifier = (quote) => `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;
68
- exports.getQuoteIdentifier = getQuoteIdentifier;
69
- const calcTokenAmount = (value, decimals) => {
70
- const divisor = new bignumber_js_1.BigNumber(10).pow(decimals ?? 0);
71
- return new bignumber_js_1.BigNumber(value).div(divisor);
72
- };
73
- const calcNonEvmTotalNetworkFee = (bridgeQuote, { exchangeRate, usdExchangeRate }) => {
74
- const { nonEvmFeesInNative } = bridgeQuote;
75
- // Fees are now stored directly in native units (SOL, BTC) without conversion
76
- const feeInNative = new bignumber_js_1.BigNumber(nonEvmFeesInNative ?? '0');
77
- return {
78
- amount: feeInNative.toString(),
79
- valueInCurrency: exchangeRate
80
- ? feeInNative.times(exchangeRate).toString()
81
- : null,
82
- usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,
83
- };
84
- };
85
- exports.calcNonEvmTotalNetworkFee = calcNonEvmTotalNetworkFee;
86
- const calcToAmount = (destTokenAmount, destAsset, { exchangeRate, usdExchangeRate }) => {
87
- const normalizedDestAmount = calcTokenAmount(destTokenAmount, destAsset.decimals);
88
- return {
89
- amount: normalizedDestAmount.toString(),
90
- valueInCurrency: exchangeRate
91
- ? normalizedDestAmount.times(exchangeRate).toString()
92
- : null,
93
- usd: usdExchangeRate
94
- ? normalizedDestAmount.times(usdExchangeRate).toString()
95
- : null,
96
- };
97
- };
98
- exports.calcToAmount = calcToAmount;
99
- const calcSentAmount = ({ srcTokenAmount, srcAsset, feeData, intent }, { exchangeRate, usdExchangeRate }) => {
100
- // For intent-based swaps (e.g. CoW Protocol), srcTokenAmount is the total
101
- // fixed commitment the user makes to the protocol — the protocol fee is
102
- // already baked in. Adding feeData fees on top would double-count them.
103
- // For conventional swaps, srcTokenAmount is the net routing amount (fees
104
- // excluded), so the src-token fees must be added to get the wallet deduction.
105
- const sentAmount = intent
106
- ? new bignumber_js_1.BigNumber(srcTokenAmount)
107
- : Object.values(feeData)
108
- .filter((fee) => fee?.amount && fee.asset?.assetId === srcAsset.assetId)
109
- .reduce((acc, { amount }) => acc.plus(amount), new bignumber_js_1.BigNumber(srcTokenAmount));
110
- const normalizedSentAmount = calcTokenAmount(sentAmount, srcAsset.decimals);
111
- return {
112
- amount: normalizedSentAmount.toString(),
113
- valueInCurrency: exchangeRate
114
- ? normalizedSentAmount.times(exchangeRate).toString()
115
- : null,
116
- usd: usdExchangeRate
117
- ? normalizedSentAmount.times(usdExchangeRate).toString()
118
- : null,
119
- };
120
- };
121
- exports.calcSentAmount = calcSentAmount;
122
- const calcBatchFees = (amount, asset, { exchangeRate, usdExchangeRate }) => {
123
- const normalizedAmount = calcTokenAmount(amount, asset.decimals);
124
- return {
125
- amount: normalizedAmount.toString(),
126
- valueInCurrency: exchangeRate
127
- ? normalizedAmount.times(exchangeRate).toString()
128
- : null,
129
- usd: usdExchangeRate
130
- ? normalizedAmount.times(usdExchangeRate).toString()
131
- : null,
132
- asset,
133
- };
134
- };
135
- exports.calcBatchFees = calcBatchFees;
136
- const calcRelayerFee = (quoteResponse, { exchangeRate, usdExchangeRate }) => {
137
- const { quote, trade } = quoteResponse;
138
- const relayerFeeAmount = new bignumber_js_1.BigNumber((0, controller_utils_1.convertHexToDecimal)(trade.value || '0x0'));
139
- let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);
140
- // Subtract srcAmount and other fees from trade value if srcAsset is native
141
- if ((0, bridge_1.isNativeAddress)(quote.srcAsset.address)) {
142
- const sentAmountInNative = (0, exports.calcSentAmount)(quote, {
143
- exchangeRate,
144
- usdExchangeRate,
145
- }).amount;
146
- relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);
147
- }
148
- return {
149
- amount: relayerFeeInNative,
150
- valueInCurrency: exchangeRate
151
- ? relayerFeeInNative.times(exchangeRate)
152
- : null,
153
- usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,
154
- };
155
- };
156
- exports.calcRelayerFee = calcRelayerFee;
157
- const calcTotalGasFee = ({ approvalGasLimit, resetApprovalGasLimit, tradeGasLimit, l1GasFeesInHexWei, feePerGasInDecGwei, nativeToDisplayCurrencyExchangeRate, nativeToUsdExchangeRate, }) => {
158
- const totalGasLimitInDec = new bignumber_js_1.BigNumber(tradeGasLimit?.toString() ?? '0')
159
- .plus(approvalGasLimit?.toString() ?? '0')
160
- .plus(resetApprovalGasLimit?.toString() ?? '0');
161
- const l1GasFeesInDecGWei = (0, controller_utils_1.weiHexToGweiDec)((0, controller_utils_1.toHex)(l1GasFeesInHexWei ?? '0'));
162
- const gasFeesInDecGwei = totalGasLimitInDec
163
- .times(feePerGasInDecGwei ?? '0')
164
- .plus(l1GasFeesInDecGWei);
165
- const gasFeesInDecEth = gasFeesInDecGwei.times(new bignumber_js_1.BigNumber(10).pow(-9));
166
- const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate
167
- ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())
168
- : null;
169
- const gasFeesInUSD = nativeToUsdExchangeRate
170
- ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())
171
- : null;
172
- return {
173
- amount: gasFeesInDecEth.toString(),
174
- valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,
175
- usd: gasFeesInUSD?.toString() ?? null,
176
- };
177
- };
178
- const calcEstimatedAndMaxTotalGasFee = ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }) => {
179
- // Estimated gas fees spent after receiving refunds, this is shown to the user
180
- const { amount: amountEffective, valueInCurrency: valueInCurrencyEffective, usd: usdEffective, } = calcTotalGasFee({
181
- // Fallback to gasLimit if effectiveGas is not available
182
- approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,
183
- resetApprovalGasLimit: resetApproval?.effectiveGas ?? resetApproval?.gasLimit,
184
- tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,
185
- l1GasFeesInHexWei,
186
- feePerGasInDecGwei,
187
- nativeToDisplayCurrencyExchangeRate,
188
- nativeToUsdExchangeRate,
189
- });
190
- // Estimated total gas fee, including refunded fees (medium)
191
- const { amount, valueInCurrency, usd } = calcTotalGasFee({
192
- approvalGasLimit: approval?.gasLimit,
193
- resetApprovalGasLimit: resetApproval?.gasLimit,
194
- tradeGasLimit: trade?.gasLimit,
195
- l1GasFeesInHexWei,
196
- feePerGasInDecGwei,
197
- nativeToDisplayCurrencyExchangeRate,
198
- nativeToUsdExchangeRate,
199
- });
200
- // Max gas fee (high), used to disable submission of the transaction
201
- const { amount: amountMax, valueInCurrency: valueInCurrencyMax, usd: usdMax, } = calcTotalGasFee({
202
- approvalGasLimit: approval?.gasLimit,
203
- resetApprovalGasLimit: resetApproval?.gasLimit,
204
- tradeGasLimit: trade?.gasLimit,
205
- l1GasFeesInHexWei,
206
- feePerGasInDecGwei: maxFeePerGasInDecGwei,
207
- nativeToDisplayCurrencyExchangeRate,
208
- nativeToUsdExchangeRate,
209
- });
210
- return {
211
- effective: {
212
- amount: amountEffective,
213
- valueInCurrency: valueInCurrencyEffective,
214
- usd: usdEffective,
215
- },
216
- total: {
217
- amount,
218
- valueInCurrency,
219
- usd,
220
- },
221
- max: {
222
- amount: amountMax,
223
- valueInCurrency: valueInCurrencyMax,
224
- usd: usdMax,
225
- },
226
- };
227
- };
228
- exports.calcEstimatedAndMaxTotalGasFee = calcEstimatedAndMaxTotalGasFee;
229
- /**
230
- * Calculates the total estimated network fees for the bridge transaction
231
- *
232
- * @param gasFee - The gas fee for the bridge transaction
233
- * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
234
- * @param relayerFee - The relayer fee paid to bridge providers
235
- * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
236
- */
237
- const calcTotalEstimatedNetworkFee = ({ total: gasFeeToDisplay }, relayerFee) => {
238
- return {
239
- amount: new bignumber_js_1.BigNumber(gasFeeToDisplay?.amount ?? '0')
240
- .plus(relayerFee.amount)
241
- .toString(),
242
- valueInCurrency: gasFeeToDisplay?.valueInCurrency
243
- ? new bignumber_js_1.BigNumber(gasFeeToDisplay.valueInCurrency)
244
- .plus(relayerFee.valueInCurrency ?? '0')
245
- .toString()
246
- : null,
247
- usd: gasFeeToDisplay?.usd
248
- ? new bignumber_js_1.BigNumber(gasFeeToDisplay.usd)
249
- .plus(relayerFee.usd ?? '0')
250
- .toString()
251
- : null,
252
- };
253
- };
254
- exports.calcTotalEstimatedNetworkFee = calcTotalEstimatedNetworkFee;
255
- const calcTotalMaxNetworkFee = (gasFee, relayerFee) => {
256
- return {
257
- amount: new bignumber_js_1.BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),
258
- valueInCurrency: gasFee.max.valueInCurrency
259
- ? new bignumber_js_1.BigNumber(gasFee.max.valueInCurrency)
260
- .plus(relayerFee.valueInCurrency ?? '0')
261
- .toString()
262
- : null,
263
- usd: gasFee.max.usd
264
- ? new bignumber_js_1.BigNumber(gasFee.max.usd).plus(relayerFee.usd ?? '0').toString()
265
- : null,
266
- };
267
- };
268
- exports.calcTotalMaxNetworkFee = calcTotalMaxNetworkFee;
269
- // Gas is included for some swap quotes and this is the value displayed in the client
270
- const calcIncludedTxFees = ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }, srcTokenExchangeRate, destTokenExchangeRate) => {
271
- if (!txFee || !(gasIncluded || gasIncluded7702)) {
272
- return null;
273
- }
274
- // Use exchange rate of the token that is being used to pay for the transaction
275
- const { exchangeRate, usdExchangeRate } = txFee.asset.assetId === srcAsset.assetId
276
- ? srcTokenExchangeRate
277
- : destTokenExchangeRate;
278
- const normalizedTxFeeAmount = calcTokenAmount(txFee.amount, txFee.asset.decimals);
279
- return {
280
- amount: normalizedTxFeeAmount.toString(),
281
- valueInCurrency: exchangeRate
282
- ? normalizedTxFeeAmount.times(exchangeRate).toString()
283
- : null,
284
- usd: usdExchangeRate
285
- ? normalizedTxFeeAmount.times(usdExchangeRate).toString()
286
- : null,
287
- };
288
- };
289
- exports.calcIncludedTxFees = calcIncludedTxFees;
290
- const calcAdjustedReturn = (toTokenAmount, totalEstimatedNetworkFee, { feeData: { txFee }, destAsset: { assetId: destAssetId } }) => {
291
- // If gas is included and is taken from the dest token, don't subtract network fee from return
292
- if (txFee?.asset?.assetId === destAssetId) {
293
- return {
294
- valueInCurrency: toTokenAmount.valueInCurrency,
295
- usd: toTokenAmount.usd,
296
- };
297
- }
298
- return {
299
- valueInCurrency: toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency
300
- ? new bignumber_js_1.BigNumber(toTokenAmount.valueInCurrency)
301
- .minus(totalEstimatedNetworkFee.valueInCurrency)
302
- .toString()
303
- : null,
304
- usd: toTokenAmount.usd && totalEstimatedNetworkFee.usd
305
- ? new bignumber_js_1.BigNumber(toTokenAmount.usd)
306
- .minus(totalEstimatedNetworkFee.usd)
307
- .toString()
308
- : null,
309
- };
310
- };
311
- exports.calcAdjustedReturn = calcAdjustedReturn;
312
- const calcSwapRate = (sentAmount, destTokenAmount) => new bignumber_js_1.BigNumber(destTokenAmount).div(sentAmount).toString();
313
- exports.calcSwapRate = calcSwapRate;
314
- const calcCost = (adjustedReturn, sentAmount) => ({
315
- valueInCurrency: adjustedReturn.valueInCurrency && sentAmount.valueInCurrency
316
- ? new bignumber_js_1.BigNumber(sentAmount.valueInCurrency)
317
- .minus(adjustedReturn.valueInCurrency)
318
- .toString()
319
- : null,
320
- usd: adjustedReturn.usd && sentAmount.usd
321
- ? new bignumber_js_1.BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()
322
- : null,
323
- });
324
- exports.calcCost = calcCost;
325
- /**
326
- * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
327
- *
328
- * @param adjustedReturn - Adjusted return value
329
- * @param sentAmount - Sent amount value
330
- * @returns the slippage in percentage
331
- */
332
- const calcSlippagePercentage = (adjustedReturn, sentAmount) => {
333
- const cost = (0, exports.calcCost)(adjustedReturn, sentAmount);
334
- if (cost.valueInCurrency && sentAmount.valueInCurrency) {
335
- return new bignumber_js_1.BigNumber(cost.valueInCurrency)
336
- .div(sentAmount.valueInCurrency)
337
- .times(100)
338
- .abs()
339
- .toString();
340
- }
341
- if (cost.usd && sentAmount.usd) {
342
- return new bignumber_js_1.BigNumber(cost.usd)
343
- .div(sentAmount.usd)
344
- .times(100)
345
- .abs()
346
- .toString();
347
- }
348
- return null;
349
- };
350
- exports.calcSlippagePercentage = calcSlippagePercentage;
351
- const formatEtaInMinutes = (estimatedProcessingTimeInSeconds) => {
352
- if (estimatedProcessingTimeInSeconds < 60) {
353
- return `< 1`;
354
- }
355
- return (estimatedProcessingTimeInSeconds / 60).toFixed();
356
- };
357
- exports.formatEtaInMinutes = formatEtaInMinutes;
358
- const sortQuotes = (quotes, featureId) => {
359
- // Sort perps quotes by increasing estimated processing time (fastest first)
360
- if (featureId === feature_flags_1.FeatureId.PERPS) {
361
- return quotes.sort((a, b) => {
362
- return (a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds);
363
- });
364
- }
365
- return quotes;
366
- };
367
- exports.sortQuotes = sortQuotes;
368
- //# sourceMappingURL=quote.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quote.cjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,iEAIoC;AACpC,+CAAyC;AAUzC,mEAAwD;AAIxD,yCAA4D;AAErD,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,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IACD,qGAAqG;IACrG,qCAAqC;IACrC,oBAAoB;IACpB,oBAAoB;IACpB,qDAAqD;IACrD,qDAAqD;IACrD,IACE,cAAc,CAAC,WAAW;QAC1B,cAAc,CAAC,UAAU;QACzB,cAAc,CAAC,WAAW,KAAK,cAAc,CAAC,UAAU,IAAI,mBAAmB;QAC/E,CAAC,IAAA,wBAAe,EAAC,cAAc,CAAC,WAAW,CAAC;YAC1C,IAAA,wBAAe,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,0BAA0B;MACxE,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC1C,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;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;AA7DW,QAAA,mBAAmB,uBA6D9B;AAEK,MAAM,4BAA4B,GAAG,CAC1C,aAA6C,EAC7C,aAAa,GAAG,IAAI,EACoB,EAAE,CAC1C,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;AAJ3D,QAAA,4BAA4B,gCAI+B;AAExE;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAA+B,EAAE,EAAE,CACpE,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,WAAyC,EACzC,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAC;IAC3C,6EAA6E;IAC7E,MAAM,WAAW,GAAG,IAAI,wBAAS,CAAC,kBAAkB,IAAI,GAAG,CAAC,CAAC;IAE7D,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE;QAC9B,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YAC5C,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;KAC5E,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,yBAAyB,6BAepC;AAEK,MAAM,YAAY,GAAG,CAC1B,eAAuB,EACvB,SAAsB,EACtB,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;AAlBW,QAAA,YAAY,gBAkBvB;AAEK,MAAM,cAAc,GAAG,CAC5B,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAS,EACpD,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,0EAA0E;IAC1E,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,UAAU,GAAG,MAAM;QACvB,CAAC,CAAC,IAAI,wBAAS,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,OAAO,CAAC;aACvE,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EACrC,IAAI,wBAAS,CAAC,cAAc,CAAC,CAC9B,CAAC;IACR,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;AA3BW,QAAA,cAAc,kBA2BzB;AAEK,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,KAAkB,EAClB,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QACnC,eAAe,EAAE,YAAY;YAC3B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;YACjD,CAAC,CAAC,IAAI;QACR,GAAG,EAAE,eAAe;YAClB,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;YACpD,CAAC,CAAC,IAAI;QACR,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,aAAa,iBAiBxB;AAEK,MAAM,cAAc,GAAG,CAC5B,aAA8C,EAC9C,EAAE,YAAY,EAAE,eAAe,EAAgB,EAC/C,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;IACvC,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,CAAC;QAC5C,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;IACpE,CAAC;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;AA1BW,QAAA,cAAc,kBA0BzB;AAEF,MAAM,eAAe,GAAG,CAAC,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,uBAAuB,GASxB,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG,IAAI,wBAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC;SACvE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC;SACzC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;IAElD,MAAM,kBAAkB,GAAG,IAAA,kCAAe,EAAC,IAAA,wBAAK,EAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC,CAAC;IAC5E,MAAM,gBAAgB,GAAG,kBAAkB;SACxC,KAAK,CAAC,kBAAkB,IAAI,GAAG,CAAC;SAChC,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,aAAa,EAAE,EAClE,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EAAE,mCAAmC,EACjD,eAAe,EAAE,uBAAuB,GAK1B,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,qBAAqB,EACnB,aAAa,EAAE,YAAY,IAAI,aAAa,EAAE,QAAQ;QACxD,aAAa,EAAE,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,QAAQ;QACrD,iBAAiB;QACjB,kBAAkB;QAClB,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,qBAAqB,EAAE,aAAa,EAAE,QAAQ;QAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB;QAClB,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,qBAAqB,EAAE,aAAa,EAAE,QAAQ;QAC9C,aAAa,EAAE,KAAK,EAAE,QAAQ;QAC9B,iBAAiB;QACjB,kBAAkB,EAAE,qBAAqB;QACzC,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;AAvEW,QAAA,8BAA8B,kCAuEzC;AAEF;;;;;;;GAOG;AACI,MAAM,4BAA4B,GAAG,CAC1C,EAAE,KAAK,EAAE,eAAe,EAAqD,EAC7E,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;AAnBW,QAAA,4BAA4B,gCAmBvC;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,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAS,EACrE,oBAAkC,EAClC,qBAAmC,EACnC,EAAE;IACF,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;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,CAAC;QAC1C,OAAO;YACL,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,GAAG,EAAE,aAAa,CAAC,GAAG;SACvB,CAAC;IACJ,CAAC;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,CAAC;QACvD,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;IAChB,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;QAC/B,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;IAChB,CAAC;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,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B;AAEK,MAAM,UAAU,GAAG,CACxB,MAAyB,EACzB,SAA2B,EAC3B,EAAE;IACF,4EAA4E;IAC5E,IAAI,SAAS,KAAK,yBAAS,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,OAAO,CACL,CAAC,CAAC,gCAAgC,GAAG,CAAC,CAAC,gCAAgC,CACxE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAbW,QAAA,UAAU,cAarB","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport {\n convertHexToDecimal,\n toHex,\n weiHexToGweiDec,\n} from '@metamask/controller-utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type {\n BridgeAsset,\n ExchangeRate,\n GenericQuoteRequest,\n L1GasFees,\n QuoteMetadata,\n NonEvmFees,\n} from '../types';\nimport { FeatureId } from '../validators/feature-flags';\nimport type { Quote } from '../validators/quote';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1';\nimport { TxData } from '../validators/trade';\nimport { isNativeAddress, isNonEvmChainId } from './bridge';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n // If bridging between different chain types or different non-EVM chains, require dest wallet address\n // Cases that need destWalletAddress:\n // 1. EVM -> non-EVM\n // 2. non-EVM -> EVM\n // 3. non-EVM -> different non-EVM (e.g., SOL -> BTC)\n // Only same-chain swaps don't need destWalletAddress\n if (\n partialRequest.destChainId &&\n partialRequest.srcChainId &&\n partialRequest.destChainId !== partialRequest.srcChainId && // Different chains\n (isNonEvmChainId(partialRequest.destChainId) ||\n isNonEvmChainId(partialRequest.srcChainId)) // At least one is non-EVM\n ) {\n stringFields.push('destWalletAddress');\n if (!partialRequest.destWalletAddress) {\n return false;\n }\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n\nexport const isValidBatchSellQuoteRequest = (\n quoteRequests: Partial<GenericQuoteRequest>[],\n requireAmount = true,\n): quoteRequests is GenericQuoteRequest[] =>\n quoteRequests.every((req) => isValidQuoteRequest(req, requireAmount));\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: QuoteResponseV1['quote']) =>\n `${quote.bridgeId}-${quote.bridges[0]}-${quote.steps.length}`;\n\nconst calcTokenAmount = (value: string | BigNumber, decimals: number) => {\n const divisor = new BigNumber(10).pow(decimals ?? 0);\n return new BigNumber(value).div(divisor);\n};\n\nexport const calcNonEvmTotalNetworkFee = (\n bridgeQuote: QuoteResponseV1 & NonEvmFees,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { nonEvmFeesInNative } = bridgeQuote;\n // Fees are now stored directly in native units (SOL, BTC) without conversion\n const feeInNative = new BigNumber(nonEvmFeesInNative ?? '0');\n\n return {\n amount: feeInNative.toString(),\n valueInCurrency: exchangeRate\n ? feeInNative.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate ? feeInNative.times(usdExchangeRate).toString() : null,\n };\n};\n\nexport const calcToAmount = (\n destTokenAmount: string,\n destAsset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedDestAmount = calcTokenAmount(\n destTokenAmount,\n destAsset.decimals,\n );\n return {\n amount: normalizedDestAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedDestAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedDestAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcSentAmount = (\n { srcTokenAmount, srcAsset, feeData, intent }: Quote,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n // For intent-based swaps (e.g. CoW Protocol), srcTokenAmount is the total\n // fixed commitment the user makes to the protocol — the protocol fee is\n // already baked in. Adding feeData fees on top would double-count them.\n // For conventional swaps, srcTokenAmount is the net routing amount (fees\n // excluded), so the src-token fees must be added to get the wallet deduction.\n const sentAmount = intent\n ? new BigNumber(srcTokenAmount)\n : Object.values(feeData)\n .filter((fee) => fee?.amount && fee.asset?.assetId === srcAsset.assetId)\n .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 calcBatchFees = (\n amount: string,\n asset: BridgeAsset,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const normalizedAmount = calcTokenAmount(amount, asset.decimals);\n\n return {\n amount: normalizedAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedAmount.times(usdExchangeRate).toString()\n : null,\n asset,\n };\n};\n\nexport const calcRelayerFee = (\n quoteResponse: QuoteResponseV1<TxData, TxData>,\n { exchangeRate, usdExchangeRate }: ExchangeRate,\n) => {\n const { quote, trade } = quoteResponse;\n const relayerFeeAmount = new BigNumber(\n convertHexToDecimal(trade.value || '0x0'),\n );\n let relayerFeeInNative = calcTokenAmount(relayerFeeAmount, 18);\n\n // Subtract srcAmount and other fees from trade value if srcAsset is native\n if (isNativeAddress(quote.srcAsset.address)) {\n const sentAmountInNative = calcSentAmount(quote, {\n exchangeRate,\n usdExchangeRate,\n }).amount;\n relayerFeeInNative = relayerFeeInNative.minus(sentAmountInNative);\n }\n\n return {\n amount: relayerFeeInNative,\n valueInCurrency: exchangeRate\n ? relayerFeeInNative.times(exchangeRate)\n : null,\n usd: usdExchangeRate ? relayerFeeInNative.times(usdExchangeRate) : null,\n };\n};\n\nconst calcTotalGasFee = ({\n approvalGasLimit,\n resetApprovalGasLimit,\n tradeGasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n}: {\n approvalGasLimit?: number | null;\n resetApprovalGasLimit?: number | null;\n tradeGasLimit?: number | null;\n l1GasFeesInHexWei?: string | null;\n feePerGasInDecGwei?: string;\n nativeToDisplayCurrencyExchangeRate?: string;\n nativeToUsdExchangeRate?: string;\n}) => {\n const totalGasLimitInDec = new BigNumber(tradeGasLimit?.toString() ?? '0')\n .plus(approvalGasLimit?.toString() ?? '0')\n .plus(resetApprovalGasLimit?.toString() ?? '0');\n\n const l1GasFeesInDecGWei = weiHexToGweiDec(toHex(l1GasFeesInHexWei ?? '0'));\n const gasFeesInDecGwei = totalGasLimitInDec\n .times(feePerGasInDecGwei ?? '0')\n .plus(l1GasFeesInDecGWei);\n const gasFeesInDecEth = gasFeesInDecGwei.times(new BigNumber(10).pow(-9));\n\n const gasFeesInDisplayCurrency = nativeToDisplayCurrencyExchangeRate\n ? gasFeesInDecEth.times(nativeToDisplayCurrencyExchangeRate.toString())\n : null;\n const gasFeesInUSD = nativeToUsdExchangeRate\n ? gasFeesInDecEth.times(nativeToUsdExchangeRate.toString())\n : null;\n\n return {\n amount: gasFeesInDecEth.toString(),\n valueInCurrency: gasFeesInDisplayCurrency?.toString() ?? null,\n usd: gasFeesInUSD?.toString() ?? null,\n };\n};\n\nexport const calcEstimatedAndMaxTotalGasFee = ({\n bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval },\n feePerGasInDecGwei,\n maxFeePerGasInDecGwei,\n exchangeRate: nativeToDisplayCurrencyExchangeRate,\n usdExchangeRate: nativeToUsdExchangeRate,\n}: {\n bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;\n maxFeePerGasInDecGwei?: string;\n feePerGasInDecGwei?: string;\n} & ExchangeRate): QuoteMetadata['gasFee'] => {\n // Estimated gas fees spent after receiving refunds, this is shown to the user\n const {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n } = calcTotalGasFee({\n // Fallback to gasLimit if effectiveGas is not available\n approvalGasLimit: approval?.effectiveGas ?? approval?.gasLimit,\n resetApprovalGasLimit:\n resetApproval?.effectiveGas ?? resetApproval?.gasLimit,\n tradeGasLimit: trade?.effectiveGas ?? trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Estimated total gas fee, including refunded fees (medium)\n const { amount, valueInCurrency, usd } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n // Max gas fee (high), used to disable submission of the transaction\n const {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n } = calcTotalGasFee({\n approvalGasLimit: approval?.gasLimit,\n resetApprovalGasLimit: resetApproval?.gasLimit,\n tradeGasLimit: trade?.gasLimit,\n l1GasFeesInHexWei,\n feePerGasInDecGwei: maxFeePerGasInDecGwei,\n nativeToDisplayCurrencyExchangeRate,\n nativeToUsdExchangeRate,\n });\n\n return {\n effective: {\n amount: amountEffective,\n valueInCurrency: valueInCurrencyEffective,\n usd: usdEffective,\n },\n total: {\n amount,\n valueInCurrency,\n usd,\n },\n max: {\n amount: amountMax,\n valueInCurrency: valueInCurrencyMax,\n usd: usdMax,\n },\n };\n};\n\n/**\n * Calculates the total estimated network fees for the bridge transaction\n *\n * @param gasFee - The gas fee for the bridge transaction\n * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)\n * @param relayerFee - The relayer fee paid to bridge providers\n * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers\n */\nexport const calcTotalEstimatedNetworkFee = (\n { total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFeeToDisplay?.amount ?? '0')\n .plus(relayerFee.amount)\n .toString(),\n valueInCurrency: gasFeeToDisplay?.valueInCurrency\n ? new BigNumber(gasFeeToDisplay.valueInCurrency)\n .plus(relayerFee.valueInCurrency ?? '0')\n .toString()\n : null,\n usd: gasFeeToDisplay?.usd\n ? new BigNumber(gasFeeToDisplay.usd)\n .plus(relayerFee.usd ?? '0')\n .toString()\n : null,\n };\n};\n\nexport const calcTotalMaxNetworkFee = (\n gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>,\n relayerFee: ReturnType<typeof calcRelayerFee>,\n) => {\n return {\n amount: new BigNumber(gasFee.max.amount).plus(relayerFee.amount).toString(),\n valueInCurrency: gasFee.max.valueInCurrency\n ? new BigNumber(gasFee.max.valueInCurrency)\n .plus(relayerFee.valueInCurrency ?? '0')\n .toString()\n : null,\n usd: gasFee.max.usd\n ? new BigNumber(gasFee.max.usd).plus(relayerFee.usd ?? '0').toString()\n : null,\n };\n};\n\n// Gas is included for some swap quotes and this is the value displayed in the client\nexport const calcIncludedTxFees = (\n { gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote,\n srcTokenExchangeRate: ExchangeRate,\n destTokenExchangeRate: ExchangeRate,\n) => {\n if (!txFee || !(gasIncluded || gasIncluded7702)) {\n return null;\n }\n // Use exchange rate of the token that is being used to pay for the transaction\n const { exchangeRate, usdExchangeRate } =\n txFee.asset.assetId === srcAsset.assetId\n ? srcTokenExchangeRate\n : destTokenExchangeRate;\n const normalizedTxFeeAmount = calcTokenAmount(\n txFee.amount,\n txFee.asset.decimals,\n );\n\n return {\n amount: normalizedTxFeeAmount.toString(),\n valueInCurrency: exchangeRate\n ? normalizedTxFeeAmount.times(exchangeRate).toString()\n : null,\n usd: usdExchangeRate\n ? normalizedTxFeeAmount.times(usdExchangeRate).toString()\n : null,\n };\n};\n\nexport const calcAdjustedReturn = (\n toTokenAmount: ReturnType<typeof calcToAmount>,\n totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>,\n { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote,\n) => {\n // If gas is included and is taken from the dest token, don't subtract network fee from return\n if (txFee?.asset?.assetId === destAssetId) {\n return {\n valueInCurrency: toTokenAmount.valueInCurrency,\n usd: toTokenAmount.usd,\n };\n }\n return {\n valueInCurrency:\n toTokenAmount.valueInCurrency && totalEstimatedNetworkFee.valueInCurrency\n ? new BigNumber(toTokenAmount.valueInCurrency)\n .minus(totalEstimatedNetworkFee.valueInCurrency)\n .toString()\n : null,\n usd:\n toTokenAmount.usd && totalEstimatedNetworkFee.usd\n ? new BigNumber(toTokenAmount.usd)\n .minus(totalEstimatedNetworkFee.usd)\n .toString()\n : null,\n };\n};\n\nexport const calcSwapRate = (sentAmount: string, destTokenAmount: string) =>\n new BigNumber(destTokenAmount).div(sentAmount).toString();\n\nexport const calcCost = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n) => ({\n valueInCurrency:\n adjustedReturn.valueInCurrency && sentAmount.valueInCurrency\n ? new BigNumber(sentAmount.valueInCurrency)\n .minus(adjustedReturn.valueInCurrency)\n .toString()\n : null,\n usd:\n adjustedReturn.usd && sentAmount.usd\n ? new BigNumber(sentAmount.usd).minus(adjustedReturn.usd).toString()\n : null,\n});\n\n/**\n * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.\n *\n * @param adjustedReturn - Adjusted return value\n * @param sentAmount - Sent amount value\n * @returns the slippage in percentage\n */\nexport const calcSlippagePercentage = (\n adjustedReturn: ReturnType<typeof calcAdjustedReturn>,\n sentAmount: ReturnType<typeof calcSentAmount>,\n): string | null => {\n const cost = calcCost(adjustedReturn, sentAmount);\n\n if (cost.valueInCurrency && sentAmount.valueInCurrency) {\n return new BigNumber(cost.valueInCurrency)\n .div(sentAmount.valueInCurrency)\n .times(100)\n .abs()\n .toString();\n }\n\n if (cost.usd && sentAmount.usd) {\n return new BigNumber(cost.usd)\n .div(sentAmount.usd)\n .times(100)\n .abs()\n .toString();\n }\n\n return null;\n};\n\nexport const formatEtaInMinutes = (\n estimatedProcessingTimeInSeconds: number,\n) => {\n if (estimatedProcessingTimeInSeconds < 60) {\n return `< 1`;\n }\n return (estimatedProcessingTimeInSeconds / 60).toFixed();\n};\n\nexport const sortQuotes = (\n quotes: QuoteResponseV1[],\n featureId: FeatureId | null,\n) => {\n // Sort perps quotes by increasing estimated processing time (fastest first)\n if (featureId === FeatureId.PERPS) {\n return quotes.sort((a, b) => {\n return (\n a.estimatedProcessingTimeInSeconds - b.estimatedProcessingTimeInSeconds\n );\n });\n }\n return quotes;\n};\n"]}
@@ -1,98 +0,0 @@
1
- import { BigNumber } from "bignumber.js";
2
- import type { BridgeAsset, ExchangeRate, GenericQuoteRequest, L1GasFees, QuoteMetadata, NonEvmFees } from "../types.cjs";
3
- import { FeatureId } from "../validators/feature-flags.cjs";
4
- import type { Quote } from "../validators/quote.cjs";
5
- import type { QuoteResponseV1 } from "../validators/quote-response-v1.cjs";
6
- import { TxData } from "../validators/trade.cjs";
7
- export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
8
- export declare const isValidBatchSellQuoteRequest: (quoteRequests: Partial<GenericQuoteRequest>[], requireAmount?: boolean) => quoteRequests is GenericQuoteRequest[];
9
- /**
10
- * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
11
- *
12
- * @param quote - The quote to generate an identifier for
13
- * @returns A pseudo-unique string that identifies the quote
14
- */
15
- export declare const getQuoteIdentifier: (quote: QuoteResponseV1['quote']) => string;
16
- export declare const calcNonEvmTotalNetworkFee: (bridgeQuote: QuoteResponseV1 & NonEvmFees, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
17
- amount: string;
18
- valueInCurrency: string | null;
19
- usd: string | null;
20
- };
21
- export declare const calcToAmount: (destTokenAmount: string, destAsset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
22
- amount: string;
23
- valueInCurrency: string | null;
24
- usd: string | null;
25
- };
26
- export declare const calcSentAmount: ({ srcTokenAmount, srcAsset, feeData, intent }: Quote, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
27
- amount: string;
28
- valueInCurrency: string | null;
29
- usd: string | null;
30
- };
31
- export declare const calcBatchFees: (amount: string, asset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
32
- amount: string;
33
- valueInCurrency: string | null;
34
- usd: string | null;
35
- asset: {
36
- symbol: string;
37
- chainId: number;
38
- address: string;
39
- assetId: `${string}:${string}/${string}:${string}`;
40
- name: string;
41
- decimals: number;
42
- icon?: string | null | undefined;
43
- iconUrl?: string | null | undefined;
44
- };
45
- };
46
- export declare const calcRelayerFee: (quoteResponse: QuoteResponseV1<TxData, TxData>, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
47
- amount: BigNumber;
48
- valueInCurrency: BigNumber | null;
49
- usd: BigNumber | null;
50
- };
51
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
52
- bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;
53
- maxFeePerGasInDecGwei?: string | undefined;
54
- feePerGasInDecGwei?: string | undefined;
55
- } & ExchangeRate) => QuoteMetadata['gasFee'];
56
- /**
57
- * Calculates the total estimated network fees for the bridge transaction
58
- *
59
- * @param gasFee - The gas fee for the bridge transaction
60
- * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
61
- * @param relayerFee - The relayer fee paid to bridge providers
62
- * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
63
- */
64
- export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
65
- amount: string;
66
- valueInCurrency: string | null;
67
- usd: string | null;
68
- };
69
- export declare const calcTotalMaxNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
70
- amount: string;
71
- valueInCurrency: string | null;
72
- usd: string | null;
73
- };
74
- export declare const calcIncludedTxFees: ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote, srcTokenExchangeRate: ExchangeRate, destTokenExchangeRate: ExchangeRate) => {
75
- amount: string;
76
- valueInCurrency: string | null;
77
- usd: string | null;
78
- } | null;
79
- export declare const calcAdjustedReturn: (toTokenAmount: ReturnType<typeof calcToAmount>, totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>, { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote) => {
80
- valueInCurrency: string | null;
81
- usd: string | null;
82
- };
83
- export declare const calcSwapRate: (sentAmount: string, destTokenAmount: string) => string;
84
- export declare const calcCost: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => {
85
- valueInCurrency: string | null;
86
- usd: string | null;
87
- };
88
- /**
89
- * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
90
- *
91
- * @param adjustedReturn - Adjusted return value
92
- * @param sentAmount - Sent amount value
93
- * @returns the slippage in percentage
94
- */
95
- export declare const calcSlippagePercentage: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => string | null;
96
- export declare const formatEtaInMinutes: (estimatedProcessingTimeInSeconds: number) => string;
97
- export declare const sortQuotes: (quotes: QuoteResponseV1[], featureId: FeatureId | null) => QuoteResponseV1[];
98
- //# sourceMappingURL=quote.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quote.d.cts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,UAAU,EACX,qBAAiB;AAClB,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,gCAA4B;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,4CAAwC;AACvE,OAAO,EAAE,MAAM,EAAE,gCAA4B;AAG7C,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,kBACxB,QAAQ,mBAAmB,CAAC,EAAE,oEAGwB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,eAAe,CAAC,OAAO,CAAC,WACH,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,KAAK,qCACjB,YAAY;;;;CAyBhD,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,gBAAgB,MAAM,EAAE,MAAM,CAAC,qCACX,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;qBAGvC,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,eAAe,EAAE,aACd,SAAS,GAAG,IAAI,sBAW5B,CAAC"}
@@ -1,98 +0,0 @@
1
- import { BigNumber } from "bignumber.js";
2
- import type { BridgeAsset, ExchangeRate, GenericQuoteRequest, L1GasFees, QuoteMetadata, NonEvmFees } from "../types.mjs";
3
- import { FeatureId } from "../validators/feature-flags.mjs";
4
- import type { Quote } from "../validators/quote.mjs";
5
- import type { QuoteResponseV1 } from "../validators/quote-response-v1.mjs";
6
- import { TxData } from "../validators/trade.mjs";
7
- export declare const isValidQuoteRequest: (partialRequest: Partial<GenericQuoteRequest>, requireAmount?: boolean) => partialRequest is GenericQuoteRequest;
8
- export declare const isValidBatchSellQuoteRequest: (quoteRequests: Partial<GenericQuoteRequest>[], requireAmount?: boolean) => quoteRequests is GenericQuoteRequest[];
9
- /**
10
- * Generates a pseudo-unique string that identifies each quote by aggregator, bridge, and steps
11
- *
12
- * @param quote - The quote to generate an identifier for
13
- * @returns A pseudo-unique string that identifies the quote
14
- */
15
- export declare const getQuoteIdentifier: (quote: QuoteResponseV1['quote']) => string;
16
- export declare const calcNonEvmTotalNetworkFee: (bridgeQuote: QuoteResponseV1 & NonEvmFees, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
17
- amount: string;
18
- valueInCurrency: string | null;
19
- usd: string | null;
20
- };
21
- export declare const calcToAmount: (destTokenAmount: string, destAsset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
22
- amount: string;
23
- valueInCurrency: string | null;
24
- usd: string | null;
25
- };
26
- export declare const calcSentAmount: ({ srcTokenAmount, srcAsset, feeData, intent }: Quote, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
27
- amount: string;
28
- valueInCurrency: string | null;
29
- usd: string | null;
30
- };
31
- export declare const calcBatchFees: (amount: string, asset: BridgeAsset, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
32
- amount: string;
33
- valueInCurrency: string | null;
34
- usd: string | null;
35
- asset: {
36
- symbol: string;
37
- chainId: number;
38
- address: string;
39
- assetId: `${string}:${string}/${string}:${string}`;
40
- name: string;
41
- decimals: number;
42
- icon?: string | null | undefined;
43
- iconUrl?: string | null | undefined;
44
- };
45
- };
46
- export declare const calcRelayerFee: (quoteResponse: QuoteResponseV1<TxData, TxData>, { exchangeRate, usdExchangeRate }: ExchangeRate) => {
47
- amount: BigNumber;
48
- valueInCurrency: BigNumber | null;
49
- usd: BigNumber | null;
50
- };
51
- export declare const calcEstimatedAndMaxTotalGasFee: ({ bridgeQuote: { approval, trade, l1GasFeesInHexWei, resetApproval }, feePerGasInDecGwei, maxFeePerGasInDecGwei, exchangeRate: nativeToDisplayCurrencyExchangeRate, usdExchangeRate: nativeToUsdExchangeRate, }: {
52
- bridgeQuote: QuoteResponseV1<TxData, TxData> & L1GasFees;
53
- maxFeePerGasInDecGwei?: string | undefined;
54
- feePerGasInDecGwei?: string | undefined;
55
- } & ExchangeRate) => QuoteMetadata['gasFee'];
56
- /**
57
- * Calculates the total estimated network fees for the bridge transaction
58
- *
59
- * @param gasFee - The gas fee for the bridge transaction
60
- * @param gasFee.total - The fee to display to the user. If not available, this is equal to the gasLimit (total)
61
- * @param relayerFee - The relayer fee paid to bridge providers
62
- * @returns The total estimated network fee for the bridge transaction, including the relayer fee paid to bridge providers
63
- */
64
- export declare const calcTotalEstimatedNetworkFee: ({ total: gasFeeToDisplay }: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
65
- amount: string;
66
- valueInCurrency: string | null;
67
- usd: string | null;
68
- };
69
- export declare const calcTotalMaxNetworkFee: (gasFee: ReturnType<typeof calcEstimatedAndMaxTotalGasFee>, relayerFee: ReturnType<typeof calcRelayerFee>) => {
70
- amount: string;
71
- valueInCurrency: string | null;
72
- usd: string | null;
73
- };
74
- export declare const calcIncludedTxFees: ({ gasIncluded, gasIncluded7702, srcAsset, feeData: { txFee } }: Quote, srcTokenExchangeRate: ExchangeRate, destTokenExchangeRate: ExchangeRate) => {
75
- amount: string;
76
- valueInCurrency: string | null;
77
- usd: string | null;
78
- } | null;
79
- export declare const calcAdjustedReturn: (toTokenAmount: ReturnType<typeof calcToAmount>, totalEstimatedNetworkFee: ReturnType<typeof calcTotalEstimatedNetworkFee>, { feeData: { txFee }, destAsset: { assetId: destAssetId } }: Quote) => {
80
- valueInCurrency: string | null;
81
- usd: string | null;
82
- };
83
- export declare const calcSwapRate: (sentAmount: string, destTokenAmount: string) => string;
84
- export declare const calcCost: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => {
85
- valueInCurrency: string | null;
86
- usd: string | null;
87
- };
88
- /**
89
- * Calculates the slippage absolute value percentage based on the adjusted return and sent amount.
90
- *
91
- * @param adjustedReturn - Adjusted return value
92
- * @param sentAmount - Sent amount value
93
- * @returns the slippage in percentage
94
- */
95
- export declare const calcSlippagePercentage: (adjustedReturn: ReturnType<typeof calcAdjustedReturn>, sentAmount: ReturnType<typeof calcSentAmount>) => string | null;
96
- export declare const formatEtaInMinutes: (estimatedProcessingTimeInSeconds: number) => string;
97
- export declare const sortQuotes: (quotes: QuoteResponseV1[], featureId: FeatureId | null) => QuoteResponseV1[];
98
- //# sourceMappingURL=quote.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quote.d.mts","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAEzC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,UAAU,EACX,qBAAiB;AAClB,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,gCAA4B;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,4CAAwC;AACvE,OAAO,EAAE,MAAM,EAAE,gCAA4B;AAG7C,eAAO,MAAM,mBAAmB,mBACd,QAAQ,mBAAmB,CAAC,mEA4D7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,kBACxB,QAAQ,mBAAmB,CAAC,EAAE,oEAGwB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAW,eAAe,CAAC,OAAO,CAAC,WACH,CAAC;AAOhE,eAAO,MAAM,yBAAyB,gBACvB,eAAe,GAAG,UAAU,qCACN,YAAY;;;;CAahD,CAAC;AAEF,eAAO,MAAM,YAAY,oBACN,MAAM,aACZ,WAAW,qCACa,YAAY;;;;CAehD,CAAC;AAEF,eAAO,MAAM,cAAc,kDACsB,KAAK,qCACjB,YAAY;;;;CAyBhD,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,SACP,WAAW,qCACiB,YAAY;;;;;;;;;;;;;;CAchD,CAAC;AAEF,eAAO,MAAM,cAAc,kBACV,gBAAgB,MAAM,EAAE,MAAM,CAAC,qCACX,YAAY;;;;CAwBhD,CAAC;AA2CF,eAAO,MAAM,8BAA8B;iBAO5B,gBAAgB,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;;;qBAGvC,aAAa,CAAC,QAAQ,CA6DxC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,+BACX,WAAW,qCAAqC,CAAC,cACjE,WAAW,qBAAqB,CAAC;;;;CAiB9C,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,WAAW,qCAAqC,CAAC,cAC7C,WAAW,qBAAqB,CAAC;;;;CAa9C,CAAC;AAGF,eAAO,MAAM,kBAAkB,mEACmC,KAAK,wBAC/C,YAAY,yBACX,YAAY;;;;QAwBpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,kBACd,WAAW,mBAAmB,CAAC,4BACpB,WAAW,mCAAmC,CAAC,+DACZ,KAAK;;;CAuBnE,CAAC;AAEF,eAAO,MAAM,YAAY,eAAgB,MAAM,mBAAmB,MAAM,WACb,CAAC;AAE5D,eAAO,MAAM,QAAQ,mBACH,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC;;;CAY7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mBACjB,WAAW,yBAAyB,CAAC,cACzC,WAAW,qBAAqB,CAAC,KAC5C,MAAM,GAAG,IAoBX,CAAC;AAEF,eAAO,MAAM,kBAAkB,qCACK,MAAM,WAMzC,CAAC;AAEF,eAAO,MAAM,UAAU,WACb,eAAe,EAAE,aACd,SAAS,GAAG,IAAI,sBAW5B,CAAC"}