@subwallet/extension-base 1.2.14-0 → 1.2.15-0
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/cjs/core/substrate/nominationpools-pallet.js +2 -1
- package/cjs/koni/api/nft/config.js +9 -5
- package/cjs/koni/api/nft/index.js +9 -1
- package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
- package/cjs/koni/background/handlers/Extension.js +12 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +1 -0
- package/cjs/services/chain-service/health-check/constants/index.js +4 -4
- package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
- package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
- package/cjs/services/chain-service/index.js +30 -1
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
- package/cjs/services/price-service/coingecko.js +57 -32
- package/cjs/services/price-service/index.js +30 -11
- package/core/substrate/nominationpools-pallet.js +2 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +3 -1
- package/koni/api/nft/index.js +9 -1
- package/koni/api/nft/unique_network_nft/index.js +12 -20
- package/koni/background/handlers/Extension.js +12 -0
- package/package.json +26 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +1 -0
- package/services/chain-service/health-check/constants/index.js +4 -4
- package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
- package/services/chain-service/health-check/utils/asset-info.js +20 -4
- package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
- package/services/chain-service/health-check/utils/chain-info.js +20 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
- package/services/chain-service/index.js +30 -1
- package/services/chain-service/types.d.ts +5 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
- package/services/price-service/coingecko.js +54 -32
- package/services/price-service/index.js +29 -11
|
@@ -2,12 +2,22 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { staticData, StaticKey } from '@subwallet/extension-base/utils/staticData';
|
|
5
|
+
import { isArray } from '@polkadot/util';
|
|
5
6
|
const DEFAULT_CURRENCY = 'USD';
|
|
6
7
|
let useBackupApi = false;
|
|
7
8
|
export const getExchangeRateMap = async () => {
|
|
9
|
+
let response;
|
|
8
10
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
var _response, _response2;
|
|
12
|
+
try {
|
|
13
|
+
response = await fetch('https://api-cache.subwallet.app/exchange-rate');
|
|
14
|
+
} catch (e) {}
|
|
15
|
+
if (((_response = response) === null || _response === void 0 ? void 0 : _response.status) !== 200) {
|
|
16
|
+
try {
|
|
17
|
+
response = await fetch('https://static-cache.subwallet.app/exchange-rate/data.json');
|
|
18
|
+
} catch (e) {}
|
|
19
|
+
}
|
|
20
|
+
const responseDataExchangeRate = (await ((_response2 = response) === null || _response2 === void 0 ? void 0 : _response2.json())) || {};
|
|
11
21
|
const exchangeRateMap = Object.keys(responseDataExchangeRate.conversion_rates).reduce((map, exchangeKey) => {
|
|
12
22
|
if (!staticData[StaticKey.CURRENCY_SYMBOL][exchangeKey]) {
|
|
13
23
|
return map;
|
|
@@ -20,42 +30,54 @@ export const getExchangeRateMap = async () => {
|
|
|
20
30
|
}, {});
|
|
21
31
|
return exchangeRateMap;
|
|
22
32
|
} catch (e) {
|
|
23
|
-
console.warn('Failed to get exchange rate');
|
|
24
33
|
return {};
|
|
25
34
|
}
|
|
26
35
|
};
|
|
27
36
|
export const getPriceMap = async (priceIds, currency = 'USD') => {
|
|
28
|
-
var _rs, _rs2;
|
|
29
37
|
const idStr = Array.from(priceIds).join(',');
|
|
30
|
-
let
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
let response;
|
|
39
|
+
try {
|
|
40
|
+
var _response3, _response5;
|
|
41
|
+
if (!useBackupApi) {
|
|
42
|
+
try {
|
|
43
|
+
response = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
|
|
44
|
+
} catch (err) {
|
|
45
|
+
useBackupApi = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (useBackupApi || ((_response3 = response) === null || _response3 === void 0 ? void 0 : _response3.status) !== 200) {
|
|
49
|
+
var _response4;
|
|
35
50
|
useBackupApi = true;
|
|
51
|
+
try {
|
|
52
|
+
response = await fetch(`https://api-cache.subwallet.app/api/price/get?ids=${idStr}`);
|
|
53
|
+
} catch (e) {}
|
|
54
|
+
if (((_response4 = response) === null || _response4 === void 0 ? void 0 : _response4.status) !== 200) {
|
|
55
|
+
try {
|
|
56
|
+
response = await fetch('https://static-cache.subwallet.app/price/data.json');
|
|
57
|
+
} catch (e) {}
|
|
58
|
+
}
|
|
36
59
|
}
|
|
60
|
+
const generateDataPriceRaw = (await ((_response5 = response) === null || _response5 === void 0 ? void 0 : _response5.json())) || [];
|
|
61
|
+
const responseDataPrice = isArray(generateDataPriceRaw) ? generateDataPriceRaw : Object.entries(generateDataPriceRaw).map(([id, value]) => ({
|
|
62
|
+
...value,
|
|
63
|
+
id
|
|
64
|
+
}));
|
|
65
|
+
const currencyData = staticData[StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
|
|
66
|
+
const priceMap = {};
|
|
67
|
+
const price24hMap = {};
|
|
68
|
+
responseDataPrice.forEach(val => {
|
|
69
|
+
const currentPrice = val.current_price || 0;
|
|
70
|
+
const price24h = currentPrice - (val.price_change_24h || 0);
|
|
71
|
+
priceMap[val.id] = currentPrice;
|
|
72
|
+
price24hMap[val.id] = price24h;
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
currency,
|
|
76
|
+
currencyData,
|
|
77
|
+
priceMap,
|
|
78
|
+
price24hMap
|
|
79
|
+
};
|
|
80
|
+
} catch (e) {
|
|
81
|
+
return {};
|
|
37
82
|
}
|
|
38
|
-
if (useBackupApi || ((_rs = rs) === null || _rs === void 0 ? void 0 : _rs.status) !== 200) {
|
|
39
|
-
useBackupApi = true;
|
|
40
|
-
rs = await fetch(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
41
|
-
}
|
|
42
|
-
if (((_rs2 = rs) === null || _rs2 === void 0 ? void 0 : _rs2.status) !== 200) {
|
|
43
|
-
console.warn('Failed to get token price');
|
|
44
|
-
}
|
|
45
|
-
const responseDataPrice = (await rs.json()) || [];
|
|
46
|
-
const currencyData = staticData[StaticKey.CURRENCY_SYMBOL][currency || DEFAULT_CURRENCY];
|
|
47
|
-
const priceMap = {};
|
|
48
|
-
const price24hMap = {};
|
|
49
|
-
responseDataPrice.forEach(val => {
|
|
50
|
-
const currentPrice = val.current_price || 0;
|
|
51
|
-
const price24h = currentPrice - (val.price_change_24h || 0);
|
|
52
|
-
priceMap[val.id] = currentPrice;
|
|
53
|
-
price24hMap[val.id] = price24h;
|
|
54
|
-
});
|
|
55
|
-
return {
|
|
56
|
-
currency,
|
|
57
|
-
currencyData,
|
|
58
|
-
priceMap,
|
|
59
|
-
price24hMap
|
|
60
|
-
};
|
|
61
83
|
};
|
|
@@ -6,9 +6,10 @@ import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
|
|
|
6
6
|
import { getExchangeRateMap, getPriceMap } from '@subwallet/extension-base/services/price-service/coingecko';
|
|
7
7
|
import { SWStorage } from '@subwallet/extension-base/storage';
|
|
8
8
|
import { CurrentCurrencyStore } from '@subwallet/extension-base/stores';
|
|
9
|
+
import { wait } from '@subwallet/extension-base/utils';
|
|
9
10
|
import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
|
|
10
11
|
import { staticData, StaticKey } from '@subwallet/extension-base/utils/staticData';
|
|
11
|
-
import { BehaviorSubject } from 'rxjs';
|
|
12
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
12
13
|
const DEFAULT_CURRENCY = 'USD';
|
|
13
14
|
const DEFAULT_PRICE_SUBJECT = {
|
|
14
15
|
currency: DEFAULT_CURRENCY,
|
|
@@ -22,6 +23,9 @@ const DEFAULT_PRICE_SUBJECT = {
|
|
|
22
23
|
price24hMap: {},
|
|
23
24
|
exchangeRateMap: {}
|
|
24
25
|
};
|
|
26
|
+
const checkFetchSuccess = (obj1, obj2) => {
|
|
27
|
+
return Object.keys(obj1).length > 0 && Object.keys(obj2).length > 0;
|
|
28
|
+
};
|
|
25
29
|
export class PriceService {
|
|
26
30
|
priceIds = new Set();
|
|
27
31
|
currency = new CurrentCurrencyStore();
|
|
@@ -43,10 +47,15 @@ export class PriceService {
|
|
|
43
47
|
this.init().then(() => this.getCurrentCurrency(updateCurrency)).catch(console.error);
|
|
44
48
|
}
|
|
45
49
|
async getTokenPrice(priceIds, currency, resolve, reject) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
const getPriceData = async () => {
|
|
51
|
+
await Promise.all([getExchangeRateMap(), getPriceMap(priceIds, currency)]).then(([exchangeRateMap, priceMap]) => {
|
|
52
|
+
if (checkFetchSuccess(priceMap, exchangeRateMap)) {
|
|
53
|
+
this.rawExchangeRateMap.next(exchangeRateMap);
|
|
54
|
+
this.rawPriceSubject.next(priceMap);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
await Promise.race([getPriceData(), wait(10 * 1000)]);
|
|
50
59
|
}
|
|
51
60
|
getCurrentCurrencySubject() {
|
|
52
61
|
return this.currency.getSubject();
|
|
@@ -82,17 +91,27 @@ export class PriceService {
|
|
|
82
91
|
})();
|
|
83
92
|
}
|
|
84
93
|
async calculatePriceMap(currency) {
|
|
85
|
-
|
|
94
|
+
let {
|
|
86
95
|
price24hMap,
|
|
87
96
|
priceMap
|
|
88
97
|
} = this.rawPriceSubject.value;
|
|
89
|
-
|
|
98
|
+
let exchangeRateData = this.rawExchangeRateMap.value;
|
|
99
|
+
const priceStored = await this.dbService.getPriceStore(currency);
|
|
90
100
|
const currencyKey = currency || DEFAULT_CURRENCY;
|
|
91
101
|
if (Object.keys(this.rawPriceSubject.value).length === 0) {
|
|
92
|
-
|
|
102
|
+
if (priceStored !== null && priceStored !== void 0 && priceStored.exchangeRateMap) {
|
|
103
|
+
exchangeRateData = priceStored.exchangeRateMap;
|
|
104
|
+
}
|
|
93
105
|
}
|
|
94
106
|
if (Object.keys(exchangeRateData).length === 0) {
|
|
95
|
-
|
|
107
|
+
if (priceStored !== null && priceStored !== void 0 && priceStored.price24hMap) {
|
|
108
|
+
price24hMap = {
|
|
109
|
+
...priceStored.price24hMap
|
|
110
|
+
};
|
|
111
|
+
priceMap = {
|
|
112
|
+
...priceStored.priceMap
|
|
113
|
+
};
|
|
114
|
+
}
|
|
96
115
|
}
|
|
97
116
|
const finalPriceMap = {
|
|
98
117
|
priceMap: {
|
|
@@ -158,8 +177,7 @@ export class PriceService {
|
|
|
158
177
|
this.refreshPriceMapByAction();
|
|
159
178
|
}
|
|
160
179
|
};
|
|
161
|
-
this.getCurrentCurrencySubject().subscribe(currency => {
|
|
162
|
-
console.log('Currency changed', currency);
|
|
180
|
+
combineLatest([this.getCurrentCurrencySubject(), this.rawPriceSubject, this.rawExchangeRateMap]).subscribe(([currency]) => {
|
|
163
181
|
this.calculatePriceMap(currency).then(data => {
|
|
164
182
|
if (data) {
|
|
165
183
|
this.priceSubject.next(data);
|