@rango-dev/widget-embedded 0.1.10-next.80 → 0.1.10-next.82

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