@rango-dev/widget-embedded 0.17.1-next.1 → 0.17.1-next.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/QueueManager.d.ts +5 -2
- package/dist/QueueManager.d.ts.map +1 -1
- package/dist/components/AppRouter.d.ts +0 -2
- package/dist/components/AppRouter.d.ts.map +1 -1
- package/dist/components/AppRoutes.d.ts +1 -6
- package/dist/components/AppRoutes.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.helpers.d.ts +1 -3
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.helpers.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts +1 -3
- package/dist/components/ConfirmWalletsModal/ConfirmWalletsModal.types.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts +1 -4
- package/dist/components/ConfirmWalletsModal/WalletList.type.d.ts.map +1 -1
- package/dist/components/NoResult/NoResult.d.ts +4 -0
- package/dist/components/NoResult/NoResult.d.ts.map +1 -0
- package/dist/components/NoResult/NoResult.helpers.d.ts +4 -0
- package/dist/components/NoResult/NoResult.helpers.d.ts.map +1 -0
- package/dist/components/{NoRoutes/NoRoutes.styles.d.ts → NoResult/NoResult.styles.d.ts} +1 -1
- package/dist/components/{NoRoutes/NoRoutes.styles.d.ts.map → NoResult/NoResult.styles.d.ts.map} +1 -1
- package/dist/components/{NoRoutes/NoRoutes.types.d.ts → NoResult/NoResult.types.d.ts} +3 -3
- package/dist/components/NoResult/NoResult.types.d.ts.map +1 -0
- package/dist/components/NoResult/index.d.ts +2 -0
- package/dist/components/NoResult/index.d.ts.map +1 -0
- package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
- package/dist/components/Quote/Quote.d.ts +4 -0
- package/dist/components/Quote/Quote.d.ts.map +1 -0
- package/dist/components/Quote/Quote.styles.d.ts +1429 -0
- package/dist/components/Quote/Quote.styles.d.ts.map +1 -0
- package/dist/components/Quote/Quote.types.d.ts +22 -0
- package/dist/components/Quote/Quote.types.d.ts.map +1 -0
- package/dist/components/Quote/QuoteSkeleton.d.ts +4 -0
- package/dist/components/Quote/QuoteSkeleton.d.ts.map +1 -0
- package/dist/components/Quote/QuoteSkeleton.styles.d.ts +319 -0
- package/dist/components/Quote/QuoteSkeleton.styles.d.ts.map +1 -0
- package/dist/components/Quote/QuoteSkeleton.types.d.ts +6 -0
- package/dist/components/Quote/QuoteSkeleton.types.d.ts.map +1 -0
- package/dist/components/Quote/QuoteSummary.d.ts +11 -0
- package/dist/components/Quote/QuoteSummary.d.ts.map +1 -0
- package/dist/components/Quote/QuoteSummary.styles.d.ts +158 -0
- package/dist/components/Quote/QuoteSummary.styles.d.ts.map +1 -0
- package/dist/components/Quote/index.d.ts +4 -0
- package/dist/components/Quote/index.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts +11 -0
- package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts +4 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteErrorsModalItem.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts +4 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts +9 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.d.ts.map +1 -0
- package/dist/components/{RouteErrors/RouteErrors.styles.d.ts → QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts} +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +22 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts +11 -0
- package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts +11 -0
- package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts.map +1 -0
- package/dist/components/QuoteWarningsAndErrors/index.d.ts +2 -0
- package/dist/components/QuoteWarningsAndErrors/index.d.ts.map +1 -0
- package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
- package/dist/components/SwapsGroup/SwapsGroup.d.ts.map +1 -1
- package/dist/components/SwapsGroup/SwapsGroup.styles.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.d.ts.map +1 -1
- package/dist/components/TokenList/TokenList.styles.d.ts.map +1 -1
- package/dist/components/UpdateUrl.d.ts +1 -6
- package/dist/components/UpdateUrl.d.ts.map +1 -1
- package/dist/components/WidgetEvents.d.ts.map +1 -1
- package/dist/constants/errors.d.ts +4 -4
- package/dist/constants/errors.d.ts.map +1 -1
- package/dist/constants/messages.d.ts +1 -1
- package/dist/constants/searchParams.d.ts +2 -1
- package/dist/constants/searchParams.d.ts.map +1 -1
- package/dist/constants/warnings.d.ts +2 -2
- package/dist/constants/warnings.d.ts.map +1 -1
- package/dist/containers/App/App.d.ts +3 -0
- package/dist/containers/App/App.d.ts.map +1 -0
- package/dist/containers/App/App.styles.d.ts +158 -0
- package/dist/containers/App/App.styles.d.ts.map +1 -0
- package/dist/containers/App/index.d.ts +2 -0
- package/dist/containers/App/index.d.ts.map +1 -0
- package/dist/containers/QuoteInfo/QuoteInfo.d.ts +4 -0
- package/dist/containers/QuoteInfo/QuoteInfo.d.ts.map +1 -0
- package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts +472 -0
- package/dist/containers/QuoteInfo/QuoteInfo.styles.d.ts.map +1 -0
- package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts +17 -0
- package/dist/containers/QuoteInfo/QuoteInfo.types.d.ts.map +1 -0
- package/dist/containers/QuoteInfo/index.d.ts +2 -0
- package/dist/containers/QuoteInfo/index.d.ts.map +1 -0
- package/dist/containers/Wallets/Wallets.d.ts +6 -0
- package/dist/containers/Wallets/Wallets.d.ts.map +1 -0
- package/dist/containers/Wallets/Wallets.types.d.ts +11 -0
- package/dist/containers/Wallets/Wallets.types.d.ts.map +1 -0
- package/dist/containers/Wallets/index.d.ts +2 -0
- package/dist/containers/Wallets/index.d.ts.map +1 -0
- package/dist/containers/Widget/Widget.d.ts +5 -0
- package/dist/containers/Widget/Widget.d.ts.map +1 -0
- package/dist/containers/Widget/Widget.types.d.ts +5 -0
- package/dist/containers/Widget/Widget.types.d.ts.map +1 -0
- package/dist/containers/Widget/index.d.ts +3 -0
- package/dist/containers/Widget/index.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/WidgetInfo.d.ts +6 -0
- package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +5 -0
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -0
- package/dist/containers/WidgetInfo/index.d.ts +2 -0
- package/dist/containers/WidgetInfo/index.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/WidgetProvider.d.ts +5 -0
- package/dist/containers/WidgetProvider/WidgetProvider.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts +7 -0
- package/dist/containers/WidgetProvider/WidgetProvider.types.d.ts.map +1 -0
- package/dist/containers/WidgetProvider/index.d.ts +2 -0
- package/dist/containers/WidgetProvider/index.d.ts.map +1 -0
- package/dist/hooks/useConfirmSwap/index.d.ts +2 -0
- package/dist/hooks/useConfirmSwap/index.d.ts.map +1 -0
- package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts +3 -0
- package/dist/hooks/useConfirmSwap/useConfirmSwap.d.ts.map +1 -0
- package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts +16 -0
- package/dist/hooks/useConfirmSwap/useConfirmSwap.helpers.d.ts.map +1 -0
- package/dist/hooks/{useConfirmSwap.d.ts → useConfirmSwap/useConfirmSwap.types.d.ts} +5 -7
- package/dist/hooks/useConfirmSwap/useConfirmSwap.types.d.ts.map +1 -0
- package/dist/hooks/{useFetchBestRoute.d.ts → useFetchQuote.d.ts} +3 -3
- package/dist/hooks/useFetchQuote.d.ts.map +1 -0
- package/dist/hooks/useForceAutoConnect.d.ts +2 -0
- package/dist/hooks/useForceAutoConnect.d.ts.map +1 -0
- package/dist/hooks/usePrepareBlockchainList/usePrepareBlockchainList.helpers.d.ts +2 -2
- package/dist/hooks/useSwapInput.d.ts +4 -2
- package/dist/hooks/useSwapInput.d.ts.map +1 -1
- package/dist/hooks/useSyncStoresWithConfig.d.ts +1 -2
- package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
- package/dist/hooks/useWalletList.d.ts.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/pages/ConfirmSwapPage.d.ts +1 -6
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/pages/LiquiditySourcePage.d.ts +1 -2
- package/dist/pages/LiquiditySourcePage.d.ts.map +1 -1
- package/dist/pages/SelectBlockchainPage.d.ts.map +1 -1
- package/dist/pages/SettingsPage.d.ts +1 -6
- package/dist/pages/SettingsPage.d.ts.map +1 -1
- package/dist/pages/WalletsPage.d.ts +1 -8
- package/dist/pages/WalletsPage.d.ts.map +1 -1
- package/dist/store/AppStore.d.ts +11 -0
- package/dist/store/AppStore.d.ts.map +1 -0
- package/dist/store/app.d.ts +5 -23
- package/dist/store/app.d.ts.map +1 -1
- package/dist/store/{bestRoute.d.ts → quote.d.ts} +39 -27
- package/dist/store/quote.d.ts.map +1 -0
- package/dist/store/settings.d.ts +3 -2
- package/dist/store/settings.d.ts.map +1 -1
- package/dist/store/slices/config.d.ts +3 -2
- package/dist/store/slices/config.d.ts.map +1 -1
- package/dist/store/slices/data.d.ts +3 -0
- package/dist/store/slices/data.d.ts.map +1 -1
- package/dist/store/wallets.d.ts +5 -4
- package/dist/store/wallets.d.ts.map +1 -1
- package/dist/types/config.d.ts +5 -5
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/quote.d.ts +82 -0
- package/dist/types/quote.d.ts.map +1 -0
- package/dist/utils/colors.d.ts.map +1 -1
- package/dist/utils/numbers.d.ts +1 -1
- package/dist/utils/numbers.d.ts.map +1 -1
- package/dist/utils/{routing.d.ts → quote.d.ts} +16 -12
- package/dist/utils/quote.d.ts.map +1 -0
- package/dist/utils/settings.d.ts +3 -2
- package/dist/utils/settings.d.ts.map +1 -1
- package/dist/utils/swap.d.ts +25 -22
- package/dist/utils/swap.d.ts.map +1 -1
- package/dist/utils/wallets.d.ts +2 -2
- package/dist/utils/wallets.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/QueueManager.tsx +17 -17
- package/src/components/AppRouter.tsx +6 -5
- package/src/components/AppRoutes.tsx +6 -39
- package/src/components/BlockchainList/BlockchainList.tsx +4 -4
- package/src/components/BlockchainsSection/BlockchainsSection.tsx +7 -7
- package/src/components/ConfirmWalletsModal/ConfirmWallets.helpers.ts +2 -64
- package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.tsx +28 -40
- package/src/components/ConfirmWalletsModal/ConfirmWalletsModal.types.ts +1 -3
- package/src/components/ConfirmWalletsModal/WalletList.tsx +6 -5
- package/src/components/ConfirmWalletsModal/WalletList.type.ts +1 -4
- package/src/components/LoadingSwapDetails/LoadingSwapDetails.styles.ts +3 -3
- package/src/components/LoadingSwapDetails/LoadingSwapDetails.tsx +6 -6
- package/src/components/{NoRoutes/NoRoutes.helper.ts → NoResult/NoResult.helpers.ts} +16 -9
- package/src/components/{NoRoutes/NoRoutes.styles.ts → NoResult/NoResult.styles.ts} +2 -0
- package/src/components/{NoRoutes/NoRoutes.tsx → NoResult/NoResult.tsx} +10 -12
- package/src/components/{NoRoutes/NoRoutes.types.ts → NoResult/NoResult.types.ts} +3 -2
- package/src/components/NoResult/index.ts +1 -0
- package/src/components/NotificationContent/NotificationContent.tsx +3 -2
- package/src/components/Quote/Quote.styles.ts +219 -0
- package/src/components/Quote/Quote.tsx +345 -0
- package/src/components/Quote/Quote.types.ts +16 -0
- package/src/components/Quote/QuoteSkeleton.styles.ts +110 -0
- package/src/components/Quote/QuoteSkeleton.tsx +108 -0
- package/src/components/Quote/QuoteSkeleton.types.ts +5 -0
- package/src/components/Quote/QuoteSummary.styles.ts +15 -0
- package/src/components/Quote/QuoteSummary.tsx +46 -0
- package/src/components/Quote/index.ts +3 -0
- package/src/components/QuoteWarningsAndErrors/HighValueLossWarningModal.tsx +107 -0
- package/src/components/{RouteErrors/RouteErrorsModalItem.tsx → QuoteWarningsAndErrors/QuoteErrorsModalItem.tsx} +4 -4
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.helpers.ts +67 -0
- package/src/components/{RouteErrors/RouteErrors.styles.ts → QuoteWarningsAndErrors/QuoteWarningsAndErrors.styles.ts} +8 -1
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +103 -0
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +24 -0
- package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +77 -0
- package/src/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.tsx +38 -0
- package/src/components/QuoteWarningsAndErrors/index.ts +1 -0
- package/src/components/SwapDetails/SwapDetails.Placeholder.tsx +1 -1
- package/src/components/SwapDetails/SwapDetails.tsx +18 -22
- package/src/components/SwapsGroup/SwapsGroup.styles.ts +8 -1
- package/src/components/SwapsGroup/SwapsGroup.tsx +0 -2
- package/src/components/SwitchFromAndTo.tsx +2 -2
- package/src/components/TokenList/TokenList.styles.ts +14 -2
- package/src/components/TokenList/TokenList.tsx +6 -7
- package/src/components/UpdateUrl.tsx +36 -26
- package/src/components/WidgetEvents.tsx +4 -2
- package/src/constants/errors.ts +8 -10
- package/src/constants/messages.ts +1 -1
- package/src/constants/searchParams.ts +1 -0
- package/src/constants/warnings.ts +7 -7
- package/src/containers/App/App.styles.ts +18 -0
- package/src/containers/App/App.tsx +65 -0
- package/src/containers/App/index.ts +1 -0
- package/src/containers/QuoteInfo/QuoteInfo.styles.ts +15 -0
- package/src/containers/QuoteInfo/QuoteInfo.tsx +97 -0
- package/src/containers/QuoteInfo/QuoteInfo.types.ts +17 -0
- package/src/containers/QuoteInfo/index.ts +1 -0
- package/src/{Wallets.tsx → containers/Wallets/Wallets.tsx} +40 -32
- package/src/containers/Wallets/Wallets.types.ts +12 -0
- package/src/containers/Wallets/index.ts +1 -0
- package/src/containers/Widget/Widget.tsx +19 -0
- package/src/containers/Widget/Widget.types.ts +5 -0
- package/src/containers/Widget/index.ts +2 -0
- package/src/containers/WidgetInfo/WidgetInfo.tsx +36 -0
- package/src/containers/WidgetInfo/WidgetInfo.types.ts +5 -0
- package/src/containers/WidgetInfo/index.ts +1 -0
- package/src/containers/WidgetProvider/WidgetProvider.tsx +19 -0
- package/src/containers/WidgetProvider/WidgetProvider.types.ts +7 -0
- package/src/containers/WidgetProvider/index.ts +1 -0
- package/src/hooks/useConfirmSwap/index.ts +1 -0
- package/src/hooks/useConfirmSwap/useConfirmSwap.helpers.ts +168 -0
- package/src/hooks/useConfirmSwap/useConfirmSwap.ts +136 -0
- package/src/hooks/useConfirmSwap/useConfirmSwap.types.ts +19 -0
- package/src/hooks/{useFetchBestRoute.ts → useFetchQuote.ts} +3 -3
- package/src/hooks/useForceAutoConnect.ts +27 -0
- package/src/hooks/useNavigateBack.ts +3 -3
- package/src/hooks/useSwapInput.ts +58 -23
- package/src/hooks/useSyncStoresWithConfig.ts +22 -19
- package/src/hooks/useWalletList.ts +3 -5
- package/src/index.ts +12 -3
- package/src/pages/ConfirmSwapPage.tsx +58 -235
- package/src/pages/HistoryPage.tsx +1 -1
- package/src/pages/Home.tsx +58 -247
- package/src/pages/LanguagePage.tsx +1 -1
- package/src/pages/LiquiditySourcePage.tsx +23 -32
- package/src/pages/SelectBlockchainPage.tsx +6 -7
- package/src/pages/SelectSwapItemsPage.tsx +5 -5
- package/src/pages/SettingsPage.tsx +9 -13
- package/src/pages/SwapDetailsPage.tsx +3 -3
- package/src/pages/ThemePage.tsx +1 -1
- package/src/pages/WalletsPage.tsx +5 -12
- package/src/store/AppStore.tsx +35 -0
- package/src/store/app.ts +18 -6
- package/src/store/{bestRoute.ts → quote.ts} +68 -60
- package/src/store/settings.ts +7 -4
- package/src/store/slices/config.ts +25 -15
- package/src/store/slices/data.ts +64 -29
- package/src/store/wallets.ts +11 -8
- package/src/types/config.ts +5 -5
- package/src/types/index.ts +1 -1
- package/src/types/quote.ts +107 -0
- package/src/utils/colors.ts +2 -1
- package/src/utils/numbers.ts +1 -1
- package/src/utils/quote.ts +338 -0
- package/src/utils/settings.ts +8 -7
- package/src/utils/swap.ts +113 -85
- package/src/utils/wallets.ts +29 -17
- package/dist/Wallets.d.ts +0 -17
- package/dist/Wallets.d.ts.map +0 -1
- package/dist/Widget.d.ts +0 -9
- package/dist/Widget.d.ts.map +0 -1
- package/dist/components/NoRoutes/NoRoutes.d.ts +0 -4
- package/dist/components/NoRoutes/NoRoutes.d.ts.map +0 -1
- package/dist/components/NoRoutes/NoRoutes.helper.d.ts +0 -3
- package/dist/components/NoRoutes/NoRoutes.helper.d.ts.map +0 -1
- package/dist/components/NoRoutes/NoRoutes.types.d.ts.map +0 -1
- package/dist/components/NoRoutes/index.d.ts +0 -2
- package/dist/components/NoRoutes/index.d.ts.map +0 -1
- package/dist/components/RouteErrors/RouteErrors.d.ts +0 -4
- package/dist/components/RouteErrors/RouteErrors.d.ts.map +0 -1
- package/dist/components/RouteErrors/RouteErrors.styles.d.ts.map +0 -1
- package/dist/components/RouteErrors/RouteErrors.types.d.ts +0 -24
- package/dist/components/RouteErrors/RouteErrors.types.d.ts.map +0 -1
- package/dist/components/RouteErrors/RouteErrorsModal.d.ts +0 -4
- package/dist/components/RouteErrors/RouteErrorsModal.d.ts.map +0 -1
- package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts +0 -4
- package/dist/components/RouteErrors/RouteErrorsModalItem.d.ts.map +0 -1
- package/dist/components/RouteErrors/index.d.ts +0 -2
- package/dist/components/RouteErrors/index.d.ts.map +0 -1
- package/dist/hooks/useConfirmSwap.d.ts.map +0 -1
- package/dist/hooks/useFetchBestRoute.d.ts.map +0 -1
- package/dist/store/bestRoute.d.ts.map +0 -1
- package/dist/store/meta.d.ts +0 -23
- package/dist/store/meta.d.ts.map +0 -1
- package/dist/types/routing.d.ts +0 -65
- package/dist/types/routing.d.ts.map +0 -1
- package/dist/utils/routing.d.ts.map +0 -1
- package/src/Widget.tsx +0 -119
- package/src/components/NoRoutes/index.ts +0 -1
- package/src/components/RouteErrors/RouteErrors.tsx +0 -79
- package/src/components/RouteErrors/RouteErrors.types.ts +0 -29
- package/src/components/RouteErrors/RouteErrorsModal.tsx +0 -129
- package/src/components/RouteErrors/index.ts +0 -1
- package/src/hooks/useConfirmSwap.ts +0 -303
- package/src/store/meta.ts +0 -39
- package/src/types/routing.ts +0 -77
- package/src/utils/routing.ts +0 -321
package/src/store/wallets.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Wallet } from '../types';
|
|
2
2
|
import type { WalletType } from '@rango-dev/wallets-shared';
|
|
3
|
+
import type { Token } from 'rango-sdk';
|
|
3
4
|
|
|
4
5
|
import { create } from 'zustand';
|
|
5
6
|
import { subscribeWithSelector } from 'zustand/middleware';
|
|
@@ -11,7 +12,6 @@ import {
|
|
|
11
12
|
resetConnectedWalletState,
|
|
12
13
|
} from '../utils/wallets';
|
|
13
14
|
|
|
14
|
-
import { useMetaStore } from './meta';
|
|
15
15
|
import createSelectors from './selectors';
|
|
16
16
|
|
|
17
17
|
export type TokenBalance = {
|
|
@@ -38,11 +38,15 @@ interface WalletsStore {
|
|
|
38
38
|
connectedWallets: ConnectedWallet[];
|
|
39
39
|
customDestination: string;
|
|
40
40
|
loading: boolean;
|
|
41
|
-
connectWallet: (accounts: Wallet[]) => void;
|
|
41
|
+
connectWallet: (accounts: Wallet[], tokens: Token[]) => void;
|
|
42
42
|
disconnectWallet: (walletType: WalletType) => void;
|
|
43
43
|
selectWallets: (wallets: { walletType: string; chain: string }[]) => void;
|
|
44
44
|
clearConnectedWallet: () => void;
|
|
45
|
-
getWalletsDetails: (
|
|
45
|
+
getWalletsDetails: (
|
|
46
|
+
accounts: Wallet[],
|
|
47
|
+
tokens: Token[],
|
|
48
|
+
shouldRetry?: boolean
|
|
49
|
+
) => void;
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
export const useWalletsStore = createSelectors(
|
|
@@ -51,7 +55,7 @@ export const useWalletsStore = createSelectors(
|
|
|
51
55
|
connectedWallets: [],
|
|
52
56
|
customDestination: '',
|
|
53
57
|
loading: false,
|
|
54
|
-
connectWallet: (accounts) => {
|
|
58
|
+
connectWallet: (accounts, tokens) => {
|
|
55
59
|
const getWalletsDetails = get().getWalletsDetails;
|
|
56
60
|
set((state) => ({
|
|
57
61
|
loading: true,
|
|
@@ -77,7 +81,7 @@ export const useWalletsStore = createSelectors(
|
|
|
77
81
|
})
|
|
78
82
|
),
|
|
79
83
|
}));
|
|
80
|
-
getWalletsDetails(accounts);
|
|
84
|
+
getWalletsDetails(accounts, tokens);
|
|
81
85
|
},
|
|
82
86
|
disconnectWallet: (walletType) => {
|
|
83
87
|
set((state) => {
|
|
@@ -135,9 +139,8 @@ export const useWalletsStore = createSelectors(
|
|
|
135
139
|
connectedWallets: [],
|
|
136
140
|
selectedWallets: [],
|
|
137
141
|
})),
|
|
138
|
-
getWalletsDetails: async (accounts, shouldRetry = true) => {
|
|
142
|
+
getWalletsDetails: async (accounts, tokens, shouldRetry = true) => {
|
|
139
143
|
const getWalletsDetails = get().getWalletsDetails;
|
|
140
|
-
const { tokens } = useMetaStore.getState().meta;
|
|
141
144
|
set((state) => ({
|
|
142
145
|
loading: true,
|
|
143
146
|
connectedWallets: state.connectedWallets.map((wallet) => {
|
|
@@ -173,7 +176,7 @@ export const useWalletsStore = createSelectors(
|
|
|
173
176
|
matchedAccount &&
|
|
174
177
|
shouldRetry
|
|
175
178
|
) {
|
|
176
|
-
getWalletsDetails([matchedAccount], false);
|
|
179
|
+
getWalletsDetails([matchedAccount], tokens, false);
|
|
177
180
|
}
|
|
178
181
|
return matchedAccount && retrievedBalanceAccount
|
|
179
182
|
? {
|
package/src/types/config.ts
CHANGED
|
@@ -61,7 +61,7 @@ export type WidgetTheme = {
|
|
|
61
61
|
* @property {{ [key: string]: string }} wallets - If you want to change the default affiliate wallet
|
|
62
62
|
* addresses, you can provide new values here. (Map of route blockchains to affiliate address)
|
|
63
63
|
*/
|
|
64
|
-
export type
|
|
64
|
+
export type WidgetAffiliate = {
|
|
65
65
|
ref?: string;
|
|
66
66
|
percent?: number;
|
|
67
67
|
wallets?: { [key: string]: string };
|
|
@@ -91,7 +91,7 @@ export type BlockchainAndTokenConfig = {
|
|
|
91
91
|
* and theme.
|
|
92
92
|
*
|
|
93
93
|
* @property {string} apiKey - The API key used to communicate with Rango API
|
|
94
|
-
* @property {
|
|
94
|
+
* @property {WidgetAffiliate} affiliate - If you want to charge users fee per transaction, you should
|
|
95
95
|
* pass `WidgetAffiliate` including affiliateRef, affiliatePercent, and affiliateWallets.
|
|
96
96
|
* @property {number} amount - The default input amount.
|
|
97
97
|
* @property {BlockchainAndTokenConfig} from - The `from` property is an optional property of type
|
|
@@ -121,13 +121,13 @@ export type BlockchainAndTokenConfig = {
|
|
|
121
121
|
* If `externalWallets` is `true`, you should add `WidgetWallets` to your app.
|
|
122
122
|
* @property {Asset} pinnedTokens - The `pinnedTokens` property is an optional array of `Asset` objects that
|
|
123
123
|
* you could use to pin tokens of your choice to the top of the token list.
|
|
124
|
-
* @property {boolean}
|
|
124
|
+
* @property {boolean} enableNewLiquiditySources - The `enableNewLiquiditySources` property is a boolean value that when you
|
|
125
125
|
* set it to true, whenever a new liquidity source is added, it will be added to your list as well.
|
|
126
126
|
*/
|
|
127
127
|
export type WidgetConfig = {
|
|
128
128
|
apiKey: string;
|
|
129
129
|
walletConnectProjectId?: string;
|
|
130
|
-
affiliate?:
|
|
130
|
+
affiliate?: WidgetAffiliate;
|
|
131
131
|
amount?: number;
|
|
132
132
|
from?: BlockchainAndTokenConfig;
|
|
133
133
|
to?: BlockchainAndTokenConfig;
|
|
@@ -139,5 +139,5 @@ export type WidgetConfig = {
|
|
|
139
139
|
theme?: WidgetTheme;
|
|
140
140
|
externalWallets?: boolean;
|
|
141
141
|
pinnedTokens?: Asset[];
|
|
142
|
-
|
|
142
|
+
enableNewLiquiditySources?: boolean;
|
|
143
143
|
};
|
package/src/types/index.ts
CHANGED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/prefer-enum-initializers */
|
|
2
|
+
|
|
3
|
+
import type { PriceImpactWarningLevel } from '@rango-dev/ui';
|
|
4
|
+
import type BigNumber from 'bignumber.js';
|
|
5
|
+
import type { SwapResult } from 'rango-sdk';
|
|
6
|
+
|
|
7
|
+
export enum QuoteErrorType {
|
|
8
|
+
NO_RESULT,
|
|
9
|
+
REQUEST_FAILED,
|
|
10
|
+
REQUEST_CANCELED,
|
|
11
|
+
BRIDGE_LIMIT,
|
|
12
|
+
INSUFFICIENT_SLIPPAGE,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type NoResultError = {
|
|
16
|
+
type: QuoteErrorType.NO_RESULT;
|
|
17
|
+
diagnosisMessage?: string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type BridgeLimitError = {
|
|
21
|
+
type: QuoteErrorType.BRIDGE_LIMIT;
|
|
22
|
+
swap: SwapResult;
|
|
23
|
+
recommendation: string;
|
|
24
|
+
fromAmountRangeError: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type InsufficientSlippageError = {
|
|
28
|
+
type: QuoteErrorType.INSUFFICIENT_SLIPPAGE;
|
|
29
|
+
recommendedSlippages: RecommendedSlippages | null;
|
|
30
|
+
minRequiredSlippage: string | null;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type QuoteRequestFailed = { type: QuoteErrorType.REQUEST_FAILED };
|
|
34
|
+
export type QuoteRequestCanceled = { type: QuoteErrorType.REQUEST_CANCELED };
|
|
35
|
+
|
|
36
|
+
export type QuoteError =
|
|
37
|
+
| NoResultError
|
|
38
|
+
| BridgeLimitError
|
|
39
|
+
| InsufficientSlippageError
|
|
40
|
+
| QuoteRequestFailed
|
|
41
|
+
| QuoteRequestCanceled;
|
|
42
|
+
|
|
43
|
+
export enum QuoteWarningType {
|
|
44
|
+
HIGH_VALUE_LOSS,
|
|
45
|
+
UNKNOWN_PRICE,
|
|
46
|
+
INSUFFICIENT_SLIPPAGE,
|
|
47
|
+
HIGH_SLIPPAGE,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export enum QuoteUpdateType {
|
|
51
|
+
QUOTE_UPDATED,
|
|
52
|
+
QUOTE_SWAPPERS_UPDATED,
|
|
53
|
+
QUOTE_COINS_UPDATED,
|
|
54
|
+
QUOTE_AND_OUTPUT_AMOUNT_UPDATED,
|
|
55
|
+
QUOTE_UPDATED_WITH_HIGH_VALUE_LOSS,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type QuoteUpdateWarning =
|
|
59
|
+
| {
|
|
60
|
+
type: QuoteUpdateType.QUOTE_AND_OUTPUT_AMOUNT_UPDATED;
|
|
61
|
+
newOutputAmount: string;
|
|
62
|
+
percentageChange: string;
|
|
63
|
+
}
|
|
64
|
+
| {
|
|
65
|
+
type: Exclude<
|
|
66
|
+
QuoteUpdateType,
|
|
67
|
+
QuoteUpdateType.QUOTE_AND_OUTPUT_AMOUNT_UPDATED
|
|
68
|
+
>;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export type RecommendedSlippages = Map<number, string>;
|
|
72
|
+
|
|
73
|
+
export type InsufficientSlippageWarning = {
|
|
74
|
+
type: QuoteWarningType.INSUFFICIENT_SLIPPAGE;
|
|
75
|
+
recommendedSlippages: RecommendedSlippages | null;
|
|
76
|
+
minRequiredSlippage: string | null;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export type HighSlippageWarning = {
|
|
80
|
+
type: QuoteWarningType.HIGH_SLIPPAGE;
|
|
81
|
+
slippage: string | null;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type HighValueLossWarning = {
|
|
85
|
+
type: QuoteWarningType.HIGH_VALUE_LOSS;
|
|
86
|
+
warningLevel: PriceImpactWarningLevel;
|
|
87
|
+
inputUsdValue: BigNumber;
|
|
88
|
+
outputUsdValue: BigNumber;
|
|
89
|
+
totalFee: BigNumber;
|
|
90
|
+
priceImpact: number;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export type UnknownPriceWarning = {
|
|
94
|
+
type: QuoteWarningType.UNKNOWN_PRICE;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export type QuoteWarning =
|
|
98
|
+
| HighValueLossWarning
|
|
99
|
+
| InsufficientSlippageWarning
|
|
100
|
+
| HighSlippageWarning
|
|
101
|
+
| UnknownPriceWarning;
|
|
102
|
+
|
|
103
|
+
export type ConfirmSwapWarnings = {
|
|
104
|
+
quote: QuoteWarning | null;
|
|
105
|
+
quoteUpdate: QuoteUpdateWarning | null;
|
|
106
|
+
balance: { messages: string[] } | null;
|
|
107
|
+
};
|
package/src/utils/colors.ts
CHANGED
|
@@ -31,7 +31,7 @@ export const generateRangeColors = (name: string, color: string) => {
|
|
|
31
31
|
const NUMBER_OF_COLORS = 10;
|
|
32
32
|
const HALF_NUMBER_OF_COLORS = 5;
|
|
33
33
|
const COLOR_SUFFIX = 100;
|
|
34
|
-
const AMT =
|
|
34
|
+
const AMT = 25;
|
|
35
35
|
|
|
36
36
|
let colors = { [name]: color };
|
|
37
37
|
for (let i = 1; i < NUMBER_OF_COLORS; i++) {
|
|
@@ -60,6 +60,7 @@ export const generateRangeColors = (name: string, color: string) => {
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
+
|
|
63
64
|
return colors;
|
|
64
65
|
};
|
|
65
66
|
export const generateColors = (
|
package/src/utils/numbers.ts
CHANGED
|
@@ -16,7 +16,7 @@ export const secondsToString = (s: number): string => {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
export const numberToString = (
|
|
19
|
-
number: BigNumber | string | null | undefined,
|
|
19
|
+
number: BigNumber | string | number | null | undefined,
|
|
20
20
|
minDecimals: number | null = null,
|
|
21
21
|
maxDecimals: number | null = null
|
|
22
22
|
): string => {
|
|
@@ -0,0 +1,338 @@
|
|
|
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
|
+
}
|
package/src/utils/settings.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SwapperMeta } from 'rango-sdk';
|
|
2
|
+
|
|
2
3
|
import { useSettingsStore } from '../store/settings';
|
|
3
4
|
|
|
4
5
|
import { removeDuplicateFrom } from './common';
|
|
@@ -14,11 +15,11 @@ export type UniqueSwappersGroupType = {
|
|
|
14
15
|
};
|
|
15
16
|
|
|
16
17
|
export function getUniqueSwappersGroups(
|
|
17
|
-
|
|
18
|
+
swappers: SwapperMeta[]
|
|
18
19
|
): UniqueSwappersGroupType[] {
|
|
19
|
-
const swappers = useMetaStore.use.meta().swappers;
|
|
20
20
|
const disabledLiquiditySources =
|
|
21
21
|
useSettingsStore.use.disabledLiquiditySources();
|
|
22
|
+
const supportedSwappers = swappers.map((swapper) => swapper.swapperGroup);
|
|
22
23
|
|
|
23
24
|
const uniqueSupportedSwappersGroups: Array<UniqueSwappersGroupType> = [];
|
|
24
25
|
|
|
@@ -57,14 +58,14 @@ export function getUniqueSwappersGroups(
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
export function sortLiquiditySourcesByGroupTitle(
|
|
60
|
-
a:
|
|
61
|
-
b:
|
|
61
|
+
a: SwapperMeta,
|
|
62
|
+
b: SwapperMeta
|
|
62
63
|
) {
|
|
63
|
-
if (a.
|
|
64
|
+
if (a.swapperGroup < b.swapperGroup) {
|
|
64
65
|
return -1;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
if (a.
|
|
68
|
+
if (a.swapperGroup > b.swapperGroup) {
|
|
68
69
|
return 1;
|
|
69
70
|
}
|
|
70
71
|
|