@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.
Files changed (46) hide show
  1. package/cjs/core/substrate/nominationpools-pallet.js +2 -1
  2. package/cjs/koni/api/nft/config.js +9 -5
  3. package/cjs/koni/api/nft/index.js +9 -1
  4. package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
  5. package/cjs/koni/background/handlers/Extension.js +12 -0
  6. package/cjs/packageInfo.js +1 -1
  7. package/cjs/services/chain-service/constants.js +1 -0
  8. package/cjs/services/chain-service/health-check/constants/index.js +4 -4
  9. package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
  10. package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
  11. package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
  12. package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
  13. package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
  14. package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
  15. package/cjs/services/chain-service/index.js +30 -1
  16. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
  17. package/cjs/services/price-service/coingecko.js +57 -32
  18. package/cjs/services/price-service/index.js +30 -11
  19. package/core/substrate/nominationpools-pallet.js +2 -1
  20. package/koni/api/nft/config.d.ts +1 -0
  21. package/koni/api/nft/config.js +3 -1
  22. package/koni/api/nft/index.js +9 -1
  23. package/koni/api/nft/unique_network_nft/index.js +12 -20
  24. package/koni/background/handlers/Extension.js +12 -0
  25. package/package.json +26 -6
  26. package/packageInfo.js +1 -1
  27. package/services/chain-service/constants.d.ts +1 -0
  28. package/services/chain-service/constants.js +1 -0
  29. package/services/chain-service/health-check/constants/index.js +4 -4
  30. package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
  31. package/services/chain-service/health-check/utils/asset-info.js +20 -4
  32. package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
  33. package/services/chain-service/health-check/utils/chain-info.js +20 -0
  34. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
  35. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
  36. package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
  37. package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
  38. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
  39. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
  40. package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
  41. package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
  42. package/services/chain-service/index.js +30 -1
  43. package/services/chain-service/types.d.ts +5 -0
  44. package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
  45. package/services/price-service/coingecko.js +54 -32
  46. 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
- const response = await fetch('https://api-cache.subwallet.app/exchange-rate');
10
- const responseDataExchangeRate = (await response.json()) || {};
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 rs;
31
- if (!useBackupApi) {
32
- try {
33
- rs = await fetch(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency.toLowerCase()}&per_page=250&ids=${idStr}`);
34
- } catch (err) {
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
- await Promise.all([getExchangeRateMap(), getPriceMap(priceIds, currency)]).then(([exchangeRateMap, priceMap]) => {
47
- this.rawExchangeRateMap.next(exchangeRateMap);
48
- this.rawPriceSubject.next(priceMap);
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
- const {
94
+ let {
86
95
  price24hMap,
87
96
  priceMap
88
97
  } = this.rawPriceSubject.value;
89
- const exchangeRateData = this.rawExchangeRateMap.value;
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
- return;
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
- return;
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);