@subwallet/extension-base 1.1.59-0 → 1.1.60-1

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 (43) hide show
  1. package/background/KoniTypes.d.ts +18 -1
  2. package/cjs/constants/staking.js +2 -1
  3. package/cjs/constants/storage.js +4 -2
  4. package/cjs/koni/api/coingecko.js +58 -15
  5. package/cjs/koni/api/nft/config.js +26 -22
  6. package/cjs/koni/background/handlers/Extension.js +130 -122
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +7 -1
  9. package/cjs/services/chain-service/index.js +6 -1
  10. package/cjs/services/chain-service/utils/index.js +34 -14
  11. package/cjs/services/price-service/coingecko.js +54 -35
  12. package/cjs/services/price-service/index.js +94 -12
  13. package/cjs/services/setting-service/constants.js +4 -1
  14. package/cjs/services/storage-service/DatabaseService.js +2 -3
  15. package/cjs/utils/number.js +84 -1
  16. package/cjs/utils/staticData/index.js +6 -1
  17. package/constants/staking.js +2 -1
  18. package/constants/storage.d.ts +1 -0
  19. package/constants/storage.js +2 -1
  20. package/koni/api/coingecko.d.ts +2 -2
  21. package/koni/api/coingecko.js +58 -15
  22. package/koni/api/nft/config.js +27 -21
  23. package/koni/background/handlers/Extension.d.ts +1 -0
  24. package/koni/background/handlers/Extension.js +7 -0
  25. package/package.json +7 -6
  26. package/packageInfo.js +1 -1
  27. package/services/balance-service/helpers/subscribe/substrate/index.js +8 -2
  28. package/services/chain-service/index.js +6 -1
  29. package/services/chain-service/utils/index.d.ts +13 -0
  30. package/services/chain-service/utils/index.js +32 -14
  31. package/services/price-service/coingecko.d.ts +3 -2
  32. package/services/price-service/coingecko.js +50 -32
  33. package/services/price-service/index.d.ts +9 -1
  34. package/services/price-service/index.js +95 -14
  35. package/services/setting-service/constants.d.ts +1 -0
  36. package/services/setting-service/constants.js +2 -0
  37. package/services/storage-service/DatabaseService.d.ts +1 -1
  38. package/services/storage-service/DatabaseService.js +2 -3
  39. package/utils/number.d.ts +1 -0
  40. package/utils/number.js +82 -0
  41. package/utils/staticData/currencySymbol.json +11 -0
  42. package/utils/staticData/index.d.ts +3 -0
  43. package/utils/staticData/index.js +4 -0
@@ -138,11 +138,22 @@ export interface StakingRewardJson {
138
138
  data: Record<string, StakingRewardItem>;
139
139
  }
140
140
  export interface PriceJson {
141
+ currency: CurrencyType;
141
142
  ready?: boolean;
142
- currency: string;
143
+ currencyData: CurrencyJson;
144
+ exchangeRateMap: Record<string, ExchangeRateJSON>;
143
145
  priceMap: Record<string, number>;
144
146
  price24hMap: Record<string, number>;
145
147
  }
148
+ export interface ExchangeRateJSON {
149
+ exchange: number;
150
+ label: string;
151
+ }
152
+ export interface CurrencyJson {
153
+ label: string;
154
+ isPrefix: boolean;
155
+ symbol: string;
156
+ }
146
157
  export declare enum APIItemState {
147
158
  PENDING = "pending",
148
159
  READY = "ready",
@@ -301,6 +312,7 @@ export interface CurrentAccountInfo {
301
312
  allGenesisHash?: string;
302
313
  }
303
314
  export declare type LanguageType = 'en' | 'zh' | 'fr' | 'tr' | 'pl' | 'th' | 'ur' | 'vi' | 'ja' | 'ru';
315
+ export declare type CurrencyType = 'USD' | 'BRL' | 'CNY' | 'EUR' | 'GBP' | 'HKD' | 'JPY' | 'RUB' | 'VND';
304
316
  export declare type LanguageOptionType = {
305
317
  text: string;
306
318
  value: LanguageType;
@@ -312,6 +324,7 @@ export declare enum WalletUnlockType {
312
324
  }
313
325
  export interface UiSettings {
314
326
  language: LanguageType;
327
+ currency: string;
315
328
  browserConfirmationType: BrowserConfirmationType;
316
329
  isShowZeroBalance: boolean;
317
330
  isShowBalance: boolean;
@@ -342,6 +355,9 @@ export declare type RequestChangeShowZeroBalance = {
342
355
  export declare type RequestChangeLanguage = {
343
356
  language: LanguageType;
344
357
  };
358
+ export declare type RequestChangePriceCurrency = {
359
+ currency: CurrencyType;
360
+ };
345
361
  export declare type RequestChangeShowBalance = {
346
362
  enable: boolean;
347
363
  };
@@ -1765,6 +1781,7 @@ export interface KoniRequestSignatures {
1765
1781
  'pri(settings.saveUnlockType)': [RequestUnlockType, boolean];
1766
1782
  'pri(settings.saveEnableChainPatrol)': [RequestChangeEnableChainPatrol, boolean];
1767
1783
  'pri(settings.saveLanguage)': [RequestChangeLanguage, boolean];
1784
+ 'pri(settings.savePriceCurrency)': [RequestChangePriceCurrency, boolean];
1768
1785
  'pri(settings.saveShowZeroBalance)': [RequestChangeShowZeroBalance, boolean];
1769
1786
  'pri(settings.saveShowBalance)': [RequestChangeShowBalance, boolean];
1770
1787
  'pri(settings.logo.assets.subscribe)': [null, Record<string, string>, Record<string, string>];
@@ -11,7 +11,8 @@ const PREDEFINED_STAKING_POOL = {
11
11
  kusama: 80,
12
12
  polkadot: 39,
13
13
  vara_network: 62,
14
- aleph: 82
14
+ aleph: 82,
15
+ availTuringTest: 11
15
16
  };
16
17
  exports.PREDEFINED_STAKING_POOL = PREDEFINED_STAKING_POOL;
17
18
  const MAX_NOMINATIONS = '16';
@@ -3,9 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.LANGUAGE = void 0;
6
+ exports.LANGUAGE = exports.CURRENCY = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const LANGUAGE = 'current-language';
11
- exports.LANGUAGE = LANGUAGE;
11
+ exports.LANGUAGE = LANGUAGE;
12
+ const CURRENCY = 'current-currency';
13
+ exports.CURRENCY = CURRENCY;
@@ -5,33 +5,76 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.getTokenPrice = void 0;
8
+ var _staticData = require("@subwallet/extension-base/utils/staticData");
8
9
  var _axios = _interopRequireDefault(require("axios"));
9
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
11
  // SPDX-License-Identifier: Apache-2.0
11
12
 
13
+ let useBackupApi = false;
12
14
  const getTokenPrice = async function (priceIds) {
13
- let currency = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'usd';
15
+ let currencyCode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'USD';
14
16
  try {
15
- // const inverseMap: Record<string, string> = {};
16
- const idStr = priceIds.join(',');
17
- const res = await _axios.default.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currency}&per_page=1000&ids=${idStr}`);
18
- const responseData = res.data;
17
+ var _resMultiPromise$, _resMultiPromise$2;
18
+ const idStr = Array.from(priceIds).join(',');
19
+ const getPriceMap = async () => {
20
+ var _rs, _rs2;
21
+ let rs;
22
+ if (!useBackupApi) {
23
+ try {
24
+ rs = await _axios.default.get(`https://api.coingecko.com/api/v3/coins/markets?vs_currency=${currencyCode.toLowerCase()}&per_page=250&ids=${idStr}`);
25
+ } catch (err) {
26
+ useBackupApi = true;
27
+ }
28
+ }
29
+ if (useBackupApi || ((_rs = rs) === null || _rs === void 0 ? void 0 : _rs.status) !== 200) {
30
+ useBackupApi = true;
31
+ rs = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
32
+ }
33
+ if (((_rs2 = rs) === null || _rs2 === void 0 ? void 0 : _rs2.status) !== 200) {
34
+ console.warn('Failed to get token price');
35
+ }
36
+ return rs;
37
+ };
38
+ const getExchangeRate = async () => {
39
+ var _rs3;
40
+ let rs;
41
+ try {
42
+ rs = await _axios.default.get('https://api-cache.subwallet.app/exchange-rate');
43
+ } catch (e) {
44
+ console.warn('Failed to get exchange rate');
45
+ }
46
+ if (((_rs3 = rs) === null || _rs3 === void 0 ? void 0 : _rs3.status) !== 200) {
47
+ console.warn('Failed to get exchange rate');
48
+ }
49
+ return rs;
50
+ };
51
+ const resMultiPromise = await Promise.all([getPriceMap(), getExchangeRate()]);
52
+ const responseDataPrice = ((_resMultiPromise$ = resMultiPromise[0]) === null || _resMultiPromise$ === void 0 ? void 0 : _resMultiPromise$.data) || [];
53
+ const responseDataExchangeRate = ((_resMultiPromise$2 = resMultiPromise[1]) === null || _resMultiPromise$2 === void 0 ? void 0 : _resMultiPromise$2.data) || {};
19
54
  const priceMap = {};
20
55
  const price24hMap = {};
21
- responseData.forEach(val => {
56
+ const exchangeRateMap = Object.keys(responseDataExchangeRate.conversion_rates).reduce((map, exchangeKey) => {
57
+ if (!_staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][exchangeKey]) {
58
+ return map;
59
+ }
60
+ map[exchangeKey] = {
61
+ exchange: responseDataExchangeRate.conversion_rates[exchangeKey],
62
+ label: _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][exchangeKey].label
63
+ };
64
+ return map;
65
+ }, {});
66
+ const currencyData = _staticData.staticData[_staticData.StaticKey.CURRENCY_SYMBOL][currencyCode];
67
+ responseDataPrice.forEach(val => {
22
68
  const currentPrice = val.current_price || 0;
23
69
  const price24h = currentPrice - (val.price_change_24h || 0);
24
- priceMap[val.id] = currentPrice;
25
- price24hMap[val.id] = price24h;
26
-
27
- // if (inverseMap[val.id]) {
28
- // priceMap[inverseMap[val.id]] = currentPrice;
29
- // price24hMap[inverseMap[val.id]] = price24h;
30
- // }
70
+ const exchangeRate = exchangeRateMap[currencyCode] || 1;
71
+ priceMap[val.id] = currentPrice * exchangeRate.exchange;
72
+ price24hMap[val.id] = price24h * exchangeRate.exchange;
31
73
  });
32
-
33
74
  return {
34
- currency,
75
+ currency: currencyCode,
76
+ currencyData,
77
+ exchangeRateMap,
35
78
  priceMap,
36
79
  price24hMap
37
80
  };
@@ -126,7 +126,7 @@ const TRANSFER_CHAIN_ID = {
126
126
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya]: 81
127
127
  };
128
128
  exports.TRANSFER_CHAIN_ID = TRANSFER_CHAIN_ID;
129
- let SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME;
129
+ let SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME; // This is for localhost or http only
130
130
  exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME;
131
131
  (function (SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME) {
132
132
  SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME["statemine"] = "statemine";
@@ -150,27 +150,31 @@ if (isFirefox) {
150
150
  weight: 5000
151
151
  });
152
152
  }
153
- if (!_utils.RuntimeInfo.protocol || !_utils.RuntimeInfo.protocol.startsWith('http') || _utils.RuntimeInfo.protocol.startsWith('https')) {
154
- RANDOM_IPFS_GATEWAY_SETTING.push({
155
- provider: IPFS_FLEEK,
156
- weight: 4
157
- }, {
158
- provider: IPFS_GATEWAY_4EVERLAND,
159
- weight: 2
160
- }, {
161
- provider: IPFS_W3S_LINK,
162
- weight: 1
163
- }, {
164
- provider: CF_IPFS_GATEWAY,
165
- weight: 4
166
- }, {
167
- provider: PINATA_IPFS_GATEWAY,
168
- weight: 1 // Rate limit too low
169
- }, {
170
- provider: IPFS_IO,
171
- weight: 5
172
- });
173
- } else if (!_utils.RuntimeInfo.protocol.startsWith('https')) {
153
+ if (_utils.RuntimeInfo.protocol && _utils.RuntimeInfo.protocol.startsWith('http')) {
154
+ // This is for https
155
+ if (_utils.RuntimeInfo.protocol.startsWith('https')) {
156
+ RANDOM_IPFS_GATEWAY_SETTING.push({
157
+ provider: IPFS_FLEEK,
158
+ weight: 4
159
+ }, {
160
+ provider: IPFS_GATEWAY_4EVERLAND,
161
+ weight: 2
162
+ }, {
163
+ provider: IPFS_W3S_LINK,
164
+ weight: 1
165
+ }, {
166
+ provider: CF_IPFS_GATEWAY,
167
+ weight: 4
168
+ }, {
169
+ provider: PINATA_IPFS_GATEWAY,
170
+ weight: 1 // Rate limit too low
171
+ }, {
172
+ provider: IPFS_IO,
173
+ weight: 5
174
+ });
175
+ }
176
+ } else {
177
+ // This is for extension env or other
174
178
  RANDOM_IPFS_GATEWAY_SETTING.push({
175
179
  provider: NFT_STORAGE_GATEWAY,
176
180
  weight: 50