@reown/appkit-core-react-native 2.0.0-alpha.0 → 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 +313 -52
  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 +14 -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 +101 -101
  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 +140 -147
  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 +122 -426
  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 +11 -22
  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 +314 -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 +16 -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 +100 -98
  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 +142 -147
  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 +124 -426
  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 +13 -22
  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 +26 -22
  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 +7 -2
  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 +12 -11
  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 +7 -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 -177
  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 +5 -28
  154. package/src/controllers/ConnectionsController.ts +399 -92
  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 +22 -9
  160. package/src/controllers/RouterController.ts +4 -54
  161. package/src/controllers/SendController.ts +124 -113
  162. package/src/controllers/SnackController.ts +31 -5
  163. package/src/controllers/SwapController.ts +165 -181
  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 +125 -428
  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 +25 -42
  172. package/src/utils/TypeUtil.ts +64 -171
  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,19 +1,18 @@
1
- import { subscribeKey as subKey } from 'valtio/vanilla/utils';
2
- import { proxy, ref, subscribe as sub } from 'valtio/vanilla';
1
+ import { subscribeKey as subKey } from 'valtio/utils';
2
+ import { proxy, ref, subscribe as sub } from 'valtio';
3
3
  import { ContractUtil, type Balance } from '@reown/appkit-common-react-native';
4
- import { AccountController } from './AccountController';
5
- import { ConnectionController } from './ConnectionController';
4
+
6
5
  import { SnackController } from './SnackController';
7
6
  import { CoreHelperUtil } from '../utils/CoreHelperUtil';
8
7
  import { EventsController } from './EventsController';
9
- import { NetworkController } from './NetworkController';
10
8
  import { RouterController } from './RouterController';
9
+ import { ConnectionsController } from './ConnectionsController';
10
+ import { SwapController } from './SwapController';
11
11
 
12
12
  // -- Types --------------------------------------------- //
13
13
  export interface TxParams {
14
14
  receiverAddress: string;
15
15
  sendTokenAmount: number;
16
- gasPrice: bigint;
17
16
  decimals: string;
18
17
  }
19
18
 
@@ -30,8 +29,6 @@ export interface SendControllerState {
30
29
  receiverAddress?: string;
31
30
  receiverProfileName?: string;
32
31
  receiverProfileImageUrl?: string;
33
- gasPrice?: bigint;
34
- gasPriceInUSD?: number;
35
32
  loading: boolean;
36
33
  }
37
34
 
@@ -78,152 +75,166 @@ export const SendController = {
78
75
  state.receiverProfileName = receiverProfileName;
79
76
  },
80
77
 
81
- setGasPrice(gasPrice: SendControllerState['gasPrice']) {
82
- state.gasPrice = gasPrice;
83
- },
84
-
85
- setGasPriceInUsd(gasPriceInUSD: SendControllerState['gasPriceInUSD']) {
86
- state.gasPriceInUSD = gasPriceInUSD;
87
- },
88
-
89
78
  setLoading(loading: SendControllerState['loading']) {
90
79
  state.loading = loading;
91
80
  },
92
81
 
93
- sendToken() {
94
- if (this.state.token?.address && this.state.sendTokenAmount && this.state.receiverAddress) {
95
- state.loading = true;
82
+ async sendToken() {
83
+ const isAuth = !!ConnectionsController.state.connection?.properties?.provider;
84
+ const eventProperties = {
85
+ isSmartAccount: ConnectionsController.state.accountType === 'smartAccount',
86
+ token: this.state.token?.address ?? this.state.token?.symbol ?? '',
87
+ amount: this.state.sendTokenAmount || 0,
88
+ network: ConnectionsController.state.activeNetwork?.caipNetworkId ?? ''
89
+ };
90
+
91
+ try {
92
+ this.state.loading = true;
93
+
96
94
  EventsController.sendEvent({
97
95
  type: 'track',
98
96
  event: 'SEND_INITIATED',
99
- properties: {
100
- isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
101
- token: this.state.token.address,
102
- amount: this.state.sendTokenAmount,
103
- network: NetworkController.state.caipNetwork?.id || ''
104
- }
97
+ properties: eventProperties
105
98
  });
106
- this.sendERC20Token({
99
+
100
+ switch (ConnectionsController.state.activeNamespace) {
101
+ case 'eip155':
102
+ await SendController.sendEvmToken();
103
+
104
+ break;
105
+ case 'solana':
106
+ await SendController.sendSolanaToken();
107
+
108
+ break;
109
+ default:
110
+ throw new Error('Unsupported chain');
111
+ }
112
+
113
+ SnackController.showSuccess('Transaction started');
114
+ EventsController.sendEvent({
115
+ type: 'track',
116
+ event: 'SEND_SUCCESS',
117
+ properties: eventProperties
118
+ });
119
+ RouterController.reset(isAuth ? 'Account' : 'AccountDefault');
120
+ this.resetState();
121
+ } catch (error) {
122
+ EventsController.sendEvent({
123
+ type: 'track',
124
+ event: 'SEND_ERROR',
125
+ properties: eventProperties
126
+ });
127
+ SnackController.showError('Something went wrong');
128
+ } finally {
129
+ this.state.loading = false;
130
+ }
131
+ },
132
+
133
+ async sendEvmToken() {
134
+ if (this.state.token?.address && this.state.sendTokenAmount && this.state.receiverAddress) {
135
+ await this.sendERC20Token({
107
136
  receiverAddress: this.state.receiverAddress,
108
137
  tokenAddress: this.state.token.address,
109
138
  sendTokenAmount: this.state.sendTokenAmount,
110
- decimals: this.state.token.quantity.decimals
139
+ decimals: this.state.token.quantity?.decimals || '0'
111
140
  });
112
141
  } else if (
113
142
  this.state.receiverAddress &&
114
143
  this.state.sendTokenAmount &&
115
- this.state.gasPrice &&
116
- this.state.token?.quantity.decimals
144
+ this.state.token?.quantity?.decimals
117
145
  ) {
118
- state.loading = true;
119
- EventsController.sendEvent({
120
- type: 'track',
121
- event: 'SEND_INITIATED',
122
- properties: {
123
- isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
124
- token: this.state.token?.symbol,
125
- amount: this.state.sendTokenAmount,
126
- network: NetworkController.state.caipNetwork?.id || ''
127
- }
128
- });
129
- this.sendNativeToken({
146
+ await this.sendNativeToken({
130
147
  receiverAddress: this.state.receiverAddress,
131
148
  sendTokenAmount: this.state.sendTokenAmount,
132
- gasPrice: this.state.gasPrice,
133
149
  decimals: this.state.token.quantity.decimals
134
150
  });
135
151
  }
136
152
  },
137
153
 
138
154
  async sendNativeToken(params: TxParams) {
139
- RouterController.pushTransactionStack({
140
- view: 'Account',
141
- goBack: false
142
- });
143
-
144
155
  const to = params.receiverAddress as `0x${string}`;
145
- const address = AccountController.state.address as `0x${string}`;
146
- const value = ConnectionController.parseUnits(
156
+ const network = ConnectionsController.state.activeNetwork;
157
+ const address = CoreHelperUtil.getPlainAddress(
158
+ ConnectionsController.state.activeAddress
159
+ ) as `0x${string}`;
160
+ if (!address) {
161
+ throw new Error('Invalid address');
162
+ }
163
+
164
+ const value = ConnectionsController.parseUnits(
147
165
  params.sendTokenAmount.toString(),
148
166
  Number(params.decimals)
149
167
  );
150
168
  const data = '0x';
151
169
 
152
- try {
153
- await ConnectionController.sendTransaction({
154
- to,
155
- address,
156
- data,
157
- value,
158
- gasPrice: params.gasPrice
159
- });
160
- SnackController.showSuccess('Transaction started');
161
- EventsController.sendEvent({
162
- type: 'track',
163
- event: 'SEND_SUCCESS',
164
- properties: {
165
- isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
166
- token: this.state.token?.symbol || '',
167
- amount: params.sendTokenAmount,
168
- network: NetworkController.state.caipNetwork?.id || ''
169
- }
170
- });
171
- this.resetSend();
172
- } catch (error) {
173
- state.loading = false;
174
- EventsController.sendEvent({
175
- type: 'track',
176
- event: 'SEND_ERROR',
177
- properties: {
178
- isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
179
- token: this.state.token?.symbol || '',
180
- amount: params.sendTokenAmount,
181
- network: NetworkController.state.caipNetwork?.id || ''
182
- }
183
- });
184
- SnackController.showError('Something went wrong');
185
- }
170
+ await ConnectionsController.sendTransaction({
171
+ to,
172
+ address,
173
+ data,
174
+ value,
175
+ network
176
+ });
186
177
  },
187
178
 
188
179
  async sendERC20Token(params: ContractWriteParams) {
189
- RouterController.pushTransactionStack({
190
- view: 'Account',
191
- goBack: false
192
- });
193
-
194
- const amount = ConnectionController.parseUnits(
180
+ const network = ConnectionsController.state.activeNetwork;
181
+ const amount = ConnectionsController.parseUnits(
195
182
  params.sendTokenAmount.toString(),
196
183
  Number(params.decimals)
197
184
  );
198
185
 
199
- try {
200
- if (
201
- AccountController.state.address &&
202
- params.sendTokenAmount &&
203
- params.receiverAddress &&
204
- params.tokenAddress
205
- ) {
206
- const tokenAddress = CoreHelperUtil.getPlainAddress(
207
- params.tokenAddress as `${string}:${string}:${string}`
208
- ) as `0x${string}`;
209
- await ConnectionController.writeContract({
210
- fromAddress: AccountController.state.address as `0x${string}`,
211
- tokenAddress,
212
- receiverAddress: params.receiverAddress as `0x${string}`,
213
- tokenAmount: amount,
214
- method: 'transfer',
215
- abi: ContractUtil.getERC20Abi(tokenAddress)
216
- });
217
- SnackController.showSuccess('Transaction started');
218
- this.resetSend();
186
+ if (
187
+ ConnectionsController.state.activeAddress &&
188
+ params.sendTokenAmount &&
189
+ params.receiverAddress &&
190
+ params.tokenAddress
191
+ ) {
192
+ const tokenAddress = CoreHelperUtil.getPlainAddress(
193
+ params.tokenAddress as `${string}:${string}:${string}`
194
+ ) as `0x${string}`;
195
+
196
+ const fromAddress = CoreHelperUtil.getPlainAddress(
197
+ ConnectionsController.state.activeAddress
198
+ ) as `0x${string}`;
199
+ if (!fromAddress) {
200
+ throw new Error('Invalid address');
219
201
  }
220
- } catch (error) {
221
- state.loading = false;
222
- SnackController.showError('Something went wrong');
202
+
203
+ await ConnectionsController.writeContract({
204
+ fromAddress,
205
+ tokenAddress,
206
+ receiverAddress: params.receiverAddress as `0x${string}`,
207
+ tokenAmount: amount,
208
+ method: 'transfer',
209
+ abi: ContractUtil.getERC20Abi(tokenAddress),
210
+ network
211
+ });
223
212
  }
224
213
  },
225
214
 
226
- resetSend() {
215
+ async sendSolanaToken() {
216
+ if (!this.state.sendTokenAmount || !this.state.receiverAddress) {
217
+ throw new Error('An amount and receiver address are required');
218
+ }
219
+
220
+ const plainAddress = CoreHelperUtil.getPlainAddress(ConnectionsController.state.activeAddress);
221
+ if (!plainAddress) {
222
+ throw new Error('Invalid address');
223
+ }
224
+
225
+ await ConnectionsController.sendTransaction({
226
+ fromAddress: plainAddress,
227
+ toAddress: this.state.receiverAddress,
228
+ amount: this.state.sendTokenAmount,
229
+ network: ConnectionsController.state.activeNetwork
230
+ });
231
+ },
232
+
233
+ async fetchNetworkPrice() {
234
+ await SwapController.getNetworkTokenPrice();
235
+ },
236
+
237
+ resetState() {
227
238
  state.token = undefined;
228
239
  state.sendTokenAmount = undefined;
229
240
  state.receiverAddress = undefined;
@@ -22,26 +22,52 @@ const state = proxy<SnackControllerState>({
22
22
  long: false
23
23
  });
24
24
 
25
+ // -- Private Variables --------------------------------- //
26
+ let hideTimeout: NodeJS.Timeout | null = null;
27
+
28
+ // -- Private Functions --------------------------------- //
29
+ const clearHideTimeout = () => {
30
+ if (hideTimeout) {
31
+ clearTimeout(hideTimeout);
32
+ hideTimeout = null;
33
+ }
34
+ };
35
+
36
+ const scheduleAutoHide = (long: boolean) => {
37
+ clearHideTimeout();
38
+
39
+ const duration = long ? 15000 : 2200;
40
+ hideTimeout = setTimeout(() => {
41
+ SnackController.hide();
42
+ }, duration);
43
+ };
44
+
25
45
  // -- Controller ---------------------------------------- //
26
46
  export const SnackController = {
27
47
  state,
28
48
 
29
- showSuccess(message: SnackControllerState['message']) {
49
+ showSuccess(message: SnackControllerState['message'], long = false) {
30
50
  state.message = message;
31
51
  state.variant = 'success';
32
52
  state.open = true;
53
+ state.long = long;
54
+ scheduleAutoHide(long);
33
55
  },
34
56
 
35
- showError(message: SnackControllerState['message']) {
57
+ showError(message: SnackControllerState['message'], long = false) {
36
58
  state.message = message;
37
59
  state.variant = 'error';
38
60
  state.open = true;
61
+ state.long = long;
62
+ scheduleAutoHide(long);
39
63
  },
40
64
 
41
- showLoading(message: SnackControllerState['message']) {
65
+ showLoading(message: SnackControllerState['message'], long = false) {
42
66
  state.message = message;
43
67
  state.variant = 'loading';
44
68
  state.open = true;
69
+ state.long = long;
70
+ scheduleAutoHide(long);
45
71
  },
46
72
 
47
73
  showInternalError(error: Message) {
@@ -52,6 +78,7 @@ export const SnackController = {
52
78
  state.variant = 'error';
53
79
  state.open = true;
54
80
  state.long = true;
81
+ scheduleAutoHide(true);
55
82
  }
56
83
 
57
84
  if (error.longMessage) {
@@ -61,9 +88,8 @@ export const SnackController = {
61
88
  },
62
89
 
63
90
  hide() {
91
+ clearHideTimeout();
64
92
  state.open = false;
65
93
  state.long = false;
66
- state.message = '';
67
- state.variant = 'success';
68
94
  }
69
95
  };