@rango-dev/widget-embedded 0.17.1-next.9 → 0.19.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 (271) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/QueueManager.d.ts +1 -2
  3. package/dist/QueueManager.d.ts.map +1 -1
  4. package/dist/Wallets.d.ts +0 -1
  5. package/dist/Wallets.d.ts.map +1 -1
  6. package/dist/Widget.d.ts +1 -1
  7. package/dist/Widget.d.ts.map +1 -1
  8. package/dist/components/AppRouter.d.ts +2 -0
  9. package/dist/components/AppRouter.d.ts.map +1 -1
  10. package/dist/components/AppRoutes.d.ts +6 -1
  11. package/dist/components/AppRoutes.d.ts.map +1 -1
  12. package/dist/components/ConfirmWalletsModal/ConfirmWallets.helpers.d.ts +3 -1
  13. package/dist/components/ConfirmWalletsModal/ConfirmWallets.helpers.d.ts.map +1 -1
  14. package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +1 -1
  15. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
  16. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts +3 -1
  17. package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts.map +1 -1
  18. package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
  19. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts +4 -1
  20. package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts.map +1 -1
  21. package/dist/components/NoRoutes/NoRoutes.d.ts +4 -0
  22. package/dist/components/NoRoutes/NoRoutes.d.ts.map +1 -0
  23. package/dist/components/NoRoutes/NoRoutes.helper.d.ts +3 -0
  24. package/dist/components/NoRoutes/NoRoutes.helper.d.ts.map +1 -0
  25. package/dist/components/{NoResult/NoResult.styles.d.ts → NoRoutes/NoRoutes.styles.d.ts} +1 -1
  26. package/dist/components/{NoResult/NoResult.styles.d.ts.map → NoRoutes/NoRoutes.styles.d.ts.map} +1 -1
  27. package/dist/components/{NoResult/NoResult.types.d.ts → NoRoutes/NoRoutes.types.d.ts} +3 -3
  28. package/dist/components/NoRoutes/NoRoutes.types.d.ts.map +1 -0
  29. package/dist/components/NoRoutes/index.d.ts +2 -0
  30. package/dist/components/NoRoutes/index.d.ts.map +1 -0
  31. package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
  32. package/dist/components/RouteErrors/RouteErrors.d.ts +4 -0
  33. package/dist/components/RouteErrors/RouteErrors.d.ts.map +1 -0
  34. package/dist/components/{QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts → RouteErrors/RouteErrors.styles.d.ts} +1 -1
  35. package/dist/components/RouteErrors/RouteErrors.styles.d.ts.map +1 -0
  36. package/dist/components/RouteErrors/RouteErrors.types.d.ts +24 -0
  37. package/dist/components/RouteErrors/RouteErrors.types.d.ts.map +1 -0
  38. package/dist/components/RouteErrors/RouteErrorsModal.d.ts +4 -0
  39. package/dist/components/RouteErrors/RouteErrorsModal.d.ts.map +1 -0
  40. package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts +4 -0
  41. package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts.map +1 -0
  42. package/dist/components/RouteErrors/index.d.ts +2 -0
  43. package/dist/components/RouteErrors/index.d.ts.map +1 -0
  44. package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
  45. package/dist/components/TokenList/TokenList.d.ts.map +1 -1
  46. package/dist/components/UpdateUrl.d.ts +6 -1
  47. package/dist/components/UpdateUrl.d.ts.map +1 -1
  48. package/dist/components/WidgetEvents.d.ts.map +1 -1
  49. package/dist/constants/errors.d.ts +4 -4
  50. package/dist/constants/errors.d.ts.map +1 -1
  51. package/dist/constants/messages.d.ts +1 -1
  52. package/dist/constants/searchParams.d.ts +1 -2
  53. package/dist/constants/searchParams.d.ts.map +1 -1
  54. package/dist/constants/warnings.d.ts +2 -2
  55. package/dist/constants/warnings.d.ts.map +1 -1
  56. package/dist/hooks/{useConfirmSwap/useConfirmSwap.types.d.ts → useConfirmSwap.d.ts} +7 -5
  57. package/dist/hooks/useConfirmSwap.d.ts.map +1 -0
  58. package/dist/hooks/{useFetchQuote.d.ts → useFetchBestRoute.d.ts} +3 -3
  59. package/dist/hooks/useFetchBestRoute.d.ts.map +1 -0
  60. package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts +2 -2
  61. package/dist/hooks/useSwapInput.d.ts +2 -4
  62. package/dist/hooks/useSwapInput.d.ts.map +1 -1
  63. package/dist/hooks/useSyncStoresWithConfig.d.ts +2 -1
  64. package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
  65. package/dist/hooks/useWalletList.d.ts.map +1 -1
  66. package/dist/index.js +1 -1
  67. package/dist/index.js.map +4 -4
  68. package/dist/pages/ConfirmSwapPage.d.ts +6 -1
  69. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  70. package/dist/pages/Home.d.ts.map +1 -1
  71. package/dist/pages/LiquiditySourcePage.d.ts +2 -1
  72. package/dist/pages/LiquiditySourcePage.d.ts.map +1 -1
  73. package/dist/pages/SelectBlockchainPage.d.ts.map +1 -1
  74. package/dist/pages/SettingsPage.d.ts +6 -1
  75. package/dist/pages/SettingsPage.d.ts.map +1 -1
  76. package/dist/pages/WalletsPage.d.ts +8 -1
  77. package/dist/pages/WalletsPage.d.ts.map +1 -1
  78. package/dist/store/app.d.ts +23 -5
  79. package/dist/store/app.d.ts.map +1 -1
  80. package/dist/store/{quote.d.ts → bestRoute.d.ts} +27 -39
  81. package/dist/store/bestRoute.d.ts.map +1 -0
  82. package/dist/store/meta.d.ts +23 -0
  83. package/dist/store/meta.d.ts.map +1 -0
  84. package/dist/store/settings.d.ts +2 -3
  85. package/dist/store/settings.d.ts.map +1 -1
  86. package/dist/store/slices/config.d.ts +2 -3
  87. package/dist/store/slices/config.d.ts.map +1 -1
  88. package/dist/store/slices/data.d.ts +0 -3
  89. package/dist/store/slices/data.d.ts.map +1 -1
  90. package/dist/store/wallets.d.ts +4 -5
  91. package/dist/store/wallets.d.ts.map +1 -1
  92. package/dist/types/config.d.ts +5 -5
  93. package/dist/types/config.d.ts.map +1 -1
  94. package/dist/types/index.d.ts +1 -1
  95. package/dist/types/index.d.ts.map +1 -1
  96. package/dist/types/routing.d.ts +65 -0
  97. package/dist/types/routing.d.ts.map +1 -0
  98. package/dist/utils/numbers.d.ts +1 -1
  99. package/dist/utils/numbers.d.ts.map +1 -1
  100. package/dist/utils/{quote.d.ts → routing.d.ts} +12 -16
  101. package/dist/utils/routing.d.ts.map +1 -0
  102. package/dist/utils/settings.d.ts +2 -3
  103. package/dist/utils/settings.d.ts.map +1 -1
  104. package/dist/utils/swap.d.ts +22 -25
  105. package/dist/utils/swap.d.ts.map +1 -1
  106. package/dist/utils/wallets.d.ts +2 -2
  107. package/dist/utils/wallets.d.ts.map +1 -1
  108. package/package.json +8 -8
  109. package/src/QueueManager.tsx +14 -14
  110. package/src/Wallets.tsx +15 -35
  111. package/src/Widget.tsx +24 -11
  112. package/src/components/AppRouter.tsx +5 -6
  113. package/src/components/AppRoutes.tsx +39 -6
  114. package/src/components/BlockchainList/BlockchainList.tsx +4 -4
  115. package/src/components/BlockchainsSection/BlockchainsSection.tsx +7 -7
  116. package/src/components/ConfirmWalletsModal/ConfirmWallets.helpers.ts +64 -2
  117. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +40 -28
  118. package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.types.ts +3 -1
  119. package/src/components/ConfirmWalletsModal/WalletList.tsx +5 -6
  120. package/src/components/ConfirmWalletsModal/WalletList.type.ts +4 -1
  121. package/src/components/LoadingSwapDetails/LoadingSwapDetails.styles.ts +3 -3
  122. package/src/components/LoadingSwapDetails/LoadingSwapDetails.tsx +6 -6
  123. package/src/components/{NoResult/NoResult.helpers.ts → NoRoutes/NoRoutes.helper.ts} +9 -16
  124. package/src/components/{NoResult/NoResult.styles.ts → NoRoutes/NoRoutes.styles.ts} +0 -2
  125. package/src/components/{NoResult/NoResult.tsx → NoRoutes/NoRoutes.tsx} +12 -10
  126. package/src/components/{NoResult/NoResult.types.ts → NoRoutes/NoRoutes.types.ts} +2 -3
  127. package/src/components/NoRoutes/index.ts +1 -0
  128. package/src/components/NotificationContent/NotificationContent.tsx +2 -3
  129. package/src/components/RouteErrors/RouteErrors.tsx +79 -0
  130. package/src/components/RouteErrors/RouteErrors.types.ts +29 -0
  131. package/src/components/RouteErrors/RouteErrorsModal.tsx +129 -0
  132. package/src/components/{QuoteWarningsAndErrors/QuoteErrorsModalItem.tsx → RouteErrors/RouteErrorsModalItem.tsx} +3 -3
  133. package/src/components/RouteErrors/index.ts +1 -0
  134. package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +1 -1
  135. package/src/components/SwapDetails/SwapDetails.tsx +22 -18
  136. package/src/components/SwitchFromAndTo.tsx +2 -2
  137. package/src/components/TokenList/TokenList.tsx +6 -5
  138. package/src/components/UpdateUrl.tsx +26 -36
  139. package/src/components/WidgetEvents.tsx +2 -4
  140. package/src/constants/errors.ts +10 -8
  141. package/src/constants/messages.ts +1 -1
  142. package/src/constants/searchParams.ts +0 -1
  143. package/src/constants/warnings.ts +7 -7
  144. package/src/hooks/useConfirmSwap.ts +303 -0
  145. package/src/hooks/{useFetchQuote.ts → useFetchBestRoute.ts} +3 -3
  146. package/src/hooks/useNavigateBack.ts +3 -3
  147. package/src/hooks/useSwapInput.ts +23 -58
  148. package/src/hooks/useSyncStoresWithConfig.ts +19 -22
  149. package/src/hooks/useWalletList.ts +5 -3
  150. package/src/pages/ConfirmSwapPage.tsx +235 -58
  151. package/src/pages/HistoryPage.tsx +1 -1
  152. package/src/pages/Home.tsx +247 -58
  153. package/src/pages/LanguagePage.tsx +1 -1
  154. package/src/pages/LiquiditySourcePage.tsx +32 -23
  155. package/src/pages/SelectBlockchainPage.tsx +7 -6
  156. package/src/pages/SelectSwapItemsPage.tsx +5 -5
  157. package/src/pages/SettingsPage.tsx +13 -9
  158. package/src/pages/SwapDetailsPage.tsx +3 -3
  159. package/src/pages/ThemePage.tsx +1 -1
  160. package/src/pages/WalletsPage.tsx +12 -5
  161. package/src/store/app.ts +6 -18
  162. package/src/store/{quote.ts → bestRoute.ts} +60 -68
  163. package/src/store/meta.ts +39 -0
  164. package/src/store/settings.ts +4 -7
  165. package/src/store/slices/config.ts +15 -25
  166. package/src/store/slices/data.ts +29 -64
  167. package/src/store/wallets.ts +8 -11
  168. package/src/types/config.ts +5 -5
  169. package/src/types/index.ts +1 -1
  170. package/src/types/routing.ts +77 -0
  171. package/src/utils/numbers.ts +1 -1
  172. package/src/utils/routing.ts +321 -0
  173. package/src/utils/settings.ts +7 -8
  174. package/src/utils/swap.ts +85 -113
  175. package/src/utils/wallets.ts +17 -29
  176. package/dist/components/NoResult/NoResult.d.ts +0 -4
  177. package/dist/components/NoResult/NoResult.d.ts.map +0 -1
  178. package/dist/components/NoResult/NoResult.helpers.d.ts +0 -4
  179. package/dist/components/NoResult/NoResult.helpers.d.ts.map +0 -1
  180. package/dist/components/NoResult/NoResult.types.d.ts.map +0 -1
  181. package/dist/components/NoResult/index.d.ts +0 -2
  182. package/dist/components/NoResult/index.d.ts.map +0 -1
  183. package/dist/components/Quote/Quote.d.ts +0 -4
  184. package/dist/components/Quote/Quote.d.ts.map +0 -1
  185. package/dist/components/Quote/Quote.styles.d.ts +0 -1429
  186. package/dist/components/Quote/Quote.styles.d.ts.map +0 -1
  187. package/dist/components/Quote/Quote.types.d.ts +0 -22
  188. package/dist/components/Quote/Quote.types.d.ts.map +0 -1
  189. package/dist/components/Quote/QuoteSkeleton.d.ts +0 -4
  190. package/dist/components/Quote/QuoteSkeleton.d.ts.map +0 -1
  191. package/dist/components/Quote/QuoteSkeleton.styles.d.ts +0 -319
  192. package/dist/components/Quote/QuoteSkeleton.styles.d.ts.map +0 -1
  193. package/dist/components/Quote/QuoteSkeleton.types.d.ts +0 -6
  194. package/dist/components/Quote/QuoteSkeleton.types.d.ts.map +0 -1
  195. package/dist/components/Quote/QuoteSummary.d.ts +0 -11
  196. package/dist/components/Quote/QuoteSummary.d.ts.map +0 -1
  197. package/dist/components/Quote/QuoteSummary.styles.d.ts +0 -158
  198. package/dist/components/Quote/QuoteSummary.styles.d.ts.map +0 -1
  199. package/dist/components/Quote/index.d.ts +0 -4
  200. package/dist/components/Quote/index.d.ts.map +0 -1
  201. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts +0 -11
  202. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts.map +0 -1
  203. package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts +0 -4
  204. package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts.map +0 -1
  205. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts +0 -4
  206. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +0 -1
  207. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts +0 -9
  208. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts.map +0 -1
  209. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts.map +0 -1
  210. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +0 -22
  211. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +0 -1
  212. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts +0 -11
  213. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts.map +0 -1
  214. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts +0 -11
  215. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts.map +0 -1
  216. package/dist/components/QuoteWarningsAndErrors/index.d.ts +0 -2
  217. package/dist/components/QuoteWarningsAndErrors/index.d.ts.map +0 -1
  218. package/dist/containers/QuoteInfo/QuoteInfo.d.ts +0 -4
  219. package/dist/containers/QuoteInfo/QuoteInfo.d.ts.map +0 -1
  220. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts +0 -472
  221. package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts.map +0 -1
  222. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts +0 -17
  223. package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts.map +0 -1
  224. package/dist/containers/QuoteInfo/index.d.ts +0 -2
  225. package/dist/containers/QuoteInfo/index.d.ts.map +0 -1
  226. package/dist/hooks/useConfirmSwap/index.d.ts +0 -2
  227. package/dist/hooks/useConfirmSwap/index.d.ts.map +0 -1
  228. package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts +0 -3
  229. package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts.map +0 -1
  230. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts +0 -16
  231. package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts.map +0 -1
  232. package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts.map +0 -1
  233. package/dist/hooks/useFetchQuote.d.ts.map +0 -1
  234. package/dist/hooks/useForceAutoConnect.d.ts +0 -2
  235. package/dist/hooks/useForceAutoConnect.d.ts.map +0 -1
  236. package/dist/store/AppStore.d.ts +0 -11
  237. package/dist/store/AppStore.d.ts.map +0 -1
  238. package/dist/store/quote.d.ts.map +0 -1
  239. package/dist/types/quote.d.ts +0 -82
  240. package/dist/types/quote.d.ts.map +0 -1
  241. package/dist/utils/quote.d.ts.map +0 -1
  242. package/src/components/NoResult/index.ts +0 -1
  243. package/src/components/Quote/Quote.styles.ts +0 -212
  244. package/src/components/Quote/Quote.tsx +0 -345
  245. package/src/components/Quote/Quote.types.ts +0 -16
  246. package/src/components/Quote/QuoteSkeleton.styles.ts +0 -110
  247. package/src/components/Quote/QuoteSkeleton.tsx +0 -108
  248. package/src/components/Quote/QuoteSkeleton.types.ts +0 -5
  249. package/src/components/Quote/QuoteSummary.styles.ts +0 -15
  250. package/src/components/Quote/QuoteSummary.tsx +0 -46
  251. package/src/components/Quote/index.ts +0 -3
  252. package/src/components/QuoteWarningsAndErrors/HighValueLossWarningModal.tsx +0 -107
  253. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.ts +0 -67
  254. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +0 -103
  255. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +0 -24
  256. package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +0 -77
  257. package/src/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.tsx +0 -38
  258. package/src/components/QuoteWarningsAndErrors/index.ts +0 -1
  259. package/src/containers/QuoteInfo/QuoteInfo.styles.ts +0 -15
  260. package/src/containers/QuoteInfo/QuoteInfo.tsx +0 -97
  261. package/src/containers/QuoteInfo/QuoteInfo.types.ts +0 -17
  262. package/src/containers/QuoteInfo/index.ts +0 -1
  263. package/src/hooks/useConfirmSwap/index.ts +0 -1
  264. package/src/hooks/useConfirmSwap/useConfirmSwap.helpers.ts +0 -168
  265. package/src/hooks/useConfirmSwap/useConfirmSwap.ts +0 -136
  266. package/src/hooks/useConfirmSwap/useConfirmSwap.types.ts +0 -19
  267. package/src/hooks/useForceAutoConnect.ts +0 -27
  268. package/src/store/AppStore.tsx +0 -35
  269. package/src/types/quote.ts +0 -107
  270. package/src/utils/quote.ts +0 -338
  271. /package/src/components/{QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.ts → RouteErrors/RouteErrors.styles.ts} +0 -0
@@ -1,338 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-magic-numbers */
2
- import type { QuoteError, QuoteWarning, Wallet } from '../types';
3
- import type { PendingSwap } from '@rango-dev/queue-manager-rango-preset';
4
- import type { PriceImpactWarningLevel } from '@rango-dev/ui';
5
- import type {
6
- SimulationAssetAndAmount,
7
- SimulationValidationStatus,
8
- } from '@rango-dev/ui/dist/widget/ui/src/types/swaps';
9
- import type {
10
- Asset,
11
- BestRouteResponse,
12
- BlockchainMeta,
13
- Token,
14
- } from 'rango-sdk';
15
-
16
- import { getLastSuccessfulStep } from '@rango-dev/queue-manager-rango-preset';
17
- import BigNumber from 'bignumber.js';
18
-
19
- import { HIGHT_PRICE_IMPACT, LOW_PRICE_IMPACT } from '../constants/routing';
20
- import { HIGH_SLIPPAGE } from '../constants/swapSettings';
21
- import { getUsdValue } from '../store/quote';
22
- import { QuoteErrorType, QuoteWarningType } from '../types';
23
-
24
- import { areEqual } from './common';
25
- import { findBlockchain, findToken } from './meta';
26
- import {
27
- checkSlippageErrors,
28
- checkSlippageWarnings,
29
- getLimitErrorMessage,
30
- getMinRequiredSlippage,
31
- getPercentageChange,
32
- getTotalFeeInUsd,
33
- hasHighValueLoss,
34
- hasLimitError,
35
- hasProperSlippage,
36
- } from './swap';
37
-
38
- export function searchParamsToToken(
39
- tokens: Token[],
40
- searchParams: string | null,
41
- chain: BlockchainMeta | null
42
- ): Token | null {
43
- if (!chain) {
44
- return null;
45
- }
46
- return (
47
- tokens.find((token) => {
48
- const symbolAndAddress = searchParams?.split('--');
49
- if (symbolAndAddress?.length === 1) {
50
- return (
51
- token.symbol === symbolAndAddress[0] &&
52
- token.address === null &&
53
- token.blockchain === chain.name
54
- );
55
- }
56
- return (
57
- token.symbol === symbolAndAddress?.[0] &&
58
- token.address === symbolAndAddress?.[1] &&
59
- token.blockchain === chain.name
60
- );
61
- }) || null
62
- );
63
- }
64
-
65
- export function getQuoteToTokenUsdPrice(
66
- quote: BestRouteResponse | null
67
- ): number | null | undefined {
68
- return quote?.result?.swaps[quote?.result?.swaps.length - 1].to.usdPrice;
69
- }
70
-
71
- export function isNumberOfSwapsChanged(
72
- quoteA: BestRouteResponse,
73
- quoteB: BestRouteResponse
74
- ) {
75
- const quoteASwaps = quoteA.result?.swaps || [];
76
- const quoteBSwaps = quoteB.result?.swaps || [];
77
- return quoteASwaps.length !== quoteBSwaps.length;
78
- }
79
-
80
- export function isQuoteSwappersUpdated(
81
- quoteA: BestRouteResponse,
82
- quoteB: BestRouteResponse
83
- ) {
84
- const quoteASwappers =
85
- quoteA.result?.swaps.map((swap) => swap.swapperId) || [];
86
- const quoteBSwappers =
87
- quoteB.result?.swaps.map((swap) => swap.swapperId) || [];
88
- return !areEqual(quoteASwappers, quoteBSwappers);
89
- }
90
-
91
- export function isQuoteInternalCoinsUpdated(
92
- quoteA: BestRouteResponse,
93
- quoteB: BestRouteResponse
94
- ) {
95
- const quoteAInternalCoins =
96
- quoteA.result?.swaps.map((swap) => swap.to.symbol) || [];
97
- const quoteBInternalCoins =
98
- quoteB.result?.swaps.map((swap) => swap.to.symbol) || [];
99
- return !areEqual(quoteAInternalCoins, quoteBInternalCoins);
100
- }
101
-
102
- export function isQuoteChanged(
103
- quoteA: BestRouteResponse,
104
- quoteB: BestRouteResponse
105
- ): boolean {
106
- return (
107
- isNumberOfSwapsChanged(quoteA, quoteB) ||
108
- isQuoteSwappersUpdated(quoteA, quoteB) ||
109
- isQuoteInternalCoinsUpdated(quoteA, quoteB)
110
- );
111
- }
112
-
113
- export function outToRatioHasWarning(
114
- fromUsdValue: BigNumber | null,
115
- outToInRatio: BigNumber | 0
116
- ) {
117
- return (
118
- (parseInt(outToInRatio?.toFixed(2) || '0') <= -10 &&
119
- (fromUsdValue === null || fromUsdValue.gte(new BigNumber(200)))) ||
120
- (parseInt(outToInRatio?.toFixed(2) || '0') <= -5 &&
121
- (fromUsdValue === null || fromUsdValue.gte(new BigNumber(1000))))
122
- );
123
- }
124
-
125
- export function getRequiredBalanceOfWallet(
126
- selectedWallet: Wallet,
127
- fee: SimulationValidationStatus[] | null
128
- ): SimulationAssetAndAmount[] | null {
129
- if (fee === null) {
130
- return null;
131
- }
132
- const relatedFeeStatus = fee
133
- ?.find((item) => item.blockchain === selectedWallet.chain)
134
- ?.wallets.find(
135
- (wallet) =>
136
- wallet.address?.toLowerCase() === selectedWallet.address.toLowerCase()
137
- );
138
- if (!relatedFeeStatus) {
139
- return null;
140
- }
141
- return relatedFeeStatus.requiredAssets;
142
- }
143
-
144
- export function getPriceImpactLevel(
145
- priceImpact: number
146
- ): PriceImpactWarningLevel {
147
- let warningLevel: PriceImpactWarningLevel = undefined;
148
- if (priceImpact <= LOW_PRICE_IMPACT && priceImpact > HIGHT_PRICE_IMPACT) {
149
- warningLevel = 'low';
150
- } else if (priceImpact <= HIGHT_PRICE_IMPACT) {
151
- warningLevel = 'high';
152
- }
153
-
154
- return warningLevel;
155
- }
156
-
157
- export function findCommonTokens<T extends Asset[], R extends Asset[]>(
158
- listA: T,
159
- listB: R
160
- ) {
161
- const tokenToString = (token: Asset): string =>
162
- `${token.symbol}-${token.blockchain}-${token.address ?? ''}`;
163
-
164
- const set = new Set();
165
-
166
- listA.forEach((token) => set.add(tokenToString(token)));
167
-
168
- return listB.filter((token) => set.has(tokenToString(token))) as R;
169
- }
170
-
171
- export function createRetryQuote(
172
- pendingSwap: PendingSwap,
173
- blockchains: BlockchainMeta[],
174
- tokens: Token[]
175
- ): {
176
- fromBlockchain: BlockchainMeta | null;
177
- fromToken: Token | null;
178
- toBlockchain: BlockchainMeta | null;
179
- toToken: Token | null;
180
- inputAmount: string;
181
- } {
182
- const firstStep = pendingSwap.steps[0];
183
- const lastStep = pendingSwap.steps[pendingSwap.steps.length - 1];
184
- const lastSuccessfulStep = getLastSuccessfulStep(pendingSwap.steps);
185
-
186
- const toToken = {
187
- blockchain: lastStep.toBlockchain,
188
- symbol: lastStep.toSymbol,
189
- address: lastStep.toSymbolAddress,
190
- };
191
-
192
- const fromBlockchainMeta = findBlockchain(
193
- lastSuccessfulStep
194
- ? lastSuccessfulStep.toBlockchain
195
- : firstStep.fromBlockchain,
196
- blockchains
197
- );
198
- const toBlockchainMeta = findBlockchain(lastStep.toBlockchain, blockchains);
199
- const fromTokenMeta = findToken(
200
- lastSuccessfulStep
201
- ? {
202
- blockchain: fromBlockchainMeta?.name ?? '',
203
- symbol: lastSuccessfulStep.toSymbol,
204
- address: lastSuccessfulStep.toSymbolAddress,
205
- }
206
- : {
207
- blockchain: fromBlockchainMeta?.name ?? '',
208
- symbol: firstStep.fromSymbol,
209
- address: firstStep.fromSymbolAddress,
210
- },
211
- tokens
212
- );
213
- const toTokenMeta = findToken(toToken, tokens);
214
- const inputAmount = lastSuccessfulStep
215
- ? lastSuccessfulStep.outputAmount ?? ''
216
- : pendingSwap.inputAmount;
217
-
218
- return {
219
- fromBlockchain: fromBlockchainMeta,
220
- fromToken: fromTokenMeta,
221
- toBlockchain: toBlockchainMeta,
222
- toToken: toTokenMeta,
223
- inputAmount,
224
- };
225
- }
226
-
227
- export function generateQuoteWarnings(
228
- quote: BestRouteResponse,
229
- params: {
230
- fromToken: Token;
231
- toToken: Token;
232
- tokens: Token[];
233
- userSlippage: number;
234
- }
235
- ): QuoteWarning | null {
236
- const { fromToken, toToken, tokens, userSlippage } = params;
237
- const inputUsdValue = getUsdValue(fromToken, quote.requestAmount);
238
- const outputUsdValue = getUsdValue(toToken, quote.result?.outputAmount ?? '');
239
-
240
- if (quote.result && inputUsdValue && outputUsdValue) {
241
- const priceImpact = getPercentageChange(
242
- inputUsdValue.toString(),
243
- outputUsdValue.toString()
244
- );
245
- const highValueLoss = hasHighValueLoss(inputUsdValue, priceImpact);
246
-
247
- if (highValueLoss) {
248
- const totalFee = getTotalFeeInUsd(quote.result.swaps, tokens);
249
- const warningLevel = getPriceImpactLevel(priceImpact);
250
- return {
251
- type: QuoteWarningType.HIGH_VALUE_LOSS,
252
- inputUsdValue,
253
- outputUsdValue,
254
- priceImpact,
255
- totalFee,
256
- warningLevel,
257
- };
258
- }
259
- } else if (quote.result && (!inputUsdValue || !outputUsdValue)) {
260
- return { type: QuoteWarningType.UNKNOWN_PRICE };
261
- }
262
-
263
- const minRequiredSlippage = getMinRequiredSlippage(quote);
264
- const highSlippage = userSlippage > HIGH_SLIPPAGE;
265
-
266
- if (!hasProperSlippage(params.userSlippage.toString(), minRequiredSlippage)) {
267
- return {
268
- type: QuoteWarningType.INSUFFICIENT_SLIPPAGE,
269
- recommendedSlippages: checkSlippageWarnings(quote, userSlippage),
270
- minRequiredSlippage: minRequiredSlippage,
271
- };
272
- } else if (
273
- highSlippage &&
274
- parseFloat(minRequiredSlippage ?? '0') < userSlippage
275
- ) {
276
- return {
277
- type: QuoteWarningType.HIGH_SLIPPAGE,
278
- slippage: userSlippage.toString(),
279
- };
280
- }
281
-
282
- return null;
283
- }
284
-
285
- export function generateQuoteErrors(
286
- quote: BestRouteResponse
287
- ): QuoteError | null {
288
- if (!quote.result) {
289
- return {
290
- type: QuoteErrorType.NO_RESULT,
291
- diagnosisMessage: quote.diagnosisMessages?.[0],
292
- };
293
- }
294
- const limitError = hasLimitError(quote);
295
- if (limitError) {
296
- const { swap, recommendation, fromAmountRangeError } =
297
- getLimitErrorMessage(quote);
298
- return {
299
- type: QuoteErrorType.BRIDGE_LIMIT,
300
- swap: swap,
301
- recommendation,
302
- fromAmountRangeError,
303
- };
304
- }
305
-
306
- const recommendedSlippages = checkSlippageErrors(quote);
307
-
308
- if (recommendedSlippages) {
309
- const minRequiredSlippage = getMinRequiredSlippage(quote);
310
- return {
311
- type: QuoteErrorType.INSUFFICIENT_SLIPPAGE,
312
- recommendedSlippages,
313
- minRequiredSlippage,
314
- };
315
- }
316
-
317
- return null;
318
- }
319
-
320
- export function getPriceImpact(
321
- inputUsdValue: BigNumber | string | null,
322
- outputUsdValue: BigNumber | string | null
323
- ) {
324
- const outputUsdValueIsInvalid =
325
- typeof outputUsdValue === 'string'
326
- ? parseFloat(outputUsdValue) <= 0
327
- : !outputUsdValue?.gt(0);
328
-
329
- const priceImpact =
330
- !inputUsdValue || !outputUsdValue || outputUsdValueIsInvalid
331
- ? null
332
- : getPercentageChange(
333
- inputUsdValue.toString(),
334
- outputUsdValue.toString()
335
- );
336
-
337
- return priceImpact;
338
- }