@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.
Files changed (207) hide show
  1. package/lib/commonjs/controllers/ApiController.js +16 -5
  2. package/lib/commonjs/controllers/ApiController.js.map +1 -1
  3. package/lib/commonjs/controllers/AssetController.js.map +1 -1
  4. package/lib/commonjs/controllers/BlockchainApiController.js +103 -111
  5. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  6. package/lib/commonjs/controllers/ConnectionController.js +1 -10
  7. package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
  8. package/lib/commonjs/controllers/ConnectionsController.js +263 -51
  9. package/lib/commonjs/controllers/ConnectionsController.js.map +1 -1
  10. package/lib/commonjs/controllers/EnsController.js +4 -4
  11. package/lib/commonjs/controllers/EnsController.js.map +1 -1
  12. package/lib/commonjs/controllers/EventsController.js +4 -4
  13. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  14. package/lib/commonjs/controllers/ModalController.js +6 -7
  15. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  16. package/lib/commonjs/controllers/OnRampController.js +117 -53
  17. package/lib/commonjs/controllers/OnRampController.js.map +1 -1
  18. package/lib/commonjs/controllers/OptionsController.js +9 -0
  19. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  20. package/lib/commonjs/controllers/PublicStateController.js.map +1 -1
  21. package/lib/commonjs/controllers/RouterController.js +1 -22
  22. package/lib/commonjs/controllers/RouterController.js.map +1 -1
  23. package/lib/commonjs/controllers/SendController.js +100 -100
  24. package/lib/commonjs/controllers/SendController.js.map +1 -1
  25. package/lib/commonjs/controllers/SnackController.js +29 -5
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  27. package/lib/commonjs/controllers/SwapController.js +106 -116
  28. package/lib/commonjs/controllers/SwapController.js.map +1 -1
  29. package/lib/commonjs/controllers/ThemeController.js.map +1 -1
  30. package/lib/commonjs/controllers/TransactionsController.js +23 -19
  31. package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
  32. package/lib/commonjs/index.js +0 -35
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/commonjs/package.json +1 -0
  35. package/lib/commonjs/utils/ApiUtil.js.map +1 -1
  36. package/lib/commonjs/utils/AssetUtil.js +3 -14
  37. package/lib/commonjs/utils/AssetUtil.js.map +1 -1
  38. package/lib/commonjs/utils/ConstantsUtil.js +13 -425
  39. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  40. package/lib/commonjs/utils/CoreHelperUtil.js +13 -8
  41. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  42. package/lib/commonjs/utils/EventUtil.js.map +1 -1
  43. package/lib/commonjs/utils/FetchUtil.js +34 -10
  44. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  45. package/lib/commonjs/utils/RouterUtil.js.map +1 -1
  46. package/lib/commonjs/utils/StorageUtil.js +86 -92
  47. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  48. package/lib/commonjs/utils/SwapApiUtil.js +2 -17
  49. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
  50. package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -1
  51. package/lib/commonjs/utils/TypeUtil.js +25 -0
  52. package/lib/commonjs/utils/TypeUtil.js.map +1 -1
  53. package/lib/module/controllers/ApiController.js +18 -6
  54. package/lib/module/controllers/ApiController.js.map +1 -1
  55. package/lib/module/controllers/AssetController.js +2 -0
  56. package/lib/module/controllers/AssetController.js.map +1 -1
  57. package/lib/module/controllers/BlockchainApiController.js +104 -110
  58. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  59. package/lib/module/controllers/ConnectionController.js +3 -10
  60. package/lib/module/controllers/ConnectionController.js.map +1 -1
  61. package/lib/module/controllers/ConnectionsController.js +265 -51
  62. package/lib/module/controllers/ConnectionsController.js.map +1 -1
  63. package/lib/module/controllers/EnsController.js +4 -2
  64. package/lib/module/controllers/EnsController.js.map +1 -1
  65. package/lib/module/controllers/EventsController.js +3 -1
  66. package/lib/module/controllers/EventsController.js.map +1 -1
  67. package/lib/module/controllers/ModalController.js +8 -7
  68. package/lib/module/controllers/ModalController.js.map +1 -1
  69. package/lib/module/controllers/OnRampController.js +118 -52
  70. package/lib/module/controllers/OnRampController.js.map +1 -1
  71. package/lib/module/controllers/OptionsController.js +11 -0
  72. package/lib/module/controllers/OptionsController.js.map +1 -1
  73. package/lib/module/controllers/PublicStateController.js +2 -0
  74. package/lib/module/controllers/PublicStateController.js.map +1 -1
  75. package/lib/module/controllers/RouterController.js +3 -22
  76. package/lib/module/controllers/RouterController.js.map +1 -1
  77. package/lib/module/controllers/SendController.js +99 -97
  78. package/lib/module/controllers/SendController.js.map +1 -1
  79. package/lib/module/controllers/SnackController.js +31 -5
  80. package/lib/module/controllers/SnackController.js.map +1 -1
  81. package/lib/module/controllers/SwapController.js +108 -116
  82. package/lib/module/controllers/SwapController.js.map +1 -1
  83. package/lib/module/controllers/ThemeController.js +2 -0
  84. package/lib/module/controllers/ThemeController.js.map +1 -1
  85. package/lib/module/controllers/TransactionsController.js +23 -17
  86. package/lib/module/controllers/TransactionsController.js.map +1 -1
  87. package/lib/module/index.js +2 -5
  88. package/lib/module/index.js.map +1 -1
  89. package/lib/module/utils/ApiUtil.js +2 -0
  90. package/lib/module/utils/ApiUtil.js.map +1 -1
  91. package/lib/module/utils/AssetUtil.js +5 -14
  92. package/lib/module/utils/AssetUtil.js.map +1 -1
  93. package/lib/module/utils/ConstantsUtil.js +15 -425
  94. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  95. package/lib/module/utils/CoreHelperUtil.js +14 -6
  96. package/lib/module/utils/CoreHelperUtil.js.map +1 -1
  97. package/lib/module/utils/EventUtil.js +2 -0
  98. package/lib/module/utils/EventUtil.js.map +1 -1
  99. package/lib/module/utils/FetchUtil.js +36 -10
  100. package/lib/module/utils/FetchUtil.js.map +1 -1
  101. package/lib/module/utils/RouterUtil.js +2 -0
  102. package/lib/module/utils/RouterUtil.js.map +1 -1
  103. package/lib/module/utils/StorageUtil.js +89 -91
  104. package/lib/module/utils/StorageUtil.js.map +1 -1
  105. package/lib/module/utils/SwapApiUtil.js +4 -17
  106. package/lib/module/utils/SwapApiUtil.js.map +1 -1
  107. package/lib/module/utils/SwapCalculationUtil.js +2 -0
  108. package/lib/module/utils/SwapCalculationUtil.js.map +1 -1
  109. package/lib/module/utils/TypeUtil.js +25 -1
  110. package/lib/module/utils/TypeUtil.js.map +1 -1
  111. package/lib/typescript/controllers/ApiController.d.ts +2 -1
  112. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  113. package/lib/typescript/controllers/BlockchainApiController.d.ts +20 -13
  114. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  115. package/lib/typescript/controllers/ConnectionController.d.ts +3 -16
  116. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
  117. package/lib/typescript/controllers/ConnectionsController.d.ts +19 -17
  118. package/lib/typescript/controllers/ConnectionsController.d.ts.map +1 -1
  119. package/lib/typescript/controllers/ModalController.d.ts +1 -1
  120. package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
  121. package/lib/typescript/controllers/OnRampController.d.ts +3 -2
  122. package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
  123. package/lib/typescript/controllers/OptionsController.d.ts +4 -1
  124. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  125. package/lib/typescript/controllers/RouterController.d.ts +4 -17
  126. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  127. package/lib/typescript/controllers/SendController.d.ts +5 -7
  128. package/lib/typescript/controllers/SendController.d.ts.map +1 -1
  129. package/lib/typescript/controllers/SnackController.d.ts +3 -3
  130. package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
  131. package/lib/typescript/controllers/SwapController.d.ts +11 -10
  132. package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
  133. package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
  134. package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
  135. package/lib/typescript/index.d.ts +0 -5
  136. package/lib/typescript/index.d.ts.map +1 -1
  137. package/lib/typescript/utils/AssetUtil.d.ts +2 -3
  138. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
  139. package/lib/typescript/utils/ConstantsUtil.d.ts +6 -414
  140. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  141. package/lib/typescript/utils/CoreHelperUtil.d.ts +5 -4
  142. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  143. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  144. package/lib/typescript/utils/StorageUtil.d.ts +11 -15
  145. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  146. package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
  147. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
  148. package/lib/typescript/utils/TypeUtil.d.ts +54 -166
  149. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
  150. package/package.json +9 -23
  151. package/src/controllers/ApiController.ts +17 -4
  152. package/src/controllers/BlockchainApiController.ts +74 -119
  153. package/src/controllers/ConnectionController.ts +4 -27
  154. package/src/controllers/ConnectionsController.ts +329 -77
  155. package/src/controllers/EnsController.ts +2 -2
  156. package/src/controllers/EventsController.ts +1 -1
  157. package/src/controllers/ModalController.ts +7 -9
  158. package/src/controllers/OnRampController.ts +178 -81
  159. package/src/controllers/OptionsController.ts +14 -1
  160. package/src/controllers/RouterController.ts +4 -54
  161. package/src/controllers/SendController.ts +123 -112
  162. package/src/controllers/SnackController.ts +31 -5
  163. package/src/controllers/SwapController.ts +127 -144
  164. package/src/controllers/TransactionsController.ts +24 -18
  165. package/src/index.ts +0 -15
  166. package/src/utils/AssetUtil.ts +4 -18
  167. package/src/utils/ConstantsUtil.ts +14 -427
  168. package/src/utils/CoreHelperUtil.ts +30 -8
  169. package/src/utils/FetchUtil.ts +37 -10
  170. package/src/utils/StorageUtil.ts +165 -106
  171. package/src/utils/SwapApiUtil.ts +15 -38
  172. package/src/utils/TypeUtil.ts +65 -161
  173. package/lib/commonjs/controllers/AccountController.js +0 -93
  174. package/lib/commonjs/controllers/AccountController.js.map +0 -1
  175. package/lib/commonjs/controllers/ConnectorController.js +0 -50
  176. package/lib/commonjs/controllers/ConnectorController.js.map +0 -1
  177. package/lib/commonjs/controllers/NetworkController.js +0 -90
  178. package/lib/commonjs/controllers/NetworkController.js.map +0 -1
  179. package/lib/commonjs/controllers/WebviewController.js +0 -52
  180. package/lib/commonjs/controllers/WebviewController.js.map +0 -1
  181. package/lib/commonjs/utils/NetworkUtil.js +0 -46
  182. package/lib/commonjs/utils/NetworkUtil.js.map +0 -1
  183. package/lib/module/controllers/AccountController.js +0 -88
  184. package/lib/module/controllers/AccountController.js.map +0 -1
  185. package/lib/module/controllers/ConnectorController.js +0 -45
  186. package/lib/module/controllers/ConnectorController.js.map +0 -1
  187. package/lib/module/controllers/NetworkController.js +0 -85
  188. package/lib/module/controllers/NetworkController.js.map +0 -1
  189. package/lib/module/controllers/WebviewController.js +0 -47
  190. package/lib/module/controllers/WebviewController.js.map +0 -1
  191. package/lib/module/utils/NetworkUtil.js +0 -40
  192. package/lib/module/utils/NetworkUtil.js.map +0 -1
  193. package/lib/typescript/controllers/AccountController.d.ts +0 -33
  194. package/lib/typescript/controllers/AccountController.d.ts.map +0 -1
  195. package/lib/typescript/controllers/ConnectorController.d.ts +0 -18
  196. package/lib/typescript/controllers/ConnectorController.d.ts.map +0 -1
  197. package/lib/typescript/controllers/NetworkController.d.ts +0 -34
  198. package/lib/typescript/controllers/NetworkController.d.ts.map +0 -1
  199. package/lib/typescript/controllers/WebviewController.d.ts +0 -21
  200. package/lib/typescript/controllers/WebviewController.d.ts.map +0 -1
  201. package/lib/typescript/utils/NetworkUtil.d.ts +0 -8
  202. package/lib/typescript/utils/NetworkUtil.d.ts.map +0 -1
  203. package/src/controllers/AccountController.ts +0 -128
  204. package/src/controllers/ConnectorController.ts +0 -64
  205. package/src/controllers/NetworkController.ts +0 -120
  206. package/src/controllers/WebviewController.ts +0 -63
  207. 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 { NumberUtil, type CaipAddress } from '@reown/appkit-common-react-native';
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
- initializing: boolean;
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
- initializing: false,
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 } = ConnectionsController.state;
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: type === 'AUTH'
196
+ isAuthConnector: !!connection?.properties?.provider
199
197
  };
200
198
  },
201
199
 
202
200
  switchTokens() {
203
- if (state.initializing || !state.initialized) {
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
- const { networkAddress } = this.getParams();
227
+ try {
228
+ const { networkAddress } = this.getParams();
246
229
 
247
- await this.getTokenList();
248
- await this.getNetworkTokenPrice();
249
- await this.getMyTokensWithBalance();
230
+ state.loadingTokens = true;
231
+ await this.getTokenList();
232
+ await this.getNetworkTokenPrice();
233
+ await this.getMyTokensWithBalance();
250
234
 
251
- const networkToken = state.tokens?.find(token => token.address === networkAddress);
235
+ const networkToken = state.tokens?.find(token => token.address === networkAddress);
252
236
 
253
- if (networkToken) {
254
- state.networkTokenSymbol = networkToken.symbol;
255
- }
237
+ if (networkToken) {
238
+ state.networkTokenSymbol = networkToken.symbol;
239
+ }
256
240
 
257
- const sourceToken =
258
- state.myTokensWithBalance?.find(token => token.address.startsWith(networkAddress)) ||
259
- state.myTokensWithBalance?.[0];
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
- this.setSourceToken(sourceToken);
262
- this.setSourceTokenAmount('1');
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?: string) {
289
- const balances = await SwapApiUtil.getMyTokensWithBalance(forceUpdate);
290
- if (!balances) {
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(balances);
289
+ this.setBalances(swapBalances);
296
290
  },
297
291
 
298
- getFilteredPopularTokens() {
299
- return state.popularTokens?.filter(
300
- token => !state.myTokensWithBalance?.some(t => t.address === token.address)
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 initializeState() {
326
- if (state.initializing) {
327
- return;
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
- const { networkAddress } = this.getParams();
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: string, target: SwapInputTarget) {
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, isAuthConnector } = this.getParams();
698
-
667
+ const { fromAddress, network } = this.getParams();
699
668
  state.loadingApprovalTransaction = true;
700
- const approveLimitMessage = `Approve limit increase in your wallet`;
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
- state.loadingApprovalTransaction = false;
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, toTokenAmount, isAuthConnector } = this.getParams();
700
+ const { fromAddress, isAuthConnector, network } = this.getParams();
741
701
 
742
702
  state.loadingTransaction = true;
743
703
 
744
- const snackbarPendingMessage = `Swapping ${state.sourceToken
745
- ?.symbol} to ${NumberUtil.formatNumberToLocalString(toTokenAmount, 3)} ${state.toToken
746
- ?.symbol}`;
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].join(',');
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
- SnackController.showSuccess(snackbarSuccessMessage);
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: AccountController.state.preferredAccountType === 'smartAccount'
736
+ isSmartAccount: ConnectionsController.state.accountType === 'smartAccount'
788
737
  }
789
738
  });
790
- SwapController.resetState();
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
- TransactionsController.fetchTransactions(AccountController.state.address, true);
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: AccountController.state.preferredAccountType === 'smartAccount'
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 (AccountController.state.preferredAccountType === 'smartAccount') {
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
- state.networkBalanceInUSD,
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/vanilla';
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?: string, reset?: boolean) {
38
- const { projectId } = OptionsController.state;
36
+ async fetchTransactions(accountAddress: CaipAddress, reset?: boolean) {
37
+ try {
38
+ const { projectId } = OptionsController.state;
39
39
 
40
- if (!projectId || !accountAddress) {
41
- throw new Error("Transactions can't be fetched without a projectId and an accountAddress");
42
- }
40
+ if (!projectId || !accountAddress) {
41
+ throw new Error("Transactions can't be fetched without a projectId and an accountAddress");
42
+ }
43
43
 
44
- state.loading = true;
44
+ state.loading = true;
45
45
 
46
- if (reset) {
47
- state.next = undefined;
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: accountAddress,
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: AccountController.state.preferredAccountType === 'smartAccount'
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
- resetTransactions() {
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';
@@ -1,5 +1,5 @@
1
1
  import { AssetController } from '../controllers/AssetController';
2
- import type { Connector, WcWallet } from './TypeUtil';
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
- getNetworkImage(networkId?: string | number) {
18
- //TODO: check if imageUrl case is needed
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;