@reown/appkit-core-react-native 0.0.0-feat-multi-social-20250715153550 → 0.0.0-feat-onramp-20250718185718
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.
- package/lib/commonjs/controllers/AccountController.js +17 -20
- package/lib/commonjs/controllers/AccountController.js.map +1 -1
- package/lib/commonjs/controllers/ApiController.js +15 -17
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +29 -110
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +11 -8
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectorController.js +49 -0
- package/lib/commonjs/controllers/ConnectorController.js.map +1 -0
- package/lib/commonjs/controllers/EnsController.js +4 -4
- package/lib/commonjs/controllers/EnsController.js.map +1 -1
- package/lib/commonjs/controllers/EventsController.js +4 -4
- package/lib/commonjs/controllers/EventsController.js.map +1 -1
- package/lib/commonjs/controllers/ModalController.js +2 -2
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/OnRampController.js +60 -20
- package/lib/commonjs/controllers/OnRampController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +3 -8
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +22 -1
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +33 -34
- package/lib/commonjs/controllers/SendController.js.map +1 -1
- package/lib/commonjs/controllers/SnackController.js +5 -29
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +148 -136
- package/lib/commonjs/controllers/SwapController.js.map +1 -1
- package/lib/commonjs/controllers/ThemeController.js +1 -9
- package/lib/commonjs/controllers/ThemeController.js.map +1 -1
- package/lib/commonjs/controllers/TransactionsController.js +21 -25
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
- package/lib/commonjs/controllers/WebviewController.js +52 -0
- package/lib/commonjs/controllers/WebviewController.js.map +1 -0
- package/lib/commonjs/index.js +24 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/AssetUtil.js +12 -8
- package/lib/commonjs/utils/AssetUtil.js.map +1 -1
- package/lib/commonjs/utils/ConnectionUtil.js +33 -0
- package/lib/commonjs/utils/ConnectionUtil.js.map +1 -0
- package/lib/commonjs/utils/ConstantsUtil.js +8 -537
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +4 -4
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js +28 -9
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/NetworkUtil.js +46 -0
- package/lib/commonjs/utils/NetworkUtil.js.map +1 -0
- package/lib/commonjs/utils/StorageUtil.js +42 -51
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +21 -15
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
- package/lib/module/controllers/AccountController.js +17 -20
- package/lib/module/controllers/AccountController.js.map +1 -1
- package/lib/module/controllers/ApiController.js +15 -16
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +29 -110
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +11 -8
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectorController.js +44 -0
- package/lib/module/controllers/ConnectorController.js.map +1 -0
- package/lib/module/controllers/EnsController.js +2 -2
- package/lib/module/controllers/EnsController.js.map +1 -1
- package/lib/module/controllers/EventsController.js +1 -1
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +2 -2
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/OnRampController.js +60 -20
- package/lib/module/controllers/OnRampController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +3 -8
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +22 -1
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +30 -31
- package/lib/module/controllers/SendController.js.map +1 -1
- package/lib/module/controllers/SnackController.js +5 -29
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +148 -136
- package/lib/module/controllers/SwapController.js.map +1 -1
- package/lib/module/controllers/ThemeController.js +1 -9
- package/lib/module/controllers/ThemeController.js.map +1 -1
- package/lib/module/controllers/TransactionsController.js +19 -23
- package/lib/module/controllers/TransactionsController.js.map +1 -1
- package/lib/module/controllers/WebviewController.js +47 -0
- package/lib/module/controllers/WebviewController.js.map +1 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/AssetUtil.js +12 -8
- package/lib/module/utils/AssetUtil.js.map +1 -1
- package/lib/module/utils/ConnectionUtil.js +27 -0
- package/lib/module/utils/ConnectionUtil.js.map +1 -0
- package/lib/module/utils/ConstantsUtil.js +8 -537
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +4 -4
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js +28 -9
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/NetworkUtil.js +40 -0
- package/lib/module/utils/NetworkUtil.js.map +1 -0
- package/lib/module/utils/StorageUtil.js +42 -51
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +21 -15
- package/lib/module/utils/SwapApiUtil.js.map +1 -1
- package/lib/typescript/controllers/AccountController.d.ts +4 -4
- package/lib/typescript/controllers/AccountController.d.ts.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +1 -1
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +4 -16
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +11 -3
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +18 -0
- package/lib/typescript/controllers/ConnectorController.d.ts.map +1 -0
- package/lib/typescript/controllers/ModalController.d.ts +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts +1 -1
- package/lib/typescript/controllers/NetworkController.d.ts.map +1 -1
- package/lib/typescript/controllers/OnRampController.d.ts +3 -1
- package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +2 -5
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts +1 -1
- package/lib/typescript/controllers/PublicStateController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +16 -4
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts.map +1 -1
- package/lib/typescript/controllers/SnackController.d.ts +3 -3
- package/lib/typescript/controllers/SnackController.d.ts.map +1 -1
- package/lib/typescript/controllers/SwapController.d.ts +9 -9
- package/lib/typescript/controllers/SwapController.d.ts.map +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts +1 -1
- package/lib/typescript/controllers/ThemeController.d.ts.map +1 -1
- package/lib/typescript/controllers/TransactionsController.d.ts +3 -3
- package/lib/typescript/controllers/TransactionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/WebviewController.d.ts +21 -0
- package/lib/typescript/controllers/WebviewController.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +4 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/AssetUtil.d.ts +3 -3
- package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
- package/lib/typescript/utils/ConnectionUtil.d.ts +4 -0
- package/lib/typescript/utils/ConnectionUtil.d.ts.map +1 -0
- package/lib/typescript/utils/ConstantsUtil.d.ts +1 -421
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +3 -3
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/NetworkUtil.d.ts +8 -0
- package/lib/typescript/utils/NetworkUtil.d.ts.map +1 -0
- package/lib/typescript/utils/StorageUtil.d.ts +7 -14
- package/lib/typescript/utils/StorageUtil.d.ts.map +1 -1
- package/lib/typescript/utils/SwapApiUtil.d.ts +3 -3
- package/lib/typescript/utils/SwapApiUtil.d.ts.map +1 -1
- package/lib/typescript/utils/TypeUtil.d.ts +172 -24
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/controllers/AccountController.ts +27 -23
- package/src/controllers/ApiController.ts +9 -15
- package/src/controllers/BlockchainApiController.ts +32 -145
- package/src/controllers/ConnectionController.ts +24 -12
- package/src/controllers/ConnectorController.ts +63 -0
- package/src/controllers/EnsController.ts +2 -2
- package/src/controllers/EventsController.ts +1 -1
- package/src/controllers/ModalController.ts +3 -4
- package/src/controllers/NetworkController.ts +1 -1
- package/src/controllers/OnRampController.ts +91 -32
- package/src/controllers/OptionsController.ts +13 -14
- package/src/controllers/PublicStateController.ts +1 -1
- package/src/controllers/RouterController.ts +54 -5
- package/src/controllers/SendController.ts +30 -39
- package/src/controllers/SnackController.ts +5 -31
- package/src/controllers/SwapController.ts +178 -155
- package/src/controllers/ThemeController.ts +2 -11
- package/src/controllers/TransactionsController.ts +20 -26
- package/src/controllers/WebviewController.ts +63 -0
- package/src/index.ts +6 -3
- package/src/utils/AssetUtil.ts +14 -8
- package/src/utils/ConnectionUtil.ts +27 -0
- package/src/utils/ConstantsUtil.ts +8 -542
- package/src/utils/CoreHelperUtil.ts +7 -15
- package/src/utils/FetchUtil.ts +31 -10
- package/src/utils/NetworkUtil.ts +33 -0
- package/src/utils/StorageUtil.ts +48 -60
- package/src/utils/SwapApiUtil.ts +38 -27
- package/src/utils/TypeUtil.ts +172 -26
- package/lib/commonjs/controllers/ConnectionsController.js +0 -383
- package/lib/commonjs/controllers/ConnectionsController.js.map +0 -1
- package/lib/module/controllers/ConnectionsController.js +0 -378
- package/lib/module/controllers/ConnectionsController.js.map +0 -1
- package/lib/typescript/controllers/ConnectionsController.d.ts +0 -52
- package/lib/typescript/controllers/ConnectionsController.d.ts.map +0 -1
- package/src/controllers/ConnectionsController.ts +0 -503
|
@@ -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';
|
|
@@ -32,23 +33,23 @@ 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: '
|
|
36
|
+
message: 'The amount is too low'
|
|
36
37
|
},
|
|
37
38
|
[OnRampErrorType.AMOUNT_TOO_HIGH]: {
|
|
38
39
|
type: OnRampErrorType.AMOUNT_TOO_HIGH,
|
|
39
|
-
message: '
|
|
40
|
+
message: 'The amount is too high'
|
|
40
41
|
},
|
|
41
42
|
[OnRampErrorType.INVALID_AMOUNT]: {
|
|
42
43
|
type: OnRampErrorType.INVALID_AMOUNT,
|
|
43
|
-
message: '
|
|
44
|
+
message: 'Enter a valid amount'
|
|
44
45
|
},
|
|
45
46
|
[OnRampErrorType.INCOMPATIBLE_REQUEST]: {
|
|
46
47
|
type: OnRampErrorType.INCOMPATIBLE_REQUEST,
|
|
47
|
-
message: '
|
|
48
|
+
message: 'Enter a valid amount'
|
|
48
49
|
},
|
|
49
50
|
[OnRampErrorType.BAD_REQUEST]: {
|
|
50
51
|
type: OnRampErrorType.BAD_REQUEST,
|
|
51
|
-
message: '
|
|
52
|
+
message: 'Enter a valid amount'
|
|
52
53
|
}
|
|
53
54
|
};
|
|
54
55
|
|
|
@@ -63,6 +64,7 @@ const mapErrorMessage = (errorCode: string): OnRampError => {
|
|
|
63
64
|
// -- Types --------------------------------------------- //
|
|
64
65
|
export interface OnRampControllerState {
|
|
65
66
|
countries: OnRampCountry[];
|
|
67
|
+
countriesDefaults?: OnRampCountryDefaults[];
|
|
66
68
|
selectedCountry?: OnRampCountry;
|
|
67
69
|
serviceProviders: OnRampServiceProvider[];
|
|
68
70
|
selectedServiceProvider?: OnRampServiceProvider;
|
|
@@ -114,9 +116,8 @@ export const OnRampController = {
|
|
|
114
116
|
|
|
115
117
|
if (updateCurrency) {
|
|
116
118
|
const currencyCode =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
] || 'USD';
|
|
119
|
+
state.countriesDefaults?.find(d => d.countryCode === country.countryCode)
|
|
120
|
+
?.defaultCurrencyCode || 'USD';
|
|
120
121
|
|
|
121
122
|
const currency = state.paymentCurrencies?.find(c => c.currencyCode === currencyCode);
|
|
122
123
|
|
|
@@ -126,6 +127,7 @@ export const OnRampController = {
|
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
await Promise.all([this.fetchPaymentMethods(), this.fetchCryptoCurrencies()]);
|
|
130
|
+
this.clearQuotes();
|
|
129
131
|
|
|
130
132
|
state.loading = false;
|
|
131
133
|
|
|
@@ -134,8 +136,6 @@ export const OnRampController = {
|
|
|
134
136
|
|
|
135
137
|
setSelectedPaymentMethod(paymentMethod: OnRampPaymentMethod) {
|
|
136
138
|
state.selectedPaymentMethod = paymentMethod;
|
|
137
|
-
|
|
138
|
-
this.clearQuotes();
|
|
139
139
|
},
|
|
140
140
|
|
|
141
141
|
setPurchaseCurrency(currency: OnRampCryptoCurrency) {
|
|
@@ -184,7 +184,7 @@ export const OnRampController = {
|
|
|
184
184
|
selectedCurrency = state.purchaseCurrencies?.find(c => c.currencyCode === defaultCurrency);
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
state.purchaseCurrency = selectedCurrency
|
|
187
|
+
state.purchaseCurrency = selectedCurrency ?? state.purchaseCurrencies?.[0] ?? undefined;
|
|
188
188
|
},
|
|
189
189
|
|
|
190
190
|
getServiceProviderImage(serviceProviderName?: string) {
|
|
@@ -231,6 +231,27 @@ export const OnRampController = {
|
|
|
231
231
|
}
|
|
232
232
|
},
|
|
233
233
|
|
|
234
|
+
async fetchCountriesDefaults() {
|
|
235
|
+
try {
|
|
236
|
+
let countriesDefaults = await StorageUtil.getOnRampCountriesDefaults();
|
|
237
|
+
|
|
238
|
+
if (!countriesDefaults.length) {
|
|
239
|
+
countriesDefaults = (await BlockchainApiController.fetchOnRampCountriesDefaults()) ?? [];
|
|
240
|
+
|
|
241
|
+
if (countriesDefaults.length) {
|
|
242
|
+
StorageUtil.setOnRampCountriesDefaults(countriesDefaults);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
state.countriesDefaults = countriesDefaults;
|
|
247
|
+
} catch (error) {
|
|
248
|
+
state.error = {
|
|
249
|
+
type: OnRampErrorType.FAILED_TO_LOAD_COUNTRIES,
|
|
250
|
+
message: 'Failed to load countries defaults'
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
|
|
234
255
|
async fetchServiceProviders() {
|
|
235
256
|
try {
|
|
236
257
|
let serviceProviders = await StorageUtil.getOnRampServiceProviders();
|
|
@@ -259,10 +280,8 @@ export const OnRampController = {
|
|
|
259
280
|
});
|
|
260
281
|
|
|
261
282
|
const defaultCountryPaymentMethods =
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
?.countryCode as keyof typeof ConstantsUtil.COUNTRY_DEFAULT_PAYMENT_METHOD
|
|
265
|
-
];
|
|
283
|
+
state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
|
|
284
|
+
?.defaultPaymentMethods || [];
|
|
266
285
|
|
|
267
286
|
state.paymentMethods =
|
|
268
287
|
paymentMethods?.sort((a, b) => {
|
|
@@ -276,9 +295,7 @@ export const OnRampController = {
|
|
|
276
295
|
return aIndex - bIndex;
|
|
277
296
|
}) || [];
|
|
278
297
|
|
|
279
|
-
state.selectedPaymentMethod = paymentMethods
|
|
280
|
-
|
|
281
|
-
this.clearQuotes();
|
|
298
|
+
state.selectedPaymentMethod = state.paymentMethods[0];
|
|
282
299
|
} catch (error) {
|
|
283
300
|
state.error = {
|
|
284
301
|
type: OnRampErrorType.FAILED_TO_LOAD_METHODS,
|
|
@@ -336,9 +353,8 @@ export const OnRampController = {
|
|
|
336
353
|
|
|
337
354
|
if (countryCode) {
|
|
338
355
|
currencyCode =
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
];
|
|
356
|
+
state.countriesDefaults?.find(d => d.countryCode === countryCode)?.defaultCurrencyCode ||
|
|
357
|
+
'USD';
|
|
342
358
|
}
|
|
343
359
|
|
|
344
360
|
const preferredCurrency = await StorageUtil.getOnRampPreferredFiatCurrency();
|
|
@@ -387,25 +403,24 @@ export const OnRampController = {
|
|
|
387
403
|
}
|
|
388
404
|
|
|
389
405
|
state.quotesLoading = true;
|
|
406
|
+
state.selectedQuote = undefined;
|
|
407
|
+
state.selectedServiceProvider = undefined;
|
|
390
408
|
state.error = undefined;
|
|
391
409
|
|
|
392
410
|
this.abortGetQuotes(false);
|
|
393
411
|
quotesAbortController = new AbortController();
|
|
412
|
+
const currentSignal = quotesAbortController.signal;
|
|
394
413
|
|
|
395
414
|
try {
|
|
396
415
|
const body = {
|
|
397
416
|
countryCode: state.selectedCountry?.countryCode!,
|
|
398
|
-
paymentMethodType: state.selectedPaymentMethod?.paymentMethod!,
|
|
399
417
|
destinationCurrencyCode: state.purchaseCurrency?.currencyCode!,
|
|
400
418
|
sourceAmount: state.paymentAmount,
|
|
401
419
|
sourceCurrencyCode: state.paymentCurrency?.currencyCode!,
|
|
402
420
|
walletAddress: AccountController.state.address!
|
|
403
421
|
};
|
|
404
422
|
|
|
405
|
-
const response = await BlockchainApiController.getOnRampQuotes(
|
|
406
|
-
body,
|
|
407
|
-
quotesAbortController.signal
|
|
408
|
-
);
|
|
423
|
+
const response = await BlockchainApiController.getOnRampQuotes(body, currentSignal);
|
|
409
424
|
|
|
410
425
|
if (!response || !response.length) {
|
|
411
426
|
throw new Error('No quotes available');
|
|
@@ -414,9 +429,48 @@ export const OnRampController = {
|
|
|
414
429
|
const quotes = response.sort((a, b) => b.customerScore - a.customerScore);
|
|
415
430
|
|
|
416
431
|
state.quotes = quotes;
|
|
417
|
-
|
|
432
|
+
|
|
433
|
+
//Replace payment method if it's not in the quotes
|
|
434
|
+
const isValidPaymentMethod =
|
|
435
|
+
state.selectedPaymentMethod &&
|
|
436
|
+
quotes.some(
|
|
437
|
+
quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
|
|
438
|
+
);
|
|
439
|
+
|
|
440
|
+
if (!isValidPaymentMethod) {
|
|
441
|
+
const countryMethods =
|
|
442
|
+
state.countriesDefaults?.find(d => d.countryCode === state.selectedCountry?.countryCode)
|
|
443
|
+
?.defaultPaymentMethods || [];
|
|
444
|
+
|
|
445
|
+
const availableQuoteMethods = new Set(quotes.map(q => q.paymentMethodType));
|
|
446
|
+
|
|
447
|
+
let newPaymentMethodType: string | undefined;
|
|
448
|
+
for (const dpm of countryMethods) {
|
|
449
|
+
if (availableQuoteMethods.has(dpm)) {
|
|
450
|
+
newPaymentMethodType = dpm;
|
|
451
|
+
break;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if (newPaymentMethodType) {
|
|
456
|
+
state.selectedPaymentMethod =
|
|
457
|
+
state.paymentMethods.find(m => m.paymentMethod === newPaymentMethodType) ||
|
|
458
|
+
state.paymentMethods.find(
|
|
459
|
+
method => method.paymentMethod === quotes[0]?.paymentMethodType
|
|
460
|
+
);
|
|
461
|
+
} else {
|
|
462
|
+
state.selectedPaymentMethod = state.paymentMethods.find(
|
|
463
|
+
method => method.paymentMethod === quotes[0]?.paymentMethodType
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
state.selectedQuote = quotes.find(
|
|
469
|
+
quote => quote.paymentMethodType === state.selectedPaymentMethod?.paymentMethod
|
|
470
|
+
);
|
|
471
|
+
|
|
418
472
|
state.selectedServiceProvider = state.serviceProviders.find(
|
|
419
|
-
sp => sp.serviceProvider ===
|
|
473
|
+
sp => sp.serviceProvider === state.selectedQuote?.serviceProvider
|
|
420
474
|
);
|
|
421
475
|
} catch (error: any) {
|
|
422
476
|
if (error.name === 'AbortError') {
|
|
@@ -435,7 +489,9 @@ export const OnRampController = {
|
|
|
435
489
|
this.clearQuotes();
|
|
436
490
|
state.error = mapErrorMessage(error?.code || 'UNKNOWN_ERROR');
|
|
437
491
|
} finally {
|
|
438
|
-
|
|
492
|
+
if (!currentSignal.aborted) {
|
|
493
|
+
state.quotesLoading = false;
|
|
494
|
+
}
|
|
439
495
|
}
|
|
440
496
|
},
|
|
441
497
|
|
|
@@ -492,7 +548,7 @@ export const OnRampController = {
|
|
|
492
548
|
throw new Error('Invalid quote');
|
|
493
549
|
}
|
|
494
550
|
|
|
495
|
-
const
|
|
551
|
+
const body = {
|
|
496
552
|
countryCode: quote.countryCode,
|
|
497
553
|
destinationCurrencyCode: quote.destinationCurrencyCode,
|
|
498
554
|
paymentMethodType: quote.paymentMethodType,
|
|
@@ -501,7 +557,9 @@ export const OnRampController = {
|
|
|
501
557
|
sourceCurrencyCode: quote.sourceCurrencyCode,
|
|
502
558
|
walletAddress: AccountController.state.address!,
|
|
503
559
|
redirectUrl: metadata?.redirect?.universal ?? metadata?.redirect?.native
|
|
504
|
-
}
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
const widget = await BlockchainApiController.getOnRampWidget(body);
|
|
505
563
|
|
|
506
564
|
if (!widget || !widget.widgetUrl) {
|
|
507
565
|
throw new Error('Invalid widget response');
|
|
@@ -555,6 +613,7 @@ export const OnRampController = {
|
|
|
555
613
|
await this.fetchServiceProviders();
|
|
556
614
|
|
|
557
615
|
await Promise.all([
|
|
616
|
+
this.fetchCountriesDefaults(),
|
|
558
617
|
this.fetchPaymentMethods(),
|
|
559
618
|
this.fetchFiatLimits(),
|
|
560
619
|
this.fetchCryptoCurrencies(),
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { proxy, ref } from 'valtio';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
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
|
-
|
|
15
|
-
storage?: Storage;
|
|
20
|
+
_clipboardClient?: ClipboardClient;
|
|
16
21
|
includeWalletIds?: string[];
|
|
17
22
|
excludeWalletIds?: string[];
|
|
18
23
|
featuredWalletIds?: string[];
|
|
@@ -42,7 +47,7 @@ export const OptionsController = {
|
|
|
42
47
|
state,
|
|
43
48
|
|
|
44
49
|
setClipboardClient(client: ClipboardClient) {
|
|
45
|
-
state.
|
|
50
|
+
state._clipboardClient = ref(client);
|
|
46
51
|
},
|
|
47
52
|
|
|
48
53
|
setProjectId(projectId: OptionsControllerState['projectId']) {
|
|
@@ -97,18 +102,12 @@ export const OptionsController = {
|
|
|
97
102
|
state.isOnRampEnabled = isOnRampEnabled;
|
|
98
103
|
},
|
|
99
104
|
|
|
100
|
-
setStorage(storage?: OptionsControllerState['storage']) {
|
|
101
|
-
if (storage) {
|
|
102
|
-
state.storage = ref(storage);
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
|
|
106
105
|
isClipboardAvailable() {
|
|
107
|
-
return !!state.
|
|
106
|
+
return !!state._clipboardClient;
|
|
108
107
|
},
|
|
109
108
|
|
|
110
109
|
copyToClipboard(value: string) {
|
|
111
|
-
const client = state.
|
|
110
|
+
const client = state._clipboardClient;
|
|
112
111
|
if (client) {
|
|
113
112
|
client?.setString(value);
|
|
114
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 '
|
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
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];
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { subscribeKey as subKey } from 'valtio/
|
|
2
|
-
import { proxy, ref, subscribe as sub } from 'valtio
|
|
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
|
-
|
|
4
|
+
import { AccountController } from './AccountController';
|
|
5
|
+
import { ConnectionController } from './ConnectionController';
|
|
5
6
|
import { SnackController } from './SnackController';
|
|
6
7
|
import { CoreHelperUtil } from '../utils/CoreHelperUtil';
|
|
7
8
|
import { EventsController } from './EventsController';
|
|
9
|
+
import { NetworkController } from './NetworkController';
|
|
8
10
|
import { RouterController } from './RouterController';
|
|
9
|
-
import { ConnectionsController } from './ConnectionsController';
|
|
10
11
|
|
|
11
12
|
// -- Types --------------------------------------------- //
|
|
12
13
|
export interface TxParams {
|
|
@@ -96,33 +97,33 @@ export const SendController = {
|
|
|
96
97
|
type: 'track',
|
|
97
98
|
event: 'SEND_INITIATED',
|
|
98
99
|
properties: {
|
|
99
|
-
isSmartAccount:
|
|
100
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
|
|
100
101
|
token: this.state.token.address,
|
|
101
102
|
amount: this.state.sendTokenAmount,
|
|
102
|
-
network:
|
|
103
|
+
network: NetworkController.state.caipNetwork?.id || ''
|
|
103
104
|
}
|
|
104
105
|
});
|
|
105
106
|
this.sendERC20Token({
|
|
106
107
|
receiverAddress: this.state.receiverAddress,
|
|
107
108
|
tokenAddress: this.state.token.address,
|
|
108
109
|
sendTokenAmount: this.state.sendTokenAmount,
|
|
109
|
-
decimals: this.state.token.quantity
|
|
110
|
+
decimals: this.state.token.quantity.decimals
|
|
110
111
|
});
|
|
111
112
|
} else if (
|
|
112
113
|
this.state.receiverAddress &&
|
|
113
114
|
this.state.sendTokenAmount &&
|
|
114
115
|
this.state.gasPrice &&
|
|
115
|
-
this.state.token?.quantity
|
|
116
|
+
this.state.token?.quantity.decimals
|
|
116
117
|
) {
|
|
117
118
|
state.loading = true;
|
|
118
119
|
EventsController.sendEvent({
|
|
119
120
|
type: 'track',
|
|
120
121
|
event: 'SEND_INITIATED',
|
|
121
122
|
properties: {
|
|
122
|
-
isSmartAccount:
|
|
123
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
|
|
123
124
|
token: this.state.token?.symbol,
|
|
124
125
|
amount: this.state.sendTokenAmount,
|
|
125
|
-
network:
|
|
126
|
+
network: NetworkController.state.caipNetwork?.id || ''
|
|
126
127
|
}
|
|
127
128
|
});
|
|
128
129
|
this.sendNativeToken({
|
|
@@ -135,24 +136,21 @@ export const SendController = {
|
|
|
135
136
|
},
|
|
136
137
|
|
|
137
138
|
async sendNativeToken(params: TxParams) {
|
|
138
|
-
|
|
139
|
+
RouterController.pushTransactionStack({
|
|
140
|
+
view: 'Account',
|
|
141
|
+
goBack: false
|
|
142
|
+
});
|
|
139
143
|
|
|
140
144
|
const to = params.receiverAddress as `0x${string}`;
|
|
141
|
-
const address =
|
|
142
|
-
|
|
143
|
-
) as `0x${string}`;
|
|
144
|
-
if (!address) {
|
|
145
|
-
throw new Error('Invalid address');
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const value = ConnectionsController.parseUnits(
|
|
145
|
+
const address = AccountController.state.address as `0x${string}`;
|
|
146
|
+
const value = ConnectionController.parseUnits(
|
|
149
147
|
params.sendTokenAmount.toString(),
|
|
150
148
|
Number(params.decimals)
|
|
151
149
|
);
|
|
152
150
|
const data = '0x';
|
|
153
151
|
|
|
154
152
|
try {
|
|
155
|
-
await
|
|
153
|
+
await ConnectionController.sendTransaction({
|
|
156
154
|
to,
|
|
157
155
|
address,
|
|
158
156
|
data,
|
|
@@ -164,13 +162,12 @@ export const SendController = {
|
|
|
164
162
|
type: 'track',
|
|
165
163
|
event: 'SEND_SUCCESS',
|
|
166
164
|
properties: {
|
|
167
|
-
isSmartAccount:
|
|
165
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
|
|
168
166
|
token: this.state.token?.symbol || '',
|
|
169
167
|
amount: params.sendTokenAmount,
|
|
170
|
-
network:
|
|
168
|
+
network: NetworkController.state.caipNetwork?.id || ''
|
|
171
169
|
}
|
|
172
170
|
});
|
|
173
|
-
RouterController.reset(isAuth ? 'Account' : 'AccountDefault');
|
|
174
171
|
this.resetSend();
|
|
175
172
|
} catch (error) {
|
|
176
173
|
state.loading = false;
|
|
@@ -178,10 +175,10 @@ export const SendController = {
|
|
|
178
175
|
type: 'track',
|
|
179
176
|
event: 'SEND_ERROR',
|
|
180
177
|
properties: {
|
|
181
|
-
isSmartAccount:
|
|
178
|
+
isSmartAccount: AccountController.state.preferredAccountType === 'smartAccount',
|
|
182
179
|
token: this.state.token?.symbol || '',
|
|
183
180
|
amount: params.sendTokenAmount,
|
|
184
|
-
network:
|
|
181
|
+
network: NetworkController.state.caipNetwork?.id || ''
|
|
185
182
|
}
|
|
186
183
|
});
|
|
187
184
|
SnackController.showError('Something went wrong');
|
|
@@ -189,16 +186,19 @@ export const SendController = {
|
|
|
189
186
|
},
|
|
190
187
|
|
|
191
188
|
async sendERC20Token(params: ContractWriteParams) {
|
|
192
|
-
|
|
189
|
+
RouterController.pushTransactionStack({
|
|
190
|
+
view: 'Account',
|
|
191
|
+
goBack: false
|
|
192
|
+
});
|
|
193
193
|
|
|
194
|
-
const amount =
|
|
194
|
+
const amount = ConnectionController.parseUnits(
|
|
195
195
|
params.sendTokenAmount.toString(),
|
|
196
196
|
Number(params.decimals)
|
|
197
197
|
);
|
|
198
198
|
|
|
199
199
|
try {
|
|
200
200
|
if (
|
|
201
|
-
|
|
201
|
+
AccountController.state.address &&
|
|
202
202
|
params.sendTokenAmount &&
|
|
203
203
|
params.receiverAddress &&
|
|
204
204
|
params.tokenAddress
|
|
@@ -206,23 +206,14 @@ export const SendController = {
|
|
|
206
206
|
const tokenAddress = CoreHelperUtil.getPlainAddress(
|
|
207
207
|
params.tokenAddress as `${string}:${string}:${string}`
|
|
208
208
|
) as `0x${string}`;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
ConnectionsController.state.activeAddress
|
|
212
|
-
) as `0x${string}`;
|
|
213
|
-
if (!fromAddress) {
|
|
214
|
-
throw new Error('Invalid address');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
await ConnectionsController.writeContract({
|
|
218
|
-
fromAddress,
|
|
209
|
+
await ConnectionController.writeContract({
|
|
210
|
+
fromAddress: AccountController.state.address as `0x${string}`,
|
|
219
211
|
tokenAddress,
|
|
220
212
|
receiverAddress: params.receiverAddress as `0x${string}`,
|
|
221
213
|
tokenAmount: amount,
|
|
222
214
|
method: 'transfer',
|
|
223
215
|
abi: ContractUtil.getERC20Abi(tokenAddress)
|
|
224
216
|
});
|
|
225
|
-
RouterController.reset(isAuth ? 'Account' : 'AccountDefault');
|
|
226
217
|
SnackController.showSuccess('Transaction started');
|
|
227
218
|
this.resetSend();
|
|
228
219
|
}
|
|
@@ -22,52 +22,26 @@ 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
|
-
|
|
45
25
|
// -- Controller ---------------------------------------- //
|
|
46
26
|
export const SnackController = {
|
|
47
27
|
state,
|
|
48
28
|
|
|
49
|
-
showSuccess(message: SnackControllerState['message']
|
|
29
|
+
showSuccess(message: SnackControllerState['message']) {
|
|
50
30
|
state.message = message;
|
|
51
31
|
state.variant = 'success';
|
|
52
32
|
state.open = true;
|
|
53
|
-
state.long = long;
|
|
54
|
-
scheduleAutoHide(long);
|
|
55
33
|
},
|
|
56
34
|
|
|
57
|
-
showError(message: SnackControllerState['message']
|
|
35
|
+
showError(message: SnackControllerState['message']) {
|
|
58
36
|
state.message = message;
|
|
59
37
|
state.variant = 'error';
|
|
60
38
|
state.open = true;
|
|
61
|
-
state.long = long;
|
|
62
|
-
scheduleAutoHide(long);
|
|
63
39
|
},
|
|
64
40
|
|
|
65
|
-
showLoading(message: SnackControllerState['message']
|
|
41
|
+
showLoading(message: SnackControllerState['message']) {
|
|
66
42
|
state.message = message;
|
|
67
43
|
state.variant = 'loading';
|
|
68
44
|
state.open = true;
|
|
69
|
-
state.long = long;
|
|
70
|
-
scheduleAutoHide(long);
|
|
71
45
|
},
|
|
72
46
|
|
|
73
47
|
showInternalError(error: Message) {
|
|
@@ -78,7 +52,6 @@ export const SnackController = {
|
|
|
78
52
|
state.variant = 'error';
|
|
79
53
|
state.open = true;
|
|
80
54
|
state.long = true;
|
|
81
|
-
scheduleAutoHide(true);
|
|
82
55
|
}
|
|
83
56
|
|
|
84
57
|
if (error.longMessage) {
|
|
@@ -88,8 +61,9 @@ export const SnackController = {
|
|
|
88
61
|
},
|
|
89
62
|
|
|
90
63
|
hide() {
|
|
91
|
-
clearHideTimeout();
|
|
92
64
|
state.open = false;
|
|
93
65
|
state.long = false;
|
|
66
|
+
state.message = '';
|
|
67
|
+
state.variant = 'success';
|
|
94
68
|
}
|
|
95
69
|
};
|