@reown/appkit-core-react-native 0.0.0-feat-multi-social-20250715153550 → 0.0.0-feat-onramp-20250718191948
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/lib/commonjs/controllers/AccountController.js +17 -20
- package/lib/commonjs/controllers/AccountController.js.map +1 -1
- package/lib/commonjs/controllers/ApiController.js +15 -17
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +28 -110
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +11 -8
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectorController.js +49 -0
- package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
- package/lib/commonjs/controllers/EnsController.js +4 -4
- package/lib/commonjs/controllers/EnsController.js.map +1 -1
- package/lib/commonjs/controllers/EventsController.js +4 -4
- package/lib/commonjs/controllers/EventsController.js.map +1 -1
- package/lib/commonjs/controllers/ModalController.js +2 -2
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/OnRampController.js +62 -21
- package/lib/commonjs/controllers/OnRampController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +3 -8
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +22 -1
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +33 -34
- package/lib/commonjs/controllers/SendController.js.map +1 -1
- package/lib/commonjs/controllers/SnackController.js +5 -29
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +148 -136
- package/lib/commonjs/controllers/SwapController.js.map +1 -1
- package/lib/commonjs/controllers/ThemeController.js +1 -9
- package/lib/commonjs/controllers/ThemeController.js.map +1 -1
- package/lib/commonjs/controllers/TransactionsController.js +21 -25
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
- package/lib/commonjs/controllers/WebviewController.js +52 -0
- package/lib/commonjs/controllers/WebviewController.js.map +1 -0
- package/lib/commonjs/index.js +24 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/AssetUtil.js +12 -8
- package/lib/commonjs/utils/AssetUtil.js.map +1 -1
- package/lib/commonjs/utils/ConnectionUtil.js +33 -0
- package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
- package/lib/commonjs/utils/ConstantsUtil.js +8 -537
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +4 -4
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js +28 -9
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/NetworkUtil.js +46 -0
- package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
- package/lib/commonjs/utils/StorageUtil.js +42 -51
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +21 -15
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
- package/lib/module/controllers/AccountController.js +17 -20
- package/lib/module/controllers/AccountController.js.map +1 -1
- package/lib/module/controllers/ApiController.js +15 -16
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +28 -110
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +11 -8
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectorController.js +44 -0
- package/lib/module/controllers/ConnectorController.js.map +1 -0
- package/lib/module/controllers/EnsController.js +2 -2
- package/lib/module/controllers/EnsController.js.map +1 -1
- package/lib/module/controllers/EventsController.js +1 -1
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +2 -2
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/OnRampController.js +62 -21
- package/lib/module/controllers/OnRampController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +3 -8
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +22 -1
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +30 -31
- package/lib/module/controllers/SendController.js.map +1 -1
- package/lib/module/controllers/SnackController.js +5 -29
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +148 -136
- package/lib/module/controllers/SwapController.js.map +1 -1
- package/lib/module/controllers/ThemeController.js +1 -9
- package/lib/module/controllers/ThemeController.js.map +1 -1
- package/lib/module/controllers/TransactionsController.js +19 -23
- package/lib/module/controllers/TransactionsController.js.map +1 -1
- package/lib/module/controllers/WebviewController.js +47 -0
- package/lib/module/controllers/WebviewController.js.map +1 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/AssetUtil.js +12 -8
- package/lib/module/utils/AssetUtil.js.map +1 -1
- package/lib/module/utils/ConnectionUtil.js +27 -0
- package/lib/module/utils/ConnectionUtil.js.map +1 -0
- package/lib/module/utils/ConstantsUtil.js +8 -537
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +4 -4
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js +28 -9
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/NetworkUtil.js +40 -0
- package/lib/module/utils/NetworkUtil.js.map +1 -0
- package/lib/module/utils/StorageUtil.js +42 -51
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +21 -15
- package/lib/module/utils/SwapApiUtil.js.map +1 -1
- package/lib/typescript/controllers/AccountController.d.ts +4 -4
- package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +1 -1
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +4 -16
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +11 -3
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
- package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
- package/lib/typescript/controllers/ModalController.d.ts +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
- package/lib/typescript/controllers/OnRampController.d.ts +3 -1
- package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +2 -5
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +16 -4
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts.map +1 -1
- package/lib/typescript/controllers/SnackController.d.ts +3 -3
- package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
- package/lib/typescript/controllers/SwapController.d.ts +9 -9
- package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
- package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
- package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/WebviewController.d.ts +21 -0
- package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +4 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/AssetUtil.d.ts +3 -3
- package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
- package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
- package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
- package/lib/typescript/utils/ConstantsUtil.d.ts +1 -421
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +3 -3
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
- package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
- package/lib/typescript/utils/StorageUtil.d.ts +7 -14
- package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
- package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
- package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
- package/lib/typescript/utils/TypeUtil.d.ts +173 -24
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/controllers/AccountController.ts +27 -23
- package/src/controllers/ApiController.ts +9 -15
- package/src/controllers/BlockchainApiController.ts +31 -145
- package/src/controllers/ConnectionController.ts +24 -12
- package/src/controllers/ConnectorController.ts +63 -0
- package/src/controllers/EnsController.ts +2 -2
- package/src/controllers/EventsController.ts +1 -1
- package/src/controllers/ModalController.ts +3 -4
- package/src/controllers/NetworkController.ts +1 -1
- package/src/controllers/OnRampController.ts +93 -33
- package/src/controllers/OptionsController.ts +13 -14
- package/src/controllers/PublicStateController.ts +1 -1
- package/src/controllers/RouterController.ts +54 -5
- package/src/controllers/SendController.ts +30 -39
- package/src/controllers/SnackController.ts +5 -31
- package/src/controllers/SwapController.ts +178 -155
- package/src/controllers/ThemeController.ts +2 -11
- package/src/controllers/TransactionsController.ts +20 -26
- package/src/controllers/WebviewController.ts +63 -0
- package/src/index.ts +6 -3
- package/src/utils/AssetUtil.ts +14 -8
- package/src/utils/ConnectionUtil.ts +27 -0
- package/src/utils/ConstantsUtil.ts +8 -542
- package/src/utils/CoreHelperUtil.ts +7 -15
- package/src/utils/FetchUtil.ts +31 -10
- package/src/utils/NetworkUtil.ts +33 -0
- package/src/utils/StorageUtil.ts +48 -60
- package/src/utils/SwapApiUtil.ts +38 -27
- package/src/utils/TypeUtil.ts +173 -26
- package/lib/commonjs/controllers/ConnectionsController.js +0 -383
- package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
- package/lib/module/controllers/ConnectionsController.js +0 -378
- package/lib/module/controllers/ConnectionsController.js.map +0 -1
- package/lib/typescript/controllers/ConnectionsController.d.ts +0 -52
- package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
- package/src/controllers/ConnectionsController.ts +0 -503
|
@@ -11,47 +11,23 @@ const state = proxy({
|
|
|
11
11
|
long: false
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
// -- Private Variables --------------------------------- //
|
|
15
|
-
let hideTimeout = null;
|
|
16
|
-
|
|
17
|
-
// -- Private Functions --------------------------------- //
|
|
18
|
-
const clearHideTimeout = () => {
|
|
19
|
-
if (hideTimeout) {
|
|
20
|
-
clearTimeout(hideTimeout);
|
|
21
|
-
hideTimeout = null;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const scheduleAutoHide = long => {
|
|
25
|
-
clearHideTimeout();
|
|
26
|
-
const duration = long ? 15000 : 2200;
|
|
27
|
-
hideTimeout = setTimeout(() => {
|
|
28
|
-
SnackController.hide();
|
|
29
|
-
}, duration);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
14
|
// -- Controller ---------------------------------------- //
|
|
33
15
|
export const SnackController = {
|
|
34
16
|
state,
|
|
35
|
-
showSuccess(message
|
|
17
|
+
showSuccess(message) {
|
|
36
18
|
state.message = message;
|
|
37
19
|
state.variant = 'success';
|
|
38
20
|
state.open = true;
|
|
39
|
-
state.long = long;
|
|
40
|
-
scheduleAutoHide(long);
|
|
41
21
|
},
|
|
42
|
-
showError(message
|
|
22
|
+
showError(message) {
|
|
43
23
|
state.message = message;
|
|
44
24
|
state.variant = 'error';
|
|
45
25
|
state.open = true;
|
|
46
|
-
state.long = long;
|
|
47
|
-
scheduleAutoHide(long);
|
|
48
26
|
},
|
|
49
|
-
showLoading(message
|
|
27
|
+
showLoading(message) {
|
|
50
28
|
state.message = message;
|
|
51
29
|
state.variant = 'loading';
|
|
52
30
|
state.open = true;
|
|
53
|
-
state.long = long;
|
|
54
|
-
scheduleAutoHide(long);
|
|
55
31
|
},
|
|
56
32
|
showInternalError(error) {
|
|
57
33
|
const {
|
|
@@ -62,7 +38,6 @@ export const SnackController = {
|
|
|
62
38
|
state.variant = 'error';
|
|
63
39
|
state.open = true;
|
|
64
40
|
state.long = true;
|
|
65
|
-
scheduleAutoHide(true);
|
|
66
41
|
}
|
|
67
42
|
if (error.longMessage) {
|
|
68
43
|
// eslint-disable-next-line no-console
|
|
@@ -70,9 +45,10 @@ export const SnackController = {
|
|
|
70
45
|
}
|
|
71
46
|
},
|
|
72
47
|
hide() {
|
|
73
|
-
clearHideTimeout();
|
|
74
48
|
state.open = false;
|
|
75
49
|
state.long = false;
|
|
50
|
+
state.message = '';
|
|
51
|
+
state.variant = 'success';
|
|
76
52
|
}
|
|
77
53
|
};
|
|
78
54
|
//# sourceMappingURL=SnackController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["proxy","OptionsController","state","message","variant","open","long","
|
|
1
|
+
{"version":3,"names":["proxy","OptionsController","state","message","variant","open","long","SnackController","showSuccess","showError","showLoading","showInternalError","error","debug","shortMessage","longMessage","console","hide"],"sourceRoot":"../../../src","sources":["controllers/SnackController.ts"],"mappings":"AAAA,SAASA,KAAK,QAAQ,QAAQ;AAC9B,SAASC,iBAAiB,QAAQ,qBAAqB;;AAEvD;;AAaA;AACA,MAAMC,KAAK,GAAGF,KAAK,CAAuB;EACxCG,OAAO,EAAE,EAAE;EACXC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,KAAK;EACXC,IAAI,EAAE;AACR,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMC,eAAe,GAAG;EAC7BL,KAAK;EAELM,WAAWA,CAACL,OAAwC,EAAE;IACpDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDI,SAASA,CAACN,OAAwC,EAAE;IAClDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,OAAO;IACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDK,WAAWA,CAACP,OAAwC,EAAE;IACpDD,KAAK,CAACC,OAAO,GAAGA,OAAO;IACvBD,KAAK,CAACE,OAAO,GAAG,SAAS;IACzBF,KAAK,CAACG,IAAI,GAAG,IAAI;EACnB,CAAC;EAEDM,iBAAiBA,CAACC,KAAc,EAAE;IAChC,MAAM;MAAEC;IAAM,CAAC,GAAGZ,iBAAiB,CAACC,KAAK;IAEzC,IAAIW,KAAK,EAAE;MACTX,KAAK,CAACC,OAAO,GAAGS,KAAK,CAACE,YAAY;MAClCZ,KAAK,CAACE,OAAO,GAAG,OAAO;MACvBF,KAAK,CAACG,IAAI,GAAG,IAAI;MACjBH,KAAK,CAACI,IAAI,GAAG,IAAI;IACnB;IAEA,IAAIM,KAAK,CAACG,WAAW,EAAE;MACrB;MACAC,OAAO,CAACJ,KAAK,CAACA,KAAK,CAACG,WAAW,CAAC;IAClC;EACF,CAAC;EAEDE,IAAIA,CAAA,EAAG;IACLf,KAAK,CAACG,IAAI,GAAG,KAAK;IAClBH,KAAK,CAACI,IAAI,GAAG,KAAK;IAClBJ,KAAK,CAACC,OAAO,GAAG,EAAE;IAClBD,KAAK,CAACE,OAAO,GAAG,SAAS;EAC3B;AACF,CAAC"}
|
|
@@ -3,15 +3,18 @@ import { proxy, subscribe as sub } from 'valtio';
|
|
|
3
3
|
import { NumberUtil } from '@reown/appkit-common-react-native';
|
|
4
4
|
import { ConstantsUtil } from '../utils/ConstantsUtil';
|
|
5
5
|
import { SwapApiUtil } from '../utils/SwapApiUtil';
|
|
6
|
+
import { NetworkController } from './NetworkController';
|
|
6
7
|
import { BlockchainApiController } from './BlockchainApiController';
|
|
7
8
|
import { OptionsController } from './OptionsController';
|
|
8
9
|
import { SwapCalculationUtil } from '../utils/SwapCalculationUtil';
|
|
9
10
|
import { SnackController } from './SnackController';
|
|
10
11
|
import { RouterController } from './RouterController';
|
|
12
|
+
import { ConnectorController } from './ConnectorController';
|
|
13
|
+
import { AccountController } from './AccountController';
|
|
11
14
|
import { CoreHelperUtil } from '../utils/CoreHelperUtil';
|
|
15
|
+
import { ConnectionController } from './ConnectionController';
|
|
12
16
|
import { TransactionsController } from './TransactionsController';
|
|
13
17
|
import { EventsController } from './EventsController';
|
|
14
|
-
import { ConnectionsController } from './ConnectionsController';
|
|
15
18
|
|
|
16
19
|
// -- Constants ---------------------------------------- //
|
|
17
20
|
export const INITIAL_GAS_LIMIT = 150000;
|
|
@@ -29,7 +32,8 @@ class TransactionError extends Error {
|
|
|
29
32
|
// -- State --------------------------------------------- //
|
|
30
33
|
const initialState = {
|
|
31
34
|
// Loading states
|
|
32
|
-
|
|
35
|
+
initializing: false,
|
|
36
|
+
initialized: false,
|
|
33
37
|
loadingPrices: false,
|
|
34
38
|
loadingQuote: false,
|
|
35
39
|
loadingApprovalTransaction: false,
|
|
@@ -49,6 +53,7 @@ const initialState = {
|
|
|
49
53
|
toTokenAmount: '',
|
|
50
54
|
toTokenPriceInUSD: 0,
|
|
51
55
|
networkPrice: '0',
|
|
56
|
+
networkBalanceInUSD: '0',
|
|
52
57
|
networkTokenSymbol: '',
|
|
53
58
|
inputError: undefined,
|
|
54
59
|
// Request values
|
|
@@ -79,17 +84,10 @@ export const SwapController = {
|
|
|
79
84
|
return subKey(state, key, callback);
|
|
80
85
|
},
|
|
81
86
|
getParams() {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
connection
|
|
87
|
-
} = ConnectionsController.state;
|
|
88
|
-
const address = CoreHelperUtil.getPlainAddress(activeAddress);
|
|
89
|
-
if (!activeNamespace || !activeNetwork) {
|
|
90
|
-
throw new Error('No active namespace or network found to swap the tokens from.');
|
|
91
|
-
}
|
|
92
|
-
const networkAddress = `${activeNetwork.caipNetworkId}:${ConstantsUtil.NATIVE_TOKEN_ADDRESS[activeNamespace]}`;
|
|
87
|
+
const caipAddress = AccountController.state.caipAddress;
|
|
88
|
+
const address = CoreHelperUtil.getPlainAddress(caipAddress);
|
|
89
|
+
const networkAddress = NetworkController.getActiveNetworkTokenAddress();
|
|
90
|
+
const type = ConnectorController.state.connectedConnector;
|
|
93
91
|
if (!address) {
|
|
94
92
|
throw new Error('No address found to swap the tokens from.');
|
|
95
93
|
}
|
|
@@ -99,7 +97,7 @@ export const SwapController = {
|
|
|
99
97
|
return {
|
|
100
98
|
networkAddress,
|
|
101
99
|
fromAddress: address,
|
|
102
|
-
fromCaipAddress:
|
|
100
|
+
fromCaipAddress: caipAddress,
|
|
103
101
|
sourceTokenAddress: state.sourceToken?.address,
|
|
104
102
|
toTokenAddress: state.toToken?.address,
|
|
105
103
|
toTokenAmount: state.toTokenAmount,
|
|
@@ -109,12 +107,12 @@ export const SwapController = {
|
|
|
109
107
|
invalidToToken,
|
|
110
108
|
invalidSourceToken,
|
|
111
109
|
invalidSourceTokenAmount,
|
|
112
|
-
availableToSwap:
|
|
113
|
-
isAuthConnector:
|
|
110
|
+
availableToSwap: caipAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
|
|
111
|
+
isAuthConnector: type === 'AUTH'
|
|
114
112
|
};
|
|
115
113
|
},
|
|
116
114
|
switchTokens() {
|
|
117
|
-
if (state.
|
|
115
|
+
if (state.initializing || !state.initialized) {
|
|
118
116
|
return;
|
|
119
117
|
}
|
|
120
118
|
let newSourceToken = state.toToken ? {
|
|
@@ -134,32 +132,35 @@ export const SwapController = {
|
|
|
134
132
|
this.setToTokenAmount('');
|
|
135
133
|
this.swapTokens();
|
|
136
134
|
},
|
|
135
|
+
resetState() {
|
|
136
|
+
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
137
|
+
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
138
|
+
state.initialized = initialState.initialized;
|
|
139
|
+
state.sourceToken = initialState.sourceToken;
|
|
140
|
+
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
141
|
+
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
142
|
+
state.toToken = initialState.toToken;
|
|
143
|
+
state.toTokenAmount = initialState.toTokenAmount;
|
|
144
|
+
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
145
|
+
state.networkPrice = initialState.networkPrice;
|
|
146
|
+
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
147
|
+
state.networkBalanceInUSD = initialState.networkBalanceInUSD;
|
|
148
|
+
state.inputError = initialState.inputError;
|
|
149
|
+
},
|
|
137
150
|
async fetchTokens() {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (networkToken) {
|
|
148
|
-
state.networkTokenSymbol = networkToken.symbol;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Set default source token if not set
|
|
152
|
-
if (!state.sourceToken && state.myTokensWithBalance?.length) {
|
|
153
|
-
const sourceToken = state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) || state.myTokensWithBalance?.[0];
|
|
154
|
-
this.setSourceToken(sourceToken);
|
|
155
|
-
this.setSourceTokenAmount('1');
|
|
156
|
-
}
|
|
157
|
-
} catch (error) {
|
|
158
|
-
SnackController.showError('Failed to initialize swap');
|
|
159
|
-
RouterController.goBack();
|
|
160
|
-
} finally {
|
|
161
|
-
state.loadingTokens = false;
|
|
151
|
+
const {
|
|
152
|
+
networkAddress
|
|
153
|
+
} = this.getParams();
|
|
154
|
+
await this.getTokenList();
|
|
155
|
+
await this.getNetworkTokenPrice();
|
|
156
|
+
await this.getMyTokensWithBalance();
|
|
157
|
+
const networkToken = state.tokens?.find(token => token.address === networkAddress);
|
|
158
|
+
if (networkToken) {
|
|
159
|
+
state.networkTokenSymbol = networkToken.symbol;
|
|
162
160
|
}
|
|
161
|
+
const sourceToken = state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) || state.myTokensWithBalance?.[0];
|
|
162
|
+
this.setSourceToken(sourceToken);
|
|
163
|
+
this.setSourceTokenAmount('1');
|
|
163
164
|
},
|
|
164
165
|
async getTokenList() {
|
|
165
166
|
const tokens = await SwapApiUtil.getTokenList();
|
|
@@ -181,19 +182,15 @@ export const SwapController = {
|
|
|
181
182
|
}, {});
|
|
182
183
|
},
|
|
183
184
|
async getMyTokensWithBalance(forceUpdate) {
|
|
184
|
-
await
|
|
185
|
-
|
|
186
|
-
if (!swapBalances) {
|
|
185
|
+
const balances = await SwapApiUtil.getMyTokensWithBalance(forceUpdate);
|
|
186
|
+
if (!balances) {
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
189
189
|
await this.getInitialGasPrice();
|
|
190
|
-
this.setBalances(
|
|
190
|
+
this.setBalances(balances);
|
|
191
191
|
},
|
|
192
|
-
getFilteredPopularTokens(
|
|
193
|
-
|
|
194
|
-
return state.popularTokens;
|
|
195
|
-
}
|
|
196
|
-
return state.popularTokens?.filter(token => !balances.some(t => t.address === token.address));
|
|
192
|
+
getFilteredPopularTokens() {
|
|
193
|
+
return state.popularTokens?.filter(token => !state.myTokensWithBalance?.some(t => t.address === token.address));
|
|
197
194
|
},
|
|
198
195
|
setSourceToken(sourceToken) {
|
|
199
196
|
if (!sourceToken) {
|
|
@@ -211,6 +208,23 @@ export const SwapController = {
|
|
|
211
208
|
state.toTokenAmount = '';
|
|
212
209
|
}
|
|
213
210
|
},
|
|
211
|
+
async initializeState() {
|
|
212
|
+
if (state.initializing) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
state.initializing = true;
|
|
216
|
+
if (!state.initialized) {
|
|
217
|
+
try {
|
|
218
|
+
await this.fetchTokens();
|
|
219
|
+
state.initialized = true;
|
|
220
|
+
} catch (error) {
|
|
221
|
+
state.initialized = false;
|
|
222
|
+
SnackController.showError('Failed to initialize swap');
|
|
223
|
+
RouterController.goBack();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
state.initializing = false;
|
|
227
|
+
},
|
|
214
228
|
async getAddressPrice(address) {
|
|
215
229
|
const existPrice = state.tokensPriceMap[address];
|
|
216
230
|
if (existPrice) {
|
|
@@ -265,10 +279,19 @@ export const SwapController = {
|
|
|
265
279
|
return SwapCalculationUtil.getProviderFeePrice(state.sourceTokenAmount, state.sourceTokenPriceInUSD);
|
|
266
280
|
},
|
|
267
281
|
setBalances(balances) {
|
|
268
|
-
|
|
282
|
+
const {
|
|
283
|
+
networkAddress
|
|
284
|
+
} = this.getParams();
|
|
285
|
+
const caipNetwork = NetworkController.state.caipNetwork;
|
|
286
|
+
if (!caipNetwork) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const networkToken = balances.find(token => token.address === networkAddress);
|
|
269
290
|
balances.forEach(token => {
|
|
270
291
|
state.tokensPriceMap[token.address] = token.price || 0;
|
|
271
292
|
});
|
|
293
|
+
state.myTokensWithBalance = balances.filter(token => token.address?.startsWith(caipNetwork.id));
|
|
294
|
+
state.networkBalanceInUSD = networkToken ? NumberUtil.multiply(networkToken.quantity.numeric, networkToken.price).toString() : '0';
|
|
272
295
|
},
|
|
273
296
|
setToToken(toToken) {
|
|
274
297
|
if (!toToken) {
|
|
@@ -303,42 +326,36 @@ export const SwapController = {
|
|
|
303
326
|
},
|
|
304
327
|
// -- Swap ---------------------------------------------- //
|
|
305
328
|
async swapTokens() {
|
|
306
|
-
const address =
|
|
329
|
+
const address = AccountController.state.address;
|
|
307
330
|
const sourceToken = state.sourceToken;
|
|
308
331
|
const toToken = state.toToken;
|
|
309
332
|
const haveSourceTokenAmount = NumberUtil.bigNumber(state.sourceTokenAmount).isGreaterThan(0);
|
|
310
|
-
if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount
|
|
333
|
+
if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount) {
|
|
311
334
|
return;
|
|
312
335
|
}
|
|
313
336
|
state.loadingQuote = true;
|
|
314
337
|
const amountDecimal = NumberUtil.bigNumber(state.sourceTokenAmount).multipliedBy(10 ** sourceToken.decimals).integerValue();
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
this.setTransactionDetails();
|
|
337
|
-
}
|
|
338
|
-
} catch (error) {
|
|
339
|
-
SnackController.showError('Failed to get swap quote');
|
|
340
|
-
} finally {
|
|
341
|
-
state.loadingQuote = false;
|
|
338
|
+
const quoteResponse = await BlockchainApiController.fetchSwapQuote({
|
|
339
|
+
userAddress: address,
|
|
340
|
+
projectId: OptionsController.state.projectId,
|
|
341
|
+
from: sourceToken.address,
|
|
342
|
+
to: toToken.address,
|
|
343
|
+
gasPrice: state.gasFee,
|
|
344
|
+
amount: amountDecimal.toString()
|
|
345
|
+
});
|
|
346
|
+
state.loadingQuote = false;
|
|
347
|
+
const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
|
|
348
|
+
if (!quoteToAmount) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
const toTokenAmount = NumberUtil.bigNumber(quoteToAmount).dividedBy(10 ** toToken.decimals).toString();
|
|
352
|
+
this.setToTokenAmount(toTokenAmount);
|
|
353
|
+
const isInsufficientToken = this.hasInsufficientToken(state.sourceTokenAmount, sourceToken.address);
|
|
354
|
+
if (isInsufficientToken) {
|
|
355
|
+
state.inputError = 'Insufficient balance';
|
|
356
|
+
} else {
|
|
357
|
+
state.inputError = undefined;
|
|
358
|
+
this.setTransactionDetails();
|
|
342
359
|
}
|
|
343
360
|
},
|
|
344
361
|
// -- Create Transactions -------------------------------------- //
|
|
@@ -402,7 +419,7 @@ export const SwapController = {
|
|
|
402
419
|
if (!response) {
|
|
403
420
|
throw new Error('createAllowanceTransaction - No response from generateApproveCalldata');
|
|
404
421
|
}
|
|
405
|
-
const gasLimit = await
|
|
422
|
+
const gasLimit = await ConnectionController.estimateGas({
|
|
406
423
|
address: fromAddress,
|
|
407
424
|
to: CoreHelperUtil.getPlainAddress(response.tx.to),
|
|
408
425
|
data: response.tx.data
|
|
@@ -452,7 +469,7 @@ export const SwapController = {
|
|
|
452
469
|
if (!fromCaipAddress || !sourceTokenAmount || !sourceToken || !toToken) {
|
|
453
470
|
return undefined;
|
|
454
471
|
}
|
|
455
|
-
const amount =
|
|
472
|
+
const amount = ConnectionController.parseUnits(sourceTokenAmount, sourceToken.decimals)?.toString();
|
|
456
473
|
try {
|
|
457
474
|
const response = await BlockchainApiController.generateSwapCalldata({
|
|
458
475
|
projectId: OptionsController.state.projectId,
|
|
@@ -490,28 +507,40 @@ export const SwapController = {
|
|
|
490
507
|
},
|
|
491
508
|
async sendTransactionForApproval(data) {
|
|
492
509
|
const {
|
|
493
|
-
fromAddress
|
|
510
|
+
fromAddress,
|
|
511
|
+
isAuthConnector
|
|
494
512
|
} = this.getParams();
|
|
495
513
|
state.loadingApprovalTransaction = true;
|
|
496
|
-
|
|
514
|
+
const approveLimitMessage = `Approve limit increase in your wallet`;
|
|
515
|
+
if (isAuthConnector) {
|
|
516
|
+
RouterController.pushTransactionStack({
|
|
517
|
+
view: null,
|
|
518
|
+
goBack: true,
|
|
519
|
+
onSuccess() {
|
|
520
|
+
SnackController.showLoading(approveLimitMessage);
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
} else {
|
|
524
|
+
SnackController.showLoading(approveLimitMessage);
|
|
525
|
+
}
|
|
497
526
|
try {
|
|
498
|
-
await
|
|
527
|
+
await ConnectionController.sendTransaction({
|
|
499
528
|
address: fromAddress,
|
|
500
529
|
to: data.to,
|
|
501
530
|
data: data.data,
|
|
502
531
|
value: BigInt(data.value),
|
|
503
532
|
gasPrice: BigInt(data.gasPrice),
|
|
504
|
-
chainNamespace:
|
|
533
|
+
chainNamespace: 'eip155'
|
|
505
534
|
});
|
|
506
535
|
await this.swapTokens();
|
|
507
536
|
await this.getTransaction();
|
|
508
537
|
state.approvalTransaction = undefined;
|
|
538
|
+
state.loadingApprovalTransaction = false;
|
|
509
539
|
} catch (err) {
|
|
510
540
|
const error = err;
|
|
511
541
|
state.transactionError = error?.shortMessage;
|
|
512
|
-
SnackController.showError(error?.shortMessage ?? 'Transaction error');
|
|
513
|
-
} finally {
|
|
514
542
|
state.loadingApprovalTransaction = false;
|
|
543
|
+
SnackController.showError(error?.shortMessage ?? 'Transaction error');
|
|
515
544
|
}
|
|
516
545
|
},
|
|
517
546
|
async sendTransactionForSwap(data) {
|
|
@@ -520,41 +549,57 @@ export const SwapController = {
|
|
|
520
549
|
}
|
|
521
550
|
const {
|
|
522
551
|
fromAddress,
|
|
552
|
+
toTokenAmount,
|
|
523
553
|
isAuthConnector
|
|
524
554
|
} = this.getParams();
|
|
525
555
|
state.loadingTransaction = true;
|
|
526
|
-
const
|
|
527
|
-
|
|
556
|
+
const snackbarPendingMessage = `Swapping ${state.sourceToken?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken?.symbol}`;
|
|
557
|
+
const snackbarSuccessMessage = `Swapped ${state.sourceToken?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken?.symbol}`;
|
|
558
|
+
if (isAuthConnector) {
|
|
559
|
+
RouterController.pushTransactionStack({
|
|
560
|
+
view: 'Account',
|
|
561
|
+
goBack: false,
|
|
562
|
+
onSuccess() {
|
|
563
|
+
SnackController.showLoading(snackbarPendingMessage);
|
|
564
|
+
SwapController.resetState();
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
} else {
|
|
568
|
+
SnackController.showLoading('Confirm transaction in your wallet');
|
|
569
|
+
}
|
|
528
570
|
try {
|
|
529
|
-
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].
|
|
530
|
-
const transactionHash = await
|
|
571
|
+
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].join(',');
|
|
572
|
+
const transactionHash = await ConnectionController.sendTransaction({
|
|
531
573
|
address: fromAddress,
|
|
532
574
|
to: data.to,
|
|
533
575
|
data: data.data,
|
|
534
576
|
gas: data.gas,
|
|
535
577
|
gasPrice: BigInt(data.gasPrice),
|
|
536
578
|
value: data.value,
|
|
537
|
-
chainNamespace:
|
|
579
|
+
chainNamespace: 'eip155'
|
|
538
580
|
});
|
|
539
581
|
state.loadingTransaction = false;
|
|
540
|
-
SnackController.showSuccess(snackbarSuccessMessage
|
|
582
|
+
SnackController.showSuccess(snackbarSuccessMessage);
|
|
541
583
|
EventsController.sendEvent({
|
|
542
584
|
type: 'track',
|
|
543
585
|
event: 'SWAP_SUCCESS',
|
|
544
586
|
properties: {
|
|
545
|
-
network:
|
|
587
|
+
network: NetworkController.state.caipNetwork?.id || '',
|
|
546
588
|
swapFromToken: this.state.sourceToken?.symbol || '',
|
|
547
589
|
swapToToken: this.state.toToken?.symbol || '',
|
|
548
590
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
549
591
|
swapToAmount: this.state.toTokenAmount || '',
|
|
550
|
-
isSmartAccount:
|
|
592
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
|
|
551
593
|
}
|
|
552
594
|
});
|
|
553
|
-
|
|
554
|
-
|
|
595
|
+
SwapController.resetState();
|
|
596
|
+
if (!isAuthConnector) {
|
|
597
|
+
RouterController.replace('AccountDefault');
|
|
598
|
+
}
|
|
555
599
|
SwapController.getMyTokensWithBalance(forceUpdateAddresses);
|
|
600
|
+
AccountController.fetchTokenBalance();
|
|
556
601
|
setTimeout(() => {
|
|
557
|
-
TransactionsController.fetchTransactions(
|
|
602
|
+
TransactionsController.fetchTransactions(AccountController.state.address, true);
|
|
558
603
|
}, 5000);
|
|
559
604
|
return transactionHash;
|
|
560
605
|
} catch (err) {
|
|
@@ -567,59 +612,26 @@ export const SwapController = {
|
|
|
567
612
|
event: 'SWAP_ERROR',
|
|
568
613
|
properties: {
|
|
569
614
|
message: error?.shortMessage ?? error?.message ?? 'Unknown',
|
|
570
|
-
network:
|
|
615
|
+
network: NetworkController.state.caipNetwork?.id || '',
|
|
571
616
|
swapFromToken: this.state.sourceToken?.symbol || '',
|
|
572
617
|
swapToToken: this.state.toToken?.symbol || '',
|
|
573
618
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
574
619
|
swapToAmount: this.state.toTokenAmount || '',
|
|
575
|
-
isSmartAccount:
|
|
620
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
|
|
576
621
|
}
|
|
577
622
|
});
|
|
578
623
|
return undefined;
|
|
579
624
|
}
|
|
580
625
|
},
|
|
581
|
-
clearTransactionLoaders() {
|
|
582
|
-
state.loadingApprovalTransaction = false;
|
|
583
|
-
state.loadingBuildTransaction = false;
|
|
584
|
-
state.loadingTransaction = false;
|
|
585
|
-
},
|
|
586
|
-
clearTokens() {
|
|
587
|
-
state.sourceToken = initialState.sourceToken;
|
|
588
|
-
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
589
|
-
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
590
|
-
state.toToken = initialState.toToken;
|
|
591
|
-
state.toTokenAmount = initialState.toTokenAmount;
|
|
592
|
-
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
593
|
-
state.inputError = initialState.inputError;
|
|
594
|
-
state.loadingApprovalTransaction = initialState.loadingApprovalTransaction;
|
|
595
|
-
state.loadingBuildTransaction = initialState.loadingBuildTransaction;
|
|
596
|
-
state.loadingTransaction = initialState.loadingTransaction;
|
|
597
|
-
state.fetchError = initialState.fetchError;
|
|
598
|
-
state.transactionError = initialState.transactionError;
|
|
599
|
-
state.swapTransaction = initialState.swapTransaction;
|
|
600
|
-
state.approvalTransaction = initialState.approvalTransaction;
|
|
601
|
-
},
|
|
602
|
-
resetState() {
|
|
603
|
-
this.clearTokens();
|
|
604
|
-
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
605
|
-
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
606
|
-
state.networkPrice = initialState.networkPrice;
|
|
607
|
-
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
608
|
-
},
|
|
609
626
|
// -- Checks -------------------------------------------- //
|
|
610
627
|
hasInsufficientToken(sourceTokenAmount, sourceTokenAddress) {
|
|
611
|
-
const {
|
|
612
|
-
balances
|
|
613
|
-
} = ConnectionsController.state;
|
|
614
|
-
const networkToken = balances?.find(t => t.address === undefined);
|
|
615
|
-
const networkBalanceInUSD = networkToken ? NumberUtil.multiply(networkToken.quantity?.numeric ?? '0', networkToken.price).toString() : '0';
|
|
616
628
|
const isInsufficientSourceTokenForSwap = SwapCalculationUtil.isInsufficientSourceTokenForSwap(sourceTokenAmount, sourceTokenAddress, state.myTokensWithBalance);
|
|
617
629
|
let insufficientNetworkTokenForGas = true;
|
|
618
|
-
if (
|
|
630
|
+
if (AccountController.state.preferredAccountType === 'smartAccount') {
|
|
619
631
|
// Smart Accounts may pay gas in any ERC20 token
|
|
620
632
|
insufficientNetworkTokenForGas = false;
|
|
621
633
|
} else {
|
|
622
|
-
insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(networkBalanceInUSD, state.gasPriceInUSD);
|
|
634
|
+
insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(state.networkBalanceInUSD, state.gasPriceInUSD);
|
|
623
635
|
}
|
|
624
636
|
return insufficientNetworkTokenForGas || isInsufficientSourceTokenForSwap;
|
|
625
637
|
},
|