@rango-dev/widget-embedded 0.1.10-next.77 → 0.1.10-next.81

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 (105) hide show
  1. package/dist/components/AppRouter.d.ts.map +1 -1
  2. package/dist/components/AppRoutes.d.ts.map +1 -1
  3. package/dist/components/ChangeSlippageButton.d.ts +2 -0
  4. package/dist/components/ChangeSlippageButton.d.ts.map +1 -0
  5. package/dist/components/ConfirmSwapErrors.d.ts +3 -0
  6. package/dist/components/ConfirmSwapErrors.d.ts.map +1 -0
  7. package/dist/components/ConfirmSwapWarnings.d.ts +3 -0
  8. package/dist/components/ConfirmSwapWarnings.d.ts.map +1 -0
  9. package/dist/components/Layout.d.ts.map +1 -1
  10. package/dist/components/UpdateUrl.d.ts.map +1 -1
  11. package/dist/components/warnings/BalanceWarnings.d.ts +6 -0
  12. package/dist/components/warnings/BalanceWarnings.d.ts.map +1 -0
  13. package/dist/components/warnings/ConfirmSwapExtraMessages.d.ts +6 -0
  14. package/dist/components/warnings/ConfirmSwapExtraMessages.d.ts.map +1 -0
  15. package/dist/components/warnings/HighSlippageWarning.d.ts +6 -0
  16. package/dist/components/warnings/HighSlippageWarning.d.ts.map +1 -0
  17. package/dist/components/warnings/MinRequiredSlippage.d.ts +6 -0
  18. package/dist/components/warnings/MinRequiredSlippage.d.ts.map +1 -0
  19. package/dist/constants/swapSettings.d.ts +6 -0
  20. package/dist/constants/swapSettings.d.ts.map +1 -0
  21. package/dist/hooks/useNavigateBack.d.ts +4 -0
  22. package/dist/hooks/useNavigateBack.d.ts.map +1 -0
  23. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  24. package/dist/pages/ConfirmWalletsPage.d.ts +0 -5
  25. package/dist/pages/ConfirmWalletsPage.d.ts.map +1 -1
  26. package/dist/pages/HistoryPage.d.ts.map +1 -1
  27. package/dist/pages/Home.d.ts.map +1 -1
  28. package/dist/pages/LiquiditySourcesPage.d.ts.map +1 -1
  29. package/dist/pages/SelectChainPage.d.ts.map +1 -1
  30. package/dist/pages/SelectTokenPage.d.ts.map +1 -1
  31. package/dist/pages/SettingsPage.d.ts.map +1 -1
  32. package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
  33. package/dist/pages/WalletsPage.d.ts.map +1 -1
  34. package/dist/store/bestRoute.d.ts +1 -0
  35. package/dist/store/bestRoute.d.ts.map +1 -1
  36. package/dist/store/confirmSwap.d.ts +35 -0
  37. package/dist/store/confirmSwap.d.ts.map +1 -0
  38. package/dist/store/settings.d.ts.map +1 -1
  39. package/dist/store/ui.d.ts +2 -0
  40. package/dist/store/ui.d.ts.map +1 -0
  41. package/dist/store/wallets.d.ts.map +1 -1
  42. package/dist/types/index.d.ts +2 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/swap.d.ts +11 -0
  45. package/dist/types/swap.d.ts.map +1 -0
  46. package/dist/utils/common.d.ts +1 -0
  47. package/dist/utils/common.d.ts.map +1 -1
  48. package/dist/utils/numbers.d.ts +5 -0
  49. package/dist/utils/numbers.d.ts.map +1 -1
  50. package/dist/utils/routing.d.ts +5 -7
  51. package/dist/utils/routing.d.ts.map +1 -1
  52. package/dist/utils/swap.d.ts +31 -3
  53. package/dist/utils/swap.d.ts.map +1 -1
  54. package/dist/utils/wallets.d.ts +2 -3
  55. package/dist/utils/wallets.d.ts.map +1 -1
  56. package/dist/widget-embedded.cjs.development.js +1790 -1357
  57. package/dist/widget-embedded.cjs.development.js.map +1 -1
  58. package/dist/widget-embedded.cjs.production.min.js +1790 -1357
  59. package/dist/widget-embedded.cjs.production.min.js.map +1 -1
  60. package/dist/widget-embedded.esm.js +1794 -1361
  61. package/dist/widget-embedded.esm.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/components/AppRouter.tsx +38 -3
  64. package/src/components/AppRoutes.tsx +8 -2
  65. package/src/components/ChangeSlippageButton.tsx +23 -0
  66. package/src/components/ConfirmSwapErrors.tsx +38 -0
  67. package/src/components/ConfirmSwapWarnings.tsx +38 -0
  68. package/src/components/Layout.tsx +22 -6
  69. package/src/components/UpdateUrl.tsx +100 -18
  70. package/src/components/warnings/BalanceWarnings.tsx +16 -0
  71. package/src/components/warnings/ConfirmSwapExtraMessages.tsx +14 -0
  72. package/src/components/warnings/HighSlippageWarning.tsx +21 -0
  73. package/src/components/warnings/MinRequiredSlippage.tsx +18 -0
  74. package/src/constants/navigationRoutes.ts +2 -2
  75. package/src/constants/swapSettings.ts +9 -0
  76. package/src/hooks/useNavigateBack.ts +37 -0
  77. package/src/pages/ConfirmSwapPage.tsx +30 -8
  78. package/src/pages/ConfirmWalletsPage.tsx +30 -17
  79. package/src/pages/HistoryPage.tsx +4 -4
  80. package/src/pages/Home.tsx +79 -36
  81. package/src/pages/LiquiditySourcesPage.tsx +11 -8
  82. package/src/pages/SelectChainPage.tsx +9 -28
  83. package/src/pages/SelectTokenPage.tsx +38 -27
  84. package/src/pages/SettingsPage.tsx +17 -6
  85. package/src/pages/SwapDetailsPage.tsx +9 -3
  86. package/src/pages/WalletsPage.tsx +43 -23
  87. package/src/store/bestRoute.ts +147 -28
  88. package/src/store/confirmSwap.ts +327 -0
  89. package/src/store/settings.ts +40 -28
  90. package/src/store/ui.ts +15 -0
  91. package/src/store/wallets.ts +93 -80
  92. package/src/swapBox.tsx +5 -5
  93. package/src/types/index.ts +1 -0
  94. package/src/types/swap.ts +13 -0
  95. package/src/utils/common.ts +4 -0
  96. package/src/utils/numbers.ts +17 -0
  97. package/src/utils/routing.ts +28 -77
  98. package/src/utils/swap.ts +445 -67
  99. package/src/utils/wallets.ts +4 -19
  100. package/dist/hooks/useBestRoute.d.ts +0 -8
  101. package/dist/hooks/useBestRoute.d.ts.map +0 -1
  102. package/dist/hooks/useConfirmSwap.d.ts +0 -12
  103. package/dist/hooks/useConfirmSwap.d.ts.map +0 -1
  104. package/src/hooks/useBestRoute.ts +0 -70
  105. package/src/hooks/useConfirmSwap.ts +0 -234
@@ -1,70 +0,0 @@
1
- import { BestRouteRequest, BestRouteResponse } from 'rango-sdk';
2
- import { useEffect, useRef, useState } from 'react';
3
- import { httpService } from '../services/httpService';
4
- import { useBestRouteStore } from '../store/bestRoute';
5
- import { useSettingsStore } from '../store/settings';
6
-
7
- export function useBestRoute() {
8
- const fromToken = useBestRouteStore.use.fromToken();
9
- const toToken = useBestRouteStore.use.toToken();
10
- const inputAmount = useBestRouteStore.use.inputAmount();
11
-
12
- const slippage = useSettingsStore.use.slippage();
13
- const customSlippage = useSettingsStore.use.customSlippage();
14
- const disabledLiquiditySources = useSettingsStore.use.disabledLiquiditySources();
15
- const [count, setCount] = useState(0);
16
- const [loading, setLoading] = useState(false);
17
- const [error, setError] = useState('');
18
- const [data, setData] = useState<BestRouteResponse | null>(null);
19
- const abortControllerRef = useRef<AbortController | null>(null);
20
-
21
- const retry = () => {
22
- setCount((prev) => prev + 1);
23
- };
24
-
25
- useEffect(() => {
26
- if (abortControllerRef.current) abortControllerRef.current.abort();
27
- const abortController = new AbortController();
28
- abortControllerRef.current = abortController;
29
- if (!!fromToken && !!toToken && !!inputAmount) {
30
- if (!!data) setData(null);
31
- const requestBody: BestRouteRequest = {
32
- amount: inputAmount?.toString(),
33
- connectedWallets: [],
34
- selectedWallets: {},
35
- checkPrerequisites: false,
36
- swapperGroups: disabledLiquiditySources,
37
- swappersGroupsExclude: true,
38
- from: {
39
- address: fromToken.address,
40
- blockchain: fromToken.blockchain,
41
- symbol: fromToken.symbol,
42
- },
43
- to: { address: toToken.address, blockchain: toToken.blockchain, symbol: toToken.symbol },
44
- };
45
- setLoading(true);
46
- httpService
47
- .getBestRoute(requestBody, { signal: abortControllerRef.current.signal })
48
- .then((res) => {
49
- setData(res);
50
- setLoading(false);
51
- abortControllerRef.current = null;
52
- })
53
- .catch((error) => {
54
- if (error.code === 'ERR_CANCELED') return;
55
- setError(error.message);
56
- setLoading(false);
57
- });
58
- }
59
- }, [
60
- fromToken,
61
- toToken,
62
- inputAmount,
63
- count,
64
- slippage,
65
- customSlippage,
66
- disabledLiquiditySources.length,
67
- ]);
68
-
69
- return { loading, error, data, retry };
70
- }
@@ -1,234 +0,0 @@
1
- import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';
2
- import {
3
- BestRouteType,
4
- SimulationValidationStatus,
5
- SwapSavedSettings,
6
- } from '@rango-dev/ui/dist/types/swaps';
7
- import { WalletType } from '@rango-dev/wallets-shared';
8
- import BigNumber from 'bignumber.js';
9
- import { BestRouteRequest, BestRouteResponse } from 'rango-sdk';
10
- import { useState } from 'react';
11
- import { httpService } from '../services/httpService';
12
- import { useBestRouteStore } from '../store/bestRoute';
13
- import { useSettingsStore } from '../store/settings';
14
- import { useWalletsStore } from '../store/wallets';
15
- import { compareRoutes, getRequiredBalanceOfWallet } from '../utils/routing';
16
- import { calculatePendingSwap } from '../utils/swap';
17
- import { SelectedWallet } from '../utils/wallets';
18
-
19
- type CheckFeeAndBalanceResult =
20
- | {
21
- hasEnoughBalanceOrSlippage: { balance: boolean; slippage: boolean; routeChanged: boolean };
22
- bestRoute: BestRouteType;
23
- }
24
- | { bestRoute: null }
25
- | null;
26
-
27
- export function useConfirmSwap() {
28
- const fromToken = useBestRouteStore.use.fromToken();
29
- const toToken = useBestRouteStore.use.toToken();
30
- const inputAmount = useBestRouteStore.use.inputAmount();
31
- const bestRoute = useBestRouteStore.use.bestRoute();
32
- const setBestRoute = useBestRouteStore.use.setBestRoute();
33
- const accounts = useWalletsStore.use.accounts();
34
- const selectedWallets = useWalletsStore.use.selectedWallets();
35
-
36
- const slippage = useSettingsStore.use.slippage();
37
- const disabledLiquiditySources = useSettingsStore.use.disabledLiquiditySources();
38
- const [loading, setLoading] = useState(false);
39
- const [error, setError] = useState('');
40
- const [warning, setWarning] = useState('');
41
- const [data, setData] = useState<BestRouteResponse | null>(null);
42
- const [feeStatus, setFeeStatus] = useState<SimulationValidationStatus[] | null>(null);
43
- const [bestRouteChanged, setBestRouteChanged] = useState(false);
44
- const [enoughBalance, setEnoughBalance] = useState<boolean | null>(null);
45
-
46
- const hasEnoughBalanceOrProperSlippage = (
47
- route: BestRouteType,
48
- selectedWallets: SelectedWallet[],
49
- userSlippage: string,
50
- routeChanged: boolean,
51
- ): { balance: boolean; slippage: boolean; routeChanged: boolean } => {
52
- const fee = route.validationStatus;
53
-
54
- if (fee === null || fee.length === 0) return { balance: true, slippage: true, routeChanged };
55
-
56
- for (const wallet of selectedWallets) {
57
- const requiredAssets = getRequiredBalanceOfWallet(wallet, fee);
58
- if (!requiredAssets) continue;
59
-
60
- const hasEnoughBalance = requiredAssets?.map((it) => it.ok).reduce((a, b) => a && b);
61
- if (!hasEnoughBalance) return { balance: false, slippage: true, routeChanged };
62
- }
63
-
64
- const slippages = route.result?.swaps?.map((s) => s.recommendedSlippage);
65
- const slippageError = (slippages?.filter((s) => !!s?.error)?.length || 0) > 0;
66
- const minSlippage =
67
- slippages
68
- ?.map((s) => parseFloat(s?.slippage.toString() || '0') || 0)
69
- .filter((s) => s > 0)
70
- .sort((a, b) => b - a)
71
- .find(() => true) || null;
72
- if (slippageError) {
73
- setError('Server cannot calculated required slippage for your swap');
74
- return { balance: true, slippage: false, routeChanged };
75
- } else if (minSlippage !== null && minSlippage > parseFloat(userSlippage)) {
76
- setError(`Your slippage should be ${minSlippage} at least`);
77
- return { balance: true, slippage: false, routeChanged };
78
- }
79
-
80
- return { balance: true, slippage: true, routeChanged };
81
- };
82
-
83
- const checkFeeAndBalance = async (
84
- selectedWallets: SelectedWallet[],
85
- ): Promise<CheckFeeAndBalanceResult> => {
86
- setLoading(true);
87
- setFeeStatus(null);
88
-
89
- const selectedWalletsMap = selectedWallets.reduce(
90
- (selectedWalletsMap: BestRouteRequest['selectedWallets'], selectedWallet) => (
91
- (selectedWalletsMap[selectedWallet.chain] = selectedWallet.address), selectedWalletsMap
92
- ),
93
- {},
94
- );
95
-
96
- const connectedWallets: BestRouteRequest['connectedWallets'] = [];
97
-
98
- accounts.forEach((account) => {
99
- const chainAndAccounts = connectedWallets.find((wallet) => wallet.blockchain);
100
- if (!!chainAndAccounts) chainAndAccounts.addresses.push(account.address);
101
- else connectedWallets.push({ blockchain: account.chain, addresses: [account.address] });
102
- });
103
-
104
- const r = await httpService
105
- .getBestRoute({
106
- amount: inputAmount!.toString(),
107
- checkPrerequisites: true,
108
- from: {
109
- address: fromToken!.address,
110
- blockchain: fromToken!.blockchain,
111
- symbol: fromToken!.symbol,
112
- },
113
- to: {
114
- address: toToken!.address,
115
- blockchain: toToken!.blockchain,
116
- symbol: toToken!.symbol,
117
- },
118
- connectedWallets,
119
- selectedWallets: selectedWalletsMap,
120
- //@ts-ignore
121
- swapperGroups: disabledLiquiditySources,
122
- swappersGroupsExclude: true,
123
- })
124
- .catch((error) => {
125
- setError(error.message);
126
- setLoading(false);
127
- });
128
- setLoading(false);
129
- if (!r || !r.result || !bestRoute) return { bestRoute: null };
130
- if (!new BigNumber(r.requestAmount).isEqualTo(new BigNumber(inputAmount || '-1'))) return null;
131
- setFeeStatus(r.validationStatus);
132
- const routeChangeStatus = compareRoutes(
133
- bestRoute,
134
- r,
135
- inputAmount!.toString(),
136
- fromToken!.usdPrice,
137
- toToken!.usdPrice,
138
- );
139
- setBestRoute(r);
140
- const isChanged = routeChangeStatus.isChanged;
141
- const changeWarningMessage = routeChangeStatus.warningMessage;
142
- setBestRouteChanged(isChanged);
143
- setWarning('Best route changed');
144
- setData(r);
145
- return {
146
- hasEnoughBalanceOrSlippage: hasEnoughBalanceOrProperSlippage(
147
- r,
148
- selectedWallets,
149
- slippage.toString(),
150
- isChanged,
151
- ),
152
- bestRoute: r,
153
- };
154
- };
155
-
156
- const swap = () => {
157
- if (!bestRoute) return;
158
- if (inputAmount!.toString() === '') return;
159
- const wallets = selectedWallets.reduce(
160
- (
161
- selectedWalletsMap: { [p: string]: { address: string; walletType: WalletType } },
162
- selectedWallet,
163
- ) => (
164
- (selectedWalletsMap[selectedWallet.chain] = {
165
- address: selectedWallet.address,
166
- walletType: selectedWallet.walletType,
167
- }),
168
- selectedWalletsMap
169
- ),
170
- {},
171
- );
172
-
173
- const proceedAnyway = enoughBalance !== null;
174
-
175
- const settings: SwapSavedSettings = {
176
- slippage: slippage.toString(),
177
- disabledSwappersGroups: ['Osmosis'],
178
- disabledSwappersIds: [],
179
- };
180
- if (proceedAnyway) {
181
- const newSwap: PendingSwap = calculatePendingSwap(
182
- inputAmount!.toString(),
183
- bestRoute,
184
- wallets,
185
- settings,
186
- false,
187
- );
188
- }
189
-
190
- !proceedAnyway &&
191
- checkFeeAndBalance(selectedWallets)
192
- .then((data) => {
193
- if (!data) {
194
- setError('confirm swap error');
195
- return;
196
- }
197
-
198
- if (!data.bestRoute) {
199
- setError('confirm swap error');
200
- return;
201
- } else {
202
- const { hasEnoughBalanceOrSlippage, bestRoute: newBestRoute } = data;
203
- if (!hasEnoughBalanceOrSlippage) {
204
- return;
205
- }
206
-
207
- setEnoughBalance(
208
- hasEnoughBalanceOrSlippage.balance && hasEnoughBalanceOrSlippage.slippage,
209
- );
210
-
211
- if (
212
- hasEnoughBalanceOrSlippage.balance &&
213
- hasEnoughBalanceOrSlippage.slippage &&
214
- !hasEnoughBalanceOrSlippage.routeChanged
215
- ) {
216
- const newSwap: PendingSwap = calculatePendingSwap(
217
- inputAmount!.toString(),
218
- newBestRoute,
219
- wallets,
220
- settings,
221
- true,
222
- );
223
- } else if (!hasEnoughBalanceOrSlippage.balance) {
224
- setError('not enough balance');
225
- }
226
- }
227
- })
228
- .catch((error) => {
229
- console.log('unexpected error', error);
230
- });
231
- };
232
-
233
- return { loading, error, data, warning, feeStatus, bestRouteChanged, enoughBalance, swap };
234
- }