@reown/appkit-core-react-native 0.0.0-develop-20250728141602 → 0.0.0-develop-20251008155354

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