@reown/appkit-core-react-native 2.0.0-alpha.1 → 2.0.0-alpha.2
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/ApiController.js +16 -5
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/AssetController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +103 -111
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +1 -10
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionsController.js +263 -51
- package/lib/commonjs/controllers/ConnectionsController.js.map +1 -1
- 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 +6 -7
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/OnRampController.js +117 -53
- package/lib/commonjs/controllers/OnRampController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +9 -0
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/PublicStateController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +1 -22
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +100 -100
- package/lib/commonjs/controllers/SendController.js.map +1 -1
- package/lib/commonjs/controllers/SnackController.js +29 -5
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +106 -116
- package/lib/commonjs/controllers/SwapController.js.map +1 -1
- package/lib/commonjs/controllers/ThemeController.js.map +1 -1
- package/lib/commonjs/controllers/TransactionsController.js +23 -19
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
- package/lib/commonjs/index.js +0 -35
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils/ApiUtil.js.map +1 -1
- package/lib/commonjs/utils/AssetUtil.js +3 -14
- package/lib/commonjs/utils/AssetUtil.js.map +1 -1
- package/lib/commonjs/utils/ConstantsUtil.js +13 -425
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +13 -8
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/EventUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js +34 -10
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/RouterUtil.js.map +1 -1
- package/lib/commonjs/utils/StorageUtil.js +86 -92
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +2 -17
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -1
- package/lib/commonjs/utils/TypeUtil.js +25 -0
- package/lib/commonjs/utils/TypeUtil.js.map +1 -1
- package/lib/module/controllers/ApiController.js +18 -6
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/AssetController.js +2 -0
- package/lib/module/controllers/AssetController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +104 -110
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +3 -10
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectionsController.js +265 -51
- package/lib/module/controllers/ConnectionsController.js.map +1 -1
- package/lib/module/controllers/EnsController.js +4 -2
- package/lib/module/controllers/EnsController.js.map +1 -1
- package/lib/module/controllers/EventsController.js +3 -1
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +8 -7
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/OnRampController.js +118 -52
- package/lib/module/controllers/OnRampController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +11 -0
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/PublicStateController.js +2 -0
- package/lib/module/controllers/PublicStateController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +3 -22
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +99 -97
- package/lib/module/controllers/SendController.js.map +1 -1
- package/lib/module/controllers/SnackController.js +31 -5
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +108 -116
- package/lib/module/controllers/SwapController.js.map +1 -1
- package/lib/module/controllers/ThemeController.js +2 -0
- package/lib/module/controllers/ThemeController.js.map +1 -1
- package/lib/module/controllers/TransactionsController.js +23 -17
- package/lib/module/controllers/TransactionsController.js.map +1 -1
- package/lib/module/index.js +2 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/ApiUtil.js +2 -0
- package/lib/module/utils/ApiUtil.js.map +1 -1
- package/lib/module/utils/AssetUtil.js +5 -14
- package/lib/module/utils/AssetUtil.js.map +1 -1
- package/lib/module/utils/ConstantsUtil.js +15 -425
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +14 -6
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/EventUtil.js +2 -0
- package/lib/module/utils/EventUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js +36 -10
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/RouterUtil.js +2 -0
- package/lib/module/utils/RouterUtil.js.map +1 -1
- package/lib/module/utils/StorageUtil.js +89 -91
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +4 -17
- package/lib/module/utils/SwapApiUtil.js.map +1 -1
- package/lib/module/utils/SwapCalculationUtil.js +2 -0
- package/lib/module/utils/SwapCalculationUtil.js.map +1 -1
- package/lib/module/utils/TypeUtil.js +25 -1
- package/lib/module/utils/TypeUtil.js.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +2 -1
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +20 -13
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +3 -16
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionsController.d.ts +19 -17
- package/lib/typescript/controllers/ConnectionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/ModalController.d.ts +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/OnRampController.d.ts +3 -2
- package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +4 -1
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +4 -17
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts +5 -7
- 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 +11 -10
- package/lib/typescript/controllers/SwapController.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/index.d.ts +0 -5
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/AssetUtil.d.ts +2 -3
- package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
- package/lib/typescript/utils/ConstantsUtil.d.ts +6 -414
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +5 -4
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/StorageUtil.d.ts +11 -15
- 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 +54 -166
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +9 -23
- package/src/controllers/ApiController.ts +17 -4
- package/src/controllers/BlockchainApiController.ts +74 -119
- package/src/controllers/ConnectionController.ts +4 -27
- package/src/controllers/ConnectionsController.ts +329 -77
- package/src/controllers/EnsController.ts +2 -2
- package/src/controllers/EventsController.ts +1 -1
- package/src/controllers/ModalController.ts +7 -9
- package/src/controllers/OnRampController.ts +178 -81
- package/src/controllers/OptionsController.ts +14 -1
- package/src/controllers/RouterController.ts +4 -54
- package/src/controllers/SendController.ts +123 -112
- package/src/controllers/SnackController.ts +31 -5
- package/src/controllers/SwapController.ts +127 -144
- package/src/controllers/TransactionsController.ts +24 -18
- package/src/index.ts +0 -15
- package/src/utils/AssetUtil.ts +4 -18
- package/src/utils/ConstantsUtil.ts +14 -427
- package/src/utils/CoreHelperUtil.ts +30 -8
- package/src/utils/FetchUtil.ts +37 -10
- package/src/utils/StorageUtil.ts +165 -106
- package/src/utils/SwapApiUtil.ts +15 -38
- package/src/utils/TypeUtil.ts +65 -161
- package/lib/commonjs/controllers/AccountController.js +0 -93
- package/lib/commonjs/controllers/AccountController.js.map +0 -1
- package/lib/commonjs/controllers/ConnectorController.js +0 -50
- package/lib/commonjs/controllers/ConnectorController.js.map +0 -1
- package/lib/commonjs/controllers/NetworkController.js +0 -90
- package/lib/commonjs/controllers/NetworkController.js.map +0 -1
- package/lib/commonjs/controllers/WebviewController.js +0 -52
- package/lib/commonjs/controllers/WebviewController.js.map +0 -1
- package/lib/commonjs/utils/NetworkUtil.js +0 -46
- package/lib/commonjs/utils/NetworkUtil.js.map +0 -1
- package/lib/module/controllers/AccountController.js +0 -88
- package/lib/module/controllers/AccountController.js.map +0 -1
- package/lib/module/controllers/ConnectorController.js +0 -45
- package/lib/module/controllers/ConnectorController.js.map +0 -1
- package/lib/module/controllers/NetworkController.js +0 -85
- package/lib/module/controllers/NetworkController.js.map +0 -1
- package/lib/module/controllers/WebviewController.js +0 -47
- package/lib/module/controllers/WebviewController.js.map +0 -1
- package/lib/module/utils/NetworkUtil.js +0 -40
- package/lib/module/utils/NetworkUtil.js.map +0 -1
- package/lib/typescript/controllers/AccountController.d.ts +0 -33
- package/lib/typescript/controllers/AccountController.d.ts.map +0 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +0 -18
- package/lib/typescript/controllers/ConnectorController.d.ts.map +0 -1
- package/lib/typescript/controllers/NetworkController.d.ts +0 -34
- package/lib/typescript/controllers/NetworkController.d.ts.map +0 -1
- package/lib/typescript/controllers/WebviewController.d.ts +0 -21
- package/lib/typescript/controllers/WebviewController.d.ts.map +0 -1
- package/lib/typescript/utils/NetworkUtil.d.ts +0 -8
- package/lib/typescript/utils/NetworkUtil.d.ts.map +0 -1
- package/src/controllers/AccountController.ts +0 -128
- package/src/controllers/ConnectorController.ts +0 -64
- package/src/controllers/NetworkController.ts +0 -120
- package/src/controllers/WebviewController.ts +0 -63
- package/src/utils/NetworkUtil.ts +0 -33
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { subscribeKey as subKey } from 'valtio/utils';
|
|
2
2
|
import { proxy, subscribe as sub } from 'valtio';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
NumberUtil,
|
|
5
|
+
type CaipAddress,
|
|
6
|
+
type CaipNetworkId
|
|
7
|
+
} from '@reown/appkit-common-react-native';
|
|
4
8
|
|
|
5
9
|
import { ConstantsUtil } from '../utils/ConstantsUtil';
|
|
6
10
|
import { SwapApiUtil } from '../utils/SwapApiUtil';
|
|
@@ -10,8 +14,6 @@ import { SwapCalculationUtil } from '../utils/SwapCalculationUtil';
|
|
|
10
14
|
import { SnackController } from './SnackController';
|
|
11
15
|
import { RouterController } from './RouterController';
|
|
12
16
|
import type { SwapInputTarget, SwapTokenWithBalance } from '../utils/TypeUtil';
|
|
13
|
-
import { ConnectorController } from './ConnectorController';
|
|
14
|
-
import { AccountController } from './AccountController';
|
|
15
17
|
import { CoreHelperUtil } from '../utils/CoreHelperUtil';
|
|
16
18
|
import { TransactionsController } from './TransactionsController';
|
|
17
19
|
import { EventsController } from './EventsController';
|
|
@@ -43,8 +45,7 @@ class TransactionError extends Error {
|
|
|
43
45
|
|
|
44
46
|
export interface SwapControllerState {
|
|
45
47
|
// Loading states
|
|
46
|
-
|
|
47
|
-
initialized: boolean;
|
|
48
|
+
loadingTokens: boolean;
|
|
48
49
|
loadingPrices: boolean;
|
|
49
50
|
loadingQuote?: boolean;
|
|
50
51
|
loadingApprovalTransaction?: boolean;
|
|
@@ -67,7 +68,6 @@ export interface SwapControllerState {
|
|
|
67
68
|
toTokenAmount: string;
|
|
68
69
|
toTokenPriceInUSD: number;
|
|
69
70
|
networkPrice: string;
|
|
70
|
-
networkBalanceInUSD: string;
|
|
71
71
|
networkTokenSymbol: string;
|
|
72
72
|
inputError: string | undefined;
|
|
73
73
|
|
|
@@ -95,8 +95,7 @@ type StateKey = keyof SwapControllerState;
|
|
|
95
95
|
// -- State --------------------------------------------- //
|
|
96
96
|
const initialState: SwapControllerState = {
|
|
97
97
|
// Loading states
|
|
98
|
-
|
|
99
|
-
initialized: false,
|
|
98
|
+
loadingTokens: false,
|
|
100
99
|
loadingPrices: false,
|
|
101
100
|
loadingQuote: false,
|
|
102
101
|
loadingApprovalTransaction: false,
|
|
@@ -119,7 +118,6 @@ const initialState: SwapControllerState = {
|
|
|
119
118
|
toTokenAmount: '',
|
|
120
119
|
toTokenPriceInUSD: 0,
|
|
121
120
|
networkPrice: '0',
|
|
122
|
-
networkBalanceInUSD: '0',
|
|
123
121
|
networkTokenSymbol: '',
|
|
124
122
|
inputError: undefined,
|
|
125
123
|
|
|
@@ -157,7 +155,8 @@ export const SwapController = {
|
|
|
157
155
|
},
|
|
158
156
|
|
|
159
157
|
getParams() {
|
|
160
|
-
const { activeAddress, activeNamespace, activeNetwork } =
|
|
158
|
+
const { activeAddress, activeNamespace, activeNetwork, connection } =
|
|
159
|
+
ConnectionsController.state;
|
|
161
160
|
const address = CoreHelperUtil.getPlainAddress(activeAddress);
|
|
162
161
|
|
|
163
162
|
if (!activeNamespace || !activeNetwork) {
|
|
@@ -166,8 +165,6 @@ export const SwapController = {
|
|
|
166
165
|
|
|
167
166
|
const networkAddress: CaipAddress = `${activeNetwork.caipNetworkId}:${ConstantsUtil.NATIVE_TOKEN_ADDRESS[activeNamespace]}`;
|
|
168
167
|
|
|
169
|
-
const type = ConnectorController.state.connectedConnector;
|
|
170
|
-
|
|
171
168
|
if (!address) {
|
|
172
169
|
throw new Error('No address found to swap the tokens from.');
|
|
173
170
|
}
|
|
@@ -182,6 +179,7 @@ export const SwapController = {
|
|
|
182
179
|
|
|
183
180
|
return {
|
|
184
181
|
networkAddress,
|
|
182
|
+
network: activeNetwork,
|
|
185
183
|
fromAddress: address,
|
|
186
184
|
fromCaipAddress: activeAddress,
|
|
187
185
|
sourceTokenAddress: state.sourceToken?.address,
|
|
@@ -195,12 +193,12 @@ export const SwapController = {
|
|
|
195
193
|
invalidSourceTokenAmount,
|
|
196
194
|
availableToSwap:
|
|
197
195
|
activeAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
|
|
198
|
-
isAuthConnector:
|
|
196
|
+
isAuthConnector: !!connection?.properties?.provider
|
|
199
197
|
};
|
|
200
198
|
},
|
|
201
199
|
|
|
202
200
|
switchTokens() {
|
|
203
|
-
if (state.
|
|
201
|
+
if (state.loadingTokens) {
|
|
204
202
|
return;
|
|
205
203
|
}
|
|
206
204
|
|
|
@@ -225,41 +223,36 @@ export const SwapController = {
|
|
|
225
223
|
this.swapTokens();
|
|
226
224
|
},
|
|
227
225
|
|
|
228
|
-
resetState() {
|
|
229
|
-
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
230
|
-
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
231
|
-
state.initialized = initialState.initialized;
|
|
232
|
-
state.sourceToken = initialState.sourceToken;
|
|
233
|
-
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
234
|
-
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
235
|
-
state.toToken = initialState.toToken;
|
|
236
|
-
state.toTokenAmount = initialState.toTokenAmount;
|
|
237
|
-
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
238
|
-
state.networkPrice = initialState.networkPrice;
|
|
239
|
-
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
240
|
-
state.networkBalanceInUSD = initialState.networkBalanceInUSD;
|
|
241
|
-
state.inputError = initialState.inputError;
|
|
242
|
-
},
|
|
243
|
-
|
|
244
226
|
async fetchTokens() {
|
|
245
|
-
|
|
227
|
+
try {
|
|
228
|
+
const { networkAddress } = this.getParams();
|
|
246
229
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
230
|
+
state.loadingTokens = true;
|
|
231
|
+
await this.getTokenList();
|
|
232
|
+
await this.getNetworkTokenPrice();
|
|
233
|
+
await this.getMyTokensWithBalance();
|
|
250
234
|
|
|
251
|
-
|
|
235
|
+
const networkToken = state.tokens?.find(token => token.address === networkAddress);
|
|
252
236
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
237
|
+
if (networkToken) {
|
|
238
|
+
state.networkTokenSymbol = networkToken.symbol;
|
|
239
|
+
}
|
|
256
240
|
|
|
257
|
-
|
|
258
|
-
state.
|
|
259
|
-
|
|
241
|
+
// Set default source token if not set
|
|
242
|
+
if (!state.sourceToken && state.myTokensWithBalance?.length) {
|
|
243
|
+
const sourceToken =
|
|
244
|
+
state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
|
|
245
|
+
state.myTokensWithBalance?.[0];
|
|
260
246
|
|
|
261
|
-
|
|
262
|
-
|
|
247
|
+
this.setSourceToken(sourceToken);
|
|
248
|
+
this.setSourceTokenAmount('1');
|
|
249
|
+
}
|
|
250
|
+
} catch (error) {
|
|
251
|
+
SnackController.showError('Failed to initialize swap');
|
|
252
|
+
RouterController.goBack();
|
|
253
|
+
} finally {
|
|
254
|
+
state.loadingTokens = false;
|
|
255
|
+
}
|
|
263
256
|
},
|
|
264
257
|
|
|
265
258
|
async getTokenList() {
|
|
@@ -285,20 +278,23 @@ export const SwapController = {
|
|
|
285
278
|
}, {});
|
|
286
279
|
},
|
|
287
280
|
|
|
288
|
-
async getMyTokensWithBalance(forceUpdate?:
|
|
289
|
-
|
|
290
|
-
|
|
281
|
+
async getMyTokensWithBalance(forceUpdate?: CaipAddress[]) {
|
|
282
|
+
await ConnectionsController.fetchBalance(forceUpdate);
|
|
283
|
+
const swapBalances = SwapApiUtil.mapBalancesToSwapTokens(ConnectionsController.state.balances);
|
|
284
|
+
if (!swapBalances) {
|
|
291
285
|
return;
|
|
292
286
|
}
|
|
293
287
|
|
|
294
288
|
await this.getInitialGasPrice();
|
|
295
|
-
this.setBalances(
|
|
289
|
+
this.setBalances(swapBalances);
|
|
296
290
|
},
|
|
297
291
|
|
|
298
|
-
getFilteredPopularTokens() {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
292
|
+
getFilteredPopularTokens(balances?: SwapTokenWithBalance[]) {
|
|
293
|
+
if (!balances) {
|
|
294
|
+
return state.popularTokens;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return state.popularTokens?.filter(token => !balances.some(t => t.address === token.address));
|
|
302
298
|
},
|
|
303
299
|
|
|
304
300
|
setSourceToken(sourceToken: SwapTokenWithBalance | undefined) {
|
|
@@ -322,26 +318,10 @@ export const SwapController = {
|
|
|
322
318
|
}
|
|
323
319
|
},
|
|
324
320
|
|
|
325
|
-
async
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
state.initializing = true;
|
|
331
|
-
if (!state.initialized) {
|
|
332
|
-
try {
|
|
333
|
-
await this.fetchTokens();
|
|
334
|
-
state.initialized = true;
|
|
335
|
-
} catch (error) {
|
|
336
|
-
state.initialized = false;
|
|
337
|
-
SnackController.showError('Failed to initialize swap');
|
|
338
|
-
RouterController.goBack();
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
state.initializing = false;
|
|
342
|
-
},
|
|
321
|
+
async getAddressPrice(address: CaipAddress) {
|
|
322
|
+
const [namespace, chain] = address.split(':');
|
|
323
|
+
const networkId: CaipNetworkId = `${namespace}:${chain}`;
|
|
343
324
|
|
|
344
|
-
async getAddressPrice(address: string) {
|
|
345
325
|
const existPrice = state.tokensPriceMap[address];
|
|
346
326
|
|
|
347
327
|
if (existPrice) {
|
|
@@ -350,7 +330,8 @@ export const SwapController = {
|
|
|
350
330
|
|
|
351
331
|
const response = await BlockchainApiController.fetchTokenPrice({
|
|
352
332
|
projectId: OptionsController.state.projectId,
|
|
353
|
-
addresses: [address]
|
|
333
|
+
addresses: [address],
|
|
334
|
+
caipNetworkId: networkId
|
|
354
335
|
});
|
|
355
336
|
const fungibles = response?.fungibles || [];
|
|
356
337
|
const allTokens = [...(state.tokens || []), ...(state.myTokensWithBalance || [])];
|
|
@@ -365,10 +346,13 @@ export const SwapController = {
|
|
|
365
346
|
|
|
366
347
|
async getNetworkTokenPrice() {
|
|
367
348
|
const { networkAddress } = this.getParams();
|
|
349
|
+
const [namespace, chain] = networkAddress.split(':');
|
|
350
|
+
const networkId: CaipNetworkId = `${namespace}:${chain}`;
|
|
368
351
|
|
|
369
352
|
const response = await BlockchainApiController.fetchTokenPrice({
|
|
370
353
|
projectId: OptionsController.state.projectId,
|
|
371
|
-
addresses: [networkAddress]
|
|
354
|
+
addresses: [networkAddress],
|
|
355
|
+
caipNetworkId: networkId
|
|
372
356
|
});
|
|
373
357
|
|
|
374
358
|
const token = response?.fungibles?.[0];
|
|
@@ -404,26 +388,11 @@ export const SwapController = {
|
|
|
404
388
|
},
|
|
405
389
|
|
|
406
390
|
setBalances(balances: SwapTokenWithBalance[]) {
|
|
407
|
-
|
|
408
|
-
const caipNetwork = ConnectionsController.state.activeNetwork;
|
|
409
|
-
|
|
410
|
-
if (!caipNetwork) {
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
const networkToken = balances.find(token => token.address === networkAddress);
|
|
391
|
+
state.myTokensWithBalance = balances;
|
|
415
392
|
|
|
416
393
|
balances.forEach(token => {
|
|
417
394
|
state.tokensPriceMap[token.address] = token.price || 0;
|
|
418
395
|
});
|
|
419
|
-
|
|
420
|
-
state.myTokensWithBalance = balances.filter(
|
|
421
|
-
token => token.address?.startsWith(caipNetwork.caipNetworkId)
|
|
422
|
-
);
|
|
423
|
-
|
|
424
|
-
state.networkBalanceInUSD = networkToken
|
|
425
|
-
? NumberUtil.multiply(networkToken.quantity.numeric, networkToken.price).toString()
|
|
426
|
-
: '0';
|
|
427
396
|
},
|
|
428
397
|
|
|
429
398
|
setToToken(toToken: SwapTokenWithBalance | undefined) {
|
|
@@ -445,7 +414,7 @@ export const SwapController = {
|
|
|
445
414
|
: '';
|
|
446
415
|
},
|
|
447
416
|
|
|
448
|
-
async setTokenPrice(address:
|
|
417
|
+
async setTokenPrice(address: CaipAddress, target: SwapInputTarget) {
|
|
449
418
|
let price = state.tokensPriceMap[address] || 0;
|
|
450
419
|
|
|
451
420
|
if (!price) {
|
|
@@ -495,11 +464,11 @@ export const SwapController = {
|
|
|
495
464
|
amount: amountDecimal.toString()
|
|
496
465
|
});
|
|
497
466
|
|
|
498
|
-
state.loadingQuote = false;
|
|
499
|
-
|
|
500
467
|
const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
|
|
501
468
|
|
|
502
469
|
if (!quoteToAmount) {
|
|
470
|
+
state.loadingQuote = false;
|
|
471
|
+
|
|
503
472
|
return;
|
|
504
473
|
}
|
|
505
474
|
|
|
@@ -522,6 +491,7 @@ export const SwapController = {
|
|
|
522
491
|
}
|
|
523
492
|
} catch (error) {
|
|
524
493
|
SnackController.showError('Failed to get swap quote');
|
|
494
|
+
} finally {
|
|
525
495
|
state.loadingQuote = false;
|
|
526
496
|
}
|
|
527
497
|
},
|
|
@@ -694,22 +664,10 @@ export const SwapController = {
|
|
|
694
664
|
},
|
|
695
665
|
|
|
696
666
|
async sendTransactionForApproval(data: TransactionParams) {
|
|
697
|
-
const { fromAddress,
|
|
698
|
-
|
|
667
|
+
const { fromAddress, network } = this.getParams();
|
|
699
668
|
state.loadingApprovalTransaction = true;
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
if (isAuthConnector) {
|
|
703
|
-
RouterController.pushTransactionStack({
|
|
704
|
-
view: null,
|
|
705
|
-
goBack: true,
|
|
706
|
-
onSuccess() {
|
|
707
|
-
SnackController.showLoading(approveLimitMessage);
|
|
708
|
-
}
|
|
709
|
-
});
|
|
710
|
-
} else {
|
|
711
|
-
SnackController.showLoading(approveLimitMessage);
|
|
712
|
-
}
|
|
669
|
+
|
|
670
|
+
SnackController.showLoading('Approve limit increase in your wallet');
|
|
713
671
|
|
|
714
672
|
try {
|
|
715
673
|
await ConnectionsController.sendTransaction({
|
|
@@ -718,18 +676,20 @@ export const SwapController = {
|
|
|
718
676
|
data: data.data as `0x${string}`,
|
|
719
677
|
value: BigInt(data.value),
|
|
720
678
|
gasPrice: BigInt(data.gasPrice),
|
|
721
|
-
chainNamespace: ConnectionsController.state.activeNamespace
|
|
679
|
+
chainNamespace: ConnectionsController.state.activeNamespace,
|
|
680
|
+
network
|
|
722
681
|
});
|
|
723
682
|
|
|
724
683
|
await this.swapTokens();
|
|
725
684
|
await this.getTransaction();
|
|
726
685
|
state.approvalTransaction = undefined;
|
|
727
|
-
state.loadingApprovalTransaction = false;
|
|
728
686
|
} catch (err) {
|
|
729
687
|
const error = err as TransactionError;
|
|
730
688
|
state.transactionError = error?.shortMessage as unknown as string;
|
|
731
|
-
|
|
689
|
+
|
|
732
690
|
SnackController.showError(error?.shortMessage ?? 'Transaction error');
|
|
691
|
+
} finally {
|
|
692
|
+
state.loadingApprovalTransaction = false;
|
|
733
693
|
}
|
|
734
694
|
},
|
|
735
695
|
|
|
@@ -737,32 +697,19 @@ export const SwapController = {
|
|
|
737
697
|
if (!data) {
|
|
738
698
|
return undefined;
|
|
739
699
|
}
|
|
740
|
-
const { fromAddress,
|
|
700
|
+
const { fromAddress, isAuthConnector, network } = this.getParams();
|
|
741
701
|
|
|
742
702
|
state.loadingTransaction = true;
|
|
743
703
|
|
|
744
|
-
const
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
const snackbarSuccessMessage = `Swapped ${state.sourceToken
|
|
748
|
-
?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
|
|
749
|
-
?.symbol}`;
|
|
750
|
-
|
|
751
|
-
if (isAuthConnector) {
|
|
752
|
-
RouterController.pushTransactionStack({
|
|
753
|
-
view: 'Account',
|
|
754
|
-
goBack: false,
|
|
755
|
-
onSuccess() {
|
|
756
|
-
SnackController.showLoading(snackbarPendingMessage);
|
|
757
|
-
SwapController.resetState();
|
|
758
|
-
}
|
|
759
|
-
});
|
|
760
|
-
} else {
|
|
761
|
-
SnackController.showLoading('Confirm transaction in your wallet');
|
|
762
|
-
}
|
|
704
|
+
const snackbarSuccessMessage = `Swapped ${state.sourceToken?.symbol} to ${state.toToken?.symbol}`;
|
|
705
|
+
|
|
706
|
+
SnackController.showLoading('Confirm transaction in your wallet');
|
|
763
707
|
|
|
764
708
|
try {
|
|
765
|
-
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].
|
|
709
|
+
const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].filter(
|
|
710
|
+
Boolean
|
|
711
|
+
) as CaipAddress[];
|
|
712
|
+
|
|
766
713
|
const transactionHash = await ConnectionsController.sendTransaction({
|
|
767
714
|
address: fromAddress as `0x${string}`,
|
|
768
715
|
to: data.to as `0x${string}`,
|
|
@@ -770,11 +717,13 @@ export const SwapController = {
|
|
|
770
717
|
gas: data.gas,
|
|
771
718
|
gasPrice: BigInt(data.gasPrice),
|
|
772
719
|
value: data.value,
|
|
773
|
-
chainNamespace: ConnectionsController.state.activeNamespace
|
|
720
|
+
chainNamespace: ConnectionsController.state.activeNamespace,
|
|
721
|
+
network
|
|
774
722
|
});
|
|
775
723
|
|
|
776
724
|
state.loadingTransaction = false;
|
|
777
|
-
|
|
725
|
+
|
|
726
|
+
SnackController.showSuccess(snackbarSuccessMessage, true);
|
|
778
727
|
EventsController.sendEvent({
|
|
779
728
|
type: 'track',
|
|
780
729
|
event: 'SWAP_SUCCESS',
|
|
@@ -784,20 +733,17 @@ export const SwapController = {
|
|
|
784
733
|
swapToToken: this.state.toToken?.symbol || '',
|
|
785
734
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
786
735
|
swapToAmount: this.state.toTokenAmount || '',
|
|
787
|
-
isSmartAccount:
|
|
736
|
+
isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
|
|
788
737
|
}
|
|
789
738
|
});
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
if (!isAuthConnector) {
|
|
793
|
-
RouterController.replace('AccountDefault');
|
|
794
|
-
}
|
|
795
|
-
|
|
739
|
+
RouterController.replace(isAuthConnector ? 'Account' : 'AccountDefault');
|
|
740
|
+
SwapController.clearTokens();
|
|
796
741
|
SwapController.getMyTokensWithBalance(forceUpdateAddresses);
|
|
797
|
-
AccountController.fetchTokenBalance();
|
|
798
742
|
|
|
799
743
|
setTimeout(() => {
|
|
800
|
-
|
|
744
|
+
if (ConnectionsController.state.activeAddress) {
|
|
745
|
+
TransactionsController.fetchTransactions(ConnectionsController.state.activeAddress, true);
|
|
746
|
+
}
|
|
801
747
|
}, 5000);
|
|
802
748
|
|
|
803
749
|
return transactionHash;
|
|
@@ -816,7 +762,7 @@ export const SwapController = {
|
|
|
816
762
|
swapToToken: this.state.toToken?.symbol || '',
|
|
817
763
|
swapFromAmount: this.state.sourceTokenAmount || '',
|
|
818
764
|
swapToAmount: this.state.toTokenAmount || '',
|
|
819
|
-
isSmartAccount:
|
|
765
|
+
isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
|
|
820
766
|
}
|
|
821
767
|
});
|
|
822
768
|
|
|
@@ -824,8 +770,45 @@ export const SwapController = {
|
|
|
824
770
|
}
|
|
825
771
|
},
|
|
826
772
|
|
|
773
|
+
clearTransactionLoaders() {
|
|
774
|
+
state.loadingApprovalTransaction = false;
|
|
775
|
+
state.loadingBuildTransaction = false;
|
|
776
|
+
state.loadingTransaction = false;
|
|
777
|
+
},
|
|
778
|
+
|
|
779
|
+
clearTokens() {
|
|
780
|
+
state.sourceToken = initialState.sourceToken;
|
|
781
|
+
state.sourceTokenAmount = initialState.sourceTokenAmount;
|
|
782
|
+
state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
|
|
783
|
+
state.toToken = initialState.toToken;
|
|
784
|
+
state.toTokenAmount = initialState.toTokenAmount;
|
|
785
|
+
state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
|
|
786
|
+
state.inputError = initialState.inputError;
|
|
787
|
+
state.loadingApprovalTransaction = initialState.loadingApprovalTransaction;
|
|
788
|
+
state.loadingBuildTransaction = initialState.loadingBuildTransaction;
|
|
789
|
+
state.loadingTransaction = initialState.loadingTransaction;
|
|
790
|
+
state.fetchError = initialState.fetchError;
|
|
791
|
+
state.transactionError = initialState.transactionError;
|
|
792
|
+
state.swapTransaction = initialState.swapTransaction;
|
|
793
|
+
state.approvalTransaction = initialState.approvalTransaction;
|
|
794
|
+
},
|
|
795
|
+
|
|
796
|
+
resetState() {
|
|
797
|
+
this.clearTokens();
|
|
798
|
+
state.myTokensWithBalance = initialState.myTokensWithBalance;
|
|
799
|
+
state.tokensPriceMap = initialState.tokensPriceMap;
|
|
800
|
+
state.networkPrice = initialState.networkPrice;
|
|
801
|
+
state.networkTokenSymbol = initialState.networkTokenSymbol;
|
|
802
|
+
},
|
|
803
|
+
|
|
827
804
|
// -- Checks -------------------------------------------- //
|
|
828
805
|
hasInsufficientToken(sourceTokenAmount: string, sourceTokenAddress: string) {
|
|
806
|
+
const { balances } = ConnectionsController.state;
|
|
807
|
+
const networkToken = balances?.find(t => t.address === undefined);
|
|
808
|
+
const networkBalanceInUSD = networkToken
|
|
809
|
+
? NumberUtil.multiply(networkToken.quantity?.numeric ?? '0', networkToken.price).toString()
|
|
810
|
+
: '0';
|
|
811
|
+
|
|
829
812
|
const isInsufficientSourceTokenForSwap = SwapCalculationUtil.isInsufficientSourceTokenForSwap(
|
|
830
813
|
sourceTokenAmount,
|
|
831
814
|
sourceTokenAddress,
|
|
@@ -833,12 +816,12 @@ export const SwapController = {
|
|
|
833
816
|
);
|
|
834
817
|
|
|
835
818
|
let insufficientNetworkTokenForGas = true;
|
|
836
|
-
if (
|
|
819
|
+
if (ConnectionsController.state.accountType === 'smartAccount') {
|
|
837
820
|
// Smart Accounts may pay gas in any ERC20 token
|
|
838
821
|
insufficientNetworkTokenForGas = false;
|
|
839
822
|
} else {
|
|
840
823
|
insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(
|
|
841
|
-
|
|
824
|
+
networkBalanceInUSD,
|
|
842
825
|
state.gasPriceInUSD
|
|
843
826
|
);
|
|
844
827
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { Transaction } from '@reown/appkit-common-react-native';
|
|
2
|
-
import { proxy, subscribe as sub } from 'valtio
|
|
1
|
+
import type { CaipAddress, Transaction } from '@reown/appkit-common-react-native';
|
|
2
|
+
import { proxy, subscribe as sub } from 'valtio';
|
|
3
3
|
import { OptionsController } from './OptionsController';
|
|
4
4
|
import { EventsController } from './EventsController';
|
|
5
5
|
import { SnackController } from './SnackController';
|
|
6
6
|
import { BlockchainApiController } from './BlockchainApiController';
|
|
7
|
-
import { AccountController } from './AccountController';
|
|
8
7
|
import { ConnectionsController } from './ConnectionsController';
|
|
9
8
|
|
|
10
9
|
// -- Types --------------------------------------------- //
|
|
@@ -34,22 +33,29 @@ export const TransactionsController = {
|
|
|
34
33
|
return sub(state, () => callback(state));
|
|
35
34
|
},
|
|
36
35
|
|
|
37
|
-
async fetchTransactions(accountAddress
|
|
38
|
-
|
|
36
|
+
async fetchTransactions(accountAddress: CaipAddress, reset?: boolean) {
|
|
37
|
+
try {
|
|
38
|
+
const { projectId } = OptionsController.state;
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
if (!projectId || !accountAddress) {
|
|
41
|
+
throw new Error("Transactions can't be fetched without a projectId and an accountAddress");
|
|
42
|
+
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
state.loading = true;
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
if (reset) {
|
|
47
|
+
state.next = undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const [namespace, chain, address] = accountAddress?.split(':') ?? [];
|
|
51
|
+
|
|
52
|
+
if (!namespace || !chain || !address) {
|
|
53
|
+
throw new Error('Invalid address');
|
|
54
|
+
}
|
|
49
55
|
|
|
50
|
-
try {
|
|
51
56
|
const response = await BlockchainApiController.fetchTransactions({
|
|
52
|
-
account:
|
|
57
|
+
account: address,
|
|
58
|
+
chainId: `${namespace}:${chain}`,
|
|
53
59
|
projectId,
|
|
54
60
|
cursor: state.next
|
|
55
61
|
});
|
|
@@ -72,10 +78,10 @@ export const TransactionsController = {
|
|
|
72
78
|
type: 'track',
|
|
73
79
|
event: 'ERROR_FETCH_TRANSACTIONS',
|
|
74
80
|
properties: {
|
|
75
|
-
address: accountAddress,
|
|
76
|
-
projectId,
|
|
81
|
+
address: accountAddress ?? '',
|
|
82
|
+
projectId: OptionsController.state.projectId,
|
|
77
83
|
cursor: state.next,
|
|
78
|
-
isSmartAccount:
|
|
84
|
+
isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
|
|
79
85
|
}
|
|
80
86
|
});
|
|
81
87
|
SnackController.showError('Failed to fetch transactions');
|
|
@@ -133,7 +139,7 @@ export const TransactionsController = {
|
|
|
133
139
|
state.next = undefined;
|
|
134
140
|
},
|
|
135
141
|
|
|
136
|
-
|
|
142
|
+
resetState() {
|
|
137
143
|
state.transactions = [];
|
|
138
144
|
state.loading = false;
|
|
139
145
|
state.empty = false;
|
package/src/index.ts
CHANGED
|
@@ -7,14 +7,6 @@ export {
|
|
|
7
7
|
|
|
8
8
|
export { RouterController, type RouterControllerState } from './controllers/RouterController';
|
|
9
9
|
|
|
10
|
-
export { AccountController, type AccountControllerState } from './controllers/AccountController';
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
NetworkController,
|
|
14
|
-
type NetworkControllerClient,
|
|
15
|
-
type NetworkControllerState
|
|
16
|
-
} from './controllers/NetworkController';
|
|
17
|
-
|
|
18
10
|
export {
|
|
19
11
|
ConnectionController,
|
|
20
12
|
type ConnectionControllerClient,
|
|
@@ -26,11 +18,6 @@ export {
|
|
|
26
18
|
type ConnectionsControllerState
|
|
27
19
|
} from './controllers/ConnectionsController';
|
|
28
20
|
|
|
29
|
-
export {
|
|
30
|
-
ConnectorController,
|
|
31
|
-
type ConnectorControllerState
|
|
32
|
-
} from './controllers/ConnectorController';
|
|
33
|
-
|
|
34
21
|
export { SnackController, type SnackControllerState } from './controllers/SnackController';
|
|
35
22
|
|
|
36
23
|
export { ApiController, type ApiControllerState } from './controllers/ApiController';
|
|
@@ -62,7 +49,6 @@ export {
|
|
|
62
49
|
export { SendController, type SendControllerState } from './controllers/SendController';
|
|
63
50
|
|
|
64
51
|
export { OnRampController, type OnRampControllerState } from './controllers/OnRampController';
|
|
65
|
-
export { WebviewController, type WebviewControllerState } from './controllers/WebviewController';
|
|
66
52
|
|
|
67
53
|
// -- Utils -------------------------------------------------------------------
|
|
68
54
|
export { ApiUtil } from './utils/ApiUtil';
|
|
@@ -72,6 +58,5 @@ export { CoreHelperUtil } from './utils/CoreHelperUtil';
|
|
|
72
58
|
export { StorageUtil } from './utils/StorageUtil';
|
|
73
59
|
export { EventUtil } from './utils/EventUtil';
|
|
74
60
|
export { RouterUtil } from './utils/RouterUtil';
|
|
75
|
-
export { NetworkUtil } from './utils/NetworkUtil';
|
|
76
61
|
|
|
77
62
|
export type * from './utils/TypeUtil';
|
package/src/utils/AssetUtil.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AssetController } from '../controllers/AssetController';
|
|
2
|
-
import type {
|
|
2
|
+
import type { WcWallet } from './TypeUtil';
|
|
3
3
|
|
|
4
4
|
export const AssetUtil = {
|
|
5
5
|
getWalletImage(wallet?: WcWallet) {
|
|
@@ -14,23 +14,9 @@ export const AssetUtil = {
|
|
|
14
14
|
return undefined;
|
|
15
15
|
},
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (networkId) {
|
|
21
|
-
return AssetController.state.networkImages[networkId];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return undefined;
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
getConnectorImage(connector?: Connector) {
|
|
28
|
-
if (connector?.imageUrl) {
|
|
29
|
-
return connector.imageUrl;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (connector?.imageId) {
|
|
33
|
-
return AssetController.state.connectorImages[connector.imageId];
|
|
17
|
+
getConnectorImage(imageId?: string) {
|
|
18
|
+
if (imageId) {
|
|
19
|
+
return AssetController.state.connectorImages[imageId];
|
|
34
20
|
}
|
|
35
21
|
|
|
36
22
|
return undefined;
|