@reown/appkit-core-react-native 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (228) hide show
  1. package/lib/commonjs/controllers/ApiController.js +16 -21
  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 +102 -112
  6. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  7. package/lib/commonjs/controllers/ConnectionsController.js +248 -51
  8. package/lib/commonjs/controllers/ConnectionsController.js.map +1 -1
  9. package/lib/commonjs/controllers/EnsController.js +4 -4
  10. package/lib/commonjs/controllers/EnsController.js.map +1 -1
  11. package/lib/commonjs/controllers/EventsController.js +4 -4
  12. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  13. package/lib/commonjs/controllers/ModalController.js +6 -7
  14. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  15. package/lib/commonjs/controllers/OnRampController.js +117 -53
  16. package/lib/commonjs/controllers/OnRampController.js.map +1 -1
  17. package/lib/commonjs/controllers/OptionsController.js +10 -4
  18. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  19. package/lib/commonjs/controllers/PublicStateController.js.map +1 -1
  20. package/lib/commonjs/controllers/RouterController.js +6 -21
  21. package/lib/commonjs/controllers/RouterController.js.map +1 -1
  22. package/lib/commonjs/controllers/SendController.js +100 -100
  23. package/lib/commonjs/controllers/SendController.js.map +1 -1
  24. package/lib/commonjs/controllers/SnackController.js +29 -5
  25. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  26. package/lib/commonjs/controllers/SwapController.js +109 -117
  27. package/lib/commonjs/controllers/SwapController.js.map +1 -1
  28. package/lib/commonjs/controllers/ThemeController.js.map +1 -1
  29. package/lib/commonjs/controllers/TransactionsController.js +23 -19
  30. package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
  31. package/lib/commonjs/controllers/WcController.js +73 -0
  32. package/lib/commonjs/controllers/WcController.js.map +1 -0
  33. package/lib/commonjs/index.js +3 -38
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/package.json +1 -0
  36. package/lib/commonjs/utils/ApiUtil.js.map +1 -1
  37. package/lib/commonjs/utils/AssetUtil.js +6 -14
  38. package/lib/commonjs/utils/AssetUtil.js.map +1 -1
  39. package/lib/commonjs/utils/ConstantsUtil.js +13 -425
  40. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  41. package/lib/commonjs/utils/CoreHelperUtil.js +13 -8
  42. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  43. package/lib/commonjs/utils/EventUtil.js.map +1 -1
  44. package/lib/commonjs/utils/FetchUtil.js +34 -10
  45. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  46. package/lib/commonjs/utils/RouterUtil.js.map +1 -1
  47. package/lib/commonjs/utils/StorageUtil.js +77 -129
  48. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  49. package/lib/commonjs/utils/SwapApiUtil.js +2 -17
  50. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
  51. package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -1
  52. package/lib/module/controllers/ApiController.js +17 -21
  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 +103 -111
  57. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  58. package/lib/module/controllers/ConnectionsController.js +250 -51
  59. package/lib/module/controllers/ConnectionsController.js.map +1 -1
  60. package/lib/module/controllers/EnsController.js +4 -2
  61. package/lib/module/controllers/EnsController.js.map +1 -1
  62. package/lib/module/controllers/EventsController.js +3 -1
  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 +118 -52
  67. package/lib/module/controllers/OnRampController.js.map +1 -1
  68. package/lib/module/controllers/OptionsController.js +12 -4
  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 +8 -21
  73. package/lib/module/controllers/RouterController.js.map +1 -1
  74. package/lib/module/controllers/SendController.js +99 -97
  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 +111 -117
  79. package/lib/module/controllers/SwapController.js.map +1 -1
  80. package/lib/module/controllers/ThemeController.js +2 -0
  81. package/lib/module/controllers/ThemeController.js.map +1 -1
  82. package/lib/module/controllers/TransactionsController.js +23 -17
  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 +5 -6
  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 +8 -14
  91. package/lib/module/utils/AssetUtil.js.map +1 -1
  92. package/lib/module/utils/ConstantsUtil.js +15 -425
  93. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  94. package/lib/module/utils/CoreHelperUtil.js +15 -6
  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 +36 -10
  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 +80 -129
  103. package/lib/module/utils/StorageUtil.js.map +1 -1
  104. package/lib/module/utils/SwapApiUtil.js +4 -17
  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/typescript/controllers/ApiController.d.ts +3 -4
  109. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  110. package/lib/typescript/controllers/AssetController.d.ts +0 -2
  111. package/lib/typescript/controllers/AssetController.d.ts.map +1 -1
  112. package/lib/typescript/controllers/BlockchainApiController.d.ts +21 -13
  113. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  114. package/lib/typescript/controllers/ConnectionsController.d.ts +19 -17
  115. package/lib/typescript/controllers/ConnectionsController.d.ts.map +1 -1
  116. package/lib/typescript/controllers/EnsController.d.ts +1 -1
  117. package/lib/typescript/controllers/EventsController.d.ts +1 -1
  118. package/lib/typescript/controllers/EventsController.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 +4 -3
  122. package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
  123. package/lib/typescript/controllers/OptionsController.d.ts +4 -4
  124. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  125. package/lib/typescript/controllers/RouterController.d.ts +5 -20
  126. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  127. package/lib/typescript/controllers/SendController.d.ts +5 -7
  128. package/lib/typescript/controllers/SendController.d.ts.map +1 -1
  129. package/lib/typescript/controllers/SnackController.d.ts +3 -3
  130. package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
  131. package/lib/typescript/controllers/SwapController.d.ts +11 -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/controllers/WcController.d.ts +27 -0
  136. package/lib/typescript/controllers/WcController.d.ts.map +1 -0
  137. package/lib/typescript/index.d.ts +1 -7
  138. package/lib/typescript/index.d.ts.map +1 -1
  139. package/lib/typescript/utils/AssetUtil.d.ts +2 -3
  140. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
  141. package/lib/typescript/utils/ConstantsUtil.d.ts +7 -415
  142. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  143. package/lib/typescript/utils/CoreHelperUtil.d.ts +4 -4
  144. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  145. package/lib/typescript/utils/EventUtil.d.ts +1 -1
  146. package/lib/typescript/utils/EventUtil.d.ts.map +1 -1
  147. package/lib/typescript/utils/FetchUtil.d.ts +1 -1
  148. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  149. package/lib/typescript/utils/StorageUtil.d.ts +8 -19
  150. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  151. package/lib/typescript/utils/SwapApiUtil.d.ts +3 -4
  152. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
  153. package/lib/typescript/utils/SwapCalculationUtil.d.ts +1 -1
  154. package/lib/typescript/utils/SwapCalculationUtil.d.ts.map +1 -1
  155. package/package.json +9 -23
  156. package/src/controllers/ApiController.ts +24 -28
  157. package/src/controllers/AssetController.ts +0 -6
  158. package/src/controllers/BlockchainApiController.ts +76 -121
  159. package/src/controllers/ConnectionsController.ts +308 -78
  160. package/src/controllers/EnsController.ts +3 -3
  161. package/src/controllers/EventsController.ts +2 -2
  162. package/src/controllers/ModalController.ts +7 -9
  163. package/src/controllers/OnRampController.ts +179 -82
  164. package/src/controllers/OptionsController.ts +24 -8
  165. package/src/controllers/RouterController.ts +12 -54
  166. package/src/controllers/SendController.ts +123 -112
  167. package/src/controllers/SnackController.ts +31 -5
  168. package/src/controllers/SwapController.ts +130 -146
  169. package/src/controllers/TransactionsController.ts +24 -18
  170. package/src/controllers/WcController.ts +93 -0
  171. package/src/index.ts +2 -21
  172. package/src/utils/AssetUtil.ts +7 -17
  173. package/src/utils/ConstantsUtil.ts +15 -429
  174. package/src/utils/CoreHelperUtil.ts +31 -8
  175. package/src/utils/EventUtil.ts +1 -1
  176. package/src/utils/FetchUtil.ts +38 -11
  177. package/src/utils/StorageUtil.ts +146 -157
  178. package/src/utils/SwapApiUtil.ts +18 -37
  179. package/src/utils/SwapCalculationUtil.ts +1 -2
  180. package/lib/commonjs/controllers/AccountController.js +0 -93
  181. package/lib/commonjs/controllers/AccountController.js.map +0 -1
  182. package/lib/commonjs/controllers/ConnectionController.js +0 -132
  183. package/lib/commonjs/controllers/ConnectionController.js.map +0 -1
  184. package/lib/commonjs/controllers/ConnectorController.js +0 -50
  185. package/lib/commonjs/controllers/ConnectorController.js.map +0 -1
  186. package/lib/commonjs/controllers/NetworkController.js +0 -90
  187. package/lib/commonjs/controllers/NetworkController.js.map +0 -1
  188. package/lib/commonjs/controllers/WebviewController.js +0 -52
  189. package/lib/commonjs/controllers/WebviewController.js.map +0 -1
  190. package/lib/commonjs/utils/NetworkUtil.js +0 -46
  191. package/lib/commonjs/utils/NetworkUtil.js.map +0 -1
  192. package/lib/commonjs/utils/TypeUtil.js +0 -6
  193. package/lib/commonjs/utils/TypeUtil.js.map +0 -1
  194. package/lib/module/controllers/AccountController.js +0 -88
  195. package/lib/module/controllers/AccountController.js.map +0 -1
  196. package/lib/module/controllers/ConnectionController.js +0 -127
  197. package/lib/module/controllers/ConnectionController.js.map +0 -1
  198. package/lib/module/controllers/ConnectorController.js +0 -45
  199. package/lib/module/controllers/ConnectorController.js.map +0 -1
  200. package/lib/module/controllers/NetworkController.js +0 -85
  201. package/lib/module/controllers/NetworkController.js.map +0 -1
  202. package/lib/module/controllers/WebviewController.js +0 -47
  203. package/lib/module/controllers/WebviewController.js.map +0 -1
  204. package/lib/module/utils/NetworkUtil.js +0 -40
  205. package/lib/module/utils/NetworkUtil.js.map +0 -1
  206. package/lib/module/utils/TypeUtil.js +0 -2
  207. package/lib/module/utils/TypeUtil.js.map +0 -1
  208. package/lib/typescript/controllers/AccountController.d.ts +0 -33
  209. package/lib/typescript/controllers/AccountController.d.ts.map +0 -1
  210. package/lib/typescript/controllers/ConnectionController.d.ts +0 -68
  211. package/lib/typescript/controllers/ConnectionController.d.ts.map +0 -1
  212. package/lib/typescript/controllers/ConnectorController.d.ts +0 -18
  213. package/lib/typescript/controllers/ConnectorController.d.ts.map +0 -1
  214. package/lib/typescript/controllers/NetworkController.d.ts +0 -34
  215. package/lib/typescript/controllers/NetworkController.d.ts.map +0 -1
  216. package/lib/typescript/controllers/WebviewController.d.ts +0 -21
  217. package/lib/typescript/controllers/WebviewController.d.ts.map +0 -1
  218. package/lib/typescript/utils/NetworkUtil.d.ts +0 -8
  219. package/lib/typescript/utils/NetworkUtil.d.ts.map +0 -1
  220. package/lib/typescript/utils/TypeUtil.d.ts +0 -817
  221. package/lib/typescript/utils/TypeUtil.d.ts.map +0 -1
  222. package/src/controllers/AccountController.ts +0 -128
  223. package/src/controllers/ConnectionController.ts +0 -208
  224. package/src/controllers/ConnectorController.ts +0 -64
  225. package/src/controllers/NetworkController.ts +0 -120
  226. package/src/controllers/WebviewController.ts +0 -63
  227. package/src/utils/NetworkUtil.ts +0 -33
  228. package/src/utils/TypeUtil.ts +0 -995
@@ -1,26 +1,27 @@
1
- import { subscribeKey as subKey } from 'valtio/vanilla/utils';
2
- import { proxy, subscribe as sub } from 'valtio/vanilla';
3
- import type {
4
- OnRampPaymentMethod,
5
- OnRampCountry,
6
- OnRampFiatCurrency,
7
- OnRampQuote,
8
- OnRampFiatLimit,
9
- OnRampCryptoCurrency,
10
- OnRampServiceProvider,
11
- OnRampError,
12
- OnRampErrorTypeValues
13
- } from '../utils/TypeUtil';
1
+ import { subscribeKey as subKey } from 'valtio/utils';
2
+ import { proxy, subscribe as sub } from 'valtio';
3
+ import {
4
+ type OnRampPaymentMethod,
5
+ type OnRampCountry,
6
+ type OnRampFiatCurrency,
7
+ type OnRampQuote,
8
+ type OnRampFiatLimit,
9
+ type OnRampCryptoCurrency,
10
+ type OnRampServiceProvider,
11
+ type OnRampError,
12
+ type OnRampErrorTypeValues,
13
+ type OnRampCountryDefaults,
14
+ BlockchainOnRampError
15
+ } from '@reown/appkit-common-react-native';
14
16
 
15
17
  import { CoreHelperUtil } from '../utils/CoreHelperUtil';
16
- import { NetworkController } from './NetworkController';
17
- import { AccountController } from './AccountController';
18
18
  import { OptionsController } from './OptionsController';
19
19
  import { ConstantsUtil, OnRampErrorType } from '../utils/ConstantsUtil';
20
20
  import { StorageUtil } from '../utils/StorageUtil';
21
21
  import { SnackController } from './SnackController';
22
22
  import { EventsController } from './EventsController';
23
- import { BlockchainApiController } from './BlockchainApiController';
23
+ import { BlockchainApiController, EXCLUDED_ONRAMP_PROVIDERS } from './BlockchainApiController';
24
+ import { ConnectionsController } from './ConnectionsController';
24
25
 
25
26
  // -- Helpers ------------------------------------------- //
26
27
 
@@ -32,23 +33,27 @@ const mapErrorMessage = (errorCode: string): OnRampError => {
32
33
  const errorMap: Record<string, { type: OnRampErrorTypeValues; message: string }> = {
33
34
  [OnRampErrorType.AMOUNT_TOO_LOW]: {
34
35
  type: OnRampErrorType.AMOUNT_TOO_LOW,
35
- message: 'Amount is too low'
36
+ message: 'The amount is too low'
36
37
  },
37
38
  [OnRampErrorType.AMOUNT_TOO_HIGH]: {
38
39
  type: OnRampErrorType.AMOUNT_TOO_HIGH,
39
- message: 'Amount is too high'
40
+ message: 'The amount is too high'
40
41
  },
41
42
  [OnRampErrorType.INVALID_AMOUNT]: {
42
43
  type: OnRampErrorType.INVALID_AMOUNT,
43
- message: 'Please adjust amount'
44
+ message: 'Enter a valid amount'
44
45
  },
45
46
  [OnRampErrorType.INCOMPATIBLE_REQUEST]: {
46
47
  type: OnRampErrorType.INCOMPATIBLE_REQUEST,
47
- message: 'Try different amount or payment method'
48
+ message: 'Enter a valid amount'
48
49
  },
49
50
  [OnRampErrorType.BAD_REQUEST]: {
50
51
  type: OnRampErrorType.BAD_REQUEST,
51
- message: 'Try different amount or payment method'
52
+ message: 'Enter a valid amount'
53
+ },
54
+ [OnRampErrorType.NO_VALID_QUOTES]: {
55
+ type: OnRampErrorType.NO_VALID_QUOTES,
56
+ message: 'No quotes available'
52
57
  }
53
58
  };
54
59
 
@@ -63,6 +68,7 @@ const mapErrorMessage = (errorCode: string): OnRampError => {
63
68
  // -- Types --------------------------------------------- //
64
69
  export interface OnRampControllerState {
65
70
  countries: OnRampCountry[];
71
+ countriesDefaults?: OnRampCountryDefaults[];
66
72
  selectedCountry?: OnRampCountry;
67
73
  serviceProviders: OnRampServiceProvider[];
68
74
  selectedServiceProvider?: OnRampServiceProvider;
@@ -109,33 +115,39 @@ export const OnRampController = {
109
115
  },
110
116
 
111
117
  async setSelectedCountry(country: OnRampCountry, updateCurrency = true) {
112
- state.selectedCountry = country;
113
- state.loading = true;
118
+ try {
119
+ state.selectedCountry = country;
120
+ state.loading = true;
114
121
 
115
- if (updateCurrency) {
116
- const currencyCode =
117
- ConstantsUtil.COUNTRY_CURRENCIES[
118
- country.countryCode as keyof typeof ConstantsUtil.COUNTRY_CURRENCIES
119
- ] || 'USD';
122
+ if (updateCurrency) {
123
+ const currencyCode =
124
+ state.countriesDefaults?.find(d => d.countryCode === country.countryCode)
125
+ ?.defaultCurrencyCode || 'USD';
120
126
 
121
- const currency = state.paymentCurrencies?.find(c => c.currencyCode === currencyCode);
127
+ const currency = state.paymentCurrencies?.find(c => c.currencyCode === currencyCode);
122
128
 
123
- if (currency) {
124
- this.setPaymentCurrency(currency);
129
+ if (currency) {
130
+ this.setPaymentCurrency(currency);
131
+ }
125
132
  }
126
- }
127
133
 
128
- await Promise.all([this.fetchPaymentMethods(), this.fetchCryptoCurrencies()]);
134
+ await Promise.all([this.fetchPaymentMethods(), this.fetchCryptoCurrencies()]);
135
+ this.clearQuotes();
129
136
 
130
- state.loading = false;
137
+ state.loading = false;
131
138
 
132
- StorageUtil.setOnRampPreferredCountry(country);
139
+ StorageUtil.setOnRampPreferredCountry(country);
140
+ } catch (error) {
141
+ state.loading = false;
142
+ state.error = {
143
+ type: OnRampErrorType.FAILED_TO_LOAD_COUNTRIES,
144
+ message: 'Failed to load countries'
145
+ };
146
+ }
133
147
  },
134
148
 
135
149
  setSelectedPaymentMethod(paymentMethod: OnRampPaymentMethod) {
136
150
  state.selectedPaymentMethod = paymentMethod;
137
-
138
- this.clearQuotes();
139
151
  },
140
152
 
141
153
  setPurchaseCurrency(currency: OnRampCryptoCurrency) {
@@ -175,16 +187,16 @@ export const OnRampController = {
175
187
 
176
188
  updateSelectedPurchaseCurrency() {
177
189
  let selectedCurrency;
178
- if (NetworkController.state.caipNetwork?.id) {
190
+ if (ConnectionsController.state.activeNetwork?.caipNetworkId) {
179
191
  const defaultCurrency =
180
192
  ConstantsUtil.NETWORK_DEFAULT_CURRENCIES[
181
- NetworkController.state.caipNetwork
182
- ?.id as keyof typeof ConstantsUtil.NETWORK_DEFAULT_CURRENCIES
193
+ ConnectionsController.state.activeNetwork
194
+ ?.caipNetworkId as keyof typeof ConstantsUtil.NETWORK_DEFAULT_CURRENCIES
183
195
  ];
184
196
  selectedCurrency = state.purchaseCurrencies?.find(c => c.currencyCode === defaultCurrency);
185
197
  }
186
198
 
187
- state.purchaseCurrency = selectedCurrency || state.purchaseCurrencies?.[0] || undefined;
199
+ state.purchaseCurrency = selectedCurrency ?? undefined;
188
200
  },
189
201
 
190
202
  getServiceProviderImage(serviceProviderName?: string) {
@@ -231,6 +243,27 @@ export const OnRampController = {
231
243
  }
232
244
  },
233
245
 
246
+ async fetchCountriesDefaults() {
247
+ try {
248
+ let countriesDefaults = await StorageUtil.getOnRampCountriesDefaults();
249
+
250
+ if (!countriesDefaults.length) {
251
+ countriesDefaults = (await BlockchainApiController.fetchOnRampCountriesDefaults()) ?? [];
252
+
253
+ if (countriesDefaults.length) {
254
+ StorageUtil.setOnRampCountriesDefaults(countriesDefaults);
255
+ }
256
+ }
257
+
258
+ state.countriesDefaults = countriesDefaults;
259
+ } catch (error) {
260
+ state.error = {
261
+ type: OnRampErrorType.FAILED_TO_LOAD_COUNTRIES,
262
+ message: 'Failed to load countries defaults'
263
+ };
264
+ }
265
+ },
266
+
234
267
  async fetchServiceProviders() {
235
268
  try {
236
269
  let serviceProviders = await StorageUtil.getOnRampServiceProviders();
@@ -259,10 +292,8 @@ export const OnRampController = {
259
292
  });
260
293
 
261
294
  const defaultCountryPaymentMethods =
262
- ConstantsUtil.COUNTRY_DEFAULT_PAYMENT_METHOD[
263
- state.selectedCountry
264
- ?.countryCode as keyof typeof ConstantsUtil.COUNTRY_DEFAULT_PAYMENT_METHOD
265
- ];
295
+ state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
296
+ ?.defaultPaymentMethods || [];
266
297
 
267
298
  state.paymentMethods =
268
299
  paymentMethods?.sort((a, b) => {
@@ -276,9 +307,7 @@ export const OnRampController = {
276
307
  return aIndex - bIndex;
277
308
  }) || [];
278
309
 
279
- state.selectedPaymentMethod = paymentMethods?.[0] || undefined;
280
-
281
- this.clearQuotes();
310
+ state.selectedPaymentMethod = state.paymentMethods[0];
282
311
  } catch (error) {
283
312
  state.error = {
284
313
  type: OnRampErrorType.FAILED_TO_LOAD_METHODS,
@@ -298,16 +327,16 @@ export const OnRampController = {
298
327
  state.purchaseCurrencies = cryptoCurrencies || [];
299
328
 
300
329
  let selectedCurrency;
301
- if (NetworkController.state.caipNetwork?.id) {
330
+ if (ConnectionsController.state.activeNetwork?.caipNetworkId) {
302
331
  const defaultCurrency =
303
332
  ConstantsUtil.NETWORK_DEFAULT_CURRENCIES[
304
- NetworkController.state.caipNetwork
305
- ?.id as keyof typeof ConstantsUtil.NETWORK_DEFAULT_CURRENCIES
306
- ] || 'ETH';
333
+ ConnectionsController.state.activeNetwork
334
+ ?.caipNetworkId as keyof typeof ConstantsUtil.NETWORK_DEFAULT_CURRENCIES
335
+ ];
307
336
  selectedCurrency = state.purchaseCurrencies?.find(c => c.currencyCode === defaultCurrency);
308
337
  }
309
338
 
310
- state.purchaseCurrency = selectedCurrency || cryptoCurrencies?.[0] || undefined;
339
+ state.purchaseCurrency = selectedCurrency || undefined;
311
340
  } catch (error) {
312
341
  state.error = {
313
342
  type: OnRampErrorType.FAILED_TO_LOAD_CURRENCIES,
@@ -336,9 +365,8 @@ export const OnRampController = {
336
365
 
337
366
  if (countryCode) {
338
367
  currencyCode =
339
- ConstantsUtil.COUNTRY_CURRENCIES[
340
- countryCode as keyof typeof ConstantsUtil.COUNTRY_CURRENCIES
341
- ];
368
+ state.countriesDefaults?.find(d => d.countryCode === countryCode)?.defaultCurrencyCode ||
369
+ 'USD';
342
370
  }
343
371
 
344
372
  const preferredCurrency = await StorageUtil.getOnRampPreferredFiatCurrency();
@@ -375,48 +403,100 @@ export const OnRampController = {
375
403
  }
376
404
  },
377
405
 
378
- getQuotesDebounced: CoreHelperUtil.debounce(function () {
379
- OnRampController.getQuotes();
380
- }, 500),
381
-
382
406
  async getQuotes() {
383
- if (!state.paymentAmount || state.paymentAmount <= 0) {
407
+ if (!this.canGenerateQuote()) {
384
408
  this.clearQuotes();
385
409
 
386
410
  return;
387
411
  }
388
412
 
389
- state.quotesLoading = true;
390
- state.error = undefined;
391
-
392
413
  this.abortGetQuotes(false);
393
414
  quotesAbortController = new AbortController();
415
+ const currentSignal = quotesAbortController.signal;
394
416
 
395
417
  try {
418
+ if (
419
+ !state.selectedCountry?.countryCode ||
420
+ !state.purchaseCurrency?.currencyCode ||
421
+ !state.paymentCurrency?.currencyCode ||
422
+ !ConnectionsController.state.activeAddress
423
+ ) {
424
+ throw new BlockchainOnRampError(OnRampErrorType.UNKNOWN, 'Invalid quote parameters');
425
+ }
426
+
427
+ state.quotesLoading = true;
428
+ state.selectedQuote = undefined;
429
+ state.selectedServiceProvider = undefined;
430
+ state.error = undefined;
431
+
432
+ const plainAddress = CoreHelperUtil.getPlainAddress(
433
+ ConnectionsController.state.activeAddress
434
+ );
435
+
436
+ if (!plainAddress) {
437
+ throw new Error('Invalid address');
438
+ }
439
+
396
440
  const body = {
397
- countryCode: state.selectedCountry?.countryCode!,
398
- paymentMethodType: state.selectedPaymentMethod?.paymentMethod!,
399
- destinationCurrencyCode: state.purchaseCurrency?.currencyCode!,
400
- sourceAmount: state.paymentAmount,
401
- sourceCurrencyCode: state.paymentCurrency?.currencyCode!,
402
- walletAddress: AccountController.state.address!
441
+ countryCode: state.selectedCountry.countryCode,
442
+ destinationCurrencyCode: state.purchaseCurrency.currencyCode,
443
+ sourceAmount: state.paymentAmount!,
444
+ sourceCurrencyCode: state.paymentCurrency.currencyCode,
445
+ walletAddress: plainAddress,
446
+ excludeProviders: EXCLUDED_ONRAMP_PROVIDERS
403
447
  };
404
448
 
405
- const response = await BlockchainApiController.getOnRampQuotes(
406
- body,
407
- quotesAbortController.signal
408
- );
449
+ const response = await BlockchainApiController.getOnRampQuotes(body, currentSignal);
409
450
 
410
451
  if (!response || !response.length) {
411
- throw new Error('No quotes available');
452
+ throw new BlockchainOnRampError(OnRampErrorType.NO_VALID_QUOTES, 'No valid quotes');
412
453
  }
413
454
 
414
455
  const quotes = response.sort((a, b) => b.customerScore - a.customerScore);
415
456
 
416
457
  state.quotes = quotes;
417
- state.selectedQuote = quotes[0];
458
+
459
+ //Replace payment method if it's not in the quotes
460
+ const isValidPaymentMethod =
461
+ state.selectedPaymentMethod &&
462
+ quotes.some(
463
+ quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
464
+ );
465
+
466
+ if (!isValidPaymentMethod) {
467
+ const countryMethods =
468
+ state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
469
+ ?.defaultPaymentMethods || [];
470
+
471
+ const availableQuoteMethods = new Set(quotes.map(q => q.paymentMethodType));
472
+
473
+ let newPaymentMethodType: string | undefined;
474
+ for (const dpm of countryMethods) {
475
+ if (availableQuoteMethods.has(dpm)) {
476
+ newPaymentMethodType = dpm;
477
+ break;
478
+ }
479
+ }
480
+
481
+ if (newPaymentMethodType) {
482
+ state.selectedPaymentMethod =
483
+ state.paymentMethods.find(m => m.paymentMethod === newPaymentMethodType) ||
484
+ state.paymentMethods.find(
485
+ method => method.paymentMethod === quotes[0]?.paymentMethodType
486
+ );
487
+ } else {
488
+ state.selectedPaymentMethod = state.paymentMethods.find(
489
+ method => method.paymentMethod === quotes[0]?.paymentMethodType
490
+ );
491
+ }
492
+ }
493
+
494
+ state.selectedQuote = quotes.find(
495
+ quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
496
+ );
497
+
418
498
  state.selectedServiceProvider = state.serviceProviders.find(
419
- sp => sp.serviceProvider === quotes[0]?.serviceProvider
499
+ sp => sp.serviceProvider === state.selectedQuote?.serviceProvider
420
500
  );
421
501
  } catch (error: any) {
422
502
  if (error.name === 'AbortError') {
@@ -435,7 +515,9 @@ export const OnRampController = {
435
515
  this.clearQuotes();
436
516
  state.error = mapErrorMessage(error?.code || 'UNKNOWN_ERROR');
437
517
  } finally {
438
- state.quotesLoading = false;
518
+ if (!currentSignal.aborted) {
519
+ state.quotesLoading = false;
520
+ }
439
521
  }
440
522
  },
441
523
 
@@ -449,7 +531,7 @@ export const OnRampController = {
449
531
  state.paymentCurrency?.currencyCode &&
450
532
  state.selectedCountry &&
451
533
  !state.loading &&
452
- AccountController.state.address
534
+ ConnectionsController.state.activeAddress
453
535
  );
454
536
  },
455
537
 
@@ -476,6 +558,10 @@ export const OnRampController = {
476
558
  },
477
559
 
478
560
  async generateWidget({ quote }: { quote: OnRampQuote }) {
561
+ if (!ConnectionsController.state.activeAddress) {
562
+ throw new Error('No active address');
563
+ }
564
+
479
565
  const metadata = OptionsController.state.metadata;
480
566
  const eventProperties = {
481
567
  asset: quote.destinationCurrencyCode,
@@ -492,16 +578,26 @@ export const OnRampController = {
492
578
  throw new Error('Invalid quote');
493
579
  }
494
580
 
495
- const widget = await BlockchainApiController.getOnRampWidget({
581
+ const plainAddress = CoreHelperUtil.getPlainAddress(
582
+ ConnectionsController.state.activeAddress
583
+ );
584
+
585
+ if (!plainAddress) {
586
+ throw new Error('Invalid address');
587
+ }
588
+
589
+ const body = {
496
590
  countryCode: quote.countryCode,
497
591
  destinationCurrencyCode: quote.destinationCurrencyCode,
498
592
  paymentMethodType: quote.paymentMethodType,
499
593
  serviceProvider: quote.serviceProvider,
500
594
  sourceAmount: quote.sourceAmount,
501
595
  sourceCurrencyCode: quote.sourceCurrencyCode,
502
- walletAddress: AccountController.state.address!,
596
+ walletAddress: plainAddress,
503
597
  redirectUrl: metadata?.redirect?.universal ?? metadata?.redirect?.native
504
- });
598
+ };
599
+
600
+ const widget = await BlockchainApiController.getOnRampWidget(body);
505
601
 
506
602
  if (!widget || !widget.widgetUrl) {
507
603
  throw new Error('Invalid widget response');
@@ -555,6 +651,7 @@ export const OnRampController = {
555
651
  await this.fetchServiceProviders();
556
652
 
557
653
  await Promise.all([
654
+ this.fetchCountriesDefaults(),
558
655
  this.fetchPaymentMethods(),
559
656
  this.fetchFiatLimits(),
560
657
  this.fetchCryptoCurrencies(),
@@ -1,6 +1,14 @@
1
1
  import { proxy, ref } from 'valtio';
2
- import type { Tokens, Storage, Metadata } from '@reown/appkit-common-react-native';
3
- import type { CustomWallet, Features, ProjectId, SdkType, SdkVersion } from '../utils/TypeUtil';
2
+ import type {
3
+ Storage,
4
+ Metadata,
5
+ AppKitNetwork,
6
+ CustomWallet,
7
+ Features,
8
+ ProjectId,
9
+ SdkType,
10
+ SdkVersion
11
+ } from '@reown/appkit-common-react-native';
4
12
 
5
13
  import { ConstantsUtil } from '../utils/ConstantsUtil';
6
14
 
@@ -17,7 +25,6 @@ export interface OptionsControllerState {
17
25
  excludeWalletIds?: string[];
18
26
  featuredWalletIds?: string[];
19
27
  customWallets?: CustomWallet[];
20
- tokens?: Tokens;
21
28
  enableAnalytics?: boolean;
22
29
  sdkType: SdkType;
23
30
  sdkVersion: SdkVersion;
@@ -26,13 +33,14 @@ export interface OptionsControllerState {
26
33
  isOnRampEnabled?: boolean;
27
34
  features?: Features;
28
35
  debug?: boolean;
36
+ defaultNetwork?: AppKitNetwork;
29
37
  }
30
38
 
31
39
  // -- State --------------------------------------------- //
32
40
  const state = proxy<OptionsControllerState>({
33
41
  projectId: '',
34
42
  sdkType: 'appkit',
35
- sdkVersion: 'react-native-wagmi-undefined',
43
+ sdkVersion: 'react-native-undefined-undefined',
36
44
  features: ConstantsUtil.DEFAULT_FEATURES,
37
45
  debug: false
38
46
  });
@@ -61,10 +69,6 @@ export const OptionsController = {
61
69
  state.featuredWalletIds = featuredWalletIds;
62
70
  },
63
71
 
64
- setTokens(tokens: OptionsControllerState['tokens']) {
65
- state.tokens = tokens;
66
- },
67
-
68
72
  setCustomWallets(customWallets: OptionsControllerState['customWallets']) {
69
73
  state.customWallets = customWallets;
70
74
  },
@@ -103,10 +107,22 @@ export const OptionsController = {
103
107
  }
104
108
  },
105
109
 
110
+ setDefaultNetwork(defaultNetwork?: OptionsControllerState['defaultNetwork']) {
111
+ state.defaultNetwork = defaultNetwork;
112
+ },
113
+
106
114
  isClipboardAvailable() {
107
115
  return !!state.clipboardClient;
108
116
  },
109
117
 
118
+ getStorage() {
119
+ if (!state.storage) {
120
+ throw new Error('AppKit: Storage is not set');
121
+ }
122
+
123
+ return state.storage;
124
+ },
125
+
110
126
  copyToClipboard(value: string) {
111
127
  const client = state.clipboardClient;
112
128
  if (client) {
@@ -1,23 +1,12 @@
1
1
  import { proxy } from 'valtio';
2
- import type { CaipNetwork } from '@reown/appkit-common-react-native';
3
-
4
2
  import type {
3
+ AppKitNetwork,
4
+ SocialProvider,
5
5
  WcWallet,
6
- Connector,
7
- SwapInputTarget,
8
6
  OnRampTransactionResult
9
- } from '../utils/TypeUtil';
7
+ } from '@reown/appkit-common-react-native';
10
8
 
11
9
  // -- Types --------------------------------------------- //
12
- type TransactionAction = {
13
- goBack: boolean;
14
- view: RouterControllerState['view'] | null;
15
- close?: boolean;
16
- replace?: boolean;
17
- onSuccess?: () => void;
18
- onCancel?: () => void;
19
- };
20
-
21
10
  export interface RouterControllerState {
22
11
  view:
23
12
  | 'Account'
@@ -28,11 +17,7 @@ export interface RouterControllerState {
28
17
  | 'ConnectingExternal'
29
18
  | 'ConnectingSiwe'
30
19
  | 'ConnectingSocial'
31
- | 'ConnectingFarcaster'
32
20
  | 'ConnectingWalletConnect'
33
- | 'Create'
34
- | 'EmailVerifyDevice'
35
- | 'EmailVerifyOtp'
36
21
  | 'GetWallet'
37
22
  | 'Networks'
38
23
  | 'OnRamp'
@@ -42,15 +27,10 @@ export interface RouterControllerState {
42
27
  | 'OnRampTransaction'
43
28
  | 'SwitchNetwork'
44
29
  | 'Swap'
45
- | 'SwapSelectToken'
46
30
  | 'SwapPreview'
47
31
  | 'Transactions'
48
32
  | 'UnsupportedChain'
49
- | 'UpdateEmailPrimaryOtp'
50
- | 'UpdateEmailSecondaryOtp'
51
- | 'UpdateEmailWallet'
52
33
  | 'UpgradeEmailWallet'
53
- | 'UpgradeToSmartAccount'
54
34
  | 'WalletCompatibleNetworks'
55
35
  | 'WalletReceive'
56
36
  | 'WalletSend'
@@ -59,23 +39,20 @@ export interface RouterControllerState {
59
39
  | 'WhatIsANetwork'
60
40
  | 'WhatIsAWallet';
61
41
  history: RouterControllerState['view'][];
42
+ navigationDirection: 'forward' | 'backward' | 'none';
62
43
  data?: {
63
- connector?: Connector;
64
44
  wallet?: WcWallet;
65
- network?: CaipNetwork;
66
- email?: string;
67
- newEmail?: string;
68
- swapTarget?: SwapInputTarget;
45
+ network?: AppKitNetwork;
69
46
  onrampResult?: OnRampTransactionResult;
47
+ socialProvider?: SocialProvider;
70
48
  };
71
- transactionStack: TransactionAction[];
72
49
  }
73
50
 
74
51
  // -- State --------------------------------------------- //
75
52
  const state = proxy<RouterControllerState>({
76
53
  view: 'Connect',
77
54
  history: ['Connect'],
78
- transactionStack: []
55
+ navigationDirection: 'none'
79
56
  });
80
57
 
81
58
  // -- Controller ---------------------------------------- //
@@ -84,37 +61,15 @@ export const RouterController = {
84
61
 
85
62
  push(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
86
63
  if (view !== state.view) {
64
+ state.navigationDirection = 'forward';
87
65
  state.view = view;
88
66
  state.history = [...state.history, view];
89
67
  state.data = data;
90
68
  }
91
69
  },
92
70
 
93
- pushTransactionStack(action: TransactionAction) {
94
- state.transactionStack = [...state.transactionStack, action];
95
- },
96
-
97
- popTransactionStack(cancel?: boolean) {
98
- const action = state.transactionStack.pop();
99
-
100
- if (!action) {
101
- return;
102
- }
103
-
104
- if (cancel) {
105
- this.goBack();
106
- action?.onCancel?.();
107
- } else {
108
- if (action.goBack) {
109
- this.goBack();
110
- } else if (action.view) {
111
- this.reset(action.view);
112
- }
113
- action?.onSuccess?.();
114
- }
115
- },
116
-
117
71
  reset(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
72
+ state.navigationDirection = 'none';
118
73
  state.view = view;
119
74
  state.history = [view];
120
75
  state.data = data;
@@ -122,6 +77,7 @@ export const RouterController = {
122
77
 
123
78
  replace(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
124
79
  if (state.history.length >= 1 && state.history.at(-1) !== view) {
80
+ state.navigationDirection = 'none';
125
81
  state.view = view;
126
82
  state.history[state.history.length - 1] = view;
127
83
  state.data = data;
@@ -133,6 +89,7 @@ export const RouterController = {
133
89
  state.history.pop();
134
90
  const [last] = state.history.slice(-1);
135
91
  if (last) {
92
+ state.navigationDirection = 'backward';
136
93
  state.view = last;
137
94
  }
138
95
  }
@@ -143,6 +100,7 @@ export const RouterController = {
143
100
  state.history = state.history.slice(0, historyIndex + 1);
144
101
  const [last] = state.history.slice(-1);
145
102
  if (last) {
103
+ state.navigationDirection = 'backward';
146
104
  state.view = last;
147
105
  }
148
106
  }