@subwallet/extension-base 1.1.51-2 → 1.1.53-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 (71) hide show
  1. package/cjs/koni/api/tokens/evm/balance.js +1 -2
  2. package/cjs/koni/api/tokens/evm/transfer.js +3 -5
  3. package/cjs/koni/api/tokens/evm/web3.js +3 -3
  4. package/cjs/koni/background/handlers/Extension.js +5 -4
  5. package/cjs/koni/background/handlers/State.js +8 -71
  6. package/cjs/koni/background/subscription.js +3 -63
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/BalanceMapImpl.js +2 -2
  9. package/cjs/services/balance-service/helpers/index.js +27 -0
  10. package/cjs/services/balance-service/helpers/subscribe/evm.js +33 -15
  11. package/cjs/services/balance-service/helpers/subscribe/{balance.js → index.js} +46 -29
  12. package/cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js +34 -15
  13. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +157 -72
  14. package/cjs/services/balance-service/index.js +277 -75
  15. package/cjs/services/chain-service/constants.js +2 -1
  16. package/cjs/services/chain-service/health-check/utils/asset-info.js +1 -3
  17. package/cjs/services/chain-service/index.js +1 -9
  18. package/cjs/services/chain-service/utils/patch.js +1 -1
  19. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  20. package/cjs/services/request-service/handler/ConnectWCRequestHandler.js +0 -1
  21. package/cjs/services/storage-service/DatabaseService.js +10 -1
  22. package/cjs/services/wallet-connect-service/helpers.js +1 -1
  23. package/cjs/services/wallet-connect-service/index.js +19 -0
  24. package/cjs/utils/asset.js +19 -0
  25. package/cjs/utils/eth/parseTransaction/index.js +1 -1
  26. package/cjs/utils/index.js +12 -0
  27. package/koni/api/tokens/evm/balance.d.ts +1 -1
  28. package/koni/api/tokens/evm/balance.js +1 -2
  29. package/koni/api/tokens/evm/transfer.d.ts +2 -2
  30. package/koni/api/tokens/evm/transfer.js +3 -5
  31. package/koni/api/tokens/evm/web3.d.ts +1 -1
  32. package/koni/api/tokens/evm/web3.js +2 -2
  33. package/koni/background/handlers/Extension.js +5 -4
  34. package/koni/background/handlers/State.d.ts +1 -12
  35. package/koni/background/handlers/State.js +9 -72
  36. package/koni/background/subscription.d.ts +1 -5
  37. package/koni/background/subscription.js +1 -60
  38. package/package.json +23 -13
  39. package/packageInfo.js +1 -1
  40. package/services/balance-service/BalanceMapImpl.js +1 -1
  41. package/services/balance-service/helpers/index.d.ts +2 -0
  42. package/services/balance-service/helpers/index.js +5 -0
  43. package/services/balance-service/helpers/subscribe/evm.d.ts +3 -5
  44. package/services/balance-service/helpers/subscribe/evm.js +31 -14
  45. package/services/balance-service/helpers/subscribe/{balance.d.ts → index.d.ts} +2 -2
  46. package/services/balance-service/helpers/subscribe/{balance.js → index.js} +41 -28
  47. package/services/balance-service/helpers/subscribe/substrate/equilibrium.d.ts +3 -4
  48. package/services/balance-service/helpers/subscribe/substrate/equilibrium.js +29 -13
  49. package/services/balance-service/helpers/subscribe/substrate/index.d.ts +2 -2
  50. package/services/balance-service/helpers/subscribe/substrate/index.js +144 -67
  51. package/services/balance-service/index.d.ts +64 -6
  52. package/services/balance-service/index.js +279 -77
  53. package/services/chain-service/constants.js +2 -1
  54. package/services/chain-service/health-check/utils/asset-info.js +1 -3
  55. package/services/chain-service/index.js +2 -10
  56. package/services/chain-service/utils/patch.js +1 -1
  57. package/services/earning-service/handlers/liquid-staking/stella-swap.js +2 -2
  58. package/services/request-service/handler/ConnectWCRequestHandler.js +0 -1
  59. package/services/storage-service/DatabaseService.js +7 -1
  60. package/services/wallet-connect-service/helpers.js +1 -1
  61. package/services/wallet-connect-service/index.d.ts +1 -0
  62. package/services/wallet-connect-service/index.js +19 -1
  63. package/types/{balance.d.ts → balance/index.d.ts} +16 -0
  64. package/types/index.js +1 -1
  65. package/utils/asset.d.ts +2 -0
  66. package/utils/asset.js +12 -0
  67. package/utils/eth/parseTransaction/index.js +1 -1
  68. package/utils/index.d.ts +1 -0
  69. package/utils/index.js +1 -0
  70. /package/cjs/types/{balance.js → balance/index.js} +0 -0
  71. /package/types/{balance.js → balance/index.js} +0 -0
@@ -7,8 +7,7 @@ exports.getEVMBalance = getEVMBalance;
7
7
  // Copyright 2019-2022 @subwallet/extension-base
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
- async function getEVMBalance(networkKey, addresses, evmApiMap) {
11
- const web3Api = evmApiMap[networkKey];
10
+ async function getEVMBalance(networkKey, addresses, web3Api) {
12
11
  return await Promise.all(addresses.map(async address => {
13
12
  try {
14
13
  return await web3Api.api.eth.getBalance(address);
@@ -46,10 +46,9 @@ const handleTransferBalanceResult = _ref => {
46
46
  callback(response);
47
47
  };
48
48
  exports.handleTransferBalanceResult = handleTransferBalanceResult;
49
- async function getEVMTransactionObject(chainInfo, from, to, value, transferAll, evmApiMap) {
49
+ async function getEVMTransactionObject(chainInfo, from, to, value, transferAll, web3Api) {
50
50
  var _priority$maxFeePerGa, _priority$maxPriority;
51
51
  const networkKey = chainInfo.slug;
52
- const web3Api = evmApiMap[networkKey];
53
52
  const priority = await (0, _utils.calculateGasFeeParams)(web3Api, networkKey);
54
53
  const transactionObject = {
55
54
  to: to,
@@ -75,11 +74,10 @@ async function getEVMTransactionObject(chainInfo, from, to, value, transferAll,
75
74
  }
76
75
  return [transactionObject, transactionObject.value.toString()];
77
76
  }
78
- async function getERC20TransactionObject(assetAddress, chainInfo, from, to, value, transferAll, evmApiMap) {
77
+ async function getERC20TransactionObject(assetAddress, chainInfo, from, to, value, transferAll, evmApi) {
79
78
  var _priority$maxFeePerGa2, _priority$maxPriority2;
80
79
  const networkKey = chainInfo.slug;
81
- const evmApi = evmApiMap[networkKey];
82
- const erc20Contract = (0, _web.getERC20Contract)(networkKey, assetAddress, evmApiMap);
80
+ const erc20Contract = (0, _web.getERC20Contract)(assetAddress, evmApi);
83
81
  let freeAmount = new _bignumber.default(0);
84
82
  let transferValue = value;
85
83
  if (transferAll) {
@@ -8,10 +8,10 @@ var _helper = require("@subwallet/extension-base/services/chain-service/helper")
8
8
  // Copyright 2019-2022 @subwallet/extension-base
9
9
  // SPDX-License-Identifier: Apache-2.0
10
10
 
11
- const getERC20Contract = function (networkKey, assetAddress, evmApiMap) {
12
- let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
11
+ const getERC20Contract = function (assetAddress, evmApi) {
12
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
13
13
  // @ts-ignore
14
14
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access
15
- return new evmApiMap[networkKey].api.eth.Contract(_helper._ERC20_ABI, assetAddress, options);
15
+ return new evmApi.api.eth.Contract(_helper._ERC20_ABI, assetAddress, options);
16
16
  };
17
17
  exports.getERC20Contract = getERC20Contract;
@@ -1079,11 +1079,11 @@ class KoniExtension {
1079
1079
  return this.getPrice();
1080
1080
  }
1081
1081
  async getBalance(reset) {
1082
- return this.#koniState.getBalance(reset);
1082
+ return this.#koniState.balanceService.getBalance(reset);
1083
1083
  }
1084
1084
  async subscribeBalance(id, port) {
1085
1085
  const cb = (0, _subscriptions.createSubscription)(id, port);
1086
- const balanceSubscription = this.#koniState.subscribeBalance().subscribe({
1086
+ const balanceSubscription = this.#koniState.balanceService.subscribeBalanceMap().subscribe({
1087
1087
  next: rs => {
1088
1088
  const data = {
1089
1089
  details: rs
@@ -1619,12 +1619,13 @@ class KoniExtension {
1619
1619
  // TODO: review this
1620
1620
  chainType = _KoniTypes.ChainType.EVM;
1621
1621
  const txVal = transferAll ? freeBalance.value : value || '0';
1622
+ const evmApi = evmApiMap[networkKey];
1622
1623
 
1623
1624
  // Estimate with EVM API
1624
1625
  if ((0, _utils2._isTokenEvmSmartContract)(tokenInfo) || (0, _utils2._isLocalToken)(tokenInfo)) {
1625
- [transaction, transferAmount.value] = await (0, _transfer3.getERC20TransactionObject)((0, _utils2._getContractAddressOfToken)(tokenInfo), chainInfo, from, to, txVal, !!transferAll, evmApiMap);
1626
+ [transaction, transferAmount.value] = await (0, _transfer3.getERC20TransactionObject)((0, _utils2._getContractAddressOfToken)(tokenInfo), chainInfo, from, to, txVal, !!transferAll, evmApi);
1626
1627
  } else {
1627
- [transaction, transferAmount.value] = await (0, _transfer3.getEVMTransactionObject)(chainInfo, from, to, txVal, !!transferAll, evmApiMap);
1628
+ [transaction, transferAmount.value] = await (0, _transfer3.getEVMTransactionObject)(chainInfo, from, to, txVal, !!transferAll, evmApi);
1628
1629
  }
1629
1630
  } else if ((0, _utils2._isMantaZkAsset)(tokenInfo)) {
1630
1631
  // TODO
@@ -11,7 +11,6 @@ var _subscriptions = require("@subwallet/extension-base/background/handlers/subs
11
11
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
12
12
  var _constants = require("@subwallet/extension-base/constants");
13
13
  var _balanceService = require("@subwallet/extension-base/services/balance-service");
14
- var _BalanceMapImpl = require("@subwallet/extension-base/services/balance-service/BalanceMapImpl");
15
14
  var _types = require("@subwallet/extension-base/services/base/types");
16
15
  var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
17
16
  var _campaignService = _interopRequireDefault(require("@subwallet/extension-base/services/campaign-service"));
@@ -72,7 +71,6 @@ class KoniState {
72
71
  unsubscriptionMap = {};
73
72
  accountRefStore = new _AccountRef.default();
74
73
  externalRequest = {};
75
- balanceMap = new _BalanceMapImpl.BalanceMapImpl();
76
74
  crowdloanMap = generateDefaultCrowdloanMap();
77
75
  crowdloanSubject = new _rxjs.Subject();
78
76
  nftSubject = new _rxjs.Subject();
@@ -234,6 +232,7 @@ class KoniState {
234
232
  await this.migrationService.run();
235
233
  this.campaignService.init();
236
234
  this.eventService.emit('chain.ready', true);
235
+ await this.balanceService.init();
237
236
  await this.earningService.init();
238
237
  this.onReady();
239
238
  this.onAccountAdd();
@@ -689,35 +688,6 @@ class KoniState {
689
688
  getAllAddresses() {
690
689
  return _uiKeyring.keyring.getAccounts().map(account => account.address);
691
690
  }
692
- async removeInactiveChainBalances() {
693
- const assetSettings = await this.chainService.getAssetSettings();
694
- this.balanceMap.removeBalanceItemByFilter(item => {
695
- return !assetSettings[item.tokenSlug];
696
- });
697
- }
698
- async getBalance(reset) {
699
- await this.removeInactiveChainBalances();
700
- return {
701
- details: this.balanceMap.map,
702
- reset
703
- };
704
- }
705
- async getStoredBalance(address) {
706
- return await this.dbService.stores.balance.getBalanceMapByAddresses(address);
707
- }
708
- isFirstLoad = true;
709
- async handleResetBalance(newAddress, forceRefresh) {
710
- if (this.isFirstLoad) {
711
- const backupBalanceData = await this.dbService.getStoredBalance();
712
- this.balanceMap.updateBalanceItems(backupBalanceData, (0, _utils3.isAccountAll)(newAddress));
713
- this.isFirstLoad = false;
714
- }
715
- if (forceRefresh) {
716
- this.balanceMap.setData({});
717
- await this.dbService.stores.balance.clear();
718
- }
719
- await Promise.all([this.removeInactiveChainBalances()]);
720
- }
721
691
  async resetCrowdloanMap(newAddress) {
722
692
  const defaultData = generateDefaultCrowdloanMap();
723
693
  const storedData = await this.getStoredCrowdloan(newAddress);
@@ -739,36 +709,6 @@ class KoniState {
739
709
  });
740
710
  });
741
711
  }
742
- balanceUpdateCache = [];
743
-
744
- /** Note: items must be same tokenSlug */
745
- setBalanceItem(items) {
746
- if (items.length) {
747
- const nowTime = new Date().getTime();
748
- for (const item of items) {
749
- const balance = {
750
- timestamp: nowTime,
751
- ...item
752
- };
753
- this.balanceUpdateCache.push(balance);
754
- }
755
- (0, _utils3.addLazy)('updateBalanceStore', () => {
756
- const isAllAccount = (0, _utils3.isAccountAll)(this.keyringService.currentAccount.address);
757
- this.balanceMap.updateBalanceItems(this.balanceUpdateCache, isAllAccount);
758
- if (isAllAccount) {
759
- this.balanceUpdateCache = [...this.balanceUpdateCache, ...Object.values(this.balanceMap.map[_constants.ALL_ACCOUNT_KEY])];
760
- }
761
- this.updateBalanceStore(this.balanceUpdateCache);
762
- this.balanceUpdateCache = [];
763
- }, 300, 1800);
764
- }
765
- }
766
- updateBalanceStore(items) {
767
- this.dbService.updateBulkBalanceStore(items).catch(e => this.logger.warn(e));
768
- }
769
- subscribeBalance() {
770
- return this.balanceMap.mapSubject;
771
- }
772
712
  getCrowdloan(reset) {
773
713
  return {
774
714
  details: this.crowdloanMap,
@@ -1479,7 +1419,7 @@ class KoniState {
1479
1419
  // Stopping services
1480
1420
  await Promise.all([this.cron.stop(), this.subscription.stop()]);
1481
1421
  await this.pauseAllNetworks(undefined, 'IDLE mode');
1482
- await Promise.all([this.historyService.stop(), this.priceService.stop(), this.earningService.stop()]);
1422
+ await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop()]);
1483
1423
 
1484
1424
  // Complete sleeping
1485
1425
  sleeping.resolve();
@@ -1512,7 +1452,7 @@ class KoniState {
1512
1452
  }
1513
1453
 
1514
1454
  // Start services
1515
- await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.earningService.start()]);
1455
+ await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start()]);
1516
1456
 
1517
1457
  // Complete starting
1518
1458
  starting.resolve();
@@ -1558,11 +1498,6 @@ class KoniState {
1558
1498
 
1559
1499
  const stores = this.dbService.stores;
1560
1500
 
1561
- // Remove Balance
1562
- stores.balance.removeAllByAddress(address).catch(console.error);
1563
- stores.balance.removeAllByAddress(_constants.ALL_ACCOUNT_KEY).catch(console.error);
1564
- this.balanceMap.removeBalanceItems([address, _constants.ALL_ACCOUNT_KEY]);
1565
-
1566
1501
  // Remove NFT
1567
1502
  stores.nft.deleteNftByAddress([address]).catch(console.error);
1568
1503
 
@@ -1580,7 +1515,7 @@ class KoniState {
1580
1515
  return true;
1581
1516
  }
1582
1517
  async reloadBalance() {
1583
- await this.subscription.reloadBalance();
1518
+ await this.balanceService.reloadBalance();
1584
1519
  return true;
1585
1520
  }
1586
1521
  async reloadCrowdloan() {
@@ -1605,9 +1540,11 @@ class KoniState {
1605
1540
  }
1606
1541
  async resetWallet(resetAll) {
1607
1542
  await this.keyringService.resetWallet(resetAll);
1543
+ await this.earningService.resetYieldPosition();
1544
+ await this.balanceService.handleResetBalance(true);
1608
1545
  this.requestService.resetWallet();
1609
1546
  this.transactionService.resetWallet();
1610
- await this.handleResetBalance(_constants.ALL_ACCOUNT_KEY, true);
1547
+ // await this.handleResetBalance(ALL_ACCOUNT_KEY, true);
1611
1548
  await this.earningService.resetWallet();
1612
1549
  await this.dbService.resetWallet(resetAll);
1613
1550
  this.accountRefStore.set('refList', []);
@@ -1720,7 +1657,7 @@ class KoniState {
1720
1657
  };
1721
1658
  balanceItem.free = ((_zkBalances$i = zkBalances[i]) === null || _zkBalances$i === void 0 ? void 0 : _zkBalances$i.toString()) || '0';
1722
1659
  balanceItem.state = _KoniTypes.APIItemState.READY;
1723
- this.setBalanceItem([balanceItem]);
1660
+ this.balanceService.setBalanceItem([balanceItem]);
1724
1661
  }
1725
1662
  }).catch(console.warn);
1726
1663
  }
@@ -5,12 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.KoniSubscription = void 0;
7
7
  var _crowdloan = require("@subwallet/extension-base/koni/api/dotsama/crowdloan");
8
- var _staking = require("@subwallet/extension-base/koni/api/staking");
9
8
  var _handlers = require("@subwallet/extension-base/koni/background/handlers");
10
- var _balance = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/balance");
11
- var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
9
  var _types = require("@subwallet/extension-base/services/event-service/types");
13
- var _utils2 = require("@subwallet/extension-base/utils");
10
+ var _utils = require("@subwallet/extension-base/utils");
14
11
  var _util = require("@polkadot/util");
15
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
16
13
  // SPDX-License-Identifier: Apache-2.0
@@ -53,7 +50,6 @@ class KoniSubscription {
53
50
  await Promise.all([this.state.eventService.waitCryptoReady, this.state.eventService.waitKeyringReady, this.state.eventService.waitAssetReady]);
54
51
  const currentAddress = (_this$state$keyringSe = this.state.keyringService.currentAccount) === null || _this$state$keyringSe === void 0 ? void 0 : _this$state$keyringSe.address;
55
52
  if (currentAddress) {
56
- this.subscribeBalances(currentAddress, this.state.getChainInfoMap(), this.state.getChainStateMap(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap());
57
53
  this.subscribeCrowdloans(currentAddress, this.state.getSubstrateApiMap());
58
54
  }
59
55
  this.eventHandler = (events, eventTypes) => {
@@ -67,7 +63,6 @@ class KoniSubscription {
67
63
  if (!address) {
68
64
  return;
69
65
  }
70
- this.subscribeBalances(address, serviceInfo.chainInfoMap, serviceInfo.chainStateMap, serviceInfo.chainApiMap.substrate, serviceInfo.chainApiMap.evm);
71
66
  this.subscribeCrowdloans(address, serviceInfo.chainApiMap.substrate);
72
67
  };
73
68
  this.state.eventService.onLazy(this.eventHandler.bind(this));
@@ -80,15 +75,6 @@ class KoniSubscription {
80
75
  this.stopAllSubscription();
81
76
  return Promise.resolve();
82
77
  }
83
- subscribeBalances(address, chainInfoMap, chainStateMap, substrateApiMap, web3ApiMap, onlyRunOnFirstTime) {
84
- const addresses = this.state.getDecodedAddresses(address);
85
- if (!addresses.length) {
86
- return;
87
- }
88
- this.state.handleResetBalance(address).then(() => {
89
- this.updateSubscription('balance', this.initBalanceSubscription(addresses, chainInfoMap, chainStateMap, substrateApiMap, web3ApiMap, onlyRunOnFirstTime));
90
- }).catch(err => this.logger.warn(err));
91
- }
92
78
  subscribeCrowdloans(address, substrateApiMap, onlyRunOnFirstTime) {
93
79
  const addresses = this.state.getDecodedAddresses(address);
94
80
  if (!addresses.length) {
@@ -98,27 +84,6 @@ class KoniSubscription {
98
84
  this.updateSubscription('crowdloan', this.initCrowdloanSubscription(addresses, substrateApiMap, onlyRunOnFirstTime));
99
85
  }).catch(console.error);
100
86
  }
101
- initBalanceSubscription(addresses, chainInfoMap, chainStateMap, substrateApiMap, evmApiMap, onlyRunOnFirstTime) {
102
- const filteredChainInfoMap = {};
103
- Object.values(chainStateMap).forEach(chainState => {
104
- if (chainState.active) {
105
- filteredChainInfoMap[chainState.slug] = chainInfoMap[chainState.slug];
106
- }
107
- });
108
- const unsub = (0, _balance.subscribeBalance)(addresses, filteredChainInfoMap, substrateApiMap, evmApiMap, result => {
109
- this.state.setBalanceItem(result);
110
- });
111
- const unsub2 = this.state.subscribeMantaPayBalance();
112
- if (onlyRunOnFirstTime) {
113
- unsub && unsub();
114
- unsub2 && unsub2();
115
- return;
116
- }
117
- return () => {
118
- unsub && unsub();
119
- unsub2 && unsub2();
120
- };
121
- }
122
87
  initCrowdloanSubscription(addresses, substrateApiMap, onlyRunOnFirstTime) {
123
88
  const subscriptionPromise = (0, _crowdloan.subscribeCrowdloan)(addresses, substrateApiMap, (networkKey, rs) => {
124
89
  this.state.setCrowdloanItem(networkKey, rs);
@@ -150,36 +115,11 @@ class KoniSubscription {
150
115
  return _this.state.setNftCollection(...arguments);
151
116
  }).catch(this.logger.log);
152
117
  }
153
- async subscribeStakingReward(address) {
154
- const addresses = this.state.getDecodedAddresses(address);
155
- if (!addresses.length) {
156
- return;
157
- }
158
- const chainInfoMap = this.state.getChainInfoMap();
159
- const targetNetworkMap = {};
160
- Object.entries(chainInfoMap).forEach(_ref => {
161
- let [key, network] = _ref;
162
- const chainState = this.state.getChainStateByKey(key);
163
- if ((0, _utils._isChainEnabled)(chainState) && (0, _utils._isChainSupportSubstrateStaking)(network)) {
164
- targetNetworkMap[key] = network;
165
- }
166
- });
167
- await (0, _staking.getNominationStakingRewardData)(addresses, targetNetworkMap, rewardItem => {
168
- this.state.updateStakingReward(rewardItem);
169
- });
170
- }
171
- async reloadBalance() {
118
+ async reloadCrowdloan() {
172
119
  var _this$state$keyringSe2;
173
120
  const currentAddress = (_this$state$keyringSe2 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe2 === void 0 ? void 0 : _this$state$keyringSe2.address;
174
- await this.state.handleResetBalance(currentAddress, true);
175
- this.subscribeBalances(currentAddress, this.state.getChainInfoMap(), this.state.getChainStateMap(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap());
176
- await (0, _utils2.waitTimeout)(1800);
177
- }
178
- async reloadCrowdloan() {
179
- var _this$state$keyringSe3;
180
- const currentAddress = (_this$state$keyringSe3 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe3 === void 0 ? void 0 : _this$state$keyringSe3.address;
181
121
  this.subscribeCrowdloans(currentAddress, this.state.getSubstrateApiMap());
182
- await (0, _utils2.waitTimeout)(1800);
122
+ await (0, _utils.waitTimeout)(1800);
183
123
  }
184
124
  }
185
125
  exports.KoniSubscription = KoniSubscription;
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.1.51-2'
16
+ version: '1.1.53-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.BalanceMapImpl = void 0;
7
7
  var _constants = require("@subwallet/extension-base/constants");
8
- var _group = require("@subwallet/extension-base/services/balance-service/helpers/group");
9
8
  var _utils = require("@subwallet/extension-base/utils");
10
9
  var _rxjs = require("rxjs");
10
+ var _helpers = require("./helpers");
11
11
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
12
12
  // SPDX-License-Identifier: Apache-2.0
13
13
 
@@ -78,7 +78,7 @@ class BalanceMapImpl {
78
78
  });
79
79
  Object.entries(allAccountBalance).forEach(_ref => {
80
80
  let [tokenSlug, balanceItems] = _ref;
81
- allAccountBalanceInfo[tokenSlug] = (0, _group.groupBalance)(balanceItems, _constants.ALL_ACCOUNT_KEY, tokenSlug);
81
+ allAccountBalanceInfo[tokenSlug] = (0, _helpers.groupBalance)(balanceItems, _constants.ALL_ACCOUNT_KEY, tokenSlug);
82
82
  });
83
83
  this._map[_constants.ALL_ACCOUNT_KEY] = allAccountBalanceInfo;
84
84
  }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _group = require("./group");
7
+ Object.keys(_group).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _group[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _group[key];
14
+ }
15
+ });
16
+ });
17
+ var _subscribe = require("./subscribe");
18
+ Object.keys(_subscribe).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _subscribe[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _subscribe[key];
25
+ }
26
+ });
27
+ });
@@ -10,15 +10,27 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
10
  var _constants = require("@subwallet/extension-base/constants");
11
11
  var _balance = require("@subwallet/extension-base/koni/api/tokens/evm/balance");
12
12
  var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
13
- var _handlers = require("@subwallet/extension-base/koni/background/handlers");
14
13
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
14
+ var _utils2 = require("@subwallet/extension-base/utils");
15
15
  var _util = require("@polkadot/util");
16
16
  // Copyright 2019-2022 @subwallet/extension-base
17
17
  // SPDX-License-Identifier: Apache-2.0
18
18
 
19
- function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
20
- let tokenList = {};
19
+ function subscribeERC20Interval(_ref) {
20
+ let {
21
+ addresses,
22
+ assetMap,
23
+ callback,
24
+ chainInfo,
25
+ evmApi
26
+ } = _ref;
27
+ const chain = chainInfo.slug;
28
+ const tokenList = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.ERC20]);
21
29
  const erc20ContractMap = {};
30
+ Object.entries(tokenList).forEach(_ref2 => {
31
+ let [slug, tokenInfo] = _ref2;
32
+ erc20ContractMap[slug] = (0, _web.getERC20Contract)((0, _utils._getContractAddressOfToken)(tokenInfo), evmApi);
33
+ });
22
34
  const getTokenBalances = () => {
23
35
  Object.values(tokenList).map(async tokenInfo => {
24
36
  try {
@@ -41,41 +53,47 @@ function subscribeERC20Interval(addresses, chain, evmApiMap, callBack) {
41
53
  state: _KoniTypes.APIItemState.READY
42
54
  };
43
55
  });
44
- callBack(items);
56
+ callback(items);
45
57
  } catch (err) {
46
58
  console.log(tokenInfo.slug, err);
47
59
  }
48
60
  });
49
61
  };
50
- tokenList = _handlers.state.getAssetByChainAndAsset(chain, [_types._AssetType.ERC20]);
51
- Object.entries(tokenList).forEach(_ref => {
52
- let [slug, tokenInfo] = _ref;
53
- erc20ContractMap[slug] = (0, _web.getERC20Contract)(chain, (0, _utils._getContractAddressOfToken)(tokenInfo), evmApiMap);
54
- });
55
62
  getTokenBalances();
56
63
  const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
57
64
  return () => {
58
65
  clearInterval(interval);
59
66
  };
60
67
  }
61
- function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
68
+ function subscribeEVMBalance(params) {
69
+ var _Object$values$;
70
+ const {
71
+ addresses,
72
+ assetMap,
73
+ callback,
74
+ chainInfo,
75
+ evmApi
76
+ } = params;
77
+ const chain = chainInfo.slug;
78
+ const nativeTokenInfo = (0, _utils2.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.NATIVE]);
79
+ const nativeTokenSlug = ((_Object$values$ = Object.values(nativeTokenInfo)[0]) === null || _Object$values$ === void 0 ? void 0 : _Object$values$.slug) || '';
62
80
  function getBalance() {
63
- (0, _balance.getEVMBalance)(chain, addresses, evmApiMap).then(balances => {
81
+ (0, _balance.getEVMBalance)(chain, addresses, evmApi).then(balances => {
64
82
  return balances.map((balance, index) => {
65
83
  return {
66
84
  address: addresses[index],
67
- tokenSlug: tokenInfo.slug,
85
+ tokenSlug: nativeTokenSlug,
68
86
  state: _KoniTypes.APIItemState.READY,
69
87
  free: new _util.BN(balance || '0').toString(),
70
88
  locked: '0'
71
89
  };
72
90
  });
73
91
  }).catch(e => {
74
- console.error(`Error on get native balance with token ${tokenInfo.slug}`, e);
92
+ console.error(`Error on get native balance with token ${nativeTokenSlug}`, e);
75
93
  return addresses.map(address => {
76
94
  return {
77
95
  address: address,
78
- tokenSlug: tokenInfo.slug,
96
+ tokenSlug: nativeTokenSlug,
79
97
  state: _KoniTypes.APIItemState.READY,
80
98
  free: '0',
81
99
  locked: '0'
@@ -87,7 +105,7 @@ function subscribeEVMBalance(chain, addresses, evmApiMap, callback, tokenInfo) {
87
105
  }
88
106
  getBalance();
89
107
  const interval = setInterval(getBalance, _constants.ASTAR_REFRESH_BALANCE_INTERVAL);
90
- const unsub2 = subscribeERC20Interval(addresses, chain, evmApiMap, callback);
108
+ const unsub2 = subscribeERC20Interval(params);
91
109
  return () => {
92
110
  clearInterval(interval);
93
111
  unsub2 && unsub2();
@@ -8,7 +8,6 @@ exports.getAccountJsonByAddress = void 0;
8
8
  exports.subscribeBalance = subscribeBalance;
9
9
  var _types = require("@subwallet/chain-list/types");
10
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
- var _handlers = require("@subwallet/extension-base/koni/background/handlers");
12
11
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
13
12
  var _utils2 = require("@subwallet/extension-base/utils");
14
13
  var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
@@ -43,6 +42,8 @@ const getAccountJsonByAddress = address => {
43
42
  return null;
44
43
  }
45
44
  };
45
+
46
+ /** Filter addresses to subscribe by chain info */
46
47
  exports.getAccountJsonByAddress = getAccountJsonByAddress;
47
48
  const filterAddress = (addresses, chainInfo) => {
48
49
  const isEvmChain = (0, _utils._isChainEvmCompatible)(chainInfo);
@@ -74,40 +75,56 @@ const filterAddress = (addresses, chainInfo) => {
74
75
  }
75
76
  };
76
77
 
77
- // main subscription
78
- function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, callback) {
78
+ // interface SubscribeBlanceOptions {
79
+ // addresses: string[];
80
+ // chains: string[];
81
+ // tokens: string[];
82
+ // chainInfoMap: Record<string, _ChainInfo>;
83
+ // substrateApiMap: Record<string, _SubstrateApi>;
84
+ // evmApiMap: Record<string, _EvmApi>;
85
+ // callback: (rs: BalanceItem[]) => void;
86
+ // }
87
+
88
+ // main subscription, use for multiple chains, multiple addresses and multiple tokens
89
+ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoMap, substrateApiMap, evmApiMap, callback) {
90
+ // Filter chain and token
91
+ const chainAssetMap = Object.fromEntries(Object.entries(_chainAssetMap).filter(_ref => {
92
+ let [token] = _ref;
93
+ return tokens.includes(token);
94
+ }));
95
+ const chainInfoMap = Object.fromEntries(Object.entries(_chainInfoMap).filter(_ref2 => {
96
+ let [chain] = _ref2;
97
+ return chains.includes(chain);
98
+ }));
99
+
79
100
  // Looping over each chain
80
- const unsubList = Object.entries(chainInfoMap).map(async _ref => {
81
- let [chainSlug, chainInfo] = _ref;
101
+ const unsubList = Object.values(chainInfoMap).map(async chainInfo => {
102
+ const chainSlug = chainInfo.slug;
82
103
  const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
83
104
  if (notSupportAddresses.length) {
84
- const tokens = _handlers.state.chainService.getAssetByChainAndType(chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL]);
85
- const assetSetting = await _handlers.state.chainService.getAssetSettings();
86
- const filtered = Object.values(tokens).filter(_ref2 => {
87
- var _assetSetting$slug;
88
- let {
89
- slug
90
- } = _ref2;
91
- return (_assetSetting$slug = assetSetting[slug]) === null || _assetSetting$slug === void 0 ? void 0 : _assetSetting$slug.visible;
92
- });
105
+ const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL]);
93
106
  const now = new Date().getTime();
94
- notSupportAddresses.forEach(address => {
95
- const items = filtered.map(token => {
96
- return {
97
- address,
98
- tokenSlug: token.slug,
99
- free: '0',
100
- locked: '0',
101
- state: _KoniTypes.APIItemState.NOT_SUPPORT,
102
- timestamp: now
103
- };
104
- });
107
+ Object.values(tokens).forEach(token => {
108
+ const items = notSupportAddresses.map(address => ({
109
+ address,
110
+ tokenSlug: token.slug,
111
+ free: '0',
112
+ locked: '0',
113
+ state: _KoniTypes.APIItemState.NOT_SUPPORT,
114
+ timestamp: now
115
+ }));
105
116
  callback(items);
106
117
  });
107
118
  }
119
+ const evmApi = evmApiMap[chainSlug];
108
120
  if ((0, _utils._isPureEvmChain)(chainInfo)) {
109
- const nativeTokenInfo = _handlers.state.getNativeTokenInfo(chainSlug);
110
- return (0, _evm.subscribeEVMBalance)(chainSlug, useAddresses, evmApiMap, callback, nativeTokenInfo);
121
+ return (0, _evm.subscribeEVMBalance)({
122
+ addresses: useAddresses,
123
+ assetMap: chainAssetMap,
124
+ callback,
125
+ chainInfo,
126
+ evmApi
127
+ });
111
128
  }
112
129
 
113
130
  // if (!useAddresses || useAddresses.length === 0 || _PURE_EVM_CHAINS.indexOf(chainSlug) > -1) {
@@ -127,8 +144,8 @@ function subscribeBalance(addresses, chainInfoMap, substrateApiMap, evmApiMap, c
127
144
  // return undefined;
128
145
  // }
129
146
 
130
- const networkAPI = await substrateApiMap[chainSlug].isReady;
131
- return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainSlug, networkAPI, evmApiMap, callback);
147
+ const substrateApi = await substrateApiMap[chainSlug].isReady;
148
+ return (0, _substrate.subscribeSubstrateBalance)(useAddresses, chainInfo, chainAssetMap, substrateApi, evmApi, callback);
132
149
  });
133
150
  return () => {
134
151
  unsubList.forEach(subProm => {