@reown/appkit-core-react-native 0.0.0-feat-coinbase-20250722202925 → 0.0.0-feat-onramp-20250722205908

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 (195) hide show
  1. package/lib/commonjs/controllers/AccountController.js +17 -20
  2. package/lib/commonjs/controllers/AccountController.js.map +1 -1
  3. package/lib/commonjs/controllers/ApiController.js +16 -28
  4. package/lib/commonjs/controllers/ApiController.js.map +1 -1
  5. package/lib/commonjs/controllers/BlockchainApiController.js +74 -204
  6. package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
  7. package/lib/commonjs/controllers/ConnectionController.js +11 -8
  8. package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
  9. package/lib/commonjs/controllers/ConnectorController.js +49 -0
  10. package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
  11. package/lib/commonjs/controllers/EnsController.js +4 -4
  12. package/lib/commonjs/controllers/EnsController.js.map +1 -1
  13. package/lib/commonjs/controllers/EventsController.js +4 -4
  14. package/lib/commonjs/controllers/EventsController.js.map +1 -1
  15. package/lib/commonjs/controllers/ModalController.js +7 -6
  16. package/lib/commonjs/controllers/ModalController.js.map +1 -1
  17. package/lib/commonjs/controllers/OnRampController.js +69 -22
  18. package/lib/commonjs/controllers/OnRampController.js.map +1 -1
  19. package/lib/commonjs/controllers/OptionsController.js +3 -11
  20. package/lib/commonjs/controllers/OptionsController.js.map +1 -1
  21. package/lib/commonjs/controllers/RouterController.js +22 -1
  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 +5 -29
  26. package/lib/commonjs/controllers/SnackController.js.map +1 -1
  27. package/lib/commonjs/controllers/SwapController.js +150 -151
  28. package/lib/commonjs/controllers/SwapController.js.map +1 -1
  29. package/lib/commonjs/controllers/ThemeController.js +1 -9
  30. package/lib/commonjs/controllers/ThemeController.js.map +1 -1
  31. package/lib/commonjs/controllers/TransactionsController.js +21 -25
  32. package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
  33. package/lib/commonjs/controllers/WebviewController.js +52 -0
  34. package/lib/commonjs/controllers/WebviewController.js.map +1 -0
  35. package/lib/commonjs/index.js +24 -3
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/utils/AssetUtil.js +15 -3
  38. package/lib/commonjs/utils/AssetUtil.js.map +1 -1
  39. package/lib/commonjs/utils/ConnectionUtil.js +33 -0
  40. package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
  41. package/lib/commonjs/utils/ConstantsUtil.js +9 -538
  42. package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
  43. package/lib/commonjs/utils/CoreHelperUtil.js +6 -12
  44. package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
  45. package/lib/commonjs/utils/FetchUtil.js +28 -9
  46. package/lib/commonjs/utils/FetchUtil.js.map +1 -1
  47. package/lib/commonjs/utils/NetworkUtil.js +46 -0
  48. package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
  49. package/lib/commonjs/utils/StorageUtil.js +42 -51
  50. package/lib/commonjs/utils/StorageUtil.js.map +1 -1
  51. package/lib/commonjs/utils/SwapApiUtil.js +21 -15
  52. package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
  53. package/lib/module/controllers/AccountController.js +17 -20
  54. package/lib/module/controllers/AccountController.js.map +1 -1
  55. package/lib/module/controllers/ApiController.js +16 -27
  56. package/lib/module/controllers/ApiController.js.map +1 -1
  57. package/lib/module/controllers/BlockchainApiController.js +73 -203
  58. package/lib/module/controllers/BlockchainApiController.js.map +1 -1
  59. package/lib/module/controllers/ConnectionController.js +11 -8
  60. package/lib/module/controllers/ConnectionController.js.map +1 -1
  61. package/lib/module/controllers/ConnectorController.js +44 -0
  62. package/lib/module/controllers/ConnectorController.js.map +1 -0
  63. package/lib/module/controllers/EnsController.js +2 -2
  64. package/lib/module/controllers/EnsController.js.map +1 -1
  65. package/lib/module/controllers/EventsController.js +1 -1
  66. package/lib/module/controllers/EventsController.js.map +1 -1
  67. package/lib/module/controllers/ModalController.js +7 -6
  68. package/lib/module/controllers/ModalController.js.map +1 -1
  69. package/lib/module/controllers/OnRampController.js +70 -23
  70. package/lib/module/controllers/OnRampController.js.map +1 -1
  71. package/lib/module/controllers/OptionsController.js +3 -11
  72. package/lib/module/controllers/OptionsController.js.map +1 -1
  73. package/lib/module/controllers/RouterController.js +22 -1
  74. package/lib/module/controllers/RouterController.js.map +1 -1
  75. package/lib/module/controllers/SendController.js +98 -98
  76. package/lib/module/controllers/SendController.js.map +1 -1
  77. package/lib/module/controllers/SnackController.js +5 -29
  78. package/lib/module/controllers/SnackController.js.map +1 -1
  79. package/lib/module/controllers/SwapController.js +150 -151
  80. package/lib/module/controllers/SwapController.js.map +1 -1
  81. package/lib/module/controllers/ThemeController.js +1 -9
  82. package/lib/module/controllers/ThemeController.js.map +1 -1
  83. package/lib/module/controllers/TransactionsController.js +19 -23
  84. package/lib/module/controllers/TransactionsController.js.map +1 -1
  85. package/lib/module/controllers/WebviewController.js +47 -0
  86. package/lib/module/controllers/WebviewController.js.map +1 -0
  87. package/lib/module/index.js +4 -1
  88. package/lib/module/index.js.map +1 -1
  89. package/lib/module/utils/AssetUtil.js +15 -3
  90. package/lib/module/utils/AssetUtil.js.map +1 -1
  91. package/lib/module/utils/ConnectionUtil.js +27 -0
  92. package/lib/module/utils/ConnectionUtil.js.map +1 -0
  93. package/lib/module/utils/ConstantsUtil.js +9 -538
  94. package/lib/module/utils/ConstantsUtil.js.map +1 -1
  95. package/lib/module/utils/CoreHelperUtil.js +6 -12
  96. package/lib/module/utils/CoreHelperUtil.js.map +1 -1
  97. package/lib/module/utils/FetchUtil.js +28 -9
  98. package/lib/module/utils/FetchUtil.js.map +1 -1
  99. package/lib/module/utils/NetworkUtil.js +40 -0
  100. package/lib/module/utils/NetworkUtil.js.map +1 -0
  101. package/lib/module/utils/StorageUtil.js +42 -51
  102. package/lib/module/utils/StorageUtil.js.map +1 -1
  103. package/lib/module/utils/SwapApiUtil.js +21 -15
  104. package/lib/module/utils/SwapApiUtil.js.map +1 -1
  105. package/lib/typescript/controllers/AccountController.d.ts +4 -4
  106. package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
  107. package/lib/typescript/controllers/ApiController.d.ts +2 -3
  108. package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
  109. package/lib/typescript/controllers/BlockchainApiController.d.ts +15 -29
  110. package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
  111. package/lib/typescript/controllers/ConnectionController.d.ts +11 -3
  112. package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
  113. package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
  114. package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
  115. package/lib/typescript/controllers/ModalController.d.ts +1 -1
  116. package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
  117. package/lib/typescript/controllers/NetworkController.d.ts +1 -1
  118. package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
  119. package/lib/typescript/controllers/OnRampController.d.ts +3 -1
  120. package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
  121. package/lib/typescript/controllers/OptionsController.d.ts +2 -7
  122. package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
  123. package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
  124. package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
  125. package/lib/typescript/controllers/RouterController.d.ts +16 -4
  126. package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
  127. package/lib/typescript/controllers/SendController.d.ts +7 -5
  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 -12
  132. package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
  133. package/lib/typescript/controllers/ThemeController.d.ts +1 -1
  134. package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
  135. package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
  136. package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
  137. package/lib/typescript/controllers/WebviewController.d.ts +21 -0
  138. package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
  139. package/lib/typescript/index.d.ts +4 -1
  140. package/lib/typescript/index.d.ts.map +1 -1
  141. package/lib/typescript/utils/AssetUtil.d.ts +3 -2
  142. package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
  143. package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
  144. package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
  145. package/lib/typescript/utils/ConstantsUtil.d.ts +3 -422
  146. package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
  147. package/lib/typescript/utils/CoreHelperUtil.d.ts +4 -5
  148. package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
  149. package/lib/typescript/utils/FetchUtil.d.ts +1 -1
  150. package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
  151. package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
  152. package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
  153. package/lib/typescript/utils/StorageUtil.d.ts +7 -14
  154. package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
  155. package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
  156. package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
  157. package/lib/typescript/utils/TypeUtil.d.ts +191 -42
  158. package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
  159. package/package.json +4 -4
  160. package/src/controllers/AccountController.ts +27 -23
  161. package/src/controllers/ApiController.ts +10 -29
  162. package/src/controllers/BlockchainApiController.ts +65 -179
  163. package/src/controllers/ConnectionController.ts +24 -12
  164. package/src/controllers/ConnectorController.ts +63 -0
  165. package/src/controllers/EnsController.ts +2 -2
  166. package/src/controllers/EventsController.ts +1 -1
  167. package/src/controllers/ModalController.ts +8 -8
  168. package/src/controllers/NetworkController.ts +1 -1
  169. package/src/controllers/OnRampController.ts +99 -35
  170. package/src/controllers/OptionsController.ts +13 -19
  171. package/src/controllers/PublicStateController.ts +1 -1
  172. package/src/controllers/RouterController.ts +54 -5
  173. package/src/controllers/SendController.ts +113 -124
  174. package/src/controllers/SnackController.ts +5 -31
  175. package/src/controllers/SwapController.ts +181 -174
  176. package/src/controllers/ThemeController.ts +2 -11
  177. package/src/controllers/TransactionsController.ts +20 -26
  178. package/src/controllers/WebviewController.ts +63 -0
  179. package/src/index.ts +6 -3
  180. package/src/utils/AssetUtil.ts +20 -4
  181. package/src/utils/ConnectionUtil.ts +27 -0
  182. package/src/utils/ConstantsUtil.ts +9 -544
  183. package/src/utils/CoreHelperUtil.ts +9 -34
  184. package/src/utils/FetchUtil.ts +31 -10
  185. package/src/utils/NetworkUtil.ts +33 -0
  186. package/src/utils/StorageUtil.ts +48 -60
  187. package/src/utils/SwapApiUtil.ts +38 -27
  188. package/src/utils/TypeUtil.ts +193 -43
  189. package/lib/commonjs/controllers/ConnectionsController.js +0 -387
  190. package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
  191. package/lib/module/controllers/ConnectionsController.js +0 -382
  192. package/lib/module/controllers/ConnectionsController.js.map +0 -1
  193. package/lib/typescript/controllers/ConnectionsController.d.ts +0 -53
  194. package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
  195. package/src/controllers/ConnectionsController.ts +0 -509
@@ -9,7 +9,8 @@ import type {
9
9
  OnRampCryptoCurrency,
10
10
  OnRampServiceProvider,
11
11
  OnRampError,
12
- OnRampErrorTypeValues
12
+ OnRampErrorTypeValues,
13
+ OnRampCountryDefaults
13
14
  } from '../utils/TypeUtil';
14
15
 
15
16
  import { CoreHelperUtil } from '../utils/CoreHelperUtil';
@@ -20,7 +21,7 @@ import { ConstantsUtil, OnRampErrorType } from '../utils/ConstantsUtil';
20
21
  import { StorageUtil } from '../utils/StorageUtil';
21
22
  import { SnackController } from './SnackController';
22
23
  import { EventsController } from './EventsController';
23
- import { BlockchainApiController } from './BlockchainApiController';
24
+ import { BlockchainApiController, EXCLUDED_ONRAMP_PROVIDERS } from './BlockchainApiController';
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;
@@ -114,9 +120,8 @@ export const OnRampController = {
114
120
 
115
121
  if (updateCurrency) {
116
122
  const currencyCode =
117
- ConstantsUtil.COUNTRY_CURRENCIES[
118
- country.countryCode as keyof typeof ConstantsUtil.COUNTRY_CURRENCIES
119
- ] || 'USD';
123
+ state.countriesDefaults?.find(d => d.countryCode === country.countryCode)
124
+ ?.defaultCurrencyCode || 'USD';
120
125
 
121
126
  const currency = state.paymentCurrencies?.find(c => c.currencyCode === currencyCode);
122
127
 
@@ -126,6 +131,7 @@ export const OnRampController = {
126
131
  }
127
132
 
128
133
  await Promise.all([this.fetchPaymentMethods(), this.fetchCryptoCurrencies()]);
134
+ this.clearQuotes();
129
135
 
130
136
  state.loading = false;
131
137
 
@@ -134,8 +140,6 @@ export const OnRampController = {
134
140
 
135
141
  setSelectedPaymentMethod(paymentMethod: OnRampPaymentMethod) {
136
142
  state.selectedPaymentMethod = paymentMethod;
137
-
138
- this.clearQuotes();
139
143
  },
140
144
 
141
145
  setPurchaseCurrency(currency: OnRampCryptoCurrency) {
@@ -184,7 +188,7 @@ export const OnRampController = {
184
188
  selectedCurrency = state.purchaseCurrencies?.find(c => c.currencyCode === defaultCurrency);
185
189
  }
186
190
 
187
- state.purchaseCurrency = selectedCurrency || state.purchaseCurrencies?.[0] || undefined;
191
+ state.purchaseCurrency = selectedCurrency ?? state.purchaseCurrencies?.[0] ?? undefined;
188
192
  },
189
193
 
190
194
  getServiceProviderImage(serviceProviderName?: string) {
@@ -231,6 +235,27 @@ export const OnRampController = {
231
235
  }
232
236
  },
233
237
 
238
+ async fetchCountriesDefaults() {
239
+ try {
240
+ let countriesDefaults = await StorageUtil.getOnRampCountriesDefaults();
241
+
242
+ if (!countriesDefaults.length) {
243
+ countriesDefaults = (await BlockchainApiController.fetchOnRampCountriesDefaults()) ?? [];
244
+
245
+ if (countriesDefaults.length) {
246
+ StorageUtil.setOnRampCountriesDefaults(countriesDefaults);
247
+ }
248
+ }
249
+
250
+ state.countriesDefaults = countriesDefaults;
251
+ } catch (error) {
252
+ state.error = {
253
+ type: OnRampErrorType.FAILED_TO_LOAD_COUNTRIES,
254
+ message: 'Failed to load countries defaults'
255
+ };
256
+ }
257
+ },
258
+
234
259
  async fetchServiceProviders() {
235
260
  try {
236
261
  let serviceProviders = await StorageUtil.getOnRampServiceProviders();
@@ -259,10 +284,8 @@ export const OnRampController = {
259
284
  });
260
285
 
261
286
  const defaultCountryPaymentMethods =
262
- ConstantsUtil.COUNTRY_DEFAULT_PAYMENT_METHOD[
263
- state.selectedCountry
264
- ?.countryCode as keyof typeof ConstantsUtil.COUNTRY_DEFAULT_PAYMENT_METHOD
265
- ];
287
+ state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
288
+ ?.defaultPaymentMethods || [];
266
289
 
267
290
  state.paymentMethods =
268
291
  paymentMethods?.sort((a, b) => {
@@ -276,9 +299,7 @@ export const OnRampController = {
276
299
  return aIndex - bIndex;
277
300
  }) || [];
278
301
 
279
- state.selectedPaymentMethod = paymentMethods?.[0] || undefined;
280
-
281
- this.clearQuotes();
302
+ state.selectedPaymentMethod = state.paymentMethods[0];
282
303
  } catch (error) {
283
304
  state.error = {
284
305
  type: OnRampErrorType.FAILED_TO_LOAD_METHODS,
@@ -336,9 +357,8 @@ export const OnRampController = {
336
357
 
337
358
  if (countryCode) {
338
359
  currencyCode =
339
- ConstantsUtil.COUNTRY_CURRENCIES[
340
- countryCode as keyof typeof ConstantsUtil.COUNTRY_CURRENCIES
341
- ];
360
+ state.countriesDefaults?.find(d => d.countryCode === countryCode)?.defaultCurrencyCode ||
361
+ 'USD';
342
362
  }
343
363
 
344
364
  const preferredCurrency = await StorageUtil.getOnRampPreferredFiatCurrency();
@@ -387,36 +407,75 @@ export const OnRampController = {
387
407
  }
388
408
 
389
409
  state.quotesLoading = true;
410
+ state.selectedQuote = undefined;
411
+ state.selectedServiceProvider = undefined;
390
412
  state.error = undefined;
391
413
 
392
414
  this.abortGetQuotes(false);
393
415
  quotesAbortController = new AbortController();
416
+ const currentSignal = quotesAbortController.signal;
394
417
 
395
418
  try {
396
419
  const body = {
397
420
  countryCode: state.selectedCountry?.countryCode!,
398
- paymentMethodType: state.selectedPaymentMethod?.paymentMethod!,
399
421
  destinationCurrencyCode: state.purchaseCurrency?.currencyCode!,
400
422
  sourceAmount: state.paymentAmount,
401
423
  sourceCurrencyCode: state.paymentCurrency?.currencyCode!,
402
- walletAddress: AccountController.state.address!
424
+ walletAddress: AccountController.state.address!,
425
+ excludeProviders: EXCLUDED_ONRAMP_PROVIDERS
403
426
  };
404
427
 
405
- const response = await BlockchainApiController.getOnRampQuotes(
406
- body,
407
- quotesAbortController.signal
408
- );
428
+ const response = await BlockchainApiController.getOnRampQuotes(body, currentSignal);
409
429
 
410
430
  if (!response || !response.length) {
411
- throw new Error('No quotes available');
431
+ throw { code: OnRampErrorType.NO_VALID_QUOTES };
412
432
  }
413
433
 
414
434
  const quotes = response.sort((a, b) => b.customerScore - a.customerScore);
415
435
 
416
436
  state.quotes = quotes;
417
- state.selectedQuote = quotes[0];
437
+
438
+ //Replace payment method if it's not in the quotes
439
+ const isValidPaymentMethod =
440
+ state.selectedPaymentMethod &&
441
+ quotes.some(
442
+ quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
443
+ );
444
+
445
+ if (!isValidPaymentMethod) {
446
+ const countryMethods =
447
+ state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
448
+ ?.defaultPaymentMethods || [];
449
+
450
+ const availableQuoteMethods = new Set(quotes.map(q => q.paymentMethodType));
451
+
452
+ let newPaymentMethodType: string | undefined;
453
+ for (const dpm of countryMethods) {
454
+ if (availableQuoteMethods.has(dpm)) {
455
+ newPaymentMethodType = dpm;
456
+ break;
457
+ }
458
+ }
459
+
460
+ if (newPaymentMethodType) {
461
+ state.selectedPaymentMethod =
462
+ state.paymentMethods.find(m => m.paymentMethod === newPaymentMethodType) ||
463
+ state.paymentMethods.find(
464
+ method => method.paymentMethod === quotes[0]?.paymentMethodType
465
+ );
466
+ } else {
467
+ state.selectedPaymentMethod = state.paymentMethods.find(
468
+ method => method.paymentMethod === quotes[0]?.paymentMethodType
469
+ );
470
+ }
471
+ }
472
+
473
+ state.selectedQuote = quotes.find(
474
+ quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
475
+ );
476
+
418
477
  state.selectedServiceProvider = state.serviceProviders.find(
419
- sp => sp.serviceProvider === quotes[0]?.serviceProvider
478
+ sp => sp.serviceProvider === state.selectedQuote?.serviceProvider
420
479
  );
421
480
  } catch (error: any) {
422
481
  if (error.name === 'AbortError') {
@@ -435,7 +494,9 @@ export const OnRampController = {
435
494
  this.clearQuotes();
436
495
  state.error = mapErrorMessage(error?.code || 'UNKNOWN_ERROR');
437
496
  } finally {
438
- state.quotesLoading = false;
497
+ if (!currentSignal.aborted) {
498
+ state.quotesLoading = false;
499
+ }
439
500
  }
440
501
  },
441
502
 
@@ -492,7 +553,7 @@ export const OnRampController = {
492
553
  throw new Error('Invalid quote');
493
554
  }
494
555
 
495
- const widget = await BlockchainApiController.getOnRampWidget({
556
+ const body = {
496
557
  countryCode: quote.countryCode,
497
558
  destinationCurrencyCode: quote.destinationCurrencyCode,
498
559
  paymentMethodType: quote.paymentMethodType,
@@ -501,7 +562,9 @@ export const OnRampController = {
501
562
  sourceCurrencyCode: quote.sourceCurrencyCode,
502
563
  walletAddress: AccountController.state.address!,
503
564
  redirectUrl: metadata?.redirect?.universal ?? metadata?.redirect?.native
504
- });
565
+ };
566
+
567
+ const widget = await BlockchainApiController.getOnRampWidget(body);
505
568
 
506
569
  if (!widget || !widget.widgetUrl) {
507
570
  throw new Error('Invalid widget response');
@@ -555,6 +618,7 @@ export const OnRampController = {
555
618
  await this.fetchServiceProviders();
556
619
 
557
620
  await Promise.all([
621
+ this.fetchCountriesDefaults(),
558
622
  this.fetchPaymentMethods(),
559
623
  this.fetchFiatLimits(),
560
624
  this.fetchCryptoCurrencies(),
@@ -1,7 +1,13 @@
1
1
  import { proxy, ref } from 'valtio';
2
- import type { Tokens, Storage, Metadata, AppKitNetwork } from '@reown/appkit-common-react-native';
3
- import type { CustomWallet, Features, ProjectId, SdkType, SdkVersion } from '../utils/TypeUtil';
4
-
2
+ import type {
3
+ CustomWallet,
4
+ Features,
5
+ Metadata,
6
+ ProjectId,
7
+ SdkType,
8
+ SdkVersion,
9
+ Tokens
10
+ } from '../utils/TypeUtil';
5
11
  import { ConstantsUtil } from '../utils/ConstantsUtil';
6
12
 
7
13
  // -- Types --------------------------------------------- //
@@ -11,8 +17,7 @@ export interface ClipboardClient {
11
17
 
12
18
  export interface OptionsControllerState {
13
19
  projectId: ProjectId;
14
- clipboardClient?: ClipboardClient;
15
- storage?: Storage;
20
+ _clipboardClient?: ClipboardClient;
16
21
  includeWalletIds?: string[];
17
22
  excludeWalletIds?: string[];
18
23
  featuredWalletIds?: string[];
@@ -26,7 +31,6 @@ export interface OptionsControllerState {
26
31
  isOnRampEnabled?: boolean;
27
32
  features?: Features;
28
33
  debug?: boolean;
29
- defaultNetwork?: AppKitNetwork;
30
34
  }
31
35
 
32
36
  // -- State --------------------------------------------- //
@@ -43,7 +47,7 @@ export const OptionsController = {
43
47
  state,
44
48
 
45
49
  setClipboardClient(client: ClipboardClient) {
46
- state.clipboardClient = ref(client);
50
+ state._clipboardClient = ref(client);
47
51
  },
48
52
 
49
53
  setProjectId(projectId: OptionsControllerState['projectId']) {
@@ -98,22 +102,12 @@ export const OptionsController = {
98
102
  state.isOnRampEnabled = isOnRampEnabled;
99
103
  },
100
104
 
101
- setStorage(storage?: OptionsControllerState['storage']) {
102
- if (storage) {
103
- state.storage = ref(storage);
104
- }
105
- },
106
-
107
- setDefaultNetwork(defaultNetwork?: OptionsControllerState['defaultNetwork']) {
108
- state.defaultNetwork = defaultNetwork;
109
- },
110
-
111
105
  isClipboardAvailable() {
112
- return !!state.clipboardClient;
106
+ return !!state._clipboardClient;
113
107
  },
114
108
 
115
109
  copyToClipboard(value: string) {
116
- const client = state.clipboardClient;
110
+ const client = state._clipboardClient;
117
111
  if (client) {
118
112
  client?.setString(value);
119
113
  }
@@ -1,6 +1,6 @@
1
1
  import { proxy, subscribe as sub } from 'valtio';
2
2
  import { subscribeKey as subKey } from 'valtio/utils';
3
- import type { CaipNetworkId } from '@reown/appkit-common-react-native';
3
+ import type { CaipNetworkId } from '../utils/TypeUtil.js';
4
4
 
5
5
  // -- Types --------------------------------------------- //
6
6
  export interface PublicStateControllerState {
@@ -1,9 +1,22 @@
1
1
  import { proxy } from 'valtio';
2
- import type { CaipNetwork, SocialProvider } from '@reown/appkit-common-react-native';
3
-
4
- import type { WcWallet, OnRampTransactionResult } from '../utils/TypeUtil';
2
+ import type {
3
+ WcWallet,
4
+ CaipNetwork,
5
+ Connector,
6
+ SwapInputTarget,
7
+ OnRampTransactionResult
8
+ } from '../utils/TypeUtil';
5
9
 
6
10
  // -- Types --------------------------------------------- //
11
+ type TransactionAction = {
12
+ goBack: boolean;
13
+ view: RouterControllerState['view'] | null;
14
+ close?: boolean;
15
+ replace?: boolean;
16
+ onSuccess?: () => void;
17
+ onCancel?: () => void;
18
+ };
19
+
7
20
  export interface RouterControllerState {
8
21
  view:
9
22
  | 'Account'
@@ -14,7 +27,11 @@ export interface RouterControllerState {
14
27
  | 'ConnectingExternal'
15
28
  | 'ConnectingSiwe'
16
29
  | 'ConnectingSocial'
30
+ | 'ConnectingFarcaster'
17
31
  | 'ConnectingWalletConnect'
32
+ | 'Create'
33
+ | 'EmailVerifyDevice'
34
+ | 'EmailVerifyOtp'
18
35
  | 'GetWallet'
19
36
  | 'Networks'
20
37
  | 'OnRamp'
@@ -24,10 +41,15 @@ export interface RouterControllerState {
24
41
  | 'OnRampTransaction'
25
42
  | 'SwitchNetwork'
26
43
  | 'Swap'
44
+ | 'SwapSelectToken'
27
45
  | 'SwapPreview'
28
46
  | 'Transactions'
29
47
  | 'UnsupportedChain'
48
+ | 'UpdateEmailPrimaryOtp'
49
+ | 'UpdateEmailSecondaryOtp'
50
+ | 'UpdateEmailWallet'
30
51
  | 'UpgradeEmailWallet'
52
+ | 'UpgradeToSmartAccount'
31
53
  | 'WalletCompatibleNetworks'
32
54
  | 'WalletReceive'
33
55
  | 'WalletSend'
@@ -37,19 +59,22 @@ export interface RouterControllerState {
37
59
  | 'WhatIsAWallet';
38
60
  history: RouterControllerState['view'][];
39
61
  data?: {
62
+ connector?: Connector;
40
63
  wallet?: WcWallet;
41
64
  network?: CaipNetwork;
42
65
  email?: string;
43
66
  newEmail?: string;
67
+ swapTarget?: SwapInputTarget;
44
68
  onrampResult?: OnRampTransactionResult;
45
- socialProvider?: SocialProvider;
46
69
  };
70
+ transactionStack: TransactionAction[];
47
71
  }
48
72
 
49
73
  // -- State --------------------------------------------- //
50
74
  const state = proxy<RouterControllerState>({
51
75
  view: 'Connect',
52
- history: ['Connect']
76
+ history: ['Connect'],
77
+ transactionStack: []
53
78
  });
54
79
 
55
80
  // -- Controller ---------------------------------------- //
@@ -64,6 +89,30 @@ export const RouterController = {
64
89
  }
65
90
  },
66
91
 
92
+ pushTransactionStack(action: TransactionAction) {
93
+ state.transactionStack = [...state.transactionStack, action];
94
+ },
95
+
96
+ popTransactionStack(cancel?: boolean) {
97
+ const action = state.transactionStack.pop();
98
+
99
+ if (!action) {
100
+ return;
101
+ }
102
+
103
+ if (cancel) {
104
+ this.goBack();
105
+ action?.onCancel?.();
106
+ } else {
107
+ if (action.goBack) {
108
+ this.goBack();
109
+ } else if (action.view) {
110
+ this.reset(action.view);
111
+ }
112
+ action?.onSuccess?.();
113
+ }
114
+ },
115
+
67
116
  reset(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
68
117
  state.view = view;
69
118
  state.history = [view];