@rango-dev/widget-embedded 0.1.10-next.93 → 0.1.10-next.94

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 (80) hide show
  1. package/dist/QueueManager.d.ts.map +1 -1
  2. package/dist/components/AppRoutes.d.ts +5 -1
  3. package/dist/components/AppRoutes.d.ts.map +1 -1
  4. package/dist/components/ConfirmSwapErrors.d.ts +3 -2
  5. package/dist/components/ConfirmSwapErrors.d.ts.map +1 -1
  6. package/dist/components/ConfirmSwapWarnings.d.ts +3 -2
  7. package/dist/components/ConfirmSwapWarnings.d.ts.map +1 -1
  8. package/dist/components/Layout.d.ts +1 -1
  9. package/dist/components/Layout.d.ts.map +1 -1
  10. package/dist/components/SwitchFromAndTo.d.ts +1 -1
  11. package/dist/components/SwitchFromAndTo.d.ts.map +1 -1
  12. package/dist/components/UpdateUrl.d.ts +1 -1
  13. package/dist/components/UpdateUrl.d.ts.map +1 -1
  14. package/dist/components/warnings/BalanceWarnings.d.ts.map +1 -1
  15. package/dist/components/warnings/ConfirmSwapExtraMessages.d.ts.map +1 -1
  16. package/dist/hooks/useConfirmSwap.d.ts +11 -0
  17. package/dist/hooks/useConfirmSwap.d.ts.map +1 -0
  18. package/dist/hooks/usePrevious.d.ts +1 -1
  19. package/dist/hooks/usePrevious.d.ts.map +1 -1
  20. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  21. package/dist/pages/Home.d.ts.map +1 -1
  22. package/dist/pages/SelectChainPage.d.ts.map +1 -1
  23. package/dist/pages/SelectTokenPage.d.ts.map +1 -1
  24. package/dist/pages/SettingsPage.d.ts.map +1 -1
  25. package/dist/pages/WalletsPage.d.ts.map +1 -1
  26. package/dist/store/bestRoute.d.ts +25 -0
  27. package/dist/store/bestRoute.d.ts.map +1 -1
  28. package/dist/store/settings.d.ts +15 -0
  29. package/dist/store/settings.d.ts.map +1 -1
  30. package/dist/store/wallets.d.ts.map +1 -1
  31. package/dist/types/index.d.ts +1 -0
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/dist/{store/confirmSwap.d.ts → types/routing.d.ts} +14 -5
  34. package/dist/types/routing.d.ts.map +1 -0
  35. package/dist/utils/numbers.d.ts +1 -1
  36. package/dist/utils/numbers.d.ts.map +1 -1
  37. package/dist/utils/routing.d.ts +11 -5
  38. package/dist/utils/routing.d.ts.map +1 -1
  39. package/dist/utils/swap.d.ts +4 -3
  40. package/dist/utils/swap.d.ts.map +1 -1
  41. package/dist/utils/wallets.d.ts +7 -2
  42. package/dist/utils/wallets.d.ts.map +1 -1
  43. package/dist/widget-embedded.cjs.development.js +574 -478
  44. package/dist/widget-embedded.cjs.development.js.map +1 -1
  45. package/dist/widget-embedded.cjs.production.min.js +574 -478
  46. package/dist/widget-embedded.cjs.production.min.js.map +1 -1
  47. package/dist/widget-embedded.esm.js +575 -479
  48. package/dist/widget-embedded.esm.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/QueueManager.tsx +1 -0
  51. package/src/components/AppRoutes.tsx +54 -21
  52. package/src/components/ChangeSlippageButton.tsx +1 -1
  53. package/src/components/ConfirmSwapErrors.tsx +1 -1
  54. package/src/components/ConfirmSwapWarnings.tsx +1 -4
  55. package/src/components/Header.tsx +1 -1
  56. package/src/components/Layout.tsx +3 -3
  57. package/src/components/UpdateUrl.tsx +13 -22
  58. package/src/components/warnings/BalanceWarnings.tsx +27 -4
  59. package/src/components/warnings/ConfirmSwapExtraMessages.tsx +7 -1
  60. package/src/components/warnings/HighSlippageWarning.tsx +1 -1
  61. package/src/components/warnings/MinRequiredSlippage.tsx +2 -2
  62. package/src/hooks/useConfirmSwap.ts +260 -0
  63. package/src/pages/ConfirmSwapPage.tsx +17 -8
  64. package/src/pages/ConfirmWalletsPage.tsx +1 -1
  65. package/src/pages/Home.tsx +0 -1
  66. package/src/pages/SelectChainPage.tsx +2 -7
  67. package/src/pages/SelectTokenPage.tsx +22 -57
  68. package/src/pages/SettingsPage.tsx +8 -9
  69. package/src/pages/WalletsPage.tsx +16 -6
  70. package/src/store/bestRoute.ts +82 -37
  71. package/src/store/settings.ts +2 -2
  72. package/src/store/wallets.ts +26 -0
  73. package/src/types/index.ts +1 -0
  74. package/src/types/routing.ts +60 -0
  75. package/src/utils/numbers.ts +38 -17
  76. package/src/utils/routing.ts +115 -24
  77. package/src/utils/swap.ts +19 -11
  78. package/src/utils/wallets.ts +117 -73
  79. package/dist/store/confirmSwap.d.ts.map +0 -1
  80. package/src/store/confirmSwap.ts +0 -342
@@ -1,342 +0,0 @@
1
- import BigNumber from 'bignumber.js';
2
- import { create } from 'zustand';
3
- import { shallow } from 'zustand/shallow';
4
- import { subscribeWithSelector } from 'zustand/middleware';
5
- import { httpService } from '../services/httpService';
6
- import { PendingSwapSettings } from '../types';
7
- import { numberToString } from '../utils/numbers';
8
- import {
9
- isRouteChanged,
10
- isNumberOfSwapsChanged,
11
- isRouteSwappersUpdated,
12
- isRouteInternalCoinsUpdated,
13
- } from '../utils/routing';
14
- import {
15
- createBestRouteRequestBody,
16
- getOutputRatio,
17
- outputRatioHasWarning,
18
- isOutputAmountChangedALot,
19
- getRouteOutputAmount,
20
- getPercentageChange,
21
- getBalanceWarnings,
22
- getMinRequiredSlippage,
23
- hasProperSlippage,
24
- calculatePendingSwap,
25
- getWalletsForNewSwap,
26
- } from '../utils/swap';
27
- import { useBestRouteStore } from './bestRoute';
28
- import { useMetaStore } from './meta';
29
- import createSelectors from './selectors';
30
- import { useSettingsStore } from './settings';
31
- import { useWalletsStore } from './wallets';
32
- import { PendingSwap } from '@rango-dev/ui/dist/containers/History/types';
33
-
34
- interface ConfirmSwapState {
35
- loading: boolean;
36
- errors: ConfirmSwapError[];
37
- warnings: ConfirmSwapWarnings[];
38
- proceedAnyway: boolean;
39
- }
40
-
41
- export const useConfirmSwapStore = createSelectors(
42
- create<ConfirmSwapState>()(
43
- subscribeWithSelector(() => ({
44
- loading: false,
45
- errors: [],
46
- warnings: [],
47
- proceedAnyway: false,
48
- }))
49
- )
50
- );
51
-
52
- export enum ConfirmSwapErrorTypes {
53
- NO_ROUTE,
54
- ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,
55
- REQUEST_FAILED,
56
- INSUFFICIENT_SLIPPAGE,
57
- }
58
-
59
- export type ConfirmSwapError =
60
- | {
61
- type: ConfirmSwapErrorTypes.REQUEST_FAILED;
62
- status?: number;
63
- }
64
- | {
65
- type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE;
66
- minRequiredSlippage: number;
67
- }
68
- | {
69
- type: Exclude<
70
- ConfirmSwapErrorTypes,
71
- | ConfirmSwapErrorTypes.REQUEST_FAILED
72
- | ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE
73
- >;
74
- };
75
-
76
- export type ConfirmSwapWarnings =
77
- | {
78
- type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED;
79
- newOutputAmount: string;
80
- percentageChange: string;
81
- }
82
- | { type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE; messages: string[] }
83
- | {
84
- type: Exclude<
85
- ConfirmSwapWarningTypes,
86
- | ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED
87
- | ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE
88
- >;
89
- };
90
-
91
- export enum ConfirmSwapWarningTypes {
92
- ROUTE_UPDATED,
93
- ROUTE_SWAPPERS_UPDATED,
94
- ROUTE_COINS_UPDATED,
95
- ROUTE_AND_OUTPUT_AMOUNT_UPDATED,
96
- INSUFFICIENT_BALANCE,
97
- }
98
-
99
- export const confirmSwap = async (): Promise<PendingSwap | undefined> => {
100
- const {
101
- fromToken,
102
- toToken,
103
- inputAmount,
104
- bestRoute: initialRoute,
105
- inputUsdValue,
106
- setBestRoute,
107
- } = useBestRouteStore.getState();
108
- const { accounts, selectedWallets } = useWalletsStore.getState();
109
- const { proceedAnyway } = useConfirmSwapStore.getState();
110
- const { disabledLiquiditySources, slippage, customSlippage } =
111
- useSettingsStore.getState();
112
- const { meta } = useMetaStore.getState();
113
-
114
- const userSlippage = customSlippage || slippage;
115
-
116
- if (!fromToken || !toToken || !inputAmount || !initialRoute) return undefined;
117
-
118
- if (proceedAnyway!) {
119
- const swapSettings: PendingSwapSettings = {
120
- slippage: userSlippage.toString(),
121
- disabledSwappersGroups: disabledLiquiditySources,
122
- };
123
-
124
- const newSwap = calculatePendingSwap(
125
- inputAmount.toString(),
126
- initialRoute,
127
- getWalletsForNewSwap(selectedWallets),
128
- swapSettings,
129
- false,
130
- meta
131
- );
132
-
133
- console.log('new swap:', newSwap);
134
-
135
- // queueManager?.create('swap', { swapDetails: newSwap });
136
-
137
- useConfirmSwapStore.setState({
138
- errors: [],
139
- warnings: [],
140
- proceedAnyway: false,
141
- });
142
-
143
- return newSwap;
144
- }
145
-
146
- let abortController: AbortController | null = new AbortController();
147
-
148
- useConfirmSwapStore.setState({ loading: true });
149
-
150
- const requestBody = createBestRouteRequestBody(
151
- fromToken,
152
- toToken,
153
- inputAmount,
154
- accounts,
155
- selectedWallets,
156
- disabledLiquiditySources,
157
- userSlippage,
158
- true
159
- );
160
- const unsubscribeFromBestRouteStore = useBestRouteStore.subscribe(
161
- (state) => state.bestRoute,
162
- () => {
163
- abortController.abort();
164
- },
165
- { equalityFn: shallow }
166
- );
167
- const unsubscribeFromWalletsStore = useWalletsStore.subscribe(
168
- (state) => state.selectedWallets,
169
- () => {
170
- abortController?.abort();
171
- },
172
- {
173
- equalityFn: (prevState, state) => {
174
- const selectedWalletsChanged = !state.every(
175
- (wallet) =>
176
- !!prevState.find(
177
- (prevWallet) =>
178
- wallet.address === prevWallet.address &&
179
- wallet.chain === prevWallet.chain
180
- )
181
- );
182
-
183
- if (selectedWalletsChanged) return false;
184
- else return true;
185
- },
186
- }
187
- );
188
-
189
- const newSwap: PendingSwap | undefined | void = await httpService
190
- .getBestRoute(requestBody, { signal: abortController.signal })
191
- .then((confiremedRoute) => {
192
- useConfirmSwapStore.setState({ loading: false });
193
-
194
- if (
195
- !confiremedRoute.result ||
196
- !new BigNumber(confiremedRoute.requestAmount).isEqualTo(
197
- new BigNumber(inputAmount || '-1')
198
- )
199
- ) {
200
- useConfirmSwapStore.setState((prevState) => ({
201
- errors: prevState.errors.concat({
202
- type: ConfirmSwapErrorTypes.NO_ROUTE,
203
- }),
204
- }));
205
- return undefined;
206
- }
207
-
208
- const confirmSwap: Partial<ConfirmSwapState> = {
209
- loading: false,
210
- errors: [],
211
- warnings: [],
212
- proceedAnyway,
213
- };
214
-
215
- const routeChanged = isRouteChanged(initialRoute, confiremedRoute!);
216
-
217
- if (routeChanged) {
218
- setBestRoute(confiremedRoute);
219
- const newRouteOutputUsdValue = new BigNumber(
220
- confiremedRoute.result?.outputAmount || '0'
221
- ).multipliedBy(toToken.usdPrice || 0);
222
-
223
- const outputRatio = getOutputRatio(
224
- inputUsdValue,
225
- newRouteOutputUsdValue
226
- );
227
- const highValueLoss = outputRatioHasWarning(inputUsdValue, outputRatio);
228
-
229
- if (isNumberOfSwapsChanged(initialRoute, confiremedRoute))
230
- confirmSwap.warnings.push({
231
- type: ConfirmSwapWarningTypes.ROUTE_UPDATED,
232
- });
233
- else if (isRouteSwappersUpdated(initialRoute, confiremedRoute))
234
- confirmSwap.warnings.push({
235
- type: ConfirmSwapWarningTypes.ROUTE_SWAPPERS_UPDATED,
236
- });
237
- else isRouteInternalCoinsUpdated(initialRoute, confiremedRoute);
238
- confirmSwap.warnings.push({
239
- type: ConfirmSwapWarningTypes.ROUTE_COINS_UPDATED,
240
- });
241
- if (highValueLoss)
242
- confirmSwap.errors.push({
243
- type: ConfirmSwapErrorTypes.ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,
244
- });
245
- else if (isOutputAmountChangedALot(initialRoute, confiremedRoute))
246
- confirmSwap.warnings.push({
247
- type: ConfirmSwapWarningTypes.ROUTE_AND_OUTPUT_AMOUNT_UPDATED,
248
- newOutputAmount: numberToString(
249
- getRouteOutputAmount(confiremedRoute)
250
- ),
251
- percentageChange: numberToString(
252
- getPercentageChange(
253
- getRouteOutputAmount(initialRoute),
254
- getRouteOutputAmount(confiremedRoute)
255
- ),
256
- null,
257
- 2
258
- ),
259
- });
260
- }
261
-
262
- const balanceWarnings = getBalanceWarnings(
263
- confiremedRoute,
264
- selectedWallets
265
- );
266
- const enoughBalance = balanceWarnings.length === 0;
267
-
268
- if (!enoughBalance)
269
- confirmSwap.warnings.push({
270
- type: ConfirmSwapWarningTypes.INSUFFICIENT_BALANCE,
271
- messages: balanceWarnings,
272
- });
273
-
274
- const minRequiredSlippage = getMinRequiredSlippage(initialRoute);
275
-
276
- if (!hasProperSlippage(userSlippage.toString(), minRequiredSlippage))
277
- confirmSwap.errors.push({
278
- type: ConfirmSwapErrorTypes.INSUFFICIENT_SLIPPAGE,
279
- minRequiredSlippage,
280
- });
281
-
282
- const noErrors = confirmSwap.errors.length === 0;
283
- const noWarnings = confirmSwap.warnings.length === 0;
284
-
285
- if (
286
- (noErrors || (!noErrors && proceedAnyway)) &&
287
- (noWarnings || (!noWarnings && proceedAnyway))
288
- ) {
289
- const swapSettings: PendingSwapSettings = {
290
- slippage: userSlippage.toString(),
291
- disabledSwappersGroups: disabledLiquiditySources,
292
- };
293
-
294
- const newSwap = calculatePendingSwap(
295
- inputAmount.toString(),
296
- confiremedRoute,
297
- getWalletsForNewSwap(selectedWallets),
298
- swapSettings,
299
- false,
300
- meta
301
- );
302
-
303
- console.log('new swap:', newSwap);
304
- return newSwap;
305
- } else if (!proceedAnyway) {
306
- confirmSwap.proceedAnyway = true;
307
- useConfirmSwapStore.setState(confirmSwap);
308
- }
309
- return undefined;
310
- })
311
- .then((result) => {
312
- abortController = null;
313
- unsubscribeFromBestRouteStore();
314
- unsubscribeFromWalletsStore();
315
- return result;
316
- })
317
- .catch((error) => {
318
- abortController = null;
319
- if (error.code === 'ERR_CANCELED') {
320
- useConfirmSwapStore.setState({
321
- errors: [],
322
- warnings: [],
323
- loading: false,
324
- proceedAnyway: false,
325
- });
326
- unsubscribeFromBestRouteStore();
327
- unsubscribeFromWalletsStore();
328
- }
329
-
330
- const status = error.response?.status;
331
-
332
- useConfirmSwapStore.setState((prevState) => ({
333
- loading: false,
334
- errors: prevState.errors.concat({
335
- type: ConfirmSwapErrorTypes.REQUEST_FAILED,
336
- status,
337
- }),
338
- }));
339
- });
340
-
341
- return newSwap || undefined;
342
- };