@reown/appkit-core-react-native 0.0.0-fix-approved-networks-20250822000414 → 0.0.0-fix-improvements-20250827190629

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