@reown/appkit-core-react-native 2.0.0-alpha.0 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/controllers/ApiController.js +16 -5
- package/lib/commonjs/controllers/ApiController.js.map +1 -1
- package/lib/commonjs/controllers/AssetController.js.map +1 -1
- package/lib/commonjs/controllers/BlockchainApiController.js +103 -111
- package/lib/commonjs/controllers/BlockchainApiController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionController.js +1 -10
- package/lib/commonjs/controllers/ConnectionController.js.map +1 -1
- package/lib/commonjs/controllers/ConnectionsController.js +313 -52
- package/lib/commonjs/controllers/ConnectionsController.js.map +1 -1
- 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 +6 -7
- package/lib/commonjs/controllers/ModalController.js.map +1 -1
- package/lib/commonjs/controllers/OnRampController.js +117 -53
- package/lib/commonjs/controllers/OnRampController.js.map +1 -1
- package/lib/commonjs/controllers/OptionsController.js +14 -0
- package/lib/commonjs/controllers/OptionsController.js.map +1 -1
- package/lib/commonjs/controllers/PublicStateController.js.map +1 -1
- package/lib/commonjs/controllers/RouterController.js +1 -22
- package/lib/commonjs/controllers/RouterController.js.map +1 -1
- package/lib/commonjs/controllers/SendController.js +101 -101
- package/lib/commonjs/controllers/SendController.js.map +1 -1
- package/lib/commonjs/controllers/SnackController.js +29 -5
- package/lib/commonjs/controllers/SnackController.js.map +1 -1
- package/lib/commonjs/controllers/SwapController.js +140 -147
- package/lib/commonjs/controllers/SwapController.js.map +1 -1
- package/lib/commonjs/controllers/ThemeController.js.map +1 -1
- package/lib/commonjs/controllers/TransactionsController.js +23 -19
- package/lib/commonjs/controllers/TransactionsController.js.map +1 -1
- package/lib/commonjs/index.js +0 -35
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils/ApiUtil.js.map +1 -1
- package/lib/commonjs/utils/AssetUtil.js +3 -14
- package/lib/commonjs/utils/AssetUtil.js.map +1 -1
- package/lib/commonjs/utils/ConstantsUtil.js +122 -426
- package/lib/commonjs/utils/ConstantsUtil.js.map +1 -1
- package/lib/commonjs/utils/CoreHelperUtil.js +13 -8
- package/lib/commonjs/utils/CoreHelperUtil.js.map +1 -1
- package/lib/commonjs/utils/EventUtil.js.map +1 -1
- package/lib/commonjs/utils/FetchUtil.js +34 -10
- package/lib/commonjs/utils/FetchUtil.js.map +1 -1
- package/lib/commonjs/utils/RouterUtil.js.map +1 -1
- package/lib/commonjs/utils/StorageUtil.js +86 -92
- package/lib/commonjs/utils/StorageUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapApiUtil.js +11 -22
- package/lib/commonjs/utils/SwapApiUtil.js.map +1 -1
- package/lib/commonjs/utils/SwapCalculationUtil.js.map +1 -1
- package/lib/commonjs/utils/TypeUtil.js +25 -0
- package/lib/commonjs/utils/TypeUtil.js.map +1 -1
- package/lib/module/controllers/ApiController.js +18 -6
- package/lib/module/controllers/ApiController.js.map +1 -1
- package/lib/module/controllers/AssetController.js +2 -0
- package/lib/module/controllers/AssetController.js.map +1 -1
- package/lib/module/controllers/BlockchainApiController.js +104 -110
- package/lib/module/controllers/BlockchainApiController.js.map +1 -1
- package/lib/module/controllers/ConnectionController.js +3 -10
- package/lib/module/controllers/ConnectionController.js.map +1 -1
- package/lib/module/controllers/ConnectionsController.js +314 -51
- package/lib/module/controllers/ConnectionsController.js.map +1 -1
- package/lib/module/controllers/EnsController.js +4 -2
- package/lib/module/controllers/EnsController.js.map +1 -1
- package/lib/module/controllers/EventsController.js +3 -1
- package/lib/module/controllers/EventsController.js.map +1 -1
- package/lib/module/controllers/ModalController.js +8 -7
- package/lib/module/controllers/ModalController.js.map +1 -1
- package/lib/module/controllers/OnRampController.js +118 -52
- package/lib/module/controllers/OnRampController.js.map +1 -1
- package/lib/module/controllers/OptionsController.js +16 -0
- package/lib/module/controllers/OptionsController.js.map +1 -1
- package/lib/module/controllers/PublicStateController.js +2 -0
- package/lib/module/controllers/PublicStateController.js.map +1 -1
- package/lib/module/controllers/RouterController.js +3 -22
- package/lib/module/controllers/RouterController.js.map +1 -1
- package/lib/module/controllers/SendController.js +100 -98
- package/lib/module/controllers/SendController.js.map +1 -1
- package/lib/module/controllers/SnackController.js +31 -5
- package/lib/module/controllers/SnackController.js.map +1 -1
- package/lib/module/controllers/SwapController.js +142 -147
- package/lib/module/controllers/SwapController.js.map +1 -1
- package/lib/module/controllers/ThemeController.js +2 -0
- package/lib/module/controllers/ThemeController.js.map +1 -1
- package/lib/module/controllers/TransactionsController.js +23 -17
- package/lib/module/controllers/TransactionsController.js.map +1 -1
- package/lib/module/index.js +2 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/ApiUtil.js +2 -0
- package/lib/module/utils/ApiUtil.js.map +1 -1
- package/lib/module/utils/AssetUtil.js +5 -14
- package/lib/module/utils/AssetUtil.js.map +1 -1
- package/lib/module/utils/ConstantsUtil.js +124 -426
- package/lib/module/utils/ConstantsUtil.js.map +1 -1
- package/lib/module/utils/CoreHelperUtil.js +14 -6
- package/lib/module/utils/CoreHelperUtil.js.map +1 -1
- package/lib/module/utils/EventUtil.js +2 -0
- package/lib/module/utils/EventUtil.js.map +1 -1
- package/lib/module/utils/FetchUtil.js +36 -10
- package/lib/module/utils/FetchUtil.js.map +1 -1
- package/lib/module/utils/RouterUtil.js +2 -0
- package/lib/module/utils/RouterUtil.js.map +1 -1
- package/lib/module/utils/StorageUtil.js +89 -91
- package/lib/module/utils/StorageUtil.js.map +1 -1
- package/lib/module/utils/SwapApiUtil.js +13 -22
- package/lib/module/utils/SwapApiUtil.js.map +1 -1
- package/lib/module/utils/SwapCalculationUtil.js +2 -0
- package/lib/module/utils/SwapCalculationUtil.js.map +1 -1
- package/lib/module/utils/TypeUtil.js +25 -1
- package/lib/module/utils/TypeUtil.js.map +1 -1
- package/lib/typescript/controllers/ApiController.d.ts +2 -1
- package/lib/typescript/controllers/ApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/BlockchainApiController.d.ts +20 -13
- package/lib/typescript/controllers/BlockchainApiController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionController.d.ts +3 -16
- package/lib/typescript/controllers/ConnectionController.d.ts.map +1 -1
- package/lib/typescript/controllers/ConnectionsController.d.ts +26 -22
- package/lib/typescript/controllers/ConnectionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/ModalController.d.ts +1 -1
- package/lib/typescript/controllers/ModalController.d.ts.map +1 -1
- package/lib/typescript/controllers/OnRampController.d.ts +3 -2
- package/lib/typescript/controllers/OnRampController.d.ts.map +1 -1
- package/lib/typescript/controllers/OptionsController.d.ts +7 -2
- package/lib/typescript/controllers/OptionsController.d.ts.map +1 -1
- package/lib/typescript/controllers/RouterController.d.ts +4 -17
- package/lib/typescript/controllers/RouterController.d.ts.map +1 -1
- package/lib/typescript/controllers/SendController.d.ts +5 -7
- 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 +12 -11
- package/lib/typescript/controllers/SwapController.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/index.d.ts +0 -5
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/utils/AssetUtil.d.ts +2 -3
- package/lib/typescript/utils/AssetUtil.d.ts.map +1 -1
- package/lib/typescript/utils/ConstantsUtil.d.ts +7 -414
- package/lib/typescript/utils/ConstantsUtil.d.ts.map +1 -1
- package/lib/typescript/utils/CoreHelperUtil.d.ts +5 -4
- package/lib/typescript/utils/CoreHelperUtil.d.ts.map +1 -1
- package/lib/typescript/utils/FetchUtil.d.ts.map +1 -1
- package/lib/typescript/utils/StorageUtil.d.ts +11 -15
- 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 +54 -177
- package/lib/typescript/utils/TypeUtil.d.ts.map +1 -1
- package/package.json +9 -23
- package/src/controllers/ApiController.ts +17 -4
- package/src/controllers/BlockchainApiController.ts +74 -119
- package/src/controllers/ConnectionController.ts +5 -28
- package/src/controllers/ConnectionsController.ts +399 -92
- package/src/controllers/EnsController.ts +2 -2
- package/src/controllers/EventsController.ts +1 -1
- package/src/controllers/ModalController.ts +7 -9
- package/src/controllers/OnRampController.ts +178 -81
- package/src/controllers/OptionsController.ts +22 -9
- package/src/controllers/RouterController.ts +4 -54
- package/src/controllers/SendController.ts +124 -113
- package/src/controllers/SnackController.ts +31 -5
- package/src/controllers/SwapController.ts +165 -181
- package/src/controllers/TransactionsController.ts +24 -18
- package/src/index.ts +0 -15
- package/src/utils/AssetUtil.ts +4 -18
- package/src/utils/ConstantsUtil.ts +125 -428
- package/src/utils/CoreHelperUtil.ts +30 -8
- package/src/utils/FetchUtil.ts +37 -10
- package/src/utils/StorageUtil.ts +165 -106
- package/src/utils/SwapApiUtil.ts +25 -42
- package/src/utils/TypeUtil.ts +64 -171
- package/lib/commonjs/controllers/AccountController.js +0 -93
- package/lib/commonjs/controllers/AccountController.js.map +0 -1
- package/lib/commonjs/controllers/ConnectorController.js +0 -50
- package/lib/commonjs/controllers/ConnectorController.js.map +0 -1
- package/lib/commonjs/controllers/NetworkController.js +0 -90
- package/lib/commonjs/controllers/NetworkController.js.map +0 -1
- package/lib/commonjs/controllers/WebviewController.js +0 -52
- package/lib/commonjs/controllers/WebviewController.js.map +0 -1
- package/lib/commonjs/utils/NetworkUtil.js +0 -46
- package/lib/commonjs/utils/NetworkUtil.js.map +0 -1
- package/lib/module/controllers/AccountController.js +0 -88
- package/lib/module/controllers/AccountController.js.map +0 -1
- package/lib/module/controllers/ConnectorController.js +0 -45
- package/lib/module/controllers/ConnectorController.js.map +0 -1
- package/lib/module/controllers/NetworkController.js +0 -85
- package/lib/module/controllers/NetworkController.js.map +0 -1
- package/lib/module/controllers/WebviewController.js +0 -47
- package/lib/module/controllers/WebviewController.js.map +0 -1
- package/lib/module/utils/NetworkUtil.js +0 -40
- package/lib/module/utils/NetworkUtil.js.map +0 -1
- package/lib/typescript/controllers/AccountController.d.ts +0 -33
- package/lib/typescript/controllers/AccountController.d.ts.map +0 -1
- package/lib/typescript/controllers/ConnectorController.d.ts +0 -18
- package/lib/typescript/controllers/ConnectorController.d.ts.map +0 -1
- package/lib/typescript/controllers/NetworkController.d.ts +0 -34
- package/lib/typescript/controllers/NetworkController.d.ts.map +0 -1
- package/lib/typescript/controllers/WebviewController.d.ts +0 -21
- package/lib/typescript/controllers/WebviewController.d.ts.map +0 -1
- package/lib/typescript/utils/NetworkUtil.d.ts +0 -8
- package/lib/typescript/utils/NetworkUtil.d.ts.map +0 -1
- package/src/controllers/AccountController.ts +0 -128
- package/src/controllers/ConnectorController.ts +0 -64
- package/src/controllers/NetworkController.ts +0 -120
- package/src/controllers/WebviewController.ts +0 -63
- package/src/utils/NetworkUtil.ts +0 -33
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { subscribeKey as subKey } from 'valtio/
|
|
2
|
-
import { proxy, subscribe as sub } from 'valtio
|
|
3
|
-
import
|
|
4
|
-
OnRampPaymentMethod,
|
|
5
|
-
OnRampCountry,
|
|
6
|
-
OnRampFiatCurrency,
|
|
7
|
-
OnRampQuote,
|
|
8
|
-
OnRampFiatLimit,
|
|
9
|
-
OnRampCryptoCurrency,
|
|
10
|
-
OnRampServiceProvider,
|
|
11
|
-
OnRampError,
|
|
12
|
-
OnRampErrorTypeValues
|
|
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
|
|
13
15
|
} from '../utils/TypeUtil';
|
|
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: '
|
|
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'
|
|
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
|
-
|
|
113
|
-
|
|
118
|
+
try {
|
|
119
|
+
state.selectedCountry = country;
|
|
120
|
+
state.loading = true;
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
] || 'USD';
|
|
122
|
+
if (updateCurrency) {
|
|
123
|
+
const currencyCode =
|
|
124
|
+
state.countriesDefaults?.find(d => d.countryCode === country.countryCode)
|
|
125
|
+
?.defaultCurrencyCode || 'USD';
|
|
120
126
|
|
|
121
|
-
|
|
127
|
+
const currency = state.paymentCurrencies?.find(c => c.currencyCode === currencyCode);
|
|
122
128
|
|
|
123
|
-
|
|
124
|
-
|
|
129
|
+
if (currency) {
|
|
130
|
+
this.setPaymentCurrency(currency);
|
|
131
|
+
}
|
|
125
132
|
}
|
|
126
|
-
}
|
|
127
133
|
|
|
128
|
-
|
|
134
|
+
await Promise.all([this.fetchPaymentMethods(), this.fetchCryptoCurrencies()]);
|
|
135
|
+
this.clearQuotes();
|
|
129
136
|
|
|
130
|
-
|
|
137
|
+
state.loading = false;
|
|
131
138
|
|
|
132
|
-
|
|
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 (
|
|
190
|
+
if (ConnectionsController.state.activeNetwork?.caipNetworkId) {
|
|
179
191
|
const defaultCurrency =
|
|
180
192
|
ConstantsUtil.NETWORK_DEFAULT_CURRENCIES[
|
|
181
|
-
|
|
182
|
-
?.
|
|
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
|
|
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
|
-
|
|
263
|
-
|
|
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
|
|
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 (
|
|
330
|
+
if (ConnectionsController.state.activeNetwork?.caipNetworkId) {
|
|
302
331
|
const defaultCurrency =
|
|
303
332
|
ConstantsUtil.NETWORK_DEFAULT_CURRENCIES[
|
|
304
|
-
|
|
305
|
-
?.
|
|
306
|
-
]
|
|
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 ||
|
|
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
|
-
|
|
340
|
-
|
|
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 (!
|
|
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
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
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
|
|
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
|
-
|
|
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 ===
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
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,13 +1,6 @@
|
|
|
1
1
|
import { proxy, ref } from 'valtio';
|
|
2
|
-
import type { Tokens } from '@reown/appkit-common-react-native';
|
|
3
|
-
import type {
|
|
4
|
-
CustomWallet,
|
|
5
|
-
Features,
|
|
6
|
-
Metadata,
|
|
7
|
-
ProjectId,
|
|
8
|
-
SdkType,
|
|
9
|
-
SdkVersion
|
|
10
|
-
} from '../utils/TypeUtil';
|
|
2
|
+
import type { Tokens, Storage, Metadata, AppKitNetwork } from '@reown/appkit-common-react-native';
|
|
3
|
+
import type { CustomWallet, Features, ProjectId, SdkType, SdkVersion } from '../utils/TypeUtil';
|
|
11
4
|
|
|
12
5
|
import { ConstantsUtil } from '../utils/ConstantsUtil';
|
|
13
6
|
|
|
@@ -19,6 +12,7 @@ export interface ClipboardClient {
|
|
|
19
12
|
export interface OptionsControllerState {
|
|
20
13
|
projectId: ProjectId;
|
|
21
14
|
clipboardClient?: ClipboardClient;
|
|
15
|
+
storage?: Storage;
|
|
22
16
|
includeWalletIds?: string[];
|
|
23
17
|
excludeWalletIds?: string[];
|
|
24
18
|
featuredWalletIds?: string[];
|
|
@@ -32,6 +26,7 @@ export interface OptionsControllerState {
|
|
|
32
26
|
isOnRampEnabled?: boolean;
|
|
33
27
|
features?: Features;
|
|
34
28
|
debug?: boolean;
|
|
29
|
+
defaultNetwork?: AppKitNetwork;
|
|
35
30
|
}
|
|
36
31
|
|
|
37
32
|
// -- State --------------------------------------------- //
|
|
@@ -103,10 +98,28 @@ export const OptionsController = {
|
|
|
103
98
|
state.isOnRampEnabled = isOnRampEnabled;
|
|
104
99
|
},
|
|
105
100
|
|
|
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
|
+
|
|
106
111
|
isClipboardAvailable() {
|
|
107
112
|
return !!state.clipboardClient;
|
|
108
113
|
},
|
|
109
114
|
|
|
115
|
+
getStorage() {
|
|
116
|
+
if (!state.storage) {
|
|
117
|
+
throw new Error('AppKit: Storage is not set');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return state.storage;
|
|
121
|
+
},
|
|
122
|
+
|
|
110
123
|
copyToClipboard(value: string) {
|
|
111
124
|
const client = state.clipboardClient;
|
|
112
125
|
if (client) {
|
|
@@ -1,23 +1,9 @@
|
|
|
1
1
|
import { proxy } from 'valtio';
|
|
2
|
-
import type { CaipNetwork } from '@reown/appkit-common-react-native';
|
|
2
|
+
import type { CaipNetwork, SocialProvider } from '@reown/appkit-common-react-native';
|
|
3
3
|
|
|
4
|
-
import type {
|
|
5
|
-
WcWallet,
|
|
6
|
-
Connector,
|
|
7
|
-
SwapInputTarget,
|
|
8
|
-
OnRampTransactionResult
|
|
9
|
-
} from '../utils/TypeUtil';
|
|
4
|
+
import type { WcWallet, OnRampTransactionResult } from '../utils/TypeUtil';
|
|
10
5
|
|
|
11
6
|
// -- 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
7
|
export interface RouterControllerState {
|
|
22
8
|
view:
|
|
23
9
|
| 'Account'
|
|
@@ -28,11 +14,7 @@ export interface RouterControllerState {
|
|
|
28
14
|
| 'ConnectingExternal'
|
|
29
15
|
| 'ConnectingSiwe'
|
|
30
16
|
| 'ConnectingSocial'
|
|
31
|
-
| 'ConnectingFarcaster'
|
|
32
17
|
| 'ConnectingWalletConnect'
|
|
33
|
-
| 'Create'
|
|
34
|
-
| 'EmailVerifyDevice'
|
|
35
|
-
| 'EmailVerifyOtp'
|
|
36
18
|
| 'GetWallet'
|
|
37
19
|
| 'Networks'
|
|
38
20
|
| 'OnRamp'
|
|
@@ -42,15 +24,10 @@ export interface RouterControllerState {
|
|
|
42
24
|
| 'OnRampTransaction'
|
|
43
25
|
| 'SwitchNetwork'
|
|
44
26
|
| 'Swap'
|
|
45
|
-
| 'SwapSelectToken'
|
|
46
27
|
| 'SwapPreview'
|
|
47
28
|
| 'Transactions'
|
|
48
29
|
| 'UnsupportedChain'
|
|
49
|
-
| 'UpdateEmailPrimaryOtp'
|
|
50
|
-
| 'UpdateEmailSecondaryOtp'
|
|
51
|
-
| 'UpdateEmailWallet'
|
|
52
30
|
| 'UpgradeEmailWallet'
|
|
53
|
-
| 'UpgradeToSmartAccount'
|
|
54
31
|
| 'WalletCompatibleNetworks'
|
|
55
32
|
| 'WalletReceive'
|
|
56
33
|
| 'WalletSend'
|
|
@@ -60,22 +37,19 @@ export interface RouterControllerState {
|
|
|
60
37
|
| 'WhatIsAWallet';
|
|
61
38
|
history: RouterControllerState['view'][];
|
|
62
39
|
data?: {
|
|
63
|
-
connector?: Connector;
|
|
64
40
|
wallet?: WcWallet;
|
|
65
41
|
network?: CaipNetwork;
|
|
66
42
|
email?: string;
|
|
67
43
|
newEmail?: string;
|
|
68
|
-
swapTarget?: SwapInputTarget;
|
|
69
44
|
onrampResult?: OnRampTransactionResult;
|
|
45
|
+
socialProvider?: SocialProvider;
|
|
70
46
|
};
|
|
71
|
-
transactionStack: TransactionAction[];
|
|
72
47
|
}
|
|
73
48
|
|
|
74
49
|
// -- State --------------------------------------------- //
|
|
75
50
|
const state = proxy<RouterControllerState>({
|
|
76
51
|
view: 'Connect',
|
|
77
|
-
history: ['Connect']
|
|
78
|
-
transactionStack: []
|
|
52
|
+
history: ['Connect']
|
|
79
53
|
});
|
|
80
54
|
|
|
81
55
|
// -- Controller ---------------------------------------- //
|
|
@@ -90,30 +64,6 @@ export const RouterController = {
|
|
|
90
64
|
}
|
|
91
65
|
},
|
|
92
66
|
|
|
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
67
|
reset(view: RouterControllerState['view'], data?: RouterControllerState['data']) {
|
|
118
68
|
state.view = view;
|
|
119
69
|
state.history = [view];
|