@rango-dev/widget-embedded 0.1.10 → 0.1.11-next.10
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/App.d.ts +3 -3
- package/dist/App.d.ts.map +1 -1
- package/dist/QueueManager.d.ts.map +1 -1
- package/dist/components/AppRouter.d.ts +1 -7
- package/dist/components/AppRouter.d.ts.map +1 -1
- package/dist/components/AppRoutes.d.ts +2 -2
- package/dist/components/AppRoutes.d.ts.map +1 -1
- package/dist/components/Layout.d.ts +3 -3
- package/dist/components/Layout.d.ts.map +1 -1
- package/dist/components/PercentageChange.d.ts +9 -0
- package/dist/components/PercentageChange.d.ts.map +1 -0
- package/dist/components/TokenInfo.d.ts.map +1 -1
- package/dist/components/TokenPreview.d.ts +2 -1
- package/dist/components/TokenPreview.d.ts.map +1 -1
- package/dist/hooks/useConfirmSwap.d.ts.map +1 -1
- package/dist/hooks/useTheme.d.ts +2 -5
- package/dist/hooks/useTheme.d.ts.map +1 -1
- package/dist/lib.d.ts +2 -2
- package/dist/lib.d.ts.map +1 -1
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts +1 -7
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/pages/LiquiditySourcesPage.d.ts +1 -2
- package/dist/pages/LiquiditySourcesPage.d.ts.map +1 -1
- package/dist/pages/SelectChainPage.d.ts +1 -2
- package/dist/pages/SelectChainPage.d.ts.map +1 -1
- package/dist/pages/SelectTokenPage.d.ts +2 -2
- package/dist/pages/SelectTokenPage.d.ts.map +1 -1
- package/dist/pages/SettingsPage.d.ts +1 -2
- package/dist/pages/SettingsPage.d.ts.map +1 -1
- package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
- package/dist/pages/WalletsPage.d.ts +1 -1
- package/dist/pages/WalletsPage.d.ts.map +1 -1
- package/dist/services/httpService.d.ts +2 -1
- package/dist/services/httpService.d.ts.map +1 -1
- package/dist/store/bestRoute.d.ts +1 -0
- package/dist/store/bestRoute.d.ts.map +1 -1
- package/dist/store/meta.d.ts.map +1 -1
- package/dist/store/settings.d.ts +2 -0
- package/dist/store/settings.d.ts.map +1 -1
- package/dist/types/config.d.ts +27 -29
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/routing.d.ts +14 -1
- package/dist/types/routing.d.ts.map +1 -1
- package/dist/utils/configs.d.ts +7 -0
- package/dist/utils/configs.d.ts.map +1 -0
- package/dist/utils/routing.d.ts +2 -2
- package/dist/utils/routing.d.ts.map +1 -1
- package/dist/utils/swap.d.ts +2 -6
- package/dist/utils/swap.d.ts.map +1 -1
- package/dist/widget-embedded.cjs.development.js +232 -223
- package/dist/widget-embedded.cjs.development.js.map +1 -1
- package/dist/widget-embedded.cjs.production.min.js +232 -223
- package/dist/widget-embedded.cjs.production.min.js.map +1 -1
- package/dist/widget-embedded.esm.js +232 -223
- package/dist/widget-embedded.esm.js.map +1 -1
- package/package.json +6 -4
- package/readme.md +1 -1
- package/src/App.tsx +36 -14
- package/src/QueueManager.tsx +9 -3
- package/src/components/AppRouter.tsx +7 -16
- package/src/components/AppRoutes.tsx +13 -32
- package/src/components/HeaderButtons.tsx +1 -1
- package/src/components/Layout.tsx +37 -27
- package/src/components/PercentageChange.tsx +33 -0
- package/src/components/TokenInfo.tsx +24 -12
- package/src/components/TokenPreview.tsx +19 -15
- package/src/hooks/useConfirmSwap.ts +6 -5
- package/src/hooks/useTheme.ts +21 -9
- package/src/lib.tsx +30 -36
- package/src/pages/ConfirmSwapPage.tsx +14 -7
- package/src/pages/Home.tsx +10 -22
- package/src/pages/LiquiditySourcesPage.tsx +3 -6
- package/src/pages/SelectChainPage.tsx +6 -6
- package/src/pages/SelectTokenPage.tsx +16 -18
- package/src/pages/SettingsPage.tsx +8 -18
- package/src/pages/SwapDetailsPage.tsx +2 -4
- package/src/pages/WalletsPage.tsx +2 -2
- package/src/services/httpService.ts +12 -3
- package/src/store/bestRoute.ts +39 -9
- package/src/store/meta.ts +6 -4
- package/src/store/settings.ts +7 -0
- package/src/store/wallets.ts +1 -1
- package/src/types/config.ts +28 -29
- package/src/types/routing.ts +17 -1
- package/src/utils/configs.ts +24 -0
- package/src/utils/routing.ts +29 -23
- package/src/utils/swap.ts +5 -97
package/src/store/bestRoute.ts
CHANGED
|
@@ -49,6 +49,7 @@ export interface RouteState {
|
|
|
49
49
|
bestRoute: BestRouteResponse | null;
|
|
50
50
|
setBestRoute: (bestRoute: BestRouteResponse | null) => void;
|
|
51
51
|
retry: (pendingSwap: PendingSwap) => void;
|
|
52
|
+
switchFromAndTo: () => void;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
export const useBestRouteStore = createSelectors(
|
|
@@ -146,7 +147,6 @@ export const useBestRouteStore = createSelectors(
|
|
|
146
147
|
toToken: token,
|
|
147
148
|
})),
|
|
148
149
|
setInputAmount: (amount) => {
|
|
149
|
-
console.log(amount, typeof amount);
|
|
150
150
|
set((state) => ({
|
|
151
151
|
inputAmount: amount,
|
|
152
152
|
...(!amount && {
|
|
@@ -224,6 +224,20 @@ export const useBestRouteStore = createSelectors(
|
|
|
224
224
|
destinationTokens: sortedDestinationTokens,
|
|
225
225
|
});
|
|
226
226
|
},
|
|
227
|
+
switchFromAndTo: () =>
|
|
228
|
+
set((state) => ({
|
|
229
|
+
fromChain: state.toChain,
|
|
230
|
+
fromToken: state.toToken,
|
|
231
|
+
toChain: state.fromChain,
|
|
232
|
+
toToken: state.fromToken,
|
|
233
|
+
sourceTokens: state.destinationTokens,
|
|
234
|
+
destinationTokens: state.sourceTokens,
|
|
235
|
+
inputAmount: state.outputAmount?.toString() || '',
|
|
236
|
+
inputUsdValue: getUsdValue(
|
|
237
|
+
state.toToken,
|
|
238
|
+
state.outputAmount?.toString() || ''
|
|
239
|
+
),
|
|
240
|
+
})),
|
|
227
241
|
}))
|
|
228
242
|
)
|
|
229
243
|
);
|
|
@@ -235,7 +249,7 @@ const bestRoute = (
|
|
|
235
249
|
let abortController: AbortController | null = null;
|
|
236
250
|
const fetchBestRoute = () => {
|
|
237
251
|
const { fromToken, toToken, inputAmount } = bestRouteStore.getState();
|
|
238
|
-
const { slippage, customSlippage, disabledLiquiditySources } =
|
|
252
|
+
const { slippage, customSlippage, disabledLiquiditySources, affiliateRef } =
|
|
239
253
|
settingsStore.getState();
|
|
240
254
|
if (!fromToken || !toToken || !inputAmount || inputAmount === '0') return;
|
|
241
255
|
abortController?.abort();
|
|
@@ -249,7 +263,8 @@ const bestRoute = (
|
|
|
249
263
|
[],
|
|
250
264
|
disabledLiquiditySources,
|
|
251
265
|
userSlippage,
|
|
252
|
-
false
|
|
266
|
+
false,
|
|
267
|
+
affiliateRef
|
|
253
268
|
);
|
|
254
269
|
if (!bestRouteStore.getState().loading)
|
|
255
270
|
bestRouteStore.setState({
|
|
@@ -258,7 +273,7 @@ const bestRoute = (
|
|
|
258
273
|
outputAmount: null,
|
|
259
274
|
outputUsdValue: new BigNumber(0),
|
|
260
275
|
});
|
|
261
|
-
httpService
|
|
276
|
+
httpService()
|
|
262
277
|
.getBestRoute(requestBody, {
|
|
263
278
|
signal: abortController.signal,
|
|
264
279
|
})
|
|
@@ -282,7 +297,7 @@ const bestRoute = (
|
|
|
282
297
|
const bestRouteParamsListener = () => {
|
|
283
298
|
const { fromToken, toToken, inputAmount, inputUsdValue } =
|
|
284
299
|
useBestRouteStore.getState();
|
|
285
|
-
if (!inputAmount || inputAmount === '0') return;
|
|
300
|
+
if (!inputAmount || inputAmount === '0' || inputUsdValue.eq(0)) return;
|
|
286
301
|
|
|
287
302
|
if (tokensAreEqual(fromToken, toToken))
|
|
288
303
|
return bestRouteStore.setState({
|
|
@@ -312,8 +327,15 @@ const bestRoute = (
|
|
|
312
327
|
}),
|
|
313
328
|
bestRouteParamsListener,
|
|
314
329
|
{
|
|
315
|
-
equalityFn: (prevState,
|
|
316
|
-
if (
|
|
330
|
+
equalityFn: (prevState, currentState) => {
|
|
331
|
+
if (
|
|
332
|
+
isRouteParametersChanged({
|
|
333
|
+
store: 'bestRoute',
|
|
334
|
+
prevState,
|
|
335
|
+
currentState,
|
|
336
|
+
})
|
|
337
|
+
)
|
|
338
|
+
return false;
|
|
317
339
|
else return true;
|
|
318
340
|
},
|
|
319
341
|
}
|
|
@@ -324,11 +346,19 @@ const bestRoute = (
|
|
|
324
346
|
slippage: state.slippage,
|
|
325
347
|
customSlippage: state.customSlippage,
|
|
326
348
|
disabledLiquiditySources: state.disabledLiquiditySources,
|
|
349
|
+
infiniteApprove: state.infiniteApprove,
|
|
327
350
|
}),
|
|
328
351
|
bestRouteParamsListener,
|
|
329
352
|
{
|
|
330
|
-
equalityFn: (prevState,
|
|
331
|
-
if (
|
|
353
|
+
equalityFn: (prevState, currentState) => {
|
|
354
|
+
if (
|
|
355
|
+
isRouteParametersChanged({
|
|
356
|
+
store: 'settings',
|
|
357
|
+
prevState,
|
|
358
|
+
currentState,
|
|
359
|
+
})
|
|
360
|
+
)
|
|
361
|
+
return false;
|
|
332
362
|
else return true;
|
|
333
363
|
},
|
|
334
364
|
}
|
package/src/store/meta.ts
CHANGED
|
@@ -18,12 +18,14 @@ export const useMetaStore = createSelectors(
|
|
|
18
18
|
loadingStatus: 'loading',
|
|
19
19
|
fetchMeta: async () => {
|
|
20
20
|
try {
|
|
21
|
-
const response = await httpService.getAllMetadata();
|
|
21
|
+
const response = await httpService().getAllMetadata();
|
|
22
22
|
const chainThatHasTokenInMetaResponse = removeDuplicateFrom(
|
|
23
|
-
response.tokens.map((t) => t.blockchain)
|
|
23
|
+
response.tokens.map((t) => t.blockchain)
|
|
24
24
|
);
|
|
25
25
|
const enabledChains = response.blockchains.filter(
|
|
26
|
-
(chain) =>
|
|
26
|
+
(chain) =>
|
|
27
|
+
chain.enabled &&
|
|
28
|
+
chainThatHasTokenInMetaResponse.includes(chain.name)
|
|
27
29
|
);
|
|
28
30
|
response.blockchains = enabledChains.sort((a, b) => a.sort - b.sort);
|
|
29
31
|
set({ meta: response, loadingStatus: 'success' });
|
|
@@ -31,5 +33,5 @@ export const useMetaStore = createSelectors(
|
|
|
31
33
|
set({ loadingStatus: 'failed' });
|
|
32
34
|
}
|
|
33
35
|
},
|
|
34
|
-
}))
|
|
36
|
+
}))
|
|
35
37
|
);
|
package/src/store/settings.ts
CHANGED
|
@@ -13,12 +13,14 @@ export interface SettingsState {
|
|
|
13
13
|
infiniteApprove: boolean;
|
|
14
14
|
disabledLiquiditySources: string[];
|
|
15
15
|
theme: Theme;
|
|
16
|
+
affiliateRef: string | null;
|
|
16
17
|
setSlippage: (slippage: number) => void;
|
|
17
18
|
setCustomSlippage: (customSlippage: number | null) => void;
|
|
18
19
|
toggleInfiniteApprove: () => void;
|
|
19
20
|
toggleLiquiditySource: (name: string) => void;
|
|
20
21
|
setTheme: (theme: Theme) => void;
|
|
21
22
|
toggleAllLiquiditySources: () => void;
|
|
23
|
+
setAffiliateRef: (affiliateRef: string | null) => void;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
export const useSettingsStore = createSelectors(
|
|
@@ -28,6 +30,7 @@ export const useSettingsStore = createSelectors(
|
|
|
28
30
|
slippage: DEFAULT_SLIPPAGE,
|
|
29
31
|
customSlippage: null,
|
|
30
32
|
infiniteApprove: false,
|
|
33
|
+
affiliateRef: null,
|
|
31
34
|
disabledLiquiditySources: [],
|
|
32
35
|
theme: 'auto',
|
|
33
36
|
setSlippage: (slippage) =>
|
|
@@ -38,6 +41,10 @@ export const useSettingsStore = createSelectors(
|
|
|
38
41
|
set(() => ({
|
|
39
42
|
customSlippage: customSlippage,
|
|
40
43
|
})),
|
|
44
|
+
setAffiliateRef: (affiliateRef) =>
|
|
45
|
+
set(() => ({
|
|
46
|
+
affiliateRef,
|
|
47
|
+
})),
|
|
41
48
|
toggleAllLiquiditySources: () =>
|
|
42
49
|
set((state) => {
|
|
43
50
|
const { swappers } = useMetaStore.getState().meta;
|
package/src/store/wallets.ts
CHANGED
|
@@ -81,7 +81,7 @@ export const useWalletsStore = createSelectors(
|
|
|
81
81
|
}));
|
|
82
82
|
accounts.forEach(async (account) => {
|
|
83
83
|
try {
|
|
84
|
-
const response = await httpService.getWalletsDetails([
|
|
84
|
+
const response = await httpService().getWalletsDetails([
|
|
85
85
|
{ address: account.address, blockchain: account.chain },
|
|
86
86
|
]);
|
|
87
87
|
const retrivedBalance = response.wallets[0];
|
package/src/types/config.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Asset } from 'rango-sdk';
|
|
2
2
|
import { WalletType } from '@rango-dev/wallets-shared';
|
|
3
|
-
export interface Source {
|
|
4
|
-
title: string;
|
|
5
|
-
type: 'BRIDGE' | 'AGGREGATOR' | 'DEX';
|
|
6
|
-
}
|
|
7
3
|
|
|
8
4
|
export type Colors = {
|
|
9
5
|
background?: string;
|
|
@@ -17,28 +13,31 @@ export type Colors = {
|
|
|
17
13
|
warning?: string;
|
|
18
14
|
};
|
|
19
15
|
|
|
20
|
-
export type
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
16
|
+
export type Theme = {
|
|
17
|
+
mode?: 'dark' | 'light' | 'auto';
|
|
18
|
+
fontFamily?: string;
|
|
19
|
+
colors?: Colors;
|
|
20
|
+
borderRadius?: number;
|
|
21
|
+
width?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
};
|
|
24
|
+
export type Support = {
|
|
25
|
+
blockchain?: string;
|
|
26
|
+
token?: Asset;
|
|
27
|
+
blockchains?: string[];
|
|
28
|
+
tokens?: Asset[];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type WidgetConfig = {
|
|
32
|
+
apiKey: string;
|
|
33
|
+
affiliateRef?: string;
|
|
34
|
+
amount?: number;
|
|
35
|
+
from?: Support;
|
|
36
|
+
to?: Support;
|
|
37
|
+
liquiditySources?: string[];
|
|
38
|
+
wallets?: WalletType[];
|
|
39
|
+
multiWallets?: boolean;
|
|
40
|
+
customAddress?: boolean;
|
|
41
|
+
language?: string;
|
|
42
|
+
theme?: Theme;
|
|
44
43
|
};
|
package/src/types/routing.ts
CHANGED
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import { RouteState } from '../store/bestRoute';
|
|
2
2
|
import { SettingsState } from '../store/settings';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
interface BestRouteStoreParams {
|
|
5
5
|
fromChain?: RouteState['fromChain'];
|
|
6
6
|
toChain?: RouteState['toChain'];
|
|
7
7
|
fromToken?: RouteState['fromToken'];
|
|
8
8
|
toToken?: RouteState['toToken'];
|
|
9
9
|
inputAmount?: RouteState['inputAmount'];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface SettingsStoreParams {
|
|
10
13
|
slippage?: SettingsState['slippage'];
|
|
11
14
|
customSlippage?: SettingsState['customSlippage'];
|
|
12
15
|
disabledLiquiditySources?: SettingsState['disabledLiquiditySources'];
|
|
16
|
+
infiniteApprove?: SettingsState['infiniteApprove'];
|
|
13
17
|
}
|
|
14
18
|
|
|
19
|
+
export type BestRouteEqualityParams =
|
|
20
|
+
| {
|
|
21
|
+
store: 'bestRoute';
|
|
22
|
+
prevState: BestRouteStoreParams;
|
|
23
|
+
currentState: BestRouteStoreParams;
|
|
24
|
+
}
|
|
25
|
+
| {
|
|
26
|
+
store: 'settings';
|
|
27
|
+
prevState: SettingsStoreParams;
|
|
28
|
+
currentState: SettingsStoreParams;
|
|
29
|
+
};
|
|
30
|
+
|
|
15
31
|
export enum ConfirmSwapErrorTypes {
|
|
16
32
|
NO_ROUTE,
|
|
17
33
|
ROUTE_UPDATED_WITH_HIGH_VALUE_LOSS,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface Configs {
|
|
2
|
+
API_KEY: string;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
const RANGO_PUBLIC_API_KEY = 'c6381a79-2817-4602-83bf-6a641a409e32';
|
|
6
|
+
|
|
7
|
+
let configs: Configs = {
|
|
8
|
+
API_KEY: RANGO_PUBLIC_API_KEY,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export function getConfig(name: keyof Configs) {
|
|
12
|
+
return configs[name];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function setConfig(name: keyof Configs, value: any) {
|
|
16
|
+
configs[name] = value;
|
|
17
|
+
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function initConfig(nextConfigs: Configs) {
|
|
22
|
+
configs = structuredClone(nextConfigs);
|
|
23
|
+
return configs;
|
|
24
|
+
}
|
package/src/utils/routing.ts
CHANGED
|
@@ -6,7 +6,7 @@ import BigNumber from 'bignumber.js';
|
|
|
6
6
|
import { BestRouteResponse, BlockchainMeta, Token } from 'rango-sdk';
|
|
7
7
|
import { areEqual } from './common';
|
|
8
8
|
import { SelectedWallet } from './wallets';
|
|
9
|
-
import {
|
|
9
|
+
import { BestRouteEqualityParams } from '../types';
|
|
10
10
|
import { TokenMeta } from '@rango-dev/ui/dist/types/meta';
|
|
11
11
|
import { numberToString } from './numbers';
|
|
12
12
|
import { getUsdFeeOfStep } from './swap';
|
|
@@ -112,28 +112,34 @@ export function getRequiredBalanceOfWallet(
|
|
|
112
112
|
return relatedFeeStatus.requiredAssets;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
export function isRouteParametersChanged(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
export function isRouteParametersChanged(params: BestRouteEqualityParams) {
|
|
116
|
+
if (params.store === 'bestRoute') {
|
|
117
|
+
const { prevState, currentState } = params;
|
|
118
|
+
return (
|
|
119
|
+
!!currentState.fromToken &&
|
|
120
|
+
!!currentState.toToken &&
|
|
121
|
+
(prevState.fromChain?.name !== currentState.fromChain?.name ||
|
|
122
|
+
prevState.toChain?.name !== currentState.toChain?.name ||
|
|
123
|
+
prevState.fromToken?.symbol !== currentState.fromToken?.symbol ||
|
|
124
|
+
prevState.toToken?.symbol !== currentState.toToken?.symbol ||
|
|
125
|
+
prevState.fromToken?.blockchain !== prevState.fromToken?.blockchain ||
|
|
126
|
+
prevState.toToken?.blockchain !== currentState.toToken?.blockchain ||
|
|
127
|
+
prevState.fromToken?.address !== currentState.fromToken?.address ||
|
|
128
|
+
prevState.toToken?.address !== currentState.toToken?.address ||
|
|
129
|
+
prevState.inputAmount !== currentState.inputAmount)
|
|
130
|
+
);
|
|
131
|
+
} else if (params.store === 'settings') {
|
|
132
|
+
const { prevState, currentState } = params;
|
|
133
|
+
return (
|
|
134
|
+
prevState.slippage !== currentState.slippage ||
|
|
135
|
+
prevState.customSlippage !== currentState.customSlippage ||
|
|
136
|
+
prevState.disabledLiquiditySources?.length !==
|
|
137
|
+
currentState.disabledLiquiditySources?.length ||
|
|
138
|
+
prevState.infiniteApprove ||
|
|
139
|
+
currentState.infiniteApprove
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
145
|
export function getBestRouteWithCalculatedFees(
|
package/src/utils/swap.ts
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
WalletTypeAndAddress,
|
|
3
|
-
SwapSavedSettings,
|
|
4
|
-
} from '@rango-dev/ui/dist/types/swaps';
|
|
5
1
|
import BigNumber from 'bignumber.js';
|
|
6
2
|
import {
|
|
7
3
|
BestRouteRequest,
|
|
8
4
|
BestRouteResponse,
|
|
9
5
|
RecommendedSlippage,
|
|
10
6
|
SwapResult,
|
|
11
|
-
MetaResponse,
|
|
12
7
|
Token,
|
|
13
8
|
} from 'rango-sdk';
|
|
14
9
|
import { Account } from '../store/wallets';
|
|
@@ -140,7 +135,8 @@ export function getSwapButtonState(
|
|
|
140
135
|
if (accounts.length == 0) return { title: 'Connect Wallet', disabled: false };
|
|
141
136
|
if (loading) return { title: 'Finding Best Route...', disabled: true };
|
|
142
137
|
else if (inputIsZero) return { title: 'Enter an amount', disabled: true };
|
|
143
|
-
else if (!bestRoute
|
|
138
|
+
else if (!bestRoute || !bestRoute.result)
|
|
139
|
+
return { title: 'Swap', disabled: true };
|
|
144
140
|
else if (hasLimitError) return { title: 'Limit Error', disabled: true };
|
|
145
141
|
else if (highValueLoss)
|
|
146
142
|
return { title: 'Price impact is too high!', disabled: true };
|
|
@@ -175,96 +171,6 @@ export function canComputePriceImpact(
|
|
|
175
171
|
);
|
|
176
172
|
}
|
|
177
173
|
|
|
178
|
-
export function calculatePendingSwap(
|
|
179
|
-
inputAmount: string,
|
|
180
|
-
bestRoute: BestRouteResponse,
|
|
181
|
-
wallets: { [p: string]: WalletTypeAndAddress },
|
|
182
|
-
settings: Omit<SwapSavedSettings, 'disabledSwappersIds'>,
|
|
183
|
-
validateBalanceOrFee: boolean,
|
|
184
|
-
meta: MetaResponse
|
|
185
|
-
): PendingSwap {
|
|
186
|
-
const simulationResult = bestRoute.result;
|
|
187
|
-
if (!simulationResult) throw Error('Simulation result should not be null');
|
|
188
|
-
|
|
189
|
-
return {
|
|
190
|
-
creationTime: new Date().getTime().toString(),
|
|
191
|
-
finishTime: null,
|
|
192
|
-
requestId: bestRoute.requestId || '',
|
|
193
|
-
inputAmount: inputAmount,
|
|
194
|
-
//@ts-ignore
|
|
195
|
-
wallets,
|
|
196
|
-
status: 'running',
|
|
197
|
-
isPaused: false,
|
|
198
|
-
extraMessage: null,
|
|
199
|
-
extraMessageSeverity: null,
|
|
200
|
-
extraMessageDetail: null,
|
|
201
|
-
extraMessageErrorCode: null,
|
|
202
|
-
networkStatusExtraMessage: null,
|
|
203
|
-
networkStatusExtraMessageDetail: null,
|
|
204
|
-
lastNotificationTime: null,
|
|
205
|
-
//@ts-ignore
|
|
206
|
-
settings: settings,
|
|
207
|
-
simulationResult: simulationResult,
|
|
208
|
-
validateBalanceOrFee,
|
|
209
|
-
//@ts-ignore
|
|
210
|
-
steps:
|
|
211
|
-
bestRoute.result?.swaps?.map((swap, index) => {
|
|
212
|
-
const swapper = meta.swappers.find(
|
|
213
|
-
(swapper) => swapper.id === swap.swapperId
|
|
214
|
-
);
|
|
215
|
-
const swapperType = swapper?.types[0];
|
|
216
|
-
const fromBlockchain = meta.blockchains.find(
|
|
217
|
-
(blockchain) => blockchain.name === swap.from.blockchain
|
|
218
|
-
);
|
|
219
|
-
const toBlockchain = meta.blockchains.find(
|
|
220
|
-
(blockchain) => blockchain.name === swap.to.blockchain
|
|
221
|
-
);
|
|
222
|
-
return {
|
|
223
|
-
id: index + 1,
|
|
224
|
-
fromBlockchain: swap.from.blockchain,
|
|
225
|
-
fromSymbol: swap.from.symbol,
|
|
226
|
-
fromSymbolAddress: swap.from.address,
|
|
227
|
-
fromDecimals: swap.from.decimals,
|
|
228
|
-
fromAmountPrecision: swap.fromAmountPrecision,
|
|
229
|
-
fromAmountMinValue: swap.fromAmountMinValue,
|
|
230
|
-
fromAmountMaxValue: swap.fromAmountMaxValue,
|
|
231
|
-
toBlockchain: swap.to.blockchain,
|
|
232
|
-
fromLogo: swap.from.logo,
|
|
233
|
-
toSymbol: swap.to.symbol,
|
|
234
|
-
toSymbolAddress: swap.to.address,
|
|
235
|
-
toDecimals: swap.to.decimals,
|
|
236
|
-
toLogo: swap.to.logo,
|
|
237
|
-
startTransactionTime: new Date().getTime(),
|
|
238
|
-
swapperId: swap.swapperId,
|
|
239
|
-
feeInUsd: numberToString(getUsdFeeOfStep(swap, meta.tokens), null, 2),
|
|
240
|
-
expectedOutputAmountHumanReadable: swap.toAmount,
|
|
241
|
-
outputAmount: '',
|
|
242
|
-
status: 'created',
|
|
243
|
-
networkStatus: null,
|
|
244
|
-
executedTransactionId: null,
|
|
245
|
-
externalTransactionId: null,
|
|
246
|
-
explorerUrl: null,
|
|
247
|
-
trackingCode: null,
|
|
248
|
-
cosmosTransaction: null,
|
|
249
|
-
solanaTransaction: null,
|
|
250
|
-
starknetTransaction: null,
|
|
251
|
-
starknetApprovalTransaction: null,
|
|
252
|
-
tronTransaction: null,
|
|
253
|
-
tronApprovalTransaction: null,
|
|
254
|
-
evmTransaction: null,
|
|
255
|
-
evmApprovalTransaction: null,
|
|
256
|
-
transferTransaction: null,
|
|
257
|
-
diagnosisUrl: null,
|
|
258
|
-
internalSteps: null,
|
|
259
|
-
fromBlockchainLogo: fromBlockchain?.logo || '',
|
|
260
|
-
toBlockchainLogo: toBlockchain?.logo || '',
|
|
261
|
-
swapperLogo: swapper?.logo || '',
|
|
262
|
-
swapperType: swapperType || '',
|
|
263
|
-
};
|
|
264
|
-
}) || [],
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
|
|
268
174
|
export function requiredWallets(route: BestRouteResponse | null) {
|
|
269
175
|
const wallets: string[] = [];
|
|
270
176
|
|
|
@@ -407,7 +313,8 @@ export function createBestRouteRequestBody(
|
|
|
407
313
|
selectedWallets: SelectedWallet[],
|
|
408
314
|
disabledLiquiditySources: string[],
|
|
409
315
|
slippage: number,
|
|
410
|
-
checkPrerequisites: boolean
|
|
316
|
+
checkPrerequisites: boolean,
|
|
317
|
+
affiliateRef: string | null
|
|
411
318
|
): BestRouteRequest {
|
|
412
319
|
const selectedWalletsMap = selectedWallets.reduce(
|
|
413
320
|
(
|
|
@@ -438,6 +345,7 @@ export function createBestRouteRequestBody(
|
|
|
438
345
|
|
|
439
346
|
const requestBody: BestRouteRequest = {
|
|
440
347
|
amount: inputAmount.toString(),
|
|
348
|
+
affiliateRef,
|
|
441
349
|
checkPrerequisites,
|
|
442
350
|
from: {
|
|
443
351
|
address: fromToken.address,
|