@reown/appkit-core-react-native 0.0.0-feat-multi-social-20250714211631 → 0.0.0-feat-onramp-20250718185718

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/lib/commonjs/controllers/AccountController.js +17 -20
  2. package/lib/commonjs/controllers/AccountController.js.map +1 -1
  3. package/lib/commonjs/controllers/ApiController.js +15 -17
  4. package/lib/commonjs/controllers/ApiController.js.map +1 -1
  5. package/lib/commonjs/controllers/BlockchainApiController.js +29 -110
  6. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  7. package/lib/commonjs/controllers/ConnectionController.js +8 -12
  8. package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
  9. package/lib/commonjs/controllers/ConnectorController.js +49 -0
  10. package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
  11. package/lib/commonjs/controllers/EnsController.js +4 -4
  12. package/lib/commonjs/controllers/EnsController.js.map +1 -1
  13. package/lib/commonjs/controllers/EventsController.js +4 -4
  14. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  15. package/lib/commonjs/controllers/ModalController.js +2 -2
  16. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  17. package/lib/commonjs/controllers/OnRampController.js +60 -20
  18. package/lib/commonjs/controllers/OnRampController.js.map +1 -1
  19. package/lib/commonjs/controllers/OptionsController.js +3 -8
  20. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  21. package/lib/commonjs/controllers/RouterController.js +22 -1
  22. package/lib/commonjs/controllers/RouterController.js.map +1 -1
  23. package/lib/commonjs/controllers/SendController.js +33 -34
  24. package/lib/commonjs/controllers/SendController.js.map +1 -1
  25. package/lib/commonjs/controllers/SnackController.js +5 -29
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  27. package/lib/commonjs/controllers/SwapController.js +148 -136
  28. package/lib/commonjs/controllers/SwapController.js.map +1 -1
  29. package/lib/commonjs/controllers/ThemeController.js +1 -9
  30. package/lib/commonjs/controllers/ThemeController.js.map +1 -1
  31. package/lib/commonjs/controllers/TransactionsController.js +21 -25
  32. package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
  33. package/lib/commonjs/controllers/WebviewController.js +52 -0
  34. package/lib/commonjs/controllers/WebviewController.js.map +1 -0
  35. package/lib/commonjs/index.js +24 -3
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/utils/AssetUtil.js +12 -8
  38. package/lib/commonjs/utils/AssetUtil.js.map +1 -1
  39. package/lib/commonjs/utils/ConnectionUtil.js +33 -0
  40. package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
  41. package/lib/commonjs/utils/ConstantsUtil.js +8 -537
  42. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  43. package/lib/commonjs/utils/CoreHelperUtil.js +4 -4
  44. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  45. package/lib/commonjs/utils/FetchUtil.js +28 -9
  46. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  47. package/lib/commonjs/utils/NetworkUtil.js +46 -0
  48. package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
  49. package/lib/commonjs/utils/StorageUtil.js +42 -51
  50. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  51. package/lib/commonjs/utils/SwapApiUtil.js +21 -15
  52. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
  53. package/lib/module/controllers/AccountController.js +17 -20
  54. package/lib/module/controllers/AccountController.js.map +1 -1
  55. package/lib/module/controllers/ApiController.js +15 -16
  56. package/lib/module/controllers/ApiController.js.map +1 -1
  57. package/lib/module/controllers/BlockchainApiController.js +29 -110
  58. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  59. package/lib/module/controllers/ConnectionController.js +8 -12
  60. package/lib/module/controllers/ConnectionController.js.map +1 -1
  61. package/lib/module/controllers/ConnectorController.js +44 -0
  62. package/lib/module/controllers/ConnectorController.js.map +1 -0
  63. package/lib/module/controllers/EnsController.js +2 -2
  64. package/lib/module/controllers/EnsController.js.map +1 -1
  65. package/lib/module/controllers/EventsController.js +1 -1
  66. package/lib/module/controllers/EventsController.js.map +1 -1
  67. package/lib/module/controllers/ModalController.js +2 -2
  68. package/lib/module/controllers/ModalController.js.map +1 -1
  69. package/lib/module/controllers/OnRampController.js +60 -20
  70. package/lib/module/controllers/OnRampController.js.map +1 -1
  71. package/lib/module/controllers/OptionsController.js +3 -8
  72. package/lib/module/controllers/OptionsController.js.map +1 -1
  73. package/lib/module/controllers/RouterController.js +22 -1
  74. package/lib/module/controllers/RouterController.js.map +1 -1
  75. package/lib/module/controllers/SendController.js +30 -31
  76. package/lib/module/controllers/SendController.js.map +1 -1
  77. package/lib/module/controllers/SnackController.js +5 -29
  78. package/lib/module/controllers/SnackController.js.map +1 -1
  79. package/lib/module/controllers/SwapController.js +148 -136
  80. package/lib/module/controllers/SwapController.js.map +1 -1
  81. package/lib/module/controllers/ThemeController.js +1 -9
  82. package/lib/module/controllers/ThemeController.js.map +1 -1
  83. package/lib/module/controllers/TransactionsController.js +19 -23
  84. package/lib/module/controllers/TransactionsController.js.map +1 -1
  85. package/lib/module/controllers/WebviewController.js +47 -0
  86. package/lib/module/controllers/WebviewController.js.map +1 -0
  87. package/lib/module/index.js +4 -1
  88. package/lib/module/index.js.map +1 -1
  89. package/lib/module/utils/AssetUtil.js +12 -8
  90. package/lib/module/utils/AssetUtil.js.map +1 -1
  91. package/lib/module/utils/ConnectionUtil.js +27 -0
  92. package/lib/module/utils/ConnectionUtil.js.map +1 -0
  93. package/lib/module/utils/ConstantsUtil.js +8 -537
  94. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  95. package/lib/module/utils/CoreHelperUtil.js +4 -4
  96. package/lib/module/utils/CoreHelperUtil.js.map +1 -1
  97. package/lib/module/utils/FetchUtil.js +28 -9
  98. package/lib/module/utils/FetchUtil.js.map +1 -1
  99. package/lib/module/utils/NetworkUtil.js +40 -0
  100. package/lib/module/utils/NetworkUtil.js.map +1 -0
  101. package/lib/module/utils/StorageUtil.js +42 -51
  102. package/lib/module/utils/StorageUtil.js.map +1 -1
  103. package/lib/module/utils/SwapApiUtil.js +21 -15
  104. package/lib/module/utils/SwapApiUtil.js.map +1 -1
  105. package/lib/typescript/controllers/AccountController.d.ts +4 -4
  106. package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
  107. package/lib/typescript/controllers/ApiController.d.ts +1 -1
  108. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  109. package/lib/typescript/controllers/BlockchainApiController.d.ts +4 -16
  110. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  111. package/lib/typescript/controllers/ConnectionController.d.ts +2 -2
  112. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
  113. package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
  114. package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
  115. package/lib/typescript/controllers/ModalController.d.ts +1 -1
  116. package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
  117. package/lib/typescript/controllers/NetworkController.d.ts +1 -1
  118. package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
  119. package/lib/typescript/controllers/OnRampController.d.ts +3 -1
  120. package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
  121. package/lib/typescript/controllers/OptionsController.d.ts +2 -5
  122. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  123. package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
  124. package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
  125. package/lib/typescript/controllers/RouterController.d.ts +15 -4
  126. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  127. package/lib/typescript/controllers/SendController.d.ts.map +1 -1
  128. package/lib/typescript/controllers/SnackController.d.ts +3 -3
  129. package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
  130. package/lib/typescript/controllers/SwapController.d.ts +9 -9
  131. package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
  132. package/lib/typescript/controllers/ThemeController.d.ts +1 -1
  133. package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
  134. package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
  135. package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
  136. package/lib/typescript/controllers/WebviewController.d.ts +21 -0
  137. package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
  138. package/lib/typescript/index.d.ts +4 -1
  139. package/lib/typescript/index.d.ts.map +1 -1
  140. package/lib/typescript/utils/AssetUtil.d.ts +3 -3
  141. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
  142. package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
  143. package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
  144. package/lib/typescript/utils/ConstantsUtil.d.ts +1 -421
  145. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  146. package/lib/typescript/utils/CoreHelperUtil.d.ts +3 -3
  147. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  148. package/lib/typescript/utils/FetchUtil.d.ts +1 -1
  149. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  150. package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
  151. package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
  152. package/lib/typescript/utils/StorageUtil.d.ts +7 -14
  153. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  154. package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
  155. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
  156. package/lib/typescript/utils/TypeUtil.d.ts +159 -24
  157. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
  158. package/package.json +4 -4
  159. package/src/controllers/AccountController.ts +27 -23
  160. package/src/controllers/ApiController.ts +9 -15
  161. package/src/controllers/BlockchainApiController.ts +32 -145
  162. package/src/controllers/ConnectionController.ts +12 -14
  163. package/src/controllers/ConnectorController.ts +63 -0
  164. package/src/controllers/EnsController.ts +2 -2
  165. package/src/controllers/EventsController.ts +1 -1
  166. package/src/controllers/ModalController.ts +3 -4
  167. package/src/controllers/NetworkController.ts +1 -1
  168. package/src/controllers/OnRampController.ts +91 -32
  169. package/src/controllers/OptionsController.ts +13 -14
  170. package/src/controllers/PublicStateController.ts +1 -1
  171. package/src/controllers/RouterController.ts +53 -5
  172. package/src/controllers/SendController.ts +30 -39
  173. package/src/controllers/SnackController.ts +5 -31
  174. package/src/controllers/SwapController.ts +178 -155
  175. package/src/controllers/ThemeController.ts +2 -11
  176. package/src/controllers/TransactionsController.ts +20 -26
  177. package/src/controllers/WebviewController.ts +63 -0
  178. package/src/index.ts +6 -3
  179. package/src/utils/AssetUtil.ts +14 -8
  180. package/src/utils/ConnectionUtil.ts +27 -0
  181. package/src/utils/ConstantsUtil.ts +8 -542
  182. package/src/utils/CoreHelperUtil.ts +7 -15
  183. package/src/utils/FetchUtil.ts +31 -10
  184. package/src/utils/NetworkUtil.ts +33 -0
  185. package/src/utils/StorageUtil.ts +48 -60
  186. package/src/utils/SwapApiUtil.ts +38 -27
  187. package/src/utils/TypeUtil.ts +160 -26
  188. package/lib/commonjs/controllers/ConnectionsController.js +0 -383
  189. package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
  190. package/lib/module/controllers/ConnectionsController.js +0 -378
  191. package/lib/module/controllers/ConnectionsController.js.map +0 -1
  192. package/lib/typescript/controllers/ConnectionsController.d.ts +0 -52
  193. package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
  194. package/src/controllers/ConnectionsController.ts +0 -503
@@ -1,19 +1,22 @@
1
1
  import { subscribeKey as subKey } from 'valtio/utils';
2
2
  import { proxy, subscribe as sub } from 'valtio';
3
- import { NumberUtil, type CaipAddress } from '@reown/appkit-common-react-native';
3
+ import { NumberUtil } from '@reown/appkit-common-react-native';
4
4
 
5
5
  import { ConstantsUtil } from '../utils/ConstantsUtil';
6
6
  import { SwapApiUtil } from '../utils/SwapApiUtil';
7
+ import { NetworkController } from './NetworkController';
7
8
  import { BlockchainApiController } from './BlockchainApiController';
8
9
  import { OptionsController } from './OptionsController';
9
10
  import { SwapCalculationUtil } from '../utils/SwapCalculationUtil';
10
11
  import { SnackController } from './SnackController';
11
12
  import { RouterController } from './RouterController';
12
13
  import type { SwapInputTarget, SwapTokenWithBalance } from '../utils/TypeUtil';
14
+ import { ConnectorController } from './ConnectorController';
15
+ import { AccountController } from './AccountController';
13
16
  import { CoreHelperUtil } from '../utils/CoreHelperUtil';
17
+ import { ConnectionController } from './ConnectionController';
14
18
  import { TransactionsController } from './TransactionsController';
15
19
  import { EventsController } from './EventsController';
16
- import { ConnectionsController } from './ConnectionsController';
17
20
 
18
21
  // -- Constants ---------------------------------------- //
19
22
  export const INITIAL_GAS_LIMIT = 150000;
@@ -41,7 +44,8 @@ class TransactionError extends Error {
41
44
 
42
45
  export interface SwapControllerState {
43
46
  // Loading states
44
- loadingTokens: boolean;
47
+ initializing: boolean;
48
+ initialized: boolean;
45
49
  loadingPrices: boolean;
46
50
  loadingQuote?: boolean;
47
51
  loadingApprovalTransaction?: boolean;
@@ -64,6 +68,7 @@ export interface SwapControllerState {
64
68
  toTokenAmount: string;
65
69
  toTokenPriceInUSD: number;
66
70
  networkPrice: string;
71
+ networkBalanceInUSD: string;
67
72
  networkTokenSymbol: string;
68
73
  inputError: string | undefined;
69
74
 
@@ -91,7 +96,8 @@ type StateKey = keyof SwapControllerState;
91
96
  // -- State --------------------------------------------- //
92
97
  const initialState: SwapControllerState = {
93
98
  // Loading states
94
- loadingTokens: false,
99
+ initializing: false,
100
+ initialized: false,
95
101
  loadingPrices: false,
96
102
  loadingQuote: false,
97
103
  loadingApprovalTransaction: false,
@@ -114,6 +120,7 @@ const initialState: SwapControllerState = {
114
120
  toTokenAmount: '',
115
121
  toTokenPriceInUSD: 0,
116
122
  networkPrice: '0',
123
+ networkBalanceInUSD: '0',
117
124
  networkTokenSymbol: '',
118
125
  inputError: undefined,
119
126
 
@@ -151,15 +158,10 @@ export const SwapController = {
151
158
  },
152
159
 
153
160
  getParams() {
154
- const { activeAddress, activeNamespace, activeNetwork, connection } =
155
- ConnectionsController.state;
156
- const address = CoreHelperUtil.getPlainAddress(activeAddress);
157
-
158
- if (!activeNamespace || !activeNetwork) {
159
- throw new Error('No active namespace or network found to swap the tokens from.');
160
- }
161
-
162
- const networkAddress: CaipAddress = `${activeNetwork.caipNetworkId}:${ConstantsUtil.NATIVE_TOKEN_ADDRESS[activeNamespace]}`;
161
+ const caipAddress = AccountController.state.caipAddress;
162
+ const address = CoreHelperUtil.getPlainAddress(caipAddress);
163
+ const networkAddress = NetworkController.getActiveNetworkTokenAddress();
164
+ const type = ConnectorController.state.connectedConnector;
163
165
 
164
166
  if (!address) {
165
167
  throw new Error('No address found to swap the tokens from.');
@@ -176,7 +178,7 @@ export const SwapController = {
176
178
  return {
177
179
  networkAddress,
178
180
  fromAddress: address,
179
- fromCaipAddress: activeAddress,
181
+ fromCaipAddress: caipAddress,
180
182
  sourceTokenAddress: state.sourceToken?.address,
181
183
  toTokenAddress: state.toToken?.address,
182
184
  toTokenAmount: state.toTokenAmount,
@@ -187,13 +189,13 @@ export const SwapController = {
187
189
  invalidSourceToken,
188
190
  invalidSourceTokenAmount,
189
191
  availableToSwap:
190
- activeAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
191
- isAuthConnector: !!connection?.properties?.provider
192
+ caipAddress && !invalidToToken && !invalidSourceToken && !invalidSourceTokenAmount,
193
+ isAuthConnector: type === 'AUTH'
192
194
  };
193
195
  },
194
196
 
195
197
  switchTokens() {
196
- if (state.loadingTokens) {
198
+ if (state.initializing || !state.initialized) {
197
199
  return;
198
200
  }
199
201
 
@@ -218,36 +220,41 @@ export const SwapController = {
218
220
  this.swapTokens();
219
221
  },
220
222
 
223
+ resetState() {
224
+ state.myTokensWithBalance = initialState.myTokensWithBalance;
225
+ state.tokensPriceMap = initialState.tokensPriceMap;
226
+ state.initialized = initialState.initialized;
227
+ state.sourceToken = initialState.sourceToken;
228
+ state.sourceTokenAmount = initialState.sourceTokenAmount;
229
+ state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
230
+ state.toToken = initialState.toToken;
231
+ state.toTokenAmount = initialState.toTokenAmount;
232
+ state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
233
+ state.networkPrice = initialState.networkPrice;
234
+ state.networkTokenSymbol = initialState.networkTokenSymbol;
235
+ state.networkBalanceInUSD = initialState.networkBalanceInUSD;
236
+ state.inputError = initialState.inputError;
237
+ },
238
+
221
239
  async fetchTokens() {
222
- try {
223
- const { networkAddress } = this.getParams();
240
+ const { networkAddress } = this.getParams();
224
241
 
225
- state.loadingTokens = true;
226
- await this.getTokenList();
227
- await this.getNetworkTokenPrice();
228
- await this.getMyTokensWithBalance();
242
+ await this.getTokenList();
243
+ await this.getNetworkTokenPrice();
244
+ await this.getMyTokensWithBalance();
229
245
 
230
- const networkToken = state.tokens?.find(token => token.address === networkAddress);
246
+ const networkToken = state.tokens?.find(token => token.address === networkAddress);
231
247
 
232
- if (networkToken) {
233
- state.networkTokenSymbol = networkToken.symbol;
234
- }
248
+ if (networkToken) {
249
+ state.networkTokenSymbol = networkToken.symbol;
250
+ }
235
251
 
236
- // Set default source token if not set
237
- if (!state.sourceToken && state.myTokensWithBalance?.length) {
238
- const sourceToken =
239
- state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
240
- state.myTokensWithBalance?.[0];
252
+ const sourceToken =
253
+ state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
254
+ state.myTokensWithBalance?.[0];
241
255
 
242
- this.setSourceToken(sourceToken);
243
- this.setSourceTokenAmount('1');
244
- }
245
- } catch (error) {
246
- SnackController.showError('Failed to initialize swap');
247
- RouterController.goBack();
248
- } finally {
249
- state.loadingTokens = false;
250
- }
256
+ this.setSourceToken(sourceToken);
257
+ this.setSourceTokenAmount('1');
251
258
  },
252
259
 
253
260
  async getTokenList() {
@@ -273,23 +280,21 @@ export const SwapController = {
273
280
  }, {});
274
281
  },
275
282
 
276
- async getMyTokensWithBalance(forceUpdate?: CaipAddress[]) {
277
- await ConnectionsController.fetchBalance(forceUpdate);
278
- const swapBalances = SwapApiUtil.mapBalancesToSwapTokens(ConnectionsController.state.balances);
279
- if (!swapBalances) {
283
+ async getMyTokensWithBalance(forceUpdate?: string) {
284
+ const balances = await SwapApiUtil.getMyTokensWithBalance(forceUpdate);
285
+
286
+ if (!balances) {
280
287
  return;
281
288
  }
282
289
 
283
290
  await this.getInitialGasPrice();
284
- this.setBalances(swapBalances);
291
+ this.setBalances(balances);
285
292
  },
286
293
 
287
- getFilteredPopularTokens(balances?: SwapTokenWithBalance[]) {
288
- if (!balances) {
289
- return state.popularTokens;
290
- }
291
-
292
- return state.popularTokens?.filter(token => !balances.some(t => t.address === token.address));
294
+ getFilteredPopularTokens() {
295
+ return state.popularTokens?.filter(
296
+ token => !state.myTokensWithBalance?.some(t => t.address === token.address)
297
+ );
293
298
  },
294
299
 
295
300
  setSourceToken(sourceToken: SwapTokenWithBalance | undefined) {
@@ -313,6 +318,25 @@ export const SwapController = {
313
318
  }
314
319
  },
315
320
 
321
+ async initializeState() {
322
+ if (state.initializing) {
323
+ return;
324
+ }
325
+
326
+ state.initializing = true;
327
+ if (!state.initialized) {
328
+ try {
329
+ await this.fetchTokens();
330
+ state.initialized = true;
331
+ } catch (error) {
332
+ state.initialized = false;
333
+ SnackController.showError('Failed to initialize swap');
334
+ RouterController.goBack();
335
+ }
336
+ }
337
+ state.initializing = false;
338
+ },
339
+
316
340
  async getAddressPrice(address: string) {
317
341
  const existPrice = state.tokensPriceMap[address];
318
342
 
@@ -376,11 +400,24 @@ export const SwapController = {
376
400
  },
377
401
 
378
402
  setBalances(balances: SwapTokenWithBalance[]) {
379
- state.myTokensWithBalance = balances;
403
+ const { networkAddress } = this.getParams();
404
+ const caipNetwork = NetworkController.state.caipNetwork;
405
+
406
+ if (!caipNetwork) {
407
+ return;
408
+ }
409
+
410
+ const networkToken = balances.find(token => token.address === networkAddress);
380
411
 
381
412
  balances.forEach(token => {
382
413
  state.tokensPriceMap[token.address] = token.price || 0;
383
414
  });
415
+
416
+ state.myTokensWithBalance = balances.filter(token => token.address?.startsWith(caipNetwork.id));
417
+
418
+ state.networkBalanceInUSD = networkToken
419
+ ? NumberUtil.multiply(networkToken.quantity.numeric, networkToken.price).toString()
420
+ : '0';
384
421
  },
385
422
 
386
423
  setToToken(toToken: SwapTokenWithBalance | undefined) {
@@ -427,12 +464,12 @@ export const SwapController = {
427
464
 
428
465
  // -- Swap ---------------------------------------------- //
429
466
  async swapTokens() {
430
- const address = ConnectionsController.state.activeAddress;
467
+ const address = AccountController.state.address as `${string}:${string}:${string}`;
431
468
  const sourceToken = state.sourceToken;
432
469
  const toToken = state.toToken;
433
470
  const haveSourceTokenAmount = NumberUtil.bigNumber(state.sourceTokenAmount).isGreaterThan(0);
434
471
 
435
- if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount || !address) {
472
+ if (!toToken || !sourceToken || state.loadingPrices || !haveSourceTokenAmount) {
436
473
  return;
437
474
  }
438
475
 
@@ -442,45 +479,39 @@ export const SwapController = {
442
479
  .multipliedBy(10 ** sourceToken.decimals)
443
480
  .integerValue();
444
481
 
445
- try {
446
- const quoteResponse = await BlockchainApiController.fetchSwapQuote({
447
- userAddress: address,
448
- projectId: OptionsController.state.projectId,
449
- from: sourceToken.address,
450
- to: toToken.address,
451
- gasPrice: state.gasFee,
452
- amount: amountDecimal.toString()
453
- });
482
+ const quoteResponse = await BlockchainApiController.fetchSwapQuote({
483
+ userAddress: address,
484
+ projectId: OptionsController.state.projectId,
485
+ from: sourceToken.address,
486
+ to: toToken.address,
487
+ gasPrice: state.gasFee,
488
+ amount: amountDecimal.toString()
489
+ });
454
490
 
455
- const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
491
+ state.loadingQuote = false;
456
492
 
457
- if (!quoteToAmount) {
458
- state.loadingQuote = false;
493
+ const quoteToAmount = quoteResponse?.quotes?.[0]?.toAmount;
459
494
 
460
- return;
461
- }
495
+ if (!quoteToAmount) {
496
+ return;
497
+ }
462
498
 
463
- const toTokenAmount = NumberUtil.bigNumber(quoteToAmount)
464
- .dividedBy(10 ** toToken.decimals)
465
- .toString();
499
+ const toTokenAmount = NumberUtil.bigNumber(quoteToAmount)
500
+ .dividedBy(10 ** toToken.decimals)
501
+ .toString();
466
502
 
467
- this.setToTokenAmount(toTokenAmount);
503
+ this.setToTokenAmount(toTokenAmount);
468
504
 
469
- const isInsufficientToken = this.hasInsufficientToken(
470
- state.sourceTokenAmount,
471
- sourceToken.address
472
- );
505
+ const isInsufficientToken = this.hasInsufficientToken(
506
+ state.sourceTokenAmount,
507
+ sourceToken.address
508
+ );
473
509
 
474
- if (isInsufficientToken) {
475
- state.inputError = 'Insufficient balance';
476
- } else {
477
- state.inputError = undefined;
478
- this.setTransactionDetails();
479
- }
480
- } catch (error) {
481
- SnackController.showError('Failed to get swap quote');
482
- } finally {
483
- state.loadingQuote = false;
510
+ if (isInsufficientToken) {
511
+ state.inputError = 'Insufficient balance';
512
+ } else {
513
+ state.inputError = undefined;
514
+ this.setTransactionDetails();
484
515
  }
485
516
  },
486
517
 
@@ -549,7 +580,7 @@ export const SwapController = {
549
580
  if (!response) {
550
581
  throw new Error('createAllowanceTransaction - No response from generateApproveCalldata');
551
582
  }
552
- const gasLimit = await ConnectionsController.estimateGas({
583
+ const gasLimit = await ConnectionController.estimateGas({
553
584
  address: fromAddress as `0x${string}`,
554
585
  to: CoreHelperUtil.getPlainAddress(response.tx.to) as `0x${string}`,
555
586
  data: response.tx.data
@@ -602,7 +633,7 @@ export const SwapController = {
602
633
  return undefined;
603
634
  }
604
635
 
605
- const amount = ConnectionsController.parseUnits(
636
+ const amount = ConnectionController.parseUnits(
606
637
  sourceTokenAmount,
607
638
  sourceToken.decimals
608
639
  )?.toString();
@@ -652,31 +683,42 @@ export const SwapController = {
652
683
  },
653
684
 
654
685
  async sendTransactionForApproval(data: TransactionParams) {
655
- const { fromAddress } = this.getParams();
656
- state.loadingApprovalTransaction = true;
686
+ const { fromAddress, isAuthConnector } = this.getParams();
657
687
 
658
- SnackController.showLoading('Approve limit increase in your wallet');
688
+ state.loadingApprovalTransaction = true;
689
+ const approveLimitMessage = `Approve limit increase in your wallet`;
690
+
691
+ if (isAuthConnector) {
692
+ RouterController.pushTransactionStack({
693
+ view: null,
694
+ goBack: true,
695
+ onSuccess() {
696
+ SnackController.showLoading(approveLimitMessage);
697
+ }
698
+ });
699
+ } else {
700
+ SnackController.showLoading(approveLimitMessage);
701
+ }
659
702
 
660
703
  try {
661
- await ConnectionsController.sendTransaction({
704
+ await ConnectionController.sendTransaction({
662
705
  address: fromAddress as `0x${string}`,
663
706
  to: data.to as `0x${string}`,
664
707
  data: data.data as `0x${string}`,
665
708
  value: BigInt(data.value),
666
709
  gasPrice: BigInt(data.gasPrice),
667
- chainNamespace: ConnectionsController.state.activeNamespace
710
+ chainNamespace: 'eip155'
668
711
  });
669
712
 
670
713
  await this.swapTokens();
671
714
  await this.getTransaction();
672
715
  state.approvalTransaction = undefined;
716
+ state.loadingApprovalTransaction = false;
673
717
  } catch (err) {
674
718
  const error = err as TransactionError;
675
719
  state.transactionError = error?.shortMessage as unknown as string;
676
-
677
- SnackController.showError(error?.shortMessage ?? 'Transaction error');
678
- } finally {
679
720
  state.loadingApprovalTransaction = false;
721
+ SnackController.showError(error?.shortMessage ?? 'Transaction error');
680
722
  }
681
723
  },
682
724
 
@@ -684,50 +726,68 @@ export const SwapController = {
684
726
  if (!data) {
685
727
  return undefined;
686
728
  }
687
- const { fromAddress, isAuthConnector } = this.getParams();
688
729
 
689
- state.loadingTransaction = true;
730
+ const { fromAddress, toTokenAmount, isAuthConnector } = this.getParams();
690
731
 
691
- const snackbarSuccessMessage = `Swapped ${state.sourceToken?.symbol} to ${state.toToken?.symbol}`;
732
+ state.loadingTransaction = true;
692
733
 
693
- SnackController.showLoading('Confirm transaction in your wallet');
734
+ const snackbarPendingMessage = `Swapping ${state.sourceToken
735
+ ?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
736
+ ?.symbol}`;
737
+ const snackbarSuccessMessage = `Swapped ${state.sourceToken
738
+ ?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
739
+ ?.symbol}`;
740
+
741
+ if (isAuthConnector) {
742
+ RouterController.pushTransactionStack({
743
+ view: 'Account',
744
+ goBack: false,
745
+ onSuccess() {
746
+ SnackController.showLoading(snackbarPendingMessage);
747
+ SwapController.resetState();
748
+ }
749
+ });
750
+ } else {
751
+ SnackController.showLoading('Confirm transaction in your wallet');
752
+ }
694
753
 
695
754
  try {
696
- const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].filter(
697
- Boolean
698
- ) as CaipAddress[];
699
-
700
- const transactionHash = await ConnectionsController.sendTransaction({
755
+ const forceUpdateAddresses = [state.sourceToken?.address, state.toToken?.address].join(',');
756
+ const transactionHash = await ConnectionController.sendTransaction({
701
757
  address: fromAddress as `0x${string}`,
702
758
  to: data.to as `0x${string}`,
703
759
  data: data.data as `0x${string}`,
704
760
  gas: data.gas,
705
761
  gasPrice: BigInt(data.gasPrice),
706
762
  value: data.value,
707
- chainNamespace: ConnectionsController.state.activeNamespace
763
+ chainNamespace: 'eip155'
708
764
  });
709
765
 
710
766
  state.loadingTransaction = false;
711
-
712
- SnackController.showSuccess(snackbarSuccessMessage, true);
767
+ SnackController.showSuccess(snackbarSuccessMessage);
713
768
  EventsController.sendEvent({
714
769
  type: 'track',
715
770
  event: 'SWAP_SUCCESS',
716
771
  properties: {
717
- network: ConnectionsController.state.activeNetwork?.caipNetworkId || '',
772
+ network: NetworkController.state.caipNetwork?.id || '',
718
773
  swapFromToken: this.state.sourceToken?.symbol || '',
719
774
  swapToToken: this.state.toToken?.symbol || '',
720
775
  swapFromAmount: this.state.sourceTokenAmount || '',
721
776
  swapToAmount: this.state.toTokenAmount || '',
722
- isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
777
+ isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
723
778
  }
724
779
  });
725
- RouterController.replace(isAuthConnector ? 'Account' : 'AccountDefault');
726
- SwapController.clearTokens();
780
+ SwapController.resetState();
781
+
782
+ if (!isAuthConnector) {
783
+ RouterController.replace('AccountDefault');
784
+ }
785
+
727
786
  SwapController.getMyTokensWithBalance(forceUpdateAddresses);
787
+ AccountController.fetchTokenBalance();
728
788
 
729
789
  setTimeout(() => {
730
- TransactionsController.fetchTransactions(ConnectionsController.state.activeAddress, true);
790
+ TransactionsController.fetchTransactions(AccountController.state.address, true);
731
791
  }, 5000);
732
792
 
733
793
  return transactionHash;
@@ -741,12 +801,12 @@ export const SwapController = {
741
801
  event: 'SWAP_ERROR',
742
802
  properties: {
743
803
  message: error?.shortMessage ?? error?.message ?? 'Unknown',
744
- network: ConnectionsController.state.activeNetwork?.caipNetworkId || '',
804
+ network: NetworkController.state.caipNetwork?.id || '',
745
805
  swapFromToken: this.state.sourceToken?.symbol || '',
746
806
  swapToToken: this.state.toToken?.symbol || '',
747
807
  swapFromAmount: this.state.sourceTokenAmount || '',
748
808
  swapToAmount: this.state.toTokenAmount || '',
749
- isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
809
+ isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount'
750
810
  }
751
811
  });
752
812
 
@@ -754,45 +814,8 @@ export const SwapController = {
754
814
  }
755
815
  },
756
816
 
757
- clearTransactionLoaders() {
758
- state.loadingApprovalTransaction = false;
759
- state.loadingBuildTransaction = false;
760
- state.loadingTransaction = false;
761
- },
762
-
763
- clearTokens() {
764
- state.sourceToken = initialState.sourceToken;
765
- state.sourceTokenAmount = initialState.sourceTokenAmount;
766
- state.sourceTokenPriceInUSD = initialState.sourceTokenPriceInUSD;
767
- state.toToken = initialState.toToken;
768
- state.toTokenAmount = initialState.toTokenAmount;
769
- state.toTokenPriceInUSD = initialState.toTokenPriceInUSD;
770
- state.inputError = initialState.inputError;
771
- state.loadingApprovalTransaction = initialState.loadingApprovalTransaction;
772
- state.loadingBuildTransaction = initialState.loadingBuildTransaction;
773
- state.loadingTransaction = initialState.loadingTransaction;
774
- state.fetchError = initialState.fetchError;
775
- state.transactionError = initialState.transactionError;
776
- state.swapTransaction = initialState.swapTransaction;
777
- state.approvalTransaction = initialState.approvalTransaction;
778
- },
779
-
780
- resetState() {
781
- this.clearTokens();
782
- state.myTokensWithBalance = initialState.myTokensWithBalance;
783
- state.tokensPriceMap = initialState.tokensPriceMap;
784
- state.networkPrice = initialState.networkPrice;
785
- state.networkTokenSymbol = initialState.networkTokenSymbol;
786
- },
787
-
788
817
  // -- Checks -------------------------------------------- //
789
818
  hasInsufficientToken(sourceTokenAmount: string, sourceTokenAddress: string) {
790
- const { balances } = ConnectionsController.state;
791
- const networkToken = balances?.find(t => t.address === undefined);
792
- const networkBalanceInUSD = networkToken
793
- ? NumberUtil.multiply(networkToken.quantity?.numeric ?? '0', networkToken.price).toString()
794
- : '0';
795
-
796
819
  const isInsufficientSourceTokenForSwap = SwapCalculationUtil.isInsufficientSourceTokenForSwap(
797
820
  sourceTokenAmount,
798
821
  sourceTokenAddress,
@@ -800,12 +823,12 @@ export const SwapController = {
800
823
  );
801
824
 
802
825
  let insufficientNetworkTokenForGas = true;
803
- if (ConnectionsController.state.accountType === 'smartAccount') {
826
+ if (AccountController.state.preferredAccountType === 'smartAccount') {
804
827
  // Smart Accounts may pay gas in any ERC20 token
805
828
  insufficientNetworkTokenForGas = false;
806
829
  } else {
807
830
  insufficientNetworkTokenForGas = SwapCalculationUtil.isInsufficientNetworkTokenForGas(
808
- networkBalanceInUSD,
831
+ state.networkBalanceInUSD,
809
832
  state.gasPriceInUSD
810
833
  );
811
834
  }
@@ -1,11 +1,10 @@
1
- import { Appearance } from 'react-native';
2
1
  import { proxy, subscribe as sub } from 'valtio';
3
2
  import type { ThemeMode, ThemeVariables } from '@reown/appkit-common-react-native';
4
3
 
5
4
  // -- Types --------------------------------------------- //
6
5
  export interface ThemeControllerState {
7
6
  themeMode?: ThemeMode;
8
- themeVariables?: ThemeVariables;
7
+ themeVariables: ThemeVariables;
9
8
  }
10
9
 
11
10
  // -- State --------------------------------------------- //
@@ -23,18 +22,10 @@ export const ThemeController = {
23
22
  },
24
23
 
25
24
  setThemeMode(themeMode: ThemeControllerState['themeMode']) {
26
- if (!themeMode) {
27
- state.themeMode = Appearance.getColorScheme() as ThemeMode;
28
- } else {
29
- state.themeMode = themeMode;
30
- }
25
+ state.themeMode = themeMode;
31
26
  },
32
27
 
33
28
  setThemeVariables(themeVariables: ThemeControllerState['themeVariables']) {
34
- if (!themeVariables) {
35
- state.themeVariables = {};
36
- }
37
-
38
29
  state.themeVariables = { ...state.themeVariables, ...themeVariables };
39
30
  }
40
31
  };